diff -Nru pcsx2-1.3.1+dfsg/appveyor.yml pcsx2-1.4.0/appveyor.yml --- pcsx2-1.3.1+dfsg/appveyor.yml 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/appveyor.yml 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,35 @@ +# Static build version - changing the version dynamically means you can't +# just click from github to see how things are progressing until the build has +# finished, which could be a bit annoying. +version: 1.{build}-{branch} + +environment: + matrix: + - platform: Win32 + target: ReleaseAll + visualstudio_string: vs2015 + - platform: Win32 + VisualStudioVersion: 12.0 + target: ReleaseAll + visualstudio_string: vs2013 + +init: +# Use CRLF line endings on Windows so users can just use Notepad. + - git config --global core.autocrlf true + +build_script: + - msbuild buildbot.xml /m /t:%target% /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + +after_build: + - ps: $env:gitrev = git describe --tags + - ps: $env:my_version = "$env:gitrev-$env:appveyor_repo_branch-$env:appveyor_build_number" + - type NUL > bin\portable.ini + - set folder_name=pcsx2-%my_version%-%visualstudio_string%-%platform%-%target% + - rename bin %folder_name% + - 7z a -mx9 %folder_name%.7z %folder_name% + +test: off + +artifacts: + - path: $(folder_name).7z + name: $(visualstudio_string)-$(target) diff -Nru pcsx2-1.3.1+dfsg/bin/cheats/DE37E046.pnach pcsx2-1.4.0/bin/cheats/DE37E046.pnach --- pcsx2-1.3.1+dfsg/bin/cheats/DE37E046.pnach 2010-05-17 01:56:54.000000000 +0000 +++ pcsx2-1.4.0/bin/cheats/DE37E046.pnach 2016-01-05 17:28:08.000000000 +0000 @@ -1,15 +1,15 @@ -comment=Persona 4 Cheats - -// Max Courage -//patch=1,EE,007973F4,word,000000FF - -// Inf Money -//patch=1,EE,2079B68C,word,05F5E0FF - -// Inf Health -patch=1,EE,207973CC,word,000003E7 -patch=1,EE,007973CC,word,000003E7 - -// Inf Spirit -patch=1,EE,207973CE,word,000003E7 -patch=1,EE,007973CE,word,000003E7 +comment=Persona 4 Cheats + +// Max Courage +//patch=1,EE,007973F4,word,000000FF + +// Inf Money +//patch=1,EE,2079B68C,word,05F5E0FF + +// Inf Health +patch=1,EE,207973CC,word,000003E7 +patch=1,EE,007973CC,word,000003E7 + +// Inf Spirit +patch=1,EE,207973CE,word,000003E7 +patch=1,EE,007973CE,word,000003E7 Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/cheats_ws.zip and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/cheats_ws.zip differ diff -Nru pcsx2-1.3.1+dfsg/bin/docs/debugger.txt pcsx2-1.4.0/bin/docs/debugger.txt --- pcsx2-1.3.1+dfsg/bin/docs/debugger.txt 2014-02-27 12:22:19.000000000 +0000 +++ pcsx2-1.4.0/bin/docs/debugger.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,6 @@ disassembly view: - ctrg+g goto + ctrl+g goto ctrl+e edit breakpoint ctrl+d enable/disable breakpoint ctrl+b add breakpoint @@ -18,7 +18,7 @@ memory view: - ctrg+g goto + ctrl+g goto ctrl+b add breakpoint left move cursor back one byte/nibble right move cursor ahead one byte/nibble diff -Nru pcsx2-1.3.1+dfsg/bin/docs/pcsx2.1 pcsx2-1.4.0/bin/docs/pcsx2.1 --- pcsx2-1.3.1+dfsg/bin/docs/pcsx2.1 2015-01-13 12:17:57.000000000 +0000 +++ pcsx2-1.4.0/bin/docs/pcsx2.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -.TH "pcsx2" "1" - -.SH NAME -PCSX2 - PlayStation(R)2 console emulator - -.SH DESCRIPTION -PCSX2 is an emulator for the PlayStation(R)2 video game console. It is written mostly in C++, some part are in C and x86 assembly. -There is still lot of on going work to improve compatibility & speed. - -Visit http://pcsx2.net & https://github.com/PCSX2/pcsx2 for the latest updates. - -.SH Options -Note: all options can also be updated in the GUI. -.TP - - -.SH GENERAL OPTIONS -.TP - -.B IsoFile -Optional ISO image to load and run on startup. It uses the PCSX2 internal ISO loader. -.TP - -.B --cfg=file -Specify a custom configuration file to use instead of PCSX2.ini. It does not affect plugins. -.TP - -.B --cfgpath=directory -Specifies the config folder. It applies to pcsx2 + plugins. -.TP - -.B --forcewiz -forces running of the First-time Wizard. -.TP - - -.SH AUTO-RUN OPTIONS -.TP - -.B --elf=[file] -Executes an ELF image. -.TP - -.B --nogui -Disables display of the gui on exit (program auto-exits). -.TP - -.B --nodisc -Boots with an empty DVD tray. Use this to boot into the PS2 system menu. -.TP - -.B --usecd -Uses the configured CDVD plugin instead of IsoFile. -.TP - -.SH COMPATIBILITY OPTIONS -.TP - -.B --nohacks -Disables all speedhacks. -.TP - -.B --gamefixes=[fix1,fix2,...] -Enable specific gamefixes for this session. -Valid fixes in 0.9.7 are: VuAddSub, VuClipFlag, FpuCompare, FpuNegDiv, XGKick, IpuWait, EETiming, SkipMpeg. - -.TP -.B --fullboot -Disables the quick boot feature, forcing you to sit through the PS2 startup splash screens. -.TP - -.SH PLUGINS OVERRIDES -.TP - -.B --cdvd=[libpath] -Override for the CDVD plugin. -.TP - -.B --gs=[libpath] -Override for the GS plugin. - -.TP -.B --spu=[libpath] -Override for the SPU2 plugin. -.TP - -.B --pad=[libpath] -Override for the PAD plugin. -.TP - -.B --dev9=[libpath] -Override for the DEV9 plugin. -.TP - -.B --usb=[libpath] -Override for the USB plugin only. - - -.SH FILES AND DIRECTORIES -$XDG_HOME_DIR/pcsx2 or $HOME/.config/pcsx2 -All pcsx2 configurations and user datas. - -.SH "REPORTING BUGS" -You can report bugs using the bug tracker at the pcsx2 google project, located at - -http://code.google.com/p/pcsx2 - - -.SH AUTHORS -Please refer to the "About" section of the gui interface or the documentation. - -.SH PCSX2 RELATED WEBSITES -.TP -PCSX2 google project: -http://code.google.com/p/pcsx2 - -.TP -PCSX2 web site: -http://pcsx2.net - -.TP -PCSX2 forum -http://forums.pcsx2.net - -.SH "COPYRIGHT NOTICE" -Copyright \(co 2002-2010 PCSX2 Dev Team - -This is free documentation; 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 3 of -the License, or (at your option) any later version. - -The GNU General Public License's references to "object code" -and "executables" are to be interpreted as the output of any -document formatting or typesetting system, including -intermediate and printed output. - -This manual 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 manual; if not, see -. diff -Nru pcsx2-1.3.1+dfsg/bin/docs/PCSX2.1 pcsx2-1.4.0/bin/docs/PCSX2.1 --- pcsx2-1.3.1+dfsg/bin/docs/PCSX2.1 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/bin/docs/PCSX2.1 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,145 @@ +.TH "pcsx2" "1" + +.SH NAME +PCSX2 - PlayStation(R)2 console emulator + +.SH DESCRIPTION +PCSX2 is an emulator for the PlayStation(R)2 video game console. It is written mostly in C++, some part are in C and x86 assembly. +There is still lot of on going work to improve compatibility & speed. + +Visit http://pcsx2.net & https://github.com/PCSX2/pcsx2 for the latest updates. + +.SH Options +Note: all options can also be updated in the GUI. +.TP + + +.SH GENERAL OPTIONS +.TP + +.B IsoFile +Optional ISO image to load and run on startup. It uses the PCSX2 internal ISO loader. +.TP + +.B --cfg=file +Specify a custom configuration file to use instead of PCSX2.ini. It does not affect plugins. +.TP + +.B --cfgpath=directory +Specifies the config folder. It applies to pcsx2 + plugins. +.TP + +.B --forcewiz +forces running of the First-time Wizard. +.TP + + +.SH AUTO-RUN OPTIONS +.TP + +.B --elf=[file] +Executes an ELF image. +.TP + +.B --nogui +Disables display of the gui on exit (program auto-exits). +.TP + +.B --nodisc +Boots with an empty DVD tray. Use this to boot into the PS2 system menu. +.TP + +.B --usecd +Uses the configured CDVD plugin instead of IsoFile. +.TP + +.SH COMPATIBILITY OPTIONS +.TP + +.B --nohacks +Disables all speedhacks. +.TP + +.B --gamefixes=[fix1,fix2,...] +Enable specific gamefixes for this session. +Valid fixes in 0.9.7 are: VuAddSub, VuClipFlag, FpuCompare, FpuNegDiv, XGKick, IpuWait, EETiming, SkipMpeg. + +.TP +.B --fullboot +Disables the quick boot feature, forcing you to sit through the PS2 startup splash screens. +.TP + +.SH PLUGINS OVERRIDES +.TP + +.B --cdvd=[libpath] +Override for the CDVD plugin. +.TP + +.B --gs=[libpath] +Override for the GS plugin. + +.TP +.B --spu=[libpath] +Override for the SPU2 plugin. +.TP + +.B --pad=[libpath] +Override for the PAD plugin. +.TP + +.B --dev9=[libpath] +Override for the DEV9 plugin. +.TP + +.B --usb=[libpath] +Override for the USB plugin only. + + +.SH FILES AND DIRECTORIES +$XDG_HOME_DIR/pcsx2 or $HOME/.config/pcsx2 +All pcsx2 configurations and user datas. + +.SH "REPORTING BUGS" +You can report bugs by submitting an issue at the pcsx2 GitHub issue tracker, located at + +https://github.com/PCSX2/pcsx2/issues + + +.SH AUTHORS +Please refer to the "About" section of the gui interface or the documentation. + +.SH PCSX2 RELATED WEBSITES +.TP +PCSX2 google project: +http://code.google.com/p/pcsx2 + +.TP +PCSX2 web site: +http://pcsx2.net + +.TP +PCSX2 forum +http://forums.pcsx2.net + +.SH "COPYRIGHT NOTICE" +Copyright \(co 2002-2010 PCSX2 Dev Team + +This is free documentation; 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 3 of +the License, or (at your option) any later version. + +The GNU General Public License's references to "object code" +and "executables" are to be interpreted as the output of any +document formatting or typesetting system, including +intermediate and printed output. + +This manual 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 manual; if not, see +. Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/docs/PCSX2_FAQ.pdf and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/docs/PCSX2_FAQ.pdf differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/docs/PCSX2_Readme.pdf and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/docs/PCSX2_Readme.pdf differ diff -Nru pcsx2-1.3.1+dfsg/bin/GameIndex.dbf pcsx2-1.4.0/bin/GameIndex.dbf --- pcsx2-1.3.1+dfsg/bin/GameIndex.dbf 2015-01-01 00:50:37.000000000 +0000 +++ pcsx2-1.4.0/bin/GameIndex.dbf 2016-01-05 17:28:08.000000000 +0000 @@ -75,6 +75,19 @@ -- mvuFlagSpeedHack = 1 or 0 // Katamari Damacy have weird speed bug when this speed hack is enabled (and it is by default) --------------------------------------------- +-- Memory Card Filter Override (MemCardFilter = s) +--------------------------------------------- +-- By default, the FolderMemoryCard filters save games based on the +-- game's serial, which means that only saves whose folder names contain +-- the game's serial are loaded. This works fine for the vast majority +-- of games, but fails in some cases, for which this override is for. +-- Examples include multi-disc games, where later games often reuse the +-- serial of the previous disc(s), and games that allow transfer of save +-- data between different games, such as importing data from a prequel. +-- To allow multiple serials separate them with slashes, like this: +-- MemCardFilter = SLUS-12345/SLUS-12346/SLUS-12347 + +--------------------------------------------- -- Patches ([patches] or [patches = crc]) --------------------------------------------- -- Patches must be specified in blocks. @@ -88,42350 +101,43226 @@ --------------------------------------------- -- Game List --------------------------------------------- -Serial = SLES-55671 -Name = FIFA 14 -Region = PAL-M5 ---------------------------------------------- -Serial = SLES-55672 -Name = FIFA 14 -Region = PAL ---------------------------------------------- -Serial = SLES-55673 -Name = Pro Evolution Soccer 2014 -Region = PAL ---------------------------------------------- -Serial = SLES-55674 -Name = Pro Evolution Soccer 2014 -Region = PAL ---------------------------------------------- -Serial = SLES-55675 -Name = Pro Evolution Soccer 2014 -Region = PAL ---------------------------------------------- -Serial = SLES-55676 -Name = Pro Evolution Soccer 2014 -Region = PAL ---------------------------------------------- -Serial = SLUS-21955 -Name = Pro Evolution Soccer 2013 -Region = NTSC-U ---------------------------------------------- -Serial = SLPM-66629 -Name = Dirge of Cerberus - Final Fantasy VII International -Region = NTSC-J ---------------------------------------------- -Serial = SLPS-25915 -Name = The King of Fighters 2002 - Unlimited Match +Serial = PAPX-90512 +Name = Gran Turismo 4 - Toyota Prius [Trial] Region = NTSC-J +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works --------------------------------------------- -Serial = SLPS-25983 -Name = The King of Fighters 2002 - Unlimited Match +Serial = PBPX-95201 +Name = Dead or Alive 2 Region = NTSC-J +Compat = 5 +[patches = 70D26E09] + // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function + patch=0,EE,00290408,word,24060000 +[/patches] --------------------------------------------- -Serial = SCUS-90174 -Name = Toy Story 3 (PlayStation 2 Bundle) -Region = NTSC-U +Serial = PBPX-95205 +Name = Playstation 2 - Demo Disc 2000 +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-94346 -Name = Singstar Latino +Serial = PBPX-95503 +Name = Gran Turismo 3 - A-Spec [PS2 Bundle] Region = NTSC-U --------------------------------------------- -Serial = SCUS-97097 +Serial = PBPX-95517 Name = Network Adapter Start-Up Disc Region = NTSC-U --------------------------------------------- -Serial = SCUS-97101 -Name = Twisted Metal - Black -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SCUS-97102 -Name = Gran Turismo 3 - A-Spec -Region = NTSC-U +Serial = PBPX-95524 +Name = Gran Turismo 4 - Prologue +Region = NTSC-Unk Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +//[patches = CA6243B9] +// +// comment=patches by Nachbrenner + +// //fix IPU DMA +// patch=1,EE,00166814,word,00000000 +// patch=1,EE,003a36b8,word,00000000 +// patch=1,EE,003a36f4,word,00000000 +// //Skip Videos +// patch=1,EE,001e3718,word,03e00008 +// patch=1,EE,001e371c,word,00000000 +// +//[/patches] --------------------------------------------- -Serial = SCUS-97104 -Name = ATV Off-Road Fury -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SCUS-97105 -Name = Fantavision -Region = NTSC-U +Serial = PCPX-96649 +Name = Gran Turismo 4 [Demo] +Region = NTSC-J Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +//[patches = E906EA37] +// +// comment=patches by mdr61 +// +// //Timelimit counter stop +// patch=0,EE,002EF740,word,00000000 +// //Pause counter stop +// patch=0,EE,002C7394,word,00000000 +// patch=0,EE,002F1F40,word,00000000 +// +//[/patches] --------------------------------------------- -Serial = SCUS-97106 -Name = NFL GameDay 2001 -Region = NTSC-U +Serial = SCAJ-10001 +Name = Makai Senki Disgaea +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97107 -Name = NCAA GameBreaker 2001 -Region = NTSC-U +Serial = SCAJ-10003 +Name = Taiko no Tatsujin Doki +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97108 -Name = Cool Boarders 2001 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-10004 +Name = Time Crisis 2 [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97109 -Name = NCAA Final Four 2001 -Region = NTSC-U +Serial = SCAJ-10006 +Name = Taiko no Tatsujin 3 - Appare Sandaime +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97110 -Name = NHL FaceOff 2001 -Region = NTSC-U +Serial = SCAJ-10007 +Name = Taiko no Tatsujin - Waku Waku Anime Matsuri +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97111 -Name = Dark Cloud -Region = NTSC-U -Compat = 5 +Serial = SCAJ-10008 +Name = Taiko no Tatsujin Atsumare Yonndaime +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97112 -Name = Extermination -Region = NTSC-U -Compat = 5 +Serial = SCAJ-10009 +Name = Psikyo Shooting Collection Vol.1 - Strikers 1&2 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97113 -Name = Ico -Region = NTSC-U +Serial = SCAJ-10010 +Name = Mahjong Party - Play Mahjong with Swimsuit Beauty +Region = NTSC-Unk Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. ---------------------------------------------- -Serial = SCUS-97114 -Name = NBA ShootOut 2001 -Region = NTSC-U --------------------------------------------- -Serial = SCUS-97115 -Name = Gran Turismo 3 - A-Spec [Demo] -Region = NTSC-U +Serial = SCAJ-10011 +Name = Taiko no Tatsujin Go! Go! Godaime +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97116 -Name = Kiosk Demo Disc 2.01 -Region = NTSC-U +Serial = SCAJ-10012 +Name = Taiko Drum Master +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97117 -Name = PlayStation 2 Demo Disc Version 2.1 [Need for Speed - Underground] -Region = NTSC-U +Serial = SCAJ-10013 +Name = Taiko no Tatsujin - Tobikkiri! Anime Special +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97118 -Name = NFL GameDay 2001 [Demo] -Region = NTSC-U +Serial = SCAJ-10014 +Name = Taiko no Tatsujin Wai Wai Happy Muyome +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97120 -Name = PlayStation Underground Demo Disc 4.4 [Disc1&2] -Region = NTSC-U +Serial = SCAJ-10015 +Name = Taiko No Tatsujin Doka! To Omori 7Daime +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97121 -Name = PlayStation Underground 4.3 [Disc2] -Region = NTSC-U +Serial = SCAJ-20001 +Name = Ratchet & Clank +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97122 -Name = ATV Off-Road Fury [Demo] -Region = NTSC-U +Serial = SCAJ-20002 +Name = Gallop Racer 6 - Revolution +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97123 -Name = Disney's Monsters Inc. -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20003 +Name = Warrior in Argus +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97124 -Name = Jak and Daxter - The Precursor Legacy -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20004 +Name = dot Hack Vol.3 +Region = NTSC-Unk +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCUS-97125 -Name = Frequency -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20005 +Name = Guilty Gear XX +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97126 -Name = PlayStation 2 Demo Disc Version 2.2 -Region = NTSC-U +Serial = SCAJ-20006 +Name = Gunbarl Collection with Time Crisis +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97127 -Name = Kiosk Demo Disc 2.02 -Region = NTSC-U +Serial = SCAJ-20007 +Name = Xi(sai) Go +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97128 -Name = Drakan - The Ancients' Gates // aka "Drakan 2" -Region = NTSC-U -Compat = 5 -EETimingHack = 1 // flickery textures +Serial = SCAJ-20008 +Name = V-Rally 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97129 -Name = Okage - Shadow King -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20009 +Name = Herdy Gerdy +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97130 -Name = Hot Shots Golf 3 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20010 +Name = Bakusou Dekotora Densetsu 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97131 -Name = NFL GameDay 2002 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20011 +Name = Armored Core 3 - Silent Line +Region = NTSC-Unk +MemCardFilter = SCAJ-20011/SCPS-55014/SLPS-25112/SLPS-25169/SLPS-73417/SLPS-73420 --------------------------------------------- -Serial = SCUS-97132 -Name = Kinetica -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20012 +Name = Venus & Braves +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97133 -Name = Getaway, The -Region = NTSC-U +Serial = SCAJ-20013 +Name = Moto GP 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97134 -Name = SOCOM - U.S. Navy SEALs -Region = NTSC-U +Serial = SCAJ-20014 +Name = Time Splitter +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97136 -Name = NCAA Final Four 2002 -Region = NTSC-U +Serial = SCAJ-20015 +Name = Shin Megami Tensei III: Nocturne +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97140 -Name = Mark of Kri, The -Region = NTSC-U -Compat = 4 -[patches = DBD09DD4] - comment=COP2 flag instance patch - // pair of vsubs with associated cfc2s - patch=0,EE,002EA424,word,48468801 - patch=0,EE,002EA434,word,4BC311AC - - // bunch of vclips without enough cycles before reading the clip flag - patch=0,EE,00329110,word,48489000 - patch=0,EE,00329124,word,4BDAD1FF - - patch=0,EE,0032916C,word,48459000 - patch=0,EE,00329180,word,4BDAD1FF - - patch=0,EE,003291DC,word,48459000 - patch=0,EE,003291F0,word,4BDAD1FF - - patch=0,EE,0032924C,word,48459000 - patch=0,EE,00329260,word,4BDAD1FF - - patch=0,EE,003292BC,word,48459000 - patch=0,EE,003292D0,word,4BDAD1FF - - patch=0,EE,0032940C,word,48459000 - patch=0,EE,00329420,word,4BDAD1FF -[/patches] +Serial = SCAJ-20016 +Name = Warrior of Argus +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97144 -Name = PlayStation Underground 5.1 -Region = NTSC-U +Serial = SCAJ-20017 +Name = Sly Cooper +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97145 -Name = Disney's Stitch - Experiment 626 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20018 +Name = This is Football 2003 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97146 -Name = Disney's Treasure Planet -Region = NTSC-U +Serial = SCAJ-20019 +Name = Arc the Lad - Twilight of the Spirits +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97147 -Name = Cool Boarders 2001 [Demo] -Region = NTSC-U +Serial = SCAJ-20020 +Name = Drag-on Dragoon +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97149 -Name = Jampack Demo Disc - Summer 2001 -Region = NTSC-U +Serial = SCAJ-20021 +Name = Metal Slug 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97150 -Name = Formula One 2001 -Region = NTSC-U -Compat = 3 -[patches = 272F1C14] - comment=patches by Plot and Ref Skip videos - patch=0,EE,0010aafc,word,00000000 - patch=0,EE,0010ae2c,word,00000000 - patch=0,EE,00230010,word,00000000 -[/patches] +Serial = SCAJ-20022 +Name = Super Robot Wars - Alpha 2nd +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97152 -Name = Dark Cloud [Demo] -Region = NTSC-U +Serial = SCAJ-20023 +Name = Soul Calibur II +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97153 -Name = Vans Warped Tour '01 [Demo] -Region = NTSC-U +Serial = SCAJ-20024 +Name = dot Hack Vol.4 +Region = NTSC-Unk +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCUS-97155 -Name = PlayStation 2 Demo Disc Version 2.3 -Region = NTSC-U +Serial = SCAJ-20025 +Name = Grand Prix Challenge +Region = NTSC-Unk +VIFFIFOHack = 1 --------------------------------------------- -Serial = SCUS-97156 -Name = Kiosk Demo Disc 2.03 -Region = NTSC-U +Serial = SCAJ-20026 +Name = Generation of Chaos 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97157 -Name = Frequency [Demo] -Region = NTSC-U +Serial = SCAJ-20027 +Name = Tenchu 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97158 -Name = Official U.S. PlayStation Magazine Demo Disc 049 -Region = NTSC-U +Serial = SCAJ-20028 +Name = Tales of Destiny 2 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97159 -Name = Ico [Demo] -Region = NTSC-U +Serial = SCAJ-20029 +Name = R-Type Final +Region = NTSC-Unk Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SCUS-97160 -Name = Extermination [Demo] -Region = NTSC-U +Serial = SCAJ-20032 +Name = Mosquito - Let's Go Hawaiian +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97161 -Name = Kinetica [Demo] -Region = NTSC-U +Serial = SCAJ-20033 +Name = Guilty Gear XX #Reload +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97163 -Name = Jampack Demo Disc - Winter 2001 -Region = NTSC-U +Serial = SCAJ-20034 +Name = Summon Night 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97164 -Name = Twisted Metal Black [Demo] -Region = NTSC-U +Serial = SCAJ-20035 +Name = Deat to Rights +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97165 -Name = Official U.S. PlayStation Magazine Demo Disc 051 -Region = NTSC-U +Serial = SCAJ-20037 +Name = Monster Farm 4 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97166 -Name = PlayStation Underground Holiday 2001 -Region = NTSC-U +Serial = SCAJ-20038 +Name = Arc the Lad - Twilight of the Spirits +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97167 -Name = PaRappa the Rapper 2 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20039 +Name = Sidewinder V +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97169 -Name = Drakan - The Ancients' Gates [Demo] // aka "Drakan 2 [Demo]" -Region = NTSC-U +Serial = SCAJ-20040 +Name = King of Fighters 2001, The +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97170 -Name = Jak and Daxter - The Precursor Legacy [Cingular Wireless Demo] -Region = NTSC-U +Serial = SCAJ-20041 +Name = Energy Airforce - Aim Strike! +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97171 -Name = Jak and Daxter - The Precursor Legacy [PS Underground Demo] -Region = NTSC-U +Serial = SCAJ-20043 +Name = Chain Drive +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97172 -Name = World Tour Soccer 2002 -Region = NTSC-U +Serial = SCAJ-20044 +Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" +Region = NTSC-Unk +//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang --------------------------------------------- -Serial = SCUS-97173 -Name = Jet X2O -Region = NTSC-U -Compat = 4 +Serial = SCAJ-20045 +Name = Shadow Tower Abyss +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97174 -Name = Kiosk Demo Disc 2.04 -Region = NTSC-U +Serial = SCAJ-20046 +Name = Siren +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97175 -Name = NCAA Final Four 2002 [Demo] -Region = NTSC-U +Serial = SCAJ-20047 +Name = Time Crisis 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97176 -Name = Official U.S. PlayStation Magazine Demo Disc 053 -Region = NTSC-U +Serial = SCAJ-20048 +Name = R - Racing Evolution +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97177 -Name = Downhill Domination -Region = NTSC-U -Compat = 5 ---------------------------------------------- -Serial = SCUS-97179 -Name = Twisted Metal Black -Region = NTSC-U -Compat = 5 ---------------------------------------------- -Serial = SCUS-97181 -Name = Official U.S. PlayStation Magazine Demo Disc 055 -Region = NTSC-U +Serial = SCAJ-20050 +Name = Fatal Frame 2 - Crimson Butterfly +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97182 -Name = Official U.S. PlayStation Magazine Demo Disc 056 -Region = NTSC-U +Serial = SCAJ-20055 +Name = Battle Gear 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97183 -Name = Official U.S. PlayStation Magazine Demo Disc 057 -Region = NTSC-U +Serial = SCAJ-20056 +Name = Bujingai +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97184 -Name = Official U.S. PlayStation Magazine Demo Disc 058 -Region = NTSC-U +Serial = SCAJ-20057 +Name = Front Mission 4 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97185 -Name = Official U.S. PlayStation Magazine Demo Disc 059 -Region = NTSC-U +Serial = SCAJ-20058 +Name = Terminator 3 - Rise of the Machines +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97186 -Name = Official U.S. PlayStation Magazine Demo Disc 060 -Region = NTSC-U +Serial = SCAJ-20059 +Name = Minna no Golf 4 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97187 -Name = Official U.S. PlayStation Magazine Demo Disc 061 -Region = NTSC-U +Serial = SCAJ-20060 +Name = Time Crisis 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97188 -Name = Official U.S. PlayStation Magazine Demo Disc 062 -Region = NTSC-U +Serial = SCAJ-20061 +Name = Seven Samurai 20XX +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97189 -Name = Official U.S. PlayStation Magazine Demo Disc 063 -Region = NTSC-U +Serial = SCAJ-20062 +Name = Crouching Tiger, Hidden Dragon +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97190 -Name = Official U.S. PlayStation Magazine Demo Disc 064 -Region = NTSC-U +Serial = SCAJ-20063 +Name = Popolocrois - The Law of the Moon +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97191 -Name = Official U.S. PlayStation Magazine Demo Disc 065 -Region = NTSC-U +Serial = SCAJ-20064 +Name = Nebula - Echo Night +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97192 -Name = World Tour Soccer 2002 [Demo] -Region = NTSC-U +Serial = SCAJ-20065 +Name = EyeToy - Play [with Camera] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97194 -Name = NFL GameDay 2003 -Region = NTSC-U +Serial = SCAJ-20066 +Name = Gran Turismo 4 - Prologue +Region = NTSC-Unk +Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SCUS-97195 -Name = Twisted Metal Black - Online -Region = NTSC-U +Serial = SCAJ-20067 +Name = GunGrave O.D. +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97196 -Name = Twisted Metal Black - Online [Demo] -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20068 +Name = Final Fantasy X-2 International +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97197 -Name = War of the Monsters -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20069 +Name = Gallop Racer - Lucky 7 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97198 -Name = Sly Cooper and the Thievius Raccoonus -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20070 +Name = Star Ocean 3 [Director's Cut] +Region = NTSC-Unk +VuAddSubHack = 1 --------------------------------------------- -Serial = SCUS-97199 -Name = Ratchet & Clank -Region = NTSC-U +Serial = SCAJ-20072 +Name = Ghost in the Shell - Stand Alone Complex +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97200 -Name = Kiosk Demo Disc 2.05 -Region = NTSC-U +Serial = SCAJ-20073 +Name = Jak and Daxter II +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97201 -Name = Mark of Kri, The -Region = NTSC-U +Serial = SCAJ-20074 +Name = King of Fighters 2002, The +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97203 -Name = Wild ARMs 3 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20075 +Name = Dragon Quest V - Bride of the Sky +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97204 -Name = NCAA Final Four 2003 -Region = NTSC-U +Serial = SCAJ-20076 +Name = Armored Core - Nexus [Disc 1] +Region = NTSC-Unk +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SCUS-97205 -Name = SOCOM - U.S. Navy SEALs [Demo] -Region = NTSC-U +Serial = SCAJ-20077 +Name = Armored Core - Nexus [Disc 2] +Region = NTSC-Unk +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SCUS-97206 -Name = PlayStation Underground Jampack Summer 2002 -Region = NTSC-U +Serial = SCAJ-20078 +Name = Kuon +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97208 -Name = Hot Shots Golf 3 & Parappa the Rapper 2 [Demo] -Region = NTSC-U +Serial = SCAJ-20079 +Name = Katamari Damacy +Region = NTSC-Unk +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SCUS-97209 -Name = Ratchet & Clank [E3 Demo] -Region = NTSC-U +Serial = SCAJ-20080 +Name = Kaena +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97210 -Name = Sly Cooper and the Thievius Raccoonus [Demo] -Region = NTSC-U +Serial = SCAJ-20081 +Name = Xenosaga Freaks +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97211 -Name = ATV Off-Road Fury 2 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20082 +Name = GunGrave OD +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97212 -Name = My Street (Online) -Region = NTSC-U -Compat = 4 +Serial = SCAJ-20083 +Name = Bakuso! Mountain Bikers +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97213 -Name = Dark Cloud 2 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20084 +Name = MLB '04 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97214 -Name = NCAA GameBreaker 2003 -Region = NTSC-U +Serial = SCAJ-20085 +Name = Sakurazaka Shouboutai +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97216 -Name = PlayStation Underground Summer Sampler -Region = NTSC-U +Serial = SCAJ-20086 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc1of2] +Region = NTSC-Unk +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SCUS-97217 -Name = NBA Shootout 2003 -Region = NTSC-U +Serial = SCAJ-20087 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc2of2] +Region = NTSC-Unk +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SCUS-97218 -Name = Kiosk Demo Disc 2.06 -Region = NTSC-U +Serial = SCAJ-20088 +Name = UO Nanatsu no Mizu to Densetsu no Nushi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97219 -Name = Gran Turismo 3 - A-Spec - Nissan 350Z Edition -Region = NTSC-U +Serial = SCAJ-20089 +Name = Athens 2004 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97220 -Name = NHL FaceOff 2003 -Region = NTSC-U +Serial = SCAJ-20090 +Name = Gacha Mecha Stadium - Saru Battle +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97222 -Name = Mark of Kri [Demo] -Region = NTSC-U +Serial = SCAJ-20092 +Name = Samurai Spirits Zero +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97223 -Name = NFL GameDay 2003 [Demo] -Region = NTSC-U +Serial = SCAJ-20093 +Name = Tenchu Kurenai +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97224 -Name = Wild ARMs 3 [Demo] -Region = NTSC-U +Serial = SCAJ-20094 +Name = Minna no Golf 4 [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97226 -Name = NCAA GameBreaker 2003 [Demo] -Region = NTSC-U +Serial = SCAJ-20095 +Name = Digital Devil Saga: Avatar Tuner +Region = NTSC-Unk +EETimingHack = 1 --------------------------------------------- -Serial = SCUS-97227 -Name = Kiosk Demo Disc 2.07 -Region = NTSC-U +Serial = SCAJ-20096 +Name = Guilty Gear Isuka +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97229 -Name = Dark Cloud 2 [Demo] -Region = NTSC-U +Serial = SCAJ-20097 +Name = EyeToy - FuriFuri Dance Tengoku +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97230 -Name = SOCOM - U.S. Navy SEALs (Online) -Region = NTSC-U +Serial = SCAJ-20098 +Name = EyeToy - Oosawagi! Ukkiiuki Game +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97231 -Name = Arc the Lad - Twilight of the Spirits -Region = NTSC-U +Serial = SCAJ-20099 +Name = Ico +Region = NTSC-Unk Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCUS-97232 -Name = Getaway [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97233 -Name = World Tour Soccer 2003 -Region = NTSC-U +Serial = SCAJ-20100 +Name = Tenchu Kurenai +Region = NTSC-Ch-J --------------------------------------------- -Serial = SCUS-97234 -Name = Jampack Demo Disc - Winter 2002 [M-Rated] -Region = NTSC-U +Serial = SCAJ-20101 +Name = EyeToy - Saru +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97235 -Name = Jampack Demo Disc - Winter 2002 [T-Rated] -Region = NTSC-U +Serial = SCAJ-20102 +Name = Tales of Symphonia +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97236 -Name = World Tour Soccer 2003 [Demo] -Region = NTSC-U +Serial = SCAJ-20104 +Name = Ace Combat 5 - The Unsung War +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97238 -Name = ATV Off-Road Fury 2 [Demo] -Region = NTSC-U +Serial = SCAJ-20105 +Name = Armored Core - Ninebreaker +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97239 -Name = Jet X2O [Demo] -Region = NTSC-U +Serial = SCAJ-20107 +Name = Bakufuu Slash! Kizna Arashi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97240 -Name = Ratchet & Clank [EB Games Demo] -Region = NTSC-U +Serial = SCAJ-20108 +Name = Arc the Lad - Generation +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97241 -Name = Official U.S. PlayStation Magazine Demo Disc 066 -Region = NTSC-U +Serial = SCAJ-20109 +Name = Ratchet & Clank 3 - Up your Arsenal +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97242 -Name = Official U.S. PlayStation Magazine Demo Disc 067 -Region = NTSC-U +Serial = SCAJ-20110 +Name = Dragon Quest VIII - Sora to Daichi to Norowareshi Himegimi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97243 -Name = Official U.S. PlayStation Magazine Demo Disc 068 -Region = NTSC-U +Serial = SCAJ-20111 +Name = Crash Bandicoot 5 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97244 -Name = Official U.S. PlayStation Magazine Demo Disc 069 -Region = NTSC-U +Serial = SCAJ-20112 +Name = Tales of Rebirth +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97245 -Name = Official U.S. PlayStation Magazine Demo Disc 070 -Region = NTSC-U +Serial = SCAJ-20113 +Name = Dragon Quest & Final Fantasy in Itadaki Street +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97246 -Name = Official U.S. PlayStation Magazine Demo Disc 071 -Region = NTSC-U +Serial = SCAJ-20114 +Name = Tsukiyo ni Saraba +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97247 -Name = Official U.S. PlayStation Magazine Demo Disc 072 -Region = NTSC-U +Serial = SCAJ-20115 +Name = Yoshitsune Eiyuuden +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97248 -Name = Official U.S. PlayStation Magazine Demo Disc 073 -Region = NTSC-U +Serial = SCAJ-20116 +Name = Death by Degrees - Tekken - Nina Williams +Region = NTSC-Ch-J --------------------------------------------- -Serial = SCUS-97249 -Name = Official U.S. PlayStation Magazine Demo Disc 074 -Region = NTSC-U +Serial = SCAJ-20117 +Name = Fuun Bakumatsuden +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97250 -Name = Official U.S. PlayStation Magazine Demo Disc 075 -Region = NTSC-U +Serial = SCAJ-20118 +Name = Radiata Stories +Region = NTSC-J +VuAddSubHack = 1 --------------------------------------------- -Serial = SCUS-97251 -Name = Official U.S. PlayStation Magazine Demo Disc 076 -Region = NTSC-U +Serial = SCAJ-20119 +Name = Gladiator - Road to Freedom +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97252 -Name = Official U.S. PlayStation Magazine Demo Disc 077 -Region = NTSC-U +Serial = SCAJ-20120 +Name = Digital Devil Saga: Avatar Tuner 2 +Region = NTSC-Unk +EETimingHack = 1 +MemCardFilter = SCAJ-20120/SLPM-65795/SLPM-66373/SCAJ-20095/SLPM-65597/SLPM-66372 --------------------------------------------- -Serial = SCUS-97253 -Name = NBA Shootout 2003 [Demo] -Region = NTSC-U +Serial = SCAJ-20121 +Name = Armored Core - Formula Front +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97256 -Name = MLB 2004 -Region = NTSC-U +Serial = SCAJ-20122 +Name = Swords of Destiny +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97257 -Name = MLB 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-20123 +Name = Wild ARMs - The 4th Detonator +Region = NTSC-Unk +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SCUS-97258 -Name = Amplitude -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20124 +Name = Romancing Saga - Minstrel Song +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97259 -Name = NHL FaceOff 2003 [Demo] -Region = NTSC-U +Serial = SCAJ-20125 +Name = Tekken 5 +Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- -Serial = SCUS-97260 -Name = War of the Monsters [Demo] -Region = NTSC-U +Serial = SCAJ-20126 +Name = Tekken 5 +Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- -Serial = SCUS-97261 -Name = Kiosk Demo Disc 2.08 -Region = NTSC-U +Serial = SCAJ-20127 +Name = EyeToy - Play 2 [with Camera] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97262 -Name = Amplitude [Demo] -Region = NTSC-U +Serial = SCAJ-20128 +Name = EyeToy - Play 2 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97263 -Name = My Street [Demo] -Region = NTSC-U +Serial = SCAJ-20129 +Name = Ponkotsu Roman Daikatsugeki Bumpy Trot +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97264 -Name = Syphon Filter - The Omega Strain -Region = NTSC-U -Compat = 5 -EETimingHack = 1 //random hangs -[patches = D5605611] - comment=COP2 patch by Refraction - patch=0,EE,003735F8,word,48438000 - patch=0,EE,003735FC,word,4B06521B -[/patches] +Serial = SCAJ-20130 +Name = Namco x Capcom +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97265 -Name = Jak II -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20131 +Name = namCollection - Namco 50th Anniversary +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97266 -Name = Final Fantasy XI [Disc1of2] -Region = NTSC-U -Compat = 3 +Serial = SCAJ-20132 +Name = Drag-On Dragon 2 - Fuuin no Kurenai (Love Red, Ambivalence Black) +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97268 -Name = Ratchet & Clank - Going Commando -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20133 +Name = Kagero 2 - Dark Illusion +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97269 -Name = Final Fantasy XI [Disc2of2] -Region = NTSC-U -Compat = 2 +Serial = SCAJ-20134 +Name = Genji +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97270 -Name = Kiosk Demo Disc 2.09 -Region = NTSC-U +Serial = SCAJ-20135 +Name = Minna Daisuki Katamari Damacy +Region = NTSC-Unk +vuClampMode = 3 +mvuFlagSpeedHack = 0 +MemCardFilter = SCAJ-20135/SLPS-25467/SLPS-73241/SCAJ-20079/SLPS-25360/SLPS-73210/SLPS-73240 --------------------------------------------- -Serial = SCUS-97271 -Name = Final Fantasy XI - Online [Beta Version] [Disc1of2] -Region = NTSC-U +Serial = SCAJ-20136 +Name = Ace Combat 5 - The Unsung War [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97272 -Name = Final Fantasy XI - Online [Beta Version] [Disc2of2] -Region = NTSC-U +Serial = SCAJ-20137 +Name = Musashiden II - Blademaster +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97273 -Name = Jak II [Demo] -Region = NTSC-U +Serial = SCAJ-20138 +Name = Ape Escape 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97274 -Name = Jak II [Video Demo] -Region = NTSC-U +Serial = SCAJ-20139 +Name = New Zero - Rei - Irezumi no Sei +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97275 -Name = SOCOM II - U.S. Navy SEALs -Region = NTSC-U -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SCAJ-20140 +Name = Bleach - Erabareshi Tamashi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97276 -Name = NFL GameDay 2004 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20141 +Name = Grandia III +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97277 -Name = NCAA GameBreaker 2004 -Region = NTSC-U +Serial = SCAJ-20143 +Name = Armored Core - Last Raven +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97278 -Name = NCAA Final Four 2004 -Region = NTSC-U +Serial = SCAJ-20144 +Name = Saru Gechu 3 (Ape Escape 3) +Region = NTSC-Ch-J --------------------------------------------- -Serial = SCUS-97279 -Name = Jet Li - Rise to Honor -Region = NTSC-U +Serial = SCAJ-20145 +Name = Tales of Legendia +Region = NTSC-J +--------------------------------------------- +Serial = SCAJ-20146 +Name = Shadow of the Colossus +Region = NTSC-Ch-E-J Compat = 5 +MemCardFilter = SCAJ-20146/SCAJ-20196/SCAJ-20099/SCPS-11003/SCPS-19103/SCPS-19151/SCPS-55001 --------------------------------------------- -Serial = SCUS-97280 -Name = Jampack Demo Disc - Summer 2003 [T-Rated] -Region = NTSC-U +Serial = SCAJ-20147 +Name = Heavy Metal Thunder +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97281 -Name = Jampack Demo Disc - Summer 2003 [M-Rated] -Region = NTSC-U +Serial = SCAJ-20148 +Name = Tokyo Bus Guide 2 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97282 -Name = Arc the Lad - Twilight of the Spirits [Demo] -Region = NTSC-U +Serial = SCAJ-20149 +Name = Kingdom Hearts - Final Mix [Ultimate Hits] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97292 -Name = Amplitude [Demo] -Region = NTSC-U +Serial = SCAJ-20150 +Name = Critical Velocity +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97312 -Name = Jampack Demo Disc - Winter 2003 [T-Rated] -Region = NTSC-U +Serial = SCAJ-20151 +Name = MotoGP 4 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97313 -Name = Jampack Demo Disc - Winter 2003 [M-Rated] -Region = NTSC-U +Serial = SCAJ-20152 +Name = Urban Reign +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97315 -Name = NCAA GameBreaker 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-20153 +Name = Code Age Commanders +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97316 -Name = Sly 2 - Band of Thieves -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20154 +Name = Prince of Persia - Warrior Within +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97317 -Name = NFL GameDay 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-20155 +Name = Yoshitsune Eiyuuden Syura +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97318 -Name = NBA ShootOut 2004 -Region = NTSC-U +Serial = SCAJ-20156 +Name = Gallop Racer 8 - Live Horse Racing +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97319 -Name = EyeToy - Play -Region = NTSC-U -Compat = 2 +Serial = SCAJ-20157 +Name = Ratchet & Clank 4th - GiriGiri Gingano Giga-battle +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97321 -Name = Kiosk Demo Disc 2.10 -Region = NTSC-U +Serial = SCAJ-20158 +Name = Ikusa Gami +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97322 -Name = Ratchet & Clank 2 - Going Commando [Regular Demo] -Region = NTSC-U +Serial = SCAJ-20159 +Name = Soul Calibur III +Region = NTSC-Ch-E-J --------------------------------------------- -Serial = SCUS-97323 -Name = Ratchet & Clank 2 - Going Commando [Retail Employees Demo] -Region = NTSC-U +Serial = SCAJ-20160 +Name = Yoshitsuneki +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97324 -Name = Kiosk Demo Disc 2.11 -Region = NTSC-U +Serial = SCAJ-20161 +Name = Siren 2 +Region = NTSC-J +XgKickHack = 1 //SPS. --------------------------------------------- -Serial = SCUS-97325 -Name = NBA Shootout 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-20162 +Name = Rogue Galaxy +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97326 -Name = MLB 2005 -Region = NTSC-U +Serial = SCAJ-20163 +Name = Tales of the Abyss +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97327 -Name = MLB 2005 [Demo] -Region = NTSC-U +Serial = SCAJ-20164 +Name = Kingdom Hearts II +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97328 -Name = Gran Turismo 4 -Region = NTSC-U -Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SCAJ-20165 +Name = Bleach - Hanatareshi Yabou +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97329 -Name = Downhill Domination [Demo] -Region = NTSC-U +Serial = SCAJ-20166 +Name = Front Mission 5 - Scars of the War +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97330 -Name = Jak 3 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20167 +Name = Siren 2 +Region = NTSC-Ch-J +XgKickHack = 1 //SPS. --------------------------------------------- -Serial = SCUS-97331 -Name = Official U.S. PlayStation Magazine Demo Disc 078 -Region = NTSC-U +Serial = SCAJ-20168 +Name = Rule of Rose +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97332 -Name = Official U.S. PlayStation Magazine Demo Disc 079 -Region = NTSC-U +Serial = SCAJ-20169 +Name = Dirge of Cerberus - Final Fantasy VII +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97333 -Name = Official U.S. PlayStation Magazine Demo Disc 080 -Region = NTSC-U +Serial = SCAJ-20170 +Name = Tourist Trophy +Region = NTSC-Ch +Compat = 5 --------------------------------------------- -Serial = SCUS-97334 -Name = Official U.S. PlayStation Magazine Demo Disc 081 -Region = NTSC-U +Serial = SCAJ-20171 +Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioku Tachi +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97335 -Name = Official U.S. PlayStation Magazine Demo Disc 082 -Region = NTSC-U +Serial = SCAJ-20172 +Name = Final Fantasy XII +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97336 -Name = Official U.S. PlayStation Magazine Demo Disc 083 -Region = NTSC-U +Serial = SCAJ-20173 +Name = Ace Combat Zero - The Belkan War +Region = NTSC-Unk +MemCardFilter = SCAJ-20173/SLPS-25629/SLPS-73250/SLPS-25052/SLPS-73205/SLPS-73410/SCAJ-20104/SCAJ-20136/SLPS-25418/SLPS-73218 --------------------------------------------- -Serial = SCUS-97337 -Name = Official U.S. PlayStation Magazine Demo Disc 084 -Region = NTSC-U +Serial = SCAJ-20175 +Name = Dragon Quest - Shonen Yangus to Fushigi no Dungeon +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97338 -Name = Official U.S. PlayStation Magazine Demo Disc 085 -Region = NTSC-U +Serial = SCAJ-20176 +Name = Curious George +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97339 -Name = Official U.S. PlayStation Magazine Demo Disc 086 -Region = NTSC-U +Serial = SCAJ-20177 +Name = Valkyrie Profile 2 - Silmeria +Region = NTSC-Unk +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SCUS-97340 -Name = Official U.S. PlayStation Magazine Demo Disc 087 -Region = NTSC-U +Serial = SCAJ-20178 +Name = Ape Escape - Million Monkeys +Region = NTSC-Unk +Compat = 5 --------------------------------------------- -Serial = SCUS-97341 -Name = Official U.S. PlayStation Magazine Demo Disc 088 -Region = NTSC-U +Serial = SCAJ-20179 +Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc1of2] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97342 -Name = Official U.S. PlayStation Magazine Demo Disc 089 -Region = NTSC-U +Serial = SCAJ-20180 +Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc2of2] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97345 -Name = EyeToy - Groove -Region = NTSC-U -Compat = 2 +Serial = SCAJ-20181 +Name = Minna no Tennis +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97347 -Name = MLB 2006 -Region = NTSC-U +Serial = SCAJ-20182 +Name = Tales of Destiny +Region = NTSC-Unk +FpuMulHack = 1 --------------------------------------------- -Serial = SCUS-97348 -Name = NBA '06 -Region = NTSC-U +Serial = SCAJ-20183 +Name = Wild ARMs - The Vth Vanguard +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97353 -Name = Ratchet and Clank - Up Your Arsenal -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20184 +Name = Seiken Densetsu 4 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97355 -Name = Siren -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20185 +Name = Super Robot Taisen - Original Generations +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97356 -Name = Network Adapter Start-Up Disc Ver.2.5 -Region = NTSC-U +Serial = SCAJ-20188 +Name = Final Fantasy XII - International - Zodiac Job System +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97357 -Name = Online Start-Up Disc 4.0 -Region = NTSC-U -Compat = 3 +Serial = SCAJ-20190 +Name = God of War II +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97362 -Name = Syphon Filter - Dark Mirror -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20191 +Name = Super Robot Taisen OG - Original Generations Gaiden [Limited Edition] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97365 -Name = World Tour Soccer 2005 -Region = NTSC-U +Serial = SCAJ-20192 +Name = Super Robot Taisen OG - Original Generations Gaiden +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97366 -Name = SOCOM II - U.S. Navy SEALs [Public Beta v1.0] -Region = NTSC-U -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SCAJ-20193 +Name = Tales of Destiny [Director's Cut] [Premium Box] +Region = NTSC-Unk +FpuMulHack = 1 --------------------------------------------- -Serial = SCUS-97367 -Name = Neopets - The Darkest Faerie -Region = NTSC-U -Compat = 5 +Serial = SCAJ-20194 +Name = Minna no Golf 4 [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97368 -Name = SOCOM II - U.S. Navy SEALs [Regular Demo] -Region = NTSC-U -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SCAJ-20195 +Name = Ape Escape 3 [PlayStation 2 The Best] +Region = NTSC-Ch --------------------------------------------- -Serial = SCUS-97369 -Name = ATV Off-Road Fury 2 -Region = NTSC-U -Compat = 3 +Serial = SCAJ-20196 +Name = Shadow of the Colossus [PlayStation 2 The Best] +Region = NTSC-Ch +MemCardFilter = SCAJ-20146/SCAJ-20196/SCAJ-20099/SCPS-11003/SCPS-19103/SCPS-19151/SCPS-55001 --------------------------------------------- -Serial = SCUS-97372 -Name = Rise to Honor [Demo] -Region = NTSC-U +Serial = SCAJ-20197 +Name = Valkyrie Profile 2 - Silmeria [Ultimate Hits] +Region = NTSC-Unk +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SCUS-97373 -Name = 989 Sports 2004 Demo Disc -Region = NTSC-U +Serial = SCAJ-20198 +Name = Everybody's Tennis [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97374 -Name = Ratchet & Clank 2 - Going Commando & Jak II [Demo] -Region = NTSC-U +Serial = SCAJ-20199 +Name = Tekken 5 [PlayStation 2 The Best] +Region = NTSC-Unk +eeClampMode = 1 --------------------------------------------- -Serial = SCUS-97377 -Name = Syphon Filter - The Omega Strain [Regular Demo] -Region = NTSC-U +Serial = SCAJ-25002 +Name = Shinobi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97378 -Name = EyeToy and EyeToy Play [Demo] -Region = NTSC-U +Serial = SCAJ-25004 +Name = Kingdom Hearts - Final Mix +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97379 -Name = Athens 2004 -Region = NTSC-U -Compat = 5 +Serial = SCAJ-25008 +Name = Initial D - Street Stage +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97380 -Name = Final Fantasy XI - Online [Demo] -Region = NTSC-U +Serial = SCAJ-25012 +Name = Final Fantasy X-2 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97381 -Name = Ratchet & Clank 2 - Going Commando [GameStop Demo] -Region = NTSC-U +Serial = SCAJ-25026 +Name = Kunoichi Shinobi +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97382 -Name = NBA Shootout 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-25034 +Name = Sakura Taisen Monogatari +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97383 -Name = Kiosk Demo Disc 2.12 -Region = NTSC-U +Serial = SCAJ-25037 +Name = Astro Boy Atom +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97384 -Name = Gran Turismo Special Edition 2004 Toyota [Demo] -Region = NTSC-U +Serial = SCAJ-25045 +Name = Sakura Taisen V - Episode 0 +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97392 -Name = NBA '06 featuring The Life Vol.1 [Demo] -Region = NTSC-U +Serial = SCAJ-25047 +Name = Dororo +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97394 -Name = Welcome to the World of Online Gaming for Your PlayStation 2 [Demo] -Region = NTSC-U +Serial = SCAJ-30001 +Name = Xenosaga Episode I [PlayStation 2 The Best] +Region = NTSC-Unk +Compat = 5 --------------------------------------------- -Serial = SCUS-97395 -Name = HDD Utility Disc Ver.1.10 -Region = NTSC-U +Serial = SCAJ-30002 +Name = Wild ARMs - Alter Code F +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97396 -Name = World Tour Soccer 2005 [Demo] -Region = NTSC-U +Serial = SCAJ-30003 +Name = Siren +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97398 -Name = Siren [Demo] -Region = NTSC-U +Serial = SCAJ-30004 +Name = Waga Ryuomiyo - Pride of the Dragon Peace +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97399 -Name = God of War -Region = NTSC-U -Compat = 5 +Serial = SCAJ-30005 +Name = Gacha Mecha Stadium Saru Battle +Region = NTSC-Unk --------------------------------------------- -Serial = SCUS-97400 -Name = EyeToy - Groove -Region = NTSC-U +Serial = SCAJ-30006 +Name = Gran Turismo 4 +Region = NTSC-Unk +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SCUS-97401 -Name = Hot Shots Golf FORE! -Region = NTSC-U +Serial = SCAJ-30007 +Name = Gran Turismo 4 +Region = NTSC-Unk Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 +//[patches = 7ABDBB5E] +// +// comment=patches by nachbrenner +// +// //skip Videos +// patch=1,EE,00100D84,word,24100001 +// +//[/patches] --------------------------------------------- -Serial = SCUS-97402 -Name = Killzone -Region = NTSC-U -Compat = 5 +Serial = SCAJ-30008 +Name = Gran Turismo 4 [PlayStation 2 The Best] +Region = NTSC-Unk +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SCUS-97403 -Name = Athens 2004 [Demo] -Region = NTSC-U +Serial = SCAJ-30010 +Name = God of War +Region = NTSC-E --------------------------------------------- -Serial = SCUS-97405 -Name = ATV Off-Road Fury 3 -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SCUS-97406 -Name = Jampack Demo Disc Vol.10 - Summer 2004 [M-Rated] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97407 -Name = Kiosk Demo Disc Q2-Q3 2004 -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97408 -Name = Getaway, The - Black Monday -Region = NTSC-U -Compat = 5 ---------------------------------------------- -Serial = SCUS-97409 -Name = Gretzky NHL 2005 -Region = NTSC-U +Serial = SCAJ-30011 +Name = God of War II +Region = NTSC-E --------------------------------------------- -Serial = SCUS-97410 -Name = Jampack Demo Disc Vol.10 [T-Rated] -Region = NTSC-U +Serial = SCED-50041 +Name = Tekken Tag Tournament [Demo] +Region = PAL-E --------------------------------------------- -Serial = SCUS-97411 -Name = Ratchet & Clank - Up Your Arsenal [Regular Demo] -Region = NTSC-U +Serial = SCED-50163 +Name = PlayStation 2 Greatest Hits Vol.3 [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97412 -Name = Jak 3 [Demo] -Region = NTSC-U +Serial = SCED-50254 +Name = Official Review of the 2000 FIA Formula 1 World Championship [Formula One 2001 Bonus Disc] +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97413 -Name = Ratchet & Clank - Up Your Arsenal [Public Beta v1.0] -Region = NTSC-U +Serial = SCED-50286 +Name = Red Faction [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97414 -Name = EyeToy - AntiGrav -Region = NTSC-U -Compat = 2 +Serial = SCED-50614 +Name = Jak and Daxter - The Precursor Legacy [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97415 -Name = Sly 2 - Band of Thieves [E3 Demo] -Region = NTSC-U +Serial = SCED-50642 +Name = Final Fantasy X [Demo] [Final Fantasy VI PS1 - Bonus Disc] +Region = PAL-E +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97416 -Name = Rise of the Kasai -Region = NTSC-U -Compat = 4 +Serial = SCED-50748 +Name = Official PlayStation 2 Magazine Demo 26 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97417 -Name = Jampack Demo Disc Vol.11 [M-Rated] -Region = NTSC-U +Serial = SCED-50907 +Name = Final Fantasy X [Bonus Disc - Beyond Final Fantasy] +Region = PAL-Unk +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97418 -Name = Jampack Demo Disc Vol.11 [T-Rated] -Region = NTSC-U +Serial = SCED-51531 +Name = Official PlayStation 2 Magazine Demo 33 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97419 -Name = Jampack Demo Disc Vol.12 [T-Rated] -Region = NTSC-U +Serial = SCED-51537 +Name = Official PlayStation 2 Magazine Demo 37 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97420 -Name = Jampack Demo Disc Vol.12 [M-Rated] -Region = NTSC-U +Serial = SCED-51657 +Name = Official Playstation Magazine - Demo Disc 33 +Region = PAL-Unk +Compat = 5 +[patches = 90C0E5F1] + comment=Must enable FPU Negative Div Hack gamefix for Dakar 2 Demo +[/patches] --------------------------------------------- -Serial = SCUS-97421 -Name = Kiosk Demo Disc Q4-2004 - Q1-2005 -Region = NTSC-U +Serial = SCED-52436 +Name = Playstation2 UK Demo 7-2004 +Region = PAL-Unk +Compat = 5 --------------------------------------------- -Serial = SCUS-97422 -Name = Kiosk Demo Disc Q1-Q2 2005 -Region = NTSC-U +Serial = SCED-52818 +Name = EyeToy - Chat [Light] +Region = PAL-M11 --------------------------------------------- -Serial = SCUS-97423 -Name = Kiosk Demo Disc Q2-Q3 2005 -Region = NTSC-U +Serial = SCED-52970 +Name = SCEE Hits Demo +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97424 -Name = Kiosk Demo Disc Q3-Q4 2005 -Region = NTSC-U +Serial = SCED-53163 +Name = Official PlayStation 2 Magazine Demo 60 +Region = PAL-M12 --------------------------------------------- -Serial = SCUS-97425 -Name = Network Adapter Start-Up Disc Ver.3.0 -Region = NTSC-U +Serial = SCES-50000 +Name = Ridge Racer V +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97427 -Name = Hot Shots Golf FORE! [Online Public Beta] -Region = NTSC-U +Serial = SCES-50001 +Name = Tekken Tag Tournament +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97428 -Name = Kiosk Demo Disc Q3-Q4 2004 -Region = NTSC-U +Serial = SCES-50002 +Name = FantaVision +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97429 -Name = Jak X - Combat Racing -Region = NTSC-U +Serial = SCES-50003 +Name = Dead or Alive 2 - Hardcore +Region = PAL-M5 Compat = 1 +[patches = 7A51F86E] +//Patched by Prafull +//Some missing sounds +patch=0,EE,002b4c44,word,24060000 +patch=0,EE,002b4dc0,word,10000014 +[/patches] --------------------------------------------- -Serial = SCUS-97430 -Name = Hot Shots Golf FORE! [Regular Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97431 -Name = Killzone Public Beta V1.0 -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97432 -Name = Killzone [Regular Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97436 -Name = Gran Turismo 4 [Online Public Beta] -Region = NTSC-U -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works ---------------------------------------------- -Serial = SCUS-97437 -Name = ATV Off-Road Fury 3 [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97438 -Name = EyeToy - Antigrav [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97440 -Name = Jak and Daxter Trilogy [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97441 -Name = Getaway - Black Monday [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97442 -Name = Official U.S. PlayStation Magazine Demo Disc 090 -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97443 -Name = Official U.S. PlayStation Magazine Demo Issue 91 -Region = NTSC-U +Serial = SCES-50004 +Name = Formula One 2001 +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCUS-97444 -Name = Official U.S. PlayStation Magazine Demo Disc 092 -Region = NTSC-U +Serial = SCES-50005 +Name = Wipeout Fusion +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97445 -Name = Official U.S. PlayStation Magazine Demo Disc 093 -Region = NTSC-U +Serial = SCES-50006 +Name = Drakan - The Ancients' Gates // aka "Drakan 2" +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 // flickery textures +[patches] + comment=- This gamedisc supports multiple languages through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". + // ===== + // Fix by pgert against displaycrap which arises with HD + // when using GSdx (in HW-mode) around the Health & Mana bars. + patch=1,EE,001C2274,word,3C013F7F // 3C013F80 + patch=1,EE,001C228C,word,3C013E10 // 3C013F00 +[/patches] --------------------------------------------- -Serial = SCUS-97446 -Name = Official U.S. PlayStation Magazine Demo Disc 094 -Region = NTSC-U +Serial = SCES-50009 +Name = Wild Wild Racing +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97447 -Name = Official U.S. PlayStation Magazine Demo Disc 095 -Region = NTSC-U +Serial = SCES-50034 +Name = MotoGP +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97448 -Name = Official U.S. PlayStation Magazine Demo Disc 096 -Region = NTSC-U +Serial = SCES-50105 +Name = Sky Odyssey +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97449 -Name = Official U.S. PlayStation Magazine Demo Disc 097 -Region = NTSC-U +Serial = SCES-50139 +Name = World Rally Championship +Region = PAL-M7 +Compat = 5 --------------------------------------------- -Serial = SCUS-97450 -Name = Official U.S. PlayStation Magazine Demo Disc 098 -Region = NTSC-U +Serial = SCES-50240 +Name = Extermination +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97451 -Name = Official U.S. PlayStation Magazine Demo Disc 099 -Region = NTSC-U +Serial = SCES-50241 +Name = Bouncer, The +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCUS-97452 -Name = Official U.S. PlayStation Magazine Demo Disc 100 -Region = NTSC-U +Serial = SCES-50244 +Name = This is Football 2002 +Region = PAL-M6 --------------------------------------------- -Serial = SCUS-97453 -Name = Official U.S. PlayStation Magazine Demo Disc 101 -Region = NTSC-U +Serial = SCES-50246 +Name = AirBlade +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97454 -Name = Official U.S. PlayStation Magazine Demo Disc 102 -Region = NTSC-U +Serial = SCES-50293 +Name = ATV Off-Road +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97455 -Name = PlayStation Underground Holiday 2004 [M-Rated] -Region = NTSC-U +Serial = SCES-50294 +Name = Gran Turismo 3 A-Spec +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97456 -Name = PlayStation Underground Holiday 2004 [T-Rated] -Region = NTSC-U +Serial = SCES-50295 +Name = Dark Cloud +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97457 -Name = Sly 2 - Band of Thieves [Retail Demo] -Region = NTSC-U +Serial = SCES-50300 +Name = Time Crisis 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97460 -Name = MLB 2006 [Demo] -Region = NTSC-U +Serial = SCES-50354 +Name = Klonoa 2 - Lunatea's Veil +Region = PAL-M5 +Compat = 5 +eeClampMode = 3 //Objects needed appear in wrong places without it +[patches = 7EBEEBBD] + + comment=Patch By CKemu + + //Skips IUP blitz + patch=0,EE,003078F4,word,00000000 + +[/patches] --------------------------------------------- -Serial = SCUS-97462 -Name = Rise of the Kasai [Demo] -Region = NTSC-U +Serial = SCES-50360 +Name = Twisted Metal - Black +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97463 -Name = World Tour Soccer 2006 -Region = NTSC-U +Serial = SCES-50361 +Name = Jak and Daxter - The Precursor Legacy +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SCUS-97464 -Name = Sly 3 - Honor Amongst Thieves -Region = NTSC-U +Serial = SCES-50408 +Name = PaRappa the Rapper 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCUS-97465 -Name = Ratchet - Deadlocked -Region = NTSC-U -Compat = 4 +Serial = SCES-50409 +Name = MotoGP 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97466 -Name = Gretzky NHL '06 -Region = NTSC-U +Serial = SCES-50410 +Name = Ace Combat - Distant Thunder +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCUS-97467 -Name = God of War [Demo] -Region = NTSC-U +Serial = SCES-50411 +Name = Vampire Night +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SCUS-97468 -Name = EyeToy - Play 2 -Region = NTSC-U +Serial = SCES-50459 +Name = Dropship - United Peace Force +Region = PAL-M5 Compat = 2 --------------------------------------------- -Serial = SCUS-97469 -Name = Neopets - The Darkest Faerie [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97471 -Name = Genji - Dawn of the Samurai -Region = NTSC-U +Serial = SCES-50490 +Name = Final Fantasy X +Region = PAL-E Compat = 5 +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97472 -Name = Shadow of the Colossus -Region = NTSC-U +Serial = SCES-50491 +Name = Final Fantasy X +Region = PAL-F +IPUWaitHack = 1 +--------------------------------------------- +Serial = SCES-50492 +Name = Final Fantasy X +Region = PAL-G Compat = 5 +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97473 -Name = World Tour Soccer 2006 [Demo] -Region = NTSC-U +Serial = SCES-50493 +Name = Final Fantasy X +Region = PAL-I +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97474 -Name = SOCOM 3 - U.S. Navy SEALs -Region = NTSC-U -Compat = 5 +Serial = SCES-50494 +Name = Final Fantasy X +Region = PAL-S +IPUWaitHack = 1 --------------------------------------------- -Serial = SCUS-97475 -Name = SOCOM 3 - U.S. Navy SEALs [Regular Demo] -Region = NTSC-U +Serial = SCES-50499 +Name = Ecco the Dolphin - Defender of the Future +Region = PAL-M5 +Compat = 2 --------------------------------------------- -Serial = SCUS-97478 -Name = EyeToy - Kinetic -Region = NTSC-U +Serial = SCES-50500 +Name = Headhunter +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97479 -Name = ATV Off-Road Fury 4 -Region = NTSC-U +Serial = SCES-50501 +Name = Rez +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCUS-97481 -Name = God of War II -Region = NTSC-U +Serial = SCES-50522 +Name = Disney's Peter Pan - Adventures in Neverland +Region = PAL-E-S Compat = 5 --------------------------------------------- -Serial = SCUS-97482 -Name = God of War II - The Colossus Battle [Demo] -Region = NTSC-U +Serial = SCES-50526 +Name = Peter Pan +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97484 -Name = Sly 3 - Honor Among Thieves [E3 Demo] -Region = NTSC-U +Serial = SCES-50531 +Name = Peter Pan - Legenden om Onskeoen +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SCUS-97485 -Name = Ratchet - Deadlocked [Regular Demo] -Region = NTSC-U +Serial = SCES-50595 +Name = Disney-Pixar's Monsters Inc. +Region = PAL-E --------------------------------------------- -Serial = SCUS-97486 -Name = Jak X - Combat Racing [Regular Demo] -Region = NTSC-U +Serial = SCES-50596 +Name = Monsters Inc. +Region = PAL-DA --------------------------------------------- -Serial = SCUS-97487 -Name = Ratchet - Deadlocked [Public Beta v.1] -Region = NTSC-U +Serial = SCES-50597 +Name = Monsters Inc. +Region = PAL-DU --------------------------------------------- -Serial = SCUS-97488 -Name = Jak X - Combat Racing [Public Beta v.1] -Region = NTSC-U +Serial = SCES-50598 +Name = Monsterit Oy +Region = PAL-FI --------------------------------------------- -Serial = SCUS-97489 -Name = SOCOM 3 - U.S. Navy SEALs [Public Beta v.1] -Region = NTSC-U +Serial = SCES-50599 +Name = Monsters Inc. +Region = PAL-F --------------------------------------------- -Serial = SCUS-97490 -Name = Rogue Galaxy -Region = NTSC-U -Compat = 5 +Serial = SCES-50600 +Name = Disney's Monster Inc. - Scare Island +Region = PAL-G --------------------------------------------- -Serial = SCUS-97491 -Name = Jampack Demo Disc Vol.13 [T-Rated] -Region = NTSC-U +Serial = SCES-50601 +Name = Monsters Inc. +Region = PAL-I --------------------------------------------- -Serial = SCUS-97492 -Name = Jampack Demo Disc Vol.13 [M-Rated] -Region = NTSC-U +Serial = SCES-50602 +Name = Monsters Inc. +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97493 -Name = Jampack Demo Disc Vol.14 [T-Rated] -Region = NTSC-U +Serial = SCES-50603 +Name = Monstruos S.A - La Isla de los Sustos +Region = PAL-S --------------------------------------------- -Serial = SCUS-97494 -Name = Jampack Demo Disc Vol.14 [M-Rated] -Region = NTSC-U +Serial = SCES-50604 +Name = Monsters Inc. +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97495 -Name = EyeToy - Play 2 [with Camera] -Region = NTSC-U +Serial = SCES-50605 +Name = Monsters Inc. +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97497 -Name = EyeToy - Kinetic [with Camera] -Region = NTSC-U +Serial = SCES-50611 +Name = Space Channel 5 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97498 -Name = EyeToy - Play 3 -Region = NTSC-U +Serial = SCES-50612 +Name = Space Channel 5 - Part 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97500 -Name = MLB '06 - The Show -Region = NTSC-U +Serial = SCES-50614 +Name = Jak & Daxter - The Precursor Legacy +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97501 -Name = Ape Escape 3 -Region = NTSC-U -Compat = 4 +Serial = SCES-50759 +Name = Virtua Fighter 4 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97502 -Name = Tourist Trophy -Region = NTSC-U +Serial = SCES-50760 +Name = Ico +Region = PAL-M5 Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCUS-97503 -Name = MLB '06 - The Show [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97504 -Name = Genji - Dawn of the Samurai [Demo] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97505 -Name = Shadow of the Colossus [Demo] -Region = NTSC-U +Serial = SCES-50781 +Name = Destruction Derby Arena [Beta, Promo, & Full Retail] +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCUS-97506 -Name = Gretzky NHL '06 [Demo] -Region = NTSC-U +Serial = SCES-50791 +Name = Frequency +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97507 -Name = EyeToy [Demo] -Region = NTSC-U +Serial = SCES-50810 +Name = Smash Court Tennis - Pro Tournament +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97509 -Name = Jak II [Greatest Hits] -Region = NTSC-U +Serial = SCES-50850 +Name = Gran Turismo - Concept 2002 Tokyo-Geneva +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97510 -Name = ATV Off-Road Fury 2 [Greatest Hits] -Region = NTSC-U +Serial = SCES-50858 +Name = Gran Turismo - Concept 2002 Tokyo-Geneva +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCUS-97511 -Name = SOCOM II - U.S. Navy SEALs [Greatest Hits] -Region = NTSC-U +Serial = SCES-50878 +Name = Tekken 4 +Region = PAL-M5 Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +[patches = 2251E14D] + + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,00292424,word,24200001 + patch=0,EE,00292624,word,00000000 + +[/patches] +[patches = F48F994A] + + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,00292424,word,24200001 + patch=0,EE,00292624,word,00000000 + +[/patches] --------------------------------------------- -Serial = SCUS-97512 -Name = Gran Turismo 3 - A-Spec [Greatest Hits] -Region = NTSC-U +Serial = SCES-50885 +Name = Ape Escape 2 +Region = PAL-E --------------------------------------------- -Serial = SCUS-97513 -Name = Ratchet & Clank - Going Commando [Greatest Hits] -Region = NTSC-U +Serial = SCES-50887 +Name = Alpine Racer 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97514 -Name = ATV Off-Road Fury 3 [Greatest Hits] -Region = NTSC-U +Serial = SCES-50888 +Name = Pac-Man World 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97515 -Name = Hot Shots Golf FORE! [Greatest Hits] -Region = NTSC-U +Serial = SCES-50889 +Name = Ninja Assault +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97516 -Name = Jak 3 [Greatest Hits] -Region = NTSC-U +Serial = SCES-50916 +Name = Ratchet & Clank +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97517 -Name = Killzone [Greatest Hits] -Region = NTSC-U +Serial = SCES-50917 +Name = Sly Racoon +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97518 -Name = Ratchet and Clank - Up Your Arsenal [Greatest Hits] -Region = NTSC-U +Serial = SCES-50928 +Name = SOCOM - U.S. Navy SEALs [Beta & Full Release] +Region = PAL-M6 --------------------------------------------- -Serial = SCUS-97519 -Name = Sly 2 - Band of Thieves [Greatest Hits] -Region = NTSC-U +Serial = SCES-50934 +Name = World Rally Championship II Extreme +Region = PAL-M7 +Compat = 5 --------------------------------------------- -Serial = SCUS-97520 -Name = Syphon Filter - The Omega Strain [Greatest Hits] -Region = NTSC-U +Serial = SCES-50935 +Name = World Rally Championship II Extreme +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97523 -Name = EyeToy - Operation Spy! -Region = NTSC-U +Serial = SCES-50956 +Name = Ferrari F355 Challenge +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97527 -Name = Sly 3 - Honor Among Thieves [Regular Demo] -Region = NTSC-U +Serial = SCES-50960 +Name = Disney's Stitch: Experiment 626 +Region = PAL-F-G +Compat = 5 --------------------------------------------- -Serial = SCUS-97528 -Name = PlayStation Underground Demo Disc - Holiday 2005 [T-Rated] -Region = NTSC-U +Serial = SCES-50966 +Name = Disney's Stitch - Experiment 626 +Region = PAL-E-SE --------------------------------------------- -Serial = SCUS-97529 -Name = PlayStation Underground Demo Disc - Holiday 2005 [M-Rated] -Region = NTSC-U +Serial = SCES-50967 +Name = Kingdom Hearts +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCUS-97530 -Name = ESA Foundation Compilation Set -Region = NTSC-U +Serial = SCES-50968 +Name = Kingdom Hearts +Region = PAL-F +Compat = 5 --------------------------------------------- -Serial = SCUS-97531 -Name = Official U.S. PlayStation Magazine Demo Disc 103 -Region = NTSC-U +Serial = SCES-50969 +Name = Kingdom Hearts +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SCUS-97532 -Name = Official U.S. PlayStation Magazine Demo Disc 104 -Region = NTSC-U +Serial = SCES-50970 +Name = Kingdom Hearts +Region = PAL-I --------------------------------------------- -Serial = SCUS-97533 -Name = Official U.S. PlayStation Magazine Demo Disc 105 -Region = NTSC-U +Serial = SCES-50971 +Name = Kingdom Hearts +Region = PAL-S +Compat = 5 --------------------------------------------- -Serial = SCUS-97534 -Name = Official U.S. PlayStation Magazine Demo Disc 106 -Region = NTSC-U +Serial = SCES-50982 +Name = Moto GP 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97535 -Name = Official U.S. PlayStation Magazine Demo Disc 107 -Region = NTSC-U +Serial = SCES-50987 +Name = Resident Evil - Outbreak +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97536 -Name = Official U.S. PlayStation Magazine Demo Disc 108 -Region = NTSC-U +Serial = SCES-51004 +Name = Formula One 2002 +Region = PAL-M6 --------------------------------------------- -Serial = SCUS-97537 -Name = Official U.S. PlayStation Magazine Demo Disc 109 -Region = NTSC-U +Serial = SCES-51039 +Name = This is Football 2003 +Region = PAL-M7 --------------------------------------------- -Serial = SCUS-97538 -Name = Official U.S. PlayStation Magazine Demo Disc 110 -Region = NTSC-U +Serial = SCES-51040 +Name = Le Monde des Bleus 2003 +Region = PAL-F --------------------------------------------- -Serial = SCUS-97539 -Name = Official U.S. PlayStation Magazine Demo Disc 111 -Region = NTSC-U +Serial = SCES-51041 +Name = This is Football 2003 +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97540 -Name = Official U.S. PlayStation Magazine Demo Disc 112 -Region = NTSC-U +Serial = SCES-51102 +Name = Ape Escape 2 +Region = PAL-F --------------------------------------------- -Serial = SCUS-97544 -Name = NBA '07 featuring The Life Vol.2 -Region = NTSC-U +Serial = SCES-51103 +Name = Ape Escape 2 +Region = PAL-I --------------------------------------------- -Serial = SCUS-97545 -Name = SOCOM - U.S. Navy SEALs - Combined Assault -Region = NTSC-U -Compat = 4 +Serial = SCES-51104 +Name = Ape Escape 2 +Region = PAL-G --------------------------------------------- -Serial = SCUS-97548 -Name = Ape Escape 3 [Demo] -Region = NTSC-U +Serial = SCES-51105 +Name = Ape Escape 2 +Region = PAL-S --------------------------------------------- -Serial = SCUS-97554 -Name = NBA '07 featuring The Life Vol.2 [Demo] -Region = NTSC-U +Serial = SCES-51135 +Name = Primal +Region = PAL-M5 +Compat = 5 // With GSdx, SW-mode only (issue 1212). +// [patches] +// comment=- Widescreen enforcement lazy-hack by pgert. +// patch=1,EE,204886FC,extended,00000001 // 00000000 +// // +// patch=1,EE,00103D9C,word,3C013F55 // 3C013F66 - X-axis of X-button & "Start" on Start menu - better. +// patch=1,EE,80103D9C,word,3C013F55 // 3C013F66 - a clone from 00103D9C. +// patch=1,EE,A0103D9C,word,3C013F55 // 3C013F66 - a clone from 00103D9C. +// // +// patch=1,EE,0012A000,word,3C013F40 // 3C013F66 - Y-axis of X-button & "Select" on TV-mode menu - better. +// patch=1,EE,8012A000,word,3C013F40 // 3C013F66 - a clone from 0012A000. +// patch=1,EE,A012A000,word,3C013F40 // 3C013F66 - a clone from 0012A000. +// [/patches] --------------------------------------------- -Serial = SCUS-97555 -Name = Jak and Daxter Complete Trilogy [Demo] -Region = NTSC-U +Serial = SCES-51159 +Name = Getaway, The +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97556 -Name = MLB '07 - The Show -Region = NTSC-U +Serial = SCES-51164 +Name = Mark of Kri, The +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97557 -Name = Kiosk Demo Disc Q2-Q3 2006 -Region = NTSC-U +Serial = SCES-51176 +Name = Disney's Treasure Planet +Region = PAL-M4 --------------------------------------------- -Serial = SCUS-97558 -Name = Jak and Daxter: The Lost Frontier -Region = NTSC-U +Serial = SCES-51177 +Name = Disney's Treasure Planet +Region = PAL +EETimingHack = 1 // Fixes hang before going ingame +eeRoundMode = 0 // Fixes characters flying into sky +eeClampMode = 3 // Required to load areas correctly --------------------------------------------- -Serial = SCUS-97560 -Name = SOCOM - U.S. Navy SEALs - Combined Assault [Demo] -Region = NTSC-U +Serial = SCES-51179 +Name = This is Football 2003 +Region = PAL-E --------------------------------------------- -Serial = SCUS-97564 -Name = Jampack Demo Disc Vol.15 [T-Rated] -Region = NTSC-U +Serial = SCES-51190 +Name = Dark Chronicle +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97565 -Name = Jampack Demo Disc Vol.15 [M-Rated] -Region = NTSC-U +Serial = SCES-51224 +Name = War of the Monsters +Region = PAL-E --------------------------------------------- -Serial = SCUS-97568 -Name = MLB '07 - The Show [Demo] -Region = NTSC-U +Serial = SCES-51248 +Name = Dog's Life +Region = PAL-M11 --------------------------------------------- -Serial = SCUS-97571 -Name = SingStar Rocks! [with Microphone] -Region = NTSC-U -Compat = 3 +Serial = SCES-51426 +Name = Getaway, The +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97572 -Name = Rogue Galaxy [Demo] -Region = NTSC-U +Serial = SCES-51428 +Name = Shinobi +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97579 -Name = ATV Off-Road Fury 4 [Demo] -Region = NTSC-U +Serial = SCES-51463 +Name = Ghosthunter +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCUS-97580 -Name = SingStar Pop [with Microphone] -Region = NTSC-U +Serial = SCES-51480 +Name = Twisted Metal - Black - Online +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97583 -Name = MLB '08 - The Show -Region = NTSC-U +Serial = SCES-51513 +Name = EyeToy - Play +Region = PAL-M11 --------------------------------------------- -Serial = SCUS-97584 -Name = Syphon Filter: Logan's Shadow -Region = NTSC-U +Serial = SCES-51533 +Name = God of War +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97589 -Name = NBA '08 featuring The Life Vol.3 -Region = NTSC-U +Serial = SCES-51578 +Name = Network Access Disc [Original, v4.02 & v4.03] +Region = PAL-M7 --------------------------------------------- -Serial = SCUS-97590 -Name = SingStar Rocks! [Game Only] -Region = NTSC-U +Serial = SCES-51592 +Name = Formula One 2003 +Region = PAL-M6 +Compat = 5 +XgKickHack = 1 //For SPS. --------------------------------------------- -Serial = SCUS-97591 -Name = SingStar Pop [Game Only] -Region = NTSC-U +Serial = SCES-51593 +Name = Hardware Online Arena [Beta, Promo & Full Release] +Region = PAL-M4 --------------------------------------------- -Serial = SCUS-97592 -Name = Buzz! The Mega Quiz -Region = NTSC-U -Compat = 2 +Serial = SCES-51607 +Name = Ratchet & Clank 2 - Locked & Loaded +Region = PAL-M5 +Compat = 5 +// reads Ratchet 1 data +MemCardFilter = SCES-51607/SCES-50916 --------------------------------------------- -Serial = SCUS-97594 -Name = Buzz! The Hollywood Quiz [Bundle] -Region = NTSC-U -Compat = 2 +Serial = SCES-51608 +Name = Jak & Daxter 2 - Renegade +Region = PAL-M7 --------------------------------------------- -Serial = SCUS-97596 -Name = Buzz! Junior Jungle Party -Region = NTSC-U +Serial = SCES-51610 +Name = This is Football 2004 (Red Devils 2004) +Region = PAL-F-G --------------------------------------------- -Serial = SCUS-97597 -Name = Buzz! Jr. RoboJam [Bundle] -Region = NTSC-U -Compat = 2 +Serial = SCES-51611 +Name = This is Football 2004 +Region = PAL-M4 --------------------------------------------- -Serial = SCUS-97601 -Name = Buzz! The Mega Quiz [Game Only] -Region = NTSC-U +Serial = SCES-51612 +Name = This is Football 5 +Region = PAL-E-NO --------------------------------------------- -Serial = SCUS-97602 -Name = Buzz! Jr. Jungle Party [Game Only] -Region = NTSC-U +Serial = SCES-51613 +Name = This is Football 2004 +Region = PAL-M4 --------------------------------------------- -Serial = SCUS-97610 -Name = Hot Shots Tennis -Region = NTSC-U -Compat = 4 +Serial = SCES-51614 +Name = Monde des Bleus 2004, Le - Nouvelle Generation +Region = PAL-F --------------------------------------------- -Serial = SCUS-97611 -Name = SingStar Amped [with Microphone] -Region = NTSC-U -Compat = 3 +Serial = SCES-51618 +Name = SOCOM +Region = PAL-Unk --------------------------------------------- -Serial = SCUS-97612 -Name = SingStar Amped [Game Only] -Region = NTSC-U +Serial = SCES-51635 +Name = Brave - The Search for Spirit Dancer +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97615 -Name = Ratchet & Clank - Size Matters -Region = NTSC-U +Serial = SCES-51648 +Name = Everquest - Online Adventures +Region = PAL-E-I --------------------------------------------- -Serial = SCUS-97616 -Name = SingStar 80's -Region = NTSC-U -Compat = 3 +Serial = SCES-51677 +Name = My Street +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97618 -Name = SingStar 80's [Game Only] -Region = NTSC-U +Serial = SCES-51684 +Name = World Rally Championship 3 +Region = PAL-M8 +Compat = 5 +XgKickHack = 1 +[patches = 80802EA9] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,002aa934,word,00000000 +patch=1,EE,002aa574,word,00000000 +[/patches] --------------------------------------------- -Serial = SCUS-97620 -Name = Syphon Filter - Dark Mirror [Demo] -Region = NTSC-U +Serial = SCES-51685 +Name = Primal +Region = PAL-E-R --------------------------------------------- -Serial = SCUS-97621 -Name = Twisted Metal - Head-On [Extra Twisted Edition] -Region = NTSC-U +Serial = SCES-51706 +Name = Amplitude +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCUS-97622 -Name = SingStar 80's [with Microphone] -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97623 -Name = Secret Agent Clank -Region = NTSC-U +Serial = SCES-51719 +Name = Gran Turismo 4 +Region = PAL-M5 Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCES-51719/SCES-52438/SCES-50294 --------------------------------------------- -Serial = SCUS-97627 -Name = Singstar Pop Volume 2 -Region = NTSC-U +Serial = SCES-51725 +Name = Everquest Online Adventures +Region = PAL-M3 Compat = 3 +[patches = 555019B2] + + patch=0,EE,00571414,word,00000000 + patch=0,EE,00571438,word,00000000 + +[/patches] --------------------------------------------- -Serial = SCUS-97626 -Name = SingStar 90's -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97633 -Name = Buzz! The Hollywood Quiz [Game Only] -Region = NTSC-U +Serial = SCES-51844 +Name = Time Crisis 3 +Region = PAL-M5 --------------------------------------------- -Serial = SCUS-97634 -Name = Buzz! Jr. RoboJam [Game Only] -Region = NTSC-U +Serial = SCES-51895 +Name = EyeToy - Groove +Region = PAL-M11 --------------------------------------------- -Serial = SCUS-97636 -Name = SingStar 90's [Game Only] -Region = NTSC-U +Serial = SCES-51904 +Name = SOCOM II - U.S. Navy SEALs +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SCUS-97640 -Name = Singstar Legends -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SCUS-97642 -Name = Singstar Abba -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SCUS-97643 -Name = Singstar Queen -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97644 -Name = MLB '09: The Show -Region = NTSC-U ---------------------------------------------- -Serial = SCUS-97651 -Name = Singstar Country -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SCUS-97653 -Name = MLB '10: The Show -Region = NTSC-U +Serial = SCES-51910 +Name = Arc the Lad - Twilight of the Spirits +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCUS-97654 -Name = MotorStorm Arctic Edge -Region = NTSC-U -OPHFLagHack = 1 +Serial = SCES-51920 +Name = Forbidden Siren +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCUS-97660 -Name = Singstar Latino -Region = NTSC-U +Serial = SCES-51971 +Name = Rise to Honor +Region = PAL-E --------------------------------------------- -Serial = SCUS-97869 -Name = Amplitude P.O.D. [Demo] -Region = NTSC-U +Serial = SCES-51977 +Name = Hardware Online Arena +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20001 -Name = Tekken Tag Tournament -Region = NTSC-U -Compat = 5 +Serial = SCES-51979 +Name = Destruction Derby Arenas +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20002 -Name = Ridge Racer V -Region = NTSC-U +Serial = SCES-52004 +Name = Killzone +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-20003 -Name = Portal Runner -Region = NTSC-U +Serial = SCES-52033 +Name = Syphon Filter - The Omega Strain +Region = PAL-M5 Compat = 5 +EETimingHack = 1 //random hangs in US version, code is the same. +[patches = 27E54B37] + comment=COP2 patch by Refraction + patch=0,EE,003953F8,word,48438000 + patch=0,EE,003735FC,word,4B06521B +[/patches] --------------------------------------------- -Serial = SLUS-20004 -Name = Army Men - Air Attack 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-52042 +Name = Formula One 2004 +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20005 -Name = World Destruction League - Thunder Tanks -Region = NTSC-U -Compat = 5 +Serial = SCES-52065 +Name = Flipnic +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20006 -Name = Warriors of Might and Magic -Region = NTSC-U +Serial = SCES-52099 +Name = I-Ninja +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20007 -Name = World Destruction League - War Jetz -Region = NTSC-U -Compat = 5 +Serial = SCES-52124 +Name = kill.switch +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20008 -Name = All-Star Baseball 2002 -Region = NTSC-U +Serial = SCES-52154 +Name = EyeToy - Chat +Region = PAL-M11 --------------------------------------------- -Serial = SLUS-20009 -Name = Surfing - H30 -Region = NTSC-U +Serial = SCES-52156 +Name = Ghosthunter - Hunter on the spectres +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20011 -Name = Orphen - Scion of Sorcery -Region = NTSC-U -Compat = 5 +Serial = SCES-52268 +Name = Sing-Star +Region = PAL-E --------------------------------------------- -Serial = SLUS-20012 -Name = Super Car Street Challenge -Region = NTSC-U +Serial = SCES-52299 +Name = SingStar +Region = PAL-S --------------------------------------------- -Serial = SLUS-20013 -Name = Tony Hawk's Pro Skater 3 -Region = NTSC-U +Serial = SCES-52306 +Name = SOCOM II - U.S. Navy SEALs +Region = PAL-Unk Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20014 -Name = Armored Core 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-52327 +Name = Forbidden Siren +Region = PAL-F --------------------------------------------- -Serial = SLUS-20015 -Name = Eternal Ring -Region = NTSC-U +Serial = SCES-52328 +Name = Forbidden Siren +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-20016 -Name = Evergrace -Region = NTSC-U -Compat = 5 +Serial = SCES-52329 +Name = Forbidden Siren +Region = PAL-I --------------------------------------------- -Serial = SLUS-20017 -Name = Maximo - Ghosts to Glory -Region = NTSC-U -Compat = 5 +Serial = SCES-52330 +Name = Forbidden Siren - Viviendo la Pesadilla +Region = PAL-S --------------------------------------------- -Serial = SLUS-20018 -Name = Onimusha - Warlords -Region = NTSC-U -Compat = 5 +Serial = SCES-52389 +Name = World Rally Championship 4 +Region = PAL-M8 +Compat = 1 --------------------------------------------- -Serial = SLUS-20021 -Name = Kengo - Master of Bushido -Region = NTSC-U +Serial = SCES-52405 +Name = DJ - Decks & FX - House Edition +Region = PAL-M9 Compat = 5 --------------------------------------------- -Serial = SLUS-20024 -Name = Legacy of Kain - Blood Omen 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-52410 +Name = Athens 2004 +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20028 -Name = No One Lives Forever -Region = NTSC-U -Compat = 5 +Serial = SCES-52411 +Name = Athens 2004 [Platinum] +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20029 -Name = Top Gear Daredevil -Region = NTSC-U -Compat = 5 +Serial = SCES-52412 +Name = Jackie Chan Adventures +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-20032 -Name = Real Pool -Region = NTSC-U -Compat = 5 +Serial = SCES-52423 +Name = Smash Court Tennis - Pro Tournament 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20034 -Name = Unreal Tournament -Region = NTSC-U +Serial = SCES-52424 +Name = Ace Combat - Squadron Leader +Region = PAL-M5 Compat = 5 +[patches = 1D54FEA9] + patch=0,EE,001A3154,word,48498800 + patch=0,EE,001A3158,word,4B00682C + patch=0,EE,001A3164,word,484A8800 + patch=0,EE,001A3168,word,4B0C682C +[/patches] --------------------------------------------- -Serial = SLUS-20035 -Name = Baldur's Gate: Dark Alliance -Region = NTSC-U -Compat = 4 +Serial = SCES-52425 +Name = This is Football 5 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20037 -Name = Run Like Hell - Hunt or Be Hunted -Region = NTSC-U -Compat = 5 -[patches = F802A575] - comment=swapping a COP2 op into place to make the flags work without delays - patch=0,EE,001D249C,word,4A0002FF - patch=0,EE,001D24AC,word,4B07FA0B - patch=0,EE,001D268C,word,4A0002FF - patch=0,EE,001D269C,word,4B07FA0B -[/patches] +Serial = SCES-52426 +Name = This is Football 2005 +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-20039 -Name = Top Gear Dare Devil -Region = NTSC-U +Serial = SCES-52427 +Name = This is Football 2005 +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-20040 -Name = Gradius III & IV -Region = NTSC-U -Compat = 5 +Serial = SCES-52429 +Name = This is Football 2005 +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SLUS-20041 -Name = ESPN International Track & Field -Region = NTSC-U -Compat = 5 +Serial = SCES-52430 +Name = Le Monde des Bleus 2005 +Region = PAL-F --------------------------------------------- -Serial = SLUS-20042 -Name = LEGO Racers 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-52431 +Name = This is Football 2005 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20043 -Name = Star Wars - Super Bombad Racing -Region = NTSC-U -Compat = 4 +Serial = SCES-52432 +Name = This is Football 2005 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20044 -Name = Star Wars - StarFighter -Region = NTSC-U +Serial = SCES-52438 +Name = Gran Turismo 4 - Prologue +Region = PAL-M5 Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCES-51719/SCES-52438/SCES-50294 --------------------------------------------- -Serial = SLUS-20045 -Name = Legend of Alon Dar, The -Region = NTSC-U +Serial = SCES-52456 +Name = Ratchet & Clank 3 +Region = PAL-M5 Compat = 5 +// reads Ratchet 1 & 2 data +MemCardFilter = SCES-52456/SCES-51607/SCES-50916 --------------------------------------------- -Serial = SLUS-20047 -Name = Gauntlet - Dark Legacy -Region = NTSC-U +Serial = SCES-52460 +Name = Jak 3 +Region = PAL-M7 Compat = 5 --------------------------------------------- -Serial = SLUS-20048 -Name = Legion - Legend of Excalibur -Region = NTSC-U +Serial = SCES-52529 +Name = Sly Racoon 2 - Band of Thieves +Region = PAL-M11 Compat = 5 --------------------------------------------- -Serial = SLUS-20049 -Name = MLB Slugfest 2003 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20050 -Name = NBA Hoopz -Region = NTSC-U +Serial = SCES-52530 +Name = Crisis Zone +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20051 -Name = NFL Blitz 2002 -Region = NTSC-U +Serial = SCES-52564 +Name = Sing-Star +Region = PAL-F --------------------------------------------- -Serial = SLUS-20054 -Name = Ready 2 Rumble Boxing - Round 2 -Region = NTSC-U -Compat = 3 +Serial = SCES-52565 +Name = Sing-Star +Region = PAL-G --------------------------------------------- -Serial = SLUS-20056 -Name = Spy Hunter -Region = NTSC-U -Compat = 5 -VIF1StallHack = 1 //Fixes loading hang +Serial = SCES-52566 +Name = SingStar +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20058 -Name = Moto GP -Region = NTSC-U -Compat = 5 +Serial = SCES-52582 +Name = Everybody's Golf +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20062 -Name = Grand Theft Auto III -Region = NTSC-U +Serial = SCES-52586 +Name = Death by Degrees +Region = PAL-E-S Compat = 5 --------------------------------------------- -Serial = SLUS-20063 -Name = Midnight Club - Street Racing -Region = NTSC-U -Compat = 3 +Serial = SCES-52596 +Name = This is Football 2005 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20064 -Name = Oni -Region = NTSC-U +Serial = SCES-52677 +Name = Network Access Disc & Hardware - Online Arena +Region = PAL-M7 Compat = 5 -[patches = FD9CD8FC] - - comment=patch by Shadow Lady - - //skip branch bc0f - patch=0,EE,001CF3CC,word,00000000 - +[patches] + comment=- This gamedisc supports multiple languages and widescreen. + comment=- Language & widescreen selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". + comment=- * * * * * * + comment=- Using GSdx, this gamedisc crashes in gamemenu with SW-mode, + comment=- and has no 3D display with HW-mode. + comment=- Playable by toggling between HW-mode (in menu) and SW-mode (in game). [/patches] --------------------------------------------- -Serial = SLUS-20065 -Name = Smuggler's Run -Region = NTSC-U -Compat = 5 +Serial = SCES-52748 +Name = EyeToy - Play 2 +Region = PAL-M12 // SpyToy - M11 +Compat = 2 --------------------------------------------- -Serial = SLUS-20066 -Name = Half-Life -Region = NTSC-U -Compat = 5 +Serial = SCES-52756 +Name = DJ - Decks & FX - Claudio Coccoluto Edition +Region = PAL-I --------------------------------------------- -Serial = SLUS-20069 -Name = Bouncer, The -Region = NTSC-U -Compat = 5 +Serial = SCES-52758 +Name = Getaway, The - Black Monday +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20070 -Name = Q-Ball Billiards Master -Region = NTSC-U +Serial = SCES-52762 +Name = DJ Decks & FX +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20071 -Name = Dead or Alive 2 -Region = NTSC-U -Compat = 1 -[patches = 23AF6876] - // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function - patch=0,EE,002b06ec,word,24060000 - - //patch=0,EE,002b0868,word,10000014 - - // don't ask - //patch=0,EE,002B00B8,word,FFB00010 - //patch=0,EE,002B00BC,word,3C140067 - //patch=0,EE,002B00C0,word,2690C0C0 - //patch=0,EE,002B00C4,word,0C0EBA28 - //patch=0,EE,002B00C8,word,0200202D - //patch=0,EE,002B00CC,word,5440FFFD - //patch=0,EE,002B00D0,word,2690C0C0 - //patch=0,EE,002B00D4,word,1040000B - //patch=0,EE,002B00D8,word,3253FFF0 - //patch=0,EE,002B00DC,word,3402C020 - //patch=0,EE,002B00E0,word,12620009 - //patch=0,EE,002B00E4,word,3C150067 -[/patches] +Serial = SCES-52763 +Name = DJ Decks & FX Vol.1 +Region = PAL-G --------------------------------------------- -Serial = SLUS-20072 -Name = MX 2002 - featuring Ricky Carmichael -Region = NTSC-U -Compat = 5 +Serial = SCES-52826 +Name = Sing-Star Party +Region = PAL-E --------------------------------------------- -Serial = SLUS-20073 -Name = Red Faction -Region = NTSC-U -Compat = 5 +Serial = SCES-52827 +Name = SingStar Party +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20074 -Name = Summoner -Region = NTSC-U -Compat = 5 +Serial = SCES-52828 +Name = Sing-Star NRJ Music Tour +Region = PAL-F --------------------------------------------- -Serial = SLUS-20075 -Name = Disney's Jungle Book - Rhythm & Groove -Region = NTSC-U -Compat = 5 +Serial = SCES-52829 +Name = Sing-Star Party +Region = PAL-G --------------------------------------------- -Serial = SLUS-20076 -Name = Disney's Tarzan Untamed -Region = NTSC-U -Compat = 4 +Serial = SCES-52830 +Name = SingStar Party +Region = PAL-S --------------------------------------------- -Serial = SLUS-20077 -Name = Donald Duck Goin' Quackers -Region = NTSC-U -Compat = 5 +Serial = SCES-52883 +Name = EyeToy - Kinetic +Region = PAL-M7 +Compat = 2 --------------------------------------------- -Serial = SLUS-20078 -Name = Silent Scope -Region = NTSC-U +Serial = SCES-52892 +Name = Moto GP 4 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20079 -Name = Dynasty Warriors 2 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20080 -Name = GunGriffon Blaze -Region = NTSC-U -Compat = 5 +Serial = SCES-52893 +Name = Killzone +Region = PAL-E-GR-R --------------------------------------------- -Serial = SLUS-20084 -Name = Soldier of Fortune - Gold Edition -Region = NTSC-U -Compat = 4 +Serial = SCES-52930 +Name = EyeToy - Monkey Mania +Region = PAL-M5 +Compat = 2 --------------------------------------------- -Serial = SLUS-20085 -Name = Silpheed Lost Planet -Region = NTSC-U -Compat = 5 +Serial = SCES-52948 +Name = Getaway, The - Black Monday +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-20086 -Name = Commandos 2 - Men of Courage -Region = NTSC-U +Serial = SCES-53033 +Name = Formula One 2005 +Region = PAL-M7 Compat = 5 --------------------------------------------- -Serial = SLUS-20087 -Name = Army Men - Green Rogue -Region = NTSC-U -Compat = 5 +Serial = SCES-53053 +Name = Death by Degrees +Region = PAL-F-I --------------------------------------------- -Serial = SLUS-20088 -Name = Fur Fighters - Viggo's Revenge -Region = NTSC-U +Serial = SCES-53054 +Name = Death by Degrees +Region = PAL-E-G Compat = 5 --------------------------------------------- -Serial = SLUS-20089 -Name = ESPN - Winter X Games - Snowboarding -Region = NTSC-U +Serial = SCES-53055 +Name = Eyetoy - Antigrav +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20090 -Name = TimeSplitters -Region = NTSC-U +Serial = SCES-53133 +Name = God of War +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20091 -Name = 4x4 Evolution -Region = NTSC-U -Compat = 5 +Serial = SCES-53178 +Name = SingStar Pop +Region = PAL-E --------------------------------------------- -Serial = SLUS-20092 -Name = Surfing H3O -Region = NTSC-U +Serial = SCES-53179 +Name = SingStar Pop +Region = PAL-F --------------------------------------------- -Serial = SLUS-20093 -Name = Madden NFL 2001 -Region = NTSC-U +Serial = SCES-53180 +Name = Sing-Star - The Dome +Region = PAL-G --------------------------------------------- -Serial = SLUS-20094 -Name = X Squad -Region = NTSC-U +Serial = SCES-53181 +Name = SingStar +Region = PAL-I --------------------------------------------- -Serial = SLUS-20095 -Name = SSX -Region = NTSC-U -Compat = 4 +Serial = SCES-53182 +Name = Sing-Star Pop +Region = PAL-S --------------------------------------------- -Serial = SLUS-20096 -Name = Swing Away Golf -Region = NTSC-U -Compat = 5 +Serial = SCES-53183 +Name = SingStar Pop +Region = PAL-E --------------------------------------------- -Serial = SLUS-20097 -Name = FIFA Soccer 2001 -Region = NTSC-U +Serial = SCES-53184 +Name = SingStar Norske Hits +Region = PAL-NO --------------------------------------------- -Serial = SLUS-20098 -Name = Kessen -Region = NTSC-U -Compat = 5 +Serial = SCES-53185 +Name = SingStar Svenska Hits +Region = PAL-SE --------------------------------------------- -Serial = SLUS-20099 -Name = Theme Park Rollercoaster -Region = NTSC-U +Serial = SCES-53202 +Name = Tekken 5 +Region = PAL-M5 Compat = 5 +eeClampMode = 1 --------------------------------------------- -Serial = SLUS-20100 -Name = NHL 2001 -Region = NTSC-U +Serial = SCES-53247 +Name = WRC - World Rally Championship - Rally Evolved +Region = PAL-M8 Compat = 5 +XgKickHack = 1 //SPS. +[patches = cbbc2e7f] + comment=patches by Nachbrenner + //fix delay slot violation + patch=1,EE,003cc890,word,19c0004d + patch=1,EE,003cc894,word,01ad6826 + patch=1,EE,003cbc78,word,01ce7026 + patch=1,EE,003cbc7c,word,19a0006c + patch=1,EE,003cc528,word,01ce7026 + patch=1,EE,003cc52c,word,19a0000c + patch=1,EE,003cc46c,word,01ce7026 + patch=1,EE,003cc470,word,19a0000f + patch=1,EE,003cc704,word,01ce7026 + patch=1,EE,003cc708,word,19a0000f + patch=1,EE,003ccbb4,word,01ce7026 + patch=1,EE,003ccbb8,word,19a00011 +[/patches] --------------------------------------------- -Serial = SLUS-20101 -Name = NASCAR 2001 -Region = NTSC-U +Serial = SCES-53285 +Name = Ratchet - Gladiator +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20102 -Name = NBA Live 2001 -Region = NTSC-U +Serial = SCES-53286 +Name = Jak X - Combat Racing +Region = PAL-M7 +// reads Ratchet Gladiator data +MemCardFilter = SCES-53286/SCES-53285 --------------------------------------------- -Serial = SLUS-20103 -Name = F1 2000 Championship Edition -Region = NTSC-U -Compat = 5 +Serial = SCES-53300 +Name = SOCOM 3 - U.S. Navy SEALs +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20104 -Name = Tiger Woods PGA Tour 2001 -Region = NTSC-U -Compat = 5 +Serial = SCES-53304 +Name = Buzz! The Music Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20105 -Name = MDK 2 - Armageddon -Region = NTSC-U -Compat = 5 +Serial = SCES-53305 +Name = Buzz! The Music Quiz +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-20108 -Name = Wild Wild Racing -Region = NTSC-U -Compat = 5 +Serial = SCES-53307 +Name = Buzz! The Music Quiz +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SLUS-20109 -Name = Rune - Viking Warlord -Region = NTSC-U -Compat = 5 +Serial = SCES-53308 +Name = Buzz! The Music Quiz +Region = PAL-P-S --------------------------------------------- -Serial = SLUS-20111 -Name = Deus Ex - The Conspiracy -Region = NTSC-U +Serial = SCES-53310 +Name = Roland Garros 2005 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20112 -Name = Star Trek - Shattered Universe -Region = NTSC-U +Serial = SCES-53312 +Name = Soul Calibur 3 +Region = PAL-M5 Compat = 5 +vuRoundMode = 3 --------------------------------------------- -Serial = SLUS-20113 -Name = Driving Emotion Type S -Region = NTSC-U -Compat = 5 +Serial = SCES-53315 +Name = EyeToy - Play 3 +Region = PAL-M12 --------------------------------------------- -Serial = SLUS-20114 -Name = Simpsons, The - Skateboarding -Region = NTSC-U -Compat = 5 +Serial = SCES-53323 +Name = SingStar Pop World +Region = PAL-E --------------------------------------------- -Serial = SLUS-20115 -Name = Super Bust-A-Move -Region = NTSC-U +Serial = SCES-53326 +Name = Shadow of the Colossus +Region = PAL-E Compat = 5 +MemCardFilter = SCES-53326/SCES-50760 --------------------------------------------- -Serial = SLUS-20128 -Name = ESPN - MLS Extra Time -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20130 -Name = Street Fighter EX3 -Region = NTSC-U +Serial = SCES-53328 +Name = Genji +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-20131 -Name = Dark Angel - Vampire Apocalypse -Region = NTSC-U -Compat = 5 +Serial = SCES-53347 +Name = SpyToy +Region = PAL-M11 --------------------------------------------- -Serial = SLUS-20132 -Name = Army Men - Sarge's Heroes 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-53358 +Name = 24 - The Game +Region = PAL-M9 --------------------------------------------- -Serial = SLUS-20133 -Name = High Heat Baseball 2002 -Region = NTSC-U +Serial = SCES-53372 +Name = Tourist Trophy - The Real Riding Simulator +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20134 -Name = Sky Odyssey -Region = NTSC-U -Compat = 5 +Serial = SCES-53397 +Name = SingStar Pop - World Events Code +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20136 -Name = Barbarian -Region = NTSC-U +Serial = SCES-53409 +Name = Sly 3 +Region = PAL-M11 Compat = 5 --------------------------------------------- -Serial = SLUS-20138 -Name = Rayman 2 - Revolution -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-20139 -Name = Simpsons, The - Road Rage -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20140 -Name = NHL Hitz 2002 -Region = NTSC-U -Compat = 3 -EETimingHack = 1 +Serial = SCES-53422 +Name = Stuart Little 3 - Big Photo Adventure +Region = PAL-M9 --------------------------------------------- -Serial = SLUS-20141 -Name = CART Fury - Championship Racing -Region = NTSC-U -Compat = 4 -[patches = 116154AD] - - comment=patches by Nachbrenner - - //skip PSX2_Mpeg_PlayFile__FPc - patch=0,EE,00107a00,word,03e00008 - patch=0,EE,00107a04,word,24020001 - //skip SuperSync__Fi - patch=0,EE,00100eb0,word,03e00008 - patch=0,EE,00100eb4,word,24020001 - -[/patches] +Serial = SCES-53449 +Name = AFL Premiership 2005 +Region = PAL-E --------------------------------------------- -Serial = SLUS-20143 -Name = ESPN - NBA 2 Night -Region = NTSC-U +Serial = SCES-53450 +Name = Gaelic Football 2005 +Region = PAL-E-GA // Eng & Gaelic --------------------------------------------- -Serial = SLUS-20144 -Name = Metal Gear Solid 2 - Sons of Liberty -Region = NTSC-U -Compat = 5 +Serial = SCES-53565 +Name = SingStar Pop +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20145 -Name = Ring of Red -Region = NTSC-U -Compat = 5 +Serial = SCES-53602 +Name = Sing-Star '80s +Region = PAL-E --------------------------------------------- -Serial = SLUS-20146 -Name = Shadow of Destiny -Region = NTSC-U -Compat = 5 +Serial = SCES-53603 +Name = Sing-Star '80s +Region = PAL-F --------------------------------------------- -Serial = SLUS-20147 -Name = Aliens vs. Predator - Extinction -Region = NTSC-U -Compat = 5 +Serial = SCES-53604 +Name = Sing-Star '80s +Region = PAL-G --------------------------------------------- -Serial = SLUS-20148 -Name = Zone of the Enders -Region = NTSC-U -Compat = 5 +Serial = SCES-53605 +Name = Sing-Star '80s +Region = PAL-I --------------------------------------------- -Serial = SLUS-20149 -Name = Tribes - Aerial Assault -Region = NTSC-U -Compat = 5 +Serial = SCES-53606 +Name = Sing-Star '80s +Region = PAL-S --------------------------------------------- -Serial = SLUS-20150 -Name = Knockout Kings 2001 -Region = NTSC-U -Compat = 2 +Serial = SCES-53607 +Name = Sing-Star '80s +Region = PAL-DU --------------------------------------------- -Serial = SLUS-20151 -Name = Klonoa 2 - Lunatea's Veil -Region = NTSC-U -Compat = 4 -eeClampMode = 3 //Objects needed appear in wrong places without it -[patches = 2F56CBC9] - - comment=patches by nachbrenner - - //Skip sceIpuSync - patch=0,EE,00305b90,word,03e00008 - -[/patches] +Serial = SCES-53609 +Name = Sing-Star '80s +Region = PAL-SE --------------------------------------------- -Serial = SLUS-20152 -Name = Ace Combat 4 - Shattered Skies -Region = NTSC-U -Compat = 5 -[patches = A32F7CD0] - comment=Rearranging COP2 ops - // this one seems unintuitive but I can't see how the cycles add up for the maddbc to be the source of the flags - patch=0,EE,0010FFC8,word,48428800 - patch=0,EE,0010FFDC,word,4BE83A4B - - // same as ace combat 5, these are definite - patch=0,EE,0017C6C4,word,48438800 - patch=0,EE,0017C6D4,word,4BE4282C - patch=0,EE,0017C0C4,word,48438800 - patch=0,EE,0017C0D4,word,4B0B602C -[/patches] +Serial = SCES-53610 +Name = Sing-Star '80s +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20153 -Name = RC Revenge Pro -Region = NTSC-U +Serial = SCES-53642 +Name = Ape Escape 3 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20154 -Name = NFL Quarterback Club 2002 -Region = NTSC-U +Serial = SCES-53663 +Name = Buzz! The Music Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20157 -Name = Haven - Call of the King -Region = NTSC-U +Serial = SCES-53669 +Name = Buzz! The Music Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20158 -Name = Heroes of Might and Magic -Region = NTSC-U +Serial = SCES-53688 +Name = Urban Reign +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20159 -Name = Dave Mirra Freestyle BMX 2 -Region = NTSC-U -Compat = 2 ---------------------------------------------- -Serial = SLUS-20160 -Name = Winback - Covert Operations -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-20162 -Name = Aqua Aqua -Region = NTSC-U +Serial = SCES-53795 +Name = SingStar '80s +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20164 -Name = Project Eden -Region = NTSC-U +Serial = SCES-53851 +Name = Forbidden Siren 2 +Region = PAL-M5 Compat = 5 +XgKickHack = 1 //SPS. +[patches = C040B6AB] + comment=swapping a COP2 op into place to make the flags work without delays + patch=0,EE,002E2B44,word,48449000 + patch=0,EE,002E2B4C,word,4BC949FF +[/patches] --------------------------------------------- -Serial = SLUS-20165 -Name = Legacy of Kain - Soul Reaver 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-53879 +Name = Buzz! The Big Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20166 -Name = ESPN - National Hockey Night -Region = NTSC-U +Serial = SCES-53880 +Name = Buzz! The Big Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20167 -Name = Quake III - Revolution -Region = NTSC-U -Compat = 2 +Serial = SCES-53881 +Name = Buzz! The Big Quiz +Region = PAL-F --------------------------------------------- -Serial = SLUS-20168 -Name = Triple Play 2002 -Region = NTSC-U +Serial = SCES-53882 +Name = Buzz! The Big Quiz +Region = PAL-I --------------------------------------------- -Serial = SLUS-20169 -Name = Ephemeral Fantasia -Region = NTSC-U -Compat = 5 +Serial = SCES-53883 +Name = Buzz! The Big Quiz +Region = PAL-G --------------------------------------------- -Serial = SLUS-20170 -Name = Adventures of Cookie & Cream, The -Region = NTSC-U -Compat = 5 +Serial = SCES-53884 +Name = Buzz! The Big Quiz +Region = PAL-S +Compat = 2 --------------------------------------------- -Serial = SLUS-20171 -Name = Motor Mayhem - Vehicular Combat League -Region = NTSC-U +Serial = SCES-53889 +Name = SingStar Rocks! +Region = PAL-E --------------------------------------------- -Serial = SLUS-20172 -Name = Pryzm - Chapter One - The Dark Unicorn -Region = NTSC-U -Compat = 5 +Serial = SCES-53890 +Name = SingStar Rocks! +Region = PAL-E --------------------------------------------- -Serial = SLUS-20173 -Name = Unison -Region = NTSC-U +Serial = SCES-53891 +Name = SingStar Rocks! +Region = PAL-G --------------------------------------------- -Serial = SLUS-20174 -Name = Rumble Racing -Region = NTSC-U +Serial = SCES-53893 +Name = SingStar Rocks! +Region = PAL-DU --------------------------------------------- -Serial = SLUS-20175 -Name = Mobile Suit Gundam - Journey to Jaburo -Region = NTSC-U -Compat = 5 +Serial = SCES-53894 +Name = SingStar Rocks! +Region = PAL-HR // Croatian --------------------------------------------- -Serial = SLUS-20176 -Name = NASCAR Heat 2002 -Region = NTSC-U +Serial = SCES-53895 +Name = SingStar Rocks! +Region = PAL-S --------------------------------------------- -Serial = SLUS-20177 -Name = Test Drive - Off-Road - Wide Open -Region = NTSC-U -Compat = 2 +Serial = SCES-53897 +Name = Sing-Star Rocks! +Region = PAL-F --------------------------------------------- -Serial = SLUS-20178 -Name = Giants - Citizen Kabuto -Region = NTSC-U -Compat = 5 +Serial = SCES-53898 +Name = Sing-Star Rocks! +Region = PAL-I --------------------------------------------- -Serial = SLUS-20179 -Name = X-Files - Resist or Serve -Region = NTSC-U +Serial = SCES-53925 +Name = Buzz! The Big Quiz +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-20181 -Name = Escape from Monkey Island -Region = NTSC-U -Compat = 4 +Serial = SCES-53926 +Name = Buzz! The Big Quiz +Region = PAL-M3 // Scandinavia --------------------------------------------- -Serial = SLUS-20182 -Name = Stretch Panic -Region = NTSC-U -Compat = 5 +Serial = SCES-53927 +Name = Buzz! The Big Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20183 -Name = Tiny Toon Adventures - Defenders Of The Universe -Region = NTSC-U -Compat = 5 +Serial = SCES-53929 +Name = Buzz! The Big Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20184 -Name = Resident Evil - CODE Veronica X -Region = NTSC-U +Serial = SCES-53931 +Name = Shinobido - Way of the Ninja +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20186 -Name = Monster Jam - Maximum Destruction -Region = NTSC-U +Serial = SCES-53950 +Name = F1 '06 +Region = PAL-M7 +Compat = 5 --------------------------------------------- -Serial = SLUS-20187 -Name = NBA Street -Region = NTSC-U +Serial = SCES-53960 +Name = B-Boy +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20189 -Name = Tokyo Xtreme Racer Zero -Region = NTSC-U -Compat = 2 +Serial = SCES-54025 +Name = SingStar Rocks! +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20190 -Name = Monster Rancher 3 -Region = NTSC-U -Compat = 4 +Serial = SCES-54041 +Name = Ace Combat - The Belkan War +Region = PAL-M5 +// reads AC4 and 5 saves for bonus unlockables +MemCardFilter = SCES-54041/SCES-50410/SCES-52424 +[patches = 194C9F38] + patch=0,EE,00131EB4,word,48498800 + patch=0,EE,00131EB8,word,4B00682C + patch=0,EE,00131EC4,word,484A8800 + patch=0,EE,00131EC8,word,4B0C682C +[/patches] --------------------------------------------- -Serial = SLUS-20191 -Name = Defender -Region = NTSC-U -Compat = 5 +Serial = SCES-54071 +Name = Buzz! The Big Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20194 -Name = Grandia II -Region = NTSC-U -Compat = 5 +Serial = SCES-54073 +Name = Buzz! The Big Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20195 -Name = Dragon Rage -Region = NTSC-U -Compat = 5 +Serial = SCES-54077 +Name = SingStar [Promo] +Region = PAL-I --------------------------------------------- -Serial = SLUS-20196 -Name = Soccer America -Region = NTSC-U +Serial = SCES-54078 +Name = SingStar Norsk pa Norsk +Region = PAL-NO --------------------------------------------- -Serial = SLUS-20197 -Name = Pac-Man Fever -Region = NTSC-U -Compat = 5 +Serial = SCES-54128 +Name = Deutsch Rock-Pop +Region = PAL-G --------------------------------------------- -Serial = SLUS-20198 -Name = Fire Blade -Region = NTSC-U -Compat = 5 +Serial = SCES-54129 +Name = SingStar +Region = PAL-S --------------------------------------------- -Serial = SLUS-20199 -Name = Shaun Palmer's Pro Snowboarder -Region = NTSC-U +Serial = SCES-54131 +Name = Sing-Star Anthems +Region = PAL-E Compat = 3 --------------------------------------------- -Serial = SLUS-20202 -Name = Crazy Taxi -Region = NTSC-U +Serial = SCES-54145 +Name = Lemmings +Region = PAL-M10 Compat = 5 -[patches = F00293CA] - - comment=patches by Nachbrenner - - //skip movie "PlaySega" - patch=0,EE,001a0b50,word,03e00008 - patch=0,EE,001a0b54,word,00000000 - //skip movie "PlayAcclaim" - patch=0,EE,001a0ce8,word,03e00008 - patch=0,EE,001a0cec,word,00000000 - -[/patches] -[patches = 4C9EE7DF] - - comment=patches by Nachbrenner - - //skip movie "PlaySega" - patch=0,EE,001a1950,word,03e00008 - patch=0,EE,001a1954,word,00000000 - //skip movie "PlayAcclaim" - patch=0,EE,001a1ae8,word,03e00008 - patch=0,EE,001a1aec,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLUS-20204 -Name = Smuggler's Run 2 - Hostile Territory -Region = NTSC-U -Compat = 3 +Serial = SCES-54191 +Name = Sing-Star Legends +Region = PAL-E --------------------------------------------- -Serial = SLUS-20205 -Name = Casper Spirit Dimensions -Region = NTSC-U -Compat = 5 +Serial = SCES-54197 +Name = SingStar Legends +Region = PAL-F --------------------------------------------- -Serial = SLUS-20206 -Name = Army Men - RTS -Region = NTSC-U +Serial = SCES-54198 +Name = SingStar Legends +Region = PAL-G --------------------------------------------- -Serial = SLUS-20207 -Name = Le Mans - 24 Hours -Region = NTSC-U +Serial = SCES-54206 +Name = God of War II +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLUS-20208 -Name = Sunny Garcia Surfing -Region = NTSC-U -Compat = 3 +Serial = SCES-54219 +Name = Buzz! Junior - Jungle Party +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-20209 -Name = Midnight Club II -Region = NTSC-U -Compat = 5 +Serial = SCES-54220 +Name = Buzz! Junior - Jungle Party +Region = PAL-M8 --------------------------------------------- -Serial = SLUS-20210 -Name = 18 Wheeler - American Pro Trucker -Region = NTSC-U -Compat = 5 +Serial = SCES-54257 +Name = SingStar Legends +Region = PAL-S --------------------------------------------- -Serial = SLUS-20211 -Name = Top Gun - Combat Zone -Region = NTSC-U -Compat = 5 +Serial = SCES-54258 +Name = Buzz! The Sports Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20212 -Name = Bloody Roar 3 -Region = NTSC-U +Serial = SCES-54259 +Name = Buzz! The Sports Quiz +Region = PAL-G --------------------------------------------- -Serial = SLUS-20213 -Name = Test Drive -Region = NTSC-U -Compat = 2 +Serial = SCES-54260 +Name = Buzz! The Sports Quiz +Region = PAL-F +--------------------------------------------- +Serial = SCES-54261 +Name = Buzz! The Sports Quiz +Region = PAL-I --------------------------------------------- -Serial = SLUS-20214 -Name = State of Emergency -Region = NTSC-U -Compat = 5 +Serial = SCES-54262 +Name = Buzz! The Sports Quiz +Region = PAL-S --------------------------------------------- -Serial = SLUS-20216 -Name = Devil May Cry -Region = NTSC-U -Compat = 5 +Serial = SCES-54263 +Name = Buzz! The Sports Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20217 -Name = Arctic Thunder -Region = NTSC-U -Compat = 4 +Serial = SCES-54264 +Name = Buzz! The Sports Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20218 -Name = Stunt GP -Region = NTSC-U -Compat = 5 +Serial = SCES-54265 +Name = Buzz! The Sports Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20219 -Name = Time Crisis II -Region = NTSC-U -Compat = 5 +Serial = SCES-54266 +Name = Buzz! The Sports Quiz +Region = PAL-M3 // Scandinavia --------------------------------------------- -Serial = SLUS-20220 -Name = Dead to Rights -Region = NTSC-U -Compat = 5 +Serial = SCES-54267 +Name = Buzz! The Sports Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20221 -Name = Vampire Night -Region = NTSC-U -Compat = 5 -EETimingHack = 1 +Serial = SCES-54268 +Name = Buzz! The Sports Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20222 -Name = MTV - Music Generator 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-54269 +Name = Buzz! The Sports Quiz +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20223 -Name = Splashdown -Region = NTSC-U -Compat = 3 +Serial = SCES-54325 +Name = SingStar Legendat +Region = PAL-FI --------------------------------------------- -Serial = SLUS-20224 -Name = Pac-Man World 2 -Region = NTSC-U -Compat = 4 +Serial = SCES-54329 +Name = SingStar Legends +Region = PAL-I --------------------------------------------- -Serial = SLUS-20225 -Name = Gadget Racers -Region = NTSC-U -Compat = 2 +Serial = SCES-54330 +Name = SingStar Legends +Region = PAL-E --------------------------------------------- -Serial = SLUS-20226 -Name = Batman - Vengeance -Region = NTSC-U +Serial = SCES-54353 +Name = SingStar Legends +Region = PAL-DA +--------------------------------------------- +Serial = SCES-54477 +Name = Socom US Navy Seals - Combined Assault +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-20227 -Name = Star Trek Voyager - Elite Force -Region = NTSC-U +Serial = SCES-54497 +Name = Buzz! Le Mega Quiz +Region = PAL-F --------------------------------------------- -Serial = SLUS-20228 -Name = Silent Hill 2 -Region = NTSC-U -Compat = 5 +Serial = SCES-54499 +Name = Buzz! Das Mega-Quiz +Region = PAL-G --------------------------------------------- -Serial = SLUS-20229 -Name = Jonny Moseley - Mad Trix -Region = NTSC-U -Compat = 5 +Serial = SCES-54500 +Name = Buzz! El Mega Concurso +Region = PAL-S --------------------------------------------- -Serial = SLUS-20230 -Name = Max Payne -Region = NTSC-U -Compat = 5 +Serial = SCES-54507 +Name = Buzz! The Mega Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20231 -Name = Herdy Gerdy -Region = NTSC-U -Compat = 2 +Serial = SCES-54524 +Name = Buzz! Junior - Jungle Party +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-20232 -Name = Thunderstrike - Operation Phoenix -Region = NTSC-U -Compat = 5 +Serial = SCES-54535 +Name = Everybody's Tennis +Region = PAL-M11 --------------------------------------------- -Serial = SLUS-20233 -Name = Mobile Suit Gundam - Zeonic Front -Region = NTSC-U -Compat = 5 +Serial = SCES-54538 +Name = Eyetoy - Play Astro Zoo +Region = PAL-M15 --------------------------------------------- -Serial = SLUS-20234 -Name = MX Rider -Region = NTSC-U +Serial = SCES-54552 +Name = Rogue Galaxy +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20235 -Name = Superman - Shadow of Apokolips -Region = NTSC-U -Compat = 5 +Serial = SCES-54571 +Name = Sing-Star Pop Hits +Region = PAL-G --------------------------------------------- -Serial = SLUS-20236 -Name = Taz Wanted -Region = NTSC-U -Compat = 5 +Serial = SCES-54597 +Name = Buzz! The Mega Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20237 -Name = ESPN - X Games Skateboarding -Region = NTSC-U +Serial = SCES-54598 +Name = SingStar - Svenska Hits Schlager +Region = PAL-SE --------------------------------------------- -Serial = SLUS-20238 -Name = Crash Bandicoot - The Wrath of Cortex -Region = NTSC-U -Compat = 5 +Serial = SCES-54599 +Name = SingStar - '90s +Region = PAL-E --------------------------------------------- -Serial = SLUS-20239 -Name = Driven -Region = NTSC-U +Serial = SCES-54600 +Name = SingStar - Die Toten Hosen +Region = PAL-G --------------------------------------------- -Serial = SLUS-20240 -Name = Conflict Zone -Region = NTSC-U -Compat = 5 +Serial = SCES-54601 +Name = SingStar - Apres-Ski Party +Region = PAL-G --------------------------------------------- -Serial = SLUS-20241 -Name = NCAA Football 2002 -Region = NTSC-U +Serial = SCES-54625 +Name = Buzz! Junior - Monster Rumble +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-20242 -Name = Legends of Wrestling -Region = NTSC-U -Compat = 5 +Serial = SCES-54638 +Name = Gaelic Games - Football 2 +Region = PAL-E-GA // Eng & Gaelic --------------------------------------------- -Serial = SLUS-20243 -Name = Silent Scope 2 - Dark Silhouette -Region = NTSC-U -Compat = 5 +Serial = SCES-54676 +Name = Buzz! Junior - RoboJam +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-20244 -Name = RoboTech BattleCry -Region = NTSC-U -Compat = 5 +Serial = SCES-54688 +Name = ATV Offroad Fury 4 +Region = PAL-M12 --------------------------------------------- -Serial = SLUS-20245 -Name = Jeremy McGrath - Supercross World 2002 -Region = NTSC-U +Serial = SCES-54748 +Name = WipEout Pulse +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20246 -Name = Capcom vs. SNK 2 - Mark of the Millennium 2001 -Region = NTSC-U -Compat = 5 +Serial = SCES-54749 +Name = Buzz! Junior - Dino Den +Region = PAL-M8 --------------------------------------------- -Serial = SLUS-20247 -Name = Tetris Worlds -Region = NTSC-U -Compat = 5 +Serial = SCES-54762 +Name = SingStar R&B +Region = PAL-G --------------------------------------------- -Serial = SLUS-20249 -Name = Armored Core 2 - Another Age -Region = NTSC-U +Serial = SCES-54794 +Name = Syphon Filter - Dark Mirror +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-20250 -Name = Stuntman -Region = NTSC-U -Compat = 4 +Serial = SCES-54823 +Name = SingStar Bollywood +Region = PAL-E --------------------------------------------- -Serial = SLUS-20251 -Name = Harvest Moon - Save the Homeland -Region = NTSC-U -Compat = 5 +Serial = SCES-54844 +Name = Buzz! The Hollywood Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20252 -Name = UFC - Ultimate Fighting Championship - Throwdown -Region = NTSC-U -Compat = 5 +Serial = SCES-54845 +Name = Buzz! The Hollywood Quiz +Region = PAL-G --------------------------------------------- -Serial = SLUS-20253 -Name = Mummy Returns, The -Region = NTSC-U -Compat = 4 +Serial = SCES-54848 +Name = Buzz! Hollywood +Region = PAL-P-S --------------------------------------------- -Serial = SLUS-20255 -Name = Gallop Racer 2001 -Region = NTSC-U +Serial = SCES-54851 +Name = Buzz! The Hollywood Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20257 -Name = Frogger - The Great Quest -Region = NTSC-U -Compat = 5 +Serial = SCES-55093 +Name = Buzz! The Pop Quiz +Region = PAL-E --------------------------------------------- -Serial = SLUS-20259 -Name = Wizadry - Tale of the Forsaken Land -Region = NTSC-U -Compat = 5 +Serial = SCES-55094 +Name = Buzz! The Pop Quiz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-20261 -Name = ESPN - NBA 2 Night 2002 -Region = NTSC-U -Compat = 4 +Serial = SCES-55179 +Name = SingStar Schlager +Region = PAL-G --------------------------------------------- -Serial = SLUS-20262 -Name = Rugby 2002 -Region = NTSC-U +Serial = SCES-55183 +Name = SingStar Turkish Party +Region = PAL-TU --------------------------------------------- -Serial = SLUS-20263 -Name = Madden NFL 2002 -Region = NTSC-U +Serial = SCES-55210 +Name = Buzz! Junior - Ace Racers +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-20264 -Name = F1 2001 -Region = NTSC-U +Serial = SCES-55213 +Name = Buzz! Escuela de Talentos +Region = PAL-S --------------------------------------------- -Serial = SLUS-20265 -Name = James Bond 007 - Agent Under Fire -Region = NTSC-U -Compat = 2 +Serial = SCES-55361 +Name = SingStar Boy Bands vs Girl Bands +Region = PAL-G --------------------------------------------- -Serial = SLUS-20266 -Name = NASCAR - Thunder 2002 -Region = NTSC-U -Compat = 5 +Serial = SCES-55362 +Name = SingStar Hottest Hits +Region = PAL-G --------------------------------------------- -Serial = SLUS-20267 -Name = dot Hack - Part 1 - Infection -Region = NTSC-U -Compat = 5 +Serial = SCES-55385 +Name = Buzz! Brain of the UK +Region = PAL-E --------------------------------------------- -Serial = SLUS-20268 -Name = Star Wars - Racer Revenge -Region = NTSC-U -Compat = 4 +Serial = SCES-55387 +Name = Buzz! Deutschlands Superquiz +Region = PAL-G --------------------------------------------- -Serial = SLUS-20270 -Name = Eve of Extinction -Region = NTSC-U +Serial = SCES-55437 +Name = SingStar ABBA +Region = PAL-G +--------------------------------------------- +Serial = SCES-55454 +Name = SingStar Queen +Region = PAL-G +--------------------------------------------- +Serial = SCES-55464 +Name = Hanuman: Boy Warrior +Region = PAL-E-HI // Eng & Hindi Compat = 5 --------------------------------------------- -Serial = SLUS-20271 -Name = Shifters -Region = NTSC-U -Compat = 4 +Serial = SCES-55510 +Name = Jak and Dexter - The Lost Frontier +Region = PAL-M12 --------------------------------------------- -Serial = SLUS-20272 -Name = Rayman Arena -Region = NTSC-U +Serial = SCES-55535 +Name = Desi Adda : Games of India +Region = PAL-M4 // Eng, Hindi, Punjabi & Tamil Compat = 5 --------------------------------------------- -Serial = SLUS-20273 -Name = Namco Museum -Region = NTSC-U -Compat = 4 +Serial = SCES-55538 +Name = SingStar +Region = PAL-G --------------------------------------------- -Serial = SLUS-20274 -Name = City Crisis -Region = NTSC-U +Serial = SCES-55552 +Name = SingStar MoTown +Region = PAL-G --------------------------------------------- -Serial = SLUS-20275 -Name = Kessen 2 -Region = NTSC-U -Compat = 4 -[patches = 53A803AF] - comment=COP2 flag instance patch by refraction - // a mac flag check just after a vsub which gets in the way, rearranging - patch=0,EE,0016EFB0,word,48438800 - patch=0,EE,0016EFB4,word,4BE521AC - patch=0,EE,0016EFB8,word,30848000 - patch=0,EE,0016EFBC,word,4BE72B3C -[/patches] +Serial = SCES-55557 +Name = SingStar Take That +Region = PAL-G --------------------------------------------- -Serial = SLUS-20277 -Name = Dynasty Warriors 3 -Region = NTSC-U -Compat = 5 +Serial = SCES-55570 +Name = SingStar Chartbreaker +Region = PAL-G --------------------------------------------- -Serial = SLUS-20278 -Name = Yanya Caballista - City Skater -Region = NTSC-U +Serial = SCES-55573 +Name = MotorStorm - Arctic Edge +Region = PAL-M14 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLUS-20279 -Name = X-Men - Next Dimension -Region = NTSC-U -Compat = 3 +Serial = SCES-55606 +Name = SingStar Die groten Solokunstler +Region = PAL-G --------------------------------------------- -Serial = SLUS-20280 -Name = FIFA 2002 -Region = NTSC-U +Serial = SCES-55661 +Name = RA.ONE: The Game +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-20281 -Name = NHL 2002 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20282 -Name = Victorious Boxers - Ippo's Road to Glory -Region = NTSC-U -Compat = 4 +Serial = SCES-82034 +Name = Xenosaga II - Jenseits von Gut und Bose [Disc 1] +Region = PAL-M3 +MemCardFilter = SLES-82034/SCES-82034 --------------------------------------------- -Serial = SLUS-20283 -Name = World of Outlaws - Sprint Cars 2002 -Region = NTSC-U +Serial = SCES-82035 +Name = Xenosaga II - Jenseits von Gut und Bose [Disc 2] +Region = PAL-M3 +MemCardFilter = SLES-82034/SCES-82034 --------------------------------------------- -Serial = SLUS-20284 -Name = Freaky Flyers -Region = NTSC-U -Compat = 4 +Serial = SCKA-10006 +Name = Come on Baby +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20285 -Name = Moto GP 2 -Region = NTSC-U +Serial = SCKA-20004 +Name = Sly Cooper and the Thievius Raccoonus +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20286 -Name = Smash Court Tennis - Pro Tournament -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20287 -Name = Guilty Gear X -Region = NTSC-U +Serial = SCKA-20008 +Name = Tales of Destiny 2 +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20288 -Name = Godai - Elemental Force -Region = NTSC-U +Serial = SCKA-20009 +Name = R-Type Final +Region = NTSC-K Compat = 5 +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLUS-20291 -Name = Big Mutha Truckers -Region = NTSC-U -Compat = 1 +Serial = SCKA-20010 +Name = Jak II +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20292 -Name = Tsugunai - Atonement -Region = NTSC-U +Serial = SCKA-20011 +Name = Ratchet & Clank 2 +Region = NTSC-K +MemCardFilter = SCKA-20011/SCKA-20120 +--------------------------------------------- +Serial = SCKA-20012 +Name = Ark the Lad - jeongryeongui Hwanghon +Region = NTSC-K +--------------------------------------------- +Serial = SCKA-20014 +Name = Dark Claud 2 +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20293 -Name = Star Wars - Jedi Starfighter -Region = NTSC-U +Serial = SCKA-20015 +Name = Time Crisis 3 +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20294 -Name = Gitaroo Man -Region = NTSC-U +Serial = SCKA-20016 +Name = Soul Calibur 2 +Region = NTSC-K Compat = 5 -eeRoundMode = 1 -vuRoundMode = 3 +vuClampMode = 2 //SPS(Spikey Polygon Syndrome) solution --------------------------------------------- -Serial = SLUS-20296 -Name = Kao the Kangaroo - Round 2 -Region = NTSC-U -Compat = 4 +Serial = SCKA-20018 +Name = The Getaway +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20297 -Name = Return to Castle Wolfenstein - Operation Resurrection -Region = NTSC-U +Serial = SCKA-20019 +Name = Siren +Region = NTSC-K +--------------------------------------------- +Serial = SCKA-20020 +Name = SOCOM II - U.S. Navy SEALs +Region = NTSC-K +Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD +--------------------------------------------- +Serial = SCKA-20022 +Name = Gran Turismo 4 Prologue +Region = NTSC-K +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +--------------------------------------------- +Serial = SCKA-20023 +Name = Fatal Frame 2 +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20298 -Name = High Heat - Major League Baseball 2003 -Region = NTSC-U +Serial = SCKA-20025 +Name = Katamari Damacy +Region = NTSC-K +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLUS-20299 -Name = Street Hoops - King of the Court -Region = NTSC-U +Serial = SCKA-20026 +Name = Gungrave O.D. +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20300 -Name = Dark Summit -Region = NTSC-U +Serial = SCKA-20027 +Name = Ghost in the Shell - Stand Alone Complex +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20301 -Name = Hidden Invasion -Region = NTSC-U +Serial = SCKA-20028 +Name = Ico [PlayStation2 Big Hit Series] +Region = NTSC-K Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20302 -Name = Extreme-G Racing - XG3 -Region = NTSC-U -Compat = 5 +Serial = SCKA-20029 +Name = Gran Turismo Concept 2002 Tokyo-Seoul [PlayStation 2 Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20303 -Name = NBA Live 2002 -Region = NTSC-U +Serial = SCKA-20032 +Name = Syphon Filter - The Omega Virus +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20305 -Name = Simpsons, The - Road Rage -Region = NTSC-U -Compat = 4 +Serial = SCKA-20033 +Name = Smash Court Professional Tournament 2 [Limited Edition] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20306 -Name = Contra - Shattered Soldier -Region = NTSC-U -Compat = 5 +Serial = SCKA-20034 +Name = Time Crisis 3 [PlayStation 2 Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20307 -Name = Burnout -Region = NTSC-U -Compat = 5 +Serial = SCKA-20035 +Name = Hot Shots Golf 3 [PlayStation 2 Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20308 -Name = ESPN - NFL Prime Time 2002 -Region = NTSC-U +Serial = SCKA-20037 +Name = Ratchet & Clank 3 +Region = NTSC-K +MemCardFilter = SCKA-20037/SCKA-20011/SCKA-20120 --------------------------------------------- -Serial = SLUS-20309 -Name = Jade Cocoon 2 -Region = NTSC-U -Compat = 5 +Serial = SCKA-20038 +Name = Time Crisis - Crisis Zone +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20310 -Name = Gravity Games Bike - Street Vert. Dirt -Region = NTSC-U -Compat = 5 +Serial = SCKA-20039 +Name = Tekken Nina Williams In Death By Degree +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20311 -Name = All-Star Baseball 2003 -Region = NTSC-U +Serial = SCKA-20040 +Name = Jak 3 +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20312 -Name = Final Fantasy X -Region = NTSC-U +Serial = SCKA-20043 +Name = Magna Carta +Region = NTSC-K +--------------------------------------------- +Serial = SCKA-20044 +Name = Sly Cooper 2 Band of Thieves +Region = NTSC-K Compat = 5 -IPUWaitHack = 1 --------------------------------------------- -Serial = SLUS-20313 -Name = Wave Rally -Region = NTSC-U +Serial = SCKA-20047 +Name = Armored Core Nine Breaker +Region = NTSC-K +MemCardFilter = SCKA-20047/SLKA-25201/SLKA-25202 --------------------------------------------- -Serial = SLUS-20314 -Name = TimeSplitters 2 -Region = NTSC-U +Serial = SCKA-20048 +Name = Killzone +Region = NTSC-K +--------------------------------------------- +Serial = SCKA-20049 +Name = Tekken 5 +Region = NTSC-K +eeClampMode = 1 +--------------------------------------------- +Serial = SCKA-20050 +Name = Tales of Legendia +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20315 -Name = Spyro the Dragon - Enter the Dragonfly -Region = NTSC-U -Compat = 2 -[patches = 4B8E0DE8] - comment=Spyro NTSC startup fix - patch=1,EE,001e71dc,word,24020001 -[/patches] +Serial = SCKA-20051 +Name = Minna Daisuki Katamari Damacy +Region = NTSC-K +vuClampMode = 3 +mvuFlagSpeedHack = 0 +MemCardFilter = SCKA-20051/SCKA-20025 --------------------------------------------- -Serial = SLUS-20316 -Name = WWF SmackDown! - Just Bring It! -Region = NTSC-U +Serial = SCKA-20052 +Name = Genji +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20318 -Name = King's Field IV -Region = NTSC-U +Serial = SCKA-20053 +Name = SOCOM II - U.S. Navy SEALs [PlayStation 2 Big Hit Series] +Region = NTSC-K Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20319 -Name = Romance of the Three Kingdoms VII -Region = NTSC-U +Serial = SCKA-20054 +Name = Tales of Destiny 2 [PlayStation 2 Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20320 -Name = ESPN - International Winter Sports 2002 -Region = NTSC-U +Serial = SCKA-20055 +Name = Mystic Nights +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20321 -Name = ESPN - Winter X Games - Snowboarding 2002 -Region = NTSC-U -Compat = 5 +Serial = SCKA-20056 +Name = LuluRara - Powered by Zillerner [with USB microphone] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20322 -Name = NFL 2K2 - Sega Sports -Region = NTSC-U +Serial = SCKA-20058 +Name = Bumpy Trot +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20323 -Name = Virtua Fighter 4 -Region = NTSC-U +Serial = SCKA-20059 +Name = Soul Calibur III +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20324 -Name = Paris Dakar Rally -Region = NTSC-U -Compat = 5 +Serial = SCKA-20060 +Name = Ratchet - Deadlocked +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20325 -Name = Bass Strike -Region = NTSC-U +Serial = SCKA-20061 +Name = Wanda to Kyozou (Shadow of the Colossus) +Region = NTSC-K Compat = 5 +MemCardFilter = SCKA-20061/SCPS-15097/SCPS-19320/SCKA-20028/SCPS-56001 --------------------------------------------- -Serial = SLUS-20326 -Name = SSX Tricky -Region = NTSC-U -Compat = 5 +Serial = SCKA-20062 +Name = Ape Escape 3 +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20327 -Name = Aggressive Inline -Region = NTSC-U +Serial = SCKA-20063 +Name = Sly Cooper 3 Honor Among Thieves +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20328 -Name = Tekken 4 -Region = NTSC-U -Compat = 5 -[patches = 833FE0A4] - - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,002917e4,word,24200001 - patch=0,EE,002919e4,word,00000000 - -[/patches] +Serial = SCKA-20064 +Name = SOCOM 3 - U.S. Navy SEALs +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20329 -Name = Pro Race Driver -Region = NTSC-U -Compat = 5 +Serial = SCKA-20069 +Name = Siren 2 +Region = NTSC-K +XgKickHack = 1 //SPS. --------------------------------------------- -Serial = SLUS-20330 -Name = NBA 2K2 - Sega Sports -Region = NTSC-U +Serial = SCKA-20070 +Name = Ace Combat Zero - The Belkan War +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20331 -Name = Minority Report - Everybody Runs -Region = NTSC-U -Compat = 5 +Serial = SCKA-20071 +Name = MLB '06 - The Show +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20332 -Name = NCAA March Madness 2002 -Region = NTSC-U +Serial = SCKA-20072 +Name = LuluRara 2 [with USB microphone] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20333 -Name = Turok - Evolution -Region = NTSC-U -Compat = 2 +Serial = SCKA-20073 +Name = Final Fantasy XII +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20334 -Name = Kelly Slater's Pro Surfer -Region = NTSC-U -Compat = 5 +Serial = SCKA-20078 +Name = Killzone [PlayStation 2 Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20335 -Name = Matt Hoffman's Pro BMX 2 -Region = NTSC-U +Serial = SCKA-20079 +Name = Valkyrie Profile 2 - Silmeria +Region = NTSC-K Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLUS-20336 -Name = Spider-Man - The Movie -Region = NTSC-U -Compat = 5 +Serial = SCKA-20081 +Name = Tekken 5 [PlayStation 2 Big Hit Series] +Region = NTSC-K +eeClampMode = 1 --------------------------------------------- -Serial = SLUS-20337 -Name = X-Men - Wolverines Revenge -Region = NTSC-U -Compat = 4 +Serial = SCKA-20086 +Name = Shin Onimusha - Dawn of Dreams [Disc1of2] +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20339 -Name = Bass Fishing Duel - Sega Sports -Region = NTSC-U -Compat = 5 +Serial = SCKA-20087 +Name = Shin Onimusha - Dawn of Dreams [Disc2of2] +Region = NTSC-K +MemCardFilter = SCKA-20086 --------------------------------------------- -Serial = SLUS-20340 -Name = RPG Maker 2 -Region = NTSC-U +Serial = SCKA-20090 +Name = God Hand +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20341 -Name = Woody Woodpecker - Escape from Buzz Buzzard Park -Region = NTSC-U -Compat = 5 +Serial = SCKA-20092 +Name = K-1 World Grand Prix 2006 +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20342 -Name = Top Angler - Real Bass Fishing -Region = NTSC-U +Serial = SCKA-20096 +Name = Barnyard +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20343 -Name = Forever Kingdom -Region = NTSC-U -Compat = 4 +Serial = SCKA-20099 +Name = Persona 3 +Region = NTSC-K +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLUS-20344 -Name = Rez -Region = NTSC-U +Serial = SCKA-20101 +Name = Seiken Densetsu 4 (Dawn of Mana) +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20345 -Name = Mike Tyson - Heavyweight Boxing -Region = NTSC-U -Compat = 4 +Serial = SCKA-20107 +Name = Odin Sphere +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20346 -Name = AirBlade -Region = NTSC-U -Compat = 5 +Serial = SCKA-20109 +Name = Persona 3 FES [Independent Starting Version] +Region = NTSC-K +VuClipFlagHack = 1 +MemCardFilter = SCKA-20109/SCKA-20099 --------------------------------------------- -Serial = SLUS-20347 -Name = Shadow Hearts -Region = NTSC-U -Compat = 5 +Serial = SCKA-20114 +Name = Obscure II - The Aftermath +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20348 -Name = Monopoly Party -Region = NTSC-U -Compat = 4 +Serial = SCKA-20117 +Name = Super Robot Taisen OG - Original Generations Gaiden +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20349 -Name = Scooby Doo! Night of 100 Frights -Region = NTSC-U +Serial = SCKA-20120 +Name = Ratchet & Clank +Region = NTSC-K +--------------------------------------------- +Serial = SCKA-20132 +Name = Shin Megami Tensei: Persona 4 +Region = NTSC-K Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLUS-20352 -Name = Looney Tunes Space Race -Region = NTSC-U +Serial = SCKA-24008 +Name = SOCOM - U.S. Navy SEALs +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20353 -Name = King's Field IV - The Ancient City -Region = NTSC-U +Serial = SCKA-30001 +Name = Gran Turismo 4 +Region = NTSC-K +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works --------------------------------------------- -Serial = SLUS-20354 -Name = Red Card Soccer 2003 -Region = NTSC-U +Serial = SCKA-30002 +Name = God of War +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20355 -Name = Tom & Jerry - War of the Whiskers -Region = NTSC-U +Serial = SCKA-30006 +Name = God of War 2 +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20356 -Name = Transworld Surf -Region = NTSC-U +Serial = SCPS-11001 +Name = I.Q. Remix +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20357 -Name = WTA Tour Tennis -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20358 -Name = Malice -Region = NTSC-U -Compat = 2 ---------------------------------------------- -Serial = SLUS-20360 -Name = Blade 2 -Region = NTSC-U +Serial = SCPS-11002 +Name = Fantavision +Region = NTSC-J Compat = 5 -EETimingHack = 1 // Only is needed from r4821 and later versions. ---------------------------------------------- -Serial = SLUS-20361 -Name = Rally Fusion - Race of Champions -Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20362 -Name = Need for Speed - Hot Pursuit 2 -Region = NTSC-U +Serial = SCPS-11003 +Name = Ico +Region = NTSC-J Compat = 5 -vuClampMode = 2 //white textures +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20363 -Name = Sled Storm -Region = NTSC-U +Serial = SCPS-11004 +Name = Bikkuri Mouse +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20364 -Name = Tiger Woods PGA Tour 2002 -Region = NTSC-U +Serial = SCPS-11005 +Name = Sagashi ni Ikouyo - Go to Find It! +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20365 -Name = Pirates - Legend of Black Kat -Region = NTSC-U +Serial = SCPS-11006 +Name = Sky Gunner +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20366 -Name = Triple Play 2002 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20367 -Name = Freekstyle -Region = NTSC-U -Compat = 5 +Serial = SCPS-11007 +Name = Tsuganai +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20368 -Name = Medal of Honor - Frontline -Region = NTSC-U +Serial = SCPS-11008 +Name = Boku to Mao +Region = NTSC-J Compat = 5 ---------------------------------------------- -Serial = SLUS-20369 -Name = Knockout Kings 2002 -Region = NTSC-U -Compat = 4 -[patches = 36FEEE3A] +[patches = EE838B5C] - comment=patches by Nachbrenner + comment=patches by Nachbrenner - //fix DMA loop - patch=0,EE,001d8020,word,1000000f + //Skip OP.PSS + patch=0,EE,001d6258,word,24020001 [/patches] --------------------------------------------- -Serial = SLUS-20370 -Name = Kingdom Hearts -Region = NTSC-U +Serial = SCPS-11009 +Name = Ka (Mosquito) +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20371 -Name = Thing, The -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SLUS-20373 -Name = Men in Black 2 - Alien Escape -Region = NTSC-U -Compat = 5 -VIFFIFOHack = 1 +Serial = SCPS-11010 +Name = Yoake no Mariko [with Microphone] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20374 -Name = Hitman 2 - Silent Assassin -Region = NTSC-U -Compat = 4 +Serial = SCPS-11011 +Name = Check-i-TV +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20375 -Name = Mister Mosquito -Region = NTSC-U +Serial = SCPS-11012 +Name = Rimoko Koron +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20376 -Name = Mad Maestro -Region = NTSC-U +Serial = SCPS-11013 +Name = Bravo Music +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20377 -Name = Metropolismania -Region = NTSC-U +Serial = SCPS-11014 +Name = Pipo Saru (Ape Escape) 2001 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20378 -Name = Salt Lake 2002 -Region = NTSC-U +Serial = SCPS-11015 +Name = Check-i-TV +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20379 -Name = Dark Angel - James Cameron's -Region = NTSC-U +Serial = SCPS-11016 +Name = Seigi no Mikata +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20380 -Name = Jurassic Park - Operation Genesis -Region = NTSC-U +Serial = SCPS-11017 +Name = Bravo Music - Christmas Edition +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20381 -Name = MX Superfly -Region = NTSC-U -Compat = 5 +Serial = SCPS-11018 +Name = Yoake no Mariko +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20382 -Name = Mobile Suit Gundam - Federation vs. Zeon -Region = NTSC-U +Serial = SCPS-11019 +Name = Bravo Music - Chou-Meikyokuban [Limited Edition] [Disc1of2] +Region = NTSC-J +MemCardFilter = SCPS-11023/SCPS-11019/SCPS-11020 --------------------------------------------- -Serial = SLUS-20383 -Name = Vexx -Region = NTSC-U -Compat = 2 +Serial = SCPS-11020 +Name = Bravo Music - Chou-Meikyokuban [Limited Edition] [Disc2of2] +Region = NTSC-J +MemCardFilter = SCPS-11023/SCPS-11019/SCPS-11020 --------------------------------------------- -Serial = SLUS-20384 -Name = Skygunner -Region = NTSC-U -Compat = 5 +Serial = SCPS-11021 +Name = Yoake no Mariko 2nd Act +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20385 -Name = WWE Crush Hour -Region = NTSC-U -Compat = 5 +Serial = SCPS-11022 +Name = Yoake no Mariko 2nd Act +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20386 -Name = Lethal Skies - Elite Pilot - Team SW -Region = NTSC-U -Compat = 5 +Serial = SCPS-11023 +Name = Bravo Music - Chou-Meikyokuban +Region = NTSC-J +MemCardFilter = SCPS-11023/SCPS-11019/SCPS-11020 --------------------------------------------- -Serial = SLUS-20387 -Name = Suikoden III -Region = NTSC-U +Serial = SCPS-11024 +Name = Otostaz +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20388 -Name = Fatal Frame -Region = NTSC-U +Serial = SCPS-11025 +Name = Space Fisherman +Region = NTSC-J Compat = 5 +vuClampMode = 3 --------------------------------------------- -Serial = SLUS-20389 -Name = Endgame -Region = NTSC-U -Compat = 5 +Serial = SCPS-11026 +Name = Gacharoku +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20390 -Name = Risk - Global Domination -Region = NTSC-U +Serial = SCPS-11027 +Name = Mawaza +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20391 -Name = Terminator, The - Dawn of Fate -Region = NTSC-U -Compat = 4 +Serial = SCPS-11028 +Name = Let's Bravo Music +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20392 -Name = Antz Extreme Racing -Region = NTSC-U +Serial = SCPS-11029 +Name = Shibai Muchi +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-11030 +Name = Shibai Muchi [with Microphone] +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-11031 +Name = Kumauta +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-11032 +Name = Vib Ripple +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20393 -Name = Onimusha 2 - Samurai's Destiny -Region = NTSC-U +Serial = SCPS-11033 +Name = Mojib-Ribbon +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20394 -Name = Ecco the Dolphin - Defender of the Future -Region = NTSC-U -Compat = 2 +Serial = SCPS-11034 +Name = Gacharoku 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20395 -Name = GTC Africa -Region = NTSC-U +Serial = SCPS-15001 +Name = Scandal +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLUS-20397 -Name = Tenchu 3 - Wrath of Heaven -Region = NTSC-U +Serial = SCPS-15002 +Name = TV DJ +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20398 -Name = Road Trip -Region = NTSC-U +Serial = SCPS-15003 +Name = Sky Odyssey +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20399 -Name = MTX Mototrax -Region = NTSC-U -Compat = 2 +Serial = SCPS-15004 +Name = Dark Cloud +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20400 -Name = Mission Impossible - Operation Surma -Region = NTSC-U -Compat = 4 +Serial = SCPS-15005 +Name = Phase Paradox +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20402 -Name = Britney's Dance Beat -Region = NTSC-U +Serial = SCPS-15006 +Name = Popolocrois Story 3 [Limited Edition] +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15007 +Name = Blood - The Last Vampire - Vol.1 Joukan +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20403 -Name = Evil Dead - A Fistful of Boomstick -Region = NTSC-U -Compat = 4 +Serial = SCPS-15008 +Name = Blood - The Last Vampire - Vol.2 Gekan +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLUS-20404 -Name = FIFA World Cup 2002 -Region = NTSC-U +Serial = SCPS-15009 +Name = Gran Turismo 3 - A-Spec +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20405 -Name = Downforce -Region = NTSC-U +Serial = SCPS-15010 +Name = Gran Turismo - Concept 2001 Tokyo +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20406 -Name = Pride FC - Fighting Championships -Region = NTSC-U +Serial = SCPS-15011 +Name = Extermination +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20407 -Name = Way of the Samurai -Region = NTSC-U -Compat = 5 +Serial = SCPS-15012 +Name = Surveillance +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20408 -Name = Pitfall - The Lost Expedition -Region = NTSC-U -Compat = 2 +Serial = SCPS-15013 +Name = Poinie's Poin +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20409 -Name = Total Immersion Racing -Region = NTSC-U -Compat = 4 +Serial = SCPS-15014 +Name = Genshi no Kotoba +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20412 -Name = Hot Wheels - Velocity X -Region = NTSC-U +Serial = SCPS-15015 +Name = Toro to Kyuujitsu +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20413 -Name = Shadow Man - 2econd Coming -Region = NTSC-U -Compat = 4 +Serial = SCPS-15016 +Name = Minna no Golf 3 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20414 -Name = Legaia 2 - Duel Saga -Region = NTSC-U -Compat = 5 +Serial = SCPS-15017 +Name = PaRappa the Rapper 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20415 -Name = BMX XXX -Region = NTSC-U -Compat = 4 +Serial = SCPS-15018 +Name = Train Simulator Real, The - Yamanote Sen +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20416 -Name = Headhunter -Region = NTSC-U +Serial = SCPS-15019 +Name = Formula One 2001 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20417 -Name = Grandia Xtreme -Region = NTSC-U -Compat = 5 +Serial = SCPS-15020 +Name = Legaia 2 - Duel Saga +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20418 -Name = Wakeboarding Unleashed featuring Shaun Murray -Region = NTSC-U -Compat = 2 +Serial = SCPS-15021 +Name = Jak & Daxter 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20419 -Name = WRC - World Rally Championship -Region = NTSC-U +Serial = SCPS-15022 +Name = Dual Hearts +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20420 -Name = Star Wars - Bounty Hunter -Region = NTSC-U +Serial = SCPS-15023 +Name = Wild ARMs - Advanced 3rd +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15024 +Name = Wild ARMs - Advanced 3rd +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15025 +Name = Saru Get You 2 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20421 -Name = Battlestar Galactica -Region = NTSC-U -Compat = 4 +Serial = SCPS-15026 +Name = Boku no Natsuyasumi 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20422 -Name = Hulk, The -Region = NTSC-U -Compat = 4 +Serial = SCPS-15027 +Name = PoPoLoCrois - Hajimari no Bouken [Limited] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20423 -Name = Mortal Kombat - Deadly Alliance -Region = NTSC-U -Compat = 5 +Serial = SCPS-15028 +Name = PoPoLoCrois - Hajimari no Bouken +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20424 -Name = Scorpion King, The - Rise of the Akkadian -Region = NTSC-U -Compat = 4 +Serial = SCPS-15029 +Name = Xi (Sai) Jumbo +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20425 -Name = Spongebob Squarepants - Revenge of the Flying Dutchman -Region = NTSC-U +Serial = SCPS-15030 +Name = Fantavision +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20428 -Name = Fisherman's Bass Club -Region = NTSC-U -Compat = 5 +Serial = SCPS-15031 +Name = Train Simulator Real, The +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20429 -Name = Riding Spirits -Region = NTSC-U -Compat = 5 +Serial = SCPS-15032 +Name = Formula One 2002 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20430 -Name = Savage Skies -Region = NTSC-U -Compat = 3 +Serial = SCPS-15033 +Name = Dark Chronicle +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20431 -Name = Wreckless - The Yakuza Missions -Region = NTSC-U -Compat = 5 +Serial = SCPS-15034 +Name = This is Football 2003 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20433 -Name = SWAT - Global Strike Team -Region = NTSC-U -Compat = 4 -eeClampMode = 3 //For grey screen ingame. +Serial = SCPS-15035 +Name = Train Simulator Real, The - Keihin Keikyu +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20434 -Name = Myst III - Exile -Region = NTSC-U -Compat = 5 +Serial = SCPS-15036 +Name = Kaitou Sly Cooper +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20435 -Name = Armored Core 3 -Region = NTSC-U +Serial = SCPS-15037 +Name = Ratchet & Clank +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20436 -Name = Guilty Gear X2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15038 +Name = Operator's Side +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20437 -Name = Dance Dance Revolution MAX -Region = NTSC-U -Compat = 5 +Serial = SCPS-15039 +Name = Operator's Side +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20438 -Name = NHL Hitz 2003 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15040 +Name = Arc the Lad - Twilight of the Spirits [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20439 -Name = Futurama -Region = NTSC-U -Compat = 5 +Serial = SCPS-15041 +Name = Arc the Lad - Seirei no Koukon +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20440 -Name = Kya - Dark Lineage -Region = NTSC-U -Compat = 4 +Serial = SCPS-15042 +Name = Deka Voice [with Microphone] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20441 -Name = NASCAR - Dirt to Daytona -Region = NTSC-U +Serial = SCPS-15043 +Name = Deka Voice +Region = NTSC-J Compat = 4 --------------------------------------------- -Serial = SLUS-20442 -Name = Red Faction 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15044 +Name = SOCOM - U.S. Navy SEALs +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20443 -Name = Rugrats - Royal Ransom -Region = NTSC-U +Serial = SCPS-15045 +Name = Ka (Mosquito) - Let's Go Hawaiian +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20444 -Name = Tankers -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20445 -Name = Robot Alchemic Drive - RAD -Region = NTSC-U +Serial = SCPS-15046 +Name = Hungry Ghosts +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20446 -Name = Agassi Tennis Generation -Region = NTSC-U -Compat = 5 +Serial = SCPS-15047 +Name = Dokodemo Issyo - Watashi na Ehon +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20448 -Name = Summoner 2 -Region = NTSC-U +Serial = SCPS-15049 +Name = Minna no Golf Online +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15050 +Name = Flipnic +Region = NTSC-J Compat = 5 +[patches = 25433CBD] + + comment=patches by Nachbrenner + + // fix D3_CHCR (might be redundant) + patch=0,EE,0011c1b8,word,00000000 + // skip sceIpuSync + patch=0,EE,00208eb0,word,03e00008 + patch=0,EE,00208eb4,word,00000000 + // fix sceIpuRestartDMA + patch=0,EE,00208e04,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-20452 -Name = Egg Mania - Eggstreme Madness -Region = NTSC-U -Compat = 2 +Serial = SCPS-15051 +Name = MLB 2003 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20453 -Name = NCAA Football 2K3 -Region = NTSC-U +Serial = SCPS-15052 +Name = Saints Seinaru Mamono +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20454 -Name = Enter the Matrix -Region = NTSC-U +Serial = SCPS-15053 +Name = Siren +Region = NTSC-J Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20455 -Name = F1 2002 -Region = NTSC-U +Serial = SCPS-15054 +Name = Chain Drive +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20456 -Name = Soccer Mania -Region = NTSC-U -Compat = 5 +Serial = SCPS-15055 +Name = Gran Turismo 4 - Prologue +Region = NTSC-J +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SLUS-20457 -Name = NFL 2K3 - Sega Sports -Region = NTSC-U +Serial = SCPS-15056 +Name = Ratchet & Clank 2 +Region = NTSC-J +MemCardFilter = SCPS-15056/SCPS-15037 +--------------------------------------------- +Serial = SCPS-15057 +Name = Jak & Daxter 2 +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15058 +Name = Arc the Lad - Generation +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20458 -Name = Dr. Muto -Region = NTSC-U -Compat = 5 +Serial = SCPS-15059 +Name = Minna no Golf 4 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20459 -Name = Shinobi -Region = NTSC-U -Compat = 5 +Serial = SCPS-15060 +Name = Koufuku Sousakan +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20460 -Name = Super Bust-A-Move 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15061 +Name = EyeToy - Play [with Camera] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20461 -Name = BloodRayne -Region = NTSC-U -Compat = 5 +Serial = SCPS-15062 +Name = Bakuso! Mountain Bikers +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20462 -Name = Wipeout Fusion -Region = NTSC-U -Compat = 5 +Serial = SCPS-15063 +Name = Popolocrois - The Law of the Moon +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20463 -Name = Dropship - United Peace Force -Region = NTSC-U -Compat = 2 +Serial = SCPS-15064 +Name = Ghost in the Shell - Stand Alone Complex +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLUS-20464 -Name = Fugitive Hunter - War on Terror -Region = NTSC-U +Serial = SCPS-15065 +Name = SOCOM II - U.S. Navy SEALs +Region = NTSC-J Compat = 5 EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20465 -Name = Alter Echo -Region = NTSC-U -Compat = 5 +Serial = SCPS-15066 +Name = Prince of Persia - The Sands of Time +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20466 -Name = Gravenville - Ghost Master -Region = NTSC-U +Serial = SCPS-15067 +Name = Dokodemo Issyo - Toro to Nagare Boshi +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20467 -Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" -Region = NTSC-U +Serial = SCPS-15068 +Name = MLB 2004 +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15069 +Name = Fish - Legend of Seven Waters and Gods +Region = NTSC-J Compat = 5 -//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang --------------------------------------------- -Serial = SLUS-20468 -Name = Dynasty Tactics -Region = NTSC-U +Serial = SCPS-15070 +Name = EyeToy - Play [Game Only] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20469 -Name = Xenosaga - Episode I - Der Wille zur Macht -Region = NTSC-U -Compat = 5 +Serial = SCPS-15071 +Name = Minna no Golf Online +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20470 -Name = EverQuest - Online Adventures -Region = NTSC-U +Serial = SCPS-15072 +Name = Gacha Mecha Stadium - Saru Battle +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20471 -Name = Rygar - The Legendary Adventure -Region = NTSC-U -Compat = 5 +Serial = SCPS-15073 +Name = EyeToy - Groov [with Camera] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20472 -Name = Micro Machines -Region = NTSC-U +Serial = SCPS-15074 +Name = Olympic Summer Games - Athens 2004 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20473 -Name = Rocket Power - Beach Bandits -Region = NTSC-U -Compat = 5 +Serial = SCPS-15075 +Name = DJ Box [Premium Kit] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20474 -Name = NFL Blitz 2003 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15076 +Name = EyeToy - HuriHuri Dance +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20475 -Name = Dual Hearts -Region = NTSC-U -Compat = 5 +Serial = SCPS-15077 +Name = EyeToy - Uki Uki Panic [with Camera] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20476 -Name = NBA 2K3 - Sega Sports -Region = NTSC-U +Serial = SCPS-15078 +Name = EyeToy - Uki Uki Panic [Game Only] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20477 -Name = NHL 2K3 - Sega Sports -Region = NTSC-U +Serial = SCPS-15079 +Name = Bakufuu Slash! Kizna Arashi [with Camera] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20478 -Name = Disney's PK - Out of the Shadows -Region = NTSC-U -Compat = 5 +Serial = SCPS-15080 +Name = Waga Ryuomiyo - Pride of the Dragon Peace +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20480 -Name = Tennis - Sega Sports -Region = NTSC-U -Compat = 5 +Serial = SCPS-15081 +Name = Dokodemo Issyo - Toro to Ippai +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20482 -Name = Sphinx and the Cursed Mummy -Region = NTSC-U -Compat = 5 -OPHFLagHack = 1 +Serial = SCPS-15082 +Name = DJ Box +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20483 -Name = WWE Smackdown - Shut Your Mouth -Region = NTSC-U -Compat = 5 -[patches = B0AE1898] - - comment=patched by prafull - - //skip sceipusync - patch=0,EE,0010b880,word,00000000 - patch=0,EE,0010b798,word,00000000 - patch=0,EE,0010b7c8,word,00000000 - -[/patches] +Serial = SCPS-15083 +Name = Formula One 2004 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20484 -Name = Devil May Cry 2 [Disc1of2] -Region = NTSC-U -Compat = 5 -[patches] - comment=Note that this disc has the same CRC as SLPM-65232, the NTSC-J disc. -[/patches] +Serial = SCPS-15084 +Name = Ratchet & Clank 3 +Region = NTSC-J +MemCardFilter = SCPS-15084/SCPS-15056/SCPS-15037 --------------------------------------------- -Serial = SLUS-20485 -Name = Dino Stalker -Region = NTSC-U -Compat = 5 +Serial = SCPS-15085 +Name = Kenran Butousai +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20486 -Name = Marvel vs. Capcom 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15086 +Name = Bakufuu Slash! Kizna Arashi [Game Only] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20487 -Name = MegaMan X7 -Region = NTSC-U -Compat = 5 -eeClampMode = 3 //For camera issues in some scenes. +Serial = SCPS-15087 +Name = Bleach - Erabareshi Tamashi +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20488 -Name = Star Ocean 3 - Till the End of Time [Disc1of2] -Region = NTSC-U +Serial = SCPS-15088 +Name = Bokura no Kazoku +Region = NTSC-J Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLUS-20489 -Name = Whirl Tour -Region = NTSC-U -Compat = 5 +Serial = SCPS-15089 +Name = EyeToy - Play 2 [With Camera] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20490 -Name = Gladius -Region = NTSC-U -Compat = 5 +Serial = SCPS-15090 +Name = Sly Racoon 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20491 -Name = RTX Red Rock -Region = NTSC-U -Compat = 5 +Serial = SCPS-15091 +Name = Wild ARMs - The 4th Detonator +Region = NTSC-J +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SLUS-20492 -Name = Ninja Assault -Region = NTSC-U -Compat = 5 +Serial = SCPS-15092 +Name = Wild ARMs - The 4th Detonator +Region = NTSC-J +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SLUS-20493 -Name = Gungrave -Region = NTSC-U +Serial = SCPS-15093 +Name = Rule of Rose +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20494 -Name = Freestyle Metal X -Region = NTSC-U -Compat = 3 +Serial = SCPS-15094 +Name = EyeToy - Play 2 [Game Only] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20495 -Name = Battle Engine Aquila -Region = NTSC-U -Compat = 3 +Serial = SCPS-15095 +Name = Genji - Dawn of the Samurai +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20496 -Name = V-Rally 3 -Region = NTSC-U +Serial = SCPS-15096 +Name = Saru Get You! 3 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20497 -Name = Burnout 2 - Point of Impact -Region = NTSC-U +Serial = SCPS-15097 +Name = Wanda to Kyozou (Shadow of the Colossus) +Region = NTSC-J Compat = 5 -vuRoundMode = 1 //bright lights in cars +MemCardFilter = SCAJ-20146/SCAJ-20196/SCAJ-20099/SCPS-11003/SCPS-19103/SCPS-19151/SCPS-55001 --------------------------------------------- -Serial = SLUS-20498 -Name = Auto Modellista -Region = NTSC-U +Serial = SCPS-15098 +Name = Formula One 2005 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20499 -Name = Breath of Fire: Dragon Quarter -Region = NTSC-U -Compat = 5 +Serial = SCPS-15099 +Name = Ratchet & Clank 4th - GiriGiri Ginga no Giga Battle +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20500 -Name = Red Dead Revolver -Region = NTSC-U -Compat = 4 +Serial = SCPS-15100 +Name = Ratchet & Clank 4th - GiriGiri Ginga no Giga Battle +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20502 -Name = Colin McRae Rally 3 -Region = NTSC-U -Compat = 4 +Serial = SCPS-15101 +Name = Bleach - Hanatareshi Yabou +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20504 -Name = Tony Hawk's Pro Skater 4 -Region = NTSC-U -vuRoundMode = 0 //Crashes without. +Serial = SCPS-15102 +Name = Rogue Galaxy +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20505 -Name = Mace Griffin - Bounty Hunter -Region = NTSC-U -Compat = 5 +Serial = SCPS-15103 +Name = Gunparade Orchestra - Shiro no Shou - Aomori Penguin Densetsu [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20506 -Name = Black & Bruised -Region = NTSC-U -Compat = 5 +Serial = SCPS-15104 +Name = Gunparade Orchestra - Shiro no Shou - Aomori Penguin Densetsu +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20507 -Name = Legends of Wrestling 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15105 +Name = Tourist Trophy - The Real Riding Simulator +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20508 -Name = Indiana Jones and the Emperor's Tomb -Region = NTSC-U +Serial = SCPS-15106 +Name = Siren 2 +Region = NTSC-J Compat = 5 +XgKickHack = 1 //SPS. +[patches = 626552EB] + comment=swapping a COP2 op into place to make the flags work without delays + patch=0,EE,0013AB64,word,48449000 + patch=0,EE,0013AB6C,word,4BC949FF +[/patches] --------------------------------------------- -Serial = SLUS-20509 -Name = Soccer Slam - Sega Sports -Region = NTSC-U -Compat = 4 +Serial = SCPS-15107 +Name = Gunparade Orchestra - Midori no Shou [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20510 -Name = Star Wars - Clone Wars -Region = NTSC-U -Compat = 5 +Serial = SCPS-15108 +Name = Gunparade Orchestra - Midori no Shou +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20511 -Name = Hunter the Reckoning - Wayward -Region = NTSC-U -Compat = 4 +Serial = SCPS-15109 +Name = Gunparade Orchestra - Ao no Shou [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20513 -Name = NBA Starting Five -Region = NTSC-U +Serial = SCPS-15110 +Name = Gunparade Orchestra - Ao no Shou +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20514 -Name = Silent Scope 3 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15111 +Name = Brave Story - Wataru no Bouken +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20515 -Name = Yu-Gi-Oh! The Duelists of the Roses -Region = NTSC-U +Serial = SCPS-15112 +Name = Blood+ Souyoku Battle Rinbukyoku +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20516 -Name = Shrek - Super Party -Region = NTSC-U +Serial = SCPS-15113 +Name = Minna no Tennis +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15114 +Name = Soukou Kihei Armodyne +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-15115 +Name = Saru Get You - Million Monkeys +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20517 -Name = Haven - Call of the King -Region = NTSC-U +Serial = SCPS-15116 +Name = Bleach - Blade Battlers +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLUS-20519 -Name = Tak and The Power of Juju -Region = NTSC-U +Serial = SCPS-15117 +Name = Formula One 2006 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20520 -Name = Lord of the Rings, The - The Fellowship of the Ring -Region = NTSC-U +Serial = SCPS-15118 +Name = Wild ARMs - The Vth Vanguard +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20521 -Name = Mystic Heroes -Region = NTSC-U +Serial = SCPS-15119 +Name = Bleach - Blade Battlers 2nd +Region = NTSC-J Compat = 5 +OPHFLagHack = 1 // Special moves "Bankai" hang otherwise --------------------------------------------- -Serial = SLUS-20522 -Name = King of Route 66 -Region = NTSC-U -Compat = 5 +Serial = SCPS-15120 +Name = Ratchet & Clank 5 Gekitotsu! Dodeka Ginga no Mirimiri Gundan +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20523 -Name = Crouching Tiger Hidden Dragon -Region = NTSC-U +Serial = SCPS-17001 +Name = Gran Turismo 4 +Region = NTSC-J Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SLUS-20524 -Name = Fighter Maker 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-17002 +Name = Wild ARMs - Alter Code F +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20525 -Name = Ejay Club World -Region = NTSC-U -Compat = 5 +Serial = SCPS-17008 +Name = Nike - Gran Turismo [Limited Edition - 8 inch] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20526 -Name = RockSteady ~~UNRELEASED~~ -Region = NTSC-U +Serial = SCPS-17009 +Name = Nike - Gran Turismo [Limited Edition - 9 inch] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20527 -Name = Butt Ugly Martians - Zoom or Doom! -Region = NTSC-U -Compat = 4 +Serial = SCPS-17010 +Name = Nike - Gran Turismo [Limited Edition - 10 inch] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20528 -Name = Zapper - One Wicked Cricket -Region = NTSC-U +Serial = SCPS-17011 +Name = Nike - Gran Turismo [Limited Edition - 11 inch] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20529 -Name = Madden NFL 2003 -Region = NTSC-U +Serial = SCPS-17013 +Name = Rogue Galaxy [Directors Cut] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20530 -Name = NCAA Football 2003 -Region = NTSC-U +Serial = SCPS-19101 +Name = Mosquito [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20531 -Name = NHL 2003 -Region = NTSC-U +Serial = SCPS-19102 +Name = Boku to Maou [PlayStation 2 The Best] +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-19103 +Name = Ico [PlayStation 2 The Best] +Region = NTSC-J Compat = 5 -vuClampMode = 2 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20532 -Name = Disney's Golf -Region = NTSC-U -Compat = 2 +Serial = SCPS-19104 +Name = Pipo Saru 2001 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20533 -Name = Shox -Region = NTSC-U -Compat = 5 +Serial = SCPS-19105 +Name = Bravo Music [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20534 -Name = Cabela's Big Game Hunter -Region = NTSC-U +Serial = SCPS-19151 +Name = Ico [PlayStation 2 The Best] +Region = NTSC-J Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20535 -Name = NASCAR Thunder 2003 -Region = NTSC-U -Compat = 5 +Serial = SCPS-19152 +Name = Saru Get You! 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20536 -Name = NBA Live 2003 -Region = NTSC-U +Serial = SCPS-19153 +Name = Pipo Saru 2001 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20537 -Name = Jimmy Neutron - Boy Genius -Region = NTSC-U +Serial = SCPS-19201 +Name = PaRappa the Rapper 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20538 -Name = NCAA Basketball 2K3 - Sega Sports -Region = NTSC-U +Serial = SCPS-19202 +Name = Extermination [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20539 -Name = Fallout - Brotherhood of Steel -Region = NTSC-U -Compat = 4 +Serial = SCPS-19203 +Name = Dark Cloud [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20540 -Name = Evolution Skateboarding -Region = NTSC-U +Serial = SCPS-19204 +Name = Zegaia - Duel Saga [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20541 -Name = NBA Ballers -Region = NTSC-U -Compat = 5 -vuClampMode = 2 //Fixes transparency issues +Serial = SCPS-19205 +Name = Wild ARMs - Advanced 3rd [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20543 -Name = Metal Gear Solid 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-19206 +Name = Ape Escape 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20544 -Name = Malice -Region = NTSC-U +Serial = SCPS-19207 +Name = Popolocrois Story - Hajime no Bouken [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20545 -Name = Zone of the Enders: The 2nd Runner -Region = NTSC-U -Compat = 5 +Serial = SCPS-19208 +Name = Gran Turismo - Concept 2001 Tokyo [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20546 -Name = Evolution Snowboarding -Region = NTSC-U -Compat = 2 +Serial = SCPS-19209 +Name = Boku no Summer Vacation [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20547 -Name = Cubix Showdown -Region = NTSC-U -Compat = 5 +Serial = SCPS-19210 +Name = Jack & Dexter [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20548 -Name = Sub Rebellion -Region = NTSC-U +Serial = SCPS-19211 +Name = Ratchet & Clank [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20549 -Name = Conflict - Desert Storm -Region = NTSC-U -Compat = 5 +Serial = SCPS-19213 +Name = Operator's Side [PlayStation 2 The Best] [with Microphone] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20550 -Name = True Crime - Streets of L.A. -Region = NTSC-U -Compat = 3 +Serial = SCPS-19214 +Name = Operator's Side [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20552 -Name = Grand Theft Auto - Vice City -Region = NTSC-U -Compat = 5 +Serial = SCPS-19215 +Name = Dark Chronicle [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20553 -Name = Fisherman's Challenge -Region = NTSC-U -Compat = 5 +Serial = SCPS-19251 +Name = Wild ARMs - Alter Code F [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20554 -Name = Metal Gear Solid 2 - Substance -Region = NTSC-U -Compat = 5 +Serial = SCPS-19252 +Name = Gran Turismo 4 [PlayStation 2 The Best] +Region = NTSC-J +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SLUS-20555 -Name = Reel Fishing 3 -Region = NTSC-U -Compat = 5 +Serial = SCPS-19253 +Name = Wild ARMs - Alter Code F [PlayStation 2 The Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20556 -Name = Reign of Fire -Region = NTSC-U +Serial = SCPS-19301 +Name = Minna no Golf 4 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20558 -Name = Ferrari F355 Challenge -Region = NTSC-U +Serial = SCPS-19302 +Name = Ratchet & Clank 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20559 -Name = Rocky -Region = NTSC-U -Compat = 4 +Serial = SCPS-19303 +Name = Boku no Natsuyasumi 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20560 -Name = Galerians - Ash -Region = NTSC-U -Compat = 4 +Serial = SCPS-19304 +Name = Gran Turismo 4 - Prologue [PlayStation 2 The Best] +Region = NTSC-J +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCAJ-20066/SCAJ-30006/SCAJ-30007/SCAJ-30008/SCPS-15055/SCPS-17001/SCPS-19252/SCPS-19304/SCPS-15009/SCPS-55007 --------------------------------------------- -Serial = SLUS-20561 -Name = Disaster Report -Region = NTSC-U -Compat = 5 +Serial = SCPS-19305 +Name = Siren [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20562 -Name = dot Hack - Part 2 - Mutation -Region = NTSC-U -Compat = 5 +Serial = SCPS-19306 +Name = Dark Chronicle [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20563 -Name = dot Hack - Part 3 - Outbreak -Region = NTSC-U -Compat = 5 +Serial = SCPS-19307 +Name = Popolocrois - The First Adventure [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20564 -Name = dot Hack - Part 4 - Quarantine -Region = NTSC-U -Compat = 5 +Serial = SCPS-19308 +Name = Saru Get You 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20565 -Name = Champions of Norrath -Region = NTSC-U -Compat = 4 +Serial = SCPS-19309 +Name = Ratchet & Clank 3 - Up Your Arsenal [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20566 -Name = Buffy the Vampire Slayer - Chaos Bleeds -Region = NTSC-U -Compat = 4 -EETimingHack = 1 //garbage in HUD -OPHFLagHack = 1 +Serial = SCPS-19310 +Name = Ratchet & Clank [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20567 -Name = P.T.O. IV - Pacific Theater of Operations -Region = NTSC-U -Compat = 5 +Serial = SCPS-19311 +Name = Saru Get You 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20568 -Name = Hardhitter Tennis -Region = NTSC-U +Serial = SCPS-19312 +Name = Siren [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20569 -Name = All-Star Baseball 2004 -Region = NTSC-U +Serial = SCPS-19313 +Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best] +Region = NTSC-J +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SLUS-20570 -Name = ATV Quad Power Racing 2 -Region = NTSC-U -Compat = 4 +Serial = SCPS-19315 +Name = EyeToy - Play [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20571 -Name = Ty the Tasmanian Tiger -Region = NTSC-U -Compat = 5 +Serial = SCPS-19316 +Name = Ratchet & Clank [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20572 -Name = Tiger Woods PGA Tour 2003 -Region = NTSC-U -Compat = 4 +Serial = SCPS-19317 +Name = Ratchet & Clank 2 - Going Commando [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20573 -Name = Sims, The -Region = NTSC-U -Compat = 2 +Serial = SCPS-19318 +Name = Genji - Dawn of the Samurai [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20574 -Name = NCAA March Madness 2003 -Region = NTSC-U +Serial = SCPS-19319 +Name = Minna no Golf 4 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20575 -Name = Island Xtreme Stunts -Region = NTSC-U -Compat = 5 +Serial = SCPS-19320 +Name = Wanda to Kyozou (Shadow of the Colossus) [PlayStation 2 The Best] +Region = NTSC-J +MemCardFilter = SCAJ-20146/SCAJ-20196/SCAJ-20099/SCPS-11003/SCPS-19103/SCPS-19151/SCPS-55001 --------------------------------------------- -Serial = SLUS-20576 -Name = Harry Potter and The Chamber of Secrets -Region = NTSC-U +Serial = SCPS-19321 +Name = Ratchet & Clank 4th - GiriGiri Ginga no Giga Battle [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20577 -Name = Drome Racers -Region = NTSC-U -Compat = 5 +Serial = SCPS-19322 +Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best - Reprint] +Region = NTSC-J +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SLUS-20578 -Name = Lord of the Rings, The - The Two Towers -Region = NTSC-U -Compat = 5 +Serial = SCPS-19323 +Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best - Reprint] +Region = NTSC-J +MemCardFilter = SCAJ-20123/SCPS-15091/SCPS-15092/SCPS-19313/SCPS-19322/SCPS-19323/SCAJ-30002/SCPS-17002/SCPS-19251/SCPS-19253 --------------------------------------------- -Serial = SLUS-20579 -Name = James Bond 007 - Nightfire -Region = NTSC-U -Compat = 4 +Serial = SCPS-19324 +Name = Tourist Trophy - The Real Riding Simulator [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20580 -Name = FIFA Soccer 2003 -Region = NTSC-U -vuClampMode = 2 //missing geometry with microVU +Serial = SCPS-19325 +Name = Ape Escape - Million Monkeys [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20582 -Name = Street Racing Syndicate -Region = NTSC-U -Compat = 5 +Serial = SCPS-19326 +Name = Siren 2 [PlayStation 2 The Best] +Region = NTSC-J +XgKickHack = 1 //SPS. --------------------------------------------- -Serial = SLUS-20584 -Name = Speed Kings -Region = NTSC-U -Compat = 2 +Serial = SCPS-19327 +Name = Ape Escape 3 [PlayStation 2 the Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20585 -Name = Powerpuff Girls, The - Relish Rampage -Region = NTSC-U -Compat = 5 +Serial = SCPS-19328 +Name = Ratchet & Clank 4th - GiriGiri Ginga no Giga Battle [PlayStation 2 the Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20586 -Name = IHRA Drag Racing 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-19329 +Name = Bleach - Blade Battlers [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20587 -Name = Driver 3 -Region = NTSC-U -Compat = 5 +Serial = SCPS-19330 +Name = Bleach - Hanatareshi Yabou [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20588 -Name = Activision Anthology -Region = NTSC-U +Serial = SCPS-19331 +Name = Bleach - Selected Soul [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20590 -Name = Spy Hunter 2 -Region = NTSC-U -Compat = 2 +Serial = SCPS-19332 +Name = Minna no Tennis [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20591 -Name = DragonBall Z - Budokai -Region = NTSC-U -Compat = 5 +Serial = SCPS-51001 +Name = Moto GP 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20592 -Name = HyperSonic Xtreme - HSX -Region = NTSC-U -Compat = 3 +Serial = SCPS-51004 +Name = Bravo Music +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20593 -Name = Magic Pengel - The Quest for Color -Region = NTSC-U -Compat = 5 +Serial = SCPS-51005 +Name = Samurai +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20595 -Name = Area 51 -Region = NTSC-U -Compat = 5 +Serial = SCPS-51006 +Name = Alpine Racer 3 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20596 -Name = UFC - Ultimate Fighting Championship - Sudden Impact -Region = NTSC-U -Compat = 5 +Serial = SCPS-51008 +Name = Wave Rally +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20597 -Name = Warhammer 40K - Fire Warrior -Region = NTSC-U -Compat = 4 +Serial = SCPS-51009 +Name = Underwater Unit +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20598 -Name = Everblue 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-51010 +Name = Shikigami no Shiro +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20599 -Name = Whiteout -Region = NTSC-U +Serial = SCPS-51011 +Name = Ragingbless +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20601 -Name = Rayman 3 - Hoodlum Havoc -Region = NTSC-U -Compat = 5 +Serial = SCPS-51012 +Name = Gigantic Drive +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20602 -Name = High Heat - Major League Baseball 2004 -Region = NTSC-U +Serial = SCPS-51013 +Name = Torneko's Adventure 3 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20603 -Name = Mary-Kate & Ashley - Sweet Sixteen - Licensed to Drive -Region = NTSC-U -Compat = 5 +Serial = SCPS-51014 +Name = Ninja Assault +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20604 -Name = MTV's Celebrity Deathmatch -Region = NTSC-U -Compat = 5 +Serial = SCPS-51015 +Name = Super Puzzle Bobble 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20605 -Name = Big Mutha Truckers -Region = NTSC-U +Serial = SCPS-51016 +Name = Space Fishermen +Region = NTSC-J +vuClampMode = 3 --------------------------------------------- -Serial = SLUS-20606 -Name = Bounty Hunter - Seek & Destroy -Region = NTSC-U +Serial = SCPS-55001 +Name = Ico +Region = NTSC-J Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20607 -Name = Disney's Extreme Skate Adventure -Region = NTSC-U -Compat = 5 -vuRoundMode = 0 +Serial = SCPS-55002 +Name = Zero +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20608 -Name = Mobile Light Force 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-55003 +Name = Vampire Night +Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20609 -Name = Magix Music Maker -Region = NTSC-U -Compat = 2 +Serial = SCPS-55004 +Name = Jack & Dexter - The Precursor Legacy +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20611 -Name = World Series Baseball 2K3 -Region = NTSC-U -Compat = 3 +Serial = SCPS-55005 +Name = Gran Turismo - Concept 2001 Tokyo +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20613 -Name = Tom Clancy's Ghost Recon -Region = NTSC-U -Compat = 5 +Serial = SCPS-55006 +Name = Wild ARMs - Advanced 3rd +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20614 -Name = Aero Elite - Combat Academy -Region = NTSC-U -Compat = 1 +Serial = SCPS-55007 +Name = Gran Turismo 3 - A-Spec +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20615 -Name = Fantastic 4 -Region = NTSC-U -Compat = 5 +Serial = SCPS-55008 +Name = Thunderstrike +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20616 -Name = Virtua Fighter 4 - Evolution -Region = NTSC-U -Compat = 5 +Serial = SCPS-55010 +Name = Grandia Extreme +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20617 -Name = Dynasty Warriors 3 - Xtreme Legends -Region = NTSC-U +Serial = SCPS-55011 +Name = Dual Hearts +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20618 -Name = MLB Slugfest 2004 -Region = NTSC-U +Serial = SCPS-55012 +Name = Grandia 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20619 -Name = Starsky & Hutch -Region = NTSC-U -Compat = 5 +Serial = SCPS-55013 +Name = Soul Reaver 2 - Legacy of Kain +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20620 -Name = Smash Cars -Region = NTSC-U +Serial = SCPS-55014 +Name = Armored Core 3 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20621 -Name = Seven Samurai 20XX -Region = NTSC-U -Compat = 5 +Serial = SCPS-55015 +Name = Zettai Zetsumei Toshi +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20622 -Name = Silent Hill 3 -Region = NTSC-U -Compat = 5 +Serial = SCPS-55016 +Name = Jet de Go! 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20623 -Name = Winning Eleven 6 -Region = NTSC-U +Serial = SCPS-55017 +Name = Tekken 4 +Region = NTSC-J +Compat = 3 --------------------------------------------- -Serial = SLUS-20624 -Name = Simpsons, The - Hit & Run -Region = NTSC-U +Serial = SCPS-55018 +Name = Kingdom of Scribbling +Region = NTSC-J +--------------------------------------------- +Serial = SCPS-55019 +Name = Star Ocean 3 - Till the End of Time +Region = NTSC-J Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLUS-20625 -Name = Moto GP 3 -Region = NTSC-U +Serial = SCPS-55020 +Name = Kengo 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20626 -Name = Deer Hunter -Region = NTSC-U +Serial = SCPS-55021 +Name = Super Robot Wars Impact +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20627 -Name = Devil May Cry 2 [Disc2of2] -Region = NTSC-U -Compat = 5 +Serial = SCPS-55022 +Name = Surveillance +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20628 -Name = Disney's Finding Nemo -Region = NTSC-U +Serial = SCPS-55023 +Name = Otostaz +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20630 -Name = Grand Prix Challenge -Region = NTSC-U -Compat = 2 -VIFFIFOHack = 1 +Serial = SCPS-55024 +Name = Armored Core 2 - Another Age +Region = NTSC-J +MemCardFilter = SCPS-55024/SLPS-25007/SLPS-25040/SLPS-73403/SLPS-73411 --------------------------------------------- -Serial = SLUS-20631 -Name = NFL Blitz Pro -Region = NTSC-U +Serial = SCPS-55025 +Name = Eve of Extinction +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20632 -Name = Extreme-G Racing Association - XGRA -Region = NTSC-U -Compat = 5 +Serial = SCPS-55026 +Name = Gundam Giren's Ambition +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20633 -Name = Clock Tower 3 -Region = NTSC-U -Compat = 5 +Serial = SCPS-55027 +Name = Runabout 3 - Neo Age +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20634 -Name = Summer Heat Beach Volleyball -Region = NTSC-U -Compat = 5 +Serial = SCPS-55028 +Name = Popolocrois Story - Hajime no Bouken +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20635 -Name = Muppets Party Cruise, Jim Henson's -Region = NTSC-U -Compat = 5 -EETimingHack = 1 //Path 3 masking errors +Serial = SCPS-55029 +Name = dot Hack - Vol.1 +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLUS-20636 -Name = Suffering, The -Region = NTSC-U -Compat = 4 +Serial = SCPS-55030 +Name = First Step Victorious Boxers [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20637 -Name = Chessmaster (Online) -Region = NTSC-U -Compat = 2 +Serial = SCPS-55031 +Name = Ghost Vibration +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20638 -Name = Backyard Wrestling - Don't Try This At Home -Region = NTSC-U -Compat = 3 +Serial = SCPS-55032 +Name = Fantavision - For You and Me +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20639 -Name = Def Jam - Vendetta -Region = NTSC-U -Compat = 5 +Serial = SCPS-55035 +Name = Ape Escape 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20640 -Name = Saturday Night Speedway -Region = NTSC-U -Compat = 4 +Serial = SCPS-55040 +Name = G-Breaker 2 - Doumei no Hangeki +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20641 -Name = IndyCar Series -Region = NTSC-U -Compat = 5 +Serial = SCPS-55041 +Name = Memories Off +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20642 -Name = Auto Modellista -Region = NTSC-U -Compat = 5 +Serial = SCPS-55042 +Name = dot Hack - Vol.2 +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLUS-20643 -Name = Soul Calibur 2 -Region = NTSC-U -Compat = 5 +Serial = SCPS-55043 +Name = Fatal Frame +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20643BD -Name = Namco Transmission Demo Disc v1.03 [Soul Calibur II Pack-In] -Region = NTSC-U -Compat = 5 +Serial = SCPS-55044 +Name = Energy Airforce +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20644 -Name = Armored Core - Silent Line -Region = NTSC-U +Serial = SCPS-55045 +Name = Poinie's Poin 3 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20645 -Name = Time Crisis 3 [with Guncon] -Region = NTSC-U -Compat = 5 +Serial = SCPS-55046 +Name = Ultraman Fighting Evolution 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20646 -Name = Mark Davis Pro Bass Challenge -Region = NTSC-U -Compat = 5 +Serial = SCPS-55047 +Name = Formula One 2002 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20647 -Name = Wallace & Gromit in Project Zoo -Region = NTSC-U -Compat = 1 +Serial = SCPS-55048 +Name = Dark Chronicle +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20648 -Name = NBA Jam 2004 -Region = NTSC-U +Serial = SCPS-55049 +Name = King of Fighters 2000, The +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20649 -Name = Crash Bandicoot - Nitro Kart -Region = NTSC-U -Compat = 5 +Serial = SCPS-55050 +Name = Tales of Destiny 2 +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20650 -Name = MVP Baseball 2003 -Region = NTSC-U +Serial = SCPS-55901 +Name = Xenosaga Episode I - Der Wille zur Macht +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20651 -Name = NBA Street 2 -Region = NTSC-U -vuClampMode = 2 //missing environment with microVU +Serial = SCPS-55902 +Name = Gran Turismo - Concept 2002 Tokyo-Geneva +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20652 -Name = Tom Clancy's Splinter Cell -Region = NTSC-U -Compat = 4 +Serial = SCPS-55903 +Name = Gran Turismo - Concept 2002 Tokyo-Geneva +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20653 -Name = Dynasty Warriors 4 -Region = NTSC-U +Serial = SCPS-56001 +Name = Ico +Region = NTSC-K Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20655 -Name = Hobbit, The -Region = NTSC-U +Serial = SCPS-56002 +Name = Tekken Tag Tournament +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20656 -Name = X-Men Legends -Region = NTSC-U -Compat = 5 +Serial = SCPS-56005 +Name = Gran Turismo Concept 2002 Tokyo-Seoul +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20657 -Name = McFarlane Evil Prophecy -Region = NTSC-U +Serial = SCPS-56006 +Name = Tekken 4 +Region = NTSC-K Compat = 5 +[patches = 35B4028B] + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,00290b24,word,24200001 + patch=0,EE,00290d24,word,00000000 +[/patches] --------------------------------------------- -Serial = SLUS-20658 -Name = Freedom Fighters - The Battle for Liberty Island -Region = NTSC-U +Serial = SCPS-56008 +Name = Fatal Frame +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLUS-20659 -Name = Piglet's Big Game -Region = NTSC-U +Serial = SCPS-56011 +Name = U - Underwater Unit +Region = NTSC-J --------------------------------------------- -Serial = SLUS-20661 -Name = Fairly Odd Parents, The - Breakin' Da Rules -Region = NTSC-U +Serial = SCPS-56012 +Name = Raw Danger +Region = NTSC-K --------------------------------------------- -Serial = SLUS-20662 -Name = Gallop Racer 2003 - A New Breed -Region = NTSC-U +Serial = SCPS-56014 +Name = Gungrave +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLUS-20663 -Name = Naval Ops - Warship Gunner +Serial = SCPS-56015 +Name = Ninja Assault +Region = NTSC-J +--------------------------------------------- +Serial = SCUS-21295 +Name = Tony Hawk's American Wasteland Collector's Edition Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20664 -Name = Barbie Horse Adventures - Wild Horse Rescue +Serial = SCUS-21494 +Name = Need for Speed Carbon Collector's Edition Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20665 -Name = Cabela's Deer Hunt - 2004 Season +Serial = SCUS-90174 +Name = Toy Story 3 (PlayStation 2 Bundle) Region = NTSC-U --------------------------------------------- -Serial = SLUS-20666 -Name = Disgaea: Hour of Darkness +Serial = SCUS-94346 +Name = Singstar Latino Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20668 -Name = Transformers +Serial = SCUS-97097 +Name = Network Adapter Start-Up Disc Region = NTSC-U -Compat = 5 -VIFFIFOHack = 1 --------------------------------------------- -Serial = SLUS-20669 -Name = Resident Evil - Dead Aim +Serial = SCUS-97101 +Name = Twisted Metal - Black Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20670 -Name = Great Escape, The +Serial = SCUS-97102 +Name = Gran Turismo 3 - A-Spec Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLUS-20671 -Name = Mafia +Serial = SCUS-97104 +Name = ATV Off-Road Fury Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20672 -Name = Final Fantasy X-2 +Serial = SCUS-97105 +Name = Fantavision Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20673 -Name = Alias +Serial = SCUS-97106 +Name = NFL GameDay 2001 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20674 -Name = Virtual On Marz +Serial = SCUS-97107 +Name = NCAA GameBreaker 2001 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20676 -Name = Lowrider +Serial = SCUS-97108 +Name = Cool Boarders 2001 Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLUS-20677 -Name = XIII +Serial = SCUS-97109 +Name = NCAA Final Four 2001 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20678 -Name = Unlimited SaGa +Serial = SCUS-97110 +Name = NHL FaceOff 2001 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20680 -Name = SpongeBob SquarePants - The Battle for Bikini Bottoms +Serial = SCUS-97111 +Name = Dark Cloud Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20681 -Name = Disney's The Haunted Mansion +Serial = SCUS-97112 +Name = Extermination Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20682 -Name = K1 World Grand Prix +Serial = SCUS-97113 +Name = Ico Region = NTSC-U Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20683 -Name = Lupin the 3rd - Treasure of the Sorcerer King +Serial = SCUS-97114 +Name = NBA ShootOut 2001 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20684 -Name = Whiplash +Serial = SCUS-97115 +Name = Gran Turismo 3 - A-Spec [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20685 -Name = Ape Escape 2 +Serial = SCUS-97116 +Name = Kiosk Demo Disc 2.01 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20686 -Name = Splashdown - Rides Gone Wild +Serial = SCUS-97117 +Name = PlayStation 2 Demo Disc Version 2.1 [Need for Speed - Underground] Region = NTSC-U -Compat = 3 --------------------------------------------- -Serial = SLUS-20687 -Name = RoadKill +Serial = SCUS-97118 +Name = NFL GameDay 2001 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20688 -Name = Psi-Ops - The Mindgate Conspiracy +Serial = SCUS-97120 +Name = PlayStation Underground Demo Disc 4.4 [Disc1&2] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20689 -Name = Conflict - Desert Storm 2 - Back to Baghdad +Serial = SCUS-97121 +Name = PlayStation Underground 4.3 [Disc2] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20690 -Name = G1 Jockey 3 +Serial = SCUS-97122 +Name = ATV Off-Road Fury [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20691 -Name = NHL Hitz Pro +Serial = SCUS-97123 +Name = Disney's Monsters Inc. Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20693 -Name = F1 Career Challenge -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-20694 -Name = Onimusha 3 - Demon Siege +Serial = SCUS-97124 +Name = Jak and Daxter - The Precursor Legacy Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20695 -Name = Chaos Legion +Serial = SCUS-97125 +Name = Frequency Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20696 -Name = Jimmy Neutron - Boy Genius - Jet Fusion +Serial = SCUS-97126 +Name = PlayStation 2 Demo Disc Version 2.2 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20697 -Name = Cy Girls [Disc1of2] +Serial = SCUS-97127 +Name = Kiosk Demo Disc 2.02 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20698 -Name = SD Gundam Force Showdown +Serial = SCUS-97128 +Name = Drakan - The Ancients' Gates // aka "Drakan 2" Region = NTSC-U Compat = 5 -eeClampMode = 2 //Needed for SPS on some characters +EETimingHack = 1 // flickery textures --------------------------------------------- -Serial = SLUS-20699 -Name = Cowboy Bebop +Serial = SCUS-97129 +Name = Okage - Shadow King Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20701 -Name = Scooby-Doo! Mystery Mayhem +Serial = SCUS-97130 +Name = Hot Shots Golf 3 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20702 -Name = Monster Rancher 4 +Serial = SCUS-97131 +Name = NFL GameDay 2002 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20703 -Name = Air Force - Delta Strike +Serial = SCUS-97132 +Name = Kinetica Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20704 -Name = Backyard Basketball +Serial = SCUS-97133 +Name = Getaway, The Region = NTSC-U --------------------------------------------- -Serial = SLUS-20705 -Name = I-Ninja +Serial = SCUS-97134 +Name = SOCOM - U.S. Navy SEALs Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20706 -Name = Kill Switch +Serial = SCUS-97136 +Name = NCAA Final Four 2002 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20707 -Name = Spawn - Armageddon +Serial = SCUS-97140 +Name = Mark of Kri, The Region = NTSC-U Compat = 5 +[patches = DBD09DD4] + comment=COP2 flag instance patch + // pair of vsubs with associated cfc2s + patch=0,EE,002EA424,word,48468801 + patch=0,EE,002EA434,word,4BC311AC + + // bunch of vclips without enough cycles before reading the clip flag + patch=0,EE,00329110,word,48489000 + patch=0,EE,00329124,word,4BDAD1FF + + patch=0,EE,0032916C,word,48459000 + patch=0,EE,00329180,word,4BDAD1FF + + patch=0,EE,003291DC,word,48459000 + patch=0,EE,003291F0,word,4BDAD1FF + + patch=0,EE,0032924C,word,48459000 + patch=0,EE,00329260,word,4BDAD1FF + + patch=0,EE,003292BC,word,48459000 + patch=0,EE,003292D0,word,4BDAD1FF + + patch=0,EE,0032940C,word,48459000 + patch=0,EE,00329420,word,4BDAD1FF +[/patches] --------------------------------------------- -Serial = SLUS-20709 -Name = Batman - Rise of Sin-Tzu +Serial = SCUS-97142 +Name = Primal - Civilization Is Only Skin Deep Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20710 -Name = Onimusha - Blade Warriors +Serial = SCUS-97144 +Name = PlayStation Underground 5.1 Region = NTSC-U -Compat = 1 --------------------------------------------- -Serial = SLUS-20711 -Name = Dance Dance Revolution MAX 2 +Serial = SCUS-97145 +Name = Disney's Stitch - Experiment 626 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20712 -Name = Gradius V +Serial = SCUS-97146 +Name = Disney's Treasure Planet Region = NTSC-U -Compat = 5 +EETimingHack = 1 // Fixes hang before going ingame +eeRoundMode = 0 // Fixes characters flying into sky +eeClampMode = 3 // Required to load areas correctly --------------------------------------------- -Serial = SLUS-20714 -Name = Red Ninja - End of Honor +Serial = SCUS-97147 +Name = Cool Boarders 2001 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20715 -Name = WWII Paratroopers +Serial = SCUS-97149 +Name = Jampack Demo Disc - Summer 2001 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20716 -Name = Teenage Mutant Ninja Turtles +Serial = SCUS-97150 +Name = Formula One 2001 Region = NTSC-U +Compat = 3 +[patches = 272F1C14] + comment=patches by Plot and Ref Skip videos + patch=0,EE,0010aafc,word,00000000 + patch=0,EE,0010ae2c,word,00000000 + patch=0,EE,00230010,word,00000000 +[/patches] --------------------------------------------- -Serial = SLUS-20718 -Name = Sonic Heroes +Serial = SCUS-97152 +Name = Dark Cloud [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20719 -Name = NCAA Football 2004 +Serial = SCUS-97153 +Name = Vans Warped Tour '01 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20720 -Name = Romance of the Three Kingdoms VIII +Serial = SCUS-97155 +Name = PlayStation 2 Demo Disc Version 2.3 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20721 -Name = R Racing Evolution +Serial = SCUS-97156 +Name = Kiosk Demo Disc 2.03 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20722 -Name = Maximo vs. Army of Zin +Serial = SCUS-97157 +Name = Frequency [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20723 -Name = Robin Hood - Defender of the Crown +Serial = SCUS-97158 +Name = Official U.S. PlayStation Magazine Demo Disc 049 Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20724 -Name = Firefighter FD 18 +Serial = SCUS-97159 +Name = Ico [Demo] Region = NTSC-U -Compat = 4 +Compat = 5 +eeClampMode = 2 // Otherwise freezes in various spots, check full intro +vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SLUS-20725 -Name = Call of Duty - Finest Hour +Serial = SCUS-97160 +Name = Extermination [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20726 -Name = ESPN - NBA Basketball +Serial = SCUS-97161 +Name = Kinetica [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20727 -Name = ESPN - NFL Football +Serial = SCUS-97163 +Name = Jampack Demo Disc - Winter 2001 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20728 -Name = ESPN - NHL Hockey +Serial = SCUS-97164 +Name = Twisted Metal Black [Demo] Region = NTSC-U -Compat = 3 --------------------------------------------- -Serial = SLUS-20729 -Name = ESPN - College Hoops +Serial = SCUS-97165 +Name = Official U.S. PlayStation Magazine Demo Disc 051 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20730 -Name = NARC +Serial = SCUS-97166 +Name = PlayStation Underground Holiday 2001 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20731 -Name = Tony Hawk's Underground +Serial = SCUS-97167 +Name = PaRappa the Rapper 2 Region = NTSC-U Compat = 5 -vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-20732 -Name = Drakengard +Serial = SCUS-97169 +Name = Drakan - The Ancients' Gates [Demo] // aka "Drakan 2 [Demo]" Region = NTSC-U -Compat = 5 -eeClampMode = 3 //characters are visible in-game. --------------------------------------------- -Serial = SLUS-20733 -Name = Castlevania - Lament of Innocence +Serial = SCUS-97170 +Name = Jak and Daxter - The Precursor Legacy [Cingular Wireless Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20734 -Name = Frogger's Adventures - The Rescue +Serial = SCUS-97171 +Name = Jak and Daxter - The Precursor Legacy [PS Underground Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20735 -Name = Lethal Skies 2 +Serial = SCUS-97172 +Name = World Tour Soccer 2002 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20736 -Name = Cabela's Dangerous Hunts +Serial = SCUS-97173 +Name = Jet X2O Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20737 -Name = Hot Wheels - World Race +Serial = SCUS-97174 +Name = Kiosk Demo Disc 2.04 Region = NTSC-U -Compat = 4 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20738 -Name = Van Helsing +Serial = SCUS-97175 +Name = NCAA Final Four 2002 [Demo] Region = NTSC-U -Compat = 5 -EETimingHack = 1 // To enter the main menu. --------------------------------------------- -Serial = SLUS-20740 -Name = Mobile Suit Gundam - Encounters in Space +Serial = SCUS-97176 +Name = Official U.S. PlayStation Magazine Demo Disc 053 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20741 -Name = Mojo! +Serial = SCUS-97177 +Name = Downhill Domination Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20742 -Name = Chulip +Serial = SCUS-97179 +Name = Twisted Metal Black Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20743 -Name = Prince of Persia - Sands of Time +Serial = SCUS-97181 +Name = Official U.S. PlayStation Magazine Demo Disc 055 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20744 -Name = EverQuest - Online Adventures - Frontiers +Serial = SCUS-97182 +Name = Official U.S. PlayStation Magazine Demo Disc 056 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20745 -Name = Shrek 2 +Serial = SCUS-97183 +Name = Official U.S. PlayStation Magazine Demo Disc 057 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20746 -Name = Rogue Ops +Serial = SCUS-97184 +Name = Official U.S. PlayStation Magazine Demo Disc 058 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20748 -Name = Super Trucks Racing +Serial = SCUS-97185 +Name = Official U.S. PlayStation Magazine Demo Disc 059 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20749 -Name = Rugby 2004 +Serial = SCUS-97186 +Name = Official U.S. PlayStation Magazine Demo Disc 060 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20750 -Name = FIFA Soccer 2004 +Serial = SCUS-97187 +Name = Official U.S. PlayStation Magazine Demo Disc 061 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20751 -Name = James Bond 007 - Everything or Nothing +Serial = SCUS-97188 +Name = Official U.S. PlayStation Magazine Demo Disc 062 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20752 -Name = Madden NFL 2004 +Serial = SCUS-97189 +Name = Official U.S. PlayStation Magazine Demo Disc 063 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20753 -Name = Medal of Honor - Rising Sun +Serial = SCUS-97190 +Name = Official U.S. PlayStation Magazine Demo Disc 064 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20754 -Name = NASCAR Thunder 2004 +Serial = SCUS-97191 +Name = Official U.S. PlayStation Magazine Demo Disc 065 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20755 -Name = NBA Live 2004 +Serial = SCUS-97192 +Name = World Tour Soccer 2002 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20756 -Name = NHL 2004 +Serial = SCUS-97194 +Name = NFL GameDay 2003 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20757 -Name = Tiger Woods PGA Tour 2004 +Serial = SCUS-97195 +Name = Twisted Metal Black - Online Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20758 -Name = Growlanser Generations [Disc1of2] +Serial = SCUS-97196 +Name = Twisted Metal Black - Online [Demo] Region = NTSC-U Compat = 5 -[patches = 03F9C6D1] - comment=IPU freeze fix - patch=0,EE,00109d04,word,00000000 -[/patches] ---------------------------------------------- -Serial = SLUS-20759 -Name = Growlanser Generations [Disc2of2] -Region = NTSC-U -Compat = 4 -[patches = 4AD529BB] - comment=IPU freeze fix - patch=0,EE,00109d04,word,00000000 -[/patches] -[patches = 4CD3663F] - comment=IPU freeze fix - patch=0,EE,00109d04,word,00000000 -[/patches] --------------------------------------------- -Serial = SLUS-20760 -Name = World Championship Pool 2004 +Serial = SCUS-97197 +Name = War of the Monsters Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20761 -Name = Dynasty Tactics 2 +Serial = SCUS-97198 +Name = Sly Cooper and the Thievius Raccoonus Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20762 -Name = Secret Weapons Over Normandy +Serial = SCUS-97199 +Name = Ratchet & Clank Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20763 -Name = Beyond Good and Evil +Serial = SCUS-97200 +Name = Kiosk Demo Disc 2.05 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20764 -Name = Bombastic +Serial = SCUS-97201 +Name = Mark of Kri, The Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20765 -Name = Resident Evil - Outbreak +Serial = SCUS-97203 +Name = Wild ARMs 3 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20766 -Name = Fatal Frame 2 - Crimson Butterfly +Serial = SCUS-97204 +Name = NCAA Final Four 2003 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20767 -Name = MX Unleashed +Serial = SCUS-97205 +Name = SOCOM - U.S. Navy SEALs [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20769 -Name = Harry Potter - Quidditch World Cup +Serial = SCUS-97206 +Name = PlayStation Underground Jampack Summer 2002 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20770 -Name = Lord of the Rings, The - The Return of the King +Serial = SCUS-97208 +Name = Hot Shots Golf 3 & Parappa the Rapper 2 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20771 -Name = NCAA March Madness 2004 +Serial = SCUS-97209 +Name = Ratchet & Clank [E3 Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20772 -Name = SSX 3 +Serial = SCUS-97210 +Name = Sly Cooper and the Thievius Raccoonus [Demo] Region = NTSC-U -Compat = 3 --------------------------------------------- -Serial = SLUS-20773 -Name = Legacy of Kain - Defiance +Serial = SCUS-97211 +Name = ATV Off-Road Fury 2 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20774 -Name = Culdcept +Serial = SCUS-97212 +Name = My Street (Online) Region = NTSC-U -Compat = 5 +Compat = 4 --------------------------------------------- -Serial = SLUS-20776 -Name = Spider-Man 2 +Serial = SCUS-97213 +Name = Dark Cloud 2 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20777 -Name = Obscure +Serial = SCUS-97214 +Name = NCAA GameBreaker 2003 Region = NTSC-U -Compat = 5 -EETimingHack = 1 //For hangs/crashes changing scenes. --------------------------------------------- -Serial = SLUS-20779 -Name = DragonBall Z - Budokai 2 +Serial = SCUS-97216 +Name = PlayStation Underground Summer Sampler Region = NTSC-U --------------------------------------------- -Serial = SLUS-20780 -Name = R-Type Final +Serial = SCUS-97217 +Name = NBA Shootout 2003 Region = NTSC-U -Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLUS-20781 -Name = Karaoke Revolution +Serial = SCUS-97218 +Name = Kiosk Demo Disc 2.06 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20782 -Name = Blood Will Tell +Serial = SCUS-97219 +Name = Gran Turismo 3 - A-Spec - Nissan 350Z Edition Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20784 -Name = Italian Job, The +Serial = SCUS-97220 +Name = NHL FaceOff 2003 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20785 -Name = Funkmaster Flex - Digital Hitz Factory +Serial = SCUS-97222 +Name = Mark of Kri [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20786 -Name = Metal Arms - Glitch in the System +Serial = SCUS-97223 +Name = NFL GameDay 2003 [Demo] Region = NTSC-U -Compat = 2 -EETimingHack = 1 //text flicker --------------------------------------------- -Serial = SLUS-20787 -Name = WWE SmackDown! Here Comes the Pain +Serial = SCUS-97224 +Name = Wild ARMs 3 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20788 -Name = Ford Racing 2 +Serial = SCUS-97225 +Name = Primal [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20789 -Name = Jeopardy +Serial = SCUS-97226 +Name = NCAA GameBreaker 2003 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20790 -Name = Wheel of Fortune +Serial = SCUS-97227 +Name = Kiosk Demo Disc 2.07 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20791 -Name = Trivial Pursuit - Unhinged +Serial = SCUS-97229 +Name = Dark Cloud 2 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20792 -Name = Goblin Commander - Unleash the Horde +Serial = SCUS-97230 +Name = SOCOM - U.S. Navy SEALs (Online) Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20793 -Name = Gladiator - Sword of Vengeance +Serial = SCUS-97231 +Name = Arc the Lad - Twilight of the Spirits Region = NTSC-U -Compat = 2 +Compat = 5 --------------------------------------------- -Serial = SLUS-20794 -Name = ESPN - Major League Baseball +Serial = SCUS-97232 +Name = Getaway [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20795 -Name = Bloody Roar 4 +Serial = SCUS-97233 +Name = World Tour Soccer 2003 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20796 -Name = Monster 4x4 - Masters of Metal +Serial = SCUS-97234 +Name = Jampack Demo Disc - Winter 2002 [M-Rated] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20797 -Name = Dr. Seuss' The Cat in the Hat +Serial = SCUS-97235 +Name = Jampack Demo Disc - Winter 2002 [T-Rated] Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20798 -Name = Starcraft - Ghost +Serial = SCUS-97236 +Name = World Tour Soccer 2003 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20799 -Name = Terminator, The - Rise of the Machines +Serial = SCUS-97238 +Name = ATV Off-Road Fury 2 [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20800 -Name = Taiko Drum Master +Serial = SCUS-97239 +Name = Jet X2O [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20801 -Name = Midway Arcade Treasures +Serial = SCUS-97240 +Name = Ratchet & Clank [EB Games Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20803 -Name = The Bard's Tale +Serial = SCUS-97241 +Name = Official U.S. PlayStation Magazine Demo Disc 066 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20804 -Name = Forgotten Realms - Demon Stone +Serial = SCUS-97242 +Name = Official U.S. PlayStation Magazine Demo Disc 067 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20805 -Name = Yu Yu Hakusho - Dark Tournament +Serial = SCUS-97243 +Name = Official U.S. PlayStation Magazine Demo Disc 068 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20806 -Name = Space Channel 5 - Special Edition [Disc 1 of 2] +Serial = SCUS-97244 +Name = Official U.S. PlayStation Magazine Demo Disc 069 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20807 -Name = Space Channel 5 - Special Edition [Disc 2 of 2] +Serial = SCUS-97245 +Name = Official U.S. PlayStation Magazine Demo Disc 070 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20809 -Name = Godzilla - Save the Earth +Serial = SCUS-97246 +Name = Official U.S. PlayStation Magazine Demo Disc 071 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20810 -Name = Nightshade +Serial = SCUS-97247 +Name = Official U.S. PlayStation Magazine Demo Disc 072 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20811 -Name = Need for Speed - Underground +Serial = SCUS-97248 +Name = Official U.S. PlayStation Magazine Demo Disc 073 Region = NTSC-U -Compat = 5 -EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SLUS-20812 -Name = Dynasty Warriors 4 - Extreme Edition +Serial = SCUS-97249 +Name = Official U.S. PlayStation Magazine Demo Disc 074 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20813 -Name = Plague of Darkness +Serial = SCUS-97250 +Name = Official U.S. PlayStation Magazine Demo Disc 075 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20814 -Name = Max Payne 2 - Fall of Max Payne +Serial = SCUS-97251 +Name = Official U.S. PlayStation Magazine Demo Disc 076 Region = NTSC-U -Compat = 5 -vuClampMode = 2 --------------------------------------------- -Serial = SLUS-20816 -Name = American Idol +Serial = SCUS-97252 +Name = Official U.S. PlayStation Magazine Demo Disc 077 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20817 -Name = Headhunter - Redemption +Serial = SCUS-97253 +Name = NBA Shootout 2003 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20818 -Name = Bionicle +Serial = SCUS-97256 +Name = MLB 2004 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20820 -Name = Tom Clancy's Ghost Recon - Jungle Storm +Serial = SCUS-97257 +Name = MLB 2004 [Demo] Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20821 -Name = Mobile Suit Gundam - Gundam vs. Zeta Gundam +Serial = SCUS-97258 +Name = Amplitude Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20822 -Name = Galactic Wrestling +Serial = SCUS-97259 +Name = NHL FaceOff 2003 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20823 -Name = Robotech - Invasion +Serial = SCUS-97260 +Name = War of the Monsters [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20824 -Name = NASCAR Thunder 2004 +Serial = SCUS-97261 +Name = Kiosk Demo Disc 2.08 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20826 -Name = Harry Potter and The Sorceror's Stone +Serial = SCUS-97262 +Name = Amplitude [Demo] Region = NTSC-U -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20827 -Name = Manhunt +Serial = SCUS-97263 +Name = My Street [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20828 -Name = ShellShock - Nam '67 +Serial = SCUS-97264 +Name = Syphon Filter - The Omega Strain Region = NTSC-U Compat = 5 +EETimingHack = 1 //random hangs +[patches = D5605611] + comment=COP2 patch by Refraction + patch=0,EE,003735F8,word,48438000 + patch=0,EE,003735FC,word,4B06521B +[/patches] --------------------------------------------- -Serial = SLUS-20830 -Name = Intellivision Lives! +Serial = SCUS-97265 +Name = Jak II Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20831 -Name = Tokyo Xtreme Racer 3 +Serial = SCUS-97266 +Name = Final Fantasy XI [Disc1of2] Region = NTSC-U -Compat = 5 +Compat = 3 --------------------------------------------- -Serial = SLUS-20833 -Name = MegaMan Anniversary Collection +Serial = SCUS-97268 +Name = Ratchet & Clank - Going Commando Region = NTSC-U Compat = 5 +MemCardFilter = SCUS-97268/SCUS-97199 --------------------------------------------- -Serial = SLUS-20834 -Name = King of Fighters 2000 & 2001 [Disc1of2] +Serial = SCUS-97269 +Name = Final Fantasy XI [Disc2of2] Region = NTSC-U -Compat = 5 +Compat = 3 --------------------------------------------- -Serial = SLUS-20836 -Name = Digimon World 4 +Serial = SCUS-97270 +Name = Kiosk Demo Disc 2.09 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20837 -Name = Ribbit King +Serial = SCUS-97271 +Name = Final Fantasy XI - Online [Beta Version] [Disc1of2] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20838 -Name = All-Star Baseball 2005 +Serial = SCUS-97272 +Name = Final Fantasy XI - Online [Beta Version] [Disc2of2] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20839 -Name = King of Fighters 2000 & 2001 [Disc2of2] +Serial = SCUS-97273 +Name = Jak II [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20840 -Name = Wrath Unleashed +Serial = SCUS-97274 +Name = Jak II [Video Demo] Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20841 -Name = NFL Street +Serial = SCUS-97275 +Name = SOCOM II - U.S. Navy SEALs Region = NTSC-U Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20842 -Name = Sims, The - Bustin' Out +Serial = SCUS-97276 +Name = NFL GameDay 2004 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20843 -Name = Dead to Rights II +Serial = SCUS-97277 +Name = NCAA GameBreaker 2004 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20845 -Name = Cold Winter +Serial = SCUS-97278 +Name = NCAA Final Four 2004 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20846 -Name = Strike Force Bowling +Serial = SCUS-97279 +Name = Jet Li - Rise to Honor Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20847 -Name = La Pucelle - Tactics +Serial = SCUS-97280 +Name = Jampack Demo Disc - Summer 2003 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20848 -Name = LifeLine - Voice Action Adventure +Serial = SCUS-97281 +Name = Jampack Demo Disc - Summer 2003 [M-Rated] Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20849 -Name = Carmen Sandiego - The Secret of The Stolen Drums +Serial = SCUS-97282 +Name = Arc the Lad - Twilight of the Spirits [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20850 -Name = Blowout +Serial = SCUS-97292 +Name = Amplitude [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20851 -Name = Ace Combat 5 - The Unsung War +Serial = SCUS-97312 +Name = Jampack Demo Disc - Winter 2003 [T-Rated] Region = NTSC-U -Compat = 4 -[patches = 39B574F0] - comment=Rearranging COP2 instructions that use old results - - patch=0,EE,001A3B94,word,48498800 - patch=0,EE,001A3B98,word,4B00682C - patch=0,EE,001A3BA4,word,484A8800 - patch=0,EE,001A3BA8,word,4B0C682C -[/patches] --------------------------------------------- -Serial = SLUS-20852 -Name = Terminator 3, The - The Redemption +Serial = SCUS-97313 +Name = Jampack Demo Disc - Winter 2003 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20853 -Name = Looney Tunes - Back in Action +Serial = SCUS-97315 +Name = NCAA GameBreaker 2004 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20854 -Name = Cy Girls [Disc2of2] +Serial = SCUS-97316 +Name = Sly 2 - Band of Thieves Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20855 -Name = Destruction Derby Arenas +Serial = SCUS-97317 +Name = NFL GameDay 2004 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20856 -Name = Spy Fiction +Serial = SCUS-97318 +Name = NBA ShootOut 2004 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20857 -Name = Fight Club +Serial = SCUS-97319 +Name = EyeToy - Play Region = NTSC-U -Compat = 5 +Compat = 2 --------------------------------------------- -Serial = SLUS-20858 -Name = Corvette 50th Anniversary +Serial = SCUS-97321 +Name = Kiosk Demo Disc 2.10 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20859 -Name = Future Tactics - The Uprising +Serial = SCUS-97322 +Name = Ratchet & Clank 2 - Going Commando [Regular Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20860 -Name = Nightmare Before Christmas, Tim Burton's The - Oogie's Revenge +Serial = SCUS-97323 +Name = Ratchet & Clank 2 - Going Commando [Retail Employees Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20861 -Name = MTV Music Generator 3 - This is the Remix +Serial = SCUS-97324 +Name = Kiosk Demo Disc 2.11 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20862 -Name = Bloodrayne 2 +Serial = SCUS-97325 +Name = NBA Shootout 2004 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20863 -Name = Winning Eleven 7 World Soccer - International +Serial = SCUS-97326 +Name = MLB 2005 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20864 -Name = Punisher, The +Serial = SCUS-97327 +Name = MLB 2005 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20865 -Name = Backyard Baseball +Serial = SCUS-97328 +Name = Gran Turismo 4 Region = NTSC-U +Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +// allows car imports from GT3 or something +MemCardFilter = SCUS-97328/SCUS-97436/SCUS-97102/SCUS-97219/SCUS-97512 --------------------------------------------- -Serial = SLUS-20866 -Name = Asterix & Obelix XXL - Kick Buttix +Serial = SCUS-97329 +Name = Downhill Domination [Demo] Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20867 -Name = Astro Boy +Serial = SCUS-97330 +Name = Jak 3 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20868 -Name = MVP Baseball 2004 +Serial = SCUS-97331 +Name = Official U.S. PlayStation Magazine Demo Disc 078 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20869 -Name = Judge Dredd - Dredd vs. Death +Serial = SCUS-97332 +Name = Official U.S. PlayStation Magazine Demo Disc 079 Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20870 -Name = Ultimate Spider-Man +Serial = SCUS-97333 +Name = Official U.S. PlayStation Magazine Demo Disc 080 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20871 -Name = Naval Ops - Commander +Serial = SCUS-97334 +Name = Official U.S. PlayStation Magazine Demo Disc 081 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20872 -Name = Juiced +Serial = SCUS-97335 +Name = Official U.S. PlayStation Magazine Demo Disc 082 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20873 -Name = Silent Hill 4 - The Room +Serial = SCUS-97336 +Name = Official U.S. PlayStation Magazine Demo Disc 083 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20874 -Name = DragonBall Z - Sagas +Serial = SCUS-97337 +Name = Official U.S. PlayStation Magazine Demo Disc 084 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20875 -Name = Predator - Concrete Jungle +Serial = SCUS-97338 +Name = Official U.S. PlayStation Magazine Demo Disc 085 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20876 -Name = Backyard Football 2006 +Serial = SCUS-97339 +Name = Official U.S. PlayStation Magazine Demo Disc 086 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20877 -Name = Crimson Sea 2 +Serial = SCUS-97340 +Name = Official U.S. PlayStation Magazine Demo Disc 087 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20878 -Name = Samurai Warriors +Serial = SCUS-97341 +Name = Official U.S. PlayStation Magazine Demo Disc 088 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20879 -Name = Romance of the Three Kingdoms IX +Serial = SCUS-97342 +Name = Official U.S. PlayStation Magazine Demo Disc 089 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20880 -Name = Fairly Odd Parents, The - Shadow Showdown +Serial = SCUS-97345 +Name = EyeToy - Groove Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLUS-20881 -Name = Mortal Kombat - Deception +Serial = SCUS-97347 +Name = MLB 2006 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20882 -Name = Hitman - Contracts +Serial = SCUS-97348 +Name = NBA '06 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20883 -Name = Tom Clancy's Rainbow Six 3 +Serial = SCUS-97353 +Name = Ratchet & Clank - Up Your Arsenal Region = NTSC-U Compat = 5 +MemCardFilter = SCUS-97353/SCUS-97268/SCUS-97199 --------------------------------------------- -Serial = SLUS-20884 -Name = Spyro - A Hero's Tail +Serial = SCUS-97355 +Name = Siren Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20885 -Name = Red Star, The +Serial = SCUS-97356 +Name = Network Adapter Start-Up Disc Ver.2.5 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20886 -Name = Sitting Ducks +Serial = SCUS-97357 +Name = Online Start-Up Disc 4.0 Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLUS-20887 -Name = Adventures of Jimmy Neutron, The - Attack of the Twonkies +Serial = SCUS-97362 +Name = Syphon Filter - Dark Mirror Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20888 -Name = Front Mission 4 +Serial = SCUS-97365 +Name = World Tour Soccer 2005 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20889 -Name = MLB Slugfest - Loaded +Serial = SCUS-97366 +Name = SOCOM II - U.S. Navy SEALs [Public Beta v1.0] Region = NTSC-U Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20890 -Name = Rocky - Legends +Serial = SCUS-97367 +Name = Neopets - The Darkest Faerie Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20891 -Name = Star Ocean 3 - Till the End of Time [Disc2of2] +Serial = SCUS-97368 +Name = SOCOM II - U.S. Navy SEALs [Regular Demo] Region = NTSC-U Compat = 5 -VuAddSubHack = 1 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-20892 -Name = Xenosaga - Episode II - Jenseits von Gut und Bose [Disc1of2] +Serial = SCUS-97369 +Name = ATV Off-Road Fury 2 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20893 -Name = Way of the Samurai 2 +Serial = SCUS-97372 +Name = Rise to Honor [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20894 -Name = Worms 3D +Serial = SCUS-97373 +Name = 989 Sports 2004 Demo Disc Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-20895 -Name = Bujingai - The Forsaken City +Serial = SCUS-97374 +Name = Ratchet & Clank 2 - Going Commando & Jak II [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20896 -Name = Monster Hunter +Serial = SCUS-97377 +Name = Syphon Filter - The Omega Strain [Regular Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20897 -Name = Swords of Yi +Serial = SCUS-97378 +Name = EyeToy and EyeToy Play [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20898 -Name = Star Wars Battlefront +Serial = SCUS-97379 +Name = Athens 2004 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20899 -Name = Samurai Jack - The Shadow of Aku +Serial = SCUS-97380 +Name = Final Fantasy XI - Online [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20901 -Name = FlatOut +Serial = SCUS-97381 +Name = Ratchet & Clank 2 - Going Commando [GameStop Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20902 -Name = Shadow of Rome +Serial = SCUS-97382 +Name = NBA Shootout 2004 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20903 -Name = MegaMan X - Command Mission +Serial = SCUS-97383 +Name = Kiosk Demo Disc 2.12 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20904 -Name = SpongeBob Squarepants - The Movie +Serial = SCUS-97384 +Name = Gran Turismo Special Edition 2004 Toyota [Demo] Region = NTSC-U -Compat = 3 --------------------------------------------- -Serial = SLUS-20905 -Name = Incredibles, The +Serial = SCUS-97392 +Name = NBA '06 featuring The Life Vol.1 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20906 -Name = Fight Night 2004 +Serial = SCUS-97394 +Name = Welcome to the World of Online Gaming for Your PlayStation 2 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20907 -Name = Serious Sam - Next Encounter +Serial = SCUS-97395 +Name = HDD Utility Disc Ver.1.10 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20908 -Name = Guilty Gear Isuka +Serial = SCUS-97396 +Name = World Tour Soccer 2005 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20909 -Name = Crash Bandicoot Twinsanity +Serial = SCUS-97398 +Name = Siren [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20910 -Name = Test Drive - Eve of Destruction +Serial = SCUS-97399 +Name = God of War Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20911 -Name = Shin Megami Tensei: Nocturne +Serial = SCUS-97400 +Name = EyeToy - Groove Region = NTSC-U -Compat = 5 -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLUS-20912 -Name = Superbikes TT +Serial = SCUS-97401 +Name = Hot Shots Golf FORE! Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20913 -Name = Inuyasha - The Secret of The Cursed Mask +Serial = SCUS-97402 +Name = Killzone Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20915 -Name = Metal Gear Solid 3 - Snake Eater +Serial = SCUS-97403 +Name = Athens 2004 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20916 -Name = Dance Dance Revolution Extreme +Serial = SCUS-97405 +Name = ATV Off-Road Fury 3 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20917 -Name = Sonic Mega Collection Plus +Serial = SCUS-97406 +Name = Jampack Demo Disc Vol.10 - Summer 2004 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20918 -Name = Super Monkey Ball Deluxe +Serial = SCUS-97407 +Name = Kiosk Demo Disc Q2-Q3 2004 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20919 -Name = ESPN - NFL 2K5 +Serial = SCUS-97408 +Name = Getaway, The - Black Monday Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLUS-20920 -Name = ESPN - NBA 2K5 +Serial = SCUS-97409 +Name = Gretzky NHL 2005 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20921 -Name = ESPN - NHL 2K5 +Serial = SCUS-97410 +Name = Jampack Demo Disc Vol.10 [T-Rated] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20922 -Name = ESPN - College Hoops 2K5 +Serial = SCUS-97411 +Name = Ratchet & Clank - Up Your Arsenal [Regular Demo] Region = NTSC-U -Compat = 3 --------------------------------------------- -Serial = SLUS-20923 -Name = King of Fighters - Maximum Impact +Serial = SCUS-97412 +Name = Jak 3 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20924 -Name = Duel Masters +Serial = SCUS-97413 +Name = Ratchet & Clank - Up Your Arsenal [Public Beta v1.0] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20925 -Name = Shark Tale +Serial = SCUS-97414 +Name = EyeToy - AntiGrav Region = NTSC-U Compat = 2 --------------------------------------------- -Serial = SLUS-20926 -Name = Harry Potter and The Prisoner of Azkaban +Serial = SCUS-97415 +Name = Sly 2 - Band of Thieves [E3 Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20927 -Name = Time Crisis - Crisis Zone +Serial = SCUS-97416 +Name = Rise of the Kasai Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20928 -Name = Echo Night - Beyond -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-20929 -Name = Gundam Battle Assault 3 featuring Gundam Seed +Serial = SCUS-97417 +Name = Jampack Demo Disc Vol.11 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20930 -Name = Choro Q +Serial = SCUS-97418 +Name = Jampack Demo Disc Vol.11 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20931 -Name = Trigger Man +Serial = SCUS-97419 +Name = Jampack Demo Disc Vol.12 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20932 -Name = Mercenaries - Playground of Destruction +Serial = SCUS-97420 +Name = Jampack Demo Disc Vol.12 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20933 -Name = Smash Court Pro Tournament Tennis 2 +Serial = SCUS-97421 +Name = Kiosk Demo Disc Q4-2004 - Q1-2005 Region = NTSC-U -Compat = 5 ---------------------------------------------- -Serial = SLUS-20934 -Name = Death by Degrees +--------------------------------------------- +Serial = SCUS-97422 +Name = Kiosk Demo Disc Q1-Q2 2005 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20935 -Name = IHRA Professional Drag Racing 2005 +Serial = SCUS-97423 +Name = Kiosk Demo Disc Q2-Q3 2005 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20936 -Name = UEFA Euro 2004 +Serial = SCUS-97424 +Name = Kiosk Demo Disc Q3-Q4 2005 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20937 -Name = Wild ARMs - Alter Code F +Serial = SCUS-97425 +Name = Network Adapter Start-Up Disc Ver.3.0 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20938 -Name = Dynasty Warriors 4 - Empires +Serial = SCUS-97427 +Name = Hot Shots Golf FORE! [Online Public Beta] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20939 -Name = Viewtiful Joe 2 +Serial = SCUS-97428 +Name = Kiosk Demo Disc Q3-Q4 2004 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20940 -Name = Yu-Gi-Oh! Capsule Monster Coliseum +Serial = SCUS-97429 +Name = Jak X - Combat Racing Region = NTSC-U Compat = 5 +MemCardFilter = SCUS-97429/SCUS-97465 --------------------------------------------- -Serial = SLUS-20941 -Name = Incredible Hulk, The - Ultimate Destruction +Serial = SCUS-97430 +Name = Hot Shots Golf FORE! [Regular Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20942 -Name = Robots +Serial = SCUS-97431 +Name = Killzone Public Beta V1.0 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20943 -Name = Heroes of the Pacific +Serial = SCUS-97432 +Name = Killzone [Regular Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20944 -Name = Power Rangers - Dino Thunder +Serial = SCUS-97436 +Name = Gran Turismo 4 [Online Public Beta] Region = NTSC-U -Compat = 5 +//eeClampMode = 3 // Text in races works +vuClampMode = 2 // Text in GT mode works +MemCardFilter = SCUS-97328/SCUS-97436/SCUS-97102/SCUS-97219/SCUS-97512 --------------------------------------------- -Serial = SLUS-20945 -Name = Destroy All Humans! +Serial = SCUS-97437 +Name = ATV Off-Road Fury 3 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20946 -Name = Grand Theft Auto - San Andreas +Serial = SCUS-97438 +Name = EyeToy - Antigrav [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20947 -Name = Winback 2nd Operation +Serial = SCUS-97440 +Name = Jak and Daxter Trilogy [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20948 -Name = Crimson Tears +Serial = SCUS-97441 +Name = Getaway - Black Monday [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20949 -Name = Street Fighter Anniversary Collection +Serial = SCUS-97442 +Name = Official U.S. PlayStation Magazine Demo Disc 090 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20950 -Name = Capcom Fighting Evolution +Serial = SCUS-97443 +Name = Official U.S. PlayStation Magazine Demo Issue 91 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20951 -Name = Viewtiful Joe +Serial = SCUS-97444 +Name = Official U.S. PlayStation Magazine Demo Disc 092 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20952 -Name = Tak 2 - The Staff of Dreams +Serial = SCUS-97445 +Name = Official U.S. PlayStation Magazine Demo Disc 093 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20953 -Name = Shaman King - Power of Spirit +Serial = SCUS-97446 +Name = Official U.S. PlayStation Magazine Demo Disc 094 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20954 -Name = Hot Wheels - Stunt Track Challenge +Serial = SCUS-97447 +Name = Official U.S. PlayStation Magazine Demo Disc 095 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20955 -Name = Phantom Brave +Serial = SCUS-97448 +Name = Official U.S. PlayStation Magazine Demo Disc 096 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20956 -Name = Leisure Suit Larry: Magna Cum Laude +Serial = SCUS-97449 +Name = Official U.S. PlayStation Magazine Demo Disc 097 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20957 -Name = Scaler +Serial = SCUS-97450 +Name = Official U.S. PlayStation Magazine Demo Disc 098 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20958 -Name = Tom Clancy's Splinter Cell - Pandora Tomorrow +Serial = SCUS-97451 +Name = Official U.S. PlayStation Magazine Demo Disc 099 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20959 -Name = Dukes of Hazzard, The - Return of the General Lee +Serial = SCUS-97452 +Name = Official U.S. PlayStation Magazine Demo Disc 100 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20960 -Name = MegaMan X8 +Serial = SCUS-97453 +Name = Official U.S. PlayStation Magazine Demo Disc 101 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20961 -Name = Neo Contra +Serial = SCUS-97454 +Name = Official U.S. PlayStation Magazine Demo Disc 102 Region = NTSC-U -Compat = 4 -[patches = 08901101] - - comment=Patches By Nachbrenner - - //fix IPU busy! ingame - //patch=0,EE,003a9538,word,03e00008 - //patch=0,EE,003a953c,word,00000000 - - patch=0,EE,003a9460,word,03e00008 - patch=0,EE,003a9464,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLUS-20962 -Name = Castle of Shikigami 2 +Serial = SCUS-97455 +Name = PlayStation Underground Holiday 2004 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20963 -Name = Final Fantasy XII +Serial = SCUS-97456 +Name = PlayStation Underground Holiday 2004 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20964 -Name = Devil May Cry 3 +Serial = SCUS-97457 +Name = Sly 2 - Band of Thieves [Retail Demo] Region = NTSC-U -Compat = 5 -eeRoundMode = 0 --------------------------------------------- -Serial = SLUS-20965 -Name = Tony Hawk's Underground 2 +Serial = SCUS-97460 +Name = MLB 2006 [Demo] Region = NTSC-U -Compat = 5 -vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-20966 -Name = State of Emergency 2 +Serial = SCUS-97462 +Name = Rise of the Kasai [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20967 -Name = Enthusia Professional Racing +Serial = SCUS-97463 +Name = World Tour Soccer 2006 Region = NTSC-U Compat = 5 -eeClampMode = 3 --------------------------------------------- -Serial = SLUS-20968 -Name = Karaoke Revolution 2 +Serial = SCUS-97464 +Name = Sly 3 - Honor Amongst Thieves Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20969 -Name = S.L.A.I. - Steel Lancer Arena International - Phantom Crash +Serial = SCUS-97465 +Name = Ratchet - Deadlocked Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20970 -Name = Rumble Roses +Serial = SCUS-97466 +Name = Gretzky NHL '06 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20971 -Name = Metal Slug 4 & 5 [Disc1of2] +Serial = SCUS-97467 +Name = God of War [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20972 -Name = Samurai Showdown V +Serial = SCUS-97468 +Name = EyeToy - Play 2 Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLUS-20973 -Name = Champions - Return to Arms // aka "Champions of Norrath 2" +Serial = SCUS-97469 +Name = Neopets - The Darkest Faerie [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20974 -Name = Shin Megami Tensei: Digital Devil Saga +Serial = SCUS-97471 +Name = Genji - Dawn of the Samurai Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20975 -Name = One Piece - Grand Battle +Serial = SCUS-97472 +Name = Shadow of the Colossus Region = NTSC-U -Compat = 4 +Compat = 5 +MemCardFilter = SCUS-97472/SCUS-97113 --------------------------------------------- -Serial = SLUS-20976 -Name = Ford Racing 3 +Serial = SCUS-97473 +Name = World Tour Soccer 2006 [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20977 -Name = Virtua Fighter Cyber Generation +Serial = SCUS-97474 +Name = SOCOM 3 - U.S. Navy SEALs Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20978 -Name = Power Drome +Serial = SCUS-97475 +Name = SOCOM 3 - U.S. Navy SEALs [Regular Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20979 -Name = Suikoden IV +Serial = SCUS-97478 +Name = EyeToy - Kinetic Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20980 -Name = Ys - The Ark of Napishtim +Serial = SCUS-97479 +Name = ATV Off-Road Fury 4 Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-20981 -Name = Teenage Mutant Ninja Turtles 2 +Serial = SCUS-97481 +Name = God of War II Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20982 -Name = Bad Boys: Miami Takedown +Serial = SCUS-97482 +Name = God of War II - The Colossus Battle [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20983 -Name = Musashi Samurai Legend +Serial = SCUS-97484 +Name = Sly 3 - Honor Among Thieves [E3 Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20984 -Name = Resident Evil - Outbreak File #2 +Serial = SCUS-97485 +Name = Ratchet - Deadlocked [Regular Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20985 -Name = Under the Skin +Serial = SCUS-97486 +Name = Jak X - Combat Racing [Regular Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20986 -Name = Armored Core Nexus [Evolution Disc] +Serial = SCUS-97487 +Name = Ratchet - Deadlocked [Public Beta v.1] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20987 -Name = Pool Paradise +Serial = SCUS-97488 +Name = Jak X - Combat Racing [Public Beta v.1] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20988 -Name = Playboy - The Mansion +Serial = SCUS-97489 +Name = SOCOM 3 - U.S. Navy SEALs [Public Beta v.1] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20989 -Name = Polar Express, The +Serial = SCUS-97490 +Name = Rogue Galaxy Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20990 -Name = Metal Slug 4 & 5 [Disc2of2] +Serial = SCUS-97491 +Name = Jampack Demo Disc Vol.13 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20991 -Name = NCAA Football 2005 +Serial = SCUS-97492 +Name = Jampack Demo Disc Vol.13 [M-Rated] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20992 -Name = Catwoman +Serial = SCUS-97493 +Name = Jampack Demo Disc Vol.14 [T-Rated] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-20993 -Name = Ghosthunter +Serial = SCUS-97494 +Name = Jampack Demo Disc Vol.14 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20994 -Name = Full Metal Alchemist and The Broken Angel +Serial = SCUS-97495 +Name = EyeToy - Play 2 [with Camera] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20995 -Name = King of Fighters 2002 & 2003 [Disc1of2] +Serial = SCUS-97497 +Name = EyeToy - Kinetic [with Camera] Region = NTSC-U --------------------------------------------- -Serial = SLUS-20996 -Name = King of Fighters 2002 & 2003 [Disc2of2] +Serial = SCUS-97498 +Name = EyeToy - Play 3 Region = NTSC-U --------------------------------------------- -Serial = SLUS-20997 -Name = Midway Arcade Treasures 2 +Serial = SCUS-97500 +Name = MLB '06 - The Show Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-20998 -Name = DragonBall Z - Budokai 3 +Serial = SCUS-97501 +Name = Ape Escape 3 Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-20999 -Name = Sega Superstars -Region = NTSC-U -Compat = 2 ---------------------------------------------- -Serial = SLUS-21000 -Name = Madden NFL 2005 -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21001 -Name = NHL 2005 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21002 -Name = Tiger Woods PGA Tour 2005 +Serial = SCUS-97502 +Name = Tourist Trophy Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLUS-21003 -Name = NASCAR 2005 - Chase for the Cup +Serial = SCUS-97503 +Name = MLB '06 - The Show [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21004 -Name = Def Jam - Fight for NY +Serial = SCUS-97504 +Name = Genji - Dawn of the Samurai [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21005 -Name = Kingdom Hearts II +Serial = SCUS-97505 +Name = Shadow of the Colossus [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21006 -Name = Ghost in the Shell - Stane Alone Complex +Serial = SCUS-97506 +Name = Gretzky NHL '06 [Demo] Region = NTSC-U -Compat = 4 -[patches = 95CC86EF] - comment=Rearranging COP2 ops to avoid macflag bad stuff - // Solves door problems, possibly other issues later on (nobody ever got that far :P) - patch=0,EE,0010BC88,word,48468800 - patch=0,EE,0010BC8C,word,4bec682c - patch=0,EE,0010BC90,word,4b8d617d - patch=0,EE,0010BC98,word,4a6d617c - patch=0,EE,0012B200,word,48468800 - patch=0,EE,0012B204,word,4bec682c - patch=0,EE,0012B208,word,4b8d617d - patch=0,EE,0012B210,word,4a6d617c - patch=0,EE,0012B528,word,48468800 - patch=0,EE,0012B52C,word,4bec682c - patch=0,EE,0012B530,word,4b8d617d - patch=0,EE,0012B538,word,4a6d617c - patch=0,EE,00165BB0,word,48468800 - patch=0,EE,00165BB4,word,4bec682c - patch=0,EE,00165BB8,word,4b8d617d - patch=0,EE,00165BC0,word,4a6d617c - patch=0,EE,001B0A3C,word,48468800 - patch=0,EE,001B0A40,word,4bec682c - patch=0,EE,001B0A4C,word,4b8d617d - patch=0,EE,001BF4C0,word,48588800 - patch=0,EE,001BF4D0,word,4a0002ff - patch=0,EE,001BFA7C,word,48588800 - patch=0,EE,001BFA8C,word,4a0002ff - patch=0,EE,001BF6DC,word,48588800 - patch=0,EE,001BF6EC,word,4a0002ff - patch=0,EE,001C0040,word,48588800 - patch=0,EE,001C0050,word,4a0002ff -[/patches] --------------------------------------------- -Serial = SLUS-21007 -Name = Kuon +Serial = SCUS-97507 +Name = EyeToy [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21008 -Name = Katamari Damacy +Serial = SCUS-97509 +Name = Jak II [Greatest Hits] Region = NTSC-U -Compat = 5 -mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLUS-21009 -Name = Sega Classics Collection +Serial = SCUS-97510 +Name = ATV Off-Road Fury 2 [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21010 -Name = NanoBreaker +Serial = SCUS-97511 +Name = SOCOM II - U.S. Navy SEALs [Greatest Hits] Region = NTSC-U Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLUS-21011 -Name = Cabela's Big Game Hunter - 2005 Adventures +Serial = SCUS-97512 +Name = Gran Turismo 3 - A-Spec [Greatest Hits] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21012 -Name = Rapala Pro Fishing +Serial = SCUS-97513 +Name = Ratchet & Clank - Going Commando [Greatest Hits] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21013 -Name = Crash 'N' Burn +Serial = SCUS-97514 +Name = ATV Off-Road Fury 3 [Greatest Hits] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21014 -Name = High Roller Casino +Serial = SCUS-97515 +Name = Hot Shots Golf FORE! [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21015 -Name = Madagascar +Serial = SCUS-97516 +Name = Jak 3 [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21016 -Name = 25 to Life +Serial = SCUS-97517 +Name = Killzone [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21017 -Name = Showdown - Legends of Wrestling +Serial = SCUS-97518 +Name = Ratchet & Clank - Up Your Arsenal [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21018 -Name = Dog's Life +Serial = SCUS-97519 +Name = Sly 2 - Band of Thieves [Greatest Hits] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21019 -Name = Technic Beat +Serial = SCUS-97520 +Name = Syphon Filter - The Omega Strain [Greatest Hits] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21020 -Name = GunGrave - OverDose +Serial = SCUS-97523 +Name = EyeToy - Operation Spy! Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21021 -Name = Cabela's Deer Hunt - 2005 Season +Serial = SCUS-97527 +Name = Sly 3 - Honor Among Thieves [Regular Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21022 -Name = Prince of Persia - Warrior Within +Serial = SCUS-97528 +Name = PlayStation Underground Demo Disc - Holiday 2005 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21025 -Name = Madden NFL 2005 [Special Collectors Edition] +Serial = SCUS-97529 +Name = PlayStation Underground Demo Disc - Holiday 2005 [M-Rated] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21026 -Name = Battlefield 2 - Mordern Combat +Serial = SCUS-97530 +Name = ESA Foundation Compilation Set Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21027 -Name = Lord of the Rings, The - The Third Age +Serial = SCUS-97531 +Name = Official U.S. PlayStation Magazine Demo Disc 103 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21028 -Name = World Championship Poker +Serial = SCUS-97532 +Name = Official U.S. PlayStation Magazine Demo Disc 104 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21029 -Name = Midnight Club 3 - DUB Edition +Serial = SCUS-97533 +Name = Official U.S. PlayStation Magazine Demo Disc 105 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21030 -Name = Outlaw Golf 2 +Serial = SCUS-97534 +Name = Official U.S. PlayStation Magazine Demo Disc 106 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21031 -Name = Gallop Racer 2004 +Serial = SCUS-97535 +Name = Official U.S. PlayStation Magazine Demo Disc 107 Region = NTSC-U --------------------------------------------- -Serial = SLUS-21032 -Name = Marc Ecko's Getting Up - Contents Under Pressure +Serial = SCUS-97536 +Name = Official U.S. PlayStation Magazine Demo Disc 108 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21033 -Name = Second Sight +Serial = SCUS-97537 +Name = Official U.S. PlayStation Magazine Demo Disc 109 Region = NTSC-U -Compat = 2 --------------------------------------------- -Serial = SLUS-21034 -Name = Magix Music Maker [Deluxe Edition] +Serial = SCUS-97538 +Name = Official U.S. PlayStation Magazine Demo Disc 110 Region = NTSC-U --------------------------------------------- -Serial = SLUS-21035 -Name = Major League Baseball 2K5 +Serial = SCUS-97539 +Name = Official U.S. PlayStation Magazine Demo Disc 111 Region = NTSC-U --------------------------------------------- -Serial = SLUS-21036 -Name = Get On Da Mic +Serial = SCUS-97540 +Name = Official U.S. PlayStation Magazine Demo Disc 112 Region = NTSC-U --------------------------------------------- -Serial = SLUS-21037 -Name = Project - Snowblind +Serial = SCUS-97544 +Name = NBA '07 featuring The Life Vol.2 Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21038 -Name = Pinball Hall of Fame - The Gottlieb Collection +Serial = SCUS-97545 +Name = SOCOM - U.S. Navy SEALs - Combined Assault Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21039 -Name = TOCA Race Driver 2 - The Ultimate Racing Simulator +Serial = SCUS-97548 +Name = Ape Escape 3 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21040 -Name = Shield, The +Serial = SCUS-97554 +Name = NBA '07 featuring The Life Vol.2 [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21041 -Name = Shadow Hearts 2 - Covenant [Disc1of2] +Serial = SCUS-97555 +Name = Jak and Daxter Complete Trilogy [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21042 -Name = Darkwatch +Serial = SCUS-97556 +Name = MLB '07 - The Show Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21043 -Name = Backyard Wrestling 2 - There Goes the Neighborhood +Serial = SCUS-97557 +Name = Kiosk Demo Disc Q2-Q3 2006 Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21044 -Name = Shadow Hearts 2 - Covenant [Disc2of2] +Serial = SCUS-97558 +Name = Jak and Daxter: The Lost Frontier Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21045 -Name = Conflict Vietnam +Serial = SCUS-97560 +Name = SOCOM - U.S. Navy SEALs - Combined Assault [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21046 -Name = King Arthur +Serial = SCUS-97564 +Name = Jampack Demo Disc Vol.15 [T-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21047 -Name = Cold Fear +Serial = SCUS-97565 +Name = Jampack Demo Disc Vol.15 [M-Rated] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21048 -Name = Evil Dead - Regeneration +Serial = SCUS-97568 +Name = MLB '07 - The Show [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21049 -Name = Outlaw Volleyball Remixed +Serial = SCUS-97571 +Name = SingStar Rocks! [with Microphone] Region = NTSC-U Compat = 3 --------------------------------------------- -Serial = SLUS-21050 -Name = Burnout 3 - Takedown +Serial = SCUS-97572 +Name = Rogue Galaxy [Demo] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21051 -Name = FIFA 2005 +Serial = SCUS-97579 +Name = ATV Off-Road Fury 4 [Demo] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21052 -Name = Disney's Monsters Inc. +Serial = SCUS-97580 +Name = SingStar Pop [with Microphone] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21053 -Name = Disney's Stitch 926 +Serial = SCUS-97583 +Name = MLB '08 - The Show Region = NTSC-U --------------------------------------------- -Serial = SLUS-21054 -Name = Disney's Classics - Treasure Planet +Serial = SCUS-97584 +Name = Syphon Filter: Logan's Shadow Region = NTSC-U --------------------------------------------- -Serial = SLUS-21056 -Name = Cabal, The ~~CANCELLED~~ +Serial = SCUS-97589 +Name = NBA '08 featuring The Life Vol.3 Region = NTSC-U --------------------------------------------- -Serial = SLUS-21057 -Name = Ty the Tasmanian Tiger 2 - Bush Rescue +Serial = SCUS-97590 +Name = SingStar Rocks! [Game Only] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21058 -Name = NBA Live 2005 +Serial = SCUS-97591 +Name = SingStar Pop [Game Only] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21059 -Name = Tekken 5 +Serial = SCUS-97592 +Name = Buzz! The Mega Quiz Region = NTSC-U Compat = 5 -eeClampMode = 1 --------------------------------------------- -Serial = SLUS-21060 -Name = WWE SmackDown! vs. RAW +Serial = SCUS-97594 +Name = Buzz! The Hollywood Quiz [Bundle] Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21062 -Name = Jaws Unleashed +Serial = SCUS-97596 +Name = Buzz! Junior Jungle Party Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21063 -Name = Shining Tears +Serial = SCUS-97597 +Name = Buzz! Jr. RoboJam [Bundle] Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21064 -Name = GoldenEye - Rogue Agent +Serial = SCUS-97601 +Name = Buzz! The Mega Quiz [Game Only] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21065 -Name = Need for Speed - Underground 2 +Serial = SCUS-97602 +Name = Buzz! Jr. Jungle Party [Game Only] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21066 -Name = Urbz, The - Sims in the City +Serial = SCUS-97610 +Name = Hot Shots Tennis Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21067 -Name = Digimon Rumble Arena 2 +Serial = SCUS-97611 +Name = SingStar Amped [with Microphone] Region = NTSC-U -Compat = 5 -FpuCompareHack = 1 +Compat = 3 --------------------------------------------- -Serial = SLUS-21068 -Name = Vietcong - Purple Haze +Serial = SCUS-97612 +Name = SingStar Amped [Game Only] Region = NTSC-U -Compat = 4 --------------------------------------------- -Serial = SLUS-21069 -Name = American Chopper +Serial = SCUS-97615 +Name = Ratchet & Clank - Size Matters Region = NTSC-U --------------------------------------------- -Serial = SLUS-21070 -Name = Final Fantasy XI - Chains of Promathia +Serial = SCUS-97616 +Name = SingStar 80's Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLUS-21071 -Name = Nightmare of Druaga +Serial = SCUS-97618 +Name = SingStar 80's [Game Only] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21072 -Name = Finny the Fish & The Seven Waters +Serial = SCUS-97620 +Name = Syphon Filter - Dark Mirror [Demo] +Region = NTSC-U +--------------------------------------------- +Serial = SCUS-97621 +Name = Twisted Metal - Head-On [Extra Twisted Edition] Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21073 -Name = Nicktoons Movin' +Serial = SCUS-97622 +Name = SingStar 80's [with Microphone] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21074 -Name = Guy Game, The +Serial = SCUS-97623 +Name = Secret Agent Clank Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21075 -Name = Haunting Ground +Serial = SCUS-97626 +Name = SingStar 90's Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21076 -Name = Atari Anthology +Serial = SCUS-97627 +Name = Singstar Pop Volume 2 Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLUS-21077 -Name = Gauntlet - Seven Sorrows +Serial = SCUS-97633 +Name = Buzz! The Hollywood Quiz [Game Only] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21078 -Name = Lemony Snicket's A Series of Unfortunate Events +Serial = SCUS-97634 +Name = Buzz! Jr. RoboJam [Game Only] Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21079 -Name = Armored Core Nexus [Revolution Disc] +Serial = SCUS-97636 +Name = SingStar 90's [Game Only] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21080 -Name = Samurai Warriors - Xtreme Legends +Serial = SCUS-97640 +Name = Singstar Legends Region = NTSC-U -Compat = 4 +Compat = 3 --------------------------------------------- -Serial = SLUS-21081 -Name = Mortal Kombat - Deception [Premium Pack] +Serial = SCUS-97642 +Name = Singstar Abba Region = NTSC-U -Compat = 5 +Compat = 3 --------------------------------------------- -Serial = SLUS-21082 -Name = Chronicles of Narnia, The - The Lion, The Witch and The Wardrobe +Serial = SCUS-97643 +Name = Singstar Queen Region = NTSC-U -Compat = 5 +Compat = 3 --------------------------------------------- -Serial = SLUS-21083 -Name = LEGO Star Wars +Serial = SCUS-97644 +Name = MLB '09: The Show Region = NTSC-U -Compat = 5 --------------------------------------------- -Serial = SLUS-21084 -Name = Winnie the Pooh's Rumbly Tumbly Adventure +Serial = SCUS-97651 +Name = Singstar Country Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLUS-21086 -Name = Big Mutha Truckers 2 +Serial = SCUS-97653 +Name = MLB '10: The Show Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLUS-21087 -Name = Mortal Kombat - Shaolin Monks +Serial = SCUS-97654 +Name = MotorStorm Arctic Edge Region = NTSC-U Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLUS-21088 -Name = Disney's Chicken Little +Serial = SCUS-97660 +Name = Singstar Latino Region = NTSC-U --------------------------------------------- -Serial = SLUS-21089 -Name = Karaoke Revolution Volume 3 +Serial = SCUS-97869 +Name = Amplitude P.O.D. [Demo] Region = NTSC-U --------------------------------------------- -Serial = SLUS-21090 -Name = Alien Homind -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25002 +Name = Shinobi +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21091 -Name = Scooby-Doo! Unmasked -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25003 +Name = Unlimited SaGa +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21093 -Name = Worms Forts - Under Siege! -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25004 +Name = Kingdom Hearts - Final Mix +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21094 -Name = Midway Arcade Treasures 3 -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25005 +Name = World Soccer Winning Eleven 7 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21095 -Name = DT Racer -Region = NTSC-U -Compat = 3 +Serial = SLAJ-25006 +Name = Virtual Fighter 4 - Evolution +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21096 -Name = Ape Escape - Pumped & Primed -Region = NTSC-U -Compat = 3 +Serial = SLAJ-25007 +Name = NBA 2K3 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21097 -Name = MX World Tour featuring Jamie Little -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25008 +Name = Initial D - Special Stage +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21098 -Name = Frogger - Ancient Shadow -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25011 +Name = Shin Sangoku Musou 3 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21099 -Name = Stolen -Region = NTSC-U -Compat = 3 +Serial = SLAJ-25012 +Name = Final Fantasy X-2 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21100 -Name = NCAA March Madness 2005 -Region = NTSC-U +Serial = SLAJ-25014 +Name = Virtual On - Marz +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21101 -Name = Mortal Kombat - Deception [Premium Pack] -Region = NTSC-U +Serial = SLAJ-25016 +Name = Sangokushi Senki 2 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21102 -Name = Hard Rock Casino -Region = NTSC-U -Compat = 2 +Serial = SLAJ-25018 +Name = Shutokou Battle 01 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21103 -Name = Commandos Strike Force -Region = NTSC-U -Compat = 2 +Serial = SLAJ-25023 +Name = Shin Sangoku Musou 3 - Mushoden +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21104 -Name = MX vs. ATV Unleashed -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25026 +Name = Kunoichi Shinobi +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21105 -Name = Tom Clancy's Ghost Recon 2 -Region = NTSC-U +Serial = SLAJ-25027 +Name = Sonic Heroes +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21106 -Name = True Crime - New York City -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25031 +Name = Kunoichi - Shinobu +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25033 +Name = Puyo Puyo Fever +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25034 +Name = Sakura Taisen - Mysterious Paris +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25035 +Name = Sengoku Musou +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25037 +Name = Astro Boy Atom +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25039 +Name = Beni no Umi 2 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25040 +Name = Shin Sangoku Musou 3 - Empires +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25042 +Name = Virtua Fighter - Cyber Generation +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25045 +Name = Sakura Taisen V - Episode 0 +Region = NTSC-Ch-J +--------------------------------------------- +Serial = SLAJ-25046 +Name = NBA Live 2005 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25047 +Name = Dororo +Region = NTSC-Ch-J +--------------------------------------------- +Serial = SLAJ-25048 +Name = Sengoku Musou Mushoden +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25049 +Name = Kengo 3 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25051 +Name = Lord of the Rings - The Third Age +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25052 +Name = Urbz, The - Sims in the City +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25053 +Name = Burnout 3 - Takedown +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25055 +Name = Def Jam - Fight for N.Y. +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25056 +Name = Shining Tears +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25057 +Name = Kessen III +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25058 +Name = GoldenEye - Rogue Agent +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25059 +Name = NBA Street V3 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25060 +Name = Project Altered Beast +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25063 +Name = Shin Sangoku Mosou 4 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25064 +Name = MVP Baseball 2005 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25066 +Name = Burnout Revenge - Battle Racing Ignited +Region = NTSC-Unk +MemCardFilter = SLAJ-25066/SLPM-66108/SLPM-66652/SLPM-65719/SLPM-65958/SLPM-66962/SLAJ-25053/SLPM-66204 +--------------------------------------------- +Serial = SLAJ-25068 +Name = Shin Sangoku Musou 4 - Moushouden +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25072 +Name = Matrix, The - Path of Neo +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25073 +Name = Resident Evil 4 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25075 +Name = Need for Speed - Most Wanted [Black Edition] +Region = NTSC-Unk +MemCardFilter = SLAJ-25075/SLPM-66232/SLPM-66562/SLPM-65766/SLPM-66051/SLPM-66960 +--------------------------------------------- +Serial = SLAJ-25076 +Name = Harry Potter and the Goblet of Fire +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25077 +Name = Sengoku Musou 2 +Region = NTSC-Unk +MemCardFilter = SLAJ-25077/SLPM-55122/SLPM-66307/SLPM-74247/SLAJ-25035/SLPM-65517/SLPM-74212/SLPM-74235/SLAJ-25048/SLPM-65718/SLPM-74224/SLPM-74249 +--------------------------------------------- +Serial = SLAJ-25078 +Name = Black +Region = NTSC-Unk +vuClampMode = 0 +--------------------------------------------- +Serial = SLAJ-25079 +Name = Shin Sangoku Musou 4 - Empires +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25080 +Name = Godfather, The +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25081 +Name = FIFA World Cup - Germany 2006 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25084 +Name = Sengoku Musou 2 - Empires +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25087 +Name = NBA Live '07 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25088 +Name = FIFA Soccer 2007 +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25091 +Name = Need for Speed - Carbon +Region = NTSC-Unk +--------------------------------------------- +Serial = SLAJ-25092 +Name = Shin Sangoku Musou 4 [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21107 -Name = X-Men - The Official Game -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25093 +Name = Sangoku Musou [PlayStation 2 The Best] +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21108 -Name = Hitman - Blood Money -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25094 +Name = Burnout Dominator +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21109 -Name = Drive to Survive -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25095 +Name = Medal of Honor - Vanguard +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21110 -Name = Pirates of the Caribbean - The Legend of Jack Sparrow -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25096 +Name = Musou Orochi +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21111 -Name = Scarface - The World is Yours -Region = NTSC-U -Compat = 4 +Serial = SLAJ-25099 +Name = NBA Live '08 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21112 -Name = L.A. Rush -Region = NTSC-U -Compat = 5 +Serial = SLAJ-25115 +Name = World Soccer Winning Eleven 2011 +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21113 -Name = Atelier Iris: Eternal Mana -Region = NTSC-U -Compat = 5 +Serial = SLAJ-35001 +Name = Sakura Wars +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21114 -Name = NHRA Championship Drag Racing -Region = NTSC-U -Compat = 5 +Serial = SLAJ-35003 +Name = Sakura Taisen - Atsuki Chishioni Ni +Region = NTSC-Unk --------------------------------------------- -Serial = SLUS-21115 -Name = Okami -Region = NTSC-U -Compat = 5 +Serial = SLED-50117 +Name = Metal Gear Solid 2 - Sons of Liberty [Demo] [Zone of the Enders Bonus Disc] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21116 -Name = 187 - Ride or Die -Region = NTSC-U -Compat = 5 +Serial = SLED-50359 +Name = Devil May Cry [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21117 -Name = World Soccer - Winning Eleven 8 - International -Region = NTSC-U +Serial = SLED-50478 +Name = WWF Smackdown! - Just Bring It [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21118 -Name = NFL Street 2 -Region = NTSC-U -Compat = 5 +Serial = SLED-50488 +Name = Spy Hunter [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21119 -Name = Kessen 3 -Region = NTSC-U -Compat = 5 +Serial = SLED-50884 +Name = TimeSplitters 2 [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21120 -Name = Psychonauts -Region = NTSC-U -Compat = 5 +Serial = SLED-51211 +Name = Burnout 2 - Point of Impact [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21122 -Name = Taito Legends -Region = NTSC-U -Compat = 5 +Serial = SLED-51281 +Name = Haven - Call of the King [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21123 -Name = DragonBall Z - Budokai 3 [Limited Edition] -Region = NTSC-U +Serial = SLED-51901 +Name = Soul Calibur II [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21124 -Name = Delta Force - Black Hawk Down -Region = NTSC-U -Compat = 2 +Serial = SLED-52375 +Name = Fight Night 2004 [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21125 -Name = Airboure Troops - Countdown to D-Day -Region = NTSC-U -Compat = 5 +Serial = SLED-52441 +Name = Transformers [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21126 -Name = NBA Street v3 -Region = NTSC-U -Compat = 5 +Serial = SLED-52473 +Name = Transformers - Optimus Prime [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21127 -Name = Brave - The Search for Spirit Dancer -Region = NTSC-U -Compat = 2 +Serial = SLED-52474 +Name = Transformers - Red Alert [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21128 -Name = Blitz - The League -Region = NTSC-U -Compat = 5 +Serial = SLED-52476 +Name = UEFA Euro 2004 - Portugal [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21129 -Name = Tenchu 4 - Fatal Shadows -Region = NTSC-U -Compat = 5 +Serial = SLED-52488 +Name = The Suffering [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21130 -Name = SnoCross 2 featuring Blair Morgan -Region = NTSC-U -Compat = 5 +Serial = SLED-52929 +Name = Prince of Persia - Warrior Within [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21131 -Name = Pump It Up - Exceed -Region = NTSC-U -Compat = 5 +Serial = SLED-53083 +Name = Monster Hunter [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21132 -Name = Stella Deus: The Gate of Eternity -Region = NTSC-U -Compat = 5 +Serial = SLED-53109 +Name = Juiced [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21133 -Name = Xenosaga - Episode II - Jenseits von Gut und Bose [Disc2of2] -Region = NTSC-U -Compat = 5 +Serial = SLED-53673 +Name = 007 - From Russia with Love [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21134 -Name = Resident Evil 4 -Region = NTSC-U -Compat = 5 +Serial = SLED-53719 +Name = Pro Evolution Soccer 5 [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21135 -Name = MVP Baseball 2005 -Region = NTSC-U +Serial = SLED-53723 +Name = Peter Jackson's king Kong [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21136 -Name = Graffiti Kingdom -Region = NTSC-U -Compat = 5 +Serial = SLED-53745 +Name = Total Overdose [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21137 -Name = Tom Clancy's Splinter Cell - Chaos Theory -Region = NTSC-U -Compat = 4 +Serial = SLED-53845 +Name = Matrix - Path of Neo [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21138 -Name = X-Men Legends II - Rise of Apocalypse -Region = NTSC-U -Compat = 5 +Serial = SLED-53937 +Name = Black [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21139 -Name = Gun -Region = NTSC-U -Compat = 2 +Serial = SLED-53951 +Name = Honda Demo [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21140 -Name = Mobile Suit Gundam Seed - Never Ending Tomorrow -Region = NTSC-U -Compat = 5 +Serial = SLED-53953 +Name = FIFA Street 2 [Demo] +Region = PAL-E --------------------------------------------- -Serial = SLUS-21142 -Name = Constantine -Region = NTSC-U -Compat = 5 +Serial = SLED-54035 +Name = Play the Best Demos from Atari [Demo] +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21143 -Name = Star Wars - Episode III - Revenge of the Sith -Region = NTSC-U -Compat = 5 +Serial = SLED-54312 +Name = Need for Speed - Carbon [Demo] +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21144 -Name = Tom Clancy's Rainbow Six - Lockdown -Region = NTSC-U -Compat = 5 +Serial = SLES-50003 +Name = Swap Magic DVD Disc v2.0 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21145 -Name = Full Spectrum Warrior -Region = NTSC-U +Serial = SLES-50009 +Name = Action Replay MAX +Region = PAL-M5 Compat = 5 -EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLUS-21146 -Name = Far East of Eden -Region = NTSC-U +Serial = SLES-50010 +Name = Ready 2 Rumble - Round 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21147 -Name = FIFA Street -Region = NTSC-U -Compat = 5 +Serial = SLES-50011 +Name = FIFA 2001 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21148 -Name = TimeSplitters - Future Perfect -Region = NTSC-U -Compat = 5 +Serial = SLES-50012 +Name = FIFA 2001 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21149 -Name = Yourself Fitness -Region = NTSC-U +Serial = SLES-50013 +Name = FIFA 2001 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21150 -Name = Beat Down - Fists of Vengeance -Region = NTSC-U -Compat = 5 +Serial = SLES-50014 +Name = FIFA 2001 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21151 -Name = Disney-Pixar's Cars -Region = NTSC-U -Compat = 5 +Serial = SLES-50015 +Name = FIFA 2001 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21152 -Name = Shin Megami Tensei: Digital Devil Saga 2 -Region = NTSC-U -Compat = 5 -EETimingHack = 1 +Serial = SLES-50016 +Name = FIFA 2001 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21153 -Name = Dynasty Warriors 5 -Region = NTSC-U +Serial = SLES-50017 +Name = F1 Championship Season 2000 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21154 -Name = Killer 7 -Region = NTSC-U -Compat = 5 +Serial = SLES-50018 +Name = Kessen +Region = PAL-E --------------------------------------------- -Serial = SLUS-21155 -Name = Codename - Kids Next Door - Operation V.I.D.E.O.G.A.M.E. -Region = NTSC-U -Compat = 5 +Serial = SLES-50019 +Name = Kessen +Region = PAL-F --------------------------------------------- -Serial = SLUS-21156 -Name = Without Warning -Region = NTSC-U -Compat = 5 +Serial = SLES-50020 +Name = Kessen +Region = PAL-G --------------------------------------------- -Serial = SLUS-21157 -Name = Flipnic - Ultimate Pinball -Region = NTSC-U -Compat = 2 +Serial = SLES-50021 +Name = Madden NFL 2001 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21158 -Name = Rugby 2005 -Region = NTSC-U +Serial = SLES-50022 +Name = NBA Live 2001 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21159 -Name = Moto GP 4 -Region = NTSC-U -Compat = 5 +Serial = SLES-50023 +Name = NBA Live 2001 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21160 -Name = Tekken 5 [Demo] -Region = NTSC-U -eeClampMode = 1 +Serial = SLES-50024 +Name = NBA Live 2001 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21161 -Name = Fight Night - Round 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50025 +Name = NBA 2001 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21162 -Name = Ford Mustang - The Legend Lives -Region = NTSC-U +Serial = SLES-50026 +Name = NBA 2001 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21163 -Name = Brothers in Arms: Road to Hill 30 -Region = NTSC-U -Compat = 5 +Serial = SLES-50027 +Name = NHL 2001 +Region = PAL-M3 // Eng, FI & SE --------------------------------------------- -Serial = SLUS-21164 -Name = Namco Museum - 50th Anniversary -Region = NTSC-U +Serial = SLES-50028 +Name = NHL 2001 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21165 -Name = Arc the Lad - End of Darkness -Region = NTSC-U -Compat = 4 +Serial = SLES-50030 +Name = SSX Snowboarding +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21166 -Name = Full Metal Alchemist 2 - Curse of the Crimson Elixir -Region = NTSC-U +Serial = SLES-50031 +Name = X-Squad +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21168 -Name = Castlevania - Curse of Dakness -Region = NTSC-U +Serial = SLES-50032 +Name = Theme Park World +Region = PAL-M3 Compat = 5 -vuClampMode = 0 //SPS with microVU --------------------------------------------- -Serial = SLUS-21169 -Name = Rollercoaster Tycoon - The Peeps -Region = NTSC-U +Serial = SLES-50033 +Name = Swing Away Golf +Region = PAL-E --------------------------------------------- -Serial = SLUS-21170 -Name = Makai Kingdom - Chronicles of the Sacred Tome -Region = NTSC-U -Compat = 5 +Serial = SLES-50035 +Name = Winter X-games Snowboarding +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21171 -Name = Harvest Moon - A Wonderful Life [Special Edition] -Region = NTSC-U +Serial = SLES-50036 +Name = ESPN International Track & Field +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21172 -Name = Conflict - Global Terror -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21173 -Name = Dora the Explorer - To the Purple Planet -Region = NTSC-U +Serial = SLES-50037 +Name = Silent Scope +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21174 -Name = Dance Dance Revolution Extreme 2 -Region = NTSC-U -Compat = 2 +Serial = SLES-50038 +Name = Gradius III & IV +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-21175 -Name = Bible Game, The -Region = NTSC-U +Serial = SLES-50039 +Name = International Superstar Soccer +Region = PAL-E-G --------------------------------------------- -Serial = SLUS-21176 -Name = World Championship Poker 2 featuring Howard Lederer -Region = NTSC-U -Compat = 1 +Serial = SLES-50042 +Name = Disney's Dinosaur +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21177 -Name = In the Groove -Region = NTSC-U -Compat = 5 +Serial = SLES-50043 +Name = Disney's Dinosaur +Region = PAL-M5 // Eng & Nordic --------------------------------------------- -Serial = SLUS-21178 -Name = RPG Maker 3 -Region = NTSC-U -Compat = 5 +Serial = SLES-50044 +Name = Rayman Revolution +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21179 -Name = Colloseum - Road to Freedom -Region = NTSC-U -Compat = 5 +Serial = SLES-50045 +Name = Disney's Jungle Book - Groove Party +Region = PAL-M12 --------------------------------------------- -Serial = SLUS-21180 -Name = Onimusha - Dawn of Dreams [Disc1] -Region = NTSC-U -Compat = 5 -[patches = FE44479E] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 +Serial = SLES-50046 +Name = F1 Racing Championship +Region = PAL-F-G +Compat = 2 +[patches = EDD7E0FF] + + comment=patches by Nachbrenner + + //Skip Videos + patch=0,EE,0024ddc0,word,24020001 + [/patches] --------------------------------------------- -Serial = SLUS-21181 -Name = D.I.C.E. -Region = NTSC-U +Serial = SLES-50047 +Name = F1 Racing Championship +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-50048 +Name = Donald Duck - Quack Attack +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21182 -Name = TOCA Race Driver 3 -Region = NTSC-U +Serial = SLES-50050 +Name = Evergrace +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21183 -Name = Teen Titans -Region = NTSC-U +Serial = SLES-50051 +Name = Eternal Ring +Region = PAL-E +--------------------------------------------- +Serial = SLES-50052 +Name = Pool Master +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21184 -Name = Teenage Mutant Ninja Turtles 3 - Mutant Nightmare -Region = NTSC-U +Serial = SLES-50053 +Name = Aqua Aqua - Wetrix 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21186 -Name = NBA Ballers - Phenom -Region = NTSC-U +Serial = SLES-50054 +Name = Midnight Club +Region = PAL-E +// reads Smuggler's Run for bonus unlockable +MemCardFilter = SLES-50054/SLES-50071/SLES-50055/SLES-50061 --------------------------------------------- -Serial = SLUS-21187 -Name = Samurai Western -Region = NTSC-U +Serial = SLES-50055 +Name = Smuggler's Run +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21188 -Name = America's Army - Rise of a Soldier -Region = NTSC-U +Serial = SLES-50056 +Name = Surfing H3O +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21189 -Name = Suffering, The - Ties That Bind -Region = NTSC-U -Compat = 3 +Serial = SLES-50057 +Name = Dynasty Warriors 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21190 -Name = Outlaw Tennis -Region = NTSC-U -Compat = 5 +Serial = SLES-50059 +Name = Dynasty Warriors 2 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21191 -Name = Crash Tag Team Racing -Region = NTSC-U -Compat = 4 +Serial = SLES-50060 +Name = International Superstar Soccer +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21192 -Name = Cabela's Outdoor Adventures 2006 -Region = NTSC-U +Serial = SLES-50061 +Name = Smuggler's Run +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21193 -Name = Inuyasha - Feudal Combat -Region = NTSC-U -Compat = 5 +Serial = SLES-50062 +Name = Orphen - Scion of Sorcery +Region = PAL-E --------------------------------------------- -Serial = SLUS-21194 -Name = Phantasy Star Universe -Region = NTSC-U -Compat = 5 -eeRoundMode = 0 +Serial = SLES-50064 +Name = Stunt GP +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-21195 -Name = Breeders' Cup - World Thoroughbred Championships -Region = NTSC-U -Compat = 5 +Serial = SLES-50068 +Name = Top Gear Daredevil +Region = PAL-E --------------------------------------------- -Serial = SLUS-21196 -Name = Indigo Prophecy -Region = NTSC-U -Compat = 5 +Serial = SLES-50069 +Name = Top Gear Daredevil +Region = PAL-E --------------------------------------------- -Serial = SLUS-21197 -Name = Shrek Superslam -Region = NTSC-U -Compat = 5 +Serial = SLES-50071 +Name = Midnight Club - Street Racing +Region = PAL-M5 +Compat = 3 +MemCardFilter = SLES-50054/SLES-50071/SLES-50055/SLES-50061 --------------------------------------------- -Serial = SLUS-21198 -Name = Batman Begins -Region = NTSC-U -Compat = 2 +Serial = SLES-50072 +Name = Street Fighter EX3 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-21199 -Name = Medal of Honor - European Assault -Region = NTSC-U -Compat = 4 +Serial = SLES-50073 +Name = Driving Emotion Type-S +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21200 -Name = Armored Core - Nine Breaker -Region = NTSC-U +Serial = SLES-50074 +Name = Unreal Tournament +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21201 -Name = Tales of Legendia -Region = NTSC-U +Serial = SLES-50075 +Name = ESPN NBA 2Night +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21202 -Name = Romance of the Three Kingdoms X -Region = NTSC-U +Serial = SLES-50076 +Name = Super Bust-A-Move +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21203 -Name = Tomb Raider - Legend -Region = NTSC-U +Serial = SLES-50077 +Name = RC Revenge Pro +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21204 -Name = Victorious Boxers 2 - Fighting Spirit -Region = NTSC-U +Serial = SLES-50078 +Name = TimeSplitters +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21205 -Name = Aeon Flux -Region = NTSC-U -Compat = 5 +Serial = SLES-50079 +Name = Armored Core 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21206 -Name = Shining Force Neo -Region = NTSC-U -Compat = 4 +Serial = SLES-50080 +Name = NBA Hoopz +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21207 -Name = Dragon Quest VIII - Journey of the Cursed King -Region = NTSC-U +Serial = SLES-50106 +Name = Fur Fighters - Viggo's Revenge +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21208 -Name = Tony Hawk's American Wasteland -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21209 -Name = Urban Reign -Region = NTSC-U -Compat = 4 +Serial = SLES-50107 +Name = Legends of Wrestling +Region = PAL-E --------------------------------------------- -Serial = SLUS-21212 -Name = Spartan - Total Warrior -Region = NTSC-U -Compat = 4 +Serial = SLES-50109 +Name = 7 Blades +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21213 -Name = Madden NFL '06 -Region = NTSC-U +Serial = SLES-50110 +Name = Ephemeral Fantasia +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21214 -Name = NCAA Football 2006 -Region = NTSC-U +Serial = SLES-50111 +Name = Zone of the Enders +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21215 -Name = Warriors, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50112 +Name = Shadow of Memories +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21216 -Name = Soul Calibur III -Region = NTSC-U +Serial = SLES-50113 +Name = Ring of Red +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21217 -Name = Incredibles, The - Rise of the Underminers -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21218 -Name = Tak - The Great Juju Challenge -Region = NTSC-U +Serial = SLES-50114 +Name = Kengo - Master of Bushido +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21219 -Name = Pac-Man World 3 -Region = NTSC-U -Compat = 4 -EETimingHack = 1 +Serial = SLES-50115 +Name = Tokyo Xtreme Racer +Region = PAL-E --------------------------------------------- -Serial = SLUS-21220 -Name = World Soccer - Winning Eleven 9 International -Region = NTSC-U -Compat = 5 +Serial = SLES-50118 +Name = Tiger Woods PGA Tour 2001 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21221 -Name = Magna Carta: Tears of Blood -Region = NTSC-U +Serial = SLES-50120 +Name = Rumble Racing +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21222 -Name = Top Spin -Region = NTSC-U +Serial = SLES-50126 +Name = Quake III - Revolution +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21223 -Name = Karaoke Revolution Party -Region = NTSC-U -Compat = 3 ---------------------------------------------- -Serial = SLUS-21224 -Name = Guitar Hero -Region = NTSC-U -Compat = 5 +Serial = SLES-50127 +Name = Quake III - Revolution +Region = PAL-E // German Edition --------------------------------------------- -Serial = SLUS-21225 -Name = Bratz - Rock Angels -Region = NTSC-U +Serial = SLES-50128 +Name = Knockout Kings 2001 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21226 -Name = Velocity -Region = NTSC-U +Serial = SLES-50130 +Name = Knockout Kings 2001 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21227 -Name = DragonBall Z - Budokai Tenkaichi -Region = NTSC-U +Serial = SLES-50131 +Name = Le Mans 24 Hours +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21228 -Name = Call of Duty 2 - Big Red One -Region = NTSC-U +Serial = SLES-50132 +Name = MX Rider +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50134 +Name = Oni +Region = PAL-E Compat = 5 +[patches = 22E85E68] + + comment=patches by Nachbrenner + + //skip "branch if copro 0 condition false" + patch=0,EE,001cef7c,word,00000000 // bc0f $001cef7c + +[/patches] --------------------------------------------- -Serial = SLUS-21229 -Name = Motocross Mania 3 -Region = NTSC-U -Compat = 4 +Serial = SLES-50136 +Name = Robot Warlords +Region = PAL-E --------------------------------------------- -Serial = SLUS-21230 -Name = We Love Katamari -Region = NTSC-U -Compat = 5 -vuClampMode = 3 -mvuFlagSpeedHack = 0 +Serial = SLES-50137 +Name = Robot Warlords +Region = PAL-F --------------------------------------------- -Serial = SLUS-21231 -Name = Sniper Elite -Region = NTSC-U -Compat = 2 +Serial = SLES-50138 +Name = Robot Warlords +Region = PAL-G --------------------------------------------- -Serial = SLUS-21232 -Name = College Hoops 2K6 -Region = NTSC-U -Compat = 4 +Serial = SLES-50155 +Name = Operation Winback +Region = PAL-M3 +Compat = 5 +vuClampMode = 3 //For full textures showing. --------------------------------------------- -Serial = SLUS-21233 -Name = NBA 2K6 -Region = NTSC-U +Serial = SLES-50158 +Name = Gungriffon Blaze +Region = PAL-E --------------------------------------------- -Serial = SLUS-21234 -Name = NHL 2K6 -Region = NTSC-U -Compat = 2 +Serial = SLES-50159 +Name = Gungriffon Blaze +Region = PAL-F --------------------------------------------- -Serial = SLUS-21235 -Name = MLB 2k6 -Region = NTSC-U +Serial = SLES-50160 +Name = Gungriffon Blaze +Region = PAL-G --------------------------------------------- -Serial = SLUS-21236 -Name = Tokyo Xtreme Racer Drift -Region = NTSC-U -Compat = 5 +Serial = SLES-50165 +Name = Star Wars - Starfighter +Region = PAL-E --------------------------------------------- -Serial = SLUS-21237 -Name = AND 1 Streetball -Region = NTSC-U -Compat = 5 +Serial = SLES-50166 +Name = Star Wars - Starfighter +Region = PAL-F --------------------------------------------- -Serial = SLUS-21238 -Name = Final Fight - Streetwise -Region = NTSC-U -Compat = 5 +Serial = SLES-50167 +Name = Star Wars - Starfighter +Region = PAL-G --------------------------------------------- -Serial = SLUS-21239 -Name = Beatmania -Region = NTSC-U -Compat = 5 +Serial = SLES-50168 +Name = Star Wars - Starfighter +Region = PAL-I --------------------------------------------- -Serial = SLUS-21240 -Name = Star Wars Battlefront II -Region = NTSC-U -Compat = 5 +Serial = SLES-50169 +Name = Star Wars - Starfighter +Region = PAL-S --------------------------------------------- -Serial = SLUS-21241 -Name = NHL '06 -Region = NTSC-U -Compat = 4 +Serial = SLES-50170 +Name = World Destruction League - Thunder Tanks +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21242 -Name = Burnout Revenge -Region = NTSC-U -Compat = 5 +Serial = SLES-50171 +Name = ESPN National Hockey Night +Region = PAL-E --------------------------------------------- -Serial = SLUS-21243 -Name = Metal Gear Solid 3 - Subsistence -Region = NTSC-U -Compat = 5 +Serial = SLES-50176 +Name = Oni +Region = PAL-F --------------------------------------------- -Serial = SLUS-21244 -Name = Fatal Frame 3 - The Tormented -Region = NTSC-U +Serial = SLES-50177 +Name = Oni +Region = PAL-G Compat = 5 +[patches = 32629F36] + + comment=patches by Nachbrenner + + //skip "branch if copro 0 condition false" + patch=0,EE,001cef7c,word,00000000 // bc0f $001cef7c + +[/patches] --------------------------------------------- -Serial = SLUS-21245 -Name = Suikoden Tactics -Region = NTSC-U -Compat = 4 +Serial = SLES-50182 +Name = MTV Music Generator 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21246 -Name = Charlie and the Chocolate Factory -Region = NTSC-U +Serial = SLES-50183 +Name = Wacky Races +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21247 -Name = Jackie Chan Adventures -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21248 -Name = Legend of Kay -Region = NTSC-U +Serial = SLES-50185 +Name = Alone in the Dark 4 +Region = PAL-M5 Compat = 5 -EETimingHack = 1 //For freezes in some scene transitions. --------------------------------------------- -Serial = SLUS-21249 -Name = Yourself Fitness - Lifestyle -Region = NTSC-U +Serial = SLES-50186 +Name = Heroes of Might and Magic +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21250 -Name = Full Spectrum Warrior - Ten Hammers -Region = NTSC-U +Serial = SLES-50187 +Name = Warriors of Might and Magic +Region = PAL-M5 Compat = 5 -EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLUS-21251 -Name = FlatOut 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50191 +Name = Army Men - Green Rogue +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21252 -Name = SpongeBob Squarepants - Lights, Camera, PANTS! -Region = NTSC-U +Serial = SLES-50192 +Name = Army Men - Sarges Heroes 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21253 -Name = Ty the Tasmanian Tiger 3 -Region = NTSC-U +Serial = SLES-50193 +Name = Silpheed - The Lost Planet +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21254 -Name = Zach Bell! Mamodo Battles -Region = NTSC-U -Compat = 5 +Serial = SLES-50194 +Name = 4x4 Evolution +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21255 -Name = Trapt -Region = NTSC-U -Compat = 5 +Serial = SLES-50195 +Name = UEFA Challenge +Region = PAL-M7 --------------------------------------------- -Serial = SLUS-21256 -Name = IHRA Drag Racing - Sportsman Edition -Region = NTSC-U +Serial = SLES-50196 +Name = Soul Reaver 2 - Legacy of Kain +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21258 -Name = dot Hack - G.U. Vol.1 - Rebirth -Region = NTSC-U +Serial = SLES-50201 +Name = Evil Twin - Cyprien's Chronicles +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21259 -Name = Stacked with Daniel Negreanu -Region = NTSC-U +Serial = SLES-50202 +Name = DNA - Dark Native Apostle +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21260 -Name = Ed, Edd, 'n Eddy - The Mis-Edventures -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21261 -Name = Shadow the Hedgehog -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21262 -Name = Radiata Stories -Region = NTSC-U +Serial = SLES-50203 +Name = Bloody Roar 3 +Region = PAL-E Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLUS-21263 -Name = Romancing SaGa -Region = NTSC-U -Compat = 5 +Serial = SLES-50204 +Name = Star Wars - Super Bombad Racing +Region = PAL-E --------------------------------------------- -Serial = SLUS-21264 -Name = Tiger Woods PGA Tour 2006 -Region = NTSC-U -Compat = 2 +Serial = SLES-50206 +Name = Star Wars - Super Bombad Racing +Region = PAL-G --------------------------------------------- -Serial = SLUS-21265 -Name = Sims 2, The -Region = NTSC-U -Compat = 3 +Serial = SLES-50209 +Name = Jeremy McGrath Supercross World +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21266 -Name = NASCAR '06 - Total Team Control -Region = NTSC-U +Serial = SLES-50210 +Name = XG3 - Extreme-G Racing +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21267 -Name = Need for Speed - Most Wanted -Region = NTSC-U +Serial = SLES-50211 +Name = Gauntlet - Dark Legacy +Region = PAL-M3 Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLUS-21268 -Name = 24 - The Game -Region = NTSC-U +Serial = SLES-50212 +Name = Paris-Dakar Rally +Region = PAL-E Compat = 5 +SkipMPEGPatch = 1 --------------------------------------------- -Serial = SLUS-21269 -Name = Bully -Region = NTSC-U +Serial = SLES-50213 +Name = NFL Quarterback Club 2002 +Region = PAL-E +--------------------------------------------- +Serial = SLES-50214 +Name = 18 Wheeler +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21270 -Name = MS Saga - A New Dawn -Region = NTSC-U +Serial = SLES-50215 +Name = Crazy Taxi +Region = PAL-M4 Compat = 5 +[patches = C9C145BF] + + comment=patches by Nachbrenner + + //skip movie "PlaySega" + patch=0,EE,001a42d0,word,03e00008 + patch=0,EE,001a42d4,word,00000000 + //skip movie "PlayAcclaim" + patch=0,EE,001a4468,word,03e00008 + patch=0,EE,001a446c,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-21271 -Name = Driver - Parallel Lines -Region = NTSC-U -Compat = 2 +Serial = SLES-50217 +Name = Dave Mirra Freestyle BMX 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21272 -Name = Super Monkey Ball Adventure -Region = NTSC-U -Compat = 5 +Serial = SLES-50218 +Name = All-Star Baseball 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21273 -Name = Matrix, The - Path of Neo -Region = NTSC-U -Compat = 4 +Serial = SLES-50219 +Name = NBA Street +Region = PAL-E-F --------------------------------------------- -Serial = SLUS-21274 -Name = Outrun 2006 - Coast 2 Coast -Region = NTSC-U -Compat = 4 +Serial = SLES-50220 +Name = EA Sports Rugby +Region = PAL-E --------------------------------------------- -Serial = SLUS-21275 -Name = River King - A Wonderful Journey -Region = NTSC-U -Compat = 5 +Serial = SLES-50221 +Name = Conflict Zone +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21276 -Name = Ford vs. Chevy -Region = NTSC-U +Serial = SLES-50224 +Name = Kuri Kuri Mix +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21277 -Name = Barnyard -Region = NTSC-U -Compat = 5 +Serial = SLES-50225 +Name = Escape from Monkey Island +Region = PAL-E --------------------------------------------- -Serial = SLUS-21278 -Name = SSX on Tour -Region = NTSC-U -Compat = 3 +Serial = SLES-50226 +Name = Escape from Monkey Island 4 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21279 -Name = NBA Live '06 -Region = NTSC-U +Serial = SLES-50227 +Name = Escape from Monkey Island (Flucht von Monkey Island) +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLUS-21280 -Name = FIFA '06 -Region = NTSC-U +Serial = SLES-50228 +Name = Escape from Monkey Island 4 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21281 -Name = Marvel Nemesis - Rise of the Imperfects -Region = NTSC-U -Compat = 3 +Serial = SLES-50229 +Name = Monkey Island 4 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21282 -Name = James Bond 007 - From Russia with Love -Region = NTSC-U +Serial = SLES-50230 +Name = Lotus Challenge +Region = PAL-M5 Compat = 5 +XgKickHack = 1 //SPS. --------------------------------------------- -Serial = SLUS-21283 -Name = Total Overdose - A Gunslinger's Tale in Mexico -Region = NTSC-U +Serial = SLES-50231 +Name = International League Soccer +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50232 +Name = Off-Road Wide Open +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21284 -Name = Nicktoons Unite! -Region = NTSC-U +Serial = SLES-50233 +Name = Army Men - Air Attack - Blade's Revenge +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21285 -Name = Ultimate Spider-Man [Limited Edition] -Region = NTSC-U +Serial = SLES-50243 +Name = David Beckham Soccer +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21286 -Name = WWE SmackDown! vs. RAW 2006 -Region = NTSC-U +Serial = SLES-50247 +Name = Onimusha - Warlords +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21287 -Name = Prince of Persia - The Two Thrones -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21288 -Name = American Chopper 2 -Region = NTSC-U -Compat = 4 +Serial = SLES-50248 +Name = MDK 2 - Armageddon +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21289 -Name = Sea World - Shamu's Big Adventure -Region = NTSC-U -Compat = 4 +Serial = SLES-50252 +Name = Penny Racers +Region = PAL-M3 +Compat = 5 +[patches = FBE2613D] + //Patched by Prafull + //Fixes vsync issues + patch=0,EE,001a66ac,word,03e00008 + //Avoid hang at first loading screen + patch=0,EE,001a6688,word,00000000 + //Skips movies + patch=0,EE,001b1b00,word,24020001 +[/patches] --------------------------------------------- -Serial = SLUS-21290 -Name = Ford Street Racing -Region = NTSC-U +Serial = SLES-50253 +Name = Modern Groove - Ministry of Sound Edition +Region = PAL-E --------------------------------------------- -Serial = SLUS-21291 -Name = Suikoden V -Region = NTSC-U -Compat = 5 +Serial = SLES-50259 +Name = Flintstones - Viva Rock Vegas +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21292 -Name = Wild ARMs 4 -Region = NTSC-U -Compat = 5 +Serial = SLES-50260 +Name = Hidden Invasion +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21293 -Name = Metal Saga -Region = NTSC-U -Compat = 5 -DMABusyHack = 1 //intro fmv +Serial = SLES-50261 +Name = Sky Surfer +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21294 -Name = Mark Ecko's Getting Up - Contents Under Pressure [Special Edition] -Region = NTSC-U +Serial = SLES-50262 +Name = World Destruction League - War Jets +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21295 -Name = Tony Hawk's American Wasteland [Collector's Edition] -Region = NTSC-U +Serial = SLES-50263 +Name = Portal Runner +Region = PAL-E --------------------------------------------- -Serial = SLUS-21296 -Name = Dance Factory -Region = NTSC-U -Compat = 3 +Serial = SLES-50266 +Name = Playmobil - Hype - The Time Quest +Region = PAL-M4 +Compat = 4 --------------------------------------------- -Serial = SLUS-21297 -Name = Devil Kings -Region = NTSC-U -Compat = 5 +Serial = SLES-50267 +Name = CART Fury Championship Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21298 -Name = NCAA March Madness '06 -Region = NTSC-U +Serial = SLES-50268 +Name = SpyHunter +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21299 -Name = Dynasty Warriors 5 - Xtreme Legends -Region = NTSC-U -Compat = 5 +Serial = SLES-50273 +Name = Legion - The Legend of Excalibur +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21300 -Name = Over the Hedge -Region = NTSC-U -Compat = 2 +Serial = SLES-50274 +Name = Arctic Thunder +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21301 -Name = World Series of Poker -Region = NTSC-U -Compat = 5 +Serial = SLES-50275 +Name = EA Sports Rugby +Region = PAL-F --------------------------------------------- -Serial = SLUS-21303 -Name = Rebel Raiders - Operation Nighthawk -Region = NTSC-U -Compat = 5 +Serial = SLES-50276 +Name = Gift, The +Region = PAL-E --------------------------------------------- -Serial = SLUS-21304 -Name = Justice League Heroes -Region = NTSC-U -Compat = 4 -vuClampMode = 2 //Ingame capes become SPS mess with lower than extra VU clamp. +Serial = SLES-50277 +Name = Red Faction +Region = PAL-E --------------------------------------------- -Serial = SLUS-21305 -Name = Arthur and the Invisibles: The Game -Region = NTSC-U +Serial = SLES-50278 +Name = Red Faction +Region = PAL-F --------------------------------------------- -Serial = SLUS-21306 -Name = Ghost Rider -Region = NTSC-U +Serial = SLES-50279 +Name = Red Faction +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21307 -Name = Ice Age 2 - The Meltdown -Region = NTSC-U -Compat = 3 +Serial = SLES-50280 +Name = Victorious Boxers +Region = PAL-E --------------------------------------------- -Serial = SLUS-21309 -Name = Let's Ride - Silver Buckle Stables -Region = NTSC-U +Serial = SLES-50282 +Name = Age of Empires II: The Age of Kings +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-21310 -Name = Brothers in Arms: Earned in Blood -Region = NTSC-U -Compat = 2 +Serial = SLES-50283 +Name = WTA Tour Tennis +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21311 -Name = King Kong, Peter Jackson's - The Official Game of the Movie -Region = NTSC-U -Compat = 4 +Serial = SLES-50284 +Name = Silent Scope 2 +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21312 -Name = Wallace & Gromit - The Curse of the Were-Rabbit -Region = NTSC-U +Serial = SLES-50285 +Name = Police 24-7 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21313 -Name = Friends - The One with all the Trivia -Region = NTSC-U +Serial = SLES-50288 +Name = Stuntman +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21314 -Name = Ruff Trigger - Vancore Conspiracy -Region = NTSC-U -Compat = 4 +Serial = SLES-50296 +Name = Gift +Region = PAL-F +Compat = 5 --------------------------------------------- -Serial = SLUS-21315 -Name = 50cent - Bulletproof -Region = NTSC-U +Serial = SLES-50297 +Name = Gift +Region = PAL-G --------------------------------------------- -Serial = SLUS-21316 -Name = Capcom Classics Collection Vol.1 -Region = NTSC-U +Serial = SLES-50306 +Name = Resident Evil - CODE Veronica X +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21317 -Name = Street Fighter Alpha Anthology -Region = NTSC-U +Serial = SLES-50310 +Name = Freak Out +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21318 -Name = Call of Duty 2 - Big Red One [Collector's Edition] -Region = NTSC-U -Compat = 5 +Serial = SLES-50314 +Name = Giants - Citizen Kabuto +Region = PAL-E --------------------------------------------- -Serial = SLUS-21319 -Name = Flow - Urban Dance Uprising -Region = NTSC-U +Serial = SLES-50325 +Name = Max Payne +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21320 -Name = Rogue Trooper -Region = NTSC-U -Compat = 2 +Serial = SLES-50326 +Name = Max Payne +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21321 -Name = Squadra Course Alfa Romeo -Region = NTSC-U +Serial = SLES-50330 +Name = Grand Theft Auto III +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21322 -Name = Eragon -Region = NTSC-U -Compat = 5 +Serial = SLES-50335 +Name = Rune - Viking Warlord +Region = PAL-E --------------------------------------------- -Serial = SLUS-21323 -Name = Rampage - Total Destruction -Region = NTSC-U -Compat = 5 +Serial = SLES-50336 +Name = Rune - Viking Warlord +Region = PAL-G --------------------------------------------- -Serial = SLUS-21324 -Name = Major League Baseball 2K5 [World Series Edition] -Region = NTSC-U +Serial = SLES-50337 +Name = Rune - Viking Warlord +Region = PAL-F --------------------------------------------- -Serial = SLUS-21325 -Name = Harry Potter and The Goblet of Fire -Region = NTSC-U -Compat = 5 +Serial = SLES-50338 +Name = Rune - Viking Warlord +Region = PAL-I --------------------------------------------- -Serial = SLUS-21326 -Name = Shadow Hearts - From the New World -Region = NTSC-U -Compat = 5 +Serial = SLES-50339 +Name = Rune - Viking Warlord +Region = PAL-S --------------------------------------------- -Serial = SLUS-21327 -Name = Atelier Iris 2: The Azoth of Destiny -Region = NTSC-U -Compat = 5 +Serial = SLES-50341 +Name = Smuggler's Run 2 - Hostile Territory +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21328 -Name = Pac-Man World Rally -Region = NTSC-U +Serial = SLES-50350 +Name = Disney's Tarzan - Freeride +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50351 +Name = Lake Masters EX +Region = PAL-M3 Compat = 5 -eeClampMode = 3 --------------------------------------------- -Serial = SLUS-21329 -Name = Karaoke Revolution Country - CMT Presents -Region = NTSC-U -Compat = 3 +Serial = SLES-50355 +Name = Batman Vengeance +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21330 -Name = Monster Rancher 5 -Region = NTSC-U -Compat = 5 +Serial = SLES-50356 +Name = ESPN International Winter Sports +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21331 -Name = Sonic Riders -Region = NTSC-U +Serial = SLES-50358 +Name = Devil May Cry +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21332 -Name = Real World Golf -Region = NTSC-U -Compat = 2 +Serial = SLES-50362 +Name = Jonny Moseley Mad Trix +Region = PAL-E --------------------------------------------- -Serial = SLUS-21333 -Name = World Poker Tour 2K6 -Region = NTSC-U -Compat = 5 +Serial = SLES-50364 +Name = City Crisis +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21334 -Name = Grandia III [Disc1of2] -Region = NTSC-U -Compat = 5 +Serial = SLES-50366 +Name = Star Wars - Racer Revenge +Region = PAL-E --------------------------------------------- -Serial = SLUS-21335 -Name = Hustle, The - Detroit Streets - Kat's Story -Region = NTSC-U -Compat = 5 +Serial = SLES-50371 +Name = Star Wars - Jedi Starfighter +Region = PAL-E +--------------------------------------------- +Serial = SLES-50372 +Name = Star Wars - Jedi Starfighter +Region = PAL-G +--------------------------------------------- +Serial = SLES-50373 +Name = Star Wars - Jedi Starfighter +Region = PAL-F --------------------------------------------- -Serial = SLUS-21336 -Name = Zathura -Region = NTSC-U -Compat = 5 +Serial = SLES-50374 +Name = Star Wars - Jedi Starfighter +Region = PAL-I --------------------------------------------- -Serial = SLUS-21337 -Name = Arena Football - EA Sports -Region = NTSC-U -Compat = 5 +Serial = SLES-50375 +Name = Star Wars - Jedi Starfighter +Region = PAL-S --------------------------------------------- -Serial = SLUS-21338 -Name = Armored Core - Last Raven -Region = NTSC-U +Serial = SLES-50382 +Name = Silent Hill 2 +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-21339 -Name = Puzzle Collection - Crosswords & More! -Region = NTSC-U +Serial = SLES-50383 +Name = Metal Gear Solid 2 - Sons of Liberty +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21340 -Name = World Championship Cards -Region = NTSC-U -Compat = 2 +Serial = SLES-50384 +Name = Project Zero II +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21341 -Name = Stuart Little 3 - Big Photo Adventure -Region = NTSC-U -Compat = 2 +Serial = SLES-50385 +Name = Metal Gear Solid 2 - Sons of Liberty +Region = PAL-S --------------------------------------------- -Serial = SLUS-21342 -Name = MLB Slugfest 2006 -Region = NTSC-U +Serial = SLES-50386 +Name = Crash Bandicoot - Wrath of Cortex +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-21343 -Name = Samurai Champloo - Sidetracked -Region = NTSC-U -Compat = 5 +Serial = SLES-50390 +Name = Driven +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21344 -Name = Steambot Chronicles -Region = NTSC-U +Serial = SLES-50395 +Name = World Championship Snooker 2002 +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-50396 +Name = Mike Tyson Heavyweight Boxing +Region = PAL-M5 Compat = 4 --------------------------------------------- -Serial = SLUS-21345 -Name = Grandia III [Disc2of2] -Region = NTSC-U -Compat = 5 +Serial = SLES-50397 +Name = Prisoner of War +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21346 -Name = Ace Combat Zero - The Belkan War -Region = NTSC-U -Compat = 5 -[patches = 65729657] - patch=0,EE,00131EBC,word,48498800 - patch=0,EE,00131EC0,word,4B00682C - patch=0,EE,00131ECC,word,484A8800 - patch=0,EE,00131ED0,word,4B0C682C -[/patches] +Serial = SLES-50398 +Name = UEFA Champions League +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21347 -Name = AMF Xtreme Bowling -Region = NTSC-U -Compat = 4 +Serial = SLES-50400 +Name = Shaun Palmer's Pro Snowboarder +Region = PAL-E --------------------------------------------- -Serial = SLUS-21348 -Name = Yakuza -Region = NTSC-U -Compat = 5 +Serial = SLES-50401 +Name = Shaun Palmer's Pro Snowboarder +Region = PAL-F --------------------------------------------- -Serial = SLUS-21349 -Name = Taito Legends 2 -Region = NTSC-U +Serial = SLES-50402 +Name = Shaun Palmer's Pro Snowboarder +Region = PAL-G --------------------------------------------- -Serial = SLUS-21350 -Name = Cabela's Dangerous Hunts 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50412 +Name = Pro Evolution Soccer +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21351 -Name = Need for Speed - Most Wanted [Black Edition] -Region = NTSC-U -Compat = 5 +Serial = SLES-50421 +Name = Supercar Street Challenge +Region = PAL-G --------------------------------------------- -Serial = SLUS-21352 -Name = Dai Senryaku VII Exceed -Region = NTSC-U -Compat = 5 +Serial = SLES-50422 +Name = Madden NFL 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21353 -Name = Eureka Seven - Vol.1 - The New Wave -Region = NTSC-U +Serial = SLES-50423 +Name = F1 2001 +Region = PAL-M4 Compat = 5 +[patches = 063ff7db] + + comment=Patch by Shadow Lady. + + //IPU dma fix + patch=0,EE,003b8680,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-21354 -Name = Curious George -Region = NTSC-U +Serial = SLES-50424 +Name = Cricket 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21355 -Name = Midnight Club 3 - DUB Edition Remix -Region = NTSC-U -Compat = 5 +Serial = SLES-50425 +Name = NHL 2002 +Region = PAL-M3 // Eng, FI & SE --------------------------------------------- -Serial = SLUS-21356 -Name = Tom Clancy's Splinter Cell - Double Agent -Region = NTSC-U -Compat = 4 +Serial = SLES-50426 +Name = NHL 2002 +Region = PAL-CZ-F --------------------------------------------- -Serial = SLUS-21357 -Name = Hummer Badlands -Region = NTSC-U -Compat = 4 +Serial = SLES-50427 +Name = NHL 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21358 -Name = Naruto - Ultimate Ninja -Region = NTSC-U -Compat = 5 +Serial = SLES-50428 +Name = MX 2002 featuring Ricky Carmichael +Region = PAL-E --------------------------------------------- -Serial = SLUS-21359 -Name = Metal Gear Solid 3 - Subsistence [Limited Edition] [Disc2of3] -Region = NTSC-U -Compat = 5 +Serial = SLES-50429 +Name = Alex Ferguson Player Manager 2002 +Region = PAL-E +Compat = 3 --------------------------------------------- -Serial = SLUS-21360 -Name = Metal Gear Solid 3 - Subsistence [Limited Edition] [Disc3of3] -Region = NTSC-U +Serial = SLES-50430 +Name = ESPN X-Games Skateboarding +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21361 -Name = Devil May Cry 3 - Dante's Awakening [Special Edition] -Region = NTSC-U -Compat = 5 -eeRoundMode = 0 +Serial = SLES-50431 +Name = F1 2001 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21362 -Name = Onimusha - Dawn of Dreams [Disc2] -Region = NTSC-U -Compat = 5 -[patches = FFDE85E9] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 -[/patches] +Serial = SLES-50432 +Name = Tony Hawk Pro Skater 3 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21363 -Name = Zatch Bell! Mamodo Fury -Region = NTSC-U -Compat = 1 +Serial = SLES-50433 +Name = GoDai - Elemental Force +Region = PAL-E --------------------------------------------- -Serial = SLUS-21364 -Name = One Piece - Pirates Carnival -Region = NTSC-U -Compat = 4 +Serial = SLES-50434 +Name = Army Men - Real Time Strategy +Region = PAL-E --------------------------------------------- -Serial = SLUS-21365 -Name = King of Fighters 2006, The -Region = NTSC-U +Serial = SLES-50435 +Name = Tony Hawk's Pro Skater 3 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21366 -Name = Ultimate Board Game Collection -Region = NTSC-U -Compat = 5 +Serial = SLES-50436 +Name = Tony Hawk Pro Skater 3 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21367 -Name = MVP '06 - NCAA Baseball -Region = NTSC-U +Serial = SLES-50437 +Name = Tony Hawk's Pro Skater 3 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21368 -Name = Rugby '06 -Region = NTSC-U +Serial = SLES-50438 +Name = Motor Mayhem +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21369 -Name = FIFA Street 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50443 +Name = LEGO Racers 2 +Region = PAL-M8 --------------------------------------------- -Serial = SLUS-21370 -Name = MegaMan X Collection -Region = NTSC-U +Serial = SLES-50444 +Name = Portal Runner +Region = PAL-M4 +--------------------------------------------- +Serial = SLES-50445 +Name = Burnout +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21371 -Name = Rapala Pro Tournament Fishing -Region = NTSC-U +Serial = SLES-50446 +Name = Shadow Man - 2econd Coming +Region = PAL-M4 +Compat = 4 --------------------------------------------- -Serial = SLUS-21372 -Name = Legend of Spyro, The - A New Beginning -Region = NTSC-U -Compat = 5 +Serial = SLES-50447 +Name = All-Star Baseball 2003 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21373 -Name = Drakengard 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50451 +Name = NHL Hitz 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21374 -Name = Marvel - Ultimate Alliance -Region = NTSC-U +Serial = SLES-50457 +Name = Rayman M +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21375 -Name = Torino 2006 - The Official Game of the XX Olympic Winter Games -Region = NTSC-U -Compat = 5 -vuClampMode = 2 //for SPS with microVU. +Serial = SLES-50460 +Name = Official PlayStation 2 Magazine Demo 11 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21376 -Name = Black -Region = NTSC-U -Compat = 5 -vuClampMode = 0 +Serial = SLES-50462 +Name = Pro Evolution Soccer +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-21377 -Name = Dance Dance Revolution SuperNOVA -Region = NTSC-U -Compat = 4 +Serial = SLES-50464 +Name = FIFA 2002 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21379 -Name = Cabela's African Safari -Region = NTSC-U -Compat = 4 +Serial = SLES-50465 +Name = FIFA 2002 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21380 -Name = Snoopy vs. The Red Baron -Region = NTSC-U -Compat = 5 -vuClampMode = 3 +Serial = SLES-50466 +Name = FIFA 2002 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21381 -Name = Bode Miller Alpine Skiing -Region = NTSC-U -Compat = 5 -vuClampMode = 2 +Serial = SLES-50467 +Name = FIFA 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21382 -Name = Franklin - A Birthday Surprise -Region = NTSC-U +Serial = SLES-50469 +Name = FIFA 2002 +Region = PAL-GR --------------------------------------------- -Serial = SLUS-21383 -Name = Fight Night - Round 3 -Region = NTSC-U -Compat = 5 +Serial = SLES-50470 +Name = FIFA 2002 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21384 -Name = Cabela's Alaskan Adventures -Region = NTSC-U -Compat = 4 +Serial = SLES-50471 +Name = FIFA 2002 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21385 -Name = Godfather, The -Region = NTSC-U +Serial = SLES-50472 +Name = GTC Africa +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21386 -Name = Tales of the Abyss -Region = NTSC-U -Compat = 5 +Serial = SLES-50477 +Name = WWF Smackdown! - Just Bring It +Region = PAL-E --------------------------------------------- -Serial = SLUS-21387 -Name = Warship Gunner 2 -Region = NTSC-U +Serial = SLES-50479 +Name = Turok Evolution +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21388 -Name = Sopranos, The -Region = NTSC-U +Serial = SLES-50480 +Name = Aggressive Inline Skating +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21389 -Name = Xenosaga - Episode III - Also Sprach Zarathustra [Disc1of2] -Region = NTSC-U +Serial = SLES-50481 +Name = Vexx +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21390 -Name = Urban Chaos - Riot Response -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21391 -Name = SpongeBob SquarePants - Creature from the Krusty Krab -Region = NTSC-U -Compat = 4 +Serial = SLES-50484 +Name = Rayman M +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21392 -Name = Shrek Smash and Crash -Region = NTSC-U -Compat = 2 +Serial = SLES-50486 +Name = Splashdown +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21393 -Name = Gallop Racer 2006 -Region = NTSC-U +Serial = SLES-50487 +Name = Space Race +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-21394 -Name = TXR Drift 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50495 +Name = Who Wants to be a Millionaire - 2nd Edition +Region = PAL-E --------------------------------------------- -Serial = SLUS-21395 -Name = Avatar - The Last Airbender -Region = NTSC-U -Compat = 5 +Serial = SLES-50496 +Name = Qui Veut Gagner des Millions +Region = PAL-F --------------------------------------------- -Serial = SLUS-21396 -Name = Star Trek - Encounters -Region = NTSC-U -Compat = 5 +Serial = SLES-50497 +Name = Who Wants to be a Millionaire 2 (Wer wird Millionar 2) +Region = PAL-G --------------------------------------------- -Serial = SLUS-21397 -Name = Disgaea 2: Cursed Memories -Region = NTSC-U +Serial = SLES-50498 +Name = Grandia II +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21398 -Name = Dynasty Warriors 5 - Empires -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21399 -Name = Driver - Parallel Lines [Limited Edition] -Region = NTSC-U +Serial = SLES-50503 +Name = Weakest Link +Region = PAL-E --------------------------------------------- -Serial = SLUS-21400 -Name = Monster House -Region = NTSC-U +Serial = SLES-50504 +Name = Half-Life +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21401 -Name = Equestriad -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21402 -Name = Micro Machines v4 -Region = NTSC-U +Serial = SLES-50505 +Name = Half-Life +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21403 -Name = Backyard Baseball '07 -Region = NTSC-U +Serial = SLES-50506 +Name = Half-Life +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21404 -Name = Final Fantasy XI - Treasures of Aht Urhgan -Region = NTSC-U +Serial = SLES-50507 +Name = Half-Life +Region = PAL-F --------------------------------------------- -Serial = SLUS-21405 -Name = Xiaolin Showdown -Region = NTSC-U -Compat = 4 +Serial = SLES-50508 +Name = Half-Life +Region = PAL-I --------------------------------------------- -Serial = SLUS-21406 -Name = Godfather, The - Collector's Edition -Region = NTSC-U +Serial = SLES-50509 +Name = Half-Life +Region = PAL-S --------------------------------------------- -Serial = SLUS-21407 -Name = NFL Head Coach -Region = NTSC-U +Serial = SLES-50510 +Name = Mummy Returns, The +Region = PAL-M5 Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21408 -Name = FIFA World Cup '06 -Region = NTSC-U -Compat = 4 +Serial = SLES-50511 +Name = G-Surfers +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21409 -Name = LEGO Star Wars II - The Original Trilogy -Region = NTSC-U +Serial = SLES-50512 +Name = Bass Strike +Region = PAL-E +--------------------------------------------- +Serial = SLES-50533 +Name = Sunny Garcia Surfing +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-50534 +Name = NBA Live 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21410 -Name = Mortal Kombat - Armageddon -Region = NTSC-U -Compat = 5 +Serial = SLES-50535 +Name = NBA Live 2002 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21411 -Name = M2 Rock -Region = NTSC-U +Serial = SLES-50536 +Name = NBA Live 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21412 -Name = World Championship Poker featuring Howard Lederer - All-In -Region = NTSC-U -Compat = 5 +Serial = SLES-50537 +Name = NBA Live 2002 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21413 -Name = Thrillville -Region = NTSC-U -Compat = 5 +Serial = SLES-50538 +Name = NBA Live 2002 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21414 -Name = Delta Force - Team Sabre -Region = NTSC-U -Compat = 3 +Serial = SLES-50539 +Name = James Bond 007 - Agent Under Fire +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21415 -Name = Ant Bully, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50540 +Name = Simpsons Road Rage +Region = PAL-E --------------------------------------------- -Serial = SLUS-21416 -Name = D1 Grand Prix -Region = NTSC-U -Compat = 5 +Serial = SLES-50541 +Name = Capcom vs. SNK 2 - Mark of the Millennium +Region = PAL-E --------------------------------------------- -Serial = SLUS-21417 -Name = Xenosaga - Episode III - Also Sprach Zarathustra [Disc2of2] -Region = NTSC-U +Serial = SLES-50544 +Name = Jet Ion GP +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21418 -Name = Sprint Cars - Road to Knoxville -Region = NTSC-U -Compat = 4 +Serial = SLES-50545 +Name = SSX Tricky +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21419 -Name = Dirge of Cerberus - Final Fantasy VII -Region = NTSC-U -Compat = 5 +Serial = SLES-50546 +Name = LMA Manager 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21420 -Name = Disney's Chicken Little - Ace in Action -Region = NTSC-U +Serial = SLES-50547 +Name = Roger Lemerre - La Selection des Champions 2002 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21421 -Name = Spy Hunter - Nowhere to Run -Region = NTSC-U -Compat = 5 +Serial = SLES-50548 +Name = BDFL Manager 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21422 -Name = Tom Clancy's Ghost Recon - Advenced Warfighter -Region = NTSC-U -Compat = 5 +Serial = SLES-50549 +Name = Football Manager Campionato 2002 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21423 -Name = Grand Theft Auto - Liberty City Stories -Region = NTSC-U -Compat = 5 +Serial = SLES-50550 +Name = Manager de Liga 2002 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21424 -Name = NBA 2K7 -Region = NTSC-U +Serial = SLES-50551 +Name = Tetris Worlds +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21425 -Name = NHL 2K7 -Region = NTSC-U -Compat = 2 +Serial = SLES-50552 +Name = Jet Ski Riders +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21426 -Name = Call of Duty 3 -Region = NTSC-U +Serial = SLES-50553 +Name = Project Eden +Region = PAL-M5 Compat = 5 -eeClampMode = 3 --------------------------------------------- -Serial = SLUS-21427 -Name = WWE SmackDown! vs. RAW 2007 -Region = NTSC-U -Compat = 5 +Serial = SLES-50554 +Name = Thunderhawk - Operation Pheonix +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21428 -Name = Bionicle Heroes -Region = NTSC-U -Compat = 2 +Serial = SLES-50556 +Name = New York Race +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21430 -Name = IGPX - Immortal Grand Prix -Region = NTSC-U -Compat = 5 +Serial = SLES-50558 +Name = DSF Futball Manager 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21431 -Name = Shin Megami Tensei - Devil Summoner - Raidou Kuzunoha vs. The Soulless Army -Region = NTSC-U -Compat = 5 +Serial = SLES-50559 +Name = Guy Roux Manager 2002 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21432 -Name = NRA Gun Club -Region = NTSC-U -Compat = 5 +Serial = SLES-50562 +Name = Super Bust-A-Move 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21433 -Name = FIFA Soccer '07 -Region = NTSC-U +Serial = SLES-50568 +Name = Top Gun - Combat Zones +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21434 -Name = Superman Returns - The Video Game -Region = NTSC-U +Serial = SLES-50570 +Name = Tour de France, Le +Region = PAL-M5 Compat = 4 --------------------------------------------- -Serial = SLUS-21435 -Name = One Piece - Grand Adventure -Region = NTSC-U -Compat = 5 +Serial = SLES-50572 +Name = Robot Wars - Arenas of Destruction +Region = PAL-E --------------------------------------------- -Serial = SLUS-21436 -Name = Just Cause -Region = NTSC-U -Compat = 4 +Serial = SLES-50575 +Name = Dark Summit +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21437 -Name = Disney's Kim Possible - What's the Switch -Region = NTSC-U +Serial = SLES-50578 +Name = Kessen II +Region = PAL-E +[patches = 9FAC4FF3] + comment=COP2 flag instance patch by refraction + // a mac flag check just after a vsub which gets in the way, rearranging + patch=0,EE,00170F20,word,48438800 + patch=0,EE,00170F24,word,4BE521AC + patch=0,EE,00170F28,word,30848000 + patch=0,EE,00170F2C,word,4BE72B3C +[/patches] --------------------------------------------- -Serial = SLUS-21438 -Name = Cartoon Network Racing -Region = NTSC-U -Compat = 3 +Serial = SLES-50579 +Name = Kessen II +Region = PAL-F --------------------------------------------- -Serial = SLUS-21439 -Name = Destroy All Humans! 2 -Region = NTSC-U -Compat = 4 +Serial = SLES-50580 +Name = Kessen II +Region = PAL-G --------------------------------------------- -Serial = SLUS-21440 -Name = LarryBoy and the Bad Apple -Region = NTSC-U +Serial = SLES-50584 +Name = G1 Jockey +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21441 -Name = DragonBall Z - Budokai Tenkaichi 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50586 +Name = ESPN Winter Sports 2002 +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21442 -Name = Super DragonBall Z -Region = NTSC-U -Compat = 5 +Serial = SLES-50589 +Name = Worms Blast +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21443 -Name = DaVinci Code, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50590 +Name = Music Maker +Region = PAL-E-G --------------------------------------------- -Serial = SLUS-21444 -Name = Tony Hawk's Project 8 -Region = NTSC-U -Compat = 4 +Serial = SLES-50591 +Name = Guilty Gear X +Region = PAL-E --------------------------------------------- -Serial = SLUS-21445 -Name = Ar tonelico: Melody of Elemia -Region = NTSC-U -Compat = 5 +Serial = SLES-50592 +Name = No One Lives Forever +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21446 -Name = Family Feud -Region = NTSC-U -Compat = 5 +Serial = SLES-50606 +Name = State of Emergency +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21447 -Name = Guitar Hero II -Region = NTSC-U -Compat = 5 +Serial = SLES-50608 +Name = Shadow Man - 2econd Coming +Region = PAL-G --------------------------------------------- -Serial = SLUS-21448 -Name = Rule of Rose -Region = NTSC-U +Serial = SLES-50613 +Name = Woody Woodpecker +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21449 -Name = Fast and the Furious, The - Tokyo Drift -Region = NTSC-U -Compat = 5 +Serial = SLES-50619 +Name = Jonny Moseley Mad Trix +Region = PAL-F-G --------------------------------------------- -Serial = SLUS-21450 -Name = Super Trucks Racing 2 -Region = NTSC-U +Serial = SLES-50620 +Name = Micro Machines +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-21451 -Name = Grim Adventures of Billy & Mandy, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50628 +Name = Simpsons Road Rage +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21452 -Name = Valkyrie Profile 2 - Silmeria -Region = NTSC-U -Compat = 5 -VuAddSubHack = 1 +Serial = SLES-50630 +Name = Dragon Rage +Region = PAL-E --------------------------------------------- -Serial = SLUS-21453 -Name = Disney's Meet the Robinsons -Region = NTSC-U -Compat = 5 +Serial = SLES-50631 +Name = Dragon Rage +Region = PAL-F-G --------------------------------------------- -Serial = SLUS-21454 -Name = Shrek the Third -Region = NTSC-U -Compat = 4 +Serial = SLES-50632 +Name = Dragon Rage +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-21455 -Name = Happy Feet -Region = NTSC-U -Compat = 4 +Serial = SLES-50633 +Name = Gitaroo Man +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21456 -Name = Tony Hawk's Downhill Jam -Region = NTSC-U -Compat = 2 +Serial = SLES-50636 +Name = Centre Court - Hardhitter +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21457 -Name = World Championship Paintball -Region = NTSC-U +Serial = SLES-50637 +Name = Pro Rally 2002 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21458 -Name = NHL '07 -Region = NTSC-U -Compat = 4 +Serial = SLES-50638 +Name = High Heat Major League Baseball 2003 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21459 -Name = NCAA Football '07 -Region = NTSC-U +Serial = SLES-50639 +Name = Everblue +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-21460 -Name = NBA Live '07 -Region = NTSC-U +Serial = SLES-50640 +Name = Salt Lake City 2002 Olympic Winter Games +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21461 -Name = NASCAR '07 -Region = NTSC-U +Serial = SLES-50641 +Name = Dynasty Warriors 3 +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21462 -Name = Samurai Warriors 2 -Region = NTSC-U -Compat = 4 +Serial = SLES-50643 +Name = Shifters +Region = PAL-F-G --------------------------------------------- -Serial = SLUS-21463 -Name = Tom Clancy's Ghost Recon 2 -Region = NTSC-U +Serial = SLES-50644 +Name = Shifters +Region = PAL-E --------------------------------------------- -Serial = SLUS-21464 -Name = Winning Eleven - Pro Evolution Soccer 2007 -Region = NTSC-U -Compat = 5 +Serial = SLES-50645 +Name = Shifters +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-21465 -Name = Raiden III -Region = NTSC-U +Serial = SLES-50647 +Name = Casper - Spirit Dimensions +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50649 +Name = Taz Wanted +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21466 -Name = Plan, The -Region = NTSC-U +Serial = SLES-50650 +Name = Resident Evil Gun Survivor 2 - Code Veronica +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21467 -Name = Open Season -Region = NTSC-U -Compat = 4 +Serial = SLES-50653 +Name = Gitaroo Man +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21468 -Name = Peanuts All-Star -Region = NTSC-U +Serial = SLES-50654 +Name = Dune, Frank Herbert's +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21469 -Name = Nicktoons - Battle for Volcano Island -Region = NTSC-U -Compat = 4 +Serial = SLES-50661 +Name = Atlantis III +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21470 -Name = Bratz - Forever Diamondz -Region = NTSC-U +Serial = SLES-50662 +Name = Shadow of Zorro, The +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21471 -Name = Tokobot Plus - Mysteries of the Karakuri -Region = NTSC-U -Compat = 4 +Serial = SLES-50670 +Name = ESPN Winter X-Games Snowboarding 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21472 -Name = World Pool Challenge '06 -Region = NTSC-U +Serial = SLES-50672 +Name = Baldur's Gate: Dark Alliance +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SLUS-21473 -Name = Capcom Classics Collection Vol. 2 -Region = NTSC-U +Serial = SLES-50677 +Name = Shadow Hearts +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21474 -Name = History Channel - Civil War - A Nation Divided -Region = NTSC-U +Serial = SLES-50679 +Name = Tenchu 3 - Wrath of Heaven +Region = PAL-E +--------------------------------------------- +Serial = SLES-50680 +Name = Pirates - The Legend of Black Kat +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21475 -Name = Final Fantasy XII [Collector's Edition] -Region = NTSC-U +Serial = SLES-50683 +Name = Sled Storm +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21476 -Name = Madden NFL '07 -Region = NTSC-U -Compat = 4 +Serial = SLES-50684 +Name = Medal of Honor - Frontline +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLUS-21477 -Name = Madden NFL '07 [Hall of Fame Edition] -Region = NTSC-U +Serial = SLES-50686 +Name = Iron Aces 2 - Birds of Prey +Region = PAL-E --------------------------------------------- -Serial = SLUS-21478 -Name = Pirates - Legend of the Black Buccaneer -Region = NTSC-U -Compat = 4 +Serial = SLES-50703 +Name = Maximo +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21479 -Name = Reservoir Dogs -Region = NTSC-U +Serial = SLES-50704 +Name = Godai - Elemental Force +Region = PAL-F-G Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21480 -Name = Dot Hack GU Volume 1 - Rebirth - Terminal Disc -Region = NTSC-U -Compat = 5 +Serial = SLES-50706 +Name = Army Men - Real Time Strategy +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21481 -Name = NCAA March Madness '07 -Region = NTSC-U +Serial = SLES-50709 +Name = Weakest Link (Le Maillon Fable) +Region = PAL-F --------------------------------------------- -Serial = SLUS-21482 -Name = NFL Street 3 -Region = NTSC-U -Compat = 5 +Serial = SLES-50710 +Name = Dr. Muto +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21483 -Name = Tiger Woods PGA Tour '07 -Region = NTSC-U -Compat = 2 +Serial = SLES-50711 +Name = Red Card Football +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50713 +Name = Freaky Flyers +Region = PAL-E --------------------------------------------- -Serial = SLUS-21484 -Name = Flushed Away -Region = NTSC-U -Compat = 5 +Serial = SLES-50714 +Name = Defender +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21485 -Name = Backyard Basketball '07 -Region = NTSC-U +Serial = SLES-50715 +Name = Gravity Games Bike Street - Vertical Dirt +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21486 -Name = Eagle Eye Golf -Region = NTSC-U +Serial = SLES-50716 +Name = Fireblade +Region = PAL-E +--------------------------------------------- +Serial = SLES-50717 +Name = Mortal Kombat - Deadly Alliance +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21487 -Name = Art of Fighting Anthology -Region = NTSC-U -Compat = 2 +Serial = SLES-50720 +Name = FMX - Freestyle Metal X +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21488 -Name = dot Hack - G.U. Vol.2 - Reminisce -Region = NTSC-U +Serial = SLES-50721 +Name = Pryzm - Dark Unicorn +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21489 -Name = dot Hack - G.U. Vol.3 - Redemption -Region = NTSC-U -Compat = 5 +Serial = SLES-50722 +Name = Premier Manager 2002-2003 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21490 -Name = Test Drive Unlimited -Region = NTSC-U -Compat = 5 -VIFFIFOHack = 1 +Serial = SLES-50723 +Name = TOCA Race Driver +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21491 -Name = World Series of Poker - Tournament of Champions -Region = NTSC-U +Serial = SLES-50725 +Name = V-Rally 3 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21492 -Name = Scarface [Collector's Edition] -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21493 -Name = Need for Speed - Carbon -Region = NTSC-U -Compat = 2 +Serial = SLES-50726 +Name = Myst III - Exile +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21494 -Name = Need for Speed - Carbon [Collector's Edition] -Region = NTSC-U +Serial = SLES-50727 +Name = Knockout Kings 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21495 -Name = Sudoku, Carol Vorderman's -Region = NTSC-U -Compat = 2 +Serial = SLES-50728 +Name = Tiger Woods PGA Tour 2002 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21496 -Name = ProStroke Golf - World Tour 2007 -Region = NTSC-U -Compat = 4 +Serial = SLES-50730 +Name = VIP +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21497 -Name = Strawberry Shortcake - Adventures in the Land of Dreams -Region = NTSC-U +Serial = SLES-50731 +Name = Need for Speed - Hot Pursuit 2 +Region = PAL-M6 +Compat = 5 +vuClampMode = 2 //white textures --------------------------------------------- -Serial = SLUS-21498 -Name = Naruto - Uzumaki Chronicles -Region = NTSC-U +Serial = SLES-50735 +Name = Jade Cocoon 2 +Region = PAL-E Compat = 5 -OPHFLagHack = 1 --------------------------------------------- -Serial = SLUS-21499 -Name = Evolution GT -Region = NTSC-U +Serial = SLES-50738 +Name = Star Trek Voyager - Elite Force +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21500 -Name = Superbikes - Riding Challenge -Region = NTSC-U +Serial = SLES-50739 +Name = Soldier of Fortune - Gold Edition +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21501 -Name = Raw Danger -Region = NTSC-U +Serial = SLES-50751 +Name = Herdy Gerdy +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21503 -Name = God Hand -Region = NTSC-U -Compat = 5 +Serial = SLES-50752 +Name = Pro Tennis WTA Tour +Region = PAL-E --------------------------------------------- -Serial = SLUS-21536 -Name = Sims 2, The - Pets -Region = NTSC-U -Compat = 5 +Serial = SLES-50753 +Name = Freekstyle +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21537 -Name = NeoGeo Fatal Fury Collection -Region = NTSC-U -Compat = 5 +Serial = SLES-50754 +Name = Simpsons Skateboarding +Region = PAL-E --------------------------------------------- -Serial = SLUS-21538 -Name = Eureka Seven - Vol.2 - The New Vision -Region = NTSC-U +Serial = SLES-50755 +Name = Simpsons Skateboarding +Region = PAL-F --------------------------------------------- -Serial = SLUS-21539 -Name = Greg Hastings Tournament Paintball Max'd -Region = NTSC-U -Compat = 5 +Serial = SLES-50757 +Name = Atlantis III +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-21540 -Name = Karaoke Revolution Presents - American Idol -Region = NTSC-U -Compat = 3 +Serial = SLES-50758 +Name = Eve of Extinction +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21541 -Name = Ratatouille -Region = NTSC-U +Serial = SLES-50763 +Name = Rally Championship +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLUS-21542 -Name = Sega Genesis Collection -Region = NTSC-U -Compat = 5 +Serial = SLES-50765 +Name = Music Maker +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21543 -Name = Mortal Kombat - Armageddon [Kollector's Edition] -Region = NTSC-U +Serial = SLES-50767 +Name = V8 Supercars Australia - Race Driver +Region = PAL-E --------------------------------------------- -Serial = SLUS-21544 -Name = Fantastic 4 - Rise of Silver Surfer -Region = NTSC-U -Compat = 4 +Serial = SLES-50768 +Name = Rally Championship +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21545 -Name = Pirates of the Caribbean - At World's End -Region = NTSC-U +Serial = SLES-50769 +Name = Mr. Moskeeto +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21547 -Name = NHRA - Countdown to the Championship 2007 -Region = NTSC-U -Compat = 5 +Serial = SLES-50770 +Name = Mad Maestro! +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21548 -Name = Mercury Meltdown - Remix -Region = NTSC-U +Serial = SLES-50771 +Name = Blood Omen 2 - Legend of Kain +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21549 -Name = Sopranos, The [Collector's Edition] -Region = NTSC-U +Serial = SLES-50772 +Name = Blood Omen 2 - Legend of Kain +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21550 -Name = Metal Slug Anthology -Region = NTSC-U +Serial = SLES-50773 +Name = Donald Duck Phantomias Platyrhynchos Kineticus +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21551 -Name = Dog Island, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50777 +Name = Battle Engine Aquila +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21552 -Name = Spider-Man 3 -Region = NTSC-U -Compat = 4 +Serial = SLES-50778 +Name = TD Overdrive - The Brotherhood of Speed +Region = PAL-M5 +Compat = 2 --------------------------------------------- -Serial = SLUS-21553 -Name = Lumines Plus -Region = NTSC-U -Compat = 5 +Serial = SLES-50779 +Name = ESPN NBA 2Night 2002 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21554 -Name = King of Fighters Collection, The - The Orochi Saga -Region = NTSC-U -Compat = 5 +Serial = SLES-50787 +Name = International Superstar Soccer 2 +Region = PAL-E-G --------------------------------------------- -Serial = SLUS-21555 -Name = Tomb Raider - Anniversary -Region = NTSC-U -Compat = 5 +Serial = SLES-50788 +Name = Frogger - The Great Quest +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21556 -Name = Konami Kids Playground - Dinosaur Shapes & Colors -Region = NTSC-U -Compat = 5 +Serial = SLES-50790 +Name = International Superstar Soccer 2002 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21557 -Name = Konami Kids Playground - Frogger Hop, Skip & Jumpin' Fun -Region = NTSC-U +Serial = SLES-50793 +Name = Grand Theft Auto III +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21558 -Name = Konami Kids Playground - Toy Pals Fun with Numbers -Region = NTSC-U -Compat = 5 +Serial = SLES-50794 +Name = Sven-Goran Eriksson's World Manager 2002 +Region = PAL-E +Compat = 4 --------------------------------------------- -Serial = SLUS-21559 -Name = Konami Kids Playground - Alphabet Circus -Region = NTSC-U +Serial = SLES-50795 +Name = Superman - Shadow of Apokolips +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21560 -Name = Family Guy - The Video Game -Region = NTSC-U +Serial = SLES-50796 +Name = FIFA World Cup 2002 +Region = PAL-E-SE +--------------------------------------------- +Serial = SLES-50797 +Name = FIFA World Cup 2002 +Region = PAL-F +--------------------------------------------- +Serial = SLES-50798 +Name = FIFA World Cup 2002 +Region = PAL-G Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21561 -Name = Major League Baseball 2K7 -Region = NTSC-U +Serial = SLES-50799 +Name = FIFA World Cup 2002 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21563 -Name = Horsez -Region = NTSC-U -Compat = 4 +Serial = SLES-50800 +Name = FIFA World Cup 2002 +Region = PAL-S --------------------------------------------- -Serial = SLUS-21564 -Name = Atelier Iris 3: Grand Phantasm -Region = NTSC-U -Compat = 5 +Serial = SLES-50801 +Name = FIFA World Cup 2002 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21565 -Name = Pirates of the Caribbean - At World's End -Region = NTSC-U +Serial = SLES-50802 +Name = Knockout Kings 2002 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21566 -Name = Brunswick Pro Bowling -Region = NTSC-U -Compat = 5 +Serial = SLES-50804 +Name = Deus Ex +Region = PAL-E --------------------------------------------- -Serial = SLUS-21567 -Name = Shining Force EXA -Region = NTSC-U -Compat = 5 +Serial = SLES-50805 +Name = Deus Ex +Region = PAL-G --------------------------------------------- -Serial = SLUS-21568 -Name = Arena Football - Road to Glory -Region = NTSC-U +Serial = SLES-50806 +Name = Deus Ex +Region = PAL-F --------------------------------------------- -Serial = SLUS-21569 -Name = Shin Megami Tensei: Persona 3 -Region = NTSC-U -Compat = 5 -VuClipFlagHack = 1 +Serial = SLES-50807 +Name = Deus Ex +Region = PAL-I --------------------------------------------- -Serial = SLUS-21570 -Name = Heatseeker -Region = NTSC-U -Compat = 4 +Serial = SLES-50808 +Name = Deus Ex +Region = PAL-S --------------------------------------------- -Serial = SLUS-21571 -Name = Growlanser - Heritage of War -Region = NTSC-U -Compat = 5 +Serial = SLES-50809 +Name = Next Generation Tennis 2003 +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21572 -Name = Surf's Up -Region = NTSC-U -Compat = 5 +Serial = SLES-50812 +Name = Spider-Man +Region = PAL-E --------------------------------------------- -Serial = SLUS-21573 -Name = Harley-Davidson - Race to the Rally -Region = NTSC-U -Compat = 5 +Serial = SLES-50813 +Name = Spider-Man +Region = PAL-F --------------------------------------------- -Serial = SLUS-21574 -Name = Dawn of Mana -Region = NTSC-U +Serial = SLES-50814 +Name = Spider-Man +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21575 -Name = Naruto - Ultimate Ninja 2 -Region = NTSC-U +Serial = SLES-50815 +Name = Blood Omen 2 - Legend of Kain +Region = PAL-G +--------------------------------------------- +Serial = SLES-50816 +Name = DTM Race Driver +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21576 -Name = Rayman - Raving Rabbids -Region = NTSC-U -Compat = 4 +Serial = SLES-50818 +Name = Pro Race Driver +Region = PAL-I --------------------------------------------- -Serial = SLUS-21577 -Name = Odin Sphere -Region = NTSC-U +Serial = SLES-50820 +Name = Micro Machines +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50821 +Name = Project Zero +Region = PAL-M5 Compat = 5 +[patches] + comment=- This gamedisc only lets you choose language once, + comment=- whereafter it stores that setting in the memcard. + comment=- To change the language you actually have to erase + comment=- the memcard content for the game. +[/patches] --------------------------------------------- -Serial = SLUS-21578 -Name = Biker Mice from Mars -Region = NTSC-U -Compat = 3 +Serial = SLES-50822 +Name = Shadow Hearts +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21579 -Name = Barbie in The 12 Dancing Princesses -Region = NTSC-U +Serial = SLES-50826 +Name = Star Wars - Clone Wars +Region = PAL-E --------------------------------------------- -Serial = SLUS-21580 -Name = Pimp my Ride -Region = NTSC-U +Serial = SLES-50829 +Name = Commandos 2 - Men of Courage +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21581 -Name = UEFA Champions League 2006-2007 -Region = NTSC-U -Compat = 4 +Serial = SLES-50831 +Name = Star Wars - Bounty Hunter +Region = PAL-E --------------------------------------------- -Serial = SLUS-21582 -Name = MVP '07 - NCAA Baseball -Region = NTSC-U +Serial = SLES-50832 +Name = Star Wars - Bounty Hunter +Region = PAL-F --------------------------------------------- -Serial = SLUS-21583 -Name = Crash of the Titans -Region = NTSC-U -Compat = 5 +Serial = SLES-50833 +Name = Star Wars - Bounty Hunter +Region = PAL-G --------------------------------------------- -Serial = SLUS-21584 -Name = Romance of the Three Kingdoms XI -Region = NTSC-U -Compat = 5 +Serial = SLES-50834 +Name = Star Wars - Bounty Hunter +Region = PAL-I --------------------------------------------- -Serial = SLUS-21585 -Name = Samurai Warriors 2 - Empires -Region = NTSC-U +Serial = SLES-50835 +Name = Star Wars - Bounty Hunter +Region = PAL-S --------------------------------------------- -Serial = SLUS-21586 -Name = Guitar Hero Encore - Rocks the '80s -Region = NTSC-U -Compat = 5 +Serial = SLES-50836 +Name = Indiana Jones and The Emperor's Tomb +Region = PAL-E +EETimingHack = 1 //For texture flicker. --------------------------------------------- -Serial = SLUS-21587 -Name = Made Man -Region = NTSC-U -Compat = 5 +Serial = SLES-50837 +Name = Indiana Jones and The Emperor's Tomb +Region = PAL-F +EETimingHack = 1 //For texture flicker. --------------------------------------------- -Serial = SLUS-21588 -Name = Avatar - The Last Airbender - The Burning Earth -Region = NTSC-U +Serial = SLES-50838 +Name = Indiana Jones and The Emperor's Tomb +Region = PAL-G Compat = 5 +EETimingHack = 1 //For texture flicker. --------------------------------------------- -Serial = SLUS-21589 -Name = Pinball Hall of Fame - The Williams Collection -Region = NTSC-U -Compat = 5 +Serial = SLES-50839 +Name = Indiana Jones and The Emperor's Tomb +Region = PAL-I +EETimingHack = 1 //For texture flicker. --------------------------------------------- -Serial = SLUS-21590 -Name = Grand Theft Auto - Vice City Stories -Region = NTSC-U +Serial = SLES-50840 +Name = Indiana Jones and The Emperor's Tomb +Region = PAL-S +EETimingHack = 1 //For texture flicker. +--------------------------------------------- +Serial = SLES-50841 +Name = Largo Winch - Empire Under Threat +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21591 -Name = Ski-Doo Snow X Racing -Region = NTSC-U +Serial = SLES-50842 +Name = Downforce +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21592 -Name = Adventures of Darwin, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50843 +Name = Crashed +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21593 -Name = Juiced 2 - Hot Import Nights -Region = NTSC-U -Compat = 4 +Serial = SLES-50845 +Name = Medal of Honour - Frontline +Region = PAL-F --------------------------------------------- -Serial = SLUS-21594 -Name = Naruto - Uzumaki Chronicles 2 -Region = NTSC-U -OPHFLagHack = 1 +Serial = SLES-50846 +Name = Medal of Honor - Frontline +Region = PAL-G --------------------------------------------- -Serial = SLUS-21595 -Name = T.M.N.T. - Teenage Mutant Ninja Turtles -Region = NTSC-U -Compat = 2 +Serial = SLES-50848 +Name = Speed Kings +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21596 -Name = Burnout - Dominator -Region = NTSC-U -Compat = 5 +Serial = SLES-50849 +Name = Urban Freestyle Soccer +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21597 -Name = Medal of Honor - Vanguard -Region = NTSC-U -Compat = 5 +Serial = SLES-50850 +Name = ATV Off-Road 2 +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21598 -Name = Digimon World - Data Squad -Region = NTSC-U -Compat = 5 +Serial = SLES-50852 +Name = Sven-Goran Eriksson's World Challenge +Region = PAL-E --------------------------------------------- -Serial = SLUS-21599 -Name = High School Musical - Sing It! -Region = NTSC-U +Serial = SLES-50853 +Name = Marcel DeSaily Pro Football +Region = PAL-F --------------------------------------------- -Serial = SLUS-21600 -Name = Spider-Man - Friend or Foe -Region = NTSC-U -Compat = 5 +Serial = SLES-50854 +Name = WM Nationalspieler +Region = PAL-G --------------------------------------------- -Serial = SLUS-21601 -Name = Sprint Cars 2 - Showdown at Eldora -Region = NTSC-U +Serial = SLES-50859 +Name = Commandos 2 - Men of Courage +Region = PAL-E --------------------------------------------- -Serial = SLUS-21602 -Name = Transformers - The Game -Region = NTSC-U -Compat = 2 +Serial = SLES-50860 +Name = Commandos 2 - Men of Courage +Region = PAL-G --------------------------------------------- -Serial = SLUS-21603 -Name = Soul Nomad & The World Eaters -Region = NTSC-U -Compat = 5 +Serial = SLES-50861 +Name = Top Angler +Region = PAL-E --------------------------------------------- -Serial = SLUS-21604 -Name = GrimGrimoire -Region = NTSC-U -Compat = 5 +Serial = SLES-50862 +Name = Street Hoops +Region = PAL-E --------------------------------------------- -Serial = SLUS-21605 -Name = Nicktoons - Attack of the Toybots -Region = NTSC-U +Serial = SLES-50870 +Name = Mat Hoffman's Pro BMX 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21606 -Name = Metropolismania 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50871 +Name = Mat Hoffman's Pro BMX 2 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21607 -Name = Legend of Spyro, The - The Eternal Night -Region = NTSC-U -Compat = 5 +Serial = SLES-50872 +Name = Mat Hoffman's Pro BMX 2 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21608 -Name = Dance Dance Revolution - SuperNOVA 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-50873 +Name = Reign of Fire +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21609 -Name = Dance Dance Revolution - Disney Channel -Region = NTSC-U +Serial = SLES-50874 +Name = F1 2002 +Region = PAL-M4 Compat = 5 +[patches = A0ED2D23] + //Patched by Prafull + //Fixes controller issue but skips videos + patch=0,EE,002d8568,word,03e00008 + patch=0,EE,002d856c,word,00000000 +[/patches] --------------------------------------------- -Serial = SLUS-21611 -Name = Thrillville - Off the Rails -Region = NTSC-U -Compat = 3 +Serial = SLES-50875 +Name = F1 2002 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21612 -Name = Legend of the Dragon -Region = NTSC-U -Compat = 5 +Serial = SLES-50876 +Name = Driv3r +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21613 -Name = Manhunt 2 -Region = NTSC-U +Serial = SLES-50877 +Name = TimeSplitters 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21614 -Name = Star Wars - The Force Unleashed -Region = NTSC-U +Serial = SLES-50879 +Name = Paris-Dakar 2 +Region = PAL-M5 Compat = 5 +FPUNegDivHack = 1 //Fixes sky being shown over the 3d. +EETimingHack = 1 //Flickery videos without it. +[patches = CB4EBD11] + + comment=patches by Nachbrenner + + //Skip Intro Videos + patch=0,EE,00139188,word,10000029 + //KOSMOS fix + patch=0,EE,00171874,word,00000000 // D1_CHCR + patch=0,EE,001718c4,word,00000000 // GS_CSR + +[/patches] --------------------------------------------- -Serial = SLUS-21615 -Name = Wild Arms 5 -Region = NTSC-U +Serial = SLES-50880 +Name = BMX XXX +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21616 -Name = Tony Hawk's Proving Ground -Region = NTSC-U -Compat = 2 +Serial = SLES-50882 +Name = Mary-Kate and Ashley - Sweet 16 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21618 -Name = Plan, The -Region = NTSC-U +Serial = SLES-50886 +Name = Transworld Surf +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21619 -Name = Harry Potter and The Order of the Phoenix -Region = NTSC-U -Compat = 5 +Serial = SLES-50891 +Name = Legaia 2 - Duel Saga +Region = PAL-E --------------------------------------------- -Serial = SLUS-21620 -Name = NCAA Football '08 -Region = NTSC-U +Serial = SLES-50892 +Name = Lethal Skies Elite Pilot - Team SW +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21621 -Name = Shin Megami Tensei: Persona 3 FES -Region = NTSC-U +Serial = SLES-50897 +Name = Super Trucks +Region = PAL-M6 Compat = 5 -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLUS-21622 -Name = Bee Movie Game -Region = NTSC-U -Compat = 4 +Serial = SLES-50898 +Name = X-Men - The Next Dimension +Region = PAL-E --------------------------------------------- -Serial = SLUS-21623 -Name = BIGS, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50899 +Name = X-Men - The Next Dimension +Region = PAL-G --------------------------------------------- -Serial = SLUS-21624 -Name = Cabela's Trophy Bucks -Region = NTSC-U -Compat = 5 +Serial = SLES-50900 +Name = X-Men - The Next Dimension +Region = PAL-F --------------------------------------------- -Serial = SLUS-21625 -Name = Cabela's Big Game Hunter III -Region = NTSC-U -Compat = 4 +Serial = SLES-50902 +Name = Conflict - Desert Storm +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21626 -Name = Stuntman - Ignition -Region = NTSC-U -Compat = 5 -VIFFIFOHack = 1 +Serial = SLES-50905 +Name = Armored Core 2 - Another Age +Region = PAL-E +// save import option was removed from PAL release --------------------------------------------- -Serial = SLUS-21627 -Name = Jackass - The Game -Region = NTSC-U -Compat = 5 +Serial = SLES-50906 +Name = Master Rally +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21628 -Name = Hot Wheels - Beat That -Region = NTSC-U -Compat = 5 +Serial = SLES-50908 +Name = Monster Jam - Maximum Destruction +Region = PAL-E --------------------------------------------- -Serial = SLUS-21629 -Name = Samurai Showdown Anthology -Region = NTSC-U +Serial = SLES-50914 +Name = International Cue Club +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21630 -Name = Star Trek - Conquest -Region = NTSC-U +Serial = SLES-50919 +Name = Akira Psycho Ball +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21631 -Name = Phantasy Star Universe - Ambition of the Illuminus -Region = NTSC-U +Serial = SLES-50920 +Name = King's Field IV +Region = PAL-M5 Compat = 5 -eeRoundMode = 0 --------------------------------------------- -Serial = SLUS-21632 -Name = NHL 2K8 -Region = NTSC-U -Compat = 3 +Serial = SLES-50921 +Name = Way of the Samurai +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21633 -Name = Aqua Teen Hunger Force - Zombie Ninja Pro-Am -Region = NTSC-U -Compat = 5 +Serial = SLES-50922 +Name = Terminator, The - Dawn of Fate +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21634 -Name = Crazy Frog Racer -Region = NTSC-U -Compat = 5 +Serial = SLES-50927 +Name = Commandos 2 - Men of Courage +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21635 -Name = Monster Jam -Region = NTSC-U -Compat = 5 +Serial = SLES-50930 +Name = Dino Stalker +Region = PAL-E --------------------------------------------- -Serial = SLUS-21636 -Name = Looney Tunes - Acme Arsenal -Region = NTSC-U -Compat = 4 +Serial = SLES-50932 +Name = Smash Court Tennis - Pro Tournament +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21637 -Name = Disney-Pixar's Cars - Mater-National -Region = NTSC-U +Serial = SLES-50933 +Name = eJay Clubworld +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21638 -Name = Madden NFL '08 -Region = NTSC-U -Compat = 4 ---------------------------------------------- -Serial = SLUS-21639 -Name = NASCAR '08 -Region = NTSC-U -Compat = 3 +Serial = SLES-50935 +Name = Circus Maximus - Chariot Wars +Region = PAL-E --------------------------------------------- -Serial = SLUS-21640 -Name = Rugby '08 -Region = NTSC-U -Compat = 3 +Serial = SLES-50936 +Name = Endgame +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21641 -Name = Innocent Life - Harvest Moon - Pure -Region = NTSC-U -Compat = 5 +Serial = SLES-50937 +Name = LEGO Football Mania +Region = PAL-M8 --------------------------------------------- -Serial = SLUS-21642 -Name = Sonic Riders - Zero Gravity -Region = NTSC-U -Compat = 5 +Serial = SLES-50939 +Name = USA Racer +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21643 -Name = Bratz - The Movie -Region = NTSC-U +Serial = SLES-50946 +Name = Britney's Dance Beat +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21644 -Name = SpongeBob's Atlantis SquarePantis -Region = NTSC-U -Compat = 4 +Serial = SLES-50947 +Name = Britney's Dance Beat +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21645 -Name = WWE SmackDown! vs. Raw 2008 -Region = NTSC-U -Compat = 5 +Serial = SLES-50948 +Name = Britney's Dance Beat +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21646 -Name = Tiger Woods PGA Tour '08 -Region = NTSC-U -Compat = 2 +Serial = SLES-50953 +Name = Air Rescue Ranger +Region = PAL-E --------------------------------------------- -Serial = SLUS-21647 -Name = NHL '08 -Region = NTSC-U -Compat = 4 +Serial = SLES-50954 +Name = Tokyo Road Race +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-21648 -Name = FIFA Soccer '08 -Region = NTSC-U +Serial = SLES-50955 +Name = London Racer 2 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21649 -Name = NBA Live '08 -Region = NTSC-U +Serial = SLES-50958 +Name = Warhammer 40,000 - Firewarrior +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21650 -Name = Mercenaries 2 - World in Flames -Region = NTSC-U -Compat = 5 -EETimingHack = 1 //flickery textures +Serial = SLES-50963 +Name = Riding Spirits +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21651 -Name = Noddy and the Magic Book -Region = NTSC-U +Serial = SLES-50964 +Name = Antz Extreme Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21652 -Name = Guilty Gear XX - Accent Core -Region = NTSC-U -Compat = 5 +Serial = SLES-50965 +Name = Spider-Man +Region = PAL-S --------------------------------------------- -Serial = SLUS-21653 -Name = Kiki Kai Kai -Region = NTSC-U +Serial = SLES-50972 +Name = Barbarian +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21654 -Name = Kane & Lynch - Dead Men Sneak Preview -Region = NTSC-U +Serial = SLES-50974 +Name = Zapper - One Wicked Cricket! +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21655 -Name = CSI 3 - Dimensions of Murder -Region = NTSC-U +Serial = SLES-50975 +Name = Thing, The +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21656 -Name = World Superbikes '07 -Region = NTSC-U +Serial = SLES-50976 +Name = Thing, The (Das Ding) +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLUS-21658 -Name = Need for Speed - ProStreet -Region = NTSC-U +Serial = SLES-50978 +Name = Onimusha 2 - Samurai's Destiny +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21660 -Name = Disney Princess - Enchanted Journey -Region = NTSC-U -Compat = 4 +Serial = SLES-50981 +Name = RC Sports Copter Challenge +Region = PAL-E --------------------------------------------- -Serial = SLUS-21661 -Name = Ben 10: Protector of Earth -Region = NTSC-U +Serial = SLES-50984 +Name = Gumball 3000 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21662 -Name = Warriors Orochi -Region = NTSC-U +Serial = SLES-50985 +Name = Gumball 3000 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21663 -Name = Cocoto - Fishing Master -Region = NTSC-U +Serial = SLES-50986 +Name = Twin Caliber +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21664 -Name = Sims 2, The - Castaway -Region = NTSC-U -Compat = 5 +Serial = SLES-50987 +Name = Scorpion King, The - Rise of an Akkadian +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21665 -Name = Simpsons Game, The -Region = NTSC-U -Compat = 5 +Serial = SLES-50988 +Name = Lord of the Rings, The - The Fellowship of the Ring (Der Herr der Ringe - Die Gefahrten) +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21666 -Name = Mountain Bike Adrenaline -Region = NTSC-U +Serial = SLES-50992 +Name = Hitman 2 - Silent Assassin +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21668 -Name = George of the Jungle -Region = NTSC-U +Serial = SLES-50994 +Name = Paris-Marseille Racing II +Region = PAL-F --------------------------------------------- -Serial = SLUS-21669 -Name = NBA 2K8 -Region = NTSC-U +Serial = SLES-50995 +Name = Fireblade +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-50997 +Name = Rally Fusion - Race of Champions +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-50998 +Name = Xtreme Express - World Grand Prix +Region = PAL-E --------------------------------------------- -Serial = SLUS-21670 -Name = Backyard Football 2008 -Region = NTSC-U -Compat = 5 +Serial = SLES-50999 +Name = UFC Throwdown +Region = PAL-E --------------------------------------------- -Serial = SLUS-21671 -Name = MLB Power Pros -Region = NTSC-U +Serial = SLES-51009 +Name = Autobahn Raser IV +Region = PAL-G --------------------------------------------- -Serial = SLUS-21672 -Name = Guitar Hero III - Legends of Rock -Region = NTSC-U +Serial = SLES-51011 +Name = Knight Rider - The Game +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21673 -Name = College Hoops 2K8 -Region = NTSC-U +Serial = SLES-51013 +Name = Blade 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21674 -Name = Petz - Dogz 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-51014 +Name = Blade 2 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21675 -Name = Petz - Catz 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-51017 +Name = Scooby-Doo! and The Night of 100 Frights +Region = PAL-E --------------------------------------------- -Serial = SLUS-21676 -Name = Dancing with the Stars -Region = NTSC-U -Compat = 5 +Serial = SLES-51018 +Name = Scooby-Doo! and The Night of 100 Frights +Region = PAL-F --------------------------------------------- -Serial = SLUS-21677 -Name = Golden Compass, The -Region = NTSC-U -Compat = 4 +Serial = SLES-51019 +Name = Scooby-Doo! and The Night of 100 Frights +Region = PAL-G --------------------------------------------- -Serial = SLUS-21678 -Name = DragonBall Z - Budokai Tenkaichi 3 -Region = NTSC-U -Compat = 5 +Serial = SLES-51022 +Name = Virtual Racer - Jaques Villeneuve +Region = PAL-E-F --------------------------------------------- -Serial = SLUS-21679 -Name = Power Rangers - Super Legends -Region = NTSC-U +Serial = SLES-51023 +Name = LMA Manager 2003 +Region = PAL-E Compat = 5 +[patches = 5C313124] + comment=patches by Shadow Lady + //IPU menus + patch=0,EE,002328a8,word,00000000 + patch=0,EE,00338570,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-21680 -Name = Harvey Birdman - Attorney at Law -Region = NTSC-U +Serial = SLES-51025 +Name = BDFL Manager 2003 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21681 -Name = Boogie -Region = NTSC-U -Compat = 3 +Serial = SLES-51038 +Name = MX Superfly featuring Ricky Carmichael +Region = PAL-E --------------------------------------------- -Serial = SLUS-21682 -Name = Rock Band -Region = NTSC-U -Compat = 2 +Serial = SLES-51042 +Name = Disney Golf +Region = PAL-E --------------------------------------------- -Serial = SLUS-21683 -Name = Yu-Gi-Oh! The Beginning of Destiny -Region = NTSC-U +Serial = SLES-51043 +Name = Spyro - Enter the Dragonfly +Region = PAL-M6 Compat = 5 +[patches = 0EF1D4BA] + comment=Spyro PAL startup fix + patch=1,EE,001E763C,word,24020001 +[/patches] --------------------------------------------- -Serial = SLUS-21684 -Name = Barbie as The Island Princess -Region = NTSC-U -Compat = 4 +Serial = SLES-51044 +Name = Burnout 2 - Point of Impact +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-21685 -Name = Pro Evolution Soccer 2008 -Region = NTSC-U +Serial = SLES-51045 +Name = Legends of Wrestling II +Region = PAL-E --------------------------------------------- -Serial = SLUS-21686 -Name = World Series of Poker 2008 - Battle for the Bracelets -Region = NTSC-U -Compat = 5 +Serial = SLES-51046 +Name = State of Emergency +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21687 -Name = King of Fighters XI, The -Region = NTSC-U -Compat = 5 +Serial = SLES-51053 +Name = Tom & Jerry's War of the Wiskers +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21688 -Name = MotoGP '07 -Region = NTSC-U +Serial = SLES-51054 +Name = Midnight Club 2 +Region = PAL-M5 // Voices and Movies are in English. Compat = 5 --------------------------------------------- -Serial = SLUS-21689 -Name = Petz - Horsez 2 -Region = NTSC-U -Compat = 2 +Serial = SLES-51055 +Name = Go Go Golf +Region = PAL-E --------------------------------------------- -Serial = SLUS-21690 -Name = Alone in the Dark -Region = NTSC-U +Serial = SLES-51056 +Name = Fighting Fury +Region = PAL-E Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21691 -Name = Swashbucklers - Blue vs. Grey -Region = NTSC-U -Compat = 5 +Serial = SLES-51057 +Name = Hard Hitter 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21692 -Name = Puzzle Quest - Challenge of the Warlords -Region = NTSC-U -Compat = 4 +Serial = SLES-51058 +Name = Maken Shao - Demon Sword +Region = PAL-E --------------------------------------------- -Serial = SLUS-21693 -Name = 7 Wonders of the Ancient World -Region = NTSC-U +Serial = SLES-51060 +Name = Butt Ugly Martians +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51061 +Name = Grand Theft Auto - Vice City +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21694 -Name = Final Fantasy XI - Wings of the Goddess -Region = NTSC-U +Serial = SLES-51064 +Name = Gladius +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21697 -Name = Iridium Runners -Region = NTSC-U -Compat = 3 +Serial = SLES-51065 +Name = Gladius +Region = PAL-F --------------------------------------------- -Serial = SLUS-21698 -Name = NCAA March Madness '08 -Region = NTSC-U +Serial = SLES-51066 +Name = Gladius +Region = PAL-G --------------------------------------------- -Serial = SLUS-21699 -Name = UEFA Euro 2008 -Region = NTSC-U -Compat = 4 +Serial = SLES-51069 +Name = RTX - Red Rock +Region = PAL-E --------------------------------------------- -Serial = SLUS-21701 -Name = MX vs. ATV - Untamed -Region = NTSC-U -Compat = 5 +Serial = SLES-51070 +Name = RTX Red Rock +Region = PAL-F --------------------------------------------- -Serial = SLUS-21702 -Name = Fire Pro Wrestling - Returns -Region = NTSC-U +Serial = SLES-51071 +Name = RTX - Red Rock +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21703 -Name = Luxor - Pharaoh's Challenge -Region = NTSC-U -Compat = 5 +Serial = SLES-51072 +Name = RTX - Red Rock +Region = PAL-I --------------------------------------------- -Serial = SLUS-21704 -Name = Final Fantasy XI - Vana'diel Collection 2008 -Region = NTSC-U -Compat = 2 +Serial = SLES-51073 +Name = RTX Red Rock +Region = PAL-S --------------------------------------------- -Serial = SLUS-21706 -Name = Alvin and the Chipmunks -Region = NTSC-U -Compat = 5 +Serial = SLES-51076 +Name = Liverpool FC - Club Football +Region = PAL-E --------------------------------------------- -Serial = SLUS-21707 -Name = Godzilla Unleashed -Region = NTSC-U +Serial = SLES-51077 +Name = Club Football Real Madrid +Region = PAL-M6 +--------------------------------------------- +Serial = SLES-51078 +Name = FC Barcelona - Club Football +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21708 -Name = NeoGeo Battle Coliseum -Region = NTSC-U +Serial = SLES-51079 +Name = Ajax Club Football +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21709 -Name = Obscure - The Aftermath -Region = NTSC-U -Compat = 5 -EETimingHack = 1 //For stripes on FMVs and crashes on scenes. +Serial = SLES-51080 +Name = AC Milan Club Football +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21710 -Name = PopCap Hits Volume 1 -Region = NTSC-U -Compat = 5 +Serial = SLES-51081 +Name = Club Football - Juventus 2003-2004 Season +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21711 -Name = Biathlon 2008 -Region = NTSC-U +Serial = SLES-51082 +Name = Hamburger SV Club Football - Saison 2003-2004 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21712 -Name = History Channel - Battle for the Pacific -Region = NTSC-U -Compat = 4 +Serial = SLES-51083 +Name = Borussia Dortmund Club Football - Saison 2003-2004 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21714 -Name = Baroque -Region = NTSC-U -Compat = 5 +Serial = SLES-51084 +Name = BDFL Manager 2004 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21715 -Name = Cabela's Moster Bass -Region = NTSC-U -Compat = 4 +Serial = SLES-51085 +Name = Aston Villa - Club Football +Region = PAL-E --------------------------------------------- -Serial = SLUS-21716 -Name = Spiderwick Chronicles, The -Region = NTSC-U -Compat = 5 +Serial = SLES-51086 +Name = Club Football - Chelsea +Region = PAL-E --------------------------------------------- -Serial = SLUS-21717 -Name = Dora the Explorer - Dora Saves the Mermaids -Region = NTSC-U +Serial = SLES-51087 +Name = Leeds United - Club Football +Region = PAL-E --------------------------------------------- -Serial = SLUS-21718 -Name = Go Diego Go - Safari Rescue -Region = NTSC-U +Serial = SLES-51088 +Name = Club Football - Rangers +Region = PAL-E --------------------------------------------- -Serial = SLUS-21719 -Name = Karaoke Revolution Presents - American Idol Encore -Region = NTSC-U +Serial = SLES-51089 +Name = Club Football - Arsenal +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21720 -Name = Arcana Heart -Region = NTSC-U -Compat = 5 +Serial = SLES-51090 +Name = Club Football - Manchester United +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21721 -Name = Nobunaga's Ambition - Rise to Power -Region = NTSC-U +Serial = SLES-51093 +Name = Largo Winch - Empire Under Threat +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21722 -Name = Chaos Wars -Region = NTSC-U -Compat = 5 +Serial = SLES-51094 +Name = FC Internazionale - Club Football +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21723 -Name = Fatal Fury Battle Archives Vol.2 -Region = NTSC-U -Compat = 5 +Serial = SLES-51095 +Name = Dino Stalker +Region = PAL-F --------------------------------------------- -Serial = SLUS-21724 -Name = SNK Arcade Classics Volume 1 -Region = NTSC-U +Serial = SLES-51096 +Name = Dino Stalker +Region = PAL-G --------------------------------------------- -Serial = SLUS-21725 -Name = World Heroes Anthology -Region = NTSC-U +Serial = SLES-51100 +Name = Club Football - Liverpool - 2003-2004 Season +Region = PAL-Unk +--------------------------------------------- +Serial = SLES-51101 +Name = Eggo Mania +Region = PAL-M3 Compat = 5 +[patches = 30b27954] + + comment= patches by Nachbrenner + //skip IPU synchronisation + patch=0,EE,00111100,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-21726 -Name = Samurai Warriors 2 - Xtreme Legends -Region = NTSC-U -Compat = 4 +Serial = SLES-51108 +Name = Hitman 2 - Silent Assassin +Region = PAL-F --------------------------------------------- -Serial = SLUS-21727 -Name = Naruto - Ultimate Ninja 3 -Region = NTSC-U +Serial = SLES-51109 +Name = Hitman 2 - Silent Assassin +Region = PAL-G --------------------------------------------- -Serial = SLUS-21728 -Name = Crash - Mind Over Mutant -Region = NTSC-U +Serial = SLES-51113 +Name = Zone of the Enders: The 2nd Runner Special Edition +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21729 -Name = Major League Baseball 2K8 -Region = NTSC-U +Serial = SLES-51114 +Name = Pro Evolution Soccer 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21730 -Name = Jumper -Region = NTSC-U +Serial = SLES-51117 +Name = Colin McRae Rally 3 +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51118 +Name = Wizardry - Tales of the Forsaken Land +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21731 -Name = Silent Hill - Origins -Region = NTSC-U +Serial = SLES-51124 +Name = Turok Evolution +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21732 -Name = El Tigre - The Adventures of Manny Rivera -Region = NTSC-U +Serial = SLES-51125 +Name = Sega Soccer Slam +Region = PAL-E --------------------------------------------- -Serial = SLUS-21733 -Name = Sega Superstars Tennis -Region = NTSC-U +Serial = SLES-51126 +Name = Whirl Tour +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21734 -Name = Falling Stars -Region = NTSC-U +Serial = SLES-51128 +Name = Total Immersion Racing +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21735 -Name = Mana Khemia - Alchemists of Al-Revis -Region = NTSC-U +Serial = SLES-51130 +Name = Tony Hawk's Pro Skater 4 +Region = PAL-E Compat = 5 -DMABusyHack = 1 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-21736 -Name = Wall-E -Region = NTSC-U -Compat = 4 +Serial = SLES-51132 +Name = Tony Hawk's Pro Skater 4 +Region = PAL-G +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-21737 -Name = Riding Star -Region = NTSC-U +Serial = SLES-51133 +Name = Red Faction 2 +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21738 -Name = Nitro Bike -Region = NTSC-U +Serial = SLES-51134 +Name = Powerpuff Girls - Relish Rampage +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21739 -Name = Iron Man -Region = NTSC-U +Serial = SLES-51141 +Name = Summoner 2 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21740 -Name = Guitar Hero - Aerosmith -Region = NTSC-U +Serial = SLES-51142 +Name = Summoner 2 +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21741 -Name = Sea Monsters - A Prehistoric Adventure -Region = NTSC-U +Serial = SLES-51143 +Name = Summoner 2 +Region = PAL-F --------------------------------------------- -Serial = SLUS-21742 -Name = Women's Volleyball Championship -Region = NTSC-U +Serial = SLES-51144 +Name = Shox - Rally Reinvented +Region = PAL-M7 Compat = 5 --------------------------------------------- -Serial = SLUS-21743 -Name = Code Lyoko - Quest for Infinity -Region = NTSC-U -Compat = 4 +Serial = SLES-51145 +Name = Monopoly Party +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21744 -Name = NASCAR '09 -Region = NTSC-U -Compat = 3 +Serial = SLES-51150 +Name = Scrabble Interactive - 2003 Edition +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21746 -Name = Call Of Duty - World At War - Final Fronts -Region = NTSC-U +Serial = SLES-51151 +Name = NHL 2003 +Region = PAL-M6 +vuClampMode = 2 +--------------------------------------------- +Serial = SLES-51153 +Name = LEGO Island - Extreme Stunts +Region = PAL-M8 +--------------------------------------------- +Serial = SLES-51154 +Name = Madden NFL 2003 +Region = PAL-E +--------------------------------------------- +Serial = SLES-51156 +Name = Silent Hill 2 - Director's Cut +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21748 -Name = MLB Power Pros 2008 -Region = NTSC-U +Serial = SLES-51157 +Name = Silent Scope 3 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21750 -Name = Hannah Montana - Spotlight World Tour -Region = NTSC-U +Serial = SLES-51160 +Name = Sub Rebellion +Region = PAL-E --------------------------------------------- -Serial = SLUS-21751 -Name = Backyard Football 2009 -Region = NTSC-U -Compat = 5 +Serial = SLES-51162 +Name = Metropolismania +Region = PAL-E --------------------------------------------- -Serial = SLUS-21752 -Name = NCAA Football '09 -Region = NTSC-U +Serial = SLES-51168 +Name = AFL Live 2004 - Aussie Rules Football +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21753 -Name = Monopoly -Region = NTSC-U -Compat = 2 ---------------------------------------------- -Serial = SLUS-21754 -Name = CID the Dummy -Region = NTSC-U +Serial = SLES-51174 +Name = Marvel vs. Capcom 2 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21755 -Name = Are You Smarter Than A 5th Grader - Make The Grade -Region = NTSC-U +Serial = SLES-51180 +Name = Tom Clancy's The Sum of All Fears +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21756 -Name = Chronicles of Narnia, The - Prince Caspian -Region = NTSC-U -Compat = 5 +Serial = SLES-51181 +Name = Tom Clancy's Ghost Recon +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21757 -Name = Kung Fu Panda -Region = NTSC-U -Compat = 4 +Serial = SLES-51182 +Name = Tom Clancy's Ghost Recon +Region = PAL-G --------------------------------------------- -Serial = SLUS-21758 -Name = Rock Band - Track Pack Vol.1 -Region = NTSC-U -Compat = 3 +Serial = SLES-51188 +Name = Rocket Power - Beach Bandits +Region = PAL-E --------------------------------------------- -Serial = SLUS-21759 -Name = LEGO Indiana Jones - The Original Adventures -Region = NTSC-U +Serial = SLES-51189 +Name = MTV's Celebrity Deathmatch +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21760 -Name = Jeep Thrills -Region = NTSC-U +Serial = SLES-51191 +Name = Auto Modellista +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21761 -Name = B-Boy -Region = NTSC-U -Compat = 5 +Serial = SLES-51192 +Name = Harry Potter and the Chamber of Secrets +Region = PAL-E +Compat = 3 --------------------------------------------- -Serial = SLUS-21763 -Name = NHL 2K9 -Region = NTSC-U -Compat = 2 +Serial = SLES-51194 +Name = Harry Potter - Kammer D Schreckens +Region = PAL-G --------------------------------------------- -Serial = SLUS-21764 -Name = Cake Mania - Baker's Challenge -Region = NTSC-U -Compat = 5 +Serial = SLES-51195 +Name = Harry Potter y La Camara Secreta +Region = PAL-S --------------------------------------------- -Serial = SLUS-21765 -Name = Incredible Hulk, The -Region = NTSC-U -Compat = 1 +Serial = SLES-51196 +Name = Harry Potter e La Camera dei Secreti +Region = PAL-I --------------------------------------------- -Serial = SLUS-21766 -Name = Pipemania -Region = NTSC-U +Serial = SLES-51197 +Name = FIFA 2003 +Region = PAL-M7 Compat = 5 +vuClampMode = 2 //missing geometry with microVU --------------------------------------------- -Serial = SLUS-21767 -Name = Dance Dance Revolution X -Region = NTSC-U -Compat = 5 +Serial = SLES-51198 +Name = NBA Live 2003 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21768 -Name = PopCap Hits Vol.2 -Region = NTSC-U -Compat = 5 +Serial = SLES-51199 +Name = 4x4 Evolution II +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21769 -Name = Yakuza 2 -Region = NTSC-U -Compat = 5 +Serial = SLES-51200 +Name = Kelly Slater's Pro Surfer +Region = PAL-E --------------------------------------------- -Serial = SLUS-21770 -Name = Madden NFL '09 -Region = NTSC-U -Compat = 4 +Serial = SLES-51201 +Name = Kelly Slater's Pro Surfer +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21771 -Name = NHL 2009 -Region = NTSC-U -Compat = 4 +Serial = SLES-51202 +Name = Wreckless - The Yakuza Missions +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21772 -Name = Tiger Woods PGA Tour '09 -Region = NTSC-U -Compat = 4 +Serial = SLES-51203 +Name = Enter the Matrix +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21773 -Name = PDC World Championship Darts 2008 -Region = NTSC-U +Serial = SLES-51208 +Name = Rocky +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21774 -Name = Dynasty Warriors 6 -Region = NTSC-U +Serial = SLES-51209 +Name = Haven - Call of the King +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21775 -Name = Mummy, The - Tomb of the Dragon Emperor -Region = NTSC-U +Serial = SLES-51214 +Name = 18 Wheeler - American Pro Trucker +Region = PAL-Unk +--------------------------------------------- +Serial = SLES-51220 +Name = Ty - The Tazmanian Tiger +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21776 -Name = Fifa 2009 -Region = NTSC-U -Compat = 4 +Serial = SLES-51222 +Name = Rayman 3 - Hoodlum Havoc +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21778 -Name = Dokapon Kingdom -Region = NTSC-U +Serial = SLES-51223 +Name = Runabout 3 - Neo Age +Region = PAL-E --------------------------------------------- -Serial = SLUS-21779 -Name = Eternal Poison -Region = NTSC-U +Serial = SLES-51226 +Name = Twin Caliber +Region = PAL-M5 Compat = 5 -eeClampMode = 0 //in-game background visible --------------------------------------------- -Serial = SLUS-21780 -Name = Ferrari Challenge -Region = NTSC-U +Serial = SLES-51227 +Name = Tomb Raider - Angel of Darkness // aka "TRAOD" +Region = PAL-M10 Compat = 5 +//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang +[patches] + comment=- This gamedisc supports multiple languages and widescreen. + comment=- Language & widescreen selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". + comment=- Full boot is recommended anyway for this gamedisc to avoid textproblems. +[/patches] --------------------------------------------- -Serial = SLUS-21781 -Name = Guitar Hero - World Tour -Region = NTSC-U +Serial = SLES-51229 +Name = Virtua Cop - Elite Edition +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21782 -Name = Shin Megami Tensei: Persona 4 -Region = NTSC-U -Compat = 5 -VuClipFlagHack = 1 +Serial = SLES-51230 +Name = Minority Report +Region = PAL-E --------------------------------------------- -Serial = SLUS-21782B -Name = Shin Megami Tensei: Persona 4 -Region = NTSC-U +Serial = SLES-51232 +Name = Virtua Tennis 2 +Region = PAL-M4 Compat = 5 -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLUS-21783 -Name = Space Chimps -Region = NTSC-U +Serial = SLES-51233 +Name = DragonBall Z - Budokai +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21785 -Name = LEGO Batman -Region = NTSC-U +Serial = SLES-51235 +Name = Raging Blades +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21787 -Name = TNA iMPACT! -Region = NTSC-U +Serial = SLES-51236 +Name = Gungrave +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-51244 +Name = XIII +Region = PAL-M5 Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLUS-21788 -Name = Ar tonelico II: Melody Of Metafalica -Region = NTSC-U +Serial = SLES-51247 +Name = Inspector Gadget - Mad Robots Invasion +Region = PAL-M6 Compat = 5 -eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLUS-21789 -Name = Cabela's Legendary Adventures -Region = NTSC-U -Compat = 4 +Serial = SLES-51249 +Name = Castleween +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-21790 -Name = Shrek's Carnival Craze -Region = NTSC-U -Compat = 4 +Serial = SLES-51250 +Name = Shox - Rally Reinvented +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-21793 -Name = DT Carnage -Region = NTSC-U -Compat = 2 +Serial = SLES-51251 +Name = Shox - Rally Reinvented +Region = PAL-E --------------------------------------------- -Serial = SLUS-21794 -Name = Go, Diego, Go!: Great Dinosaur Rescue -Region = NTSC-U +Serial = SLES-51252 +Name = Lord of the Rings, The - The Two Towers +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLUS-21795 -Name = Totally Spies! Totally Party -Region = NTSC-U +Serial = SLES-51253 +Name = Lord of the Rings, The - The Two Towers (Seigneur des Anneaux - Les Deux Tours) +Region = PAL-F --------------------------------------------- -Serial = SLUS-21797 -Name = Tak - Guardians Of Gross -Region = NTSC-U -Compat = 4 +Serial = SLES-51254 +Name = Lord of the Rings, The - The Two Towers (Der Herr der Ringe - Die Zwei Turme) +Region = PAL-G --------------------------------------------- -Serial = SLUS-21798 -Name = Shepherd's Crossing -Region = NTSC-U -Compat = 5 +Serial = SLES-51255 +Name = Lord of the Rings, The - The Two Towers +Region = PAL-I --------------------------------------------- -Serial = SLUS-21799 -Name = Kingdom Hearts Re: Chain of Memories -Region = NTSC-U +Serial = SLES-51256 +Name = Lord of the Rings, The - The Two Towers (El Senor de Los Anillos - Las Dos Torres) +Region = PAL-S Compat = 5 --------------------------------------------- -Serial = SLUS-21800 -Name = Rock Band 2 -Region = NTSC-U +Serial = SLES-51257 +Name = Sims, The (Die Sims) +Region = PAL-G Compat = 3 --------------------------------------------- -Serial = SLUS-21801 -Name = Need For Speed - Undercover -Region = NTSC-U -Compat = 5 +Serial = SLES-51258 +Name = James Bond 007 - Nightfire +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21802 -Name = Naked Brothers Band - The Video Game -Region = NTSC-U +Serial = SLES-51260 +Name = James Bond 007 - Nightfire +Region = PAL-G-S Compat = 5 --------------------------------------------- -Serial = SLUS-21804 -Name = Avatar - The Last Airbender - Into The Inferno -Region = NTSC-U -Compat = 5 +Serial = SLES-51265 +Name = Dynasty Warriors Tactics +Region = PAL-E --------------------------------------------- -Serial = SLUS-21805 -Name = Hasbro Family Game Night -Region = NTSC-U -Compat = 5 +Serial = SLES-51266 +Name = Dynasty Tactics +Region = PAL-F --------------------------------------------- -Serial = SLUS-21806 -Name = Barbie Horse Adventures - Riding Camp -Region = NTSC-U +Serial = SLES-51267 +Name = Dynasty Tactics +Region = PAL-G --------------------------------------------- -Serial = SLUS-21807 -Name = Monster Jam - Urban Assault -Region = NTSC-U -Compat = 5 +Serial = SLES-51271 +Name = Mobile Suit Gundam - Federation vs. Zeon +Region = PAL-M5 // Voices are in English. --------------------------------------------- -Serial = SLUS-21808 -Name = Harry Potter and the Half-Blood Prince -Region = NTSC-U +Serial = SLES-51272 +Name = Wakeboarding Unleashed +Region = PAL-E --------------------------------------------- -Serial = SLUS-21809 -Name = Backyard Football 2009 -Region = NTSC-U -Compat = 5 +Serial = SLES-51273 +Name = Wakeboarding Unleashed +Region = PAL-F --------------------------------------------- -Serial = SLUS-21810 -Name = WWE SmackDown vs. Raw 2009 -Region = NTSC-U -Compat = 5 +Serial = SLES-51282 +Name = Tiger Woods PGA Tour 2003 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21811 -Name = MotoGP 08 -Region = NTSC-U -Compat = 5 +Serial = SLES-51283 +Name = WWE Smackdown! 4 - Shut Your Mouth +Region = PAL-E --------------------------------------------- -Serial = SLUS-21812 -Name = Speed Racer -Region = NTSC-U -Compat = 4 +Serial = SLES-51284 +Name = Contra - Shattered Soldier +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21813 -Name = James Bond 007 - Quantum Of Solace -Region = NTSC-U +Serial = SLES-51285 +Name = Spongebob Squarepants - Revenge of the Flying Dutchman +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21814 -Name = Disney - Think Fast -Region = NTSC-U -Compat = 2 ---------------------------------------------- -Serial = SLUS-21815 -Name = Ben 10: Alien Force -Region = NTSC-U +Serial = SLES-51286 +Name = X-Men 2 - Wolverine's Revenge +Region = PAL-E --------------------------------------------- -Serial = SLUS-21816 -Name = King Of Fighters 98 - Ultimate Match -Region = NTSC-U -Compat = 5 +Serial = SLES-51287 +Name = X-Men 2 - Wolverine's Revenge +Region = PAL-F --------------------------------------------- -Serial = SLUS-21817 -Name = SBK Superbike World Chamipionship -Region = NTSC-U +Serial = SLES-51289 +Name = Gunfighter 2 - Legend of Jesse James +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21818 -Name = Spongebob Squarepants Featuring Nicktoons - Globs Of Doom -Region = NTSC-U +Serial = SLES-51290 +Name = Sword of the Samurai +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21819 -Name = High School Musical 3 -Region = NTSC-U -Compat = 5 +Serial = SLES-51294 +Name = XIII +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21820 -Name = Legend Of Spyro - Dawn Of The Dragon -Region = NTSC-U +Serial = SLES-51296 +Name = Grand Prix Challenge +Region = PAL-M5 Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLUS-21821 -Name = Pro Evolution Soccer 2009 -Region = NTSC-U +Serial = SLES-51298 +Name = Jimmy Neutron - Boy Genius +Region = PAL-E --------------------------------------------- -Serial = SLUS-21822 -Name = Spiderman - Web Of Shadows -Region = NTSC-U -Compat = 5 -eeClampMode = 3 //connect hits, able to summon... etc... +Serial = SLES-51301 +Name = SOS - The Final Escape +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21825 -Name = Pro Bull - Riding Out Of The Chute -Region = NTSC-U +Serial = SLES-51302 +Name = Bomberman Kart +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21826 -Name = Disney - Sing It -Region = NTSC-U -Compat = 2 +Serial = SLES-51303 +Name = LEGO Dome Racers +Region = PAL-M8 --------------------------------------------- -Serial = SLUS-21827 -Name = PopStar Guitar -Region = NTSC-U +Serial = SLES-51307 +Name = Wild Arms 3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21830 -Name = Rock Band Track Pack - Volume 2 -Region = NTSC-U -Compat = 3 +Serial = SLES-51308 +Name = Reel Fishing 3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21831 -Name = Army Men - Soldiers Of Misfortune -Region = NTSC-U -Compat = 5 +Serial = SLES-51311 +Name = Rugrats Royal Ransom +Region = PAL-E --------------------------------------------- -Serial = SLUS-21834 -Name = Goosebumps Horrorland - Happy Halloween -Region = NTSC-U -Compat = 4 +Serial = SLES-51312 +Name = Rugrats Royal Ransom +Region = PAL-F --------------------------------------------- -Serial = SLUS-21835 -Name = History Channel - Civil War Secret Mission -Region = NTSC-U -Compat = 5 +Serial = SLES-51313 +Name = Activision Anthology +Region = PAL-E --------------------------------------------- -Serial = SLUS-21836 -Name = Secret Service - Ultimate Sacrifice -Region = NTSC-U +Serial = SLES-51315 +Name = Great Escape, The +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21838 -Name = Monster Lab -Region = NTSC-U -Compat = 5 +Serial = SLES-51316 +Name = Grand Theft Auto - Vice City +Region = PAL-E --------------------------------------------- -Serial = SLUS-21839 -Name = Ski and Shoot -Region = NTSC-U +Serial = SLES-51317 +Name = Minority Report +Region = PAL-F --------------------------------------------- -Serial = SLUS-21840 -Name = Madagascar - Escape 2 Africa -Region = NTSC-U -Compat = 2 +Serial = SLES-51318 +Name = Minority Report +Region = PAL-G --------------------------------------------- -Serial = SLUS-21841 -Name = Cabelas - Dangerous Hunts 2009 -Region = NTSC-U -Compat = 5 +Serial = SLES-51322 +Name = Robotech Battlecry +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21842 -Name = Dragonball Z Infinite World -Region = NTSC-U +Serial = SLES-51333 +Name = Dark Angel +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21843 -Name = Guitar Hero - Metallica -Region = NTSC-U -Compat = 5 +Serial = SLES-51339 +Name = NFL 2K3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21844 -Name = Bolt -Region = NTSC-U -Compat = 5 +Serial = SLES-51340 +Name = NBA 2K3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21845 -Name = Shin Megami Tensei: Devil Summoner 2: Raidou Kuzunoha vs. King Abaddon -Region = NTSC-U +Serial = SLES-51341 +Name = NHL 2K3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21846 -Name = Sonic Unleashed -Region = NTSC-U +Serial = SLES-51343 +Name = Galerians - Ash +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51344 +Name = Guilty Gear X2 +Region = PAL-E +--------------------------------------------- +Serial = SLES-51345 +Name = Run Like Hell +Region = PAL-M5 +[patches = 945301BE] + comment=swapping a COP2 op into place to make the flags work without delays + patch=0,EE,001D4534,word,4A0002FF + patch=0,EE,001D4544,word,4B07FA0B + + patch=0,EE,001D4720,word,4A0002FF + patch=0,EE,001D4730,word,4B07FA0B +[/patches] +--------------------------------------------- +Serial = SLES-51347 +Name = Die Hard - Vendetta +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21847 -Name = Guilty Gear XX - Accent Core Plus -Region = NTSC-U +Serial = SLES-51348 +Name = Die Hard - Vendetta +Region = PAL-E-G Compat = 5 --------------------------------------------- -Serial = SLUS-21848 -Name = Rock Band Track Pack - AC/DC Live -Region = NTSC-U -Compat = 3 +Serial = SLES-51349 +Name = Evolution Skateboarding +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21849 -Name = Winter Sports 2: The Next Challenge -Region = NTSC-U +Serial = SLES-51350 +Name = Ben Hur +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21850 -Name = Baja 1000 -Region = NTSC-U +Serial = SLES-51354 +Name = Jurassic Park - Operation Genesis +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21851 -Name = NCAA Basketball '09 -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21852 -Name = Tale Of Despereaux, The -Region = NTSC-U +Serial = SLES-51355 +Name = Big Mutha Truckers +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21853 -Name = Shaun White Snowboarding -Region = NTSC-U -Compat = 4 +Serial = SLES-51356 +Name = Road Trip Adventure +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLUS-21854 -Name = Coraline -Region = NTSC-U -Compat = 4 +Serial = SLES-51357 +Name = G1 Jockey 3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21855 -Name = NPPL Championship Paintball 2009 -Region = NTSC-U +Serial = SLES-51358 +Name = Mystic Heroes +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21857 -Name = Short Track Racing: Trading Paint -Region = NTSC-U +Serial = SLES-51360 +Name = Simpsons Skateboarding +Region = PAL-I --------------------------------------------- -Serial = SLUS-21858 -Name = Tomb Raider Underworld -Region = NTSC-U -Compat = 4 +Serial = SLES-51361 +Name = Simpsons Skateboarding +Region = PAL-S --------------------------------------------- -Serial = SLUS-21860 -Name = The Bigs 2 -Region = NTSC-U +Serial = SLES-51362 +Name = Simpsons Skateboarding +Region = PAL-G --------------------------------------------- -Serial = SLUS-21861 -Name = Disney Sing It! High School Musical 3: Senior Year -Region = NTSC-U +Serial = SLES-51363 +Name = Music 3000 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21862 -Name = Naruto Shippuden - Ultimate Ninja 4 -Region = NTSC-U -Compat = 5 +Serial = SLES-51365 +Name = BMX XXX +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21863 -Name = Suzuki TT Superbikes: Real Road Racing Championship -Region = NTSC-U +Serial = SLES-51371 +Name = Pride FC +Region = PAL-E --------------------------------------------- -Serial = SLUS-21864 -Name = Disney Pixar - Up -Region = NTSC-U +Serial = SLES-51372 +Name = Wallace & Gromit in Project Zoo +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLUS-21865 -Name = Guitar Hero 5 -Region = NTSC-U +Serial = SLES-51374 +Name = RoboCop +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21866 -Name = Guitar Hero - Smash Hits -Region = NTSC-U -Compat = 3 +Serial = SLES-51381 +Name = Everblue 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21867 -Name = Guitar Hero: Van Halen -Region = NTSC-U +Serial = SLES-51382 +Name = Shrek - Super Party +Region = PAL-E --------------------------------------------- -Serial = SLUS-21868 -Name = Nobunagas Ambition - Iron Triangle -Region = NTSC-U +Serial = SLES-51383 +Name = Beach King Stunt Racer +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21869 -Name = Trivial Pursuit -Region = NTSC-U +Serial = SLES-51385 +Name = Rugrats Rescate Real +Region = PAL-S --------------------------------------------- -Serial = SLUS-21870 -Name = Monsters VS Aliens -Region = NTSC-U -Compat = 4 +Serial = SLES-51387 +Name = World Racing +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21871 -Name = Major League Baseball 2K9 -Region = NTSC-U +Serial = SLES-51388 +Name = Sega Bass Fishing Duel +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21872 -Name = Pimp my Ride - Street Racing -Region = NTSC-U +Serial = SLES-51390 +Name = Fightbox +Region = PAL-E --------------------------------------------- -Serial = SLUS-21873 -Name = Dynasty Warriors - Gundam 2 -Region = NTSC-U +Serial = SLES-51391 +Name = RTL Skispringen 2003 +Region = PAL-E-G +--------------------------------------------- +Serial = SLES-51392 +Name = Evolution Snowboarding +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-51393 +Name = Syberia +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21874 -Name = Jelly Belly: Ballistic Beans -Region = NTSC-U +Serial = SLES-51397 +Name = IndyCar Series +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21875 -Name = M&Ms Adventure -Region = NTSC-U +Serial = SLES-51398 +Name = World Championship Snooker 2003 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21876 -Name = Rock Band Track Pack: Classic Rock -Region = NTSC-U -Compat = 3 +Serial = SLES-51399 +Name = Armored Core 3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21877 -Name = Tiger Woods PGA Tour 10 -Region = NTSC-U +Serial = SLES-51400 +Name = Tenchu - Wrath of Heaven +Region = PAL-S // Voices: English & Japanese (Videos) --------------------------------------------- -Serial = SLUS-21878 -Name = Ice Age 3 - Dawn of the Dinosaurs -Region = NTSC-U -Compat = 5 +Serial = SLES-51401 +Name = Tenchu - Wrath of Heaven +Region = PAL-I // Selection of Japanese Audio possible. --------------------------------------------- -Serial = SLUS-21879 -Name = Marvel - Ultimate Alliance 2 -Region = NTSC-U +Serial = SLES-51402 +Name = Tenchu - Wrath of Heaven +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLUS-21880 -Name = X-Men Origins - Wolverine -Region = NTSC-U +Serial = SLES-51403 +Name = Tenchu - Wrath of Heaven +Region = PAL-F // Voices: English & Japanese (Option menu) +--------------------------------------------- +Serial = SLES-51409 +Name = Frogger Beyond +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51418 +Name = Fisherman's Challenge +Region = PAL-M3 Compat = 5 -FpuCompareHack = 1 //flickering objects, sound loop --------------------------------------------- -Serial = SLUS-21881 -Name = Transformers: Revenge of the Fallen -Region = NTSC-U -Compat = 4 +Serial = SLES-51423 +Name = Celtic - Club Football +Region = PAL-E --------------------------------------------- -Serial = SLUS-21882 -Name = Ghostbusters -Region = NTSC-U +Serial = SLES-51433 +Name = Ghost Vibration +Region = PAL-E +--------------------------------------------- +Serial = SLES-51434 +Name = Silent Hill 3 +Region = PAL-M5 Compat = 5 +MemCardFilter = SLES-51434/SLES-50382/SLES-51156 --------------------------------------------- -Serial = SLUS-21883 -Name = Cars Race-O-Rama -Region = NTSC-U +Serial = SLES-51435 +Name = International Superstar Soccer 3 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21884 -Name = Backyard Baseball '10 -Region = NTSC-U +Serial = SLES-51436 +Name = Chessmaster 9000 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21885 -Name = Indiana Jones and the Staff of Kings -Region = NTSC-U +Serial = SLES-51439 +Name = Mortal Kombat - Deadly Alliance +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21886 -Name = G.I. Joe: The Rise of Cobra -Region = NTSC-U -Compat = 5 +Serial = SLES-51441 +Name = Dynasty Warriors 3 - Extreme Legends +Region = PAL-E --------------------------------------------- -Serial = SLUS-21888 -Name = Rock Band Country Track Pack -Region = NTSC-U -Compat = 3 +Serial = SLES-51442 +Name = Dynasty Warriors 3 - Xtreme Legends +Region = PAL-F --------------------------------------------- -Serial = SLUS-21889 -Name = Rock Band Metal Track Pack -Region = NTSC-U +Serial = SLES-51443 +Name = Dynasty Warriors 3 - Xtreme Legends +Region = PAL-G --------------------------------------------- -Serial = SLUS-21890 -Name = Mana Khemia 2 : Fall Of Alchemy -Region = NTSC-U +Serial = SLES-51445 +Name = Rygar - The Legendary Adventure +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51448 +Name = Resident Evil - Dead Aim +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21891 -Name = G-Force -Region = NTSC-U +Serial = SLES-51449 +Name = Return to Castle Wolfenstein - Operation Resurrection +Region = PAL-E --------------------------------------------- -Serial = SLUS-21892 -Name = NCAA Football 10 -Region = NTSC-U +Serial = SLES-51451 +Name = Whiteout +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21893 -Name = Madden NFL 10 -Region = NTSC-U +Serial = SLES-51456 +Name = LMA Manager 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-21895 -Name = Astro Boy: The Video Game -Region = NTSC-U +Serial = SLES-51458 +Name = BDFL Manager 2004 +Region = PAL-G --------------------------------------------- -Serial = SLUS-21896 -Name = The Secret Saturdays: Beasts of the 5th Sun -Region = NTSC-U -Compat = 5 +Serial = SLES-51460 +Name = Football Manager 2004 +Region = PAL-I --------------------------------------------- -Serial = SLUS-21898 -Name = Band Hero -Region = NTSC-U +Serial = SLES-51462 +Name = Shrek Super Party +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-21899 -Name = Silent Hill - Shattered Memories -Region = NTSC-U +Serial = SLES-51466 +Name = Tom Clancy's Splinter Cell +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21900 -Name = Scooby-Doo! First Frights -Region = NTSC-U +Serial = SLES-51467 +Name = Freedom Fighters +Region = PAL-E --------------------------------------------- -Serial = SLUS-21901 -Name = WWE SmackDown vs. Raw 2010 -Region = NTSC-U -Compat = 5 +Serial = SLES-51469 +Name = Freedom Fighters +Region = PAL-G --------------------------------------------- -Serial = SLUS-21902 -Name = Bakugan: Battle Brawlers -Region = NTSC-U +Serial = SLES-51470 +Name = Freedom Fighters +Region = PAL-I --------------------------------------------- -Serial = SLUS-21904 -Name = Teenage Mutant Ninja Turtles: Smash-Up -Region = NTSC-U +Serial = SLES-51473 +Name = Kya - Dark Lineage +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21905 -Name = FIFA Soccer 10 -Region = NTSC-U +Serial = SLES-51474 +Name = Blood Rayne +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLUS-21906 -Name = Cabela's Outdoor - Adventures 2010 -Region = NTSC-U +Serial = SLES-51476 +Name = Mystic Heroes +Region = PAL-F --------------------------------------------- -Serial = SLUS-21907 -Name = Jurassic - The Hunted -Region = NTSC-U +Serial = SLES-51477 +Name = Mystic Heroes +Region = PAL-G --------------------------------------------- -Serial = SLUS-21908 -Name = NBA 2K10 -Region = NTSC-U +Serial = SLES-51479 +Name = Def Jam Vendetta +Region = PAL-E --------------------------------------------- -Serial = SLUS-21909 -Name = DJ Hero -Region = NTSC-U +Serial = SLES-51481 +Name = NBA Street 2 +Region = PAL-E-F +Compat = 5 +vuClampMode = 2 //missing environment with microVU --------------------------------------------- -Serial = SLUS-21910 -Name = Marvel Super Hero Squad -Region = NTSC-U +Serial = SLES-51482 +Name = Downtown Run +Region = PAL-M3 +Compat = 3 --------------------------------------------- -Serial = SLUS-21913 -Name = Star Wars The Clone Wars: Republic Heroes -Region = NTSC-U +Serial = SLES-51488 +Name = Tour de France, Le - Centenary Edition +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21914 -Name = NHL 2K10 -Region = NTSC-U -Compat = 2 +Serial = SLES-51492 +Name = Pro Beach Soccer +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21915 -Name = The Lord of the Rings: Aragorn's Quest -Region = NTSC-U +Serial = SLES-51493 +Name = Mr. Golf +Region = PAL-E +--------------------------------------------- +Serial = SLES-51495 +Name = SX Superstar +Region = PAL-M4 Compat = 5 +[patches = 96B76E56] + + comment=patches by Nachbrenner + + //fix IPU busy! + patch=0,EE,003300b0,word,03e00008 + patch=0,EE,003300b4,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLUS-21917 -Name = Dance Dance Revolution X2 (Bundle) -Region = NTSC-U +Serial = SLES-51496 +Name = Breath of Fire: Dragon Quarter +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21918 -Name = Pro Evolution Soccer 2010 -Region = NTSC-U -Compat = 5 +Serial = SLES-51503 +Name = Ace Lightning +Region = PAL-E --------------------------------------------- -Serial = SLUS-21919 -Name = Backyard Football 2010 -Region = NTSC-U +Serial = SLES-51504 +Name = Chessmaster +Region = PAL-F --------------------------------------------- -Serial = SLUS-21921 -Name = Ben 10: Alien Force - Vilgax Attacks -Region = NTSC-U -Compat = 5 +Serial = SLES-51507 +Name = Futurama +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21923 -Name = Dora the Explorer: Dora Saves the Crystal Kingdom -Region = NTSC-U +Serial = SLES-51508 +Name = Hulk, The +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21926 -Name = Ni Hao, Kai-Lan: Super Game Day -Region = NTSC-U +Serial = SLES-51509 +Name = World of Outlaws - Sprint Cars +Region = PAL-E --------------------------------------------- -Serial = SLUS-21927 -Name = Sakura Wars: So Long, My Love [English - Disc 1] -Region = NTSC-U +Serial = SLES-51510 +Name = Dancing Stage Fever MegaMix +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21928 -Name = Scooby-Doo! and the Spooky Swamp -Region = NTSC-U ---------------------------------------------- -Serial = SLUS-21929 -Name = Major League Baseball 2K10 -Region = NTSC-U +Serial = SLES-51511 +Name = Crash Nitro Kart +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-21930 -Name = Sakura Wars: So Long, My Love [Japanese - Disc 2] -Region = NTSC-U +Serial = SLES-51523 +Name = Conflict - Desert Storm II +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLUS-21931 -Name = Toy Story 3 -Region = NTSC-U +Serial = SLES-51525 +Name = Fallout - Brotherhood of Steel +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21932 -Name = NCAA Football 11 -Region = NTSC-U +Serial = SLES-51526 +Name = Fallout - Brotherhood of Steel +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21933 -Name = Despicable Me -Region = NTSC-U +Serial = SLES-51541 +Name = Grand Theft Auto - San Andreas +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-21934 -Name = Rapala Pro Bass Fishing 2010 -Region = NTSC-U +Serial = SLES-51547 +Name = Next Generation Tennis 2003 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21935 -Name = Cabela's North American Adventures -Region = NTSC-U +Serial = SLES-51548 +Name = This is Football +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-21936 -Name = NBA 2K11 -Region = NTSC-U -Compat = 5 +Serial = SLES-51553 +Name = Chaos Legion +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-21937 -Name = Madden NFL 11 -Region = NTSC-U +Serial = SLES-51554 +Name = Cell Damage Overdrive +Region = PAL-M5 Compat = 5 -vuClampMode = 3 //shows the crowd in the back --------------------------------------------- -Serial = SLUS-21938 -Name = Ben 10 Ultimate Alien: Cosmic Destruction -Region = NTSC-U +Serial = SLES-51555 +Name = Play It Pinball +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-21939 -Name = WWE SmackDown vs. Raw 2011 -Region = NTSC-U +Serial = SLES-51557 +Name = Broken Sword - The Sleeping Dragon +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLUS-21940 -Name = WWE All-Stars -Region = NTSC-U +Serial = SLES-51579 +Name = Yu-Gi-Oh! - The Duelists of the Roses +Region = PAL-E --------------------------------------------- -Serial = SLUS-21941 -Name = FIFA Soccer 11 -Region = NTSC-U +Serial = SLES-51580 +Name = London Racer World Challenge +Region = PAL-M4 +--------------------------------------------- +Serial = SLES-51581 +Name = Dead to Rights +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21942 -Name = Pro Evolution Soccer 2011 -Region = NTSC-U +Serial = SLES-51584 +Name = F1 Career Challenge +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLUS-21944 -Name = Dora's Big Birthday Adventure -Region = NTSC-U +Serial = SLES-51588 +Name = Evil Dead - A Fistful of Boomstick (with Bonus DVD Movie) +Region = PAL-E --------------------------------------------- -Serial = SLUS-21946 -Name = Madden NFL 12 -Region = NTSC-U -Compat = 5 +Serial = SLES-51589 +Name = Resident Evil - Outbreak +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-27029 -Name = Disney Sing It [Bundle] -Region = NTSC-U +Serial = SLES-51590 +Name = Cabela's Big Game Hunter +Region = PAL-E --------------------------------------------- -Serial = SLUS-27030 -Name = High School Musical 3: Senior Year DANCE! [w/Mat] -Region = NTSC-U +Serial = SLES-51594 +Name = Disney's Piglet's Big Game +Region = PAL-E --------------------------------------------- -Serial = SLUS-27034 -Name = Disney Sing It! High School Musical 3: Senior Year -Region = NTSC-U +Serial = SLES-51595 +Name = Grand Theft Auto - Vice City +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28002 -Name = Red Faction [Trade Demo] -Region = NTSC-U +Serial = SLES-51600 +Name = WWE Crush Hour +Region = PAL-E --------------------------------------------- -Serial = SLUS-28004 -Name = Klonoa 2 - Lunatea's Veil [Trade Demo] -Region = NTSC-U -eeClampMode = 3 //Objects needed appear in wrong places without it +Serial = SLES-51602 +Name = All-Stars Baseball 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-28006 -Name = Burnout [Trade Demo] -Region = NTSC-U +Serial = SLES-51603 +Name = Seek & Destroy +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28007 -Name = All-Star Baseball 2003 [Trade Demo] -Region = NTSC-U +Serial = SLES-51605 +Name = Motorsiege - Warriors of Prime Time +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28008 -Name = Sky Gunner [Trade Demo] -Region = NTSC-U +Serial = SLES-51606 +Name = Unlimited Saga +Region = PAL-E --------------------------------------------- -Serial = SLUS-28009 -Name = UFC - Throwdown [Trade Demo] -Region = NTSC-U +Serial = SLES-51615 +Name = King of Route 66, The +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28010 -Name = Star Wars - Jedi Starfighter [Trade Demo] -Region = NTSC-U +Serial = SLES-51616 +Name = Virtua Fighter 4 Evolution +Region = PAL-UM5 +Compat = 5 --------------------------------------------- -Serial = SLUS-28012 -Name = Tekken 4 [Trade Demo] -Region = NTSC-U +Serial = SLES-51617 +Name = Starsky & Hutch +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-28013 -Name = Dual Hearts [Trade Demo] -Region = NTSC-U +Serial = SLES-51618 +Name = Starsky & Hutch +Region = PAL-I-S --------------------------------------------- -Serial = SLUS-28014 -Name = Matt Hoffman's Pro BMX 2 [Trade Demo] -Region = NTSC-U +Serial = SLES-51619 +Name = Clock Tower 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-28015 -Name = Gun Grave [Trade Demo] -Region = NTSC-U +Serial = SLES-51620 +Name = Black and Bruised +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28016 -Name = Shinobi [Trade Demo] -Region = NTSC-U +Serial = SLES-51621 +Name = Dirt Track Devils +Region = PAL-E --------------------------------------------- -Serial = SLUS-28019 -Name = Haven - Call of the King [Trade Demo] -Region = NTSC-U +Serial = SLES-51622 +Name = Maxxed Out Racing +Region = PAL-E --------------------------------------------- -Serial = SLUS-28020 -Name = Everquest Online Adventures [Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51623 +Name = Sniper 2, The +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-28021 -Name = Everquest Online Adventures [Beta Vol.2.0] -Region = NTSC-U +Serial = SLES-51624 +Name = Eternal Quest +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-28023 -Name = dot Hack - Part 1 - Infection [Trade Demo] -Region = NTSC-U +Serial = SLES-51625 +Name = Ultimate Mindgames +Region = PAL-E --------------------------------------------- -Serial = SLUS-28025 -Name = Disaster Report [Trade Demo] -Region = NTSC-U +Serial = SLES-51629 +Name = International Pool Championship +Region = PAL-E --------------------------------------------- -Serial = SLUS-28026 -Name = Everquest Online Adventures [Beta Vol.3.0] -Region = NTSC-U +Serial = SLES-51630 +Name = Play It Chess Challenger +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-28027 -Name = Black & Bruised [Trade Demo] -Region = NTSC-U +Serial = SLES-51633 +Name = Racing Simulation 3 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28029 -Name = High Heat - Major League Baseball 2004 [Trade Demo] -Region = NTSC-U +Serial = SLES-51636 +Name = XGRA - Extreme G Racing Association +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28031 -Name = Auto Modellista - Public Beta Volume 2.0 -Region = NTSC-U +Serial = SLES-51646 +Name = Energy Airforce +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLUS-28032 -Name = dot Hack - Part 2 - Mutation [Trade Demo] -Region = NTSC-U +Serial = SLES-51649 +Name = Judge Dredd vs. Judge Death +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-28037 -Name = Kya - Dark Lineage [Trade Demo] -Region = NTSC-U +Serial = SLES-51650 +Name = Judge Dredd - Dredd vs. Death +Region = PAL-E-G --------------------------------------------- -Serial = SLUS-28039 -Name = Rogue Ops [Trade Demo] -Region = NTSC-U +Serial = SLES-51653 +Name = Mace Griffin - Bounty Hunter +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-28040 -Name = Transformers [Trade Demo] -Region = NTSC-U +Serial = SLES-51654 +Name = Mace Griffin - Bounty Hunter +Region = PAL-G --------------------------------------------- -Serial = SLUS-28043 -Name = Test Drive - Eve of Destruction [Trade Demo] -Region = NTSC-U +Serial = SLES-51658 +Name = Piglet's Big Game +Region = PAL-G --------------------------------------------- -Serial = SLUS-28044 -Name = ChoroQ [Trade Demo] -Region = NTSC-U +Serial = SLES-51659 +Name = Piglet's Big Game +Region = PAL-F --------------------------------------------- -Serial = SLUS-28045 -Name = Shin Megami Tensei: Nocturne [Trade Demo] -Region = NTSC-U -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level +Serial = SLES-51660 +Name = Risk - Global Domination +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-28046 -Name = Guilty Gear Isuka [Trade Demo] -Region = NTSC-U +Serial = SLES-51661 +Name = Dynasty Warriors 4 +Region = PAL-E --------------------------------------------- -Serial = SLUS-28049 -Name = Shin Megami Tensei: Digital Devil Saga [Trade Demo] -Region = NTSC-U -EETimingHack = 1 +Serial = SLES-51662 +Name = Dynasty Warriors 4 +Region = PAL-F --------------------------------------------- -Serial = SLUS-28050 -Name = Stella Deus: The Gate of Eternity [Trade Demo] -Region = NTSC-U +Serial = SLES-51663 +Name = Dynasty Warriors 4 +Region = PAL-G --------------------------------------------- -Serial = SLUS-28051 -Name = Samurai Western [Trade Demo] -Region = NTSC-U +Serial = SLES-51664 +Name = Dynasty Warriors 4 +Region = PAL-I --------------------------------------------- -Serial = SLUS-28053 -Name = Magna Carta [Trade Demo] -Region = NTSC-U +Serial = SLES-51665 +Name = Dynasty Warriors 4 +Region = PAL-S --------------------------------------------- -Serial = SLUS-28054 -Name = Combat Elite - WWII Paratroopers [Trade Demo] -Region = NTSC-U +Serial = SLES-51666 +Name = Piglet's Big Game +Region = PAL-S --------------------------------------------- -Serial = SLUS-28056 -Name = State of Emergency 2 [Trade Demo] -Region = NTSC-U +Serial = SLES-51667 +Name = Piglet's Big Game +Region = PAL-I --------------------------------------------- -Serial = SLUS-28061 -Name = Steambot Chronicles [Trade Demo] -Region = NTSC-U +Serial = SLES-51668 +Name = Piglet's Big Game +Region = PAL-DU --------------------------------------------- -Serial = SLUS-28062 -Name = Shin Megami Tensei: Digital Devil Saga 2 [Trade Demo] -Region = NTSC-U -EETimingHack = 1 +Serial = SLES-51670 +Name = Alter Echo +Region = PAL-E --------------------------------------------- -Serial = SLUS-28063 -Name = Rule of Rose [Trade Demo] -Region = NTSC-U +Serial = SLES-51671 +Name = Alter Echo +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-28064 -Name = Shin Megami Tensei - Devil Summoner [Trade Demo] -Region = NTSC-U +Serial = SLES-51675 +Name = Psyvariar +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-29001 -Name = ESPN Winter Games Snowboarding [Demo] -Region = NTSC-U +Serial = SLES-51678 +Name = Super Farm +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-29003 -Name = Metal Gear Solid 2 - Sons of Liberty [Demo] -Region = NTSC-U -Compat = 5 +Serial = SLES-51680 +Name = Splashdown 2 - Rides Gone Wild +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-29004 -Name = Unison & Dead or Alive 2 Hardcore [Demo] -Region = NTSC-U +Serial = SLES-51681 +Name = Splashdown 2 - Rides Gone Wild +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-29005 -Name = Red Faction [Regular Demo] -Region = NTSC-U +Serial = SLES-51682 +Name = Headhunter - Redemption +Region = PAL-E --------------------------------------------- -Serial = SLUS-29006 -Name = MX 2002 - featuring Ricky Carmichael [Demo] -Region = NTSC-U +Serial = SLES-51686 +Name = Pitfall - The Lost Expedition +Region = PAL-E +Compat = 4 --------------------------------------------- -Serial = SLUS-29008 -Name = ESPN X Games Skateboarding [Demo] -Region = NTSC-U +Serial = SLES-51687 +Name = Pitfall - The Lost Expedition +Region = PAL-F --------------------------------------------- -Serial = SLUS-29009 -Name = Devil May Cry [Demo] -Region = NTSC-U +Serial = SLES-51688 +Name = Pitfall - The Lost Expedition +Region = PAL-G --------------------------------------------- -Serial = SLUS-29010 -Name = Crash Bandicoot - The Wrath of Cortex [Demo] -Region = NTSC-U +Serial = SLES-51689 +Name = Pitfall - The Lost Expedition +Region = PAL-I --------------------------------------------- -Serial = SLUS-29011 -Name = WWF SmackDown! - Just Bring It [Demo] -Region = NTSC-U +Serial = SLES-51690 +Name = Pitfall - The Lost Expedition +Region = PAL-S --------------------------------------------- -Serial = SLUS-29012 -Name = Top Gun - Combat Zones [Demo] -Region = NTSC-U +Serial = SLES-51693 +Name = Suffering, The +Region = PAL-E-F-G --------------------------------------------- -Serial = SLUS-29013 -Name = Victorious Boxers - Ippo's Road to Glory [Demo] -Region = NTSC-U +Serial = SLES-51696 +Name = Dragon's Lair 3D - Special Edition +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29015 -Name = Dark Summit [Demo] -Region = NTSC-U +Serial = SLES-51697 +Name = SSX 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29016 -Name = ESPN International Winter Sports [Demo] -Region = NTSC-U +Serial = SLES-51698 +Name = Mobile Light Force 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29017 -Name = Airblade [Demo] -Region = NTSC-U +Serial = SLES-51699 +Name = Virtua Fighter - 10th Anniversary Edition +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29019 -Name = High Heat - Major League Baseball 2003 [Demo] -Region = NTSC-U +Serial = SLES-51702 +Name = Battlestar Galactica - Apostasy +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29020 -Name = Sky Gunner [Regular Demo] -Region = NTSC-U +Serial = SLES-51704 +Name = XII Stag +Region = PAL-E --------------------------------------------- -Serial = SLUS-29021 -Name = Aggressive Inline [Demo] -Region = NTSC-U +Serial = SLES-51705 +Name = Ford Racing 2 +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-51707 +Name = Secret Weapons Over Normandy +Region = PAL-E +--------------------------------------------- +Serial = SLES-51708 +Name = Secret Weapons over Normandy +Region = PAL-F --------------------------------------------- -Serial = SLUS-29022 -Name = UFC - Throwdown [Regular Demo] -Region = NTSC-U +Serial = SLES-51709 +Name = Secret Weapons over Normandy +Region = PAL-G --------------------------------------------- -Serial = SLUS-29025 -Name = R.A.D. - Robot Alchemic Drive [Demo] -Region = NTSC-U +Serial = SLES-51710 +Name = Secret Weapons over Normandy +Region = PAL-I --------------------------------------------- -Serial = SLUS-29026 -Name = MX Superfly [Demo] -Region = NTSC-U +Serial = SLES-51711 +Name = Secret Weapons over Normandy +Region = PAL-S --------------------------------------------- -Serial = SLUS-29027 -Name = Red Faction II [Demo] -Region = NTSC-U +Serial = SLES-51712 +Name = Snowboard Racer 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29029 -Name = Summoner 2 [Demo] -Region = NTSC-U +Serial = SLES-51713 +Name = Bust-A-Bloc +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29030 -Name = Fire Blade [Demo] -Region = NTSC-U +Serial = SLES-51714 +Name = BCV - Battle Construction Vehicles +Region = PAL-E --------------------------------------------- -Serial = SLUS-29032 -Name = Egg Mania - Eggstreme Madness [Demo] -Region = NTSC-U +Serial = SLES-51715 +Name = Seed, The - War Zone +Region = PAL-E --------------------------------------------- -Serial = SLUS-29033 -Name = Dual Hearts [Regular Demo] -Region = NTSC-U +Serial = SLES-51716 +Name = A-Train 6 +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-29034 -Name = Tekken 4 [Regular Demo] -Region = NTSC-U +Serial = SLES-51717 +Name = Boxing Champions +Region = PAL-E --------------------------------------------- -Serial = SLUS-29035 -Name = Eidos Demo Disc -Region = NTSC-U +Serial = SLES-51718 +Name = League Series Baseball 2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29036 -Name = Scorpion King, The - Rise of the Akkadian [Demo] -Region = NTSC-U +Serial = SLES-51720 +Name = Disney's Extreme Skate Adventure +Region = PAL-E +vuRoundMode = 0 --------------------------------------------- -Serial = SLUS-29037 -Name = Dance Dance Revolution Max [Demo] -Region = NTSC-U +Serial = SLES-51723 +Name = Hobbit, The +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29038 -Name = Haven - Call of the King [Regular Demo] -Region = NTSC-U +Serial = SLES-51731 +Name = Bust-A-Block +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-29040 -Name = Dr. Muto [Demo] -Region = NTSC-U +Serial = SLES-51732 +Name = EA Sports Rugby 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29042 -Name = dot Hack - Part 1 - Infection [Ragular Demo] -Region = NTSC-U +Serial = SLES-51733 +Name = EA SPORTS RUGBY 2004 +Region = PAL-F --------------------------------------------- -Serial = SLUS-29044 -Name = Pride FC - Fighting Championships [Demo] -Region = NTSC-U +Serial = SLES-51735 +Name = Perfect Ace - Pro Tournament Tennis +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29045 -Name = Black & Bruised [Regular Demo] -Region = NTSC-U +Serial = SLES-51741 +Name = 1945 I & II - The Arcade Games +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29047 -Name = Def Jam - Vendetta [Demo] -Region = NTSC-U +Serial = SLES-51746 +Name = Space Invaders - Invasion Day +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29048 -Name = Splinter Cell [Demo] -Region = NTSC-U +Serial = SLES-51749 +Name = Mark Davis Pro Bass Challenge +Region = PAL-E --------------------------------------------- -Serial = SLUS-29049 -Name = Warhammer 40,000 - Fire Warrior [Demo] -Region = NTSC-U +Serial = SLES-51750 +Name = Charlie's Angels +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLUS-29050 -Name = Everquest Online Adventures [Regular Demo] -Region = NTSC-U +Serial = SLES-51752 +Name = Tony Hawks Underground +Region = PAL-Unk +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-29053 -Name = NBA Street Vol.2 [Demo] -Region = NTSC-U +Serial = SLES-51753 +Name = True Crime - Streets of L.A. +Region = PAL-E --------------------------------------------- -Serial = SLUS-29054 -Name = Splashdown - Rides Gone Wild [Demo] -Region = NTSC-U +Serial = SLES-51754 +Name = True Crime - Streets of L.A. +Region = PAL-M5 +Compat = 3 --------------------------------------------- -Serial = SLUS-29055 -Name = dot Hack - Part 2 - Mutation [Regular Demo] -Region = NTSC-U +Serial = SLES-51755 +Name = Disney-Pixar's Finding Nemo +Region = PAL-E --------------------------------------------- -Serial = SLUS-29056 -Name = Alter Echo [Demo] -Region = NTSC-U +Serial = SLES-51756 +Name = Batman 2 - The Rise of Sin Tsu +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29057 -Name = Sphinx and the Shadow of Set [Demo] -Region = NTSC-U +Serial = SLES-51757 +Name = Dancing Stage Fever +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29058 -Name = Soul Calibur II [Demo] -Region = NTSC-U +Serial = SLES-51758 +Name = Metal Arms - Glitch in the System +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29059 -Name = Hunter the Reckoning - Wayward [Demo] -Region = NTSC-U +Serial = SLES-51759 +Name = Maximo vs. Army of Zin +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29060 -Name = Gladius [Demo] -Region = NTSC-U +Serial = SLES-51761 +Name = Italian Job, The - L.A. Heist +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29061 -Name = Freaky Flyers [Demo] -Region = NTSC-U +Serial = SLES-51765 +Name = Volleyball Xciting +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29063 -Name = Everquest Online Adventures - Frontiers [Public Beta Ver.1.0] -Region = NTSC-U +Serial = SLES-51766 +Name = Gladiator - Sword of Vengeance +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29065 -Name = dot Hack - Part 3 - Outbreak [Demo] -Region = NTSC-U +Serial = SLES-51772 +Name = Bad Boys II +Region = PAL-E --------------------------------------------- -Serial = SLUS-29067 -Name = Tak and the Power of Juju [Demo] -Region = NTSC-U +Serial = SLES-51778 +Name = Summer Heat Beach Volleyball +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29068 -Name = Crash Nitro Kart [Demo] -Region = NTSC-U +Serial = SLES-51782 +Name = Fire Warrior +Region = PAL-Unk --------------------------------------------- -Serial = SLUS-29069 -Name = Prince of Persia - The Sands of Time [Demo] -Region = NTSC-U +Serial = SLES-51783 +Name = Starsky & Hutch +Region = PAL-F-G +Compat = 5 --------------------------------------------- -Serial = SLUS-29070 -Name = XIII [Demo] -Region = NTSC-U +Serial = SLES-51785 +Name = Cool Shot +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29071 -Name = Namco Transmission Demo Disc v1.03 [Regular Release] -Region = NTSC-U +Serial = SLES-51787 +Name = Harry Potter - Quidditch World Cup +Region = PAL-M10 --------------------------------------------- -Serial = SLUS-29073 -Name = Need for Speed - Underground [Demo] -Region = NTSC-U -EETimingHack = 1 //broken textures +Serial = SLES-51792 +Name = Aliens vs. Predator - Extinction +Region = PAL-E --------------------------------------------- -Serial = SLUS-29074 -Name = Dance Dance Revolution Max 2 [Demo] -Region = NTSC-U +Serial = SLES-51794 +Name = Looney Toons - Back in Action +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29077 -Name = I-Ninja [Demo] -Region = NTSC-U +Serial = SLES-51797 +Name = Madden NFL 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29079 -Name = NCAA March Madness 2004 [Demo] -Region = NTSC-U +Serial = SLES-51798 +Name = NHL 2004 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29080 -Name = Whiplash [Demo] -Region = NTSC-U +Serial = SLES-51799 +Name = Soul Calibur II +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29081 -Name = Metal Arms - Glitch in the System [Demo] -Region = NTSC-U +Serial = SLES-51800 +Name = Smash Cars Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29082 -Name = Beyond Good and Evil [Demo] -Region = NTSC-U +Serial = SLES-51806 +Name = Evil Dead - A Fistful of Boomstick +Region = PAL-E --------------------------------------------- -Serial = SLUS-29083 -Name = Maximo vs. The Army of Zin [Demo] -Region = NTSC-U +Serial = SLES-51812 +Name = Homerun +Region = PAL-E --------------------------------------------- -Serial = SLUS-29084 -Name = dot Hack - Part 4 - Quarantine [Demo] -Region = NTSC-U +Serial = SLES-51813 +Name = European Tennis Pro +Region = PAL-E --------------------------------------------- -Serial = SLUS-29086 -Name = FIFA Soccer 2004 [Demo] -Region = NTSC-U +Serial = SLES-51814 +Name = ATV Off-Road Fury 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29087 -Name = Square Enix Sampler Disc Vol.1 -Region = NTSC-U +Serial = SLES-51815 +Name = Final Fantasy X-2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29088 -Name = Champions of Norrath - Realms of EverQuest [Demo] -Region = NTSC-U +Serial = SLES-51816 +Name = Final Fantasy X-2 +Region = PAL-F --------------------------------------------- -Serial = SLUS-29089 -Name = Resident Evil Outbreak [Public Beta 1.0] -Region = NTSC-U +Serial = SLES-51817 +Name = Final Fantasy X-2 +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLUS-29091 -Name = MX Unleashed [Demo] -Region = NTSC-U +Serial = SLES-51818 +Name = Final Fantasy X-2 +Region = PAL-I --------------------------------------------- -Serial = SLUS-29093 -Name = NFL Street [Demo] -Region = NTSC-U +Serial = SLES-51819 +Name = Final Fantasy X-2 +Region = PAL-S +Compat = 5 --------------------------------------------- -Serial = SLUS-29095 -Name = James Bond 007 - Everything or Nothing [Demo] -Region = NTSC-U +Serial = SLES-51821 +Name = Alias +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29096 -Name = Final Night 2004 [Demo] -Region = NTSC-U +Serial = SLES-51822 +Name = Alias +Region = PAL-I --------------------------------------------- -Serial = SLUS-29098 -Name = Square Enix Sampler Disc Vol.2 -Region = NTSC-U +Serial = SLES-51823 +Name = Hunter - The Reckoning Wayward +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-29100 -Name = Ribbit King [Demo] -Region = NTSC-U +Serial = SLES-51824 +Name = Colin McRae Rally '04 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29101 -Name = Crash Twinsanity & Spyro - A Hero's Tail [Demo] -Region = NTSC-U -XgKickHack = 1 //Fixes bad Geometry +Serial = SLES-51825 +Name = Pop Idol +Region = PAL-E --------------------------------------------- -Serial = SLUS-29104 -Name = Galactic Wrestling - Featuring Ultimate Muscle [Demo] -Region = NTSC-U +Serial = SLES-51826 +Name = AFL Live 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29107 -Name = Transformers [Regular Demo] -Region = NTSC-U +Serial = SLES-51828 +Name = Gladiator - Sword of Vengeance +Region = PAL-G --------------------------------------------- -Serial = SLUS-29108 -Name = Def Jam - Fight For NY [Demo] -Region = NTSC-U +Serial = SLES-51831 +Name = Sphinx and The Cursed Mummy +Region = PAL-M5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLUS-29110 -Name = Monster Hunter [Public Beta Vol.1 - Ver.1.01] -Region = NTSC-U +Serial = SLES-51833 +Name = Premier Manager 2003-2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29111 -Name = Asterix & Obilex XXL - Kick Buttix [Demo] -Region = NTSC-U +Serial = SLES-51834 +Name = Premier Manager 2003-2004 +Region = PAL-F --------------------------------------------- -Serial = SLUS-29113 -Name = Burnout 3 [Demo] -Region = NTSC-U +Serial = SLES-51838 +Name = Asterix & Obelix XXL2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29116 -Name = WWE SmackDown! vs. RAW [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51839 +Name = DragonBall Z - Budokai 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29117 -Name = Battlefield 2 - Modern Combat [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51840 +Name = NHL Hitz Pro +Region = PAL-E --------------------------------------------- -Serial = SLUS-29118 -Name = Need for Speed - Underground 2 [Demo] -Region = NTSC-U +Serial = SLES-51841 +Name = SpyHunter 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29123 -Name = Ghost in the Shell - Stand Alone Complex [Demo] -Region = NTSC-U +Serial = SLES-51842 +Name = Road Kill +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-29124 -Name = Fight Club [Demo] -Region = NTSC-U +Serial = SLES-51843 +Name = Worms 3D +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29125 -Name = Konami Preview Disc -Region = NTSC-U +Serial = SLES-51845 +Name = Barbie - Horse Adventure +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-29126 -Name = Champions - Return to Arms [Demo] // aka "Champions of Norrath 2 [Demo]" -Region = NTSC-U -Compat = 4 +Serial = SLES-51846 +Name = Deutschland sucht den Superstar +Region = PAL-G --------------------------------------------- -Serial = SLUS-29129 -Name = 25 to Life [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51848 +Name = Tony Hawk's Underground +Region = PAL-E +Compat = 5 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-29130 -Name = Crash 'N' Burn [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51850 +Name = Basketball Xciting +Region = PAL-E --------------------------------------------- -Serial = SLUS-29131 -Name = Project Snowblind [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51851 +Name = Tony Hawk's Underground +Region = PAL-F +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-29132 -Name = S.L.A.I. - Steel Lancer Arena International - Phantom Crash [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51852 +Name = Thug MOTX [Demo] +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLUS-29134 -Name = Namco Transmission Demo Disc Vol.2 -Region = NTSC-U +Serial = SLES-51853 +Name = Tony Hawk's Underground +Region = PAL-F +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-29137 -Name = Mercenaries [Demo] -Region = NTSC-U +Serial = SLES-51854 +Name = Tony Hawk Underground +Region = PAL-S +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLUS-29138 -Name = Punisher [Demo] -Region = NTSC-U +Serial = SLES-51855 +Name = Tank Elite +Region = PAL-E --------------------------------------------- -Serial = SLUS-29139 -Name = Shadow of Rome [Demo] -Region = NTSC-U +Serial = SLES-51856 +Name = Monster Attack +Region = PAL-E --------------------------------------------- -Serial = SLUS-29140 -Name = MX vs. ATV Unleashed [Demo] -Region = NTSC-U +Serial = SLES-51859 +Name = Billiards Xciting +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLUS-29141 -Name = NBA Street v3 [Demo] -Region = NTSC-U +Serial = SLES-51860 +Name = Tennis Court Smash +Region = PAL-E +Compat = 3 --------------------------------------------- -Serial = SLUS-29145 -Name = Final Night - Round 2 [Demo] -Region = NTSC-U +Serial = SLES-51861 +Name = Bowling Xciting +Region = PAL-E --------------------------------------------- -Serial = SLUS-29148 -Name = Incredible Hulk, The - Ultimate Destruction [Demo] -Region = NTSC-U +Serial = SLES-51862 +Name = Bass Master Fishing +Region = PAL-E --------------------------------------------- -Serial = SLUS-29149 -Name = Flipnic - Ultimate Pinball [Demo] -Region = NTSC-U +Serial = SLES-51863 +Name = Maze Action +Region = PAL-E --------------------------------------------- -Serial = SLUS-29150 -Name = Destroy All Humans! [Demo] -Region = NTSC-U +Serial = SLES-51864 +Name = Police Chase Down +Region = PAL-E --------------------------------------------- -Serial = SLUS-29152 -Name = Battlefield 2 - Modern Combat [Regular Demo] -Region = NTSC-U +Serial = SLES-51865 +Name = Heartbeat Boxing +Region = PAL-E --------------------------------------------- -Serial = SLUS-29153 -Name = Burnout Revenge [Demo] -Region = NTSC-U +Serial = SLES-51867 +Name = Dynasty Tactics 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29154 -Name = NHL '06 [Demo] -Region = NTSC-U +Serial = SLES-51868 +Name = Dynasty Tactics 2 +Region = PAL-F --------------------------------------------- -Serial = SLUS-29155 -Name = Need for Speed - Most Wanted [Demo] -Region = NTSC-U +Serial = SLES-51869 +Name = Dynasty Tactics 2 +Region = PAL-G --------------------------------------------- -Serial = SLUS-29156 -Name = Marvel Nemesis - Rise of the Imperfects [Demo] -Region = NTSC-U +Serial = SLES-51870 +Name = Disney-Pixar's Finding Nemo +Region = PAL-FI-S --------------------------------------------- -Serial = SLUS-29157 -Name = Dragon Quest VIII - Journey of the Cursed King [Demo] -Region = NTSC-U +Serial = SLES-51871 +Name = Disney-Pixar's Finding Nemo +Region = PAL-F-G --------------------------------------------- -Serial = SLUS-29159 -Name = One Piece - Grand Battle [Demo] -Region = NTSC-U +Serial = SLES-51872 +Name = Disney-Pixar's Finding Nemo +Region = PAL-M3 // Scandinavia --------------------------------------------- -Serial = SLUS-29160 -Name = FIFA '06 [Demo] -Region = NTSC-U +Serial = SLES-51873 +Name = Medal of Honor - Rising Sun +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29161 -Name = SSX On Tour [Demo] -Region = NTSC-U +Serial = SLES-51874 +Name = Medal of Honor - Rising Sun +Region = PAL-F --------------------------------------------- -Serial = SLUS-29162 -Name = NBA Live '06 [Demo] -Region = NTSC-U +Serial = SLES-51875 +Name = Medal of Honor - Rising Sun +Region = PAL-G --------------------------------------------- -Serial = SLUS-29163 -Name = NCAA March Madness '06 [Demo] -Region = NTSC-U +Serial = SLES-51876 +Name = Medal of Honor - Rising Sun +Region = PAL-F --------------------------------------------- -Serial = SLUS-29164 -Name = Star Wars Battlefront II [Online Public Beta] -Region = NTSC-U +Serial = SLES-51877 +Name = Bloody Roar 4 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29167 -Name = James Bond 007 - From Russia with Love, Need for Speed - Most Wanted, SSX World Tour [Demo] -Region = NTSC-U +Serial = SLES-51879 +Name = Hot Wheels World Race +Region = PAL-E --------------------------------------------- -Serial = SLUS-29168 -Name = James Bond 007 - From Russia with Love [Demo] -Region = NTSC-U +Serial = SLES-51881 +Name = Mercedes Bens World Racing +Region = PAL-F-G --------------------------------------------- -Serial = SLUS-29169 -Name = Resident Evil 4 [Demo] -Region = NTSC-U +Serial = SLES-51883 +Name = Scooby Doo! Mystery Mayhem +Region = PAL-M3 --------------------------------------------- -Serial = SLUS-29170 -Name = Total Overdose - A Gunslinger's Tale in Mexico [Demo] -Region = NTSC-U +Serial = SLES-51885 +Name = MegaMan X7 +Region = PAL-M5 +Compat = 5 +eeClampMode = 3 //For camera issues in some scenes. --------------------------------------------- -Serial = SLUS-29171 -Name = Final Fantasy XII [Demo] -Region = NTSC-U +Serial = SLES-51886 +Name = Lethal Skies 2 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29173 -Name = Sims 2, The [Demo] -Region = NTSC-U +Serial = SLES-51887 +Name = Tiger Woods PGA Tour 2004 +Region = PAL-E --------------------------------------------- -Serial = SLUS-29174 -Name = Namco Transmission Demo Disc Vol.3.1 -Region = NTSC-U +Serial = SLES-51888 +Name = RTL Skiijumping 2004 +Region = PAL-E-G --------------------------------------------- -Serial = SLUS-29175 -Name = Namco Transmission Demo Disc Vol.3.2 -Region = NTSC-U +Serial = SLES-51890 +Name = Buffy the Vampire Slayer - Chaos Bleeds +Region = PAL-M4 +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLUS-29178 -Name = TOCA Race Driver 3 [Demo] -Region = NTSC-U +Serial = SLES-51893 +Name = Naval Ops - Warship Gunner +Region = PAL-E --------------------------------------------- -Serial = SLUS-29179 -Name = Sonic Riders [Demo] -Region = NTSC-U +Serial = SLES-51896 +Name = Gallop Racer +Region = PAL-E --------------------------------------------- -Serial = SLUS-29180 -Name = Black [Demo] -Region = NTSC-U -vuClampMode = 0 +Serial = SLES-51897 +Name = Simpsons, The - Hit & Run +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLUS-29185 -Name = Driver - Parallel Lines [Demo] -Region = NTSC-U +Serial = SLES-51903 +Name = AFL Live 2004 - Aussie Rules Football +Region = PAL-E --------------------------------------------- -Serial = SLUS-29188 -Name = Steambot Chronicles [Regular Demo] -Region = NTSC-U +Serial = SLES-51906 +Name = Rolling +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29189 -Name = FIFA World Cup - Germany 2006 [Demo] -Region = NTSC-U +Serial = SLES-51908 +Name = Van Helsing +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLUS-29191 -Name = Hitman - Blood Money & Urban Chaos [Demo] -Region = NTSC-U +Serial = SLES-51911 +Name = Gadget Racers +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29192 -Name = Test Drive Unlimited [Public Beta Vol.1.0] -Region = NTSC-U +Serial = SLES-51912 +Name = Pro Evolution Soccer 3 +Region = PAL-M4 --------------------------------------------- -Serial = SLUS-29193 -Name = Need for Speed - Carbon [Demo] -Region = NTSC-U +Serial = SLES-51913 +Name = Onimusha Blade Warrior +Region = PAL-M3 +MemCardFilter = SLES-51913/SLES-51914 --------------------------------------------- -Serial = SLUS-29194 -Name = FIFA '07 [Demo] -Region = NTSC-U +Serial = SLES-51914 +Name = Onimusha 3 - Demon Siege +Region = PAL-M5 +Compat = 5 +MemCardFilter = SLES-51913/SLES-51914 --------------------------------------------- -Serial = SLUS-29195 -Name = Yakuza [Demo] -Region = NTSC-U +Serial = SLES-51915 +Name = Pro Evolution Soccer 3 +Region = PAL-I --------------------------------------------- -Serial = SLUS-29196 -Name = Destroy All Humans! 2 [Demo] -Region = NTSC-U +Serial = SLES-51916 +Name = Crouching Tiger, Hidden Dragon +Region = PAL-M5 --------------------------------------------- -Serial = SLUS-29197 -Name = Flushed Away [Demo] -Region = NTSC-U +Serial = SLES-51917 +Name = Beyond Good and Evil +Region = PAL-M6 --------------------------------------------- -Serial = SLUS-29198 -Name = Guitar Hero II [Demo] -Region = NTSC-U +Serial = SLES-51918 +Name = Prince of Persia - The Sands of Time +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = PAPX-90512 -Name = Gran Turismo 4 - Toyota Prius [Trial] -Region = NTSC-J -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-51924 +Name = World War Zero - Ironstorm +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = PBPX-95503 -Name = Gran Turismo 3 - A-Spec [PS2 Bundle] -Region = NTSC-U +Serial = SLES-51925 +Name = Splashdown 2 - Rides Gone Wild +Region = PAL-Unk --------------------------------------------- -Serial = PBPX-95517 -Name = Network Adapter Start-Up Disc -Region = NTSC-U +Serial = SLES-51926 +Name = Outlaw Golf +Region = PAL-M3 --------------------------------------------- -Serial = PBPX-95201 -Name = Dead or Alive 2 -Region = NTSC-J -Compat = 5 -[patches = 70D26E09] - // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function - patch=0,EE,00290408,word,24060000 -[/patches] +Serial = SLES-51927 +Name = Midway Arcade Treasures +Region = PAL-E --------------------------------------------- -Serial = PBPX-95524 -Name = Gran Turismo 4 - Prologue -Region = NTSC-Unk +Serial = SLES-51930 +Name = Road Rage 3 +Region = PAL-E +--------------------------------------------- +Serial = SLES-51931 +Name = Teenage Mutant Ninja Turtles +Region = PAL-M5 Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works -//[patches = CA6243B9] -// -// comment=patches by Nachbrenner - -// //fix IPU DMA -// patch=1,EE,00166814,word,00000000 -// patch=1,EE,003a36b8,word,00000000 -// patch=1,EE,003a36f4,word,00000000 -// //Skip Videos -// patch=1,EE,001e3718,word,03e00008 -// patch=1,EE,001e371c,word,00000000 -// -//[/patches] --------------------------------------------- -Serial = PCPX-96649 -Name = Gran Turismo 4 [Demo] -Region = NTSC-J -Compat = 4 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works -//[patches = E906EA37] -// -// comment=patches by mdr61 -// -// //Timelimit counter stop -// patch=0,EE,002EF740,word,00000000 -// //Pause counter stop -// patch=0,EE,002C7394,word,00000000 -// patch=0,EE,002F1F40,word,00000000 -// -//[/patches] +Serial = SLES-51932 +Name = Jimmy Neutron - Jet Fusion +Region = PAL-E --------------------------------------------- -Serial = SCAJ-10001 -Name = Makai Senki Disgaea -Region = NTSC-Unk +Serial = SLES-51933 +Name = Gregory Horror Show +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-10003 -Name = Taiko no Tatsujin Doki -Region = NTSC-Unk +Serial = SLES-51934 +Name = Curse - The Eye of Isis +Region = PAL-M6 --------------------------------------------- -Serial = SCAJ-10004 -Name = Time Crisis 2 [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-51946 +Name = Robin Hood - Defender of the Crown +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SCAJ-10006 -Name = Taiko no Tatsujin 3 - Appare Sandaime -Region = NTSC-Unk +Serial = SLES-51947 +Name = ESPN NFL 2K4 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-10007 -Name = Taiko no Tatsujin - Waku Waku Anime Matsuri -Region = NTSC-Unk +Serial = SLES-51948 +Name = ESPN NHL Hockey 2K4 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-10008 -Name = Taiko no Tatsujin Atsumare Yonndaime -Region = NTSC-Unk +Serial = SLES-51949 +Name = NBA 2K4 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-10009 -Name = Psikyo Shooting Collection Vol.1 - Strikers 1&2 -Region = NTSC-Unk +Serial = SLES-51950 +Name = Sonic Heroes +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-10010 -Name = Mahjong Party - Play Mahjong with Swimsuit Beauty -Region = NTSC-Unk +Serial = SLES-51951 +Name = Puyo Pop Fever +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCAJ-10011 -Name = Taiko no Tatsujin Go! Go! Godaime -Region = NTSC-Unk +Serial = SLES-51952 +Name = R-Type Final +Region = PAL-M3 +Compat = 5 +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SCAJ-10012 -Name = Taiko Drum Master -Region = NTSC-Unk +Serial = SLES-51953 +Name = FIFA 2004 +Region = PAL-M4 --------------------------------------------- -Serial = SCAJ-10013 -Name = Taiko no Tatsujin - Tobikkiri! Anime Special -Region = NTSC-Unk +Serial = SLES-51954 +Name = Max Payne 2 - The Fall of Max Payne +Region = PAL-E +vuClampMode = 2 --------------------------------------------- -Serial = SCAJ-10014 -Name = Taiko no Tatsujin Wai Wai Happy Muyome -Region = NTSC-Unk +Serial = SLES-51956 +Name = Bionicle - The Game +Region = PAL-M6 --------------------------------------------- -Serial = SCAJ-10015 -Name = Taiko No Tatsujin Doka! To Omori 7Daime -Region = NTSC-Unk +Serial = SLES-51957 +Name = Terminator 3 - Rise of the Machines +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20001 -Name = Ratchet and Clank -Region = NTSC-Unk +Serial = SLES-51958 +Name = Whiplash +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20002 -Name = Gallop Racer 6 - Revolution -Region = NTSC-Unk +Serial = SLES-51959 +Name = Football Generation +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20003 -Name = Warrior in Argus -Region = NTSC-Unk +Serial = SLES-51963 +Name = FIFA 2004 +Region = PAL-F-G --------------------------------------------- -Serial = SCAJ-20004 -Name = dot Hack Vol.3 -Region = NTSC-Unk +Serial = SLES-51964 +Name = FIFA 2004 +Region = PAL-P-S --------------------------------------------- -Serial = SCAJ-20005 -Name = Guilty Gear XX -Region = NTSC-Unk +Serial = SLES-51966 +Name = Bombastic +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20006 -Name = Gunbarl Collection with Time Crisis -Region = NTSC-Unk +Serial = SLES-51967 +Name = Need for Speed - Underground +Region = PAL-M4 +Compat = 5 +EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SCAJ-20007 -Name = Xi(sai) Go -Region = NTSC-Unk +Serial = SLES-51968 +Name = Spongebob Squarepants - Battle for Bikini Bottom +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20008 -Name = V-Rally 3 -Region = NTSC-Unk +Serial = SLES-51970 +Name = Spongebob Schwammkopf - Schlacht um Bikini Bottom +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SCAJ-20009 -Name = Herdy Gerdy -Region = NTSC-Unk +Serial = SLES-51972 +Name = NBA Jam 2004 +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20010 -Name = Bakusou Dekotora Densetsu 3 -Region = NTSC-Unk +Serial = SLES-51973 +Name = War Chess +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20011 -Name = Armored Core 3 - Silent Line -Region = NTSC-Unk +Serial = SLES-51974 +Name = XS Junior League Soccer +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20012 -Name = Venus & Braves -Region = NTSC-Unk +Serial = SLES-51976 +Name = Tom Clancy's Ghost Recon - Jungle Storm +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20013 -Name = Moto GP 3 -Region = NTSC-Unk +Serial = SLES-51978 +Name = Baphomets Fluch - Der Schlafende Drache +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SCAJ-20014 -Name = Time Splitter -Region = NTSC-Unk +Serial = SLES-51980 +Name = TT Superbikes +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20015 -Name = Shin Megami Tensei III: Nocturne -Region = NTSC-Unk +Serial = SLES-51981 +Name = ShellShock - Nam '67 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20016 -Name = Warrior of Argus -Region = NTSC-Unk +Serial = SLES-51982 +Name = ShellShock - Nam '67 +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20017 -Name = Sly Cooper -Region = NTSC-Unk +Serial = SLES-51986 +Name = Backyard Wrestling - Don't Try This At Home +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20018 -Name = This is Football 2003 -Region = NTSC-Unk +Serial = SLES-51989 +Name = Wallace & Gromit in Project Zoo +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20019 -Name = Arc the Lad - Twilight of the Spirits -Region = NTSC-Unk +Serial = SLES-51991 +Name = Dance UK +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20020 -Name = Drag-on Dragoon -Region = NTSC-Unk +Serial = SLES-51996 +Name = International Snooker Championship +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20021 -Name = Metal Slug 3 -Region = NTSC-Unk +Serial = SLES-51997 +Name = SWAT - Global Strike Team +Region = PAL-M4 +Compat = 5 +eeClampMode = 3 //For grey screen ingame. --------------------------------------------- -Serial = SCAJ-20022 -Name = Super Robot Wars - Alpha 2nd -Region = NTSC-Unk +Serial = SLES-51998 +Name = Kao the Kangaroo - Round 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20023 -Name = Soul Calibur II -Region = NTSC-Unk +Serial = SLES-51999 +Name = GrooveRider Slot Car Thunder +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20024 -Name = dot Hack Vol.4 -Region = NTSC-Unk +Serial = SLES-52001 +Name = Mission Impossible - Operation Surma +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20025 -Name = Grand Prix Challenge -Region = NTSC-Unk -VIFFIFOHack = 1 +Serial = SLES-52002 +Name = Rogue Ops +Region = PAL-M6 --------------------------------------------- -Serial = SCAJ-20026 -Name = Generation of Chaos 3 -Region = NTSC-Unk +Serial = SLES-52005 +Name = James Bond 007 - Everything or Nothing +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20027 -Name = Tenchu 3 -Region = NTSC-Unk +Serial = SLES-52008 +Name = NBA Live 2004 +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20028 -Name = Tales of Destiny 2 -Region = NTSC-Unk +Serial = SLES-52011 +Name = Tak and The Power of Juju +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20029 -Name = R-Type Final -Region = NTSC-Unk +Serial = SLES-52015 +Name = Les Chevaliers de Baphomet +Region = PAL-F +--------------------------------------------- +Serial = SLES-52017 +Name = Lord of the Rings, The - Return of the King +Region = PAL-M5 Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SCAJ-20032 -Name = Mosquito - Let's Go Hawaiian -Region = NTSC-Unk +Serial = SLES-52018 +Name = Lord of the Rings, The - Return of the King (Der Herr der Ringe, Die Ruckkehr des Konigs) +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20033 -Name = Guilty Gear XX #Reload -Region = NTSC-Unk +Serial = SLES-52019 +Name = Lord of the Rings, The - Return of the King +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20034 -Name = Summon Night 3 -Region = NTSC-Unk +Serial = SLES-52020 +Name = Lord of the Rings, The - The Return of the King +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20035 -Name = Deat to Rights -Region = NTSC-Unk +Serial = SLES-52021 +Name = Lord of the Rings, The - The Return of the King +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20037 -Name = Monster Farm 4 -Region = NTSC-Unk +Serial = SLES-52022 +Name = Total Club Manager 2004 +Region = PAL-M4 --------------------------------------------- -Serial = SCAJ-20038 -Name = Arc the Lad - Twilight of the Spirits -Region = NTSC-Unk +Serial = SLES-52023 +Name = Manhunt +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20039 -Name = Sidewinder V -Region = NTSC-Unk +Serial = SLES-52025 +Name = NFL Street +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20040 -Name = King of Fighters 2001, The -Region = NTSC-Unk +Serial = SLES-52026 +Name = Wallace & Gromit in Project Zoo +Region = PAL-G +Compat = 5 +[patches = C502AD6E] + + comment=patches by Nachbrenner + + //skip sceIpuSync + patch=0,EE,00472c78,word,03e00008 + +[/patches] --------------------------------------------- -Serial = SCAJ-20041 -Name = Energy Airforce - Aim Strike! -Region = NTSC-Unk +Serial = SLES-52028 +Name = Junior Sports Basketball +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20043 -Name = Chain Drive -Region = NTSC-Unk +Serial = SLES-52034 +Name = Dr. Seuss' Cat in the Hat +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20044 -Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" -Region = NTSC-Unk -//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang +Serial = SLES-52036 +Name = WWE SmackDown! - Here Comes the Pain! +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20045 -Name = Shadow Tower Abyss -Region = NTSC-Unk +Serial = SLES-52038 +Name = Terminator 3 - Rise of the Machines +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20046 -Name = Siren -Region = NTSC-Unk +Serial = SLES-52041 +Name = Detonator +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20047 -Name = Time Crisis 3 -Region = NTSC-Unk +Serial = SLES-52043 +Name = MX Unleashed Migrated +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20048 -Name = R - Racing Evolution -Region = NTSC-Unk +Serial = SLES-52044 +Name = Crescent Suzuki Racing - Superbikes and Super Sidecars +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20050 -Name = Fatal Frame 2 - Crimson Butterfly -Region = NTSC-Unk +Serial = SLES-52045 +Name = GTR 400 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20055 -Name = Battle Gear 3 -Region = NTSC-Unk +Serial = SLES-52046 +Name = James Bond 007 - Everything or Nothing (Alles oder Nichts) +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SCAJ-20056 -Name = Bujingai -Region = NTSC-Unk +Serial = SLES-52047 +Name = Sims, The - Bustin' Out +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20057 -Name = Front Mission 4 -Region = NTSC-Unk +Serial = SLES-52048 +Name = Sims, The - Bustin' Out +Region = PAL-M5 // Eng & Nordic --------------------------------------------- -Serial = SCAJ-20058 -Name = Terminator 3 - Rise of the Machines -Region = NTSC-Unk +Serial = SLES-52055 +Name = Harry Potter and the Philosopher's Stone +Region = PAL-M11 +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SCAJ-20059 -Name = Minna no Golf 4 -Region = NTSC-Unk +Serial = SLES-52056 +Name = Harry Potter and The Philosopher's Stone +Region = PAL-M11 +EETimingHack = 1 --------------------------------------------- -Serial = SCAJ-20060 -Name = Time Crisis 3 -Region = NTSC-Unk +Serial = SLES-52058 +Name = Groove Rider - Slot Car Racing +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20061 -Name = Seven Samurai 20XX -Region = NTSC-Unk +Serial = SLES-52060 +Name = Fame Academy +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20062 -Name = Crouching Tiger, Hidden Dragon -Region = NTSC-Unk +Serial = SLES-52061 +Name = Star Academy +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20063 -Name = Popolocrois - The Law of the Moon -Region = NTSC-Unk +Serial = SLES-52062 +Name = Pop Star Academy +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20064 -Name = Nebula - Echo Night -Region = NTSC-Unk +Serial = SLES-52063 +Name = Alarm for Cobra 11 Autobahn +Region = PAL-E-G --------------------------------------------- -Serial = SCAJ-20065 -Name = EyeToy - Play [with Camera] -Region = NTSC-Unk +Serial = SLES-52065 +Name = Flipnic +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20066 -Name = Gran Turismo 4 - Prologue -Region = NTSC-Unk -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52095 +Name = Gradius V +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20067 -Name = GunGrave O.D. -Region = NTSC-Unk +Serial = SLES-52096 +Name = Firefighter F.D. 18 +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20068 -Name = Final Fantasy X-2 International -Region = NTSC-Unk +Serial = SLES-52097 +Name = SWAT - Global Strike Force +Region = PAL-E-G +Compat = 5 +eeClampMode = 3 //For grey screen ingame. --------------------------------------------- -Serial = SCAJ-20069 -Name = Gallop Racer - Lucky 7 -Region = NTSC-Unk +Serial = SLES-52100 +Name = NRL Rugby League +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20070 -Name = Star Ocean 3 [Director's Cut] -Region = NTSC-Unk -VuAddSubHack = 1 +Serial = SLES-52101 +Name = Wrath Unleashed +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20072 -Name = Ghost in the Shell - Stand Alone Complex -Region = NTSC-Unk +Serial = SLES-52102 +Name = Hugo Bukkazoom! +Region = PAL-M12 --------------------------------------------- -Serial = SCAJ-20073 -Name = Jak and Daxter II -Region = NTSC-Unk +Serial = SLES-52103 +Name = Tak & Le Pouvoir de Juju +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20074 -Name = King of Fighters 2002, The -Region = NTSC-Unk +Serial = SLES-52104 +Name = Tak and the Power of JuJu +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20075 -Name = Dragon Quest V - Bride of the Sky -Region = NTSC-Unk +Serial = SLES-52106 +Name = Cabela's Dangerous Hunts +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20076 -Name = Armored Core - Nexus -Region = NTSC-Unk +Serial = SLES-52107 +Name = Dance Europe +Region = PAL-M6 --------------------------------------------- -Serial = SCAJ-20078 -Name = Kuon -Region = NTSC-Unk +Serial = SLES-52108 +Name = Underworld - The Eternal War +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20079 -Name = Katamari Damacy -Region = NTSC-Unk -mvuFlagSpeedHack = 0 +Serial = SLES-52109 +Name = Underworld - The Eternal War +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20080 -Name = Kaena -Region = NTSC-Unk +Serial = SLES-52111 +Name = Mojo! +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20081 -Name = Xenosaga Freaks -Region = NTSC-Unk +Serial = SLES-52116 +Name = Sitting Duck +Region = PAL-M6 --------------------------------------------- -Serial = SCAJ-20082 -Name = GunGrave OD -Region = NTSC-Unk +Serial = SLES-52117 +Name = Go Go Copter +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20083 -Name = Bakuso! Mountain Bikers -Region = NTSC-Unk +Serial = SLES-52118 +Name = Castlevania - Lament of Innocence +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20084 -Name = MLB '04 -Region = NTSC-Unk +Serial = SLES-52122 +Name = Crime Life - Gang Wars +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20085 -Name = Sakurazaka Shouboutai -Region = NTSC-Unk +Serial = SLES-52123 +Name = EA Sports Cricket 2004 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20086 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc1of2] -Region = NTSC-Unk +Serial = SLES-52124 +Name = Kill Switch +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20087 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc2of2] -Region = NTSC-Unk +Serial = SLES-52125 +Name = Agassi Tennis Generation +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20088 -Name = UO Nanatsu no Mizu to Densetsu no Nushi -Region = NTSC-Unk +Serial = SLES-52132 +Name = Hitman - Contracts +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20089 -Name = Athens 2004 -Region = NTSC-Unk +Serial = SLES-52133 +Name = Hitman - Contracts +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20090 -Name = Gacha Mecha Stadium - Saru Battle -Region = NTSC-Unk +Serial = SLES-52134 +Name = Hitman - Contracts +Region = PAL-I +Compat = 4 --------------------------------------------- -Serial = SCAJ-20092 -Name = Samurai Spirits Zero -Region = NTSC-Unk +Serial = SLES-52135 +Name = Hitman - Contracts +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20093 -Name = Tenchu Kurenai -Region = NTSC-Unk +Serial = SLES-52136 +Name = Hitman - Contracts +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20094 -Name = Minna no Golf 4 [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-52143 +Name = Carmen Sandiego - The Secret of the Stolen Drums +Region = PAL-M4 +Compat = 4 --------------------------------------------- -Serial = SCAJ-20095 -Name = Digital Devil Saga: Avatar Tuner -Region = NTSC-Unk -EETimingHack = 1 +Serial = SLES-52149 +Name = Tom Clancy's Splinter Cell - Pandora Tomorrow +Region = PAL-M5 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SCAJ-20096 -Name = Guilty Gear Isuka -Region = NTSC-Unk +Serial = SLES-52150 +Name = Legacy of Kain - Defiance +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20097 -Name = EyeToy - FuriFuri Dance Tengoku -Region = NTSC-Unk +Serial = SLES-52151 +Name = Terminator 3 - Le Macchine Ribelli +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20098 -Name = EyeToy - Oosawagi! Ukkiiuki Game -Region = NTSC-Unk +Serial = SLES-52152 +Name = Terminator 3 - Rise of the Machines +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20099 -Name = Ico -Region = NTSC-Unk +Serial = SLES-52153 +Name = Driver 3 +Region = PAL-E-S +--------------------------------------------- +Serial = SLES-52159 +Name = Myth Makers Super Kart GP +Region = PAL-E Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCAJ-20100 -Name = Tenchu Kurenai -Region = NTSC-Ch-J +Serial = SLES-52171 +Name = Dynasty Warriors 4 - Xtreme Legends +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20101 -Name = EyeToy - Saru -Region = NTSC-Unk +Serial = SLES-52172 +Name = Dynasty Warriors 4 - Xtreme Legends +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20102 -Name = Tales of Symphonia -Region = NTSC-Unk +Serial = SLES-52173 +Name = Dynasty Warriors 4 - Xtreme Legends +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20104 -Name = Ace Combat 5 - The Unsung War -Region = NTSC-Unk +Serial = SLES-52174 +Name = Dynasty Warriors 4 - Xtreme Legends +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20105 -Name = Armored Core - Ninebreaker -Region = NTSC-Unk +Serial = SLES-52175 +Name = Dynasty Warriors 4 - Xtreme Legends +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20107 -Name = Bakufuu Slash! Kizna Arashi -Region = NTSC-Unk +Serial = SLES-52178 +Name = Casino Challenge +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20108 -Name = Arc the Lad - Generation -Region = NTSC-Unk +Serial = SLES-52179 +Name = Kaan Barbarian Blade +Region = PAL-M5 +Compat = 5 +--------------------------------------------- +Serial = SLES-52187 +Name = Baldur's Gate: Dark Alliance II +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20109 -Name = Ratchet & Clank 3 - Up your Arsenal -Region = NTSC-Unk +Serial = SLES-52188 +Name = Baldur's Gate: Dark Alliance II +Region = PAL-M3 +Compat = 4 --------------------------------------------- -Serial = SCAJ-20110 -Name = Dragon Quest VIII - Sora to Daichi to Norowareshi Himegimi -Region = NTSC-Unk +Serial = SLES-52190 +Name = RPM Tuning +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20111 -Name = Crash Bandicoot 5 -Region = NTSC-Unk +Serial = SLES-52202 +Name = Downhill Domination +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20112 -Name = Tales of Rebirth -Region = NTSC-Unk +Serial = SLES-52203 +Name = Armored Core - Silent Line +Region = PAL-E +Compat = 5 +MemCardFilter = SLES-51399/SLES-52203 --------------------------------------------- -Serial = SCAJ-20113 -Name = Dragon Quest & Final Fantasy in Itadaki Street -Region = NTSC-Unk +Serial = SLES-52204 +Name = UFC Sudden Impact +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20114 -Name = Tsukiyo ni Saraba -Region = NTSC-Unk +Serial = SLES-52209 +Name = Star Trek - Shattered Universe +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20115 -Name = Yoshitsune Eiyuuden -Region = NTSC-Unk +Serial = SLES-52214 +Name = Disney's The Haunted Mansion +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20116 -Name = Death by Degrees - Tekken - Nina Williams -Region = NTSC-Ch-J +Serial = SLES-52216 +Name = Disney's The Haunted Mansion +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20117 -Name = Fuun Bakumatsuden -Region = NTSC-Unk +Serial = SLES-52219 +Name = Corvette +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20118 -Name = Radiata Stories -Region = NTSC-J -VuAddSubHack = 1 +Serial = SLES-52230 +Name = Muppets Party Cruise +Region = PAL-Unk +EETimingHack = 1 //Path 3 masking errors --------------------------------------------- -Serial = SCAJ-20119 -Name = Gladiator - Road to Freedom -Region = NTSC-Unk +Serial = SLES-52237 +Name = dot Hack - Part 1 - Infection +Region = PAL-M5 +MemCardFilter = SLES-52237/SLES-52467/SLES-52468/SLES-52469 --------------------------------------------- -Serial = SCAJ-20120 -Name = Digital Devil Saga: Avatar Tuner 2 -Region = NTSC-Unk -EETimingHack = 1 +Serial = SLES-52238 +Name = Nightshade +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20121 -Name = Armored Core - Formula Front -Region = NTSC-Unk +Serial = SLES-52240 +Name = International Pool Championship +Region = PAL-Unk --------------------------------------------- -Serial = SCAJ-20122 -Name = Swords of Destiny -Region = NTSC-Unk +Serial = SLES-52241 +Name = Myth Makers - Orbs of Doom +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20123 -Name = Wild ARMs - The 4th Detonator -Region = NTSC-Unk +Serial = SLES-52242 +Name = Dalmatians 3 +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20124 -Name = Romancing Saga - Minstrel Song -Region = NTSC-Unk +Serial = SLES-52243 +Name = Dinosaur Adventure +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20125 -Name = Tekken 5 -Region = NTSC-Unk -eeClampMode = 1 +Serial = SLES-52244 +Name = Legend of Herkules +Region = PAL-E-G --------------------------------------------- -Serial = SCAJ-20126 -Name = Tekken 5 -Region = NTSC-Unk -eeClampMode = 1 +Serial = SLES-52246 +Name = Pool Paradise +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20127 -Name = EyeToy - Play 2 [with Camera] -Region = NTSC-Unk +Serial = SLES-52247 +Name = Hobbit, The +Region = PAL-R --------------------------------------------- -Serial = SCAJ-20128 -Name = EyeToy - Play 2 -Region = NTSC-Unk +Serial = SLES-52249 +Name = Premier Manager 2003-2004 +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20129 -Name = Ponkotsu Roman Daikatsugeki Bumpy Trot -Region = NTSC-Unk +Serial = SLES-52256 +Name = Max Payne 2 - The Fall of Max Payne +Region = PAL-E-S +vuClampMode = 2 --------------------------------------------- -Serial = SCAJ-20130 -Name = Namco x Capcom -Region = NTSC-Unk +Serial = SLES-52257 +Name = P.T.O. IV - Pacific Theater of Operations IV +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20131 -Name = namCollection - Namco 50th Anniversary -Region = NTSC-Unk +Serial = SLES-52258 +Name = Romance of the Three Kingdoms VIII +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20132 -Name = Drag-On Dragon 2 - Fuuin no Kurenai (Love Red, Ambivalence Black) -Region = NTSC-J +Serial = SLES-52259 +Name = Outlaw Volleyball +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20133 -Name = Kagero 2 - Dark Illusion -Region = NTSC-Unk +Serial = SLES-52265 +Name = Energy Airforce - Aim Strike! +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20134 -Name = Genji -Region = NTSC-Unk +Serial = SLES-52266 +Name = Energy Airforce - Aim Strike! +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20135 -Name = Minna Daisuki Katamari Damacy -Region = NTSC-Unk -vuClampMode = 3 -mvuFlagSpeedHack = 0 +Serial = SLES-52267 +Name = Energy Airforce - Aim Strike! +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20136 -Name = Ace Combat 5 - The Unsung War [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-52275 +Name = Way of the Samurai 2 +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20137 -Name = Musashiden II - Blademaster -Region = NTSC-Unk +Serial = SLES-52276 +Name = 187 - Ride or Die +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20138 -Name = Ape Escape 3 -Region = NTSC-Unk +Serial = SLES-52277 +Name = Riding Spirits 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20139 -Name = New Zero - Rei - Irezumi no Sei -Region = NTSC-Unk +Serial = SLES-52278 +Name = Mafia +Region = PAL-E +EETimingHack = 1 --------------------------------------------- -Serial = SCAJ-20140 -Name = Bleach - Erabareshi Tamashi -Region = NTSC-Unk +Serial = SLES-52279 +Name = Mafia +Region = PAL-G +EETimingHack = 1 --------------------------------------------- -Serial = SCAJ-20141 -Name = Grandia III -Region = NTSC-J +Serial = SLES-52280 +Name = Mafia +Region = PAL-F +EETimingHack = 1 --------------------------------------------- -Serial = SCAJ-20143 -Name = Armored Core - Last Raven -Region = NTSC-Unk +Serial = SLES-52282 +Name = Mafia +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20144 -Name = Saru Gechu 3 (Ape Escape 3) -Region = NTSC-Ch-J +Serial = SLES-52283 +Name = Terminator 3 - The Redemption +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20145 -Name = Tales of Legendia -Region = NTSC-J +Serial = SLES-52284 +Name = Deadly Skies II +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20146 -Name = Shadow of the Colossus -Region = NTSC-Ch-E-J +Serial = SLES-52286 +Name = Tak and The Poer of JuJu +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20147 -Name = Heavy Metal Thunder -Region = NTSC-J +Serial = SLES-52287 +Name = Tak and The Poer of JuJu +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20148 -Name = Tokyo Bus Guide 2 -Region = NTSC-Unk +Serial = SLES-52288 +Name = Tom Clancy's Rainbow Six 3 +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20149 -Name = Kingdom Hearts - Final Mix [Ultimate Hits] -Region = NTSC-Unk +Serial = SLES-52289 +Name = MTX Mototrax +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20150 -Name = Critical Velocity -Region = NTSC-Unk +Serial = SLES-52290 +Name = MTX Mototrax +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20151 -Name = MotoGP 4 -Region = NTSC-Unk +Serial = SLES-52291 +Name = Countryside Bears +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20152 -Name = Urban Reign -Region = NTSC-Unk +Serial = SLES-52292 +Name = Disney's Mighty Mulan +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20153 -Name = Code Age Commanders -Region = NTSC-J +Serial = SLES-52293 +Name = Disney's Son of the Lion King +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20154 -Name = Prince of Persia - Warrior Within -Region = NTSC-Unk +Serial = SLES-52294 +Name = Toys Room, The +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20155 -Name = Yoshitsune Eiyuuden Syura -Region = NTSC-Unk +Serial = SLES-52295 +Name = Master Chess +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20156 -Name = Gallop Racer 8 - Live Horse Racing -Region = NTSC-Unk +Serial = SLES-52298 +Name = IndyCar Series 2005 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20157 -Name = Ratchet & Clank 4th - GiriGiri Gingano Giga-battle -Region = NTSC-Unk +Serial = SLES-52308 +Name = Karaoke Stage +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20158 -Name = Ikusa Gami -Region = NTSC-Unk +Serial = SLES-52309 +Name = R - Racing +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SCAJ-20159 -Name = Soul Calibur III -Region = NTSC-Ch-E-J +Serial = SLES-52312 +Name = World Championship Rugby +Region = PAL-E-F --------------------------------------------- -Serial = SCAJ-20160 -Name = Yoshitsuneki -Region = NTSC-Unk +Serial = SLES-52313 +Name = Space Invaders Anniversary +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20161 -Name = Siren 2 -Region = NTSC-J -XgKickHack = 1 //SPS. +Serial = SLES-52314 +Name = Hugo - Bukkazoom +Region = PAL-R --------------------------------------------- -Serial = SCAJ-20162 -Name = Rogue Galaxy -Region = NTSC-Unk +Serial = SLES-52322 +Name = Drakengard +Region = PAL-M5 +Compat = 5 +eeClampMode = 3 //characters are visible in-game. --------------------------------------------- -Serial = SCAJ-20163 -Name = Tales of the Abyss -Region = NTSC-Unk +Serial = SLES-52323 +Name = Richard Burns Rally +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20164 -Name = Kingdom Hearts II -Region = NTSC-Unk +Serial = SLES-52325 +Name = Champions of Norrath - Realms of EverQuest +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20165 -Name = Bleach - Hanatareshi Yabou -Region = NTSC-Unk +Serial = SLES-52326 +Name = Spawn - Armageddon +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20166 -Name = Front Mission 5 - Scars of the War -Region = NTSC-Unk +Serial = SLES-52336 +Name = Max Payne 2 - The Fall of Max Payne +Region = PAL-E-G +Compat = 5 +vuClampMode = 2 --------------------------------------------- -Serial = SCAJ-20167 -Name = Siren 2 -Region = NTSC-Ch-J -XgKickHack = 1 //SPS. +Serial = SLES-52337 +Name = Max Payne 2 - The Fall of Max Payne +Region = PAL-E-F +vuClampMode = 2 --------------------------------------------- -Serial = SCAJ-20168 -Name = Rule of Rose -Region = NTSC-Unk +Serial = SLES-52338 +Name = Max Payne 2 - The Fall of Max Payne +Region = PAL-E-I +vuClampMode = 2 --------------------------------------------- -Serial = SCAJ-20169 -Name = Dirge of Cerberus - Final Fantasy VII -Region = NTSC-Unk +Serial = SLES-52339 +Name = Crash 'n Burn +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20170 -Name = Tourist Trophy -Region = NTSC-Ch -Compat = 2 +Serial = SLES-52340 +Name = Rollercoaster World +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20171 -Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioku Tachi -Region = NTSC-J +Serial = SLES-52341 +Name = X-Files - Resist or Serve +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20172 -Name = Final Fantasy XII -Region = NTSC-Unk +Serial = SLES-52342 +Name = Worms - Forts Under Seige +Region = PAL-E-F +Compat = 5 --------------------------------------------- -Serial = SCAJ-20173 -Name = Ace Combat Zero - The Belkan War -Region = NTSC-Unk +Serial = SLES-52343 +Name = Midway Arcade Treasures +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20175 -Name = Dragon Quest - Shonen Yangus to Fushigi no Dungeon -Region = NTSC-J +Serial = SLES-52348 +Name = Seven Samurai 20XX +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20176 -Name = Curious George -Region = NTSC-Unk +Serial = SLES-52349 +Name = International Golf Pro +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20177 -Name = Valkyrie Profile 2 - Silmeria -Region = NTSC-Unk -Compat = 5 -VuAddSubHack = 1 +Serial = SLES-52350 +Name = International Golf Pro +Region = PAL-M4 --------------------------------------------- -Serial = SCAJ-20178 -Name = Ape Escape - Million Monkeys -Region = NTSC-Unk +Serial = SLES-52358 +Name = Glass Rose +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SCAJ-20179 -Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc1of2] -Region = NTSC-Unk +Serial = SLES-52362 +Name = Bad Boys II +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20180 -Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc2of2] -Region = NTSC-Unk +Serial = SLES-52363 +Name = Bad Boys II +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20181 -Name = Minna no Tennis -Region = NTSC-Unk +Serial = SLES-52366 +Name = America's 10 Most Wanted +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20182 -Name = Tales of Destiny -Region = NTSC-Unk -FpuMulHack = 1 +Serial = SLES-52367 +Name = America's 10 Most Wanted +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-20183 -Name = Wild ARMs - The Vth Vanguard -Region = NTSC-J +Serial = SLES-52368 +Name = AFL Live - Premiership Edition +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20184 -Name = Seiken Densetsu 4 -Region = NTSC-Unk +Serial = SLES-52369 +Name = Empires of Atlantis +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20185 -Name = Super Robot Taisen - Original Generations -Region = NTSC-Unk +Serial = SLES-52370 +Name = Mouse Police, The +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20188 -Name = Final Fantasy XII - International - Zodiac Job System -Region = NTSC-Unk +Serial = SLES-52371 +Name = Animal Soccer World +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-20190 -Name = God of War II -Region = NTSC-Unk +Serial = SLES-52372 +Name = Spider-Man 2 +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-52374 +Name = Fight Night 2004 +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-52378 +Name = Euro Rally Champion +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 //For dmac errors and so 3d is visible and steady. --------------------------------------------- -Serial = SCAJ-20191 -Name = Super Robot Taisen OG - Original Generations Gaiden [Limited Edition] -Region = NTSC-Unk +Serial = SLES-52379 +Name = Shrek 2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCAJ-20192 -Name = Super Robot Taisen OG - Original Generations Gaiden -Region = NTSC-Unk +Serial = SLES-52380 +Name = Shrek 2 +Region = PAL-F --------------------------------------------- -Serial = SCAJ-20193 -Name = Tales of Destiny [Director's Cut] [Premium Box] -Region = NTSC-Unk -FpuMulHack = 1 +Serial = SLES-52381 +Name = Shrek 2 +Region = PAL-G --------------------------------------------- -Serial = SCAJ-20194 -Name = Minna no Golf 4 [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-52382 +Name = Shrek 2 +Region = PAL-S --------------------------------------------- -Serial = SCAJ-20195 -Name = Ape Escape 3 [PlayStation 2 The Best] -Region = NTSC-Ch +Serial = SLES-52383 +Name = Shrek 2 +Region = PAL-I --------------------------------------------- -Serial = SCAJ-20196 -Name = Shadow of the Colossus [PlayStation 2 The Best] -Region = NTSC-Ch +Serial = SLES-52384 +Name = Project Zero 2 - Crimson Butterfly +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-20197 -Name = Valkyrie Profile 2 - Silmeria [Ultimate Hits] -Region = NTSC-Unk +Serial = SLES-52385 +Name = England International Football +Region = PAL-E Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SCAJ-20198 -Name = Everybody's Tennis [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-52386 +Name = World Championship Snooker 2004 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-20199 -Name = Tekken 5 [PlayStation 2 The Best] -Region = NTSC-Unk -eeClampMode = 1 +Serial = SLES-52387 +Name = SpyHunter 2 +Region = PAL-Unk --------------------------------------------- -Serial = SCAJ-25002 -Name = Shinobi -Region = NTSC-Unk +Serial = SLES-52388 +Name = Transformers Armada - Prelude to Energon [Special Edition] +Region = PAL-M5 +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SCAJ-25004 -Name = Kingdom Hearts - Final Mix -Region = NTSC-Unk +Serial = SLES-52393 +Name = Pinball Fun +Region = PAL-E --------------------------------------------- -Serial = SCAJ-25008 -Name = Initial D - Street Stage -Region = NTSC-Unk +Serial = SLES-52394 +Name = UFEA Euro 2004 +Region = PAL-E --------------------------------------------- -Serial = SCAJ-25012 -Name = Final Fantasy X-2 -Region = NTSC-Unk +Serial = SLES-52395 +Name = UFEA Euro 2004 +Region = PAL-F-G --------------------------------------------- -Serial = SCAJ-25026 -Name = Kunoichi Shinobi -Region = NTSC-Unk +Serial = SLES-52396 +Name = Euro 2004 +Region = PAL-P-S --------------------------------------------- -Serial = SCAJ-25034 -Name = Sakura Taisen Monogatari -Region = NTSC-Unk +Serial = SLES-52397 +Name = Euro 2004 +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-25037 -Name = Astro Boy Atom -Region = NTSC-Unk +Serial = SLES-52398 +Name = Euro 2004 +Region = PAL-M3 // Eng, DA & SE --------------------------------------------- -Serial = SCAJ-25045 -Name = Sakura Taisen V - Episode 0 -Region = NTSC-Unk +Serial = SLES-52402 +Name = Perfect Ace 2 - The Championships +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-25047 -Name = Dororo -Region = NTSC-Unk +Serial = SLES-52403 +Name = Formula Challenge +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-30001 -Name = Xenosaga Episode I [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-52404 +Name = MTV Music Generator 3 +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-52413 +Name = Malice +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCAJ-30002 -Name = Wild ARMs - Alter Code F -Region = NTSC-J +Serial = SLES-52418 +Name = Powerdrome +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SCAJ-30003 -Name = Siren -Region = NTSC-Unk +Serial = SLES-52423 +Name = Smash Court Tennis - Pro Tournament 2 +Region = PAL-Unk --------------------------------------------- -Serial = SCAJ-30004 -Name = Waga Ryuomiyo - Pride of the Dragon Peace -Region = NTSC-Unk +Serial = SLES-52433 +Name = Goblin Commander - Unleash The Horde +Region = PAL-M3 --------------------------------------------- -Serial = SCAJ-30005 -Name = Gacha Mecha Stadium Saru Battle -Region = NTSC-Unk +Serial = SLES-52439 +Name = Suffering, The +Region = PAL-E-I-S +Compat = 5 --------------------------------------------- -Serial = SCAJ-30006 -Name = Gran Turismo 4 -Region = NTSC-Unk -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52440 +Name = Harry Potter and the Prisoner of Azkaban +Region = PAL-M7 +Compat = 3 --------------------------------------------- -Serial = SCAJ-30007 -Name = Gran Turismo 4 -Region = NTSC-Unk -Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works -//[patches = 7ABDBB5E] -// -// comment=patches by nachbrenner -// -// //skip Videos -// patch=1,EE,00100D84,word,24100001 -// -//[/patches] +Serial = SLES-52444 +Name = Hyper Street Fighter II - The Anniversary Edition +Region = PAL-E --------------------------------------------- -Serial = SCAJ-30008 -Name = Gran Turismo 4 [PlayStation 2 The Best] -Region = NTSC-Unk -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52445 +Name = Silent Hill 4 - The Room +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCAJ-30010 -Name = God of War -Region = NTSC-E +Serial = SLES-52446 +Name = Mashed +Region = PAL-M5 --------------------------------------------- -Serial = SCAJ-30011 -Name = God of War II -Region = NTSC-E +Serial = SLES-52448 +Name = Knights of the Temple +Region = PAL-M4 --------------------------------------------- -Serial = SCKA-10006 -Name = Come on Baby -Region = NTSC-K +Serial = SLES-52449 +Name = Kidz Sports Basketball +Region = PAL-E --------------------------------------------- -Serial = SCKA-20004 -Name = Sly Cooper and the Thievius Raccoonus -Region = NTSC-K +Serial = SLES-52450 +Name = Serious Sam - Next Encounter +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SCKA-20008 -Name = Tales of Destiny 2 -Region = NTSC-K +Serial = SLES-52451 +Name = Conan - The Dark Axe +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCKA-20009 -Name = R-Type Final -Region = NTSC-K -Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) +Serial = SLES-52457 +Name = Shrek 2 +Region = PAL-SE --------------------------------------------- -Serial = SCKA-20010 -Name = Jak II -Region = NTSC-K +Serial = SLES-52458 +Name = Disgaea: Hour of Darkness +Region = PAL-E --------------------------------------------- -Serial = SCKA-20011 -Name = Ratchet and Clank 2 -Region = NTSC-K +Serial = SLES-52459 +Name = Autobahn Raser - Das Spiel zum Film +Region = PAL-G --------------------------------------------- -Serial = SCKA-20012 -Name = Ark the Lad - jeongryeongui Hwanghon -Region = NTSC-K +Serial = SLES-52466 +Name = Ribbit King +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20014 -Name = Dark Claud 2 -Region = NTSC-K +Serial = SLES-52467 +Name = dot Hack - Part 2 - Mutation +Region = PAL-M5 Compat = 5 +MemCardFilter = SLES-52237/SLES-52467/SLES-52468/SLES-52469 --------------------------------------------- -Serial = SCKA-20015 -Name = Time Crisis 3 -Region = NTSC-K +Serial = SLES-52468 +Name = dot Hack - Part 4 - Quarantine +Region = PAL-M5 Compat = 5 +MemCardFilter = SLES-52237/SLES-52467/SLES-52468/SLES-52469 --------------------------------------------- -Serial = SCKA-20016 -Name = Soul Calibur 2 -Region = NTSC-K +Serial = SLES-52469 +Name = dot Hack - Part 3 - Outbreak +Region = PAL-M5 Compat = 5 -vuClampMode = 2 //SPS(Spikey Polygon Syndrome) solution ---------------------------------------------- -Serial = SCKA-20018 -Name = The Getaway -Region = NTSC-K +MemCardFilter = SLES-52237/SLES-52467/SLES-52468/SLES-52469 --------------------------------------------- -Serial = SCKA-20019 -Name = Siren -Region = NTSC-K +Serial = SLES-52471 +Name = Naval Ops - Commander +Region = PAL-E --------------------------------------------- -Serial = SCKA-20020 -Name = SOCOM II - U.S. Navy SEALs -Region = NTSC-K -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SLES-52472 +Name = Project Minerva +Region = PAL-M3 --------------------------------------------- -Serial = SCKA-20022 -Name = Gran Turismo 4 Prologue -Region = NTSC-K -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52477 +Name = Vegas Casino II +Region = PAL-E --------------------------------------------- -Serial = SCKA-20023 -Name = Fatal Frame 2 -Region = NTSC-K -Compat = 5 +Serial = SLES-52478 +Name = Red Dead Revolver +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SCKA-20025 -Name = Katamari Damacy -Region = NTSC-K -mvuFlagSpeedHack = 0 +Serial = SLES-52479 +Name = Samurai Jack - The Shadow of Aku +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20026 -Name = Gungrave O.D. -Region = NTSC-K +Serial = SLES-52480 +Name = Yu-Gi-Oh! - The Duelists of the Roses +Region = PAL-M4 --------------------------------------------- -Serial = SCKA-20027 -Name = Ghost in the Shell - Stand Alone Complex -Region = NTSC-K -Compat = 5 +Serial = SLES-52481 +Name = Hot Wheels - Stunt Track Challenge +Region = PAL-E --------------------------------------------- -Serial = SCKA-20028 -Name = Ico [PlayStation2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52482 +Name = Steel Dragon EX +Region = PAL-M4 Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCKA-20029 -Name = Gran Turismo Concept 2002 Tokyo-Seoul [PlayStation 2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52483 +Name = World Championship Pool 2004 +Region = PAL-UM3 --------------------------------------------- -Serial = SCKA-20032 -Name = Syphon Filter - The Omega Virus -Region = NTSC-K +Serial = SLES-52486 +Name = Astroboy +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20033 -Name = Smash Court Professional Tournament 2 [Limited Edition] -Region = NTSC-K +Serial = SLES-52490 +Name = Dance UK - Extra Trax +Region = PAL-E --------------------------------------------- -Serial = SCKA-20034 -Name = Time Crisis 3 [PlayStation 2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52493 +Name = Spider-Man 2 +Region = PAL-E --------------------------------------------- -Serial = SCKA-20035 -Name = Hot Shots Golf 3 [PlayStation 2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52495 +Name = Bujingai - Swordmaster +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20038 -Name = Time Crisis - Crisis Zone -Region = NTSC-K +Serial = SLES-52504 +Name = Trivial Pursuit Unhinged +Region = PAL-M3 --------------------------------------------- -Serial = SCKA-20039 -Name = Tekken Nina Williams In Death By Degree -Region = NTSC-K +Serial = SLES-52505 +Name = Spy Fiction +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20040 -Name = Jak 3 -Region = NTSC-K +Serial = SLES-52507 +Name = Def Jam - Fight for New York +Region = PAL-E-F +Compat = 5 --------------------------------------------- -Serial = SCKA-20043 -Name = Magna Carta -Region = NTSC-K +Serial = SLES-52508 +Name = Obscure +Region = PAL-G --------------------------------------------- -Serial = SCKA-20044 -Name = Sly Cooper 2 Band of Thieves -Region = NTSC-K -Compat = 5 +Serial = SLES-52509 +Name = Tiger Woods PGA Tour Golf 2005 +Region = PAL-M4 --------------------------------------------- -Serial = SCKA-20047 -Name = Armored Core Nine Breaker -Region = NTSC-K +Serial = SLES-52510 +Name = Neo Contra +Region = PAL-M3 +Compat = 4 +[patches = EEE2F6A3] + //comment=Patches By Nachbrenner and Prafull + + //fix IPU busy! ingame + patch=0,EE,003a9a88,word,03e00008 + patch=0,EE,003a9a8c,word,00000000 + patch=0,EE,003a9b60,word,03e00008 + patch=0,EE,003a9b64,word,00000000 + comment= Patch By Prafull + //Game should work, avoid pressing start to pause the game + patch=1,EE,00100530,word,00000000 +[/patches] --------------------------------------------- -Serial = SCKA-20048 -Name = Killzone -Region = NTSC-K +Serial = SLES-52511 +Name = Headhunter - Redemption (EX) +Region = PAL-E --------------------------------------------- -Serial = SCKA-20049 -Name = Tekken 5 -Region = NTSC-K -eeClampMode = 1 +Serial = SLES-52512 +Name = Headhunter - Redemption +Region = PAL-M4 --------------------------------------------- -Serial = SCKA-20050 -Name = Tales of Legendia -Region = NTSC-K +Serial = SLES-52515 +Name = Ultimate Casino +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SCKA-20051 -Name = Minna Daisuki Katamari Damacy -Region = NTSC-K -vuClampMode = 3 -mvuFlagSpeedHack = 0 +Serial = SLES-52516 +Name = World Fighting +Region = PAL-E --------------------------------------------- -Serial = SCKA-20052 -Name = Genji -Region = NTSC-K +Serial = SLES-52517 +Name = Radio Helicopter +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SCKA-20053 -Name = SOCOM II - U.S. Navy SEALs [PlayStation 2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52518 +Name = Motorbike King +Region = PAL-E Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD ---------------------------------------------- -Serial = SCKA-20054 -Name = Tales of Destiny 2 [PlayStation 2 Big Hit Series] -Region = NTSC-K ---------------------------------------------- -Serial = SCKA-20055 -Name = Mystic Nights -Region = NTSC-K +eeClampMode = 3 --------------------------------------------- -Serial = SCKA-20056 -Name = LuluRara - Powered by Zillerner [with USB microphone] -Region = NTSC-K +Serial = SLES-52519 +Name = Pink Pong +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCKA-20058 -Name = Bumpy Trot -Region = NTSC-K +Serial = SLES-52520 +Name = Volleyball Challenge +Region = PAL-E --------------------------------------------- -Serial = SCKA-20059 -Name = Soul Calibur III -Region = NTSC-K -Compat = 5 +Serial = SLES-52521 +Name = Adibou & Les Voleurs d'Energie +Region = PAL-M6 --------------------------------------------- -Serial = SCKA-20060 -Name = Ratchet - Deadlocked -Region = NTSC-K +Serial = SLES-52523 +Name = Cocoto - Platform Jumper +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20061 -Name = Wanda to Kyozou (Shadow of the Colossus) -Region = NTSC-K -Compat = 5 +Serial = SLES-52525 +Name = Mouse Trophy +Region = PAL-M5 --------------------------------------------- -Serial = SCKA-20062 -Name = Ape Escape 3 -Region = NTSC-K +Serial = SLES-52527 +Name = Harry Potter og Fangen fra Azkaban +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SCKA-20063 -Name = Sly Cooper 3 Honor Among Thieves -Region = NTSC-K -Compat = 5 +Serial = SLES-52531 +Name = Suffering, The +Region = PAL-G --------------------------------------------- -Serial = SCKA-20064 -Name = SOCOM 3 - U.S. Navy SEALs -Region = NTSC-K +Serial = SLES-52532 +Name = Aces of War +Region = PAL-E --------------------------------------------- -Serial = SCKA-20069 -Name = Siren 2 -Region = NTSC-K -XgKickHack = 1 //SPS. +Serial = SLES-52533 +Name = Zoo Puzzle +Region = PAL-E --------------------------------------------- -Serial = SCKA-20070 -Name = Ace Combat Zero - The Belkan War -Region = NTSC-K +Serial = SLES-52534 +Name = Crimson Tears +Region = PAL-M3 --------------------------------------------- -Serial = SCKA-20071 -Name = MLB '06 - The Show -Region = NTSC-K +Serial = SLES-52535 +Name = Rumble Roses +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCKA-20072 -Name = LuluRara 2 [with USB microphone] -Region = NTSC-K +Serial = SLES-52536 +Name = Shark Tale +Region = PAL-E +Compat = 2 --------------------------------------------- -Serial = SCKA-20073 -Name = Final Fantasy XII -Region = NTSC-J +Serial = SLES-52537 +Name = Shark Tale +Region = PAL-M3 --------------------------------------------- -Serial = SCKA-20078 -Name = Killzone [PlayStation 2 Big Hit Series] -Region = NTSC-K +Serial = SLES-52539 +Name = Shark Tale +Region = PAL-I --------------------------------------------- -Serial = SCKA-20079 -Name = Valkyrie Profile 2 - Silmeria -Region = NTSC-K +Serial = SLES-52541 +Name = Grand Theft Auto - San Andreas +Region = PAL-M5 Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SCKA-20081 -Name = Tekken 5 [PlayStation 2 Big Hit Series] -Region = NTSC-K -eeClampMode = 1 +Serial = SLES-52544 +Name = Trivial Pursuit Unhinged +Region = PAL-M3 --------------------------------------------- -Serial = SCKA-20086 -Name = Shin Onimusha - Dawn of Dreams [Disc1of2] -Region = NTSC-K +Serial = SLES-52545 +Name = Star Wars Battlefront +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCKA-20087 -Name = Shin Onimusha - Dawn of Dreams [Disc2of2] -Region = NTSC-K +Serial = SLES-52546 +Name = Star Wars Battlefront +Region = PAL-F --------------------------------------------- -Serial = SCKA-20090 -Name = God Hand -Region = NTSC-K -Compat = 5 +Serial = SLES-52547 +Name = Star Wars Battlefront +Region = PAL-G --------------------------------------------- -Serial = SCKA-20092 -Name = K-1 World Grand Prix 2006 -Region = NTSC-K +Serial = SLES-52551 +Name = Samurai Warriors +Region = PAL-E --------------------------------------------- -Serial = SCKA-20096 -Name = Barnyard -Region = NTSC-K +Serial = SLES-52552 +Name = Samurai Warriors +Region = PAL-F --------------------------------------------- -Serial = SCKA-20099 -Name = Persona 3 -Region = NTSC-K -VuClipFlagHack = 1 +Serial = SLES-52553 +Name = Samurai Warriors +Region = PAL-G --------------------------------------------- -Serial = SCKA-20101 -Name = Seiken Densetsu 4 (Dawn of Mana) -Region = NTSC-K -Compat = 5 +Serial = SLES-52554 +Name = Samurai Warriors +Region = PAL-I --------------------------------------------- -Serial = SCKA-20107 -Name = Odin Sphere -Region = NTSC-K +Serial = SLES-52555 +Name = Samurai Warriors +Region = PAL-S --------------------------------------------- -Serial = SCKA-20109 -Name = Persona 3 FES [Independent Starting Version] -Region = NTSC-K -VuClipFlagHack = 1 +Serial = SLES-52556 +Name = Crimson Sea 2 +Region = PAL-E --------------------------------------------- -Serial = SCKA-20114 -Name = Obscure II - The Aftermath -Region = NTSC-K +Serial = SLES-52557 +Name = Crimson Sea 2 +Region = PAL-F --------------------------------------------- -Serial = SCKA-20117 -Name = Super Robot Taisen OG - Original Generations Gaiden -Region = NTSC-K +Serial = SLES-52558 +Name = Crimson Sea 2 +Region = PAL-G --------------------------------------------- -Serial = SCKA-20120 -Name = Ratchet and Clank -Region = NTSC-K +Serial = SLES-52559 +Name = FIFA 2005 +Region = PAL-E --------------------------------------------- -Serial = SCKA-20132 -Name = Shin Megami Tensei: Persona 4 -Region = NTSC-K -Compat = 5 -VuClipFlagHack = 1 +Serial = SLES-52560 +Name = FIFA 2005 +Region = PAL-G --------------------------------------------- -Serial = SCKA-24008 -Name = SOCOM - U.S. Navy SEALs -Region = NTSC-K +Serial = SLES-52561 +Name = FIFA 2005 +Region = PAL-P-S --------------------------------------------- -Serial = SCKA-30001 -Name = Gran Turismo 4 -Region = NTSC-K -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52562 +Name = FIFA 2005 +Region = PAL-I --------------------------------------------- -Serial = SCKA-30002 -Name = God of War -Region = NTSC-K -Compat = 5 +Serial = SLES-52563 +Name = FIFA Football 2005 +Region = PAL-M6 --------------------------------------------- -Serial = SCKA-30006 -Name = God of War 2 -Region = NTSC-K -Compat = 5 +Serial = SLES-52567 +Name = Catwoman +Region = PAL-M7 --------------------------------------------- -Serial = SCPS-11001 -Name = I.Q. Remix -Region = NTSC-J +Serial = SLES-52568 +Name = Crash Twinsanity +Region = PAL-M5 Compat = 5 +XgKickHack = 1 //Fixes bad Geometry --------------------------------------------- -Serial = SCPS-11002 -Name = Fantavision -Region = NTSC-J +Serial = SLES-52569 +Name = Spyro - A Hero's Tail +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SCPS-11003 -Name = Ico -Region = NTSC-J +Serial = SLES-52570 +Name = Area 51 +Region = PAL-M5 Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. ---------------------------------------------- -Serial = SCPS-11004 -Name = Bikkuri Mouse -Region = NTSC-J ---------------------------------------------- -Serial = SCPS-11005 -Name = Sagashi ni Ikouyo - Go to Find It! -Region = NTSC-J --------------------------------------------- -Serial = SCPS-11006 -Name = Sky Gunner -Region = NTSC-J +Serial = SLES-52571 +Name = Pacific Air Warriors 2 - Dogfight +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SCPS-11007 -Name = Tsuganai -Region = NTSC-J +Serial = SLES-52572 +Name = Operation Air Assault +Region = PAL-E --------------------------------------------- -Serial = SCPS-11008 -Name = Boku to Mao -Region = NTSC-J -Compat = 4 -[patches = EE838B5C] - - comment=patches by Nachbrenner - - //Skip OP.PSS - patch=0,EE,001d6258,word,24020001 - -[/patches] +Serial = SLES-52573 +Name = Conflict - Global Storm +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-11009 -Name = Ka (Mosquito) -Region = NTSC-J -Compat = 4 +Serial = SLES-52576 +Name = Yu-Gi-Oh! - Capsule Monster Colisee +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-11010 -Name = Yoake no Mariko [with Microphone] -Region = NTSC-J +Serial = SLES-52579 +Name = Legends of Wrestling - Showdown +Region = PAL-E --------------------------------------------- -Serial = SCPS-11011 -Name = Check-i-TV -Region = NTSC-J +Serial = SLES-52581 +Name = Madden NFL 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-11012 -Name = Rimoko Koron -Region = NTSC-J +Serial = SLES-52584 +Name = Burnout 3 - Takedown +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SCPS-11013 -Name = Bravo Music -Region = NTSC-J -Compat = 5 +Serial = SLES-52585 +Name = Burnout 3 - Takedown +Region = PAL-F-G-I --------------------------------------------- -Serial = SCPS-11014 -Name = Pipo Saru (Ape Escape) 2001 -Region = NTSC-J +Serial = SLES-52587 +Name = Army Men - Sarge's War +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCPS-11015 -Name = Check-i-TV -Region = NTSC-J +Serial = SLES-52588 +Name = Mercenaries +Region = PAL-E --------------------------------------------- -Serial = SCPS-11016 -Name = Seigi no Mikata -Region = NTSC-J +Serial = SLES-52590 +Name = Mercenaries +Region = PAL-G --------------------------------------------- -Serial = SCPS-11017 -Name = Bravo Music - Christmas Edition -Region = NTSC-J +Serial = SLES-52591 +Name = Dynasty Warriors 4 - Empires +Region = PAL-E --------------------------------------------- -Serial = SCPS-11018 -Name = Yoake no Mariko -Region = NTSC-J +Serial = SLES-52592 +Name = Dynasty Warriors 4 - Empires +Region = PAL-G --------------------------------------------- -Serial = SCPS-11019 -Name = Bravo Music - Chou-Meikyokuban [Limited Edition] [Disc1of2] -Region = NTSC-J +Serial = SLES-52593 +Name = Dynasty Warriors 4 - Empires +Region = PAL-F --------------------------------------------- -Serial = SCPS-11020 -Name = Bravo Music - Chou-Meikyokuban [Limited Edition] [Disc2of2] -Region = NTSC-J +Serial = SLES-52594 +Name = U-Move SuperSports +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-11021 -Name = Yoake no Mariko 2nd Act -Region = NTSC-J +Serial = SLES-52598 +Name = Dancing Stage Fusion +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-11022 -Name = Yoake no Mariko 2nd Act -Region = NTSC-J +Serial = SLES-52599 +Name = Metal Slug 3 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-11023 -Name = Bravo Music - Chou-Meikyokuban -Region = NTSC-J +Serial = SLES-52600 +Name = Harry Potter and The Prisoner of Azkaban +Region = PAL-Unk --------------------------------------------- -Serial = SCPS-11024 -Name = Otostaz -Region = NTSC-J -Compat = 4 +Serial = SLES-52601 +Name = Ex Zeus +Region = PAL-E --------------------------------------------- -Serial = SCPS-11025 -Name = Space Fisherman -Region = NTSC-J +Serial = SLES-52602 +Name = GT Racers +Region = PAL-M5 Compat = 5 -vuClampMode = 3 --------------------------------------------- -Serial = SCPS-11026 -Name = Gacharoku -Region = NTSC-J +Serial = SLES-52603 +Name = Room Zoom - Race for Impact +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-11027 -Name = Mawaza -Region = NTSC-J +Serial = SLES-52605 +Name = Polar Express, The +Region = PAL-Unk --------------------------------------------- -Serial = SCPS-11028 -Name = Let's Bravo Music -Region = NTSC-J +Serial = SLES-52616 +Name = Video Poker & Blackjack +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-11029 -Name = Shibai Muchi -Region = NTSC-J +Serial = SLES-52617 +Name = Stock Car Speedway +Region = PAL-E --------------------------------------------- -Serial = SCPS-11030 -Name = Shibai Muchi [with Microphone] -Region = NTSC-J +Serial = SLES-52620 +Name = Guncom 2 +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCPS-11031 -Name = Kumauta -Region = NTSC-J +Serial = SLES-52621 +Name = Tony Hawk's Underground 2 +Region = PAL-E +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SCPS-11032 -Name = Vib Ripple -Region = NTSC-J -Compat = 5 +Serial = SLES-52622 +Name = Tony Hawk's Underground 2 +Region = PAL-M4 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SCPS-11033 -Name = Mojib-Ribbon -Region = NTSC-J +Serial = SLES-52624 +Name = X-Men Legends +Region = PAL-E +--------------------------------------------- +Serial = SLES-52625 +Name = X-Men Legends +Region = PAL-G +--------------------------------------------- +Serial = SLES-52628 +Name = NBA Ballers +Region = PAL-E +--------------------------------------------- +Serial = SLES-52630 +Name = Conflict - Vietnam +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCPS-11034 -Name = Gacharoku 2 -Region = NTSC-J +Serial = SLES-52631 +Name = Digimon Rumble Arena 2 +Region = PAL-M5 +Compat = 5 +FpuCompareHack = 1 --------------------------------------------- -Serial = SCPS-15001 -Name = Scandal -Region = NTSC-J -Compat = 2 +Serial = SLES-52636 +Name = Colin McRae Rally 2005 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15002 -Name = TV DJ -Region = NTSC-J -Compat = 4 +Serial = SLES-52637 +Name = TOCA Racer Driver 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15003 -Name = Sky Odyssey -Region = NTSC-J +Serial = SLES-52638 +Name = DTM Race Driver 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15004 -Name = Dark Cloud -Region = NTSC-J +Serial = SLES-52639 +Name = V8 Supercars 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15005 -Name = Phase Paradox -Region = NTSC-J +Serial = SLES-52641 +Name = Leisure Suit Larry: Magna Cum Laude (Uncut) +Region = PAL-E --------------------------------------------- -Serial = SCPS-15006 -Name = Popolocrois Story 3 [Limited Edition] -Region = NTSC-J +Serial = SLES-52642 +Name = Leisure Suit Larry: Magna cum Laude +Region = PAL-F --------------------------------------------- -Serial = SCPS-15007 -Name = Blood - The Last Vampire - Vol.1 Joukan -Region = NTSC-J -Compat = 5 +Serial = SLES-52643 +Name = Leisure Suit Larry: Magna Cum Laude +Region = PAL-G --------------------------------------------- -Serial = SCPS-15008 -Name = Blood - The Last Vampire - Vol.2 Gekan -Region = NTSC-J -Compat = 5 +Serial = SLES-52644 +Name = Leisure Suit Larry: Magna Cum Laude +Region = PAL-S --------------------------------------------- -Serial = SCPS-15009 -Name = Gran Turismo 3 - A-Spec -Region = NTSC-J +Serial = SLES-52645 +Name = Leisure Suit Larry: Magna cum Laude +Region = PAL-I --------------------------------------------- -Serial = SCPS-15010 -Name = Gran Turismo - Concept 2001 Tokyo -Region = NTSC-J -Compat = 5 +Serial = SLES-52646 +Name = Tom Clancy's Ghost Recon 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15011 -Name = Extermination -Region = NTSC-J +Serial = SLES-52647 +Name = Club Football - Manchester United 2005 +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-15012 -Name = Surveillance -Region = NTSC-J +Serial = SLES-52648 +Name = BVB 09 - Club Football 2005 - Borussia Dortmund +Region = PAL-G --------------------------------------------- -Serial = SCPS-15013 -Name = Poinie's Poin -Region = NTSC-J +Serial = SLES-52649 +Name = Om Droit au Bit - Club Football 2005 +Region = PAL-E-F --------------------------------------------- -Serial = SCPS-15014 -Name = Genshi no Kotoba -Region = NTSC-J +Serial = SLES-52650 +Name = Juventus - Club Football 2005 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15015 -Name = Toro to Kyuujitsu -Region = NTSC-J -Compat = 5 +Serial = SLES-52651 +Name = FC Barcelona - Club Football 2005 +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-15016 -Name = Minna no Golf 3 -Region = NTSC-J +Serial = SLES-52652 +Name = Liverpool FC - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15017 -Name = PaRappa the Rapper 2 -Region = NTSC-J +Serial = SLES-52653 +Name = Liverpool FC - Club Football 2005 +Region = PAL-Unk --------------------------------------------- -Serial = SCPS-15018 -Name = Train Simulator Real, The - Yamanote Sen -Region = NTSC-J +Serial = SLES-52654 +Name = Club Football - Real Madri 2005 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15019 -Name = Formula One 2001 -Region = NTSC-J +Serial = SLES-52655 +Name = FC Bayern Munich - Club Football 2005 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15020 -Name = Legaia 2 - Duel Saga -Region = NTSC-J +Serial = SLES-52656 +Name = AC Milan Club Football 2005 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15021 -Name = Jak & Daxter 2 -Region = NTSC-J +Serial = SLES-52657 +Name = Arsenal FC - Club Football 2005 +Region = PAL-E-F --------------------------------------------- -Serial = SCPS-15022 -Name = Dual Hearts -Region = NTSC-J +Serial = SLES-52658 +Name = Hamburg SV - Club Football 2005 +Region = PAL-G --------------------------------------------- -Serial = SCPS-15023 -Name = Wild ARMs - Advanced 3rd -Region = NTSC-J +Serial = SLES-52659 +Name = Paris Saint-Germain Club Football 2005 +Region = PAL-E-F --------------------------------------------- -Serial = SCPS-15024 -Name = Wild ARMs - Advanced 3rd -Region = NTSC-J +Serial = SLES-52660 +Name = Inter - Club Football 2005 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15025 -Name = Saru Get You 2 -Region = NTSC-J -Compat = 5 +Serial = SLES-52661 +Name = Ajax Club Football 2005 +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-15026 -Name = Boku no Natsuyasumi 2 -Region = NTSC-J +Serial = SLES-52662 +Name = Newcastle United - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15027 -Name = PoPoLoCrois - Hajimari no Bouken [Limited] -Region = NTSC-J +Serial = SLES-52663 +Name = Chelsea FC - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15028 -Name = PoPoLoCrois - Hajimari no Bouken -Region = NTSC-J +Serial = SLES-52664 +Name = Rangers FC - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15029 -Name = Xi (Sai) Jumbo -Region = NTSC-J +Serial = SLES-52665 +Name = Celtic FC - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15030 -Name = Fantavision -Region = NTSC-J +Serial = SLES-52666 +Name = Tottenham Hotspur - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15031 -Name = Train Simulator Real, The -Region = NTSC-J +Serial = SLES-52667 +Name = Birmingham City - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15032 -Name = Formula One 2002 -Region = NTSC-J +Serial = SLES-52668 +Name = Aston Villa FC - Club Football 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15033 -Name = Dark Chronicle -Region = NTSC-J +Serial = SLES-52669 +Name = Forgotten Realms - Demon Stone +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15034 -Name = This is Football 2003 -Region = NTSC-J +Serial = SLES-52670 +Name = Second Sight +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15035 -Name = Train Simulator Real, The - Keihin Keikyu -Region = NTSC-J +Serial = SLES-52671 +Name = Ghostmaster +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15036 -Name = Kaitou Sly Cooper -Region = NTSC-J +Serial = SLES-52673 +Name = NHL 2005 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15037 -Name = Ratchet & Clank -Region = NTSC-J +Serial = SLES-52674 +Name = Fussball Manager 2005 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15038 -Name = Operator's Side -Region = NTSC-J +Serial = SLES-52675 +Name = Hugo Cannon Cruise +Region = PAL-Unk --------------------------------------------- -Serial = SCPS-15039 -Name = Operator's Side -Region = NTSC-J +Serial = SLES-52678 +Name = Viewtiful Joe +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15040 -Name = Arc the Lad - Twilight of the Spirits [Limited Edition] -Region = NTSC-J +Serial = SLES-52680 +Name = Intellivision Lives - The History of Video Gaming +Region = PAL-E --------------------------------------------- -Serial = SCPS-15041 -Name = Arc the Lad - Seirei no Koukon -Region = NTSC-J +Serial = SLES-52684 +Name = Cyclone Circus - Power Sail Racing +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SCPS-15042 -Name = Deka Voice [with Microphone] -Region = NTSC-J +Serial = SLES-52685 +Name = Polar Express, The +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15043 -Name = Deka Voice -Region = NTSC-J +Serial = SLES-52686 +Name = Backyard Wrestling - There Goes the Neighborhood +Region = PAL-E --------------------------------------------- -Serial = SCPS-15044 -Name = SOCOM - U.S. Navy SEALs -Region = NTSC-J +Serial = SLES-52693 +Name = LMA Manager 2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-15045 -Name = Ka (Mosquito) - Let's Go Hawaiian -Region = NTSC-J -Compat = 5 +Serial = SLES-52694 +Name = BDFL Manager 2005 +Region = PAL-G --------------------------------------------- -Serial = SCPS-15046 -Name = Hungry Ghosts -Region = NTSC-J -Compat = 5 +Serial = SLES-52695 +Name = Roger Lemerre - La Selection des Champions +Region = PAL-F --------------------------------------------- -Serial = SCPS-15047 -Name = Dokodemo Issyo - Watashi na Ehon -Region = NTSC-J +Serial = SLES-52697 +Name = Manager de la Liga 2005 +Region = PAL-S --------------------------------------------- -Serial = SCPS-15049 -Name = Minna no Golf Online -Region = NTSC-J +Serial = SLES-52700 +Name = Jimmy Neutron - Attack of the Twonkies +Region = PAL-E --------------------------------------------- -Serial = SCPS-15050 -Name = Flipnic -Region = NTSC-J -Compat = 3 -[patches = 25433CBD] - - comment=patches by Nachbrenner - - // fix D3_CHCR (might be redundant) - patch=0,EE,0011c1b8,word,00000000 - // skip sceIpuSync - patch=0,EE,00208eb0,word,03e00008 - patch=0,EE,00208eb4,word,00000000 - // fix sceIpuRestartDMA - patch=0,EE,00208e04,word,00000000 - -[/patches] +Serial = SLES-52701 +Name = Future Tactics - The Uprising +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15051 -Name = MLB 2003 -Region = NTSC-J +Serial = SLES-52702 +Name = Psi-Ops - The Mindgate Conspiracy +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15052 -Name = Saints Seinaru Mamono -Region = NTSC-J +Serial = SLES-52703 +Name = Psi-Ops - The Mindgate Conspiracy +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15053 -Name = Siren -Region = NTSC-J +Serial = SLES-52705 +Name = Mortal Kombat - Deception +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCPS-15054 -Name = Chain Drive -Region = NTSC-J ---------------------------------------------- -Serial = SCPS-15055 -Name = Gran Turismo 4 - Prologue -Region = NTSC-J -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52706 +Name = Mortal Kombat - Deception +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15056 -Name = Ratchet & Clank 2 -Region = NTSC-J +Serial = SLES-52707 +Name = Monster Hunter +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15057 -Name = Jak & Daxter 2 -Region = NTSC-J +Serial = SLES-52709 +Name = Ty the Tazmanian Tiger 2 - Bush Rescue +Region = PAL-M7 --------------------------------------------- -Serial = SCPS-15058 -Name = Arc the Lad - Generation -Region = NTSC-J +Serial = SLES-52710 +Name = McFarlane's Evil Prophecy +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15059 -Name = Minna no Golf 4 -Region = NTSC-J +Serial = SLES-52711 +Name = Titeuf Mega Compet +Region = PAL-F --------------------------------------------- -Serial = SCPS-15060 -Name = Koufuku Sousakan -Region = NTSC-J +Serial = SLES-52713 +Name = NBA Live 2005 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15061 -Name = EyeToy - Play [with Camera] -Region = NTSC-J +Serial = SLES-52714 +Name = Board Games Gallery +Region = PAL-E --------------------------------------------- -Serial = SCPS-15062 -Name = Bakuso! Mountain Bikers -Region = NTSC-J +Serial = SLES-52716 +Name = Energy Thieves, The +Region = PAL-E --------------------------------------------- -Serial = SCPS-15063 -Name = Popolocrois - The Law of the Moon -Region = NTSC-J +Serial = SLES-52717 +Name = Brian Lara Cricket 2005 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-15064 -Name = Ghost in the Shell - Stand Alone Complex -Region = NTSC-J -Compat = 3 +Serial = SLES-52718 +Name = Fight Club +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15065 -Name = SOCOM II - U.S. Navy SEALs -Region = NTSC-J +Serial = SLES-52719 +Name = Under the Skin +Region = PAL-M5 Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SCPS-15066 -Name = Prince of Persia - The Sands of Time -Region = NTSC-J +Serial = SLES-52720 +Name = Ford Racing 3 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15067 -Name = Dokodemo Issyo - Toro to Nagare Boshi -Region = NTSC-J +Serial = SLES-52725 +Name = Need for Speed - Underground 2 +Region = PAL-M8 +Compat = 5 --------------------------------------------- -Serial = SCPS-15068 -Name = MLB 2004 -Region = NTSC-J +Serial = SLES-52726 +Name = NBA Live 2005 +Region = PAL-F --------------------------------------------- -Serial = SCPS-15069 -Name = Fish - Legend of Seven Waters and Gods -Region = NTSC-J +Serial = SLES-52727 +Name = NBA Live 2005 +Region = PAL-S --------------------------------------------- -Serial = SCPS-15070 -Name = EyeToy - Play [Game Only] -Region = NTSC-J +Serial = SLES-52729 +Name = Animaniacs - The Great Edgar Hunt +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15071 -Name = Minna no Golf Online -Region = NTSC-J +Serial = SLES-52730 +Name = DragonBall Z - Budokai 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15072 -Name = Gacha Mecha Stadium - Saru Battle -Region = NTSC-J +Serial = SLES-52731 +Name = One Piece - Round the Land! +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15073 -Name = EyeToy - Groov [with Camera] -Region = NTSC-J +Serial = SLES-52733 +Name = Driven to Destruction +Region = PAL-E --------------------------------------------- -Serial = SCPS-15074 -Name = Olympic Summer Games - Athens 2004 -Region = NTSC-J +Serial = SLES-52734 +Name = Worms Forts - Under Siege +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15075 -Name = DJ Box [Premium Kit] -Region = NTSC-J +Serial = SLES-52737 +Name = Obscure +Region = PAL-E --------------------------------------------- -Serial = SCPS-15076 -Name = EyeToy - HuriHuri Dance -Region = NTSC-J +Serial = SLES-52738 +Name = Obscure +Region = PAL-F-I +Compat = 5 --------------------------------------------- -Serial = SCPS-15077 -Name = EyeToy - Uki Uki Panic [with Camera] -Region = NTSC-J +Serial = SLES-52745 +Name = Hugo - CannonCruise +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-15078 -Name = EyeToy - Uki Uki Panic [Game Only] -Region = NTSC-J +Serial = SLES-52747 +Name = Dukes of Hazzard, The - The Return of General Lee +Region = PAL-E --------------------------------------------- -Serial = SCPS-15079 -Name = Bakufuu Slash! Kizna Arashi [with Camera] -Region = NTSC-J +Serial = SLES-52749 +Name = Habitrail - Hamster Ball +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-15080 -Name = Waga Ryuomiyo - Pride of the Dragon Peace -Region = NTSC-J +Serial = SLES-52750 +Name = Monster Trux Extreme +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-15081 -Name = Dokodemo Issyo - Toro to Ippai -Region = NTSC-J +Serial = SLES-52751 +Name = Offroad Extreme! +Region = PAL-E --------------------------------------------- -Serial = SCPS-15082 -Name = DJ Box -Region = NTSC-J +Serial = SLES-52752 +Name = Playboy - The Mansion +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15083 -Name = Formula One 2004 -Region = NTSC-J +Serial = SLES-52753 +Name = Flatout +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-15084 -Name = Ratchet & Clank 3 -Region = NTSC-J +Serial = SLES-52754 +Name = FlatOut +Region = PAL-G --------------------------------------------- -Serial = SCPS-15085 -Name = Kenran Butousai -Region = NTSC-J +Serial = SLES-52755 +Name = Blood Will Tell +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15086 -Name = Bakufuu Slash! Kizna Arashi [Game Only] -Region = NTSC-J +Serial = SLES-52760 +Name = Pro Evolution Soccer 4 +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SCPS-15087 -Name = Bleach - Erabareshi Tamashi -Region = NTSC-J +Serial = SLES-52761 +Name = Rocky - Legends +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCPS-15088 -Name = Bokura no Kazoku -Region = NTSC-J +Serial = SLES-52766 +Name = Godzilla - Save The Earth +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-15089 -Name = EyeToy - Play 2 [With Camera] -Region = NTSC-J +Serial = SLES-52767 +Name = Hugo - CannonCruise +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-15090 -Name = Sly Racoon 2 -Region = NTSC-J +Serial = SLES-52768 +Name = Commandos - Strike Force +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15091 -Name = Wild ARMs - The 4th Detonator -Region = NTSC-J +Serial = SLES-52773 +Name = Pool Shark 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15092 -Name = Wild ARMs - The 4th Detonator -Region = NTSC-J +Serial = SLES-52774 +Name = Sprint Car Challenge +Region = PAL-M6 +Compat = 2 --------------------------------------------- -Serial = SCPS-15093 -Name = Rule of Rose -Region = NTSC-J +Serial = SLES-52776 +Name = Junior Board Games +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCPS-15094 -Name = EyeToy - Play 2 [Game Only] -Region = NTSC-J +Serial = SLES-52778 +Name = Arcade, The +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCPS-15095 -Name = Genji - Dawn of the Samurai -Region = NTSC-J +Serial = SLES-52779 +Name = Poker Masters +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-15096 -Name = Saru Get You! 3 -Region = NTSC-J +Serial = SLES-52781 +Name = WWE SmackDown! vs. RAW +Region = PAL-E --------------------------------------------- -Serial = SCPS-15097 -Name = Wanda to Kyozou (Shadow of the Colossus) -Region = NTSC-J -Compat = 5 +Serial = SLES-52782 +Name = Call of Duty - Finest Hour +Region = PAL-E --------------------------------------------- -Serial = SCPS-15098 -Name = Formula One 2005 -Region = NTSC-J +Serial = SLES-52783 +Name = Call of Duty - Le Jour de Glorie +Region = PAL-F --------------------------------------------- -Serial = SCPS-15099 -Name = Ratchet & Clank - Giga Battle -Region = NTSC-J +Serial = SLES-52784 +Name = Call of Duty - Finest Hour +Region = PAL-G --------------------------------------------- -Serial = SCPS-15100 -Name = Ratchet & Clank 4th - GiriGiri Ginga no Giga Battle -Region = NTSC-J +Serial = SLES-52798 +Name = Vietcong - Purple Haze +Region = PAL-M4 +--------------------------------------------- +Serial = SLES-52799 +Name = Vietcong - Purple Haze +Region = PAL-E-I --------------------------------------------- -Serial = SCPS-15101 -Name = Bleach - Hanatareshi Yabou -Region = NTSC-J +Serial = SLES-52800 +Name = Pro Evolution Soccer 4 +Region = PAL-I --------------------------------------------- -Serial = SCPS-15102 -Name = Rogue Galaxy -Region = NTSC-J +Serial = SLES-52801 +Name = Lord of the Rings, The - The Third Age +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-15103 -Name = Gunparade Orchestra - Shiro no Shou - Aomori Penguin Densetsu [Limited Edition] -Region = NTSC-J +Serial = SLES-52802 +Name = Lord of the Rings, The - The Third Age +Region = PAL-F --------------------------------------------- -Serial = SCPS-15104 -Name = Gunparade Orchestra - Shiro no Shou - Aomori Penguin Densetsu -Region = NTSC-J +Serial = SLES-52803 +Name = Lord of the Rings, The - The Third Age (Der Herr der Ringe - Das dritte Zeitalter) +Region = PAL-G --------------------------------------------- -Serial = SCPS-15105 -Name = Tourist Trophy - The Real Riding Simulator -Region = NTSC-J +Serial = SLES-52804 +Name = Lord of the Rings, The - The Third Age +Region = PAL-I --------------------------------------------- -Serial = SCPS-15106 -Name = Siren 2 -Region = NTSC-J -Compat = 4 -XgKickHack = 1 //SPS. -[patches = 626552EB] - comment=swapping a COP2 op into place to make the flags work without delays - patch=0,EE,0013AB64,word,48449000 - patch=0,EE,0013AB6C,word,4BC949FF -[/patches] +Serial = SLES-52805 +Name = Lord of the Rings, The - The Third Age +Region = PAL-S --------------------------------------------- -Serial = SCPS-15107 -Name = Gunparade Orchestra - Midori no Shou [Limited Edition] -Region = NTSC-J +Serial = SLES-52807 +Name = Lemony Snicket's A Series of Unfortunate Events +Region = PAL-E --------------------------------------------- -Serial = SCPS-15108 -Name = Gunparade Orchestra - Midori no Shou -Region = NTSC-J +Serial = SLES-52808 +Name = Lemony Snicket's A Series of Unfortunate Events +Region = PAL-F --------------------------------------------- -Serial = SCPS-15109 -Name = Gunparade Orchestra - Ao no Shou [Limited Edition] -Region = NTSC-J +Serial = SLES-52809 +Name = Lemony Snicket - Schauriger Schlamassel +Region = PAL-G --------------------------------------------- -Serial = SCPS-15110 -Name = Gunparade Orchestra - Ao no Shou -Region = NTSC-J +Serial = SLES-52810 +Name = Lemony Snicket's Una Serie Disfortunati Eventi +Region = PAL-I --------------------------------------------- -Serial = SCPS-15111 -Name = Brave Story - Wataru no Bouken -Region = NTSC-J +Serial = SLES-52811 +Name = Get on da Mic +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-15112 -Name = Blood+ Souyoku Battle Rinbukyoku -Region = NTSC-J +Serial = SLES-52812 +Name = Disney-Pixar's The Incredibles +Region = PAL-E Compat = 5 +[patches = EBDB6E4B] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010ec20,word,00000000 + comment=- This disc has the same CRC as SLUS-20905, the NTSC-U disc. +[/patches] --------------------------------------------- -Serial = SCPS-15113 -Name = Minna no Tennis -Region = NTSC-J +Serial = SLES-52813 +Name = Incredibles, The +Region = PAL-DU-F --------------------------------------------- -Serial = SCPS-15114 -Name = Soukou Kihei Armodyne -Region = NTSC-J +Serial = SLES-52814 +Name = Incredibles, The +Region = PAL-I --------------------------------------------- -Serial = SCPS-15115 -Name = Saru Get You - Million Monkeys -Region = NTSC-J -Compat = 5 +Serial = SLES-52815 +Name = Disney-Pixar's The Incredibles +Region = PAL-G --------------------------------------------- -Serial = SCPS-15116 -Name = Bleach - Blade Battlers -Region = NTSC-J -Compat = 5 +Serial = SLES-52816 +Name = Incredibles, The +Region = PAL-S +[patches = 197641AA] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010ec20,word,00000000 +[/patches] --------------------------------------------- -Serial = SCPS-15117 -Name = Formula One 2006 -Region = NTSC-J +Serial = SLES-52820 +Name = Incredibles, The +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SCPS-15118 -Name = Wild ARMs - The Vth Vanguard -Region = NTSC-J +Serial = SLES-52821 +Name = Incredibles, The +Region = PAL-P --------------------------------------------- -Serial = SCPS-15119 -Name = Bleach - Blade Battlers 2nd -Region = NTSC-J +Serial = SLES-52822 +Name = Prince of Persia - Warrior Within +Region = PAL-M6 Compat = 5 -OPHFLagHack = 1 // Special moves "Bankai" hang otherwise --------------------------------------------- -Serial = SCPS-15120 -Name = Ratchet & Clank 5 Gekitotsu! Dodeka Ginga no Mirimiri Gundan -Region = NTSC-J +Serial = SLES-52824 +Name = Furry Tales +Region = PAL-E-F --------------------------------------------- -Serial = SCPS-17001 -Name = Gran Turismo 4 -Region = NTSC-J +Serial = SLES-52825 +Name = Lemony Snicket's A Series of Unfortunate Events +Region = PAL-S +--------------------------------------------- +Serial = SLES-52831 +Name = Syberia 2 +Region = PAL-M5 Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works --------------------------------------------- -Serial = SCPS-17002 -Name = Wild ARMs - Alter Code F -Region = NTSC-J +Serial = SLES-52832 +Name = MegaMan X - Command Mission +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-17008 -Name = Nike - Gran Turismo [Limited Edition - 8 inch] -Region = NTSC-J +Serial = SLES-52834 +Name = Sega Superstars Eyetoy Bundle +Region = PAL-M4 +Compat = 1 --------------------------------------------- -Serial = SCPS-17009 -Name = Nike - Gran Turismo [Limited Edition - 9 inch] -Region = NTSC-J +Serial = SLES-52835 +Name = Mummy, The +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-17010 -Name = Nike - Gran Turismo [Limited Edition - 10 inch] -Region = NTSC-J +Serial = SLES-52836 +Name = Knight Rider 2 +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCPS-17011 -Name = Nike - Gran Turismo [Limited Edition - 11 inch] -Region = NTSC-J +Serial = SLES-52843 +Name = Garfield +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-17013 -Name = Rogue Galaxy [Directors Cut] -Region = NTSC-J +Serial = SLES-52844 +Name = Midway Arcade Treasures 2 +Region = PAL-E --------------------------------------------- -Serial = SCPS-19101 -Name = Mosquito [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52845 +Name = Gadget and the Gadgetinis +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-19102 -Name = Boku to Maou [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52852 +Name = Capcom Fighting Jam +Region = PAL-Unk --------------------------------------------- -Serial = SCPS-19103 -Name = Ico [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52853 +Name = Miami Vice +Region = PAL-M6 Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCPS-19104 -Name = Pipo Saru 2001 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52854 +Name = Capcom Fighting Jam +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-19105 -Name = Bravo Music [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52857 +Name = Fairly Odd Parents, The - Shadow Showdown +Region = PAL-E --------------------------------------------- -Serial = SCPS-19151 -Name = Ico [PlayStation 2 The Best] -Region = NTSC-J -Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. +Serial = SLES-52858 +Name = Cocoto Kart Racer +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19152 -Name = Saru Get You! 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52859 +Name = Project - Snowblind +Region = PAL-E --------------------------------------------- -Serial = SCPS-19153 -Name = Pipo Saru 2001 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52861 +Name = King Arthur +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19201 -Name = PaRappa the Rapper 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52863 +Name = Pinball Hall of Fame +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SCPS-19202 -Name = Extermination [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52864 +Name = MX World Tour +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19203 -Name = Dark Cloud [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52867 +Name = Spindrive Ping Pong +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-19204 -Name = Zegaia - Duel Saga [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52868 +Name = Viewtiful Joe 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19205 -Name = Wild ARMs - Advanced 3rd [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52872 +Name = Constantine +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19206 -Name = Ape Escape 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52874 +Name = Dark Wind (with Gametrak) +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19207 -Name = Popolocrois Story - Hajime no Bouken [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52876 +Name = King of Fighters 2000-2001 +Region = PAL-E --------------------------------------------- -Serial = SCPS-19208 -Name = Gran Turismo - Concept 2001 Tokyo [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52877 +Name = Haunting Ground +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-19209 -Name = Boku no Summer Vacation [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52882 +Name = Stolen +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SCPS-19210 -Name = Jack & Dexter [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52884 +Name = Duel Masters +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19211 -Name = Ratchet & Clank [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52885 +Name = Sega Superstars +Region = PAL-G --------------------------------------------- -Serial = SCPS-19213 -Name = Operator's Side [PlayStation 2 The Best] [with Microphone] -Region = NTSC-J +Serial = SLES-52886 +Name = Power Rangers Dino Thunder +Region = PAL-E --------------------------------------------- -Serial = SCPS-19214 -Name = Operator's Side [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52887 +Name = Power Rangers Dino Thunder +Region = PAL-F --------------------------------------------- -Serial = SCPS-19215 -Name = Dark Chronicle [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52888 +Name = Brothers in Arms: Road to Hill 30 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19251 -Name = Wild ARMs - Alter Code F [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52889 +Name = Disney's Winnie the Pooh Rumbly Tumbly Adventure +Region = PAL-M6 --------------------------------------------- -Serial = SCPS-19252 -Name = Gran Turismo 4 [PlayStation 2 The Best] -Region = NTSC-J -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52895 +Name = Spongebob Squarepants - The Movie +Region = PAL-E +Compat = 5 +[patches = 536FEB77] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010f3e0,word,00000000 +[/patches] --------------------------------------------- -Serial = SCPS-19253 -Name = Wild ARMs - Alter Code F [PlayStation 2 The Best - Reprint] -Region = NTSC-J +Serial = SLES-52896 +Name = Spongebob Squarepants - The Movie +Region = PAL-F-G --------------------------------------------- -Serial = SCPS-19301 -Name = Minna no Golf 4 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52898 +Name = King of Fighters - Maximum Impact +Region = PAL-E-JP --------------------------------------------- -Serial = SCPS-19302 -Name = Ratchet & Clank 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52900 +Name = Rapala Pro Fishing +Region = PAL-E --------------------------------------------- -Serial = SCPS-19303 -Name = Boku no Natsuyasumi 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52902 +Name = Arcade Classics Vol.1 +Region = PAL-E --------------------------------------------- -Serial = SCPS-19304 -Name = Gran Turismo 4 - Prologue [PlayStation 2 The Best] -Region = NTSC-J -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLES-52906 +Name = Spongebob and Friends - Movin' +Region = PAL-E --------------------------------------------- -Serial = SCPS-19305 -Name = Siren [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52908 +Name = Urbz, The - Sims in the City +Region = PAL-M11 +Compat = 5 --------------------------------------------- -Serial = SCPS-19306 -Name = Dark Chronicle [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52909 +Name = UEFA Champions League 2004-2005 +Region = PAL-E-G --------------------------------------------- -Serial = SCPS-19307 -Name = Popolocrois - The First Adventure [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52910 +Name = UEFA Champions League 2005 +Region = PAL-F-G --------------------------------------------- -Serial = SCPS-19308 -Name = Saru Get You 2 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52911 +Name = UEFA Champions League 2005 +Region = PAL-I-S --------------------------------------------- -Serial = SCPS-19309 -Name = Ratchet & Clank 3 - Up Your Arsenal [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52912 +Name = UEFA Champions League 2005 +Region = PAL-E-DU --------------------------------------------- -Serial = SCPS-19310 -Name = Ratchet & Clank [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52913 +Name = Suikoden IV +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-19311 -Name = Saru Get You 3 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52915 +Name = Shark Tale +Region = PAL-SE --------------------------------------------- -Serial = SCPS-19312 -Name = Siren [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52917 +Name = Scaler +Region = PAL-E-F +Compat = 5 --------------------------------------------- -Serial = SCPS-19313 -Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52918 +Name = Scaler +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-19315 -Name = EyeToy - Play [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52919 +Name = NRL Rugby League 2 +Region = PAL-E --------------------------------------------- -Serial = SCPS-19316 -Name = Ratchet & Clank [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52921 +Name = Rogue Trooper +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19317 -Name = Ratchet & Clank 2 - Going Commando [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52922 +Name = EyeToy - Disney Move +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19318 -Name = Genji - Dawn of the Samurai [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52927 +Name = Grand Theft Auto - San Andreas +Region = PAL-G --------------------------------------------- -Serial = SCPS-19319 -Name = Minna no Golf 4 [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52931 +Name = Legend of Kay +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-19320 -Name = Wanda to Kyozou (Shadow of the Colossus) [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52939 +Name = Airborne Troops - Countdown to D-Day +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-19321 -Name = Ratchet & Clank 4th - GiriGiri Gingano Giga-Battle [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52940 +Name = S.L.A.I. Steel Lancer Arena International +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-19322 -Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best - Reprint] -Region = NTSC-J +Serial = SLES-52941 +Name = Gungrave - Overdose +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-19323 -Name = Wild ARMs - The 4th Detonator [PlayStation 2 The Best - Reprint] -Region = NTSC-J +Serial = SLES-52942 +Name = Midnight Club 3 - DUB Edition +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19324 -Name = Tourist Trophy - The Real Riding Simulator [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52943 +Name = ESPN NFL 2K5 +Region = PAL-E --------------------------------------------- -Serial = SCPS-19325 -Name = Ape Escape - Million Monkeys [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52944 +Name = Robotech - Invasion +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19326 -Name = Siren 2 [PlayStation 2 The Best] -Region = NTSC-J -XgKickHack = 1 //SPS. +Serial = SLES-52949 +Name = Arcade Action - 30 Games +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-19327 -Name = Ape Escape 3 [PlayStation 2 the Best - Reprint] -Region = NTSC-J +Serial = SLES-52950 +Name = Shadow of Rome +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-19328 -Name = Ratchet & Clank 4th Girigiri Gingano Giga-battle [PlayStation 2 the Best - Reprint] -Region = NTSC-J +Serial = SLES-52951 +Name = Phantom Brave +Region = PAL-E +Compat = 5 +--------------------------------------------- +Serial = SLES-52954 +Name = WWII - Tank Battles +Region = PAL-E --------------------------------------------- -Serial = SCPS-19329 -Name = Bleach - Blade Battlers [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52955 +Name = Deadly Strike +Region = PAL-E --------------------------------------------- -Serial = SCPS-19330 -Name = Bleach - Hanatareshi Yabou [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52956 +Name = Action Girlz Racing +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-19331 -Name = Bleach - Selected Soul [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52957 +Name = Urban Extreme +Region = PAL-E --------------------------------------------- -Serial = SCPS-19332 -Name = Minna no Tennis [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-52958 +Name = Premier Manager 2004-2005 +Region = PAL-E --------------------------------------------- -Serial = SCPS-51001 -Name = Moto GP 2 -Region = NTSC-J +Serial = SLES-52960 +Name = Premier Manager 2004-2005 +Region = PAL-F --------------------------------------------- -Serial = SCPS-51004 -Name = Bravo Music -Region = NTSC-J +Serial = SLES-52961 +Name = Premier Manager 2004-2005 +Region = PAL-I --------------------------------------------- -Serial = SCPS-51005 -Name = Samurai -Region = NTSC-J +Serial = SLES-52963 +Name = Cold Winter +Region = PAL-M4 +vuClampMode = 2 //fixes rainbow graphics --------------------------------------------- -Serial = SCPS-51006 -Name = Alpine Racer 3 -Region = NTSC-J +Serial = SLES-52964 +Name = NanoBreaker +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-51008 -Name = Wave Rally -Region = NTSC-J +Serial = SLES-52965 +Name = Outlaw Golf 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-51009 -Name = Underwater Unit -Region = NTSC-J +Serial = SLES-52966 +Name = ESPN NHL 2K5 +Region = PAL-E --------------------------------------------- -Serial = SCPS-51010 -Name = Shikigami no Shiro -Region = NTSC-J +Serial = SLES-52967 +Name = Guilty Gear X2 Reloaded +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-51011 -Name = Ragingbless -Region = NTSC-J +Serial = SLES-52968 +Name = Burnout 2 - Point of Impact +Region = PAL-Unk +Compat = 5 --------------------------------------------- -Serial = SCPS-51012 -Name = Gigantic Drive -Region = NTSC-J +Serial = SLES-52973 +Name = Ski Racing 2005 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-51013 -Name = Torneko's Adventure 3 -Region = NTSC-J +Serial = SLES-52974 +Name = GoldenEye - Rogue Agent +Region = PAL-M4 --------------------------------------------- -Serial = SCPS-51014 -Name = Ninja Assault -Region = NTSC-J +Serial = SLES-52975 +Name = GoldenEye - Au Service du Mal +Region = PAL-F --------------------------------------------- -Serial = SCPS-51015 -Name = Super Puzzle Bobble 2 -Region = NTSC-J +Serial = SLES-52976 +Name = GoldenEye - Rogue Agent +Region = PAL-G --------------------------------------------- -Serial = SCPS-51016 -Name = Space Fishermen -Region = NTSC-J -vuClampMode = 3 +Serial = SLES-52977 +Name = GoldenEye - Rogue Agent +Region = PAL-S --------------------------------------------- -Serial = SCPS-55001 -Name = Ico -Region = NTSC-J -Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. +Serial = SLES-52978 +Name = La Pucelle Tactics +Region = PAL-E --------------------------------------------- -Serial = SCPS-55002 -Name = Zero -Region = NTSC-J +Serial = SLES-52980 +Name = Big Mutha Truckers 2 +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-55003 -Name = Vampire Night -Region = NTSC-J -EETimingHack = 1 +Serial = SLES-52982 +Name = NFL Street 2 +Region = PAL-E --------------------------------------------- -Serial = SCPS-55004 -Name = Jack & Dexter - The Precursor Legacy -Region = NTSC-J +Serial = SLES-52983 +Name = Fitness Fun +Region = PAL-E --------------------------------------------- -Serial = SCPS-55005 -Name = Gran Turismo - Concept 2001 Tokyo -Region = NTSC-J +Serial = SLES-52984 +Name = Panzer Front Ausf B +Region = PAL-E --------------------------------------------- -Serial = SCPS-55006 -Name = Wild ARMs - Advanced 3rd -Region = NTSC-J +Serial = SLES-52985 +Name = Spongebob Squarepants - The Movie +Region = PAL-G +[patches = B3C11E2D] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010f3e0,word,00000000 +[/patches] --------------------------------------------- -Serial = SCPS-55007 -Name = Gran Turismo 3 - A-Spec -Region = NTSC-J +Serial = SLES-52986 +Name = Spongebob Squarepants - The Movie +Region = PAL-S +[patches = 34DA05D2] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010f3e0,word,00000000 +[/patches] --------------------------------------------- -Serial = SCPS-55008 -Name = Thunderstrike -Region = NTSC-J +Serial = SLES-52988 +Name = MegaMan X8 +Region = PAL-M5 +// reads Command Mission save for bonus boss +MemCardFilter = SLES-52988/SLES-52832 --------------------------------------------- -Serial = SCPS-55010 -Name = Grandia Extreme -Region = NTSC-J +Serial = SLES-52989 +Name = Blowout +Region = PAL-E --------------------------------------------- -Serial = SCPS-55011 -Name = Dual Hearts -Region = NTSC-J +Serial = SLES-52993 +Name = TimeSplitters - Future Perfect +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-55012 -Name = Grandia 2 -Region = NTSC-J +Serial = SLES-52998 +Name = Sonic Mega Collection Plus +Region = PAL-M5 +Compat = 5 +// two games unlock by having a Sonic Heroes save +MemCardFilter = SLES-52998/SLES-51950 --------------------------------------------- -Serial = SCPS-55013 -Name = Soul Reaver 2 - Legacy of Kain -Region = NTSC-J +Serial = SLES-52999 +Name = RC Toy Machines +Region = PAL-E --------------------------------------------- -Serial = SCPS-55014 -Name = Armored Core 3 -Region = NTSC-J +Serial = SLES-53000 +Name = Crazy Golf +Region = PAL-E --------------------------------------------- -Serial = SCPS-55015 -Name = Zettai Zetsumei Toshi -Region = NTSC-J +Serial = SLES-53001 +Name = NBA Street 3 +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-55016 -Name = Jet de Go! 2 -Region = NTSC-J +Serial = SLES-53002 +Name = Samurai Warriors Xtreme Legends +Region = PAL-E --------------------------------------------- -Serial = SCPS-55017 -Name = Tekken 4 -Region = NTSC-J -Compat = 3 +Serial = SLES-53003 +Name = Samurai Warriors Xtreme Legends +Region = PAL-F --------------------------------------------- -Serial = SCPS-55018 -Name = Kingdom of Scribbling -Region = NTSC-J +Serial = SLES-53004 +Name = Samurai Warriors Xtreme Legends +Region = PAL-G --------------------------------------------- -Serial = SCPS-55019 -Name = Star Ocean 3 - Till the End of Time -Region = NTSC-J -Compat = 5 -VuAddSubHack = 1 +Serial = SLES-53005 +Name = Monster Trux - Off-Road Edition +Region = PAL-E --------------------------------------------- -Serial = SCPS-55020 -Name = Kengo 2 -Region = NTSC-J +Serial = SLES-53006 +Name = Hamster Heroes +Region = PAL-E --------------------------------------------- -Serial = SCPS-55021 -Name = Super Robot Wars Impact -Region = NTSC-J +Serial = SLES-53007 +Name = Tom Clancy's Splinter Cell - Chaos Theory +Region = PAL-M5 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SCPS-55022 -Name = Surveillance -Region = NTSC-J +Serial = SLES-53011 +Name = Gallop Racer 2 +Region = PAL-E --------------------------------------------- -Serial = SCPS-55023 -Name = Otostaz -Region = NTSC-J +Serial = SLES-53012 +Name = Tenchu - Fatal Shadows +Region = PAL-E --------------------------------------------- -Serial = SCPS-55024 -Name = Armored Core 2 - Another Age -Region = NTSC-J +Serial = SLES-53013 +Name = Tenchu - Fatal Shadows +Region = PAL-F --------------------------------------------- -Serial = SCPS-55025 -Name = Eve of Extinction -Region = NTSC-J +Serial = SLES-53014 +Name = Tenchu - Fatal Shadows +Region = PAL-G --------------------------------------------- -Serial = SCPS-55026 -Name = Gundam Giren's Ambition -Region = NTSC-J +Serial = SLES-53015 +Name = Tenchu - Fatal Shadows +Region = PAL-I --------------------------------------------- -Serial = SCPS-55027 -Name = Runabout 3 - Neo Age -Region = NTSC-J +Serial = SLES-53016 +Name = Tenchu - Fatal Shadows +Region = PAL-S +Compat = 5 --------------------------------------------- -Serial = SCPS-55028 -Name = Popolocrois Story - Hajime no Bouken -Region = NTSC-J +Serial = SLES-53017 +Name = Teenage Mutant Ninja Turtles 2 - Battle Nexus +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-55029 -Name = dot Hack - Vol.1 -Region = NTSC-J +Serial = SLES-53020 +Name = Ghost in the Shell - Stand Alone Complex +Region = PAL-M5 +[patches = BF6F101F] + comment=Rearranging COP2 ops to avoid macflag bad stuff + // Solves door problems, possibly other issues later on (nobody ever got that far :P) + patch=0,EE,0010BC88,word,48468800 + patch=0,EE,0010BC8C,word,4bec682c + patch=0,EE,0010BC90,word,4b8d617d + patch=0,EE,0010BC98,word,4a6d617c + patch=0,EE,0012B2CC,word,48468800 + patch=0,EE,0012B2D0,word,4bec682c + patch=0,EE,0012B2D4,word,4b8d617d + patch=0,EE,0012B2DC,word,4a6d617c + patch=0,EE,0012B5F4,word,48468800 + patch=0,EE,0012B5F8,word,4bec682c + patch=0,EE,0012B5FC,word,4b8d617d + patch=0,EE,0012B604,word,4a6d617c + patch=0,EE,001B0B58,word,48468800 + patch=0,EE,001B0B5C,word,4bec682c + patch=0,EE,001B0B68,word,4b8d617d + patch=0,EE,001BF5FC,word,48588800 + patch=0,EE,001BF60C,word,4a0002ff + patch=0,EE,001BFBB8,word,48588800 + patch=0,EE,001BFBC8,word,4a0002ff + patch=0,EE,001BF818,word,48588800 + patch=0,EE,001BF828,word,4a0002ff + patch=0,EE,001C017C,word,48588800 + patch=0,EE,001C018C,word,4a0002ff +[/patches] --------------------------------------------- -Serial = SCPS-55030 -Name = First Step Victorious Boxers [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-53021 +Name = Gunbird - Special Edition +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SCPS-55031 -Name = Ghost Vibration -Region = NTSC-J +Serial = SLES-53022 +Name = ESPN NBA 2K5 +Region = PAL-E --------------------------------------------- -Serial = SCPS-55032 -Name = Fantavision - For You and Me -Region = NTSC-J +Serial = SLES-53023 +Name = RTL Ski Jump 2005 +Region = PAL-E-G --------------------------------------------- -Serial = SCPS-55035 -Name = Ape Escape 2 -Region = NTSC-J +Serial = SLES-53024 +Name = Altered Beast +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-55040 -Name = G-Breaker 2 - Doumei no Hangeki -Region = NTSC-J +Serial = SLES-53025 +Name = Red Ninja - End of Honor +Region = PAL-E --------------------------------------------- -Serial = SCPS-55041 -Name = Memories Off -Region = NTSC-J +Serial = SLES-53026 +Name = Red Ninja - End of Honor +Region = PAL-E --------------------------------------------- -Serial = SCPS-55042 -Name = dot Hack - Vol.2 -Region = NTSC-J +Serial = SLES-53027 +Name = Championship Manager 5 +Region = PAL-M4 // Nordic --------------------------------------------- -Serial = SCPS-55043 -Name = Fatal Frame -Region = NTSC-J +Serial = SLES-53028 +Name = Hitman - Blood Money +Region = PAL-E --------------------------------------------- -Serial = SCPS-55044 -Name = Energy Airforce -Region = NTSC-J +Serial = SLES-53029 +Name = Hitman - Blood Money +Region = PAL-F --------------------------------------------- -Serial = SCPS-55045 -Name = Poinie's Poin 3 -Region = NTSC-J +Serial = SLES-53030 +Name = Hitman - Blood Money +Region = PAL-G --------------------------------------------- -Serial = SCPS-55046 -Name = Ultraman Fighting Evolution 2 -Region = NTSC-J +Serial = SLES-53031 +Name = Hitman - Blood Money +Region = PAL-I --------------------------------------------- -Serial = SCPS-55047 -Name = Formula One 2002 -Region = NTSC-J +Serial = SLES-53032 +Name = Hitman - Blood Money +Region = PAL-S --------------------------------------------- -Serial = SCPS-55048 -Name = Dark Chronicle -Region = NTSC-J +Serial = SLES-53035 +Name = Masters of the Universe - He-Man - Defender of Greyskull +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SCPS-55049 -Name = King of Fighters 2000, The -Region = NTSC-J +Serial = SLES-53036 +Name = Tak 2 - The Stuff of Dreams +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-55050 -Name = Tales of Destiny 2 -Region = NTSC-J +Serial = SLES-53037 +Name = Super Monkey Ball Deluxe +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SCPS-55901 -Name = Xenosaga Episode I - Der Wille zur Macht -Region = NTSC-J +Serial = SLES-53038 +Name = Devil May Cry 3 - Dante's Awakening +Region = PAL-M5 +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SCPS-55902 -Name = Gran Turismo - Concept 2002 Tokyo-Geneva -Region = NTSC-J +Serial = SLES-53039 +Name = Champions - Return to Arms // aka "Champions of Norrath 2" +Region = PAL-M4 +Compat = 4 +// allows import of characters from first game +MemCardFilter = SLES-53039/SLES-52325 --------------------------------------------- -Serial = SCPS-55903 -Name = Gran Turismo - Concept 2002 Tokyo-Geneva -Region = NTSC-J +Serial = SLES-53041 +Name = RTL Ski Alpine 2005 +Region = PAL-E-G --------------------------------------------- -Serial = SCPS-56001 -Name = Ico -Region = NTSC-K +Serial = SLES-53044 +Name = Juiced +Region = PAL-M4 Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. --------------------------------------------- -Serial = SCPS-56002 -Name = Tekken Tag Tournament -Region = NTSC-K +Serial = SLES-53045 +Name = Street Racing Syndicate +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SCPS-56005 -Name = Gran Turismo Concept 2002 Tokyo-Seoul -Region = NTSC-K +Serial = SLES-53046 +Name = CT Special Forces - Fire for Effect +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-56006 -Name = Tekken 4 -Region = NTSC-K +Serial = SLES-53047 +Name = Punisher, The +Region = PAL-E-F +--------------------------------------------- +Serial = SLES-53049 +Name = Punisher, The +Region = PAL-I-S +--------------------------------------------- +Serial = SLES-53052 +Name = Robots +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-53058 +Name = Ricky Ponting International Cricket +Region = PAL-E Compat = 5 -[patches = 35B4028B] - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,00290b24,word,24200001 - patch=0,EE,00290d24,word,00000000 -[/patches] --------------------------------------------- -Serial = SCPS-56008 -Name = Fatal Frame -Region = NTSC-K +Serial = SLES-53059 +Name = Samurai Showdown V +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SCPS-56011 -Name = U - Underwater Unit -Region = NTSC-J +Serial = SLES-53060 +Name = Asterix & Obelix XXL 2 - Mission Las Vegum +Region = PAL-M3 --------------------------------------------- -Serial = SCPS-56012 -Name = Raw Danger -Region = NTSC-K +Serial = SLES-53061 +Name = Atari Anthology +Region = PAL-E --------------------------------------------- -Serial = SCPS-56014 -Name = Gungrave -Region = NTSC-K -Compat = 5 +Serial = SLES-53062 +Name = Yu Yu Hakuhso - Dark Tournament +Region = PAL-M5 --------------------------------------------- -Serial = SCPS-56015 -Name = Ninja Assault -Region = NTSC-J +Serial = SLES-53064 +Name = FIFA Street +Region = PAL-M7 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25002 -Name = Shinobi -Region = NTSC-Unk +Serial = SLES-53065 +Name = SNK vs. Capcom - SVC Chaos +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLAJ-25003 -Name = Unlimited SaGa -Region = NTSC-Unk +Serial = SLES-53073 +Name = Michigan : Report from Hell +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25004 -Name = Kingdom Hearts - Final Mix -Region = NTSC-Unk +Serial = SLES-53074 +Name = Soccer Life +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25005 -Name = World Soccer Winning Eleven 7 -Region = NTSC-Unk +Serial = SLES-53075 +Name = Area 51 +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25006 -Name = Virtual Fighter 4 - Evolution -Region = NTSC-Unk +Serial = SLES-53076 +Name = Triggerman +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25007 -Name = NBA 2K3 -Region = NTSC-Unk +Serial = SLES-53078 +Name = Spy vs. Spy +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25008 -Name = Initial D - Special Stage -Region = NTSC-Unk +Serial = SLES-53079 +Name = Ys - The Ark of Napishtim +Region = PAL-M5 +EETimingHack = 1 --------------------------------------------- -Serial = SLAJ-25011 -Name = Shin Sangoku Musou 3 -Region = NTSC-Unk +Serial = SLES-53080 +Name = Extreme Sprint 3010 +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25012 -Name = Final Fantasy X-2 -Region = NTSC-Unk +Serial = SLES-53082 +Name = World Championship Snooker 2005 +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25014 -Name = Virtual On - Marz -Region = NTSC-Unk +Serial = SLES-53084 +Name = Fight Night Round 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLAJ-25016 -Name = Sangokushi Senki 2 -Region = NTSC-Unk +Serial = SLES-53087 +Name = TOCA Race Driver 3 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25018 -Name = Shutokou Battle 01 -Region = NTSC-Unk +Serial = SLES-53088 +Name = DTM Race Driver 3 +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25023 -Name = Shin Sangoku Musou 3 - Mushoden -Region = NTSC-Unk +Serial = SLES-53089 +Name = V8 Supercars 3 +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25026 -Name = Kunoichi Shinobi -Region = NTSC-Unk +Serial = SLES-53090 +Name = Circuit Blasters +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25027 -Name = Sonic Heroes -Region = NTSC-Unk +Serial = SLES-53091 +Name = Predator - Concrete Jungle +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25031 -Name = Kunoichi - Shinobu -Region = NTSC-Unk +Serial = SLES-53092 +Name = Motocross Mania 3 +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25033 -Name = Puyo Puyo Fever -Region = NTSC-Unk +Serial = SLES-53093 +Name = Cold Winter +Region = PAL-G +vuClampMode = 2 //fixes rainbow graphics --------------------------------------------- -Serial = SLAJ-25034 -Name = Sakura Taisen - Mysterious Paris -Region = NTSC-Unk +Serial = SLES-53094 +Name = Rugby 2005 +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25035 -Name = Sengoku Musou -Region = NTSC-Unk +Serial = SLES-53095 +Name = Rugby 2005 +Region = PAL-F --------------------------------------------- -Serial = SLAJ-25037 -Name = Astro Boy Atom -Region = NTSC-Unk +Serial = SLES-53096 +Name = Worms 4 - Mayhem +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25039 -Name = Beni no Umi 2 -Region = NTSC-Unk +Serial = SLES-53098 +Name = Conspiracy - Weapons of Mass Destruction +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25040 -Name = Shin Sangoku Musou 3 - Empires -Region = NTSC-Unk +Serial = SLES-53099 +Name = Pilot Down - Behind Enemy Lines +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25042 -Name = Virtua Fighter - Cyber Generation -Region = NTSC-Unk +Serial = SLES-53100 +Name = Scooby Doo! Unmasked +Region = PAL-M4 --------------------------------------------- -Serial = SLAJ-25045 -Name = Sakura Taisen V - Episode 0 -Region = NTSC-Ch-J +Serial = SLES-53104 +Name = Tom Clancy's Rainbow Six - Lockdown +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25046 -Name = NBA Live 2005 -Region = NTSC-Unk +Serial = SLES-53106 +Name = MX vs. ATV Unleashed +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25047 -Name = Dororo -Region = NTSC-Ch-J +Serial = SLES-53107 +Name = Cabela's Big Game Hunter 2005 Adventures +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25048 -Name = Sengoku Musou Mushoden -Region = NTSC-Unk +Serial = SLES-53108 +Name = American Chopper +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25049 -Name = Kengo 3 -Region = NTSC-Unk +Serial = SLES-53114 +Name = Full Spectrum Warrior +Region = PAL-M5 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLAJ-25051 -Name = Lord of the Rings - The Third Age -Region = NTSC-Unk +Serial = SLES-53119 +Name = Kessen III +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25052 -Name = Urbz, The - Sims in the City -Region = NTSC-Unk +Serial = SLES-53120 +Name = Kessen III +Region = PAL-F --------------------------------------------- -Serial = SLAJ-25053 -Name = Burnout 3 - Takedown -Region = NTSC-Unk +Serial = SLES-53121 +Name = Kessen III +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLAJ-25055 -Name = Def Jam - Fight for N.Y. -Region = NTSC-Unk +Serial = SLES-53124 +Name = Project Snowblind +Region = PAL-M4 --------------------------------------------- -Serial = SLAJ-25056 -Name = Shining Tears -Region = NTSC-Unk +Serial = SLES-53125 +Name = Enthusia - Professional Racing +Region = PAL-M5 +eeClampMode = 3 --------------------------------------------- -Serial = SLAJ-25057 -Name = Kessen III -Region = NTSC-Unk +Serial = SLES-53127 +Name = Teenage Mutant Ninja Turtles - Mutant Melee +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25058 -Name = GoldenEye - Rogue Agent -Region = NTSC-Unk +Serial = SLES-53129 +Name = Tak 2 - The Staff of Dreams +Region = PAL-F-G --------------------------------------------- -Serial = SLAJ-25059 -Name = NBA Street V3 -Region = NTSC-Unk +Serial = SLES-53130 +Name = World Championship Poker +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25060 -Name = Project Altered Beast -Region = NTSC-Unk +Serial = SLES-53131 +Name = Full Spectrum Warrior +Region = PAL-E +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLAJ-25063 -Name = Shin Sangoku Mosou 4 -Region = NTSC-Unk +Serial = SLES-53138 +Name = Outlaw Volleyball - Remixed +Region = PAL-M4 --------------------------------------------- -Serial = SLAJ-25064 -Name = MVP Baseball 2005 -Region = NTSC-Unk +Serial = SLES-53139 +Name = Alien Humanoid +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25066 -Name = Burnout Revenge - Battle Racing Ignited -Region = NTSC-Unk +Serial = SLES-53140 +Name = Choro Q +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25068 -Name = Shin Sangoku Musou 4 - Moushouden -Region = NTSC-Unk +Serial = SLES-53141 +Name = X-Treme Quads +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLAJ-25072 -Name = Matrix, The - Path of Neo -Region = NTSC-Unk +Serial = SLES-53142 +Name = Doomsday Racers +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25073 -Name = Resident Evil 4 -Region = NTSC-Unk +Serial = SLES-53143 +Name = Fantastic Four +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25075 -Name = Need for Speed - Most Wanted [Black Edition] -Region = NTSC-Unk +Serial = SLES-53144 +Name = Four Fantastiques, Les +Region = PAL-F --------------------------------------------- -Serial = SLAJ-25076 -Name = Harry Potter and the Goblet of Fire -Region = NTSC-Unk +Serial = SLES-53145 +Name = Fantastic Four +Region = PAL-G --------------------------------------------- -Serial = SLAJ-25077 -Name = Sengoku Musou 2 -Region = NTSC-Unk +Serial = SLES-53146 +Name = I Fantastici Quattro +Region = PAL-I --------------------------------------------- -Serial = SLAJ-25078 -Name = Black -Region = NTSC-Unk -vuClampMode = 0 +Serial = SLES-53147 +Name = Four Fantasticos, Los +Region = PAL-S --------------------------------------------- -Serial = SLAJ-25079 -Name = Shin Sangoku Musou 4 - Empires -Region = NTSC-Unk +Serial = SLES-53148 +Name = Fruitfall +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25080 -Name = Godfather, The -Region = NTSC-Unk +Serial = SLES-53150 +Name = 10 Pin - Champions' Alley +Region = PAL-M6 --------------------------------------------- -Serial = SLAJ-25081 -Name = FIFA World Cup - Germany 2006 -Region = NTSC-Unk +Serial = SLES-53151 +Name = Juiced +Region = PAL-I --------------------------------------------- -Serial = SLAJ-25084 -Name = Sengoku Musou 2 - Empires -Region = NTSC-Unk +Serial = SLES-53152 +Name = Mashed Fully Loaded +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25087 -Name = NBA Live '07 -Region = NTSC-Unk +Serial = SLES-53154 +Name = The Bard's Tale +Region = PAL-M8 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLAJ-25088 -Name = FIFA Soccer 2007 -Region = NTSC-Unk +Serial = SLES-53155 +Name = Star Wars - Episode III - Revenge of the Sith +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25091 -Name = Need for Speed - Carbon -Region = NTSC-Unk +Serial = SLES-53156 +Name = Star Wars - Episode III - La Revanche des Sith +Region = PAL-F --------------------------------------------- -Serial = SLAJ-25092 -Name = Shin Sangoku Musou 4 [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-53157 +Name = Star Wars - Episode III - Die Rache der Sith +Region = PAL-G --------------------------------------------- -Serial = SLAJ-25093 -Name = Sangoku Musou [PlayStation 2 The Best] -Region = NTSC-Unk +Serial = SLES-53158 +Name = Cold Fear +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25094 -Name = Burnout Dominator -Region = NTSC-Unk +Serial = SLES-53172 +Name = Strike Force Bowling +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-25095 -Name = Medal of Honor - Vanguard -Region = NTSC-Unk +Serial = SLES-53174 +Name = Golden Age of Racing +Region = PAL-E +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLAJ-25096 -Name = Musou Orochi -Region = NTSC-Unk +Serial = SLES-53175 +Name = Top Spin +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLAJ-25099 -Name = NBA Live '08 -Region = NTSC-Unk +Serial = SLES-53186 +Name = International Super Karts +Region = PAL-E --------------------------------------------- -Serial = SLAJ-25115 -Name = World Soccer Winning Eleven 2011 -Region = NTSC-Unk +Serial = SLES-53190 +Name = Girl Zone +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLAJ-35001 -Name = Sakura Wars -Region = NTSC-Unk +Serial = SLES-53191 +Name = Kaido Racer +Region = PAL-M5 --------------------------------------------- -Serial = SLAJ-35003 -Name = Sakura Taisen - Atsuki Chishioni Ni -Region = NTSC-Unk +Serial = SLES-53192 +Name = Nightmare Before Christmas, The - Tim Burton's +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-15003 -Name = Shikigami no Shiro II -Region = NTSC-K +Serial = SLES-53194 +Name = LEGO Star Wars +Region = PAL-M7 --------------------------------------------- -Serial = SLKA-15004 -Name = Gunbird - Premium Package -Region = NTSC-J +Serial = SLES-53195 +Name = Punisher, The +Region = PAL-E --------------------------------------------- -Serial = SLKA-15005 -Name = Strikers 1945 III -Region = NTSC-J -Compat = 5 +Serial = SLES-53196 +Name = Destroy All Humans! +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-15007 -Name = GrowLanser2 -Region = NTSC-K -Compat = 5 -OPHFLagHack = 1 +Serial = SLES-53197 +Name = Destroy All Humans! +Region = PAL-G --------------------------------------------- -Serial = SLKA-15008 -Name = Choro Q HG2 -Region = NTSC-E-F-G +Serial = SLES-53199 +Name = 25 to Life +Region = PAL-E --------------------------------------------- -Serial = SLKA-15021 -Name = GrowLanser3 -Region = NTSC-K +Serial = SLES-53200 +Name = DragonBall Z - Budokai Tenkaichi +Region = PAL-M6 Compat = 5 -OPHFLagHack = 1 --------------------------------------------- -Serial = SLKA-15032 -Name = Gradius V -Region = NTSC-K +Serial = SLES-53201 +Name = Saint Seiya Chapter Sanctuary +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLKA-25012 -Name = Devil May Cry 2 Dante -Region = NTSC-K -Compat = 5 +Serial = SLES-53203 +Name = Punisher, The +Region = PAL-R --------------------------------------------- -Serial = SLKA-25013 -Name = Devil May Cry 2 Lucia -Region = NTSC-K -Compat = 5 +Serial = SLES-53218 +Name = Dancing Stage MAX +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25015 -Name = Evolution Skateboarding -Region = NTSC-K +Serial = SLES-53219 +Name = Winx Club +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25021 -Name = Shinobi -Region = NTSC-M3 -Compat = 5 +Serial = SLES-53221 +Name = l'Entraineur 5 +Region = PAL-F --------------------------------------------- -Serial = SLKA-25024 -Name = Lilo & Stitch Experiment -Region = NTSC-K +Serial = SLES-53222 +Name = Scudetto 5 +Region = PAL-I --------------------------------------------- -Serial = SLKA-25026 -Name = Chaos Legion -Region = NTSC-K +Serial = SLES-53223 +Name = Championship Manager 5 +Region = PAL-P --------------------------------------------- -Serial = SLKA-25033 -Name = Gregory Horror Show -Region = NTSC-K -Compat = 1 +Serial = SLES-53224 +Name = Championship Manager 5 +Region = PAL-S --------------------------------------------- -Serial = SLKA-25035 -Name = Mobile Suit Gundam - Lost War Chronicles -Region = NTSC-K +Serial = SLES-53225 +Name = Dreamworks' Madagascar +Region = PAL-E --------------------------------------------- -Serial = SLKA-25038 -Name = Gun Survivor 4 - Biohazard - Heroes Never Die -Region = NTSC-K +Serial = SLES-53226 +Name = Dreamworks' Madagascar +Region = PAL-F-G +Compat = 5 --------------------------------------------- -Serial = SLKA-25041 -Name = Armored Core 3 Silent Line -Region = NTSC-K +Serial = SLES-53227 +Name = Madagascar +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25042 -Name = Tamamayu Monogatari 2 Horobi no Mushi -Region = NTSC-K +Serial = SLES-53233 +Name = Assault Suits Valken +Region = PAL-E --------------------------------------------- -Serial = SLKA-25043 -Name = Virtua Fighter 4 - Evolution -Region = NTSC-K +Serial = SLES-53234 +Name = Samurai Western +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLKA-25046 -Name = Dragonball Z -Region = NTSC-K ---------------------------------------------- -Serial = SLKA-25048 -Name = Makai Senki Disgaea -Region = NTSC-K +Serial = SLES-53235 +Name = Syberia II +Region = PAL-R Compat = 5 --------------------------------------------- -Serial = SLKA-25049 -Name = Metal Slug 3 -Region = NTSC-K +Serial = SLES-53236 +Name = Buzzrod Fishing Fantasy +Region = PAL-E --------------------------------------------- -Serial = SLKA-25051 -Name = Clock Tower 3 -Region = NTSC-K -Compat = 5 +Serial = SLES-53237 +Name = Fire Heroes +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25052 -Name = Air Ranger 2 - Rescue Helicopter -Region = NTSC-K +Serial = SLES-53238 +Name = Premier Manager 2005-2006 +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25060 -Name = I.Q. Remix+ - Intelligent Qube -Region = NTSC-K +Serial = SLES-53242 +Name = Madagascar +Region = PAL-Unk --------------------------------------------- -Serial = SLKA-25062 -Name = Dragonball Z 2 -Region = NTSC-K +Serial = SLES-53246 +Name = Madagascar +Region = PAL-S +--------------------------------------------- +Serial = SLES-53280 +Name = 7 Sins +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLKA-25063 -Name = Kaido Battle -Region = NTSC-K +Serial = SLES-53281 +Name = Fantastic Four +Region = PAL-DU --------------------------------------------- -Serial = SLKA-25064 -Name = Tenchu 3 Wrath of Heaven -Region = NTSC-K +Serial = SLES-53282 +Name = Harvest Fishing +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25066 -Name = Zone of the Enders: The 2nd Runner SE -Region = NTSC-K +Serial = SLES-53284 +Name = Guilty Gear Isuka +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25067 -Name = Unlimited Saga -Region = NTSC-K +Serial = SLES-53287 +Name = Tom Clancy's Splinter Cell - Chaos Theory +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25070 -Name = Guity Gear XX Reload - The Midnight Carnival -Region = NTSC-J-K +Serial = SLES-53296 +Name = Ford Mustang - The Legend Lives +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLKA-25071 -Name = Tantei Jinguji Saburo 8 Inocent Black -Region = NTSC-K +Serial = SLES-53297 +Name = 7 Sins +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25077 -Name = Culdicept II - Expansion -Region = NTSC-K +Serial = SLES-53299 +Name = Delta Force - Black Hawk Down +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25081 -Name = SD Gundam G Generation Neo -Region = NTSC-K +Serial = SLES-53300 +Name = SOCOM 3 - U.S. Navy SEALs +Region = PAL-Unk --------------------------------------------- -Serial = SLKA-25082 -Name = Castlevania Lament of Innocence -Region = NTSC-K +Serial = SLES-53301 +Name = Bomberman Hardball +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25087 -Name = FIFA Soccer 2004 -Region = NTSC-J -Compat = 4 +Serial = SLES-53303 +Name = Skijumping 2006 +Region = PAL-E-G --------------------------------------------- -Serial = SLKA-25091 -Name = Hanjuku Hero vs. 3D -Region = NTSC-K +Serial = SLES-53309 +Name = Transformers +Region = PAL-Unk +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLKA-25092 -Name = Onimusha Buraiden -Region = NTSC-K +Serial = SLES-53311 +Name = Graffiti Kingdom +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25093 -Name = Onimusha 3 Demon Siege -Region = NTSC-K +Serial = SLES-53317 +Name = Black Market Bowling +Region = PAL-E --------------------------------------------- -Serial = SLKA-25100 -Name = Dragon Quest V Dragon Quarter -Region = NTSC-K -Compat = 5 +Serial = SLES-53318 +Name = Crazy Golf - World Tour +Region = PAL-M6 --------------------------------------------- -Serial = SLKA-25103 -Name = Neon Genesis Evangelion 2 -Region = NTSC-K +Serial = SLES-53319 +Name = Resident Evil Outbreak - File #2 +Region = PAL-M5 +// reads and writes to Outbreak File #1 +MemCardFilter = SLES-53319/SCES-50987/SLES-51589 --------------------------------------------- -Serial = SLKA-25112 -Name = King of Fighters 2001, The -Region = NTSC-K +Serial = SLES-53320 +Name = S.C.A.R. - Squadra Corse Alfa Romeo +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25115 -Name = Rockman X7 -Region = NTSC-K +Serial = SLES-53322 +Name = Obscure +Region = PAL-R --------------------------------------------- -Serial = SLKA-25125 -Name = SNK vs. Capcom - Chaos -Region = NTSC-K +Serial = SLES-53332 +Name = Medal of Honor - European Assault +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLKA-25130 -Name = Bloody Roar 4 -Region = NTSC-K +Serial = SLES-53333 +Name = Medal of Honor - Les Faucons de Guerre +Region = PAL-F --------------------------------------------- -Serial = SLKA-25131 -Name = Project Altered Beast -Region = NTSC-K +Serial = SLES-53334 +Name = Medal of Honor - European Assault +Region = PAL-G --------------------------------------------- -Serial = SLKA-25132 -Name = Mobile Suit Gundam Encounters in Space -Region = NTSC-K +Serial = SLES-53335 +Name = Medal of Honor - European Assault +Region = PAL-I --------------------------------------------- -Serial = SLKA-25133 -Name = AirForce Delta Strike -Region = NTSC-K -Compat = 1 +Serial = SLES-53336 +Name = Medal of Honor - European Assault +Region = PAL-S --------------------------------------------- -Serial = SLKA-25134 -Name = NBA Street v3 -Region = NTSC-K +Serial = SLES-53338 +Name = Victorious Boxers 2 - Fighting Spirit +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25135 -Name = Kunoichi -Region = NTSC-K +Serial = SLES-53339 +Name = Dynasty Warriors 5 +Region = PAL-E +--------------------------------------------- +Serial = SLES-53341 +Name = Dynasty Warriors 5 +Region = PAL-G Compat = 5 --------------------------------------------- -Serial = SLKA-25139 -Name = Fu-un Shinsengumi -Region = NTSC-K +Serial = SLES-53342 +Name = EA Sports Cricket 2005 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25144 -Name = Final Fantasy X-2 -Region = NTSC-K -Compat = 5 +Serial = SLES-53344 +Name = Gerrilla Strike +Region = PAL-E --------------------------------------------- -Serial = SLKA-25149 -Name = Silent Hill 4 The Room -Region = NTSC-K +Serial = SLES-53346 +Name = DragonBall Z - Budokai 3 [Collector's Edition] +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLKA-25150 -Name = Bujingai -Region = NTSC-K +Serial = SLES-53350 +Name = Sonic Gems Collection +Region = PAL-M5 +Compat = 5 +// Vectorman unlocks by having a Mega Collection or Heroes save +MemCardFilter = SLES-53350/SLES-52998/SLES-51950 --------------------------------------------- -Serial = SLKA-25152 -Name = Hajime no Ippo All-Stars -Region = NTSC-K +Serial = SLES-53351 +Name = SSX On Tour +Region = PAL-E --------------------------------------------- -Serial = SLKA-25153 -Name = Winning Eleven 10 - Liveware Edition -Region = NTSC-K +Serial = SLES-53354 +Name = Superbike GP +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25159 -Name = Astro Boy -Region = NTSC-K +Serial = SLES-53356 +Name = Colosseum - Road to Freedom +Region = PAL-E --------------------------------------------- -Serial = SLKA-25160 -Name = Shin Megami Tensei III: Nocturne Maniax -Region = NTSC-K -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level +Serial = SLES-53357 +Name = Colosseum - Road to Freedom +Region = PAL-E --------------------------------------------- -Serial = SLKA-25165 -Name = Mobile Suit Gundam - Seed Destiny - Rengou vs. Z.A.F.T. II Plus -Region = NTSC-K -eeRoundMode = 1 -FpuNegDivHack = 1 +Serial = SLES-53360 +Name = Alarm for Cobra 11 Vol.2 - Hot Pursuit +Region = PAL-E --------------------------------------------- -Serial = SLKA-25166 -Name = Sengoku Musou -Region = NTSC-K +Serial = SLES-53361 +Name = Stealth Force - The War on Terror +Region = PAL-E-S --------------------------------------------- -Serial = SLKA-25167 -Name = King of Fighters XI, The -Region = NTSC-K +Serial = SLES-53362 +Name = Alpine Skiing 2005 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25170 -Name = SD Gundam G Generation Seed -Region = NTSC-K +Serial = SLES-53363 +Name = Shin Megami Tensei: Lucifer's Call +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLKA-25171 -Name = Guon -Region = NTSC-K +Serial = SLES-53366 +Name = Killer 7 +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLKA-25175 -Name = Transformers -Region = NTSC-K +Serial = SLES-53367 +Name = Dodgeball +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25181 -Name = Energy Airforce Aim Strike -Region = NTSC-K +Serial = SLES-53368 +Name = Splatter Master +Region = PAL-E --------------------------------------------- -Serial = SLKA-25182 -Name = Hajime no Ippo2 Victorious Road -Region = NTSC-K +Serial = SLES-53369 +Name = Twenty-2 Party +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25183 -Name = Street Fighter - Anniversary Collection -Region = NTSC-K +Serial = SLES-53370 +Name = Real World Golf [with Gametrak] +Region = PAL-F --------------------------------------------- -Serial = SLKA-25186 -Name = King of Fighters, The - Maximum Impact [Limited Edition] -Region = NTSC-K +Serial = SLES-53371 +Name = Real World Golf [with Gametrak] +Region = PAL-E --------------------------------------------- -Serial = SLKA-25198 -Name = Tenchu Kurenai -Region = NTSC-K -Compat = 5 +Serial = SLES-53373 +Name = Madagascar +Region = PAL-DU --------------------------------------------- -Serial = SLKA-25199 -Name = Kengo 3 -Region = NTSC-K -Compat = 5 +Serial = SLES-53374 +Name = X-Men Legends II - Rise of Apocalypse +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25200 -Name = SSX 3 [PlayStation 2 - Big Hit Series] -Region = NTSC-K +Serial = SLES-53377 +Name = X-Men Legends II - Rise of Apocalypse +Region = PAL-I-S --------------------------------------------- -Serial = SLKA-25201 -Name = Armored Core Nexus Evolution DISC1 -Region = NTSC-K +Serial = SLES-53380 +Name = Metal Slug 4 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25202 -Name = Armored Core Nexus Revolution DISC2 -Region = NTSC-K +Serial = SLES-53381 +Name = King of Fighters 2002 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25204 -Name = Showdown - Legends of Wrestling -Region = NTSC-K +Serial = SLES-53382 +Name = King of Fighters 2003 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25205 -Name = DragonBall Z 3 -Region = NTSC-K +Serial = SLES-53383 +Name = Metal Slug 5 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25207 -Name = Sakura Taisen V - Episode 0 - Samurai Girl of Wild -Region = NTSC-K +Serial = SLES-53386 +Name = Charlie and the Chocolate Factory +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLKA-25208 -Name = From TV Animation - One Piece - Round the Land! -Region = NTSC-K +Serial = SLES-53387 +Name = Batman Begins +Region = PAL-M7 --------------------------------------------- -Serial = SLKA-25213 -Name = Berserk -Region = NTSC-K +Serial = SLES-53390 +Name = Ultimate Spider-Man +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25214 -Name = Final Fantasy X - International [PlayStation 2 - Big Hit Series] -Region = NTSC-K -IPUWaitHack = 1 ---------------------------------------------- -Serial = SLKA-25215 -Name = Shining Wild -Region = NTSC-K +Serial = SLES-53391 +Name = Ultimate Spider-Man +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25216 -Name = Gitaroo-Man [PlayStation 2 - Big Hit Series] -Region = NTSC-K +Serial = SLES-53393 +Name = Spartan Total Warrior +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLKA-25217 -Name = Shinging Tears -Region = NTSC-K +Serial = SLES-53398 +Name = Zombie Zone +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25218 -Name = Hitman - Contracts -Region = NTSC-K +Serial = SLES-53399 +Name = Yakuza Fury +Region = PAL-E --------------------------------------------- -Serial = SLKA-25219 -Name = Monster Hunter G -Region = NTSC-K -Compat = 5 +Serial = SLES-53402 +Name = Taxi Rider +Region = PAL-E +Compat = 4 --------------------------------------------- -Serial = SLKA-25221 -Name = Busin Zero -Region = NTSC-K +Serial = SLES-53403 +Name = Demolition Girl +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25222 -Name = Rockman X8 -Region = NTSC-K ---------------------------------------------- -Serial = SLKA-25224 -Name = Detective Saburou Jinguji 9 - Kind of Blue -Region = NTSC-K +Serial = SLES-53405 +Name = Digimon World 4 +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25225 -Name = Dororo -Region = NTSC-K +Serial = SLES-53406 +Name = Party Girls +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25227 -Name = Neo Contra -Region = NTSC-K +Serial = SLES-53407 +Name = Street Boyz +Region = PAL-E --------------------------------------------- -Serial = SLKA-25232 -Name = Naruto Naruthimetto Hero International -Region = NTSC-K +Serial = SLES-53408 +Name = Fighting Angels +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25233 -Name = Sonic - Mega Collection Plus -Region = NTSC-K +Serial = SLES-53411 +Name = Kuon +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25243 -Name = Medal of Honor - European Assault -Region = NTSC-K +Serial = SLES-53414 +Name = Echo Night - Beyond +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25244 -Name = WWE SmackDown! vs. Raw -Region = NTSC-K +Serial = SLES-53415 +Name = Call of Duty 2 - Big Red One +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25246 -Name = The Bard's Tale -Region = NTSC-K +Serial = SLES-53416 +Name = Call of Duty 2 - Big Red One +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25249 -Name = Ys - The Ark of Napishtim [with Guide Book] -Region = NTSC-K -EETimingHack = 1 +Serial = SLES-53417 +Name = Call of Duty 2 - Big Red One +Region = PAL-G --------------------------------------------- -Serial = SLKA-25251 -Name = Metal Gear Solid 3 - Snake Eater -Region = NTSC-K +Serial = SLES-53418 +Name = Tak - The Great JuJu Challenge +Region = PAL-Unk --------------------------------------------- -Serial = SLKA-25252 -Name = Forgotten Realms - Demon Stone -Region = NTSC-K +Serial = SLES-53419 +Name = LA Rush +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25254 -Name = Digimon Rumble Arena 2 -Region = NTSC-K -Compat = 5 -FpuCompareHack = 1 +Serial = SLES-53424 +Name = Dead to Rights 2 +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25255 -Name = Mobile Suit Gundam - Seed - Never Ending Tomorrow -Region = NTSC-K +Serial = SLES-53430 +Name = Incredible Hulk 2, The - Ultimate Destruction +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25257 -Name = Fu-un Bakumatsu Den -Region = NTSC-K +Serial = SLES-53433 +Name = NHL '06 +Region = PAL-M6 --------------------------------------------- -Serial = SLKA-25258 -Name = The Story of the Hero Yoshitsune -Region = NTSC-K -Compat = 5 +Serial = SLES-53434 +Name = WWI - Red Baron +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25259 -Name = Swords of Destiny -Region = NTSC-K +Serial = SLES-53435 +Name = SAS Anti-Terror Force +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLKA-25261 -Name = Tsukiyo ni Saraba -Region = NTSC-K +Serial = SLES-53436 +Name = YetiSports Arctic Adventures +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25263 -Name = NanoBreaker -Region = NTSC-J +Serial = SLES-53438 +Name = Taito Legends +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLKA-25265 -Name = Devil May Cry 3 -Region = NTSC-K -eeRoundMode = 0 +Serial = SLES-53439 +Name = Crash Tag Team Racing +Region = PAL-M6 --------------------------------------------- -Serial = SLKA-25266 -Name = Sangokushi IX [PlayStation 2 - Big Hit Series] -Region = NTSC-K +Serial = SLES-53441 +Name = Heroes of the Pacific +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25268 -Name = Mobile Suit Gundam - Gundam vs. Z-Gundam -Region = NTSC-K +Serial = SLES-53443 +Name = Warriors, The +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25270 -Name = Armored Core - Formula Front -Region = NTSC-K +Serial = SLES-53444 +Name = Pro Evolution Soccer 5 +Region = PAL-Unk --------------------------------------------- -Serial = SLKA-25275 -Name = King of Fighters 2002-2003, The -Region = NTSC-K +Serial = SLES-53446 +Name = Arcade USA +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25279 -Name = Hello Kitty - Rescue Mission -Region = NTSC-K +Serial = SLES-53452 +Name = Trixie in Toyland +Region = PAL-E --------------------------------------------- -Serial = SLKA-25280 -Name = Ryu ga Gotoku 2 [Disc1of2] -Region = NTSC-K +Serial = SLES-53457 +Name = Evil Dead - Regeneration +Region = PAL-E --------------------------------------------- -Serial = SLKA-25281 -Name = Ryu ga Gotoku 2 [Disc2of2] -Region = NTSC-K +Serial = SLES-53458 +Name = Shin Megami Tensei: Digital Devil Saga +Region = PAL-E +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLKA-25284 -Name = Sakura Taisen 3 -Region = NTSC-K -Compat = 1 +Serial = SLES-53459 +Name = Marc Ecko's Getting Up - Contents Under Pressure +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25287 -Name = Metal Slug 4&5 -Region = NTSC-K +Serial = SLES-53461 +Name = Sega Classics Collection +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLKA-25289 -Name = Shin Sangoku Musou 4 -Region = NTSC-K +Serial = SLES-53462 +Name = Matrix, The - Path of Neo +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25290 -Name = Super Monkey Ball Deluxe -Region = NTSC-K +Serial = SLES-53463 +Name = NHL '06 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25291 -Name = Chains of Power -Region = NTSC-K +Serial = SLES-53466 +Name = Il Grande Quiz sul Calcio Italiano +Region = PAL-I --------------------------------------------- -Serial = SLKA-25296 -Name = Inuyasha - Feudal Combat -Region = NTSC-K +Serial = SLES-53468 +Name = Family Boardgames +Region = PAL-M6 --------------------------------------------- -Serial = SLKA-25297 -Name = Taito Memories - Joukan [Special Package] -Region = NTSC-K +Serial = SLES-53471 +Name = LMA Manager 2006 +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25298 -Name = Winning Eleven 9 -Region = NTSC-K +Serial = SLES-53473 +Name = Incredibles, The - Rise of the Underminer +Region = PAL-M3 --------------------------------------------- -Serial = SLKA-25299 -Name = From TV Animation - One Piece - Grand Battle! Combat Rush -Region = NTSC-K +Serial = SLES-53474 +Name = Incredibles, The - Rise of the Underminer +Region = PAL-M3 +[patches = F3AE68FC] + //Patch By Prafull + //fix hang at loading screen + patch=1,EE,001110e0,word,00000000 +[/patches] --------------------------------------------- -Serial = SLKA-25300 -Name = Digital Devil Saga [Special Package] -Region = NTSC-J-K -Compat = 5 -EETimingHack = 1 +Serial = SLES-53480 +Name = Harvest Moon - A Wonderful Life [Special Edition] +Region = PAL-E --------------------------------------------- -Serial = SLKA-25301 -Name = Digital Devil Saga: Avatar Tuner 2 -Region = NTSC-K +Serial = SLES-53481 +Name = 10,000 Bullets +Region = PAL-M5 Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLKA-25307 -Name = Dragonball Z Sparking -Region = NTSC-K +Serial = SLES-53483 +Name = Magna Carta: Tears of Blood +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25311 -Name = Marvel Nemesis - Rise of the Imperfects -Region = NTSC-K +Serial = SLES-53484 +Name = Eagle Eye Golf +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25313 -Name = Naruto - Uzumaki Chronicles -Region = NTSC-K -Compat = 5 -OPHFLagHack = 1 +Serial = SLES-53487 +Name = Forty 4 Party +Region = PAL-E --------------------------------------------- -Serial = SLKA-25317 -Name = Shin Sangoku Musou 3 [PlayStation 2 - Big Hit Series] -Region = NTSC-K +Serial = SLES-53488 +Name = Puzzlemaniacs +Region = PAL-E --------------------------------------------- -Serial = SLKA-25320 -Name = Ikusa Gami -Region = NTSC-K +Serial = SLES-53489 +Name = Paparazzi +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25321 -Name = K.League - Winning Eleven 9 - Asia Championship -Region = NTSC-K ---------------------------------------------- -Serial = SLKA-25322 -Name = Guilty Gear XX - Slash -Region = NTSC-K +Serial = SLES-53490 +Name = Outlaw Tennis +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25323 -Name = SSX On Tour -Region = NTSC-J-K +Serial = SLES-53492 +Name = Total Overdose +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25328 -Name = Castlevania - Curse of Dakness -Region = NTSC-K +Serial = SLES-53494 +Name = Spongebob Squarepants - Lights, Camera, PANTS! +Region = PAL-E Compat = 5 -vuClampMode = 0 //SPS with microVU --------------------------------------------- -Serial = SLKA-25329 -Name = Shin Sangoku Musou 4 - Moushouden -Region = NTSC-K +Serial = SLES-53496 +Name = Spongebob Squarepants - Lights, Camera, PANTS! +Region = PAL-I --------------------------------------------- -Serial = SLKA-25331 -Name = Marc Ecko's Getting Up - Contents Under Pressure -Region = NTSC-K +Serial = SLES-53501 +Name = Star Wars - Battlefront II +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLKA-25333 -Name = Metal Slug Complete -Region = NTSC-K +Serial = SLES-53502 +Name = Star Wars - Battlefront II +Region = PAL-F --------------------------------------------- -Serial = SLKA-25341 -Name = Driver - Parallel Lines -Region = NTSC-K +Serial = SLES-53503 +Name = Star Wars - Battlefront II +Region = PAL-G --------------------------------------------- -Serial = SLKA-25342 -Name = Ryu ga Gotoku -Region = NTSC-K +Serial = SLES-53504 +Name = Agent Hugo +Region = PAL-M11 --------------------------------------------- -Serial = SLKA-25351 -Name = One Piece Pirates Carnival -Region = NTSC-K +Serial = SLES-53505 +Name = Beat Down - Fists of Vengeance +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25352 -Name = Full Metal Alchemist - Dream Carnival -Region = NTSC-K +Serial = SLES-53506 +Name = Burnout Revenge +Region = PAL-M5 +Compat = 5 +MemCardFilter = SLES-53506/SLES-53507/SLES-52584/SLES-52585/SLES-53510 --------------------------------------------- -Serial = SLKA-25353 -Name = Metal Gear Solid 3 - Subsistance [Limited Edition] [Disc1of2] -Region = NTSC-K +Serial = SLES-53507 +Name = Burnout Revenge +Region = PAL-M3 Compat = 5 +MemCardFilter = SLES-53506/SLES-53507/SLES-52584/SLES-52585/SLES-53510 --------------------------------------------- -Serial = SLKA-25354 -Name = Metal Gear Solid 3 - Subsistance [Limited Edition] [Disc2of2] -Region = NTSC-K +Serial = SLES-53508 +Name = Ultimate Pro-Pinball +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLKA-25359 -Name = Winning Eleven 9 - Liveware Edition -Region = NTSC-K +Serial = SLES-53509 +Name = Hello Kitty - Roller Rescue +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25361 -Name = Keroro Gunsou MeroMero Battle Royale Z -Region = NTSC-K +Serial = SLES-53510 +Name = Madden NFL 2006 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25364 -Name = Mobile Suit Gundam - Climax U.C. -Region = NTSC-K +Serial = SLES-53518 +Name = Castle Shikigami II +Region = PAL-E --------------------------------------------- -Serial = SLKA-25365 -Name = WWE Smack Down Vs RAW 2008 -Region = NTSC-K +Serial = SLES-53521 +Name = Musashi - Samurai Legend +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25366 -Name = Naruto - Uzumaki Chronicles 2 -Region = NTSC-K -Compat = 5 -OPHFLagHack = 1 +Serial = SLES-53523 +Name = Gun +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25375 -Name = Transformers - The Game -Region = NTSC-K +Serial = SLES-53524 +Name = Mortal Kombat - Shaolin Monks +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-25381 -Name = Winning Eleven 10 -Region = NTSC-K +Serial = SLES-53525 +Name = Mortal Kombat - Shaolin Monks +Region = PAL-G --------------------------------------------- -Serial = SLKA-25384 -Name = Blazing Souls -Region = NTSC-K +Serial = SLES-53526 +Name = Suffering, The - Ties that Bind +Region = PAL-E-F +MemCardFilter = SLES-53526/SLES-53527/SLES-53528/SLES-53626/SLES-51693/SLES-52439/SLES-52531 --------------------------------------------- -Serial = SLKA-25388 -Name = One Piece - Grand Adventure -Region = NTSC-K -Compat = 5 +Serial = SLES-53527 +Name = Suffering, The - Ties that Bind +Region = PAL-E-I-S +MemCardFilter = SLES-53526/SLES-53527/SLES-53528/SLES-53626/SLES-51693/SLES-52439/SLES-52531 --------------------------------------------- -Serial = SLKA-25389 -Name = Shinobido Imashime -Region = NTSC-K -Compat = 5 -eeClampMode = 3 //Otherwise freezes in some spot +Serial = SLES-53528 +Name = Suffering, The - Ties that Bind +Region = PAL-G +MemCardFilter = SLES-53526/SLES-53527/SLES-53528/SLES-53626/SLES-51693/SLES-52439/SLES-52531 --------------------------------------------- -Serial = SLKA-25390 -Name = Shin Sangoku Musou 4 - Empires -Region = NTSC-K +Serial = SLES-53529 +Name = FIFA '06 +Region = PAL-E --------------------------------------------- -Serial = SLKA-25396 -Name = FIFA '07 -Region = NTSC-K +Serial = SLES-53530 +Name = FIFA '06 +Region = PAL-I --------------------------------------------- -Serial = SLKA-25397 -Name = Dragon Ball Z Sparking NEO -Region = NTSC-K -Compat = 5 +Serial = SLES-53531 +Name = FIFA '06 +Region = PAL-F-G --------------------------------------------- -Serial = SLKA-25406 -Name = King of Fighters, The - Maximum Impact - Regulation A -Region = NTSC-K +Serial = SLES-53532 +Name = FIFA '06 +Region = PAL-P-S --------------------------------------------- -Serial = SLKA-25407 -Name = DragonBall Z - Sparkling! Meteor -Region = NTSC-K +Serial = SLES-53533 +Name = FIFA '06 +Region = PAL-M8 +--------------------------------------------- +Serial = SLES-53534 +Name = Tony Hawk's American Wasteland +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLKA-25413 -Name = SD Gundam G - Generation Spirits -Region = NTSC-K +Serial = SLES-53535 +Name = Tony Hawk's American Wasteland +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25422 -Name = Silent Hill - Origins -Region = NTSC-K +Serial = SLES-53536 +Name = London Racer - Police Madness +Region = PAL-M3 Compat = 5 --------------------------------------------- -Serial = SLKA-25424 -Name = SNK Arcade Classics Vol.1 -Region = NTSC-K +Serial = SLES-53539 +Name = Fahrenheit +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLKA-25443 -Name = Musou Orochi Maou Sairin -Region = NTSC-K +Serial = SLES-53540 +Name = Fahrenheit +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLKA-25477 -Name = World Soccer Winning Eleven 2011 -Region = NTSC-K +Serial = SLES-53541 +Name = Tiger Woods PGA Tour '06 +Region = PAL-M4 --------------------------------------------- -Serial = SLKA-25480 -Name = World Soccer Winning Eleven 2012 -Region = NTSC-K +Serial = SLES-53542 +Name = Shadow the Hedgehog +Region = PAL-M5 --------------------------------------------- -Serial = SLKA-35001 -Name = Metal Gear Solid 2 Substance -Region = NTSC-K +Serial = SLES-53544 +Name = Pro Evolution Soccer 5 +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLKA-35003 -Name = Sakura Taisen - Atsuki Chishioni -Region = NTSC-K -Compat = 5 +Serial = SLES-53545 +Name = Pro Evolution Soccer 5 +Region = PAL-I --------------------------------------------- -Serial = SLKA-35004 -Name = Sakura Wars 5 So Long My Love -Region = NTSC-K -Compat = 5 +Serial = SLES-53546 +Name = NBA Live 2006 +Region = PAL-E --------------------------------------------- -Serial = SLKA-35005 -Name = Shin Sangoku Musou 5 Special -Region = NTSC-K +Serial = SLES-53547 +Name = NBA Live '06 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-55005 -Name = Mana Khemia 2: Ochita Gakuen to Renkinjutsushi Tachi -Region = NTSC-J +Serial = SLES-53548 +Name = Yokushin - Giga Wing Generations +Region = PAL-E --------------------------------------------- -Serial = SLPM-55008 -Name = Sengoku Basara X -Region = NTSC-J -Compat = 4 +Serial = SLES-53551 +Name = SSX On Tour +Region = PAL-E --------------------------------------------- -Serial = SLPM-55033 -Name = J. League Winning Eleven 2008 - Club Championship -Region = NTSC-J +Serial = SLES-53552 +Name = SSX On Tour +Region = PAL-M8 --------------------------------------------- -Serial = SLPM-55096 -Name = ThunderForce VI -Region = NTSC-J -Compat = 5 +Serial = SLES-53553 +Name = James Bond 007 - From Russia with Love +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-55108 -Name = Fate - Unlimited Codes -Region = NTSC-J +Serial = SLES-53557 +Name = Need for Speed - Most Wanted +Region = PAL-E Compat = 5 -eeRoundMode = 0 ---------------------------------------------- -Serial = SLPM-55110 -Name = Mercenaries 2 - World in Flames -Region = NTSC-J +// reads Underground 2 save for extra money +MemCardFilter = SLES-53557/SLES-53558/SLES-53559/SLES-53857/SLES-52725 --------------------------------------------- -Serial = SLPM-55114 -Name = Mana Khemia 2: Ochita Gakuen to Renkinjutsushi Tachi -Region = NTSC-J +Serial = SLES-53558 +Name = Need for Speed - Most Wanted +Region = PAL-M8 +MemCardFilter = SLES-53557/SLES-53558/SLES-53559/SLES-53857/SLES-52725 --------------------------------------------- -Serial = SLPM-55120 -Name = Fukakutei Sekai no Tantei Shinshi - Agyou Souma no Jiken File -Region = NTSC-J +Serial = SLES-53559 +Name = Need for Speed - Most Wanted +Region = PAL-M3 +MemCardFilter = SLES-53557/SLES-53558/SLES-53559/SLES-53857/SLES-52725 --------------------------------------------- -Serial = SLPM-55122 -Name = Sengoku Musou 2 -Region = NTSC-J +Serial = SLES-53560 +Name = Sonic Riders +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-55127 -Name = Need for Speed - Undercover -Region = NTSC-J +Serial = SLES-53561 +Name = Canis Canem Edit +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-55131 -Name = World Soccer Winning Eleven 2009 -Region = NTSC-J +Serial = SLES-53563 +Name = Spongebob Squarepants and Friends - Untie! +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-55148 -Name = 007: Nagusame no Houshuu -Region = NTSC-J +Serial = SLES-53564 +Name = Darkwatch +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-55182 -Name = J. League Winning Eleven 2009 - Club Championship -Region = NTSC-J +Serial = SLES-53566 +Name = London Taxi - Rushour +Region = PAL-E --------------------------------------------- -Serial = SLPM-55184 -Name = Melty Blood - Actress Again -Region = NTSC-J +Serial = SLES-53569 +Name = Mini Mini Desktop Racing +Region = PAL-E +--------------------------------------------- +Serial = SLES-53570 +Name = Ninjabread Man +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-55226 -Name = FIFA 10: World Class Soccer -Region = NTSC-J +Serial = SLES-53571 +Name = Anubis II +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-55244 -Name = Need for Speed - Undercover [EA:SY! 1980] -Region = NTSC-J +Serial = SLES-53572 +Name = Rig Racer 2 +Region = PAL-E +Compat = 4 --------------------------------------------- -Serial = SLPM-55251 -Name = WWE SmackDown vs. Raw 2009 -Region = NTSC-J +Serial = SLES-53574 +Name = Bratz - Rock Angelz +Region = PAL-E --------------------------------------------- -Serial = SLPM-55258 -Name = World Soccer Winning Eleven 2010 - Aoki Samurai no Chousen -Region = NTSC-J +Serial = SLES-53575 +Name = Bratz - Rock Angelz +Region = PAL-S --------------------------------------------- -Serial = SLPM-55262 -Name = J.League Winning Eleven 2010 - Club Championship -Region = NTSC-J +Serial = SLES-53576 +Name = Bratz - Rock Angelz +Region = PAL-G --------------------------------------------- -Serial = SLPM-55271 -Name = FIFA 10: World Class Soccer (EA:SY! 1980) -Region = NTSC-J +Serial = SLES-53577 +Name = Bratz - Rock Angelz +Region = PAL-I --------------------------------------------- -Serial = SLPM-55276 -Name = World Soccer Winning Eleven 2011 -Region = NTSC-J +Serial = SLES-53578 +Name = Bratz - Rock Angelz +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-55280 -Name = The King of Fighters '98 Ultimate Match -Region = NTSC-J +Serial = SLES-53579 +Name = One Piece - Grand Battle +Region = PAL-E --------------------------------------------- -Serial = SLPM-60101 -Name = 0 Story -Region = NTSC-J +Serial = SLES-53580 +Name = NBA Live '06 +Region = PAL-F --------------------------------------------- -Serial = SLPM-60102 -Name = From Software First Previews -Region = NTSC-J +Serial = SLES-53581 +Name = NBA Live '06 +Region = PAL-S --------------------------------------------- -Serial = SLPM-60104 -Name = Konami PlayStation 2 Taikeban -Region = NTSC-J +Serial = SLES-53582 +Name = Bratz - Rock Angelz +Region = PAL-SE --------------------------------------------- -Serial = SLPM-60106 -Name = Koei PlayStation 2 Line-Up -Region = NTSC-J +Serial = SLES-53583 +Name = Bratz - Rock Angelz +Region = PAL-F --------------------------------------------- -Serial = SLPM-60107 -Name = Golf Paradise -Region = NTSC-J +Serial = SLES-53585 +Name = Marvel Nemesis - Rise of the Imperfects +Region = PAL-M4 +Compat = 3 --------------------------------------------- -Serial = SLPM-60172 -Name = Itadaki Street 3 - Okuman Chouja ni Shiteageru -Region = NTSC-J +Serial = SLES-53587 +Name = Garfield - Saving Arlene +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-60207 -Name = Rockman X7 -Region = NTSC-J +Serial = SLES-53592 +Name = Zombie Attack +Region = PAL-E --------------------------------------------- -Serial = SLPM-60251 -Name = Devil May Cry 3 [Trial Version] -Region = NTSC-J -eeRoundMode = 0 +Serial = SLES-53594 +Name = Living World Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-60262 -Name = 10th Anniversary Memorial Save Data [Disc 2] -Region = NTSC-J +Serial = SLES-53595 +Name = Wild Water Adrenaline featuring Salomon +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-60265 -Name = 10th Anniversary PlayStation & PlayStation 2 All-Soft Catalogue Special SaveData Collection [PS2 Disc] -Region = NTSC-J +Serial = SLES-53596 +Name = The Ultimate Film Quiz +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-61147 -Name = Xenosaga Episode III - Also Sprach Zarathustra [Demo] -Region = NTSC-J +Serial = SLES-53599 +Name = The Ultimate Music Quiz +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62001 -Name = Drum Mania -Region = NTSC-J +Serial = SLES-53614 +Name = Classic British Motor Racing +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62002 -Name = Live World Soccer 2000 -Region = NTSC-J +Serial = SLES-53616 +Name = True Crime - New York City +Region = PAL-E --------------------------------------------- -Serial = SLPM-62004 -Name = Mahjong Yarouze 2 -Region = NTSC-J +Serial = SLES-53618 +Name = True Crime - New York City +Region = PAL-S // Voices in English, text and subtitles in Spanish. --------------------------------------------- -Serial = SLPM-62005 -Name = Shin Sangokumusou -Region = NTSC-J +Serial = SLES-53621 +Name = Wallace & Grommit - The Curse of the Were Rabbit +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62006 -Name = Eisei Meijin 4 -Region = NTSC-J +Serial = SLES-53623 +Name = Spongebob Squarepants - Battle for Bikini Bottom +Region = PAL-F --------------------------------------------- -Serial = SLPM-62007 -Name = Gradius III & IV -Region = NTSC-J +Serial = SLES-53624 +Name = Disney-Pixar's Cars +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62008 -Name = Powerful Pro Baseball 7 -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62009 -Name = Ganbare Nippon Olympics 2000 -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62010 -Name = Romance of the Three Kingdoms VII -Region = NTSC-J +Serial = SLES-53626 +Name = Suffering, The - Ties that Bind +Region = PAL-E-G +MemCardFilter = SLES-53526/SLES-53527/SLES-53528/SLES-53626/SLES-51693/SLES-52439/SLES-52531 --------------------------------------------- -Serial = SLPM-62011 -Name = Jikkyou GI Stable -Region = NTSC-J +Serial = SLES-53635 +Name = NASCAR '06 - Total Team Control +Region = PAL-E --------------------------------------------- -Serial = SLPM-62012 -Name = Keyboard Mania -Region = NTSC-J +Serial = SLES-53639 +Name = Ford Street Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62013 -Name = Ring of Red -Region = NTSC-J +Serial = SLES-53641 +Name = Destroy All Humans! +Region = PAL-R --------------------------------------------- -Serial = SLPM-62015 -Name = Silpheed - The Lost Planet -Region = NTSC-J +Serial = SLES-53645 +Name = Knights of the Temple II +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62016 -Name = Super Bust-A-Move -Region = NTSC-J -Compat = 5 +Serial = SLES-53646 +Name = World Racing 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62021 -Name = Angelique Trois [Premium Box] -Region = NTSC-J +Serial = SLES-53647 +Name = Gun +Region = PAL-G --------------------------------------------- -Serial = SLPM-62022 -Name = Angelique Trois -Region = NTSC-J +Serial = SLES-53651 +Name = WWII - Soldier +Region = PAL-E --------------------------------------------- -Serial = SLPM-62023 -Name = Winback -Region = NTSC-J +Serial = SLES-53652 +Name = Daemon Summoner +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62027 -Name = Snowboard Heaven -Region = NTSC-J +Serial = SLES-53654 +Name = London Racer - Destruction Madness +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLPM-62028 -Name = Greatest Striker -Region = NTSC-J +Serial = SLES-53656 +Name = Full Spectrum Warrior - Ten Hammers +Region = PAL-M4 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-62029 -Name = Dance Summit 2001 -Region = NTSC-J -Compat = 5 +Serial = SLES-53657 +Name = Shrek - Super Slam +Region = PAL-E --------------------------------------------- -Serial = SLPM-62031 -Name = Primal Image for Printer -Region = NTSC-J +Serial = SLES-53658 +Name = Disney-Pixar's The Incredibles - Rise of the Underminer +Region = PAL-R --------------------------------------------- -Serial = SLPM-62032 -Name = ESPN NBA 2Night -Region = NTSC-J +Serial = SLES-53659 +Name = Brothers in Arms: Earned in Blood +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62035 -Name = Got to Do! Hot Spring Table Tennis -Region = NTSC-J +Serial = SLES-53661 +Name = Capcom Classics Collection +Region = PAL-E --------------------------------------------- -Serial = SLPM-62036 -Name = Choukousoku Reversi -Region = NTSC-J +Serial = SLES-53666 +Name = Midway Arcade Treasures 3 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62040 -Name = J League Winning Eleven 8 - Asia Championship -Region = NTSC-J +Serial = SLES-53667 +Name = Gauntlet - Seven Sorrows +Region = PAL-M5 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLPM-62041 -Name = ESPN National Hockey Night -Region = NTSC-J +Serial = SLES-53668 +Name = Micro Machines v4 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62044 -Name = RC Revenge Pro -Region = NTSC-J +Serial = SLES-53676 +Name = WWE SmackDown! vs. RAW 2006 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62045 -Name = Jikkou J. League Perfect Striker 3 -Region = NTSC-J +Serial = SLES-53677 +Name = WWE SmackDown! vs. RAW 2006 +Region = PAL-I --------------------------------------------- -Serial = SLPM-62046 -Name = WTA Tennis Tour USA -Region = NTSC-J +Serial = SLES-53682 +Name = James Pond - Codename Robocod +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62047 -Name = Endnesia -Region = NTSC-J +Serial = SLES-53685 +Name = Codename: Kids Next Door - Operation V.I.D.E.O.G.A.M.E +Region = PAL-E-G +Compat = 5 --------------------------------------------- -Serial = SLPM-62048 -Name = Battle Gear 2 -Region = NTSC-J +Serial = SLES-53686 +Name = NHL Hockey 2K6 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62049 -Name = Densha de Go! 3 - Takkyuu!! -Region = NTSC-J +Serial = SLES-53689 +Name = World Poker Tour 2K6 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62051 -Name = Yanya Caballista - featuring Gawoo -Region = NTSC-J +Serial = SLES-53690 +Name = Makai Kingdon - Chronicle of the Sacred Stone +Region = PAL-E --------------------------------------------- -Serial = SLPM-62052 -Name = Beatmania Da! Da! Da! -Region = NTSC-J +Serial = SLES-53695 +Name = Tak - The Great Juju Challenge +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62053 -Name = World Soccer Winning Eleven 5 -Region = NTSC-J +Serial = SLES-53696 +Name = Zathura +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62054 -Name = Eternity Master V -Region = NTSC-J +Serial = SLES-53697 +Name = Dora the Explorer +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62055 -Name = Bloody Roar 3 -Region = NTSC-J +Serial = SLES-53699 +Name = Swords of Destiny +Region = PAL-Unk Compat = 5 --------------------------------------------- -Serial = SLPM-62056 -Name = DNA - Dark Native Apostle -Region = NTSC-J +Serial = SLES-53701 +Name = Super Monkey Ball Adventure +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62060 -Name = Winning Post 4 Maximum 2001 -Region = NTSC-J +Serial = SLES-53702 +Name = Resident Evil 4 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62062 -Name = Gitaroo Man One -Region = NTSC-J +Serial = SLES-53703 +Name = King Kong, Peter Jackson's - The Official Game of the Movie +Region = PAL-M10 +Compat = 5 --------------------------------------------- -Serial = SLPM-62063 -Name = Gradius III & IV [Konami The Best] -Region = NTSC-J +Serial = SLES-53704 +Name = King Kong, Peter Jackson's - The Official Game of the Movie +Region = PAL-R --------------------------------------------- -Serial = SLPM-62067 -Name = Hunter X Hunter - Ryumyaku no Saidan -Region = NTSC-J +Serial = SLES-53705 +Name = King Kong, Peter Jackson's - The Official Game of the Movie +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62068 -Name = Egbrowser -Region = NTSC-J +Serial = SLES-53706 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62069 -Name = All-Star Baseball 2002 -Region = NTSC-J +Serial = SLES-53707 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-G --------------------------------------------- -Serial = SLPM-62070 -Name = Uchu-Jintte Naani -Region = NTSC-J +Serial = SLES-53708 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-I --------------------------------------------- -Serial = SLPM-62072 -Name = Horse Breaker -Region = NTSC-J +Serial = SLES-53709 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-DU-F --------------------------------------------- -Serial = SLPM-62073 -Name = Tam Tam Paradise -Region = NTSC-J -Compat = 1 +Serial = SLES-53710 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-S --------------------------------------------- -Serial = SLPM-62075 -Name = Live World Soccer 2001 -Region = NTSC-J +Serial = SLES-53712 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-M3 // Scandinavia --------------------------------------------- -Serial = SLPM-62076 -Name = Age of Empires II: The Age of Kings -Region = NTSC-J +Serial = SLES-53713 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62077 -Name = Maestro Music 2, The -Region = NTSC-J +Serial = SLES-53715 +Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe +Region = PAL-R --------------------------------------------- -Serial = SLPM-62078 -Name = Maestro Music 2, The -Region = NTSC-J +Serial = SLES-53716 +Name = Without Warning +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62081 -Name = Ever Blue -Region = NTSC-J +Serial = SLES-53717 +Name = Midnight Club 3 - DUB Edition Remix +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-53718 +Name = Sims 2, The +Region = PAL-M10 Compat = 5 --------------------------------------------- -Serial = SLPM-62082 -Name = Professional Baseball Japan 2001 -Region = NTSC-J +Serial = SLES-53722 +Name = Call of Duty 2 - Big Red One [Collector's Edition] +Region = PAL-E --------------------------------------------- -Serial = SLPM-62084 -Name = ESPN X-Games Skateboarding -Region = NTSC-J +Serial = SLES-53724 +Name = World Series of Poker +Region = PAL-E --------------------------------------------- -Serial = SLPM-62087 -Name = Touge 3 -Region = NTSC-J +Serial = SLES-53725 +Name = Asterix & Obelix XXL2 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62088 -Name = J-League Winning Eleven 5 -Region = NTSC-J +Serial = SLES-53726 +Name = Harry Potter and The Goblet of Fire +Region = PAL-E --------------------------------------------- -Serial = SLPM-62091 -Name = Ring of Red -Region = NTSC-J +Serial = SLES-53727 +Name = Harry Potter and The Goblet of Fire +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62092 -Name = XG3 Extreme G Racing -Region = NTSC-J +Serial = SLES-53728 +Name = Harry Potter and The Goblet of Fire +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62094 -Name = Simple 2000 Series Vol. 2 - The Party Game -Region = NTSC-J +Serial = SLES-53729 +Name = Battlefield 2 - Modern Combat +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62095 -Name = Flying Circus [Limited Edition] -Region = NTSC-J +Serial = SLES-53730 +Name = Battlefield 2 - Modern Combat +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-53734 +Name = 50cent - Bulletproof +Region = PAL-E +--------------------------------------------- +Serial = SLES-53736 +Name = Billy the Wizard - Rocket Broomstick Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62096 -Name = Flying Circus -Region = NTSC-J +Serial = SLES-53738 +Name = Disney's Chicken Little +Region = PAL-DU-F --------------------------------------------- -Serial = SLPM-62097 -Name = Keisusaikan, The - Shinjuku 24 Hours -Region = NTSC-J +Serial = SLES-53739 +Name = Disney's Chicken Little +Region = PAL-F-S --------------------------------------------- -Serial = SLPM-62098 -Name = Busin: Wizardry Alternative -Region = NTSC-J +Serial = SLES-53740 +Name = Disney's Chicken Little +Region = PAL-G --------------------------------------------- -Serial = SLPM-62100 -Name = Rez [Special Package] -Region = NTSC-J +Serial = SLES-53741 +Name = Disney's Chicken Little +Region = PAL-R --------------------------------------------- -Serial = SLPM-62101 -Name = Rez -Region = NTSC-J -Compat = 5 +Serial = SLES-53743 +Name = Disney's Chicken Little +Region = PAL-M3 // Scandinavia --------------------------------------------- -Serial = SLPM-62102 -Name = Crazy Taxi -Region = NTSC-J +Serial = SLES-53744 +Name = Disney's Chicken Little +Region = PAL-E --------------------------------------------- -Serial = SLPM-62104 -Name = Choro-Q HG2 -Region = NTSC-J +Serial = SLES-53746 +Name = Superman Returns +Region = PAL-E --------------------------------------------- -Serial = SLPM-62107 -Name = Growlanser 3 - The Duel Darkness -Region = NTSC-J -Compat = 4 +Serial = SLES-53747 +Name = Ed, Edd, 'n Eddy - The Misadventure +Region = PAL-E --------------------------------------------- -Serial = SLPM-62108 -Name = Growlanser 3 - The Duel Darkness -Region = NTSC-J -Compat = 4 +Serial = SLES-53748 +Name = Quest for Sleeping Beauty +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62109 -Name = Hippa Linda -Region = NTSC-J +Serial = SLES-53751 +Name = Shrek Superslam +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62112 -Name = Itadaki Street 3 -Region = NTSC-J +Serial = SLES-53754 +Name = ATV Off-Road Fury 3 +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62113 -Name = World Soccer Winning Eleven 5 - Final Evolution -Region = NTSC-J +Serial = SLES-53755 +Name = Castlevania - Curse of Darkness +Region = PAL-M5 +Compat = 5 +vuClampMode = 0 //SPS with microVU +// reads Lament of Innocence save for easter egg +MemCardFilter = SLES-53755/SLES-52118 --------------------------------------------- -Serial = SLPM-62117 -Name = Momotaro Train X -Region = NTSC-J +Serial = SLES-53756 +Name = Resident Evil 4 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62118 -Name = Bomberman Kart -Region = NTSC-J -Compat = 1 +Serial = SLES-53759 +Name = Matrix, The - Path of Neo +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62120 -Name = Jikkyou World Soccer 2001 -Region = NTSC-J +Serial = SLES-53760 +Name = Rugby Challenge 2006 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62121 -Name = ESPN NBA 2Night 2002 -Region = NTSC-J +Serial = SLES-53761 +Name = Friends - The One with All the Trivia +Region = PAL-E --------------------------------------------- -Serial = SLPM-62122 -Name = Hermina to Culus: Lilie no Atelier Mou Hitotsu no Monogatari -Region = NTSC-J +Serial = SLES-53763 +Name = Tom Clancy's Ghost Recon - Advanced Warfighter +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62123 -Name = Winning Post 5 -Region = NTSC-J +Serial = SLES-53764 +Name = Atelier Iris: Eternal Mana +Region = PAL-E // Voices: English & Japanese --------------------------------------------- -Serial = SLPM-62124 -Name = Ready 2 Rumble Boxing - Round 2 -Region = NTSC-J +Serial = SLES-53765 +Name = Stella Deus: The Gate of Eternity +Region = PAL-E --------------------------------------------- -Serial = SLPM-62125 -Name = Gauntlet - Dark Legacy -Region = NTSC-J +Serial = SLES-53767 +Name = Magna Carta: Les Larmes de Sang +Region = PAL-F --------------------------------------------- -Serial = SLPM-62127 -Name = Maximo -Region = NTSC-J +Serial = SLES-53768 +Name = Sword of Etheria, The +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62128 -Name = Le Mans 24 Hours -Region = NTSC-J +Serial = SLES-53769 +Name = Suikoden Tactics +Region = PAL-M5 +MemCardFilter = SLES-53769/SLES-52913 --------------------------------------------- -Serial = SLPM-62129 -Name = Climax Tennis - WTA Tour Edition -Region = NTSC-J +Serial = SLES-53772 +Name = Air Raid 3 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62130 -Name = Virtua Fighter 4 -Region = NTSC-J -Compat = 5 +Serial = SLES-53775 +Name = Reservoir Dogs +Region = PAL-M4 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-62131 -Name = Romance of the Three Kingdoms VIII -Region = NTSC-J +Serial = SLES-53777 +Name = Prince of Persia - The Two Thrones +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62132 -Name = 24 - The Game -Region = NTSC-J +Serial = SLES-53778 +Name = Jacked +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62133 -Name = Bloody Roar 3 [Konami The Best] -Region = NTSC-J +Serial = SLES-53779 +Name = American Chopper 2 - Full Throttle +Region = PAL-E --------------------------------------------- -Serial = SLPM-62134 -Name = Final Fantasy XI [Beta Edition] -Region = NTSC-J +Serial = SLES-53794 +Name = Drakengard 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62137 -Name = Psyvariar Complete Edition [Special Sound Box] -Region = NTSC-J +Serial = SLES-53796 +Name = FIFA Street 2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62138 -Name = Psyvariar Complete Edition [Special Capture Box] -Region = NTSC-J +Serial = SLES-53797 +Name = FIFA Street 2 +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62139 -Name = Psyvariar Complete Edition -Region = NTSC-J +Serial = SLES-53799 +Name = Matrix, The - Path of Neo +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLPM-62142 -Name = World Grand Prix -Region = NTSC-J +Serial = SLES-53800 +Name = Rampage - Total Destruction +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62143 -Name = Hakoniwa Tetsudou - Blue Train Express -Region = NTSC-J +Serial = SLES-53803 +Name = Friends - Das Trivia Game +Region = PAL-G --------------------------------------------- -Serial = SLPM-62144 -Name = Super Bust-A-Move -Region = NTSC-J +Serial = SLES-53804 +Name = Shamu's Deep Sea Adventures +Region = PAL-E --------------------------------------------- -Serial = SLPM-62147 -Name = Bass Strike -Region = NTSC-J +Serial = SLES-53810 +Name = Sensible Soccer 2006 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62151 -Name = Live GI Stable 2 -Region = NTSC-J +Serial = SLES-53813 +Name = Friends - Celui qui Repond a Toutes les Questions +Region = PAL-F --------------------------------------------- -Serial = SLPM-62153 -Name = Racing Construction - Mareru Tsukeru Hahiiru Ore - Dead Heat -Region = NTSC-J +Serial = SLES-53819 +Name = Armored Core - Nine Breaker +Region = PAL-E +MemCardFilter = SLES-53819/SLES-82036/SLES-82037 --------------------------------------------- -Serial = SLPM-62154 -Name = DDR Max - Dance Dance Revolution - 6th Mix -Region = NTSC-J +Serial = SLES-53820 +Name = Armored Core - Last Raven +Region = PAL-E +--------------------------------------------- +Serial = SLES-53824 +Name = Trapt +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62155 -Name = Baseball 2002, The -Region = NTSC-J +Serial = SLES-53825 +Name = Project Zero 3 - The Tormented +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62157 -Name = Building Baku -Region = NTSC-J +Serial = SLES-53826 +Name = Tom Clancy's Splinter Cell - Double Agent +Region = PAL-M5 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLPM-62158 -Name = Virtua Fighter 4 -Region = NTSC-J +Serial = SLES-53827 +Name = Tom Clancy's Splinter Cell - Double Agent +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62159 -Name = World Soccer Winning Eleven 6 -Region = NTSC-J +Serial = SLES-53828 +Name = We Love Katamari +Region = PAL-M4 +vuClampMode = 3 +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLPM-62161 -Name = Generation of Chaos - Next [Limited Edition] -Region = NTSC-J +Serial = SLES-53829 +Name = Raiden III +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62164 -Name = Generation of Chaos - Next -Region = NTSC-J +Serial = SLES-53830 +Name = Psychonauts +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62165 -Name = Shikigami no Shiro [Limited Edition] -Region = NTSC-J +Serial = SLES-53831 +Name = BloodRayne 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62168 -Name = Disney Golf Classics -Region = NTSC-J +Serial = SLES-53832 +Name = BloodRayne 2 +Region = PAL-G --------------------------------------------- -Serial = SLPM-62169 -Name = Live World Soccer 2002 -Region = NTSC-J +Serial = SLES-53846 +Name = Soccer Life II +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62171 -Name = Simple 2000 Series Vol.05 - The Blockbuster Hyper -Region = NTSC-J +Serial = SLES-53847 +Name = Street Golfer +Region = PAL-E --------------------------------------------- -Serial = SLPM-62175 -Name = Beatmania Utsu Utsu Utsu! [Konami The Best] -Region = NTSC-J +Serial = SLES-53848 +Name = Flow - Urban Dance Uprising +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62176 -Name = Egbrowser BB -Region = NTSC-J +Serial = SLES-53849 +Name = Asterix & Obelix XXL2 +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62177 -Name = Kuusen [Kadokawa The Best] -Region = NTSC-J +Serial = SLES-53850 +Name = Teenage Mutant Ninja Turtles 3 - Mutant Nightmare +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62180 -Name = Simple 2000 Series Vol.01 - The Shougi -Region = NTSC-J +Serial = SLES-53852 +Name = Taito Legends 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62182 -Name = Top Gun - Ace of the Sky -Region = NTSC-J +Serial = SLES-53855 +Name = Heracles - Battle with the Gods +Region = PAL-E --------------------------------------------- -Serial = SLPM-62185 -Name = San Goku Shi VII -Region = NTSC-J +Serial = SLES-53857 +Name = Need for Speed - Most Wanted [Black Edition] +Region = PAL-M3 +MemCardFilter = SLES-53557/SLES-53558/SLES-53559/SLES-53857/SLES-52725 --------------------------------------------- -Serial = SLPM-62186 -Name = Get Backers - The Stolen City of Infinite -Region = NTSC-J +Serial = SLES-53860 +Name = Dynasty Warriors 5 - Xtreme Legends +Region = PAL-E --------------------------------------------- -Serial = SLPM-62190 -Name = High Heat - Major League Baseball 2003 -Region = NTSC-J +Serial = SLES-53861 +Name = Dynasty Warriors 5 - Xtreme Legends +Region = PAL-F --------------------------------------------- -Serial = SLPM-62193 -Name = J League Perfect Striker 5 -Region = NTSC-J +Serial = SLES-53862 +Name = Dynasty Warriors 5 - Xtreme Legends +Region = PAL-G --------------------------------------------- -Serial = SLPM-62197 -Name = Simple 2000 Series Vol.07 - The Real Fist Fighter -Region = NTSC-J +Serial = SLES-53863 +Name = Pool Paradise - International Edition +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62198 -Name = Simple 2000 Series Vol.04 - The Mahjong -Region = NTSC-J +Serial = SLES-53866 +Name = Over the Hedge +Region = PAL-E --------------------------------------------- -Serial = SLPM-62199 -Name = Dragon Quest Characters - Toruneko no Daibouken 3 -Region = NTSC-J +Serial = SLES-53867 +Name = Ski Alpin 2006 +Region = PAL-E-G +vuClampMode = 2 --------------------------------------------- -Serial = SLPM-62200 -Name = Horse Breaker -Region = NTSC-J +Serial = SLES-53869 +Name = Crazy Frog Racer +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62201 -Name = Winback -Region = NTSC-J +Serial = SLES-53870 +Name = Devil Kings +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62202 -Name = Winning Post 4 Maximum 2001 -Region = NTSC-J +Serial = SLES-53871 +Name = Tengai +Region = PAL-E --------------------------------------------- -Serial = SLPM-62203 -Name = Dog of Bay -Region = NTSC-J +Serial = SLES-53872 +Name = Samurai Aces +Region = PAL-E --------------------------------------------- -Serial = SLPM-62204 -Name = LEGO Racers 2 -Region = NTSC-J +Serial = SLES-53873 +Name = Sol Divide +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62205 -Name = Virtua Cop Re-Birth -Region = NTSC-J +Serial = SLES-53874 +Name = Dragon Blaze +Region = PAL-E +--------------------------------------------- +Serial = SLES-53877 +Name = Premier Manager 2006-2007 +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-53886 +Name = Black +Region = PAL-M5 Compat = 5 +vuClampMode = 0 --------------------------------------------- -Serial = SLPM-62206 -Name = Growlanser 2 [Atlus The Best] -Region = NTSC-J -Compat = 4 +Serial = SLES-53897 +Name = Dreamworks Vecinos Invasores +Region = PAL-S --------------------------------------------- -Serial = SLPM-62207 -Name = Simple 2000 Series Vol.09 - Bittersweet Fools -Region = NTSC-J +Serial = SLES-53899 +Name = Pro Evolution Soccer Management +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62209 -Name = Gigantic Drive -Region = NTSC-J +Serial = SLES-53900 +Name = Kaido Racer +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62211 -Name = 18 Wheeler -Region = NTSC-J +Serial = SLES-53901 +Name = Torino 2006 +Region = PAL-M5 +Compat = 5 +vuClampMode = 2 //for SPS with microVU. --------------------------------------------- -Serial = SLPM-62212 -Name = Critical Bullet - Seventh Target -Region = NTSC-J +Serial = SLES-53902 +Name = Leaderboard Golf +Region = PAL-E --------------------------------------------- -Serial = SLPM-62213 -Name = Ultimate Fighting Championship 2 - Tap-Out -Region = NTSC-J +Serial = SLES-53903 +Name = Franklin the Turtle +Region = PAL-M10 --------------------------------------------- -Serial = SLPM-62214 -Name = Ever Blue 2 -Region = NTSC-J +Serial = SLES-53904 +Name = DT Racer +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62215 -Name = Virtua Cop Re-Birth -Region = NTSC-J +Serial = SLES-53906 +Name = 50cent - Bulletproof +Region = PAL-F --------------------------------------------- -Serial = SLPM-62216 -Name = Ever Blue [CapKore The Best] -Region = NTSC-J +Serial = SLES-53908 +Name = Tomb Raider - Legend +Region = PAL-M8 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLPM-62217 -Name = J League Winning Eleven 6 -Region = NTSC-J +Serial = SLES-53909 +Name = Full Spectrum Warrior - Ten Hammers +Region = PAL-G +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-62218 -Name = Simple 2000 Series Vol.10 - The Table Game Sekai-Hen -Region = NTSC-J +Serial = SLES-53910 +Name = Agent Hugo +Region = PAL-R +--------------------------------------------- +Serial = SLES-53913 +Name = Plan, The +Region = PAL-F-I --------------------------------------------- -Serial = SLPM-62219 -Name = Simple 2000 Series Vol.08 - The Tennis -Region = NTSC-J +Serial = SLES-53914 +Name = Plan, The +Region = PAL-S --------------------------------------------- -Serial = SLPM-62221 -Name = Winning Post 5 - Max 2002 -Region = NTSC-J +Serial = SLES-53915 +Name = Space War Attack +Region = PAL-E --------------------------------------------- -Serial = SLPM-62223 -Name = Simple 2000 Series Vol.11 - The Off-Road Buggy -Region = NTSC-J +Serial = SLES-53917 +Name = G1 Jockey 4 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62224 -Name = Simple 2000 Series Ultimate Vol.3 - Saisoku! Zokusha King - Buchigiri Densetsu -Region = NTSC-J +Serial = SLES-53920 +Name = Speed Machines 3 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62225 -Name = Nobunaga no Yabou Arashi Seiki [with Power-Up Kit] -Region = NTSC-J +Serial = SLES-53921 +Name = Sim Chemist +Region = PAL-E --------------------------------------------- -Serial = SLPM-62227 -Name = Marvel vs. Capcom 2 -Region = NTSC-J +Serial = SLES-53922 +Name = Car Wash Tycoon +Region = PAL-E +--------------------------------------------- +Serial = SLES-53923 +Name = London Cab Challenge +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62228 -Name = Slipheed - The Lost Planet -Region = NTSC-J +Serial = SLES-53924 +Name = Combat Ace +Region = PAL-E --------------------------------------------- -Serial = SLPM-62229 -Name = Super Puzzle Bobble 2 -Region = NTSC-J +Serial = SLES-53934 +Name = G-Force +Region = PAL-E --------------------------------------------- -Serial = SLPM-62230 -Name = Silent Scope 3 -Region = NTSC-J +Serial = SLES-53935 +Name = Dynamite +Region = PAL-E --------------------------------------------- -Serial = SLPM-62232 -Name = Simple 2000 Series Vol.15 - The Rugby -Region = NTSC-J +Serial = SLES-53936 +Name = Snow Rider +Region = PAL-E --------------------------------------------- -Serial = SLPM-62233 -Name = Simple 2000 Series Ultimate Vol.4 - Urawaza Ikasa Majangai-Niisan Tsukanjimattayodane -Region = NTSC-J +Serial = SLES-53940 +Name = Smarties Meltdown +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62234 -Name = Simple2000 Vol.13 The Renai Adv Garasu No Mori -Region = NTSC-J +Serial = SLES-53945 +Name = Championship Manager 2006 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62235 -Name = GetBass Battle -Region = NTSC-J +Serial = SLES-53948 +Name = Winter Sports +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62236 -Name = Power Smash 2 -Region = NTSC-J -Compat = 4 +Serial = SLES-53949 +Name = Magna Carta: Lacrime di Sangue +Region = PAL-I --------------------------------------------- -Serial = SLPM-62237 -Name = Gakuen Toshi Vara Noir [Limited Edition] -Region = NTSC-J +Serial = SLES-53952 +Name = Cue Academy, The (Snooker-Pool-Billiards) +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62238 -Name = Gakuen Toshi Vara Noir -Region = NTSC-J +Serial = SLES-53955 +Name = Friends - The One with All the Trivia +Region = PAL-DU --------------------------------------------- -Serial = SLPM-62239 -Name = Supercar Street Challenge -Region = NTSC-J +Serial = SLES-53956 +Name = Aeon Flux +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62244 -Name = Choro Q - High Grade 3 -Region = NTSC-J +Serial = SLES-53959 +Name = Pac-Man World 3 +Region = PAL-M5 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-62245 -Name = Yuusei Kara no Buttai - Episode 2 -Region = NTSC-J +Serial = SLES-53963 +Name = Downhill Slalom +Region = PAL-E --------------------------------------------- -Serial = SLPM-62247 -Name = Shin Contra -Region = NTSC-J +Serial = SLES-53964 +Name = Homura +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62248 -Name = Simple 2000 Series Vol.05 - The Love Mahjong -Region = NTSC-J +Serial = SLES-53965 +Name = Plan, The +Region = PAL-E-G +Compat = 5 --------------------------------------------- -Serial = SLPM-62249 -Name = Hello Kitty Star Light - Inogasi Cube -Region = NTSC-J +Serial = SLES-53966 +Name = Taito Legends +Region = PAL-G --------------------------------------------- -Serial = SLPM-62250 -Name = Hello Kitty Star Light - Fusiginasekai -Region = NTSC-J +Serial = SLES-53967 +Name = Godfather, The +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62251 -Name = Simple 2000 Series Vol.14 - The Billiard -Region = NTSC-J +Serial = SLES-53968 +Name = Godfather, The (Le Parrain) +Region = PAL-F --------------------------------------------- -Serial = SLPM-62252 -Name = Simple 2000 Series Vol.17 - The Suiri-Aratanaru 20 no Jikenbo -Region = NTSC-J +Serial = SLES-53970 +Name = Godfather, The +Region = PAL-I --------------------------------------------- -Serial = SLPM-62253 -Name = Simple 2000 Series Vol.16 - The Sniper -Region = NTSC-J +Serial = SLES-53971 +Name = Godfather, The +Region = PAL-S --------------------------------------------- -Serial = SLPM-62254 -Name = Kaerazu no Mori -Region = NTSC-J +Serial = SLES-53972 +Name = Stock Car Crash +Region = PAL-E +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-62255 -Name = NBA Starting Five -Region = NTSC-J +Serial = SLES-53974 +Name = Dragon Quest VIII - Journey of the Cursed King +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62256 -Name = Super Trucks -Region = NTSC-J +Serial = SLES-53976 +Name = Evolution GT +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62257 -Name = Rally Championship -Region = NTSC-J +Serial = SLES-53979 +Name = Torrente 3 - El Protector +Region = PAL-S --------------------------------------------- -Serial = SLPM-62258 -Name = GTC Africa -Region = NTSC-J +Serial = SLES-53982 +Name = Fight Night Round 3 +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-62260 -Name = DogStation -Region = NTSC-J +Serial = SLES-53984 +Name = Ice Age 2 - The Meltdown +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62261 -Name = DogStation -Region = NTSC-J +Serial = SLES-53987 +Name = Over the Hedge +Region = PAL-S --------------------------------------------- -Serial = SLPM-62262 -Name = GI Jockey 2 [Koei the best] -Region = NTSC-J +Serial = SLES-53988 +Name = Over the Hedge +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62263 -Name = Snowboard Heaven -Region = NTSC-J +Serial = SLES-53989 +Name = Over the Hedge +Region = PAL-DU --------------------------------------------- -Serial = SLPM-62264 -Name = Shin Contra -Region = NTSC-J +Serial = SLES-53991 +Name = Urban Chaos - Riot Response +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62265 -Name = Power Smash 2 -Region = NTSC-J +Serial = SLES-53994 +Name = 50cent - Bulletproof +Region = PAL-E --------------------------------------------- -Serial = SLPM-62266 -Name = Momotaro Densetsu XI -Region = NTSC-J +Serial = SLES-53996 +Name = Army Men - Major Malfunction +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62268 -Name = Winning Eleven 6 - Final Evolution -Region = NTSC-J +Serial = SLES-53998 +Name = OutRun 2006 - Coast 2 Coast +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62269 -Name = Akagi - Yami ni Oritattatensai -Region = NTSC-J +Serial = SLES-53999 +Name = King of Fighters, The - Neo Wave +Region = PAL-E --------------------------------------------- -Serial = SLPM-62270 -Name = Simple 2000 Series Vol.19 - The Love Simulation - The Coffee Shop -Region = NTSC-J +Serial = SLES-54002 +Name = FlatOut 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62271 -Name = Simple 2000 Series Vol.20 - The Dungeon RPG -Region = NTSC-J +Serial = SLES-54003 +Name = Flatout 2 +Region = PAL-G --------------------------------------------- -Serial = SLPM-62272 -Name = Simple 2000 Series Vol.18 - The Party Sugoroku -Region = NTSC-J +Serial = SLES-54004 +Name = Disney-Pixar's Cars +Region = PAL-DU-P --------------------------------------------- -Serial = SLPM-62273 -Name = Mai-Shin 3 -Region = NTSC-J +Serial = SLES-54006 +Name = Disney-Pixar's Cars +Region = PAL-F --------------------------------------------- -Serial = SLPM-62274 -Name = Powerful Pro Baseball 9 Ketteiban -Region = NTSC-J +Serial = SLES-54007 +Name = Disney-Pixar's Cars +Region = PAL-S --------------------------------------------- -Serial = SLPM-62275 -Name = Space Raiders -Region = NTSC-J +Serial = SLES-54010 +Name = Disney-Pixar's Cars +Region = PAL-I --------------------------------------------- -Serial = SLPM-62276 -Name = Get Backers - All Members Gather -Region = NTSC-J +Serial = SLES-54011 +Name = Disney-Pixar's Cars +Region = PAL-SE --------------------------------------------- -Serial = SLPM-62277 -Name = GI Jockey 3 -Region = NTSC-J +Serial = SLES-54012 +Name = Disney-Pixar's Cars +Region = PAL-G --------------------------------------------- -Serial = SLPM-62278 -Name = Hunter x Hunter -Region = NTSC-J +Serial = SLES-54013 +Name = World Snooker Championship 2007 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62279 -Name = Winning Post 5 - Maximum 2002 -Region = NTSC-J +Serial = SLES-54015 +Name = Disney-Pixar's Cars +Region = PAL-M3 // DA, FI & NO --------------------------------------------- -Serial = SLPM-62282 -Name = Silent Scope 2 - Innocent Sweeper -Region = NTSC-J +Serial = SLES-54016 +Name = AND 1 Streetball +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62284 -Name = Europe Games Collection -Region = NTSC-J +Serial = SLES-54021 +Name = Ruff Trigger +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62285 -Name = Waku Waku Volley 2 -Region = NTSC-J +Serial = SLES-54023 +Name = Bible Game, The +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-54027 +Name = Driver - Parallel Lines +Region = PAL-M3 +--------------------------------------------- +Serial = SLES-54030 +Name = Black +Region = PAL-E Compat = 5 +vuClampMode = 0 --------------------------------------------- -Serial = SLPM-62287 -Name = Fire Pro Wrestling Z [Limited Edition] -Region = NTSC-J +Serial = SLES-54031 +Name = Da Vinci Code, The +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62288 -Name = Pop'n Music - Best Hits -Region = NTSC-J +Serial = SLES-54033 +Name = Search and Destroy +Region = PAL-E --------------------------------------------- -Serial = SLPM-62291 -Name = Bomberman Land 2 -Region = NTSC-J +Serial = SLES-54060 +Name = Fruit Machine Mania +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62292 -Name = Warrior Blade - Rasten vs. Barbarian -Region = NTSC-J +Serial = SLES-54061 +Name = FIFA World Cup - Germany '06 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62294 -Name = Simple 2000 Series Vol.21 - The Moonlight Tale RPG -Region = NTSC-J +Serial = SLES-54062 +Name = FIFA World Cup - Germany '06 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-62295 -Name = Simple 2000 Series Vol.22 - The Densha de Go! Commuter Train Version -Region = NTSC-J +Serial = SLES-54063 +Name = FIFA World Cup 2006 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62296 -Name = Simple 2000 Series Vol.05 - Love Upper Boxing -Region = NTSC-J +Serial = SLES-54064 +Name = FIFA World Cup 2006 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62297 -Name = Got To Do! Hot Spring Table Tennis -Region = NTSC-J +Serial = SLES-54066 +Name = X-Men - The Official Game +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62298 -Name = PuchiCopter -Region = NTSC-J +Serial = SLES-54068 +Name = AFL Premiership 2006 +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62299 -Name = Winback [Koei The Best] -Region = NTSC-J +Serial = SLES-54074 +Name = Speedboat GP +Region = PAL-E --------------------------------------------- -Serial = SLPM-62300 -Name = Horse Breaker [Koei The Best] -Region = NTSC-J +Serial = SLES-54075 +Name = ProStroke Golf - World Tour 2007 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62301 -Name = Aerobics Revolution -Region = NTSC-J +Serial = SLES-54080 +Name = World Super Police +Region = PAL-E --------------------------------------------- -Serial = SLPM-62305 -Name = Othello [SuperLite 2000] -Region = NTSC-J +Serial = SLES-54081 +Name = FIFA World Cup 2006 +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62307 -Name = Simple 2000 Series Vol.26 - The Paintball X 3 -Region = NTSC-J +Serial = SLES-54083 +Name = Pirates of the Caribbean - The Legend of Jack Sparrow +Region = PAL-E --------------------------------------------- -Serial = SLPM-62308 -Name = Simple 2000 Series Vol.24 - The Bowling -Region = NTSC-J +Serial = SLES-54084 +Name = PowerShot Pinball +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62310 -Name = Souten Ryuu - The Arcade -Region = NTSC-J +Serial = SLES-54085 +Name = Street Fighter Alpha Anthology +Region = PAL-E --------------------------------------------- -Serial = SLPM-62314 -Name = Simple 2000 Series Vol.07 - Saikyou! Shiro Biking Security Police -Region = NTSC-J +Serial = SLES-54087 +Name = Suikoden V +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62315 -Name = Pepit Copter [with Controller] -Region = NTSC-J +Serial = SLES-54089 +Name = State of Emergency 2 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62316 -Name = Table Mahjong [Superlite 2000 Series] -Region = NTSC-J +Serial = SLES-54093 +Name = Guitar Hero +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62318 -Name = XII Stag -Region = NTSC-J +Serial = SLES-54095 +Name = Dynasty Warriors 5 - Empires +Region = PAL-E --------------------------------------------- -Serial = SLPM-62319 -Name = Romance of the Three Kingdoms VIII -Region = NTSC-J +Serial = SLES-54096 +Name = Dynasty Warriors 5 - Empires +Region = PAL-F --------------------------------------------- -Serial = SLPM-62321 -Name = Robocop -Region = NTSC-J +Serial = SLES-54097 +Name = Dynasty Warriors 5 - Empires +Region = PAL-G --------------------------------------------- -Serial = SLPM-62322 -Name = Conveti 3, The -Region = NTSC-J +Serial = SLES-54106 +Name = Kidz Sports - Ice Hockey +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62324 -Name = Simple 2000 Series Vol.08 - Gekido! Merio King -Region = NTSC-J +Serial = SLES-54107 +Name = Kidz Sports - Basketball +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62325 -Name = High Heat Major League Baseball 2003 [Konami The Best] -Region = NTSC-J +Serial = SLES-54108 +Name = Habitrail - Hamster Ball +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62326 -Name = G-Taste Mahjong [Limited Edition] -Region = NTSC-J +Serial = SLES-54109 +Name = Off-Road Extreme! [Special Edition] +Region = PAL-E --------------------------------------------- -Serial = SLPM-62327 -Name = G-Taste Mahjong -Region = NTSC-J +Serial = SLES-54110 +Name = Monster Trux Arenas [Special Edition] +Region = PAL-Unk +--------------------------------------------- +Serial = SLES-54111 +Name = PDC World Championship Darts +Region = PAL-M6 +--------------------------------------------- +Serial = SLES-54112 +Name = Myth Makers - Orbs of Doom +Region = PAL-Unk +--------------------------------------------- +Serial = SLES-54113 +Name = Myth Makers - Super Kart GP +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62328 -Name = Simple 2000 Series Vol.27 - The Pro Yakyuu 2003 Pennent Race -Region = NTSC-J +Serial = SLES-54114 +Name = Kingdom Hearts II +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62334 -Name = Simple 2000 Series Vol.29 - The Nenai Board Game -Region = NTSC-J +Serial = SLES-54115 +Name = Delta Force - Black Hawk Down - Team Sabre +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 //missing text --------------------------------------------- -Serial = SLPM-62335 -Name = Simple 2000 Series Vol.28 - The Bushido - Tsujigiri Ichidai -Region = NTSC-J +Serial = SLES-54116 +Name = Operation Winback 2 - Project Poseidon +Region = PAL-E --------------------------------------------- -Serial = SLPM-62336 -Name = Simple 2000 Series Vol.44 - The First Step RPG -Region = NTSC-J +Serial = SLES-54117 +Name = Torrente 3 - The Protector +Region = PAL-E --------------------------------------------- -Serial = SLPM-62337 -Name = Simple 2000 Series Vol.30 - The Basketball - 3-on-3 -Region = NTSC-J +Serial = SLES-54118 +Name = Da Vinci Code, The +Region = PAL-E-DU --------------------------------------------- -Serial = SLPM-62338 -Name = Ishikura Noboru no Igo Kouza -Region = NTSC-J +Serial = SLES-54120 +Name = The Snow Queen Quest +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62339 -Name = Kikou Heidai - J-Pheonix 2 -Region = NTSC-J +Serial = SLES-54123 +Name = Marvel - Ultimate Alliance +Region = PAL-E-I --------------------------------------------- -Serial = SLPM-62340 -Name = Apprentice Magician -Region = NTSC-J +Serial = SLES-54126 +Name = Family Guy - The Video Game +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62341 -Name = Alice's Adventures in Wonderland -Region = NTSC-J +Serial = SLES-54130 +Name = Spy Hunter - Nowhere to Run +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62342 -Name = Fire Pro Wrestling Z -Region = NTSC-J +Serial = SLES-54132 +Name = Guitar Hero +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62343 -Name = Simple 2000 Series Vol.34 - Love Horror Adventure -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62344 -Name = Simple 2000 Series Vol.31 - The Chikyuu Boueigun -Region = NTSC-J +Serial = SLES-54135 +Name = Grand Theft Auto - Liberty City Stories +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62345 -Name = Simple 2000 Series Vol.32 - The Tank -Region = NTSC-J +Serial = SLES-54136 +Name = Grand Theft Auto - Liberty City Stories +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62348 -Name = Run-Dim Mechsmith -Region = NTSC-J +Serial = SLES-54137 +Name = Just Cause +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62349 -Name = Welcome to Universal Studios Japan -Region = NTSC-J +Serial = SLES-54138 +Name = Steambot Chronicles +Region = PAL-E --------------------------------------------- -Serial = SLPM-62350 -Name = Hudson Selection Vol.2 - Star Soldier -Region = NTSC-J +Serial = SLES-54139 +Name = Earache - Extreme Metal Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62353 -Name = Simple 2000 Series Vol.33 - The Jet Coaster - Yuuenchi Otsukkurou! -Region = NTSC-J +Serial = SLES-54140 +Name = Playwize Poker & Casino +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62354 -Name = Space Invaders 25th Anniversary -Region = NTSC-J +Serial = SLES-54143 +Name = Hard Rock Casino +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62355 -Name = Choro Q - High Grade 2 -Region = NTSC-J +Serial = SLES-54146 +Name = Crusty Demons +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62356 -Name = World Soccer Winning Eleven 7 -Region = NTSC-J -Compat = 5 +Serial = SLES-54150 +Name = Bionicle Heroes +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62362 -Name = Sega Ages 2500 Series Vol.01 - Phantasy Star -Region = NTSC-J +Serial = SLES-54151 +Name = Let's Make a Soccer Team! +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62364 -Name = Sega Ages 2500 Series Vol.02 - Monaco GP -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62365 -Name = Cardinal Arc - Konton no Fuusatsu -Region = NTSC-J +Serial = SLES-54152 +Name = Ant Bully, The +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62366 -Name = Sega Ages 2500 Series Vol.03 - Fantasy Zone -Region = NTSC-J -Compat = 5 +Serial = SLES-54153 +Name = Virtua Pro Football +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62367 -Name = Sega Ages 2500 Series Vol.01 - Phantasy Star [Limited Edition] -Region = NTSC-J +Serial = SLES-54154 +Name = D-Unit Drift Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62369 -Name = Karaoke Revolution - J-Pop Vol.1 -Region = NTSC-J +Serial = SLES-54155 +Name = Drag Racer USA +Region = PAL-E --------------------------------------------- -Serial = SLPM-62370 -Name = Psyvariar Medium Unit [Superlite 2000 Series] -Region = NTSC-J +Serial = SLES-54156 +Name = Mortal Kombat - Armageddon +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62371 -Name = Psyvariar Revision [Superlite 2000 Series] -Region = NTSC-J -Compat = 5 +Serial = SLES-54158 +Name = Hummer Badlands +Region = PAL-E --------------------------------------------- -Serial = SLPM-62373 -Name = Simple 2000 Series Vol.35 - The Helicopter -Region = NTSC-J +Serial = SLES-54159 +Name = Eragon +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62374 -Name = Simple 2000 Series Ultimate Vol.12 - Street Golfer -Region = NTSC-J +Serial = SLES-54160 +Name = Eragon +Region = PAL-R --------------------------------------------- -Serial = SLPM-62375 -Name = Simple 2000 Series Vol.36 - The Musume Ikusei Simulation -Region = NTSC-J +Serial = SLES-54161 +Name = Super DragonBall Z +Region = PAL-E --------------------------------------------- -Serial = SLPM-62376 -Name = Get Backers - All Members Gather [Konami The Best] -Region = NTSC-J +Serial = SLES-54162 +Name = Saint Seiya - The Hades +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLPM-62377 -Name = Get Backers Dakkanoku - Ubawareta Mugenshiro [Konami The Best] -Region = NTSC-J +Serial = SLES-54163 +Name = Naruto - Ultimate Ninja +Region = PAL-F --------------------------------------------- -Serial = SLPM-62378 -Name = Bakusou Convoy Densetsu -Region = NTSC-J +Serial = SLES-54164 +Name = DragonBall Z Budokai - Tenkaichi 2 +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62379 -Name = Karaoke Revolution - J-Pop Vol.2 -Region = NTSC-J +Serial = SLES-54165 +Name = One Piece - Grand Adventure +Region = PAL-E --------------------------------------------- -Serial = SLPM-62380 -Name = Karaoke Revolution - J-Pop Vol.3 -Region = NTSC-J +Serial = SLES-54166 +Name = Call of Duty 3 +Region = PAL-E +eeClampMode = 3 --------------------------------------------- -Serial = SLPM-62381 -Name = Karaoke Revolution - J-Pop Vol.4 -Region = NTSC-J +Serial = SLES-54167 +Name = Call of Duty 3 +Region = PAL-M3 +eeClampMode = 3 --------------------------------------------- -Serial = SLPM-62382 -Name = Karaoke Revolution - Love & Ballad -Region = NTSC-J -Compat = 4 +Serial = SLES-54168 +Name = Call of Duty 3 +Region = PAL-G +eeClampMode = 3 --------------------------------------------- -Serial = SLPM-62383 -Name = Karaoke Revolution - Night Selection 2003 -Region = NTSC-J +Serial = SLES-54169 +Name = Aeon Flux +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62384 -Name = Sega Ages 2500 Series Vol.04 - Space Harrier -Region = NTSC-J +Serial = SLES-54170 +Name = Jaws Unleashed +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62385 -Name = Sega Ages 2500 Series Vol.05 - Golden Axe -Region = NTSC-J +Serial = SLES-54171 +Name = Yakuza +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62389 -Name = Big Bass - Bass Tsuri Kanzen Kouryaku [SuperLite 2000 Series] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62390 -Name = Ichigeki Sacchuu! HoiHoi-san [Limited Edition] -Region = NTSC-J +Serial = SLES-54172 +Name = Garfield 2 - Tale of Two Kitties +Region = PAL-M11 +Compat = 5 --------------------------------------------- -Serial = SLPM-62391 -Name = Ichigeki Sacchuu! HoiHoi-san -Region = NTSC-J +Serial = SLES-54174 +Name = Zoocube +Region = PAL-E --------------------------------------------- -Serial = SLPM-62392 -Name = G1 Jockey 3 2003 -Region = NTSC-J +Serial = SLES-54178 +Name = Ant Bully, The +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-62394 -Name = Power Smash 2 [Sega The Best - 2800 Series] -Region = NTSC-J +Serial = SLES-54179 +Name = Pirates of the Caribbean - At World's End +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62395 -Name = Simple 2000 Series Vol.37 - The Shooting - Double Shienryu -Region = NTSC-J +Serial = SLES-54181 +Name = Gottlieb Pinball Classics +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62397 -Name = Simple 2000 Honkaku Shikou Vol.5 - Kiryoku Kentei -Region = NTSC-J +Serial = SLES-54182 +Name = Scarface - The World is Yours +Region = PAL-F --------------------------------------------- -Serial = SLPM-62400 -Name = Sega Ages 2500 Series Vol.12 - Puyo Puyo Tsu Perfect Set -Region = NTSC-J +Serial = SLES-54183 +Name = Scarface - The World is Yours +Region = PAL-G --------------------------------------------- -Serial = SLPM-62401 -Name = Death Crimson OX+ -Region = NTSC-J +Serial = SLES-54184 +Name = Scarface - The World is Yours +Region = PAL-R --------------------------------------------- -Serial = SLPM-62403 -Name = Chou Aniki - Seinaru Protein Densetsu -Region = NTSC-J +Serial = SLES-54185 +Name = Dirge of Cerberus - Final Fantasy VII +Region = PAL-M5 Compat = 5 +[patches = 33F7D21A] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". + // + // Override sceScfGetLanguage patches by nachbrenner: + // patch=0,EE,002486d8,word,24020000 // japanese + // patch=0,EE,002486d8,word,24020001 // english + // patch=0,EE,002486d8,word,24020004 // german +[/patches] --------------------------------------------- -Serial = SLPM-62404 -Name = Hudson Selection Vol.1 - Cubic Lode Runner -Region = NTSC-J +Serial = SLES-54186 +Name = Devil May Cry 3 - Dante's Awakening [Special Edition] +Region = PAL-M5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-62406 -Name = Kurogane no Houkou - Warship Commander [Koei The Best] -Region = NTSC-J +Serial = SLES-54187 +Name = Real World Golf 2007 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62407 -Name = Hisako Takahashi's Let's Marathon! -Region = NTSC-J +Serial = SLES-54188 +Name = Nickelodeon Avatar - The Legend of Aang +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62408 -Name = Harry Potter - Quidditch World Cup -Region = NTSC-J +Serial = SLES-54193 +Name = Sudoku, Carol Vonderman's +Region = PAL-E --------------------------------------------- -Serial = SLPM-62409 -Name = Wizardry Empire III - Ancestry of the Emperor -Region = NTSC-J +Serial = SLES-54194 +Name = Sudoku, Carol Vonderman's +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62410 -Name = Silent Scope 3 [Konami The Best] -Region = NTSC-J +Serial = SLES-54195 +Name = Turbo Trucks +Region = PAL-E --------------------------------------------- -Serial = SLPM-62412 -Name = Simple 2000 Series Vol.41 - The Volleyball -Region = NTSC-J +Serial = SLES-54199 +Name = Who Wants to be a Millionaire - Party Edition +Region = PAL-E --------------------------------------------- -Serial = SLPM-62413 -Name = Kuusen 2 -Region = NTSC-J +Serial = SLES-54200 +Name = Just Cause +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-62414 -Name = Karaoke Revolution - Dreams & Memories -Region = NTSC-J +Serial = SLES-54203 +Name = Pro Evolution Soccer 6 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62415 -Name = G1 Jockey 2 [Koei Teiban Series] -Region = NTSC-J +Serial = SLES-54204 +Name = Pro Evolution Soccer 6 +Region = PAL-I-PL --------------------------------------------- -Serial = SLPM-62416 -Name = Momotaro Densetsu XII - West Japan Hen -Region = NTSC-J +Serial = SLES-54205 +Name = WWI - Aces of the Sky +Region = PAL-E --------------------------------------------- -Serial = SLPM-62417 -Name = Hudson Selection Vol.2 - Sakigake!! Kuromati Koukou -Region = NTSC-J +Serial = SLES-54209 +Name = Sopranos, The - Road to Respect +Region = PAL-E-S --------------------------------------------- -Serial = SLPM-62418 -Name = Hudson Selection Vol.3 - PC Genjin -Region = NTSC-J -Compat = 5 +Serial = SLES-54210 +Name = NBA 2K7 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62422 -Name = Hudson Selection Vol.4 - Adventure Island (Takahashi Meijin no Bouken Jima) -Region = NTSC-J +Serial = SLES-54211 +Name = NHL 2K7 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62423 -Name = Tetris Kiwamemichi [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54212 +Name = Agent Hugo - RoboRumble +Region = PAL-M11 --------------------------------------------- -Serial = SLPM-62424 -Name = Suku Suku Inufuku -Region = NTSC-J +Serial = SLES-54213 +Name = Black Buccaneer +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62425 -Name = Sega Ages 2500 Series Vol.07 - Columns -Region = NTSC-J +Serial = SLES-54215 +Name = Monster House +Region = PAL-M4 Compat = 5 --------------------------------------------- -Serial = SLPM-62426 -Name = Simple 2000 Series Vol.42 - The Ultimate Fight -Region = NTSC-J +Serial = SLES-54216 +Name = Monster House +Region = PAL-I --------------------------------------------- -Serial = SLPM-62427 -Name = Dance Dance Revolution - Party Collection -Region = NTSC-J -Compat = 5 +Serial = SLES-54217 +Name = Monster House +Region = PAL-E --------------------------------------------- -Serial = SLPM-62428 -Name = Kiwame Mahjong DXII - The 4th Mondo 21 Cup Competition -Region = NTSC-J +Serial = SLES-54218 +Name = Rule of Rose +Region = PAL-F --------------------------------------------- -Serial = SLPM-62429 -Name = Simple 2000 Series Vol.15 - The Love Ping Pong -Region = NTSC-J +Serial = SLES-54221 +Name = LEGO Star Wars II - The Original Trilogy +Region = PAL-M6 +// allows import of characters from Lego Star Wars 1 +MemCardFilter = SLES-54221/SLES-53194 --------------------------------------------- -Serial = SLPM-62430 -Name = Simple 2000 Series Vol.43 - The Saiban -Region = NTSC-J +Serial = SLES-54222 +Name = SuperBikes Riding Challenge +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62432 -Name = Sega Ages 2500 Series Vol.11 - Hokuto no Ken -Region = NTSC-J -Compat = 5 +Serial = SLES-54223 +Name = NASCAR '07 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62433 -Name = Sega Ages 2500 Series Vol.06 - Bonanza Brothers -Region = NTSC-J -Compat = 5 +Serial = SLES-54224 +Name = Australian Idol Sing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62437 -Name = Suisui Sweet - Amai Ai no Mitsukekata -Region = NTSC-J +Serial = SLES-54225 +Name = LMA Manager 2007 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62438 -Name = Growlanser Collection -Region = NTSC-J -Compat = 4 +Serial = SLES-54230 +Name = Brian Lara International Cricket 2007 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62440 -Name = Growlanser III [Atlus The Best] -Region = NTSC-J -Compat = 4 +Serial = SLES-54232 +Name = Kingdom Hearts II +Region = PAL-F --------------------------------------------- -Serial = SLPM-62442 -Name = Youkoso Hitsuji-Mura -Region = NTSC-J +Serial = SLES-54233 +Name = Kingdom Hearts II +Region = PAL-G --------------------------------------------- -Serial = SLPM-62443 -Name = Sega Ages 2500 Series Vol.08 - Virtua Racing -Region = NTSC-J -Compat = 5 +Serial = SLES-54234 +Name = Kingdom Hearts II +Region = PAL-I --------------------------------------------- -Serial = SLPM-62444 -Name = Sega Ages 2500 Series Vol.15 - Decathlete Collection -Region = NTSC-J +Serial = SLES-54235 +Name = Kingdom Hearts II +Region = PAL-S --------------------------------------------- -Serial = SLPM-62445 -Name = Sega Ages 2500 Series Vol.09 - Gain Ground -Region = NTSC-J +Serial = SLES-54237 +Name = Pirates of the Caribbean - The Legend of Jack Sparrow +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62446 -Name = Sega Ages 2500 Series Vol.10 - Afterburner II -Region = NTSC-J +Serial = SLES-54239 +Name = Wild ARMs 4 +Region = PAL-E +--------------------------------------------- +Serial = SLES-54240 +Name = FIFA '07 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62447 -Name = Sega Ages 2500 Series Vol.13 - Outrun -Region = NTSC-J +Serial = SLES-54241 +Name = FIFA '07 +Region = PAL-F-G-I --------------------------------------------- -Serial = SLPM-62448 -Name = Crossword [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54243 +Name = FIFA '07 +Region = PAL-P-S --------------------------------------------- -Serial = SLPM-62449 -Name = Tom & Jerry - War of the Whiskers -Region = NTSC-J +Serial = SLES-54244 +Name = FIFA '07 +Region = PAL-M5 // DU & Nordic --------------------------------------------- -Serial = SLPM-62450 -Name = Karaoke Revolution - Anime Song Selection -Region = NTSC-J +Serial = SLES-54245 +Name = NHL '07 +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62451 -Name = Karaoke Revolution - J-Pop Vol.5 -Region = NTSC-J +Serial = SLES-54246 +Name = FIFA '07 +Region = PAL-R --------------------------------------------- -Serial = SLPM-62453 -Name = G-Taste Mahjong -Region = NTSC-J +Serial = SLES-54248 +Name = Madden NFL '07 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62454 -Name = Karaoke Revolution - J-Pop Vol.6 -Region = NTSC-J +Serial = SLES-54250 +Name = NBA Live '07 +Region = PAL-F --------------------------------------------- -Serial = SLPM-62455 -Name = Karaoke Revolution - J-Pop Vol.7 -Region = NTSC-J +Serial = SLES-54251 +Name = NBA Live '07 +Region = PAL-S --------------------------------------------- -Serial = SLPM-62456 -Name = Karaoke Revolution - J-Pop Vol.8 -Region = NTSC-J +Serial = SLES-54252 +Name = NBA Live '07 +Region = PAL-E-G-I --------------------------------------------- -Serial = SLPM-62457 -Name = Karaoke Revolution - Snow & Party -Region = NTSC-J +Serial = SLES-54253 +Name = Tiger Woods PGA Tour '07 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62458 -Name = Daisan Teikoku Koubouki - Aufstieg und Fall des dritten Reiches -Region = NTSC-J +Serial = SLES-54254 +Name = Evolution GT +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62459 -Name = Simple 2000 Series Vol.16 - Sengoku vs. Gendai -Region = NTSC-J +Serial = SLES-54255 +Name = King of Fighters, The - Maximum Impact 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62460 -Name = Kakoniwa Tetsudou - Blue Train Tokkyuuhen [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54256 +Name = WWII - Battle Over the Pacific +Region = PAL-E --------------------------------------------- -Serial = SLPM-62461 -Name = Shikigami no Shiro II -Region = NTSC-J -Compat = 4 +Serial = SLES-54271 +Name = Scarface - The World is Yours +Region = PAL-E --------------------------------------------- -Serial = SLPM-62462 -Name = Gradius V -Region = NTSC-J +Serial = SLES-54305 +Name = Demon Chaos +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62463 -Name = Loop Sequencer - Music Generator -Region = NTSC-J +Serial = SLES-54306 +Name = Cartoon Network Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62464 -Name = Pop'n Taisen Pazurudame Online -Region = NTSC-J +Serial = SLES-54307 +Name = Rayman - Raving Rabbids +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLPM-62465 -Name = LeMans 24 Hours [Sega The Best] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62466 -Name = Zooo [Superlite 2000 Series] -Region = NTSC-J +Serial = SLES-54308 +Name = Phantasy Star Universe +Region = PAL-M3 Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-62467 -Name = Simple 2000 Series Vol.18 - Love Aerobics -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62468 -Name = Simple 2000 Series Vol.17 - Taisen! Bakudan Poy Poy -Region = NTSC-J +Serial = SLES-54309 +Name = Strawberry Shortcake - The Sweet Dreams Game +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62469 -Name = Gunbird 1&2 -Region = NTSC-J -Compat = 5 +Serial = SLES-54310 +Name = Open Season +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62471 -Name = Uno [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54311 +Name = Noddy and The Magic Book +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62472 -Name = Diet Channel -Region = NTSC-J +Serial = SLES-54316 +Name = Open Season - Rebelles de la Foret +Region = PAL-F --------------------------------------------- -Serial = SLPM-62473 -Name = Nobunaga no Yabou - Ranseiki [Koei The Best] -Region = NTSC-J +Serial = SLES-54317 +Name = Ghost Rider +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62474 -Name = Simple 2000 Series Vol.46 - The Kanji Quiz - Challenge! Kanji Kentei -Region = NTSC-J +Serial = SLES-54319 +Name = Biker Mice from Mars +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62475 -Name = Momotaro Densetsu XI [Hudson The Best] -Region = NTSC-J +Serial = SLES-54320 +Name = Championship Manager 2007 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62476 -Name = Get Backers Dakkanoku - Ura Shinjuku Saikyou Battle -Region = NTSC-J +Serial = SLES-54321 +Name = Need for Speed - Carbon +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62477 -Name = Simple 2000 Series Vol.47 - The Gassen Sekigahara -Region = NTSC-J +Serial = SLES-54322 +Name = Need for Speed - Carbon +Region = PAL-M8 --------------------------------------------- -Serial = SLPM-62478 -Name = Bomberman Kart DX -Region = NTSC-J +Serial = SLES-54323 +Name = Need for Speed - Carbon +Region = PAL-I-S --------------------------------------------- -Serial = SLPM-62479 -Name = Karaoke Revolution - J-Pop Vol.9 -Region = NTSC-J +Serial = SLES-54324 +Name = Need for Speed - Carbon +Region = PAL-R --------------------------------------------- -Serial = SLPM-62480 -Name = Hot Gimmick Cosplay Mahjong [Limited Edition] -Region = NTSC-J +Serial = SLES-54331 +Name = Street Dance +Region = PAL-M8 --------------------------------------------- -Serial = SLPM-62481 -Name = Waku Waku Volleyball 2 [Superlite 2000 Series] -Region = NTSC-J +Serial = SLES-54332 +Name = Dance Fest +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62482 -Name = Pachinko Slot Tokodensho - Inoki Festival -Region = NTSC-J +Serial = SLES-54333 +Name = Sega MegaDrive Collection +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62483 -Name = Simple 2000 Series Vol.48 - The Taxi -Region = NTSC-J +Serial = SLES-54336 +Name = Lumines Plus +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62484 -Name = Simple 2000 Series Vol.50 - The Daibijin -Region = NTSC-J +Serial = SLES-54339 +Name = Realm of the Dead +Region = PAL-E --------------------------------------------- -Serial = SLPM-62485 -Name = Simple 2000 Series Vol.49 - The World Champ Dodgeballer -Region = NTSC-J +Serial = SLES-54340 +Name = Samurai Warriors 2 +Region = PAL-E +// reads Samurai Warriors and Samurai Warriors Xtreme Legends saves for unlockables +MemCardFilter = SLES-54340/SLES-52551/SLES-52552/SLES-52553/SLES-52554/SLES-52555/SLES-53002/SLES-53003/SLES-53004 --------------------------------------------- -Serial = SLPM-62486 -Name = Chou Saisoku! Zokusha King B.U. [Simple Series DX] -Region = NTSC-J +Serial = SLES-54341 +Name = Dancing Stage SuperNOVA +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62488 -Name = Hot Gimmick Cosplay Mahjong -Region = NTSC-J +Serial = SLES-54342 +Name = Bratz - Forever Diamondz +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-62489 -Name = Yoshinoya -Region = NTSC-J -Compat = 5 +Serial = SLES-54343 +Name = Bratz - Forever Diamondz +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62490 -Name = Dragon Quest VIII [Premium Disc] -Region = NTSC-J +Serial = SLES-54344 +Name = Bratz - Forever Diamondz +Region = PAL-M3 // Eng, DA & SE --------------------------------------------- -Serial = SLPM-62491 -Name = RockMan Power Battle Fighters -Region = NTSC-J +Serial = SLES-54346 +Name = Heatseeker +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62492 -Name = Karaoke Revolution - Kids Song Selection -Region = NTSC-J +Serial = SLES-54347 +Name = Sims 2, The - Pets +Region = PAL-M11 +Compat = 5 --------------------------------------------- -Serial = SLPM-62493 -Name = Simple 2000 Series Vol.54 - The Daikiju -Region = NTSC-J +Serial = SLES-54350 +Name = Superman Returns +Region = PAL-G --------------------------------------------- -Serial = SLPM-62494 -Name = Simple 2000 Series Vol.55 - The Cat Fight -Region = NTSC-J +Serial = SLES-54354 +Name = Final Fantasy XII +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62495 -Name = Simple 2000 Series Vol.53 - The Camera Kozo -Region = NTSC-J +Serial = SLES-54355 +Name = Final Fantasy XII +Region = PAL-F --------------------------------------------- -Serial = SLPM-62496 -Name = Simple 2000 Series Vol.52 - The Space Raiders -Region = NTSC-J +Serial = SLES-54356 +Name = Final Fantasy XII +Region = PAL-G --------------------------------------------- -Serial = SLPM-62497 -Name = Simple 2000 Series Vol.51 - The Battleship -Region = NTSC-J +Serial = SLES-54357 +Name = Final Fantasy XII +Region = PAL-I --------------------------------------------- -Serial = SLPM-62499 -Name = Tetuya Digest -Region = NTSC-J +Serial = SLES-54358 +Name = Final Fantasy XII +Region = PAL-S +Compat = 5 --------------------------------------------- -Serial = SLPM-62500 -Name = Sega Ages 2500 Series Vol.14 - Alien Syndrome -Region = NTSC-J +Serial = SLES-54359 +Name = Legend of Spyro, The - A New Beginning +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62501 -Name = Juusou Kihei Valken -Region = NTSC-J +Serial = SLES-54360 +Name = Pro Evolution Soccer 6 +Region = PAL-F --------------------------------------------- -Serial = SLPM-62502 -Name = Nobunaga Senki -Region = NTSC-J +Serial = SLES-54361 +Name = Pro Evolution Soccer 6 +Region = PAL-G --------------------------------------------- -Serial = SLPM-62503 -Name = Bomberman Battles -Region = NTSC-J +Serial = SLES-54362 +Name = Pro Evolution Soccer 6 +Region = PAL-S --------------------------------------------- -Serial = SLPM-62504 -Name = Simple 2000 Series Vol.56 - The Survival Game -Region = NTSC-J +Serial = SLES-54364 +Name = Curious George +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62505 -Name = Fukuhara Love Ping Pong -Region = NTSC-J +Serial = SLES-54365 +Name = AMF Xtreme bowling 2006 +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62506 -Name = Vampire Panic -Region = NTSC-J +Serial = SLES-54366 +Name = David Douillet Judo +Region = PAL-DU-F --------------------------------------------- -Serial = SLPM-62508 -Name = Simple 2000 Series Vol.57 - The Baseball 2004 -Region = NTSC-J +Serial = SLES-54368 +Name = RTL Ski Jumping 2007 +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62509 -Name = Simple 2000 Series Vol.58 - The Surgeon -Region = NTSC-J +Serial = SLES-54370 +Name = Alpine Ski Racing +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62510 -Name = Simple 2000 Series Vol.60 - The Tokusatsu Henshin Hero -Region = NTSC-J -Compat = 5 +Serial = SLES-54374 +Name = RTL Wintergames 2007 +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-62511 -Name = Victory Wings - Zero Pilot Series -Region = NTSC-J +Serial = SLES-54376 +Name = Barnyard +Region = PAL-E --------------------------------------------- -Serial = SLPM-62512 -Name = Keiei Simulation - Jurassic Park [Konami The Best] -Region = NTSC-J +Serial = SLES-54379 +Name = NFL Street 3 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62513 -Name = Harry Potter and the Chamber of Secrets [EA Best Hits] -Region = NTSC-J +Serial = SLES-54380 +Name = Babe +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62514 -Name = Sim People [EA Best Hits] -Region = NTSC-J +Serial = SLES-54381 +Name = Dr. Dolittle +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62515 -Name = Psikyo Shooting Collection Vol.1 - Strikers 1945 1&2 -Region = NTSC-J +Serial = SLES-54382 +Name = Jumanji +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLPM-62516 -Name = EyeToy Sports - Let's Play Sports! -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62517 -Name = Winning Post 5 [Koei The Best] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62518 -Name = Teitoku no Ketsudan 4 [Koei the Best] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62519 -Name = Sangokushi VIII [Koei The Best] -Region = NTSC-J +Serial = SLES-54383 +Name = Casper and The Ghostly Trio +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62521 -Name = Kiwame Mahjong DXII - The 4th Mondo 21 Cup Competition [Athena Best Collection] -Region = NTSC-J +Serial = SLES-54384 +Name = Destroy All Humans 2 - Make War not Love +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62523 -Name = Shikigami no Shiro [Taito The Best] -Region = NTSC-J +Serial = SLES-54385 +Name = Atelier Iris 2: The Azoth of Destiny +Region = PAL-E // Voices: English & Japanese --------------------------------------------- -Serial = SLPM-62524 -Name = Simple 2000 Series Vol.59 - The Uchyujin to Hanashi Sou! -Region = NTSC-J -Compat = 5 -[patches = 85E92C92] - - //Skip videos (custom) - patch=0,EE,001b4cd8,word,00000000 - //Skip videos (custom) - patch=0,EE,001b4c90,word,03e00008 - patch=0,EE,001b4c94,word,00000000 - -[/patches] +Serial = SLES-54388 +Name = Kim Possible - What's the Switch +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62525 -Name = Simple 2000 Series Vol.61 - The O-Ane-Chan Bara -Region = NTSC-J +Serial = SLES-54389 +Name = Tony Hawk's Project 8 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62526 -Name = Giant Robo - The Animation -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62528 -Name = Karaoke Revolution - Kazoku Idol Sengen [with Microphone] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62529 -Name = Karaoke Revolution - Kazoku Idol Sengen -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62530 -Name = Gradius III & IV [Konami Dendou Collection] -Region = NTSC-J +Serial = SLES-54393 +Name = Pippa Funnell - Take the Reins +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62531 -Name = Mahjong Yarouze! 2 [Konami Palace Selection] -Region = NTSC-J +Serial = SLES-54394 +Name = Family Guy - The Video Game +Region = PAL-E --------------------------------------------- -Serial = SLPM-62532 -Name = Ys III - Wanderers from Ys [Limited Edition] -Region = NTSC-J -Compat = 2 +Serial = SLES-54395 +Name = NeoGeo Battle Coliseum +Region = PAL-E --------------------------------------------- -Serial = SLPM-62534 -Name = Simple 2000 Series Vol.63 - Women's Swim Meet -Region = NTSC-J +Serial = SLES-54396 +Name = Cricket 07 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62536 -Name = G1 Jockey 3 [Koei The Best] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62537 -Name = Star Wars - Starfighter [EA Best Hits] -Region = NTSC-J +Serial = SLES-54400 +Name = SpongeBob Squarepants - Creature from the Krusty Krab +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62538 -Name = Kyoushuu Kidou Butai - Kougeki Helicopter Senki -Region = NTSC-J +Serial = SLES-54402 +Name = Need for Speed - Carbon [Collector's Edition] +Region = PAL-F --------------------------------------------- -Serial = SLPM-62539 -Name = Chess Champion [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54418 +Name = Powerdrome +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62540 -Name = Super Husaru [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54420 +Name = Arthus & The Minimoys +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62541 -Name = Super Bowling [Superlite 2000 Series Sports] -Region = NTSC-J +Serial = SLES-54421 +Name = Happy Feet +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62542 -Name = Simple 2000 Series Vol.20 - The Love Mahjong 2 -Region = NTSC-J +Serial = SLES-54423 +Name = Justice League Heroes +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62543 -Name = Simple 2000 Series Vol.65 - The Kyonshi Panic -Region = NTSC-J +Serial = SLES-54424 +Name = Dr. Dolittle +Region = PAL-M7 // P, PL & Nordic --------------------------------------------- -Serial = SLPM-62544 -Name = Simple 2000 Series Vol.19 - Akagi Yama ni Oritattatensai -Region = NTSC-J +Serial = SLES-54426 +Name = Casper and The Ghostly Trio +Region = PAL-M7 // P, PL & Nordic --------------------------------------------- -Serial = SLPM-62545 -Name = Simple 2000 Series Vol.64 - Splatter Action -Region = NTSC-J -Compat = 5 +Serial = SLES-54427 +Name = Jumanji +Region = PAL-M6 // Eng, P & Nordic --------------------------------------------- -Serial = SLPM-62546 -Name = Sangokushi VII [Koei Collection Series] -Region = NTSC-J +Serial = SLES-54430 +Name = Teen Titans +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-62547 -Name = Sega Ages 2500 Series Vol.16 - Virtua Fighter 2 -Region = NTSC-J -Compat = 5 +Serial = SLES-54431 +Name = Teen Titans +Region = PAL-E --------------------------------------------- -Serial = SLPM-62548 -Name = Heisei Bakutoden [SuperLite 2000 Series] -Region = NTSC-J +Serial = SLES-54432 +Name = Mercury Meltdown Remix +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62549 -Name = Otona no Gal - Kimi ni Hane Man [Jaleco The Best] -Region = NTSC-J +Serial = SLES-54437 +Name = King of Fighters XI +Region = PAL-E --------------------------------------------- -Serial = SLPM-62550 -Name = Wizardry Empire III - Ancestry of the Emperor [Good Price - Limited Edition] -Region = NTSC-J +Serial = SLES-54439 +Name = Okami +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62551 -Name = Wizardry Empire III - Ancestry of the Emperor [Good Price] -Region = NTSC-J +Serial = SLES-54440 +Name = GT-R Touring +Region = PAL-E --------------------------------------------- -Serial = SLPM-62552 -Name = Super Shanghai 2005 -Region = NTSC-J -Compat = 2 +Serial = SLES-54441 +Name = Hawk Kawasaki Racing +Region = PAL-E --------------------------------------------- -Serial = SLPM-62553 -Name = Sega Ages 2500 Series Vol.17 - Phantasy Star Generation 2 -Region = NTSC-J +Serial = SLES-54442 +Name = Guitar Hero II +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62554 -Name = EyeToy - Sega Superstars [with Camera] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-62555 -Name = Momotaro Densetsu -Region = NTSC-J +Serial = SLES-54444 +Name = Made Man +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62556 -Name = Simple 2000 Series Vol.66 - Brain Power Puzzles -Region = NTSC-J +Serial = SLES-54448 +Name = World Series of Poker - Tournament of Champions +Region = PAL-E --------------------------------------------- -Serial = SLPM-62557 -Name = Simple 2000 Series Vol.67 - The Suiri -Region = NTSC-J +Serial = SLES-54449 +Name = Chicken Little - Ace in Action +Region = PAL-E --------------------------------------------- -Serial = SLPM-62558 -Name = Simple 2000 Series Vol.21 - Kenka Joutou! Yankee Banchou -Region = NTSC-J +Serial = SLES-54450 +Name = Chicken Little - Aventures Intergalactiques +Region = PAL-F --------------------------------------------- -Serial = SLPM-62559 -Name = Sega Superstars -Region = NTSC-J +Serial = SLES-54451 +Name = Himmel und Huhn - Ace in Action +Region = PAL-G --------------------------------------------- -Serial = SLPM-62560 -Name = Growlanser IV - Return -Region = NTSC-J +Serial = SLES-54452 +Name = Chicken Little - 'As' en Accion +Region = PAL-S --------------------------------------------- -Serial = SLPM-62562 -Name = Psyvariar 2 - Ultimate Final -Region = NTSC-J +Serial = SLES-54453 +Name = Chicken Little - Ace in Action +Region = PAL-I --------------------------------------------- -Serial = SLPM-62563 -Name = Psikyo Shooting Collection Vol.2 - Sengoku Ace & Sengoku Blade -Region = NTSC-J +Serial = SLES-54454 +Name = Disgaea 2: Cursed Memories +Region = PAL-E +// Voices can be switched between Japanese and English via Options menu. --------------------------------------------- -Serial = SLPM-62564 -Name = Simple 2000 Series Vol.68 - The Runaway - Toumei Highway -Region = NTSC-J +Serial = SLES-54456 +Name = Beverly Hills Cop +Region = PAL-M11 +Compat = 5 --------------------------------------------- -Serial = SLPM-62565 -Name = Boboboubo Boubobo - Shuumare! Taikan Boubobo [with Camera] -Region = NTSC-J +Serial = SLES-54459 +Name = All Star Fighters +Region = PAL-E --------------------------------------------- -Serial = SLPM-62566 -Name = Typing of the Dead - Zombie Panic -Region = NTSC-J +Serial = SLES-54460 +Name = Dragon Sisters +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62567 -Name = Winback [Koei Best Series] -Region = NTSC-J +Serial = SLES-54461 +Name = Zombie Hunters +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62568 -Name = Shin Sangoku Musou [Koei The Best] -Region = NTSC-J +Serial = SLES-54462 +Name = Zombie Virus +Region = PAL-E --------------------------------------------- -Serial = SLPM-62569 -Name = PC Genjin [Hudson The Best] -Region = NTSC-J +Serial = SLES-54464 +Name = Global Defence Force +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62570 -Name = Takahashi Meijin no Adventure Island [Hudson The Best] -Region = NTSC-J +Serial = SLES-54465 +Name = CSI 3 - Dimensions of Murder +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62571 -Name = Simple 2000 Series Ultimate Vol.22 - Stylish Mahjong -Region = NTSC-J +Serial = SLES-54466 +Name = Test Drive Unlimited +Region = PAL-M4 Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLPM-62572 -Name = Boboboubo Boubobo - Shuumare! Taikan Boubobo -Region = NTSC-J +Serial = SLES-54467 +Name = Final Armada +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62574 -Name = Shoubushi Densetsu - Tetsuya Digest [Athena Best Collection Vol.3] -Region = NTSC-J +Serial = SLES-54468 +Name = Crazy Chicken X +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62576 -Name = Jissen Paci-Slot Hisho Kata - Fist of North Star Plus -Region = NTSC-J +Serial = SLES-54469 +Name = Home Alone +Region = PAL-M10 --------------------------------------------- -Serial = SLPM-62577 -Name = Jissen Pachi-Slot Hisshoho! Hokuto no Ken Plus -Region = NTSC-J +Serial = SLES-54471 +Name = Captain Scarlet +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62578 -Name = Buzz Rod Fishing Fantasy -Region = NTSC-J +Serial = SLES-54473 +Name = Flintstones, The - Bedrock Racing +Region = PAL-M10 --------------------------------------------- -Serial = SLPM-62579 -Name = Simple 2000 Series Vol.74 - The Girl for Prince Romance -Region = NTSC-J +Serial = SLES-54474 +Name = Curious George +Region = PAL-E --------------------------------------------- -Serial = SLPM-62580 -Name = Simple 2000 Series Vol.69 - The Board Game Collection -Region = NTSC-J +Serial = SLES-54476 +Name = Buccaneer +Region = PAL-E +--------------------------------------------- +Serial = SLES-54478 +Name = TMNT +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62581 -Name = K-1 Premium 2004 - Fighting Dynamite!! -Region = NTSC-J +Serial = SLES-54483 +Name = The Fast and the Furious +Region = PAL-E --------------------------------------------- -Serial = SLPM-62582 -Name = Slotter-Up Core 6 -Region = NTSC-J +Serial = SLES-54486 +Name = Xiaolin Showdown +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62583 -Name = Hudson Selection Vol.1 - Cubic Lode Runner [Hudson The Best] -Region = NTSC-J +Serial = SLES-54487 +Name = Tokobot Plus - Mysteries of the Karakuri +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62584 -Name = Hudson Selection Vol.2 - Star Soldier [Hudson The Best] -Region = NTSC-J +Serial = SLES-54488 +Name = WWE SmackDown! vs. RAW 2007 +Region = PAL-I --------------------------------------------- -Serial = SLPM-62585 -Name = Sakigake! Cromartie High School [Hudson The Best] -Region = NTSC-J +Serial = SLES-54489 +Name = WWE SmackDown! vs. RAW 2007 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62586 -Name = Simple 2000 Series Vol.70 - Kanshikikan -Region = NTSC-J +Serial = SLES-54490 +Name = God Hand +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62588 -Name = Simple 2000 Series Vol.73 - The Saiyuki Saruden -Region = NTSC-J +Serial = SLES-54492 +Name = Need for Speed - Carbon [Collector's Edition] +Region = PAL-E --------------------------------------------- -Serial = SLPM-62589 -Name = Simple 2000 Series Vol.72 - Ninhaza -Region = NTSC-J +Serial = SLES-54493 +Name = Need for Speed - Carbon [Collector's Edition] +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-62591 -Name = GI Jockey 3 2005 -Region = NTSC-J +Serial = SLES-54494 +Name = Little Britain - The Video Game +Region = PAL-E --------------------------------------------- -Serial = SLPM-62593 -Name = Psikyo Shooting Collection Vol.3 - Sol Divide & Dragon Blaze -Region = NTSC-J +Serial = SLES-54510 +Name = Disney's Meet the Robinsons +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62594 -Name = Hot Gimmick Cosplay Mahjong - Pure -Region = NTSC-J +Serial = SLES-54511 +Name = UEFA Champions League +Region = PAL-E --------------------------------------------- -Serial = SLPM-62595 -Name = Choro Q - HG 3 [Takara The Best] -Region = NTSC-J +Serial = SLES-54512 +Name = UEFA Champions League +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-62596 -Name = EX Okuman Chouja Game [Takara The Best] -Region = NTSC-J +Serial = SLES-54513 +Name = UEFA Champions League +Region = PAL-I-S --------------------------------------------- -Serial = SLPM-62597 -Name = Gakuen Heaven - Okawari! -Region = NTSC-J +Serial = SLES-54518 +Name = Clumsy Shumsy +Region = PAL-E --------------------------------------------- -Serial = SLPM-62599 -Name = Bomberman Kart DX -Region = NTSC-J +Serial = SLES-54521 +Name = Nickelodeon SpongeBob and Friends - Battle for Volcano Island +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62600 -Name = Simple 2000 Series Vol.75 - The Tokudane -Region = NTSC-J +Serial = SLES-54527 +Name = Flushed Away +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62601 -Name = Conveti 3, The [Hamster The Best] -Region = NTSC-J +Serial = SLES-54541 +Name = Xena - Warrior Princess +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62602 -Name = Yokushin - Giga Wing Generations -Region = NTSC-J +Serial = SLES-54542 +Name = Xena - Warrior Princess +Region = PAL-M6 // Eng, P & Nordic --------------------------------------------- -Serial = SLPM-62603 -Name = Wizardry Summoner -Region = NTSC-J +Serial = SLES-54544 +Name = Gun Club +Region = PAL-E --------------------------------------------- -Serial = SLPM-62604 -Name = Simple 2000 Series Vol.76 - The Journey to the World of English Language -Region = NTSC-J +Serial = SLES-54545 +Name = Maxxed Out Racing Nitro +Region = PAL-E --------------------------------------------- -Serial = SLPM-62605 -Name = Simple 2000 Series Vol.77 - The Hanashi Sou Kankokugo no Tabi -Region = NTSC-J +Serial = SLES-54546 +Name = Horsez +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62606 -Name = Sega Ages 2500 Series Vol.19 - Fighting Vipers -Region = NTSC-J +Serial = SLES-54548 +Name = Cocoto Fishing Master +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62607 -Name = Shikigami no Shiro III [Taito The Best] -Region = NTSC-J +Serial = SLES-54549 +Name = Crazy Frog Racer 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62608 -Name = Yoshinoya [Superlite 2000 Series] -Region = NTSC-J +Serial = SLES-54551 +Name = Premier Manager 2006-2007 +Region = PAL-G --------------------------------------------- -Serial = SLPM-62609 -Name = Majhong Haoh - Shinken Battle [Mycom The Best] -Region = NTSC-J +Serial = SLES-54553 +Name = Shrek - Smash 'n Crash Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62610 -Name = Saikyou Toudai Shogi Supesharu II -Region = NTSC-J +Serial = SLES-54554 +Name = Star Trek - Encounters +Region = PAL-M3 +Compat = 5 --------------------------------------------- -Serial = SLPM-62611 -Name = Taisen Hot Gimmick Axes Jong [Limited Edition] -Region = NTSC-J -Compat = 4 +Serial = SLES-54555 +Name = Shin Megami Tensei: Digital Devil Saga 2 +Region = PAL-E +EETimingHack = 1 +// reads data from DDS1 +MemCardFilter = SLES-54555/SLES-53458 --------------------------------------------- -Serial = SLPM-62612 -Name = Taisen Hot Gimmick Axes Jong -Region = NTSC-J +Serial = SLES-54560 +Name = Alpine Ski Racing 2007 +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62613 -Name = Tough Dark Fight -Region = NTSC-J +Serial = SLES-54561 +Name = Capcom Classics Collection Vol. 2 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62614 -Name = Horse Breaker [Koei Teiban Series] -Region = NTSC-J +Serial = SLES-54566 +Name = Barbie in The 12 Dancing Princesses +Region = PAL-E --------------------------------------------- -Serial = SLPM-62615 -Name = Slotter Up Mania 6 -Region = NTSC-J +Serial = SLES-54569 +Name = Zombie Hunters 2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62616 -Name = Simple 2000 Series Ultimate Vol.25 - Chou-Saisoku! Zokusha King BU no BU 2 -Region = NTSC-J +Serial = SLES-54579 +Name = Flintstones, The - Bedrock Racing +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62617 -Name = Simple 2000 Series Vol.79 - Akko ni Omakase! The Party Quiz -Region = NTSC-J +Serial = SLES-54581 +Name = The Red Star +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62618 -Name = Simple 2000 Series Vol.78 - The Uchuu Daisensou -Region = NTSC-J +Serial = SLES-54582 +Name = International Tennis Pro +Region = PAL-E --------------------------------------------- -Serial = SLPM-62620 -Name = Pachi-Slot Winning Post -Region = NTSC-J +Serial = SLES-54583 +Name = Surf's Up +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62621 -Name = Gradius V [Konami The Best] -Region = NTSC-J +Serial = SLES-54584 +Name = Pac-Man Rally +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62622 -Name = Slotter Up Core 7 -Region = NTSC-J +Serial = SLES-54586 +Name = Ar tonelico: Melody of Elemia +Region = PAL-E // Voices: English & Japanese --------------------------------------------- -Serial = SLPM-62623 -Name = Elemental Gerad -Region = NTSC-J +Serial = SLES-54588 +Name = Brunswick Pro Bowling +Region = PAL-E +--------------------------------------------- +Serial = SLES-54589 +Name = Global Defense Force Tactics +Region = PAL-E +--------------------------------------------- +Serial = SLES-54590 +Name = Hard Knock High +Region = PAL-E Compat = 5 -XgKickHack = 1 //Fixes chocolate coloured characters --------------------------------------------- -Serial = SLPM-62624 -Name = Indoor Helicopter Adventure 2 -Region = NTSC-J +Serial = SLES-54604 +Name = 'Que pasa Neng! El Videojuego +Region = PAL-S --------------------------------------------- -Serial = SLPM-62625 -Name = Onihama Bakusou Gurentai Gekitou Hen -Region = NTSC-J +Serial = SLES-54606 +Name = Harley-Davidson - Race to the Rally +Region = PAL-E --------------------------------------------- -Serial = SLPM-62626 -Name = Oretachi Geasen Zoku Sono Vol.01 - Scramble -Region = NTSC-J +Serial = SLES-54608 +Name = Barbie in The 12 Dancing Princesses +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62627 -Name = Oretachi Geasen Zoku Sono Vol.02 - Crazy Climber -Region = NTSC-J +Serial = SLES-54611 +Name = TT Superbikes - Real Road Racing Championship +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62628 -Name = Oretachi Geasen Zoku Sono Vol.03 - Karate Michi -Region = NTSC-J +Serial = SLES-54615 +Name = Code of the Samurai +Region = PAL-E +Compat = 5 +--------------------------------------------- +Serial = SLES-54617 +Name = Action Man A.T.O.M. - Alpha Teens on Machines +Region = PAL-M9 --------------------------------------------- -Serial = SLPM-62629 -Name = Mahjong Haoh - Battle Royal -Region = NTSC-J +Serial = SLES-54622 +Name = Grand Theft Auto - Vice City Stories +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62630 -Name = Sukusuku Inufuku [Hamster The Best] -Region = NTSC-J +Serial = SLES-54623 +Name = Grand Theft Auto - Vice City Stories +Region = PAL-G --------------------------------------------- -Serial = SLPM-62631 -Name = Simple 2000 Series 2-in-1 Vol.3 - The Puzzle Collection 2000 Toi & The Touyou Sandai Senjitsu Fusui, Seimeidanhan, Ekisen [Disc1of2] -Region = NTSC-J +Serial = SLES-54624 +Name = Samurai Warriors 2 - Empires +Region = PAL-E --------------------------------------------- -Serial = SLPM-62632 -Name = Simple 2000 Series 2-in-1 Vol.3 - The Puzzle Collection 2000 Toi & The Touyou Sandai Senjitsu Fusui, Seimeidanhan, Ekisen [Disc2of2] -Region = NTSC-J +Serial = SLES-54626 +Name = An American Tail +Region = PAL-M11 --------------------------------------------- -Serial = SLPM-62633 -Name = Simple 2000 Series 2-in-1 Vol.2 - The Bass Fishing & The Bowling Hyper [Disc1of2] -Region = NTSC-J +Serial = SLES-54627 +Name = Burnout Dominator +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62634 -Name = Simple 2000 Series 2-in-1 Vol.2 - The Bass Fishing & The Bowling Hyper [Disc2of2] -Region = NTSC-J +Serial = SLES-54629 +Name = Shin Megami Tensei - Devil Summoner - Raidou Kuzunoha vs. the Soulless Army +Region = PAL-E --------------------------------------------- -Serial = SLPM-62635 -Name = Simple 2000 Series Vol.26 - The Love Smash! 5.1 -Region = NTSC-J +Serial = SLES-54631 +Name = Harley-Davidson - Race to the Rally +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62636 -Name = Simple 2000 Series 2-in-1 Vol.1 - The Tennis & The Snowboard [Disc1of2] -Region = NTSC-J +Serial = SLES-54633 +Name = Premier Manager 08 +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62637 -Name = Simple 2000 Series 2-in-1 Vol.1 - The Tennis & The Snowboard [Disc2of2] -Region = NTSC-J +Serial = SLES-54634 +Name = Top Trumps Adventures Vol. 1 - Horror & Predators +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62638 -Name = Simple 2000 Series Vol.80 - The O-Ane-Chan Puruu -Region = NTSC-J +Serial = SLES-54635 +Name = Top Trumps Adventures Vol. 2 - Dogs & Dinosaurs +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62639 -Name = Mahjong Taikai III - Millennium League [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54639 +Name = AFL Premiership 2007 +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62640 -Name = Taikou Risshiden IV [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54641 +Name = International Cricket Captain III +Region = PAL-E --------------------------------------------- -Serial = SLPM-62641 -Name = Sangokushi VIII [with Power-Up Kit] [Koei The Best] -Region = NTSC-J +Serial = SLES-54644 +Name = Valkyrie Profile 2 - Silmeria +Region = PAL-E +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-62642 -Name = Nobunaga no Yabou - Ranseiki [with Power-Up Kit] [Koei The Best] -Region = NTSC-J +Serial = SLES-54645 +Name = Valkyrie Profile 2 - Silmeria +Region = PAL-F +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-62643 -Name = Bomberman Land 3 -Region = NTSC-J +Serial = SLES-54646 +Name = Valkyrie Profile 2 - Silmeria +Region = PAL-G +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-62644 -Name = Oretachi Geasen Zoku Sono Vol.04 - Time Pilot -Region = NTSC-J +Serial = SLES-54647 +Name = Valkyrie Profile 2 - Silmeria +Region = PAL-I +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-62645 -Name = Oretachi Geasen Zoku Sono Vol.05 - Moon Cresta -Region = NTSC-J +Serial = SLES-54648 +Name = Valkyrie Profile 2 - Silmeria +Region = PAL-S +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-62646 -Name = Oretachi Geasen Zoku Sono Vol.06 - Sonic Wings -Region = NTSC-J +Serial = SLES-54657 +Name = Charlotte's Web +Region = PAL-E --------------------------------------------- -Serial = SLPM-62648 -Name = K-1 World Max 2005 -Region = NTSC-J +Serial = SLES-54659 +Name = Star Wars - The Force Unleashed +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62649 -Name = Simple 2000 Series Vol.88 - The Sekai Meisaku Gekijou Quiz -Region = NTSC-J +Serial = SLES-54663 +Name = Jackass - The Game +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62650 -Name = Simple 2000 Series Vol.82 - The Kung-fu -Region = NTSC-J +Serial = SLES-54666 +Name = Mr. Bean +Region = PAL-M11 +Compat = 5 --------------------------------------------- -Serial = SLPM-62651 -Name = Simple 2000 Series Vol.83 - The Konchu -Region = NTSC-J +Serial = SLES-54670 +Name = Wacky Races - Mad Motors +Region = PAL-M11 --------------------------------------------- -Serial = SLPM-62652 -Name = Simple 2000 Series Vol.81 - The Chikyuu Boueigun 2 -Region = NTSC-J +Serial = SLES-54674 +Name = Lara Croft Tomb Raider - Anniversary +Region = PAL-M10 Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLPM-62653 -Name = Psikyo Shooting Collection Vol.1 - Strikers 1945 1&2 [Taito The Best] -Region = NTSC-J +Serial = SLES-54675 +Name = Street Warrior +Region = PAL-E --------------------------------------------- -Serial = SLPM-62655 -Name = Sega Ages 2500 Series Vol.11 - Hokuto no Ken -Region = NTSC-J +Serial = SLES-54677 +Name = Metal Slug - Anthology +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62656 -Name = Sega Ages 2500 Series Vol.12 - Puyo Puyo Perfect Set -Region = NTSC-J +Serial = SLES-54681 +Name = Burnout Dominator +Region = PAL-E --------------------------------------------- -Serial = SLPM-62658 -Name = Kyoushuu Kidou Butai - Kougeki Helicopter Senki [Taito The Best] -Region = NTSC-J +Serial = SLES-54683 +Name = Medal of Honor - Vanguard +Region = PAL-M9 --------------------------------------------- -Serial = SLPM-62660 -Name = Oretachi Geasen Zoku Sono Vol.09 - Super Volleyball -Region = NTSC-J +Serial = SLES-54686 +Name = Impossible Mission +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62661 -Name = Oretachi Geasen Zoku Sono - Terra Cresta -Region = NTSC-J +Serial = SLES-54687 +Name = Spectral vs. Generation +Region = PAL-E --------------------------------------------- -Serial = SLPM-62662 -Name = Simple 2000 Series 2-in-1 Vol.5 - The Shooting & The Helicopter [Disc1of2] -Region = NTSC-J +Serial = SLES-54695 +Name = Azur & Asmar +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62663 -Name = Simple 2000 Series 2-in-1 Vol.5 - The Shooting & The Helicopter [Disc2of2] -Region = NTSC-J +Serial = SLES-54705 +Name = SBK-07 - Superbike World Championship +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62664 -Name = Simple 2000 Series 2-in-1 Vol.4 - The Bushidou & The Sniper 2 [Disc1of2] -Region = NTSC-J +Serial = SLES-54711 +Name = Shadow Hearts - From the New World +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62665 -Name = Simple 2000 Series 2-in-1 Vol.4 - The Bushidou & The Sniper 2 [Disc2of2] -Region = NTSC-J +Serial = SLES-54717 +Name = Power Volleyball +Region = PAL-E --------------------------------------------- -Serial = SLPM-62666 -Name = Sega Ages 2500 Series Vol.01 - Phantasy Star Generation 1 -Region = NTSC-J +Serial = SLES-54719 +Name = Charlotte's Web +Region = PAL-M11 --------------------------------------------- -Serial = SLPM-62668 -Name = Sega Ages 2500 Series Vol.03 - Fantasy Zone -Region = NTSC-J +Serial = SLES-54723 +Name = Spiderman 3 +Region = PAL-E +Compat = 4 --------------------------------------------- -Serial = SLPM-62670 -Name = Sega Ages 2500 Series Vol.05 - Golden Axe -Region = NTSC-J +Serial = SLES-54727 +Name = Naruto - Uzumaki Chronicles +Region = PAL-M5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-62671 -Name = Sega Ages 2500 Series Vol.06 - Bonanza Bros. & Tant-R -Region = NTSC-J +Serial = SLES-54731 +Name = King of Clubs +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62675 -Name = Sega Ages 2500 Series Vol.13 - Outrun -Region = NTSC-J +Serial = SLES-54733 +Name = Disney-Pixar Ratatouille +Region = PAL-E --------------------------------------------- -Serial = SLPM-62677 -Name = Sega Ages 2500 Series Vol.15 - Decathlete Collection -Region = NTSC-J +Serial = SLES-54735 +Name = Disney-Pixar Ratatouille +Region = PAL-G --------------------------------------------- -Serial = SLPM-62678 -Name = Kurogane no Houkou - Warship Commander [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54747 +Name = Disney-Pixar Ratatouille +Region = PAL-P-S --------------------------------------------- -Serial = SLPM-62679 -Name = Relakuma - Ojama Shitemasu 2 [Limited Edition] -Region = NTSC-J +Serial = SLES-54755 +Name = Transformers - The Game +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62680 -Name = Relakuma - Ojama Shitemasu 2 -Region = NTSC-J +Serial = SLES-54756 +Name = Transformers - The Game +Region = PAL-F-S --------------------------------------------- -Serial = SLPM-62681 -Name = Nobunaga no Yabou - Ranseiki [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54770 +Name = DreamWorks Shrek the Third +Region = PAL-E --------------------------------------------- -Serial = SLPM-62682 -Name = Slotter Up Core 8 - Giant's Star III -Region = NTSC-J +Serial = SLES-54771 +Name = DreamWorks Shrek the Third +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62683 -Name = Mahjong Taikai Battle [Mycom The Best] -Region = NTSC-J +Serial = SLES-54776 +Name = Fantastic Four - Rise of the Silver Surfer +Region = PAL-E-I --------------------------------------------- -Serial = SLPM-62684 -Name = Toudai Shogi - Jouseki Dojo Kanketsuhen [Mycom The Best] -Region = NTSC-J +Serial = SLES-54779 +Name = Harry Potter and the Order of the Phoenix +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62685 -Name = Homura -Region = NTSC-J +Serial = SLES-54782 +Name = Obscure 2 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-62686 -Name = Psikyo Shooting Collection Vol.2 - Sengoku Ace & Sengoku Blade [Taito The Best] -Region = NTSC-J +Serial = SLES-54784 +Name = Xyanide - Resurrection +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62687 -Name = Sega Ages 2500 Series Vol.24 - Last Bronx -Region = NTSC-J +Serial = SLES-54788 +Name = Aqua Teen Hunger Force - Zombie Ninja Pro-Am +Region = PAL-E --------------------------------------------- -Serial = SLPM-62689 -Name = Langrisser III -Region = NTSC-J +Serial = SLES-54790 +Name = Art of Fighting Anthology +Region = PAL-E --------------------------------------------- -Serial = SLPM-62690 -Name = Raiden III -Region = NTSC-J +Serial = SLES-54793 +Name = WWE SmackDown vs. Raw 2008 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62691 -Name = Sega Ages 2500 Series Vol.20 - Space Harrier Collection -Region = NTSC-J +Serial = SLES-54804 +Name = Operation Air Assault 2 +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62692 -Name = Sega Ages 2500 Series Vol.21 - SDI & Quartet -Region = NTSC-J +Serial = SLES-54805 +Name = Wer Wird Millionar - Party Edition +Region = PAL-G --------------------------------------------- -Serial = SLPM-62693 -Name = Slotter Up Mania 7 - Saishin Saikyou Pioneer MAX -Region = NTSC-J +Serial = SLES-54810 +Name = Rugby 08 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62694 -Name = Slotter Up Mania 8 -Region = NTSC-J +Serial = SLES-54811 +Name = Rugby 08 +Region = PAL-I --------------------------------------------- -Serial = SLPM-62695 -Name = Oretachi Geasen Zoku Sono - Burger Time -Region = NTSC-J +Serial = SLES-54812 +Name = Madden NFL 08 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62696 -Name = Oretachi Geasen Zoku Sono - Yie Ar Kung-fu -Region = NTSC-J +Serial = SLES-54815 +Name = Spyro - The Eternal Night +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62697 -Name = Generation of Chaos Next [Idea Factory Collection] -Region = NTSC-J +Serial = SLES-54819 +Name = Manhunt 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62698 -Name = Ultimate Pro Pinball -Region = NTSC-J +Serial = SLES-54820 +Name = Stuntman Ignition +Region = PAL-M5 +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLPM-62699 -Name = Neverland Card War Cardinal Arc - Konton no Fuusatsu [Idea Factory Collection] -Region = NTSC-J +Serial = SLES-54822 +Name = Atelier Iris 3: Grand Phantasm +Region = PAL-E // Voices: English & Japanese --------------------------------------------- -Serial = SLPM-62700 -Name = Princess Maker [Best Hit Selection] -Region = NTSC-J +Serial = SLES-54825 +Name = Bob the Builder +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62701 -Name = Princess Maker 2 [Best Hit Selection] -Region = NTSC-J +Serial = SLES-54834 +Name = Juiced 2 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62702 -Name = Momotaro Densetsu 15 -Region = NTSC-J +Serial = SLES-54836 +Name = Disney High School Musical - Sing It! +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62703 -Name = Sega Rally Championship '95 -Region = NTSC-J -Compat = 5 +Serial = SLES-54837 +Name = Disney Princess - Enchanted Journey +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62704 -Name = Oretachi Geasen Zoku Sono Vol.10 - Quarth -Region = NTSC-J +Serial = SLES-54840 +Name = Nickelodeon Avatar - The Legend of Aang - The Burning Earth +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-62705 -Name = Oretachi Geasen Zoku Sono - Nekketsu Koukou Dodgeball-bu -Region = NTSC-J +Serial = SLES-54841 +Name = Crash of the Titans +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62706 -Name = Oretachi Geasen Zoku Sono - Nekketsu Kouha Kunio-kun -Region = NTSC-J +Serial = SLES-54842 +Name = Crash of the Titans +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62707 -Name = Oretachi Geasen Zoku Sono - Rabio Lepus -Region = NTSC-J +Serial = SLES-54845 +Name = Warriors Orochi +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-62708 -Name = Sega Ages 2500 Series Vol.22 - Advanced Daisenryaku - Doitsu Dengeki Sakusen -Region = NTSC-J +Serial = SLES-54859 +Name = Guitar Hero - Rocks The 80's +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62709 -Name = Sega Ages 2500 Series Vol.23 - Sega Memorial Selection -Region = NTSC-J +Serial = SLES-54861 +Name = Thomas & Friends - A Day at the Races +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62710 -Name = San Goku Shi VIII -Region = NTSC-J +Serial = SLES-54870 +Name = FIFA 08 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62711 -Name = Welcome to Sheep Village [Superlite 2000] -Region = NTSC-J +Serial = SLES-54871 +Name = FIFA 2008 +Region = PAL-F-G-I --------------------------------------------- -Serial = SLPM-62712 -Name = Sega Ages 2500 Series Vol.25 - Gunstar Heroes - Treasure Box -Region = NTSC-J +Serial = SLES-54872 +Name = FIFA 08 +Region = PAL-P-S --------------------------------------------- -Serial = SLPM-62713 -Name = Yokushin - Giga Wing Generations [Taito The Best] -Region = NTSC-J +Serial = SLES-54873 +Name = FIFA 2008 +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62714 -Name = Shin Sangoku Musou Series Collection Joukan -Region = NTSC-J +Serial = SLES-54875 +Name = Warriors Orochi +Region = PAL-E --------------------------------------------- -Serial = SLPM-62717 -Name = Sega Ages 2500 Series Vol.26 - Dynamite Deka -Region = NTSC-J -Compat = 5 +Serial = SLES-54877 +Name = Warriors Orochi +Region = PAL-G --------------------------------------------- -Serial = SLPM-62718 -Name = Sega Ages 2500 Series Vol.27 - Panzer Dragoon -Region = NTSC-J +Serial = SLES-54878 +Name = Naruto - Ultimate Ninja 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62719 -Name = Nobunaga no Yabou - Tenka Souyo -Region = NTSC-J +Serial = SLES-54879 +Name = WWE SmackDown vs. Raw 2008 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62720 -Name = Wizardry Summoner [Taito The Best] -Region = NTSC-J +Serial = SLES-54880 +Name = NBA 2K8 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62721 -Name = Ichigeki Sacchuu! HoiHoi-san [Konami The Best] -Region = NTSC-J +Serial = SLES-54884 +Name = Alone in the Dark +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62722 -Name = Jissen Pachi-Slot Hisshouhou! Ore no Sora -Region = NTSC-J +Serial = SLES-54885 +Name = Moto X Maniac +Region = PAL-E --------------------------------------------- -Serial = SLPM-62724 -Name = Conveti 4, The -Region = NTSC-J +Serial = SLES-54891 +Name = Clever Kids - Pony World +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62725 -Name = Mahjong Hoah - Shinken Battle II -Region = NTSC-J +Serial = SLES-54892 +Name = Phantasy Star Universe - Ambition of the Illuminus +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62726 -Name = Shooting Love - Trizeal -Region = NTSC-J +Serial = SLES-54895 +Name = NBA Live 08 +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-62727 -Name = Spectral vs. Generation -Region = NTSC-J +Serial = SLES-54897 +Name = GrimGrimoire +Region = PAL-E-JP Compat = 5 --------------------------------------------- -Serial = SLPM-62729 -Name = Oretachi Geasen Zoku Sono Vol.15 - Akumajou Dracula -Region = NTSC-J -Compat = 5 +Serial = SLES-54898 +Name = Metropolismania 2 +Region = PAL-E --------------------------------------------- -Serial = SLPM-62730 -Name = Oretachi Geasen Zoku Sono Vol.16 - Contra -Region = NTSC-J +Serial = SLES-54899 +Name = Bob the Builder +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62731 -Name = Oretachi Geasen Zoku Sono Vol.17 - Pooyan -Region = NTSC-J +Serial = SLES-54903 +Name = The Sims 2 - Castaway +Region = PAL-M13 --------------------------------------------- -Serial = SLPM-62733 -Name = Garfield - Saving Arlene -Region = NTSC-J +Serial = SLES-54904 +Name = The Simpsons Game +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLPM-62736 -Name = Slotter Up Mania [Dorart Value Series] -Region = NTSC-J +Serial = SLES-54906 +Name = The Simpsons Game +Region = PAL-I-S --------------------------------------------- -Serial = SLPM-62737 -Name = Rally Shox & Freestyle Motorcross [EA Best Hits] -Region = NTSC-J +Serial = SLES-54913 +Name = Pro Evolution Soccer 2008 +Region = PAL-E-S +Compat = 5 --------------------------------------------- -Serial = SLPM-62739 -Name = Suro Genjin -Region = NTSC-J +Serial = SLES-54914 +Name = Pro Evolution Soccer 2008 +Region = PAL-I-P --------------------------------------------- -Serial = SLPM-62740 -Name = Saikyo Shogi Gekisashi Special -Region = NTSC-J +Serial = SLES-54915 +Name = Sonic Riders - Zero Gravity +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62743 -Name = School Heaven Okawari [The Best] -Region = NTSC-J +Serial = SLES-54918 +Name = Agent Hugo - Lemoon Twist +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-62744 -Name = Oretachi Geasen Zoku Sono - Thunder Cross -Region = NTSC-J +Serial = SLES-54929 +Name = Realplay Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62745 -Name = Oretachi Geasen Zoku Sono Vol.19 - Trio the Punch -Region = NTSC-J +Serial = SLES-54931 +Name = Looney Tunes - ACME Arsenal +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62746 -Name = Sega Ages 2500 Series Vol.28 - Tetris Collection -Region = NTSC-J +Serial = SLES-54937 +Name = RTL Biathon 2008 +Region = PAL-G --------------------------------------------- -Serial = SLPM-62747 -Name = G1 Jockey 3 [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54939 +Name = RTL Winter Sports 2008 - The Ultimate Challenge +Region = PAL-G --------------------------------------------- -Serial = SLPM-62748 -Name = Nobunaga no Yabou - Renseiki [with Power-Up Kit] [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54942 +Name = Disney Princess - Enchanted Journey +Region = PAL-F-G-I --------------------------------------------- -Serial = SLPM-62749 -Name = Jissen Pachi-Slot Hisshouhou! Mister Magic Neo -Region = NTSC-J +Serial = SLES-54945 +Name = Dragonball Z Budokai Tenkaichi 3 +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-62750 -Name = Momotaro Densetsu 16 -Region = NTSC-J +Serial = SLES-54946 +Name = Sega Superstars Tennis +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62752 -Name = Slotter Up Core 9 -Region = NTSC-J +Serial = SLES-54949 +Name = Catz +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62753 -Name = Homura [Taito The Best] -Region = NTSC-J +Serial = SLES-54952 +Name = Ben 10: Protector of Earth +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-62754 -Name = Puyo Puyo! 15th Anniversary -Region = NTSC-J +Serial = SLES-54953 +Name = Totally Spies! Totally Party +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62755 -Name = Mahjong Haoh - Shinken Battle [Mycom The Best] -Region = NTSC-J +Serial = SLES-54955 +Name = Finkles World +Region = PAL-E --------------------------------------------- -Serial = SLPM-62756 -Name = Saikyou Toudai Shogi 6 [Mycom The Best] -Region = NTSC-J +Serial = SLES-54957 +Name = Cheggers Party Quiz +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62757 -Name = EX Okuman Chouja Game [Atlus Best Collection] -Region = NTSC-J +Serial = SLES-54958 +Name = Alan Hansen's Sports Challenge +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62758 -Name = River Ride Adventure featuring Salomon -Region = NTSC-J +Serial = SLES-54962 +Name = Guitar Hero III - Legends of Rock +Region = PAL-E --------------------------------------------- -Serial = SLPM-62759 -Name = Nobunaga no Yabou - Soutensoku [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54963 +Name = Tony Hawks - Proving Ground +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-62760 -Name = Sega Ages 2500 Vol.29 - Monster World Complete Collection -Region = NTSC-J +Serial = SLES-54964 +Name = Tony Hawk's Proving Ground +Region = PAL-M4 +--------------------------------------------- +Serial = SLES-54975 +Name = George Of The Jungle +Region = PAL-E Compat = 5 --------------------------------------------- -Serial = SLPM-62761 -Name = Choro Q - HG 2 [Atlus Best Collection] -Region = NTSC-J +Serial = SLES-54981 +Name = Bob the Builder - Festival of Fun +Region = PAL-F-G-I --------------------------------------------- -Serial = SLPM-62762 -Name = Sangokushi VIII [with Poer-Up Kit] [Koei Selection Series] -Region = NTSC-J +Serial = SLES-54986 +Name = Bratz - The Movie +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-62763 -Name = Bomberman Land 3 [Hudson Best Version] -Region = NTSC-J +Serial = SLES-54988 +Name = Bratz - The Movie +Region = PAL-G --------------------------------------------- -Serial = SLPM-62764 -Name = Ojama Shitemasu 2 Shuukan [Best Version] -Region = NTSC-J +Serial = SLES-54992 +Name = PDC World Championship Darts 2008 +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-62766 -Name = Sega Ages 2500 Vol.30 - Galaxy Force II -Region = NTSC-J +Serial = SLES-54994 +Name = Pippa Funnell - Ranch Rescue +Region = PAL-M11 --------------------------------------------- -Serial = SLPM-62767 -Name = Sega Ages 2500 Vol.31 - Dennou Senki Virtual On -Region = NTSC-J +Serial = SLES-54995 +Name = Puzzle Quest - Challenge of the Warlords +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62770 -Name = Volleyball World Cup - Venus Evolution -Region = NTSC-J -Compat = 5 +Serial = SLES-54996 +Name = The Golden Compass +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62771 -Name = Choro Q HG 3 [Atlus Best Collection] -Region = NTSC-J +Serial = SLES-54997 +Name = Mercenaries 2 - World in Flames +Region = PAL-E +Compat = 5 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-62772 -Name = Mahjong Haoh - Battle Royal [Mycom Best] -Region = NTSC-J +Serial = SLES-54998 +Name = Bratz - The Movie +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-62773 -Name = Slotter Up Mania 9 -Region = NTSC-J +Serial = SLES-55000 +Name = Mercenaries 2 - World in Flames +Region = PAL-G +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-62774 -Name = Jissen Pachi-Slot Hisshouhou! Selection - Salaryman Kintarou - Slotter Kintarou - Ore no Sora -Region = NTSC-J +Serial = SLES-55001 +Name = Mercenaries 2 - World in Flames +Region = PAL-S +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-62775 -Name = Sega Ages 2500 Vol.32 - Phantasy Star Complete Collection -Region = NTSC-J +Serial = SLES-55002 +Name = Need for Speed - ProStreet +Region = PAL-E --------------------------------------------- -Serial = SLPM-62778 -Name = Slotter Up Mania 10 - Pioneer Special 3 -Region = NTSC-J +Serial = SLES-55003 +Name = Need for Speed - ProStreet +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-62779 -Name = Puyo Puyo! [Special Price] -Region = NTSC-J +Serial = SLES-55005 +Name = Need for Speed - ProStreet +Region = PAL-M8 --------------------------------------------- -Serial = SLPM-62780 -Name = Fantasy Zone Complete Collection -Region = NTSC-J -Compat = 5 +Serial = SLES-55007 +Name = Boogie +Region = PAL-M7 +Compat = 4 --------------------------------------------- -Serial = SLPM-64504 -Name = Maximo -Region = NTSC-K +Serial = SLES-55013 +Name = Iridium Runners +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-64522 -Name = La Pucelle -Region = NTSC-K -Compat = 5 +Serial = SLES-55016 +Name = DreamWorks Bee Movie Game +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-64523 -Name = Marvel Vs Capcom 2 -Region = NTSC-K +Serial = SLES-55017 +Name = Yu-Gi-Oh! GX - Tag Force Evolution +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-64525 -Name = Guilty Gear X Plus "By Your Side" -Region = NTSC-K +Serial = SLES-55018 +Name = Shin Megami Tensei: Persona 3 +Region = PAL-E Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-65001 -Name = Kessen -Region = NTSC-J -Compat = 5 +Serial = SLES-55019 +Name = Ratchet & Clank - Size Matters +Region = PAL-M13 --------------------------------------------- -Serial = SLPM-65002 -Name = Love/0 Story -Region = NTSC-J -Compat = 5 +Serial = SLES-55020 +Name = Die Simpsons - Das Spiel +Region = PAL-G --------------------------------------------- -Serial = SLPM-65004 -Name = Reiselied - Ephemeral Fantasia -Region = NTSC-J +Serial = SLES-55021 +Name = Pro Evolution Soccer 2008 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65005 -Name = I am the Coach -Region = NTSC-J +Serial = SLES-55024 +Name = Nickelodeon SpongeBob's Atlantis SquarePantis +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65006 -Name = Beatmania IIDX - 3rd Style -Region = NTSC-J +Serial = SLES-55032 +Name = Off Road +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65007 -Name = Roadsters Trophy 2000 -Region = NTSC-J +Serial = SLES-55034 +Name = Asterix at the Olympic Games +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65008 -Name = 7 Blades -Region = NTSC-J +Serial = SLES-55039 +Name = Rock Band +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65009 -Name = ESPN X-Games Snowboarding -Region = NTSC-J +Serial = SLES-55050 +Name = MX vs. ATV - Untamed +Region = PAL-E --------------------------------------------- -Serial = SLPM-65010 -Name = Onimusha -Region = NTSC-J -Compat = 1 +Serial = SLES-55052 +Name = Alvin and the Chipmunks +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65011 -Name = Guitar Freaks 3rd Mix and DrumMania 2nd Mix -Region = NTSC-J -Compat = 5 +Serial = SLES-55053 +Name = Jetix - Puzzle Buzzle +Region = PAL-M10 --------------------------------------------- -Serial = SLPM-65012 -Name = Gitaroo Man -Region = NTSC-J -Compat = 5 -eeRoundMode = 1 -vuRoundMode = 3 +Serial = SLES-55064 +Name = Luxor - Pharaoh's Challenge +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65013 -Name = Shadow of Memories -Region = NTSC-J +Serial = SLES-55069 +Name = 7 Wonders of the Ancient World +Region = PAL-M5 +--------------------------------------------- +Serial = SLES-55075 +Name = Speed racer +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLPM-65014 -Name = Bouken Jidai Katsugeki - Goemon -Region = NTSC-J -Compat = 4 -GoemonTlbHack = 1 +Serial = SLES-55079 +Name = CID the Dummy +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65015 -Name = Kessen 2 -Region = NTSC-J +Serial = SLES-55081 +Name = Jackass - The Game +Region = PAL-E --------------------------------------------- -Serial = SLPM-65016 -Name = Love Songs [Limited Edition] -Region = NTSC-J +Serial = SLES-55090 +Name = Naruto - Uzumaki Chronicles 2 +Region = PAL-M5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65017 -Name = Love Songs - Idol is my Classmate -Region = NTSC-J +Serial = SLES-55105 +Name = UEFA Euro 2008 - Austria-Switzerland +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65018 -Name = Z.O.E.: Zone of the Enders [Limited Edition] -Region = NTSC-J +Serial = SLES-55108 +Name = Samurai Warriors 2 - Xtreme Legends +Region = PAL-E --------------------------------------------- -Serial = SLPM-65019 -Name = Z.O.E.: Zone of the Enders -Region = NTSC-J +Serial = SLES-55110 +Name = Odin Sphere +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65020 -Name = ParaPara Paradise -Region = NTSC-J +Serial = SLES-55123 +Name = Legend of Sayuki +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65021 -Name = Super Galdelic Hour -Region = NTSC-J +Serial = SLES-55126 +Name = Artlist Collection - The Dog Island +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65022 -Name = BioHazard - Code Veronica - Perfect Version -Region = NTSC-J -Compat = 5 +Serial = SLES-55129 +Name = Jumper - Griffin's Story +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65023 -Name = Devil May Cry [Demo] [BioHazard - Code Veronica - Perfect Version - Bonus Disc] -Region = NTSC-J +Serial = SLES-55133 +Name = LEGO Indiana Jones - The Original Adventure +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65024 -Name = BioHazard - 5th Anniversary Package - Nightmare Returns [Disc1of2] -Region = NTSC-J +Serial = SLES-55135 +Name = LEGO Batman - The VideoGame +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65025 -Name = BioHazard - 5th Anniversary Package - Nightmare Returns [Disc2of2] -Region = NTSC-J +Serial = SLES-55136 +Name = Let's Ride! Silver Buckle Stables +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65026 -Name = Beatmania IIDX - 4th Style -Region = NTSC-J +Serial = SLES-55147 +Name = Silent Hill Origins +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65032 -Name = Tokyo Bus Guide - Annai -Region = NTSC-J +Serial = SLES-55150 +Name = TNA Impact +Region = PAL-M5 +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65033 -Name = Kikou Heiden - J-Pheonix -Region = NTSC-J +Serial = SLES-55163 +Name = The Legend of Spyro - Dawn of the Dragon +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65034 -Name = Sangokushi North Winds -Region = NTSC-J +Serial = SLES-55169 +Name = Monster Lab +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65038 -Name = Devil May Cry -Region = NTSC-J -Compat = 5 +Serial = SLES-55174 +Name = NHL 08 +Region = PAL-R +--------------------------------------------- +Serial = SLES-55187 +Name = Disney-Pixar WALL-E +Region = PAL-F-G +--------------------------------------------- +Serial = SLES-55191 +Name = Guitar Hero - Aerosmith +Region = PAL-E --------------------------------------------- -Serial = SLPM-65039 -Name = Densha de Go! Shinkansen -Region = NTSC-J +Serial = SLES-55197 +Name = Dancing Stage SuperNOVA 2 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65040 -Name = Fear, The [Disc1of4] -Region = NTSC-J +Serial = SLES-55198 +Name = Iron Man +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65041 -Name = Fear, The [Disc2of4] -Region = NTSC-J +Serial = SLES-55204 +Name = Crash - Mind Over Mutant +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65042 -Name = Fear, The [Disc3of4] -Region = NTSC-J +Serial = SLES-55207 +Name = Alone in the Dark +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65043 -Name = Fear, The [Disc4of4] -Region = NTSC-J +Serial = SLES-55208 +Name = The Incredible Hulk +Region = PAL-E-F-G --------------------------------------------- -Serial = SLPM-65044 -Name = Aizouban Angelique Trois [Koei The Best] -Region = NTSC-J +Serial = SLES-55215 +Name = Growlanser - Heritage of War +Region = PAL-E --------------------------------------------- -Serial = SLPM-65047 -Name = Capcom vs. SNK 2 -Region = NTSC-J -Compat = 5 +Serial = SLES-55216 +Name = Baroque +Region = PAL-E --------------------------------------------- -Serial = SLPM-65049 -Name = Beatmania IIDX - 5th Style - New Songs Collection -Region = NTSC-J +Serial = SLES-55220 +Name = Summer Athletics +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65050 -Name = Yu-Gi-Oh! Shin Duel Monsters 2 -Region = NTSC-J +Serial = SLES-55231 +Name = Fatal Fury - Battle Archives Volume 1 +Region = PAL-E --------------------------------------------- -Serial = SLPM-65051 -Name = Silent Hill 2 -Region = NTSC-J -Compat = 5 +Serial = SLES-55232 +Name = SNK Arcade Classics Vol. 1 +Region = PAL-E --------------------------------------------- -Serial = SLPM-65052 -Name = Guitar Freaks 4th Mix & Drummania 3rd Mix -Region = NTSC-J -Compat = 5 +Serial = SLES-55233 +Name = World Heroes Anthology +Region = PAL-E --------------------------------------------- -Serial = SLPM-65053 -Name = Shin Sangoku Musou 2 -Region = NTSC-J +Serial = SLES-55237 +Name = Naruto - Ultimate Ninja 3 +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65054 -Name = Princess Abarenbou -Region = NTSC-J +Serial = SLES-55240 +Name = Pipe Mania +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65056 -Name = Orega Kantoku da Vol.2 - Getitou Pennent Race -Region = NTSC-J +Serial = SLES-55242 +Name = Yakuza 2 +Region = PAL-E +// allows import of Yakuza 1 data +MemCardFilter = SLES-55242/SLES-54171 --------------------------------------------- -Serial = SLPM-65057 -Name = 7 Blades -Region = NTSC-J +Serial = SLES-55243 +Name = FIFA 09 +Region = PAL-E --------------------------------------------- -Serial = SLPM-65059 -Name = BioHazard Gun Survivor 2 - CODE - Veronica [with Guncon] -Region = NTSC-J +Serial = SLES-55244 +Name = FIFA 09 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65060 -Name = BioHazard Gun Survivor 2 - CODE - Veronica -Region = NTSC-J +Serial = SLES-55245 +Name = FIFA 09 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65061 -Name = Adventure of Tokyo Disney Sea -Region = NTSC-J +Serial = SLES-55247 +Name = FIFA 09 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65065 -Name = Sorcerous Stabber Orphen [Kadokawa The Best] -Region = NTSC-J +Serial = SLES-55248 +Name = Harry Potter and the Half-Blood Prince +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65066 -Name = Bouken Jidai Katsugeki Goemon -Region = NTSC-J +Serial = SLES-55249 +Name = Harry Potter and the Half-Blood Prince +Region = PAL-M10 --------------------------------------------- -Serial = SLPM-65070 -Name = Shadow of Memories -Region = NTSC-J +Serial = SLES-55251 +Name = WWE SmackDown vs. Raw 2009 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65071 -Name = Drift Champ -Region = NTSC-J +Serial = SLES-55253 +Name = NBA 2K5 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65072 -Name = ESPN Winter X-Games Snowboarding 2002 -Region = NTSC-J +Serial = SLES-55263 +Name = Nickelodeon Avatar - The Legend of Aang - Into the Inferno +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-65073 -Name = Genso Suikoden III -Region = NTSC-J +Serial = SLES-55266 +Name = MotoGP 08 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65074 -Name = Genso Suikoden III -Region = NTSC-J +Serial = SLES-55274 +Name = Diabolik - The Original Sin +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65075 -Name = K-1 World Grand Prix 2001 -Region = NTSC-J +Serial = SLES-55280 +Name = King of Fighters '98 - Ultimate Match +Region = PAL-E --------------------------------------------- -Serial = SLPM-65076 -Name = Gundam - Federation vs. Zeon DX -Region = NTSC-J +Serial = SLES-55292 +Name = Samurai Shodown Anthology +Region = PAL-E --------------------------------------------- -Serial = SLPM-65077 -Name = Metal Gear Solid 2 - Sons of Liberty [Premium Package] -Region = NTSC-J +Serial = SLES-55328 +Name = The Millenium European Paintball Series - Championship Paintball 2009 +Region = PAL-E --------------------------------------------- -Serial = SLPM-65078 -Name = Metal Gear Solid 2 - Sons of Liberty -Region = NTSC-J +Serial = SLES-55329 +Name = Shrek's Carnival Craze +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-65080 -Name = Tokimeki Memorial 3 -Region = NTSC-J -Compat = 5 +Serial = SLES-55331 +Name = Cabela's Dangerous Adventures +Region = PAL-E --------------------------------------------- -Serial = SLPM-65082 -Name = Grandia Extreme [Limited Edition] -Region = NTSC-J +Serial = SLES-55341 +Name = Hasbro Family Game Night +Region = PAL-G --------------------------------------------- -Serial = SLPM-65083 -Name = Houshin Engi 2 -Region = NTSC-J +Serial = SLES-55342 +Name = Hasbro Family Game Night +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-65085 -Name = Alone in the Dark -Region = NTSC-J +Serial = SLES-55344 +Name = Rock Band - Song Back 1 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65086 -Name = Ayumi Hamasaki Dome Tour 2001 - A Visual Mix [Disc1of2] -Region = NTSC-J +Serial = SLES-55345 +Name = James Bond: Quantum of Solace +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65087 -Name = Ayumi Hamasaki Dome Tour 2001 - A Visual Mix [Disc2of2] -Region = NTSC-J +Serial = SLES-55347 +Name = Dragonball Z Infinite World +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65089 -Name = Grandia Extreme -Region = NTSC-J +Serial = SLES-55349 +Name = Need For Speed - Undercover +Region = PAL-E --------------------------------------------- -Serial = SLPM-65090 -Name = Spy Hunter -Region = NTSC-J +Serial = SLES-55350 +Name = Need for Speed - Undercover +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65091 -Name = Harukanaru Toki no Naka de 2 [Limited Edition] -Region = NTSC-J +Serial = SLES-55352 +Name = Need For Speed - Undercover +Region = PAL-R +Compat = 5 --------------------------------------------- -Serial = SLPM-65092 -Name = Harukanaru Toki no Naka de 2 -Region = NTSC-J +Serial = SLES-55354 +Name = Shin Megami Tensei: Persona 3 FES +Region = PAL-E +VuClipFlagHack = 1 +MemCardFilter = SLES-55354/SLES-55018 --------------------------------------------- -Serial = SLPM-65093 -Name = Sangokushi Senki -Region = NTSC-J +Serial = SLES-55355 +Name = Guitar Hero - World Tour +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65094 -Name = Keyboardmania 2nd & 3rd Mix -Region = NTSC-J +Serial = SLES-55365 +Name = Agent Hugo - Hula Holiday +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-65095 -Name = Space Channel 5 -Region = NTSC-J +Serial = SLES-55367 +Name = Call of Duty - World at War - Final Fronts +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65096 -Name = Space Channel 5 - Part 2 -Region = NTSC-J -Compat = 4 +Serial = SLES-55369 +Name = Call of Duty - World at War - Final Fronts +Region = PAL-G --------------------------------------------- -Serial = SLPM-65097 -Name = Galacta Meisaku Gekijou - Rakugaki Oukouku -Region = NTSC-J -Compat = 5 +Serial = SLES-55371 +Name = Barbie Horse Adventures - Riding Camp +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65098 -Name = Silent Hill 2 - Saigo no Uta -Region = NTSC-J +Serial = SLES-55372 +Name = Spiderman: Web of Shadows +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65100 -Name = Onimusha 2 -Region = NTSC-J +Serial = SLES-55373 +Name = The King of Fighters Collection: The Orochi Saga +Region = PAL-E --------------------------------------------- -Serial = SLPM-65101 -Name = Onimusha 2 -Region = NTSC-J +Serial = SLES-55374 +Name = DreamWorks Madagascar 2 - Escape 2 Africa +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-65105 -Name = Shin Combat Choro Q -Region = NTSC-J +Serial = SLES-55376 +Name = Nickelodeon Tak and the Guardians of Gross +Region = PAL-E-G --------------------------------------------- -Serial = SLPM-65107 -Name = Simple 2000 Series Ultimate Vol.02 - Edit Racing -Region = NTSC-J +Serial = SLES-55380 +Name = Sonic Unleashed +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65108 -Name = Jet de Go! 2 -Region = NTSC-J +Serial = SLES-55382 +Name = Warriors Orochi 2 +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-65109 -Name = J-League Sakatsuku 2002 -Region = NTSC-J +Serial = SLES-55384 +Name = Warriors Orochi 2 +Region = PAL-G --------------------------------------------- -Serial = SLPM-65110 -Name = Roommania #203 -Region = NTSC-J +Serial = SLES-55392 +Name = Disne Sing It! +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65111 -Name = NFL 2K2 -Region = NTSC-J +Serial = SLES-55394 +Name = Disney TH!NK Fast +Region = PAL-E --------------------------------------------- -Serial = SLPM-65113 -Name = Splashdown -Region = NTSC-J +Serial = SLES-55395 +Name = Disney TH!NK Fast +Region = PAL-M3 // DU, FR & GE --------------------------------------------- -Serial = SLPM-65115 -Name = Final Fantasy X International -Region = NTSC-J -IPUWaitHack = 1 +Serial = SLES-55398 +Name = Disney High School Musical 3 - Senior Year Dance! +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65116 -Name = Lilie no Atelier Plus: Salburg no Renkinjutsushi 3 -Region = NTSC-J +Serial = SLES-55405 +Name = Pro Evolution Soccer 2009 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65117 -Name = Kikou Heiden J-Pheonix [Takara The Best] -Region = NTSC-J +Serial = SLES-55406 +Name = Pro Evolution Soccer 2009 +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65118 -Name = Tokimeki Memorial 2 - Video Clips -Region = NTSC-J +Serial = SLES-55409 +Name = TT SuperBikes - Legends +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65119 -Name = Shine - Spinning World -Region = NTSC-J +Serial = SLES-55430 +Name = Disney Bolt +Region = PAL-M3 // DU, FR & GE --------------------------------------------- -Serial = SLPM-65120 -Name = Shine - Spinning World -Region = NTSC-J +Serial = SLES-55431 +Name = Disney Vol't +Region = PAL-R --------------------------------------------- -Serial = SLPM-65121 -Name = Switch -Region = NTSC-J +Serial = SLES-55440 +Name = Ben 10: Alien Force +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65122 -Name = J-Pheonix Burst Tactics [Limited Edition] -Region = NTSC-J +Serial = SLES-55442 +Name = Tomb Raider Underworld +Region = PAL-M8 +Compat = 5 +[patches] + comment=- This gamedisc supports multiple languages. + comment=- Language selection is done through the BIOS configuration. + comment=- Implementation requires Full boot - "Boot CDVD (full)". +[/patches] --------------------------------------------- -Serial = SLPM-65123 -Name = J-Pheonix Burst Tactics -Region = NTSC-J +Serial = SLES-55443 +Name = Mana Khemia - Alchemists of Al-Revis +Region = PAL-E +Compat = 5 +DMABusyHack = 1 --------------------------------------------- -Serial = SLPM-65124 -Name = Auto Modellista -Region = NTSC-J +Serial = SLES-55444 +Name = Ar tonelico II: Melody of Metafalica +Region = PAL-E // Voices: English & Japanese +Compat = 5 +eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLPM-65125 -Name = NBA 2K3 -Region = NTSC-J +Serial = SLES-55448 +Name = Indiana Jones and the Staff of Kings +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65126 -Name = Tokimeki Mamorial - Girl's Side -Region = NTSC-J +Serial = SLES-55453 +Name = Singstar Queen +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-65130 -Name = Dramatic Soccer Game - Becoming a National Team Member -Region = NTSC-J +Serial = SLES-55457 +Name = AC/DC LIVE: Rock Band Track Pack +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65131 -Name = Judie no Atelier: Gramnad no Renkinjutsushi -Region = NTSC-J +Serial = SLES-55459 +Name = Jelly Belly: Ballistic Beans +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65132 -Name = Warriors of Might and Magic -Region = NTSC-J +Serial = SLES-55467 +Name = Trivial Pursuit +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65133 -Name = Konohana 2 -Region = NTSC-J +Serial = SLES-55470 +Name = Coraline +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65134 -Name = Red Card -Region = NTSC-J +Serial = SLES-55472 +Name = Guitar Hero - Metalica +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65135 -Name = NBA 2K2 -Region = NTSC-J +Serial = SLES-55474 +Name = Shin Megami Tensei: Persona 4 +Region = PAL-E +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-65137 -Name = All-Star Baseball 2003 -Region = NTSC-J +Serial = SLES-55476 +Name = Scooby-Doo! First Frights +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65139 -Name = Gun Survivor 3 - Dino Crisis -Region = NTSC-J -Compat = 5 +Serial = SLES-55482 +Name = Naruto Shipuuden - Ultimate Ninja 4 +Region = PAL-G-I-S --------------------------------------------- -Serial = SLPM-65140 -Name = Jojo's Bizarre Adventure 5 -Region = NTSC-J +Serial = SLES-55486 +Name = DreamWorks Monsters vs. Aliens +Region = PAL-M7 --------------------------------------------- -Serial = SLPM-65141 -Name = Tsuzuse Gareijiri -Region = NTSC-J +Serial = SLES-55487 +Name = Ice Age 3 - Dawn of the Dinosaurs +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65142 -Name = Anime Super Remix, The - Kyojin no Hoshi -Region = NTSC-J +Serial = SLES-55492 +Name = SBK 09 - Superbike World Championship +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65143 -Name = Anime Super Remix, The - Ashita no Joe 2 -Region = NTSC-J +Serial = SLES-55494 +Name = X-Men Origins - Wolverine +Region = PAL-E-F +FpuCompareHack = 1 //flickering objects, sound loop --------------------------------------------- -Serial = SLPM-65148 -Name = Densha de Go! Ryojouhen -Region = NTSC-J +Serial = SLES-55495 +Name = X-Men Origins - Wolverine +Region = PAL-G-F-S +FpuCompareHack = 1 //flickering objects, sound loop --------------------------------------------- -Serial = SLPM-65150 -Name = Aero Dancing 4 - New Generation -Region = NTSC-J +Serial = SLES-55496 +Name = Secret Agent Clank +Region = PAL-Unk --------------------------------------------- -Serial = SLPM-65152 -Name = GunGrave [Limited Edition] -Region = NTSC-J +Serial = SLES-55500 +Name = Disney G-Force +Region = PAL-G-I --------------------------------------------- -Serial = SLPM-65153 -Name = GunGrave -Region = NTSC-J +Serial = SLES-55509 +Name = Music Maker - Rockstar +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-65154 -Name = Rumbling Hearts -Region = NTSC-J +Serial = SLES-55511 +Name = MTV Pimp My Ride - Street Racing +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65155 -Name = Rumbling Hearts -Region = NTSC-J +Serial = SLES-55520 +Name = Transformers - Revenge of the Fallen +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65156 -Name = Beatmania IIDX - 6th Style -Region = NTSC-J +Serial = SLES-55525 +Name = Disney-Pixar Oben +Region = PAL-G --------------------------------------------- -Serial = SLPM-65158 -Name = Riding Spirits -Region = NTSC-J +Serial = SLES-55533 +Name = Guitar Hero 5 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65160 -Name = Gitaroo Man [The Best] -Region = NTSC-J +Serial = SLES-55537 +Name = G.I. Joe - The Rise of Cobra +Region = PAL-M8 --------------------------------------------- -Serial = SLPM-65161 -Name = Aero Dancing 4 -Region = NTSC-J +Serial = SLES-55542 +Name = Disney Sing It - Pop Hits +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65164 -Name = Project Minerva [Limited Edition] -Region = NTSC-J +Serial = SLES-55545 +Name = WWE SmackDown vs. Raw 2010 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65165 -Name = Project Minerva -Region = NTSC-J +Serial = SLES-55546 +Name = The Secret Saturdays - Beasts of the 5th Sun +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65166 -Name = Ultimate Fighting Championship 2 - Tap-Out -Region = NTSC-J +Serial = SLES-55565 +Name = Teenage Mutant Ninja Turtles - Smash-Up +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65167 -Name = Pride -Region = NTSC-J +Serial = SLES-55569 +Name = Silent Hill - Shattered Memories +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65169 -Name = Combat Queen -Region = NTSC-J +Serial = SLES-55571 +Name = Ghostbusters +Region = PAL-M6 Compat = 5 --------------------------------------------- -Serial = SLPM-65170 -Name = Shin Sangoku Musou 2 - Mushouden -Region = NTSC-J +Serial = SLES-55572 +Name = Marvel Super Hero Squad +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-65173 -Name = Innocent Black -Region = NTSC-J +Serial = SLES-55573 +Name = MotorStorm Arctic Edge +Region = PAL-M14 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65174 -Name = Britney's Dance Beat -Region = NTSC-J +Serial = SLES-55574 +Name = the Lord of the Rings - Aragorn's Quest +Region = PAL-M6 --------------------------------------------- -Serial = SLPM-65176 -Name = King of Colosseum - Red -Region = NTSC-J +Serial = SLES-55578 +Name = Band Hero +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65177 -Name = Energy Airforce -Region = NTSC-J +Serial = SLES-55579 +Name = Bakugan: Battle Brawlers +Region = PAL-M7 Compat = 5 --------------------------------------------- -Serial = SLPM-65178 -Name = Ferrari F355 Challenge -Region = NTSC-J +Serial = SLES-55582 +Name = FIFA 10 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65179 -Name = Culdcept 2 - Expansion -Region = NTSC-J +Serial = SLES-55583 +Name = FIFA 10 +Region = PAL-M4 // Eng & Scandinavia +Compat = 5 --------------------------------------------- -Serial = SLPM-65180 -Name = Baseball 2003, The -Region = NTSC-J +Serial = SLES-55584 +Name = FIFA 10 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65183 -Name = Auto Modellista -Region = NTSC-J +Serial = SLES-55585 +Name = FIFA 10 +Region = PAL-E --------------------------------------------- -Serial = SLPM-65184 -Name = Document of Metal Gear Solid 2, The -Region = NTSC-J +Serial = SLES-55588 +Name = Pro Evolution Soccer 2010 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65185 -Name = Ferrari F355 Challenge -Region = NTSC-J +Serial = SLES-55589 +Name = Pro Evolution Soccer 2010 +Region = PAL-I-P-S --------------------------------------------- -Serial = SLPM-65186 -Name = Thread Colors [Limited Edition] -Region = NTSC-J +Serial = SLES-55592 +Name = Ben 10: Alien Force - Vilgax Attacks +Region = PAL-M5 +Compat = 4 --------------------------------------------- -Serial = SLPM-65187 -Name = Thread Colors -Region = NTSC-J +Serial = SLES-55593 +Name = Astro Boy - The Video Game +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65191 -Name = V-Rally 3 -Region = NTSC-J +Serial = SLES-55605 +Name = Naruto Shipuuden - Ultimate Ninja 5 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65192 -Name = NBA Live 2003 -Region = NTSC-J +Serial = SLES-55609 +Name = Scooby-Doo! and the Spooky Swamp +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65193 -Name = FIFA Soccer 2003 -Region = NTSC-J -vuClampMode = 2 //missing geometry with microVU +Serial = SLES-55622 +Name = Disney-Pixar Toy Story 3 +Region = PAL-M6 +Compat = 5 --------------------------------------------- -Serial = SLPM-65196 -Name = Breath of Fire V: Dragon Quarter -Region = NTSC-J +Serial = SLES-55635 +Name = WWE SmackDown vs. Raw 2011 +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLPM-65197 -Name = Nobunaga's Ambition Online -Region = NTSC-J +Serial = SLES-55636 +Name = Pro Evolution Soccer 2011 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65199 -Name = J-Pheonix - Cobalt Shoutaihen -Region = NTSC-J +Serial = SLES-55637 +Name = Pro Evolution Soccer 2011 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65200 -Name = Shinobi -Region = NTSC-J +Serial = SLES-55638 +Name = Pro Evolution Soccer 2011 +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65202 -Name = K-1 World Grand Prix 2002 -Region = NTSC-J +Serial = SLES-55642 +Name = FIFA 11 +Region = PAL-M4 +Compat = 5 --------------------------------------------- -Serial = SLPM-65203 -Name = Phantom of Inferno [Limited Edition] -Region = NTSC-J +Serial = SLES-55644 +Name = FIFA 11 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65204 -Name = Phantom of Inferno -Region = NTSC-J +Serial = SLES-55648 +Name = WWE All-Stars +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65205 -Name = Spider-Man -Region = NTSC-J +Serial = SLES-55653 +Name = FIFA 12 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65206 -Name = King of Colosseum - Green -Region = NTSC-J +Serial = SLES-55664 +Name = FIFA 13 +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65207 -Name = Chou Battle Houshin -Region = NTSC-J +Serial = SLES-55665 +Name = FIFA 13 +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65208 -Name = Pop'n Music 7 -Region = NTSC-J +Serial = SLES-55671 +Name = FIFA 14 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65209 -Name = Star Ocean 3 [Limited Edition] -Region = NTSC-J -Compat = 5 -VuAddSubHack = 1 +Serial = SLES-55672 +Name = FIFA 14 +Region = PAL-M4 --------------------------------------------- -Serial = SLPM-65210 -Name = Chou Battle Houshin - Bundle #1 -Region = NTSC-J +Serial = SLES-55673 +Name = Pro Evolution Soccer 2014 +Region = PAL-M5 --------------------------------------------- -Serial = SLPM-65213 -Name = Evolution Skateboarding -Region = NTSC-J +Serial = SLES-55674 +Name = Pro Evolution Soccer 2014 +Region = PAL-F-G --------------------------------------------- -Serial = SLPM-65215 -Name = Chou Battle Houshin - Bundle #2 -Region = NTSC-J +Serial = SLES-55675 +Name = Pro Evolution Soccer 2014 +Region = PAL-G-I --------------------------------------------- -Serial = SLPM-65218 -Name = Bomberman Jetters -Region = NTSC-J +Serial = SLES-55676 +Name = Pro Evolution Soccer 2014 +Region = PAL-P-S --------------------------------------------- -Serial = SLPM-65219 -Name = Cheerful Party -Region = NTSC-J +Serial = SLES-82001 +Name = Summoner +Region = PAL-E --------------------------------------------- -Serial = SLPM-65220 -Name = Cheerful Party -Region = NTSC-J +Serial = SLES-82005 +Name = Summoner +Region = PAL-G +Compat = 5 --------------------------------------------- -Serial = SLPM-65221 -Name = Clock Tower 3 -Region = NTSC-J +Serial = SLES-82009 +Name = Metal Gear Solid 2 - Substance +Region = PAL-M5 Compat = 5 --------------------------------------------- -Serial = SLPM-65222 -Name = Yu-Gi-Oh! 2 [Konami The Best] -Region = NTSC-J +Serial = SLES-82010 +Name = Metal Gear Solid 2, Document of +Region = PAL-E +Compat = 5 --------------------------------------------- -Serial = SLPM-65223 -Name = Triange Again -Region = NTSC-J +Serial = SLES-82011 +Name = Devil May Cry 2 [Dante Disc] +Region = PAL-M5 +Compat = 5 --------------------------------------------- -Serial = SLPM-65224 -Name = NFL 2K3 -Region = NTSC-J +Serial = SLES-82012 +Name = Devil May Cry 2 [Lucia Disc] +Region = PAL-M5 +Compat = 5 +MemCardFilter = SLES-82011 --------------------------------------------- -Serial = SLPM-65226 -Name = Savage Skies -Region = NTSC-J +Serial = SLES-82013 +Name = Metal Gear Solid 3 - Snake Eater +Region = PAL-E-F +Compat = 5 --------------------------------------------- -Serial = SLPM-65227 -Name = J-League Pro Soccer Club - Tsukuku! 3 -Region = NTSC-J +Serial = SLES-82018 +Name = Cy Girls [Disc 1] +Region = PAL-E-F-S --------------------------------------------- -Serial = SLPM-65228 -Name = Taisho Mononoke Ibunroku -Region = NTSC-J -Compat = 5 +Serial = SLES-82019 +Name = Cy Girls [Disc 2] +Region = PAL-E-F-S +MemCardFilter = SLES-82018 --------------------------------------------- -Serial = SLPM-65229 -Name = Totsugeki! Army Men: Shijou Saishou no Sakusen -Region = NTSC-J +Serial = SLES-82020 +Name = Cy Girls [Disc 1] +Region = PAL-E-G-I --------------------------------------------- -Serial = SLPM-65230 -Name = Tokimeki Memorial 3 [Konami The Best] -Region = NTSC-J +Serial = SLES-82021 +Name = Cy Girls [Disc 2] +Region = PAL-E-G-I +MemCardFilter = SLES-82020 --------------------------------------------- -Serial = SLPM-65231 -Name = Evolution Snowboarding -Region = NTSC-J +Serial = SLES-82024 +Name = Metal Gear Solid 3 - Snake Eater +Region = PAL-I --------------------------------------------- -Serial = SLPM-65232 -Name = Devil May Cry 2 [Dante Disc] -Region = NTSC-J -Compat = 5 -[patches] - comment=Note that this disc has the same CRC as SLUS-20484, the NTSC-U disc. -[/patches] +Serial = SLES-82026 +Name = Metal Gear Solid 3 - Snake Eater +Region = PAL-S --------------------------------------------- -Serial = SLPM-65233 -Name = Devil May Cry 2 [Lucia Disc] -Region = NTSC-J +Serial = SLES-82028 +Name = Star Ocean 3 - Till the End of Time [Disc1of2] +Region = PAL-E Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-65234 -Name = Gregory Horror Show - Soul Collector -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65235 -Name = New Roommania - Porori Seishun -Region = NTSC-J +Serial = SLES-82029 +Name = Star Ocean 3 - Till the End of Time [Disc2of2] +Region = PAL-E +Compat = 5 +VuAddSubHack = 1 +MemCardFilter = SLES-82028 --------------------------------------------- -Serial = SLPM-65236 -Name = Anubis: Zone of the Enders -Region = NTSC-J +Serial = SLES-82030 +Name = Shadow Hearts - Covenant [Disc1of2] +Region = PAL-M3 --------------------------------------------- -Serial = SLPM-65237 -Name = Z.O.E.: Zone of the Enders [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLES-82031 +Name = Shadow Hearts - Covenant [Disc2of2] +Region = PAL-M3 +MemCardFilter = SLES-82030 --------------------------------------------- -Serial = SLPM-65238 -Name = Angelic Concert [Limited Edition] -Region = NTSC-J +Serial = SLES-82032 +Name = Metal Gear Solid 3 - Snake Eater +Region = PAL-G --------------------------------------------- -Serial = SLPM-65239 -Name = Angelic Concert -Region = NTSC-J +Serial = SLES-82034 +Name = Xenosaga Episode II [Disc1of2] +Region = PAL-M3 +MemCardFilter = SLES-82034/SCES-82034 --------------------------------------------- -Serial = SLPM-65241 -Name = Shin Megami Tensei III: Nocturne [Limited Edition] -Region = NTSC-J -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level +Serial = SLES-82035 +Name = Xenosaga Episode II [Disc2of2] +Region = PAL-M3 +MemCardFilter = SLES-82034/SCES-82034 --------------------------------------------- -Serial = SLPM-65242 -Name = Shin Megami Tensei III: Nocturne -Region = NTSC-J -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level +Serial = SLES-82036 +Name = Armored Core - Nexus [Evolution Disc] +Region = PAL-M5 +MemCardFilter = SLES-82036/SLES-82037 --------------------------------------------- -Serial = SLPM-65243 -Name = Densha de Go! Professional 2 -Region = NTSC-J +Serial = SLES-82037 +Name = Armored Core - Nexus [Revolution Disc] +Region = PAL-M5 +MemCardFilter = SLES-82036/SLES-82037 --------------------------------------------- -Serial = SLPM-65244 -Name = Tom Clancy's Ghost Recon -Region = NTSC-J +Serial = SLES-82038 +Name = Onimusha - Dawn of Dreams [Disc1] +Region = PAL-M5 +Compat = 5 +[patches = 812C5A96] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLPM-65245 -Name = BioHazard Gun Survivor 4 - Heroes Never Die -Region = NTSC-J +Serial = SLES-82039 +Name = Onimusha - Dawn of Dreams [Disc2] +Region = PAL-M5 +Compat = 5 +MemCardFilter = SLES-82038 +[patches = 812C5A96] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLPM-65246 -Name = Kaidou Battle -Region = NTSC-J +Serial = SLES-82042 +Name = Metal Gear Solid 3 - Subsistence [Disc1of3] +Region = PAL-E-F --------------------------------------------- -Serial = SLPM-65247 -Name = Sangokushi Senki 2 -Region = NTSC-J +Serial = SLES-82043 +Name = Metal Gear Solid 3 - Subsistence [Disc2of3] +Region = PAL-E-F +MemCardFilter = SLES-82042 --------------------------------------------- -Serial = SLPM-65248 -Name = Shin Sangoku Musou 3 -Region = NTSC-J +Serial = SLES-82044 +Name = Metal Gear Solid 3 - Subsistence [Disc1of3] +Region = PAL-I --------------------------------------------- -Serial = SLPM-65249 -Name = Chaos Legion -Region = NTSC-J -Compat = 4 +Serial = SLES-82045 +Name = Metal Gear Solid 3 - Subsistence [Disc2of3] +Region = PAL-I +MemCardFilter = SLES-82044 --------------------------------------------- -Serial = SLPM-65254 -Name = Galaxy Angel -Region = NTSC-J +Serial = SLES-82046 +Name = Metal Gear Solid 3 - Subsistence [Disc1of3] +Region = PAL-G --------------------------------------------- -Serial = SLPM-65255 -Name = Chobits -Region = NTSC-J +Serial = SLES-82047 +Name = Metal Gear Solid 3 - Subsistence [Disc2of3] +Region = PAL-G +MemCardFilter = SLES-82046 --------------------------------------------- -Serial = SLPM-65256 -Name = First Kiss Story 1&2 [Limited Edition] -Region = NTSC-J +Serial = SLES-82048 +Name = Metal Gear Solid 3 - Subsistence [Disc1of3] +Region = PAL-S --------------------------------------------- -Serial = SLPM-65257 -Name = Silent Hill 3 -Region = NTSC-J -Compat = 4 +Serial = SLES-82049 +Name = Metal Gear Solid 3 - Subsistence [Disc2of3] +Region = PAL-S +MemCardFilter = SLES-82048 --------------------------------------------- -Serial = SLPM-65260 -Name = Air Land Force -Region = NTSC-J +Serial = SLES-82050 +Name = Metal Gear Solid 3 - Subsistence [Disc3of3] +Region = PAL-E-F +MemCardFilter = SLES-82042 --------------------------------------------- -Serial = SLPM-65262 -Name = Boboboubo Boubobo Hajike Matsuri -Region = NTSC-J +Serial = SLES-82051 +Name = Metal Gear Solid 3 - Subsistence [Disc3of3] +Region = PAL-I +MemCardFilter = SLES-82044 --------------------------------------------- -Serial = SLPM-65263 -Name = Shin Sangoku Musou 2 & Shin Sangoku Musou 2 Mushouden [Koei Mega Pack] [Disc1of2] -Region = NTSC-J +Serial = SLES-82052 +Name = Metal Gear Solid 3 - Subsistence [Disc3of3] +Region = PAL-G +MemCardFilter = SLES-82046 --------------------------------------------- -Serial = SLPM-65264 -Name = Shin Sangoku Musou 2 & Shin Sangoku Musou 2 Mushouden [Koei Mega Pack] [Disc2of2] -Region = NTSC-J +Serial = SLES-82053 +Name = Metal Gear Solid 3 - Subsistence [Disc3of3] +Region = PAL-S +MemCardFilter = SLES-82048 --------------------------------------------- -Serial = SLPM-65266 -Name = Drag-on Dragoon -Region = NTSC-J +Serial = SLKA-15003 +Name = Shikigami no Shiro II +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65267 -Name = Kurogane no Houkou 2 - Warship Gunner +Serial = SLKA-15004 +Name = Gunbird - Premium Package Region = NTSC-J --------------------------------------------- -Serial = SLPM-65268 -Name = Initial D - Special Stage +Serial = SLKA-15005 +Name = Strikers 1945 III Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65269 -Name = NBA 2K3 -Region = NTSC-J +Serial = SLKA-15007 +Name = GrowLanser2 +Region = NTSC-K +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65270 -Name = Virtua Fighter 4 - Evolution -Region = NTSC-J +Serial = SLKA-15008 +Name = Choro Q HG2 +Region = NTSC-E-F-G --------------------------------------------- -Serial = SLPM-65271 -Name = Over the Monochrome Rainbow featuring Shogo Hamada -Region = NTSC-J +Serial = SLKA-15021 +Name = GrowLanser3 +Region = NTSC-K +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65273 -Name = Triange Again 2 -Region = NTSC-J +Serial = SLKA-15032 +Name = Gradius V +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65274 -Name = Saishuu Heiki Kanojo [Limited Edition] -Region = NTSC-J +Serial = SLKA-25012 +Name = Devil May Cry 2 Dante +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65275 -Name = Saishuu Heiki Kanojo -Region = NTSC-J +Serial = SLKA-25013 +Name = Devil May Cry 2 Lucia +Region = NTSC-K +Compat = 5 +MemCardFilter = SLKA-25012 --------------------------------------------- -Serial = SLPM-65276 -Name = Grand Prix Challenge -Region = NTSC-J -VIFFIFOHack = 1 +Serial = SLKA-25015 +Name = Evolution Skateboarding +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65277 -Name = DDR Max 2 - Dance Dance Revolution - 7th Mix -Region = NTSC-J +Serial = SLKA-25021 +Name = Shinobi +Region = NTSC-M3 Compat = 5 --------------------------------------------- -Serial = SLPM-65278 -Name = Generation of Chaos 3 [Limited Edition] -Region = NTSC-J +Serial = SLKA-25024 +Name = Lilo & Stitch Experiment +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65279 -Name = Generation of Chaos 3 -Region = NTSC-J +Serial = SLKA-25026 +Name = Chaos Legion +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65280 -Name = Green Green - Sound of the Ring Dynamic [Limited Edition] -Region = NTSC-J +Serial = SLKA-25033 +Name = Gregory Horror Show +Region = NTSC-K +Compat = 1 --------------------------------------------- -Serial = SLPM-65281 -Name = Green Green - Sound of the Ring Dynamic -Region = NTSC-J +Serial = SLKA-25035 +Name = Mobile Suit Gundam - Lost War Chronicles +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65282 -Name = Green Green - Sound of the Ring Romantic [Limited Edition] -Region = NTSC-J +Serial = SLKA-25038 +Name = Gun Survivor 4 - Biohazard - Heroes Never Die +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65283 -Name = Green Green - Sound of the Ring Romantic -Region = NTSC-J +Serial = SLKA-25041 +Name = Armored Core 3 Silent Line +Region = NTSC-K +MemCardFilter = SLKA-25041/SLPM-67524 --------------------------------------------- -Serial = SLPM-65284 -Name = World Rallt Championship II Extreme -Region = NTSC-J +Serial = SLKA-25042 +Name = Tamamayu Monogatari 2 Horobi no Mushi +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65285 -Name = Love Hina Gorgeous [First Limited Edition] -Region = NTSC-J +Serial = SLKA-25043 +Name = Virtua Fighter 4 - Evolution +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLPM-65286 -Name = Auto Modellista - US Tuned -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65287 -Name = Final Fantasy XI - Girade no Genei -Region = NTSC-J +Serial = SLKA-25046 +Name = Dragonball Z +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65288 -Name = Final Fantasy XI - Girade no Genei [All-in-One Pack] -Region = NTSC-J +Serial = SLKA-25048 +Name = Makai Senki Disgaea +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65289 -Name = Final Fantasy XI [Entry Disc] -Region = NTSC-J +Serial = SLKA-25049 +Name = Metal Slug 3 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65290 -Name = Merge Marginal [Limited Edition] -Region = NTSC-J +Serial = SLKA-25051 +Name = Clock Tower 3 +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65291 -Name = Merge Marginal -Region = NTSC-J +Serial = SLKA-25052 +Name = Air Ranger 2 - Rescue Helicopter +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65294 -Name = Cafe Little Wish - Mahou no Recipe [Limited Edition] -Region = NTSC-J +Serial = SLKA-25060 +Name = I.Q. Remix+ - Intelligent Qube +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65295 -Name = Cafe Little Wish - Mahou no Recipe -Region = NTSC-J +Serial = SLKA-25062 +Name = Dragonball Z 2 +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65296 -Name = F Fanatic [Limited Edition] -Region = NTSC-J +Serial = SLKA-25063 +Name = Kaido Battle +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65297 -Name = F Fanatic -Region = NTSC-J +Serial = SLKA-25064 +Name = Tenchu 3 Wrath of Heaven +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65298 -Name = Winning Post 5 - Maximum 2003 -Region = NTSC-J +Serial = SLKA-25066 +Name = Zone of the Enders: The 2nd Runner SE +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65299 -Name = Konohana 3 -Region = NTSC-J +Serial = SLKA-25067 +Name = Unlimited Saga +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65300 -Name = All-Star Pro Wrestling 3 -Region = NTSC-J -Compat = 2 +Serial = SLKA-25070 +Name = Guity Gear XX Reload - The Midnight Carnival +Region = NTSC-J-K --------------------------------------------- -Serial = SLPM-65301 -Name = Torakapuu! Dash [Limited Edition] -Region = NTSC-J +Serial = SLKA-25071 +Name = Tantei Jinguji Saburo 8 Inocent Black +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65302 -Name = Torakapuu! Dash -Region = NTSC-J +Serial = SLKA-25077 +Name = Culdicept II - Expansion +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65303 -Name = Virtual On - Marz -Region = NTSC-J +Serial = SLKA-25081 +Name = SD Gundam G Generation Neo +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65305 -Name = Genso Suikoden 3 -Region = NTSC-J +Serial = SLKA-25082 +Name = Castlevania - Lament of Innocence +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65306 -Name = Sakura Yuki Gekka [Limited Edition] +Serial = SLKA-25087 +Name = FIFA Soccer 2004 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65307 -Name = Sakura Yuki Gekka -Region = NTSC-J +Serial = SLKA-25091 +Name = Hanjuku Hero vs. 3D +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65308 -Name = Shutokou Battle 01 -Region = NTSC-J +Serial = SLKA-25092 +Name = Onimusha Buraiden +Region = NTSC-K +MemCardFilter = SLKA-25092/SLKA-25093 --------------------------------------------- -Serial = SLPM-65309 -Name = Splashdown [PlayStation 2 The Best] -Region = NTSC-J +Serial = SLKA-25093 +Name = Onimusha 3 Demon Siege +Region = NTSC-K +MemCardFilter = SLKA-25092/SLKA-25093 --------------------------------------------- -Serial = SLPM-65310 -Name = The Mark of Kry -Region = NTSC-J +Serial = SLKA-25100 +Name = Dragon Quest V Dragon Quarter +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65311 -Name = Violet no Atelier: Gramnad no Renkinjutsushi -Region = NTSC-J +Serial = SLKA-25103 +Name = Neon Genesis Evangelion 2 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65313 -Name = First Kiss Story 1&2 -Region = NTSC-J +Serial = SLKA-25112 +Name = King of Fighters 2001, The +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65314 -Name = Hanjuku Hero VS 3-D [Limited Edition] -Region = NTSC-J +Serial = SLKA-25115 +Name = Rockman X7 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65315 -Name = Hanjuku Hero VS 3-D -Region = NTSC-J -Compat = 4 +Serial = SLKA-25125 +Name = SNK vs. Capcom - Chaos +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65316 -Name = Pop'n Music 8 -Region = NTSC-J +Serial = SLKA-25130 +Name = Bloody Roar 4 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65317 -Name = Jikkyou Powerful Pro Baseball 10 -Region = NTSC-J +Serial = SLKA-25131 +Name = Project Altered Beast +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65318 -Name = Shoubushi Tetsuya 2 -Region = NTSC-J +Serial = SLKA-25132 +Name = Mobile Suit Gundam Encounters in Space +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65319 -Name = Eve Burst Error Plus [Limited Edition] -Region = NTSC-J +Serial = SLKA-25133 +Name = AirForce Delta Strike +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65320 -Name = Eve Burst Error Plus -Region = NTSC-J +Serial = SLKA-25134 +Name = NBA Street v3 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65321 -Name = Prince of Tennis - Smash Hit! -Region = NTSC-J +Serial = SLKA-25135 +Name = Kunoichi +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65322 -Name = Prince of Tennis - Smash Hit! - B-Type -Region = NTSC-J +Serial = SLKA-25139 +Name = Fu-un Shinsengumi +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65323 -Name = Prince of Tennis - Smash Hit! - C-Type -Region = NTSC-J +Serial = SLKA-25144 +Name = Final Fantasy X-2 +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65324 -Name = Gregory Horror Show - Soul Collector -Region = NTSC-J +Serial = SLKA-25149 +Name = Silent Hill 4 The Room +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65325 -Name = Air Ranger 2 - Rescue Helicopter [Best] -Region = NTSC-J +Serial = SLKA-25150 +Name = Bujingai +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65326 -Name = Choro Q HG 4 -Region = NTSC-J +Serial = SLKA-25152 +Name = Hajime no Ippo All-Stars +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65327 -Name = Prince of Tennis - Smash Hit! [Limited Edition] -Region = NTSC-J +Serial = SLKA-25153 +Name = Winning Eleven 10 - Liveware Edition +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65328 -Name = Shirachuu Tankenbu -Region = NTSC-J +Serial = SLKA-25159 +Name = Astro Boy +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65329 -Name = Makai Tensei -Region = NTSC-J +Serial = SLKA-25160 +Name = Shin Megami Tensei III: Nocturne Maniax +Region = NTSC-K +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-65330 -Name = Akudaikan 2 -Region = NTSC-J +Serial = SLKA-25165 +Name = Mobile Suit Gundam - Seed Destiny - Rengou vs. Z.A.F.T. II Plus +Region = NTSC-K +eeRoundMode = 1 +FpuNegDivHack = 1 --------------------------------------------- -Serial = SLPM-65331 -Name = RockMan X7 -Region = NTSC-J -eeClampMode = 3//For camera issues in some scenes. +Serial = SLKA-25166 +Name = Sengoku Musou +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65332 -Name = Mahoromatic Automatic Maiden [Limited Edition] -Region = NTSC-J +Serial = SLKA-25167 +Name = King of Fighters XI, The +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65333 -Name = Mahoromatic Automatic Maiden -Region = NTSC-J +Serial = SLKA-25170 +Name = SD Gundam G Generation Seed +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65334 -Name = Shinseiki Evangelion - Ayanami Ikusei Keikaku with Asuka Hokan Keikaku -Region = NTSC-J +Serial = SLKA-25171 +Name = Guon +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLPM-65335 -Name = Gekitou Professional Baseball -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65336 -Name = K-1 World Grand Prix - The Beast Attack! -Region = NTSC-J +Serial = SLKA-25175 +Name = Transformers +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65337 -Name = Gegege no Kitaro - Ibun Youkaitan -Region = NTSC-J -Compat = 3 +Serial = SLKA-25181 +Name = Energy Airforce Aim Strike +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65338 -Name = Junni Kuniki - Guren no Hyou Koujin no Mitsu -Region = NTSC-J +Serial = SLKA-25182 +Name = Hajime no Ippo2 Victorious Road +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65339 -Name = Akudaikan [Global The Best] -Region = NTSC-J +Serial = SLKA-25183 +Name = Street Fighter - Anniversary Collection +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65340 -Name = Shinseiki Evangelion - Ayanami Ikusai Keikaku with Asuka Hokan Keikaku -Region = NTSC-J +Serial = SLKA-25186 +Name = King of Fighters, The - Maximum Impact [Limited Edition] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65341 -Name = Silent Hill 2 - Saigo No Uta [Konami The Best] -Region = NTSC-J +Serial = SLKA-25198 +Name = Tenchu Kurenai +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65342 -Name = Kyoufu Shinbun (Heisei) Kaiki! Shinrei File -Region = NTSC-J +Serial = SLKA-25199 +Name = Kengo 3 +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65343 -Name = Kikou Heidai - J-Pheonix 2 -Region = NTSC-J +Serial = SLKA-25200 +Name = SSX 3 [PlayStation 2 - Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65344 -Name = Project Minerva - Professional -Region = NTSC-J +Serial = SLKA-25201 +Name = Armored Core Nexus Evolution DISC1 +Region = NTSC-K +MemCardFilter = SLKA-25201/SLKA-25202 --------------------------------------------- -Serial = SLPM-65345 -Name = Simple 2000 Series Ultimate Vol.09 - Runabout 3 -Region = NTSC-J +Serial = SLKA-25202 +Name = Armored Core Nexus Revolution DISC2 +Region = NTSC-K +MemCardFilter = SLKA-25201/SLKA-25202 --------------------------------------------- -Serial = SLPM-65346 -Name = Winning Post 6 -Region = NTSC-J +Serial = SLKA-25204 +Name = Showdown - Legends of Wrestling +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65347 -Name = Bistro Cupid 2 [Limited Edition] -Region = NTSC-J +Serial = SLKA-25205 +Name = DragonBall Z 3 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65348 -Name = Bistro Cupid 2 -Region = NTSC-J +Serial = SLKA-25207 +Name = Sakura Taisen V - Episode 0 - Samurai Girl of Wild +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65349 -Name = Tokyo Bus Guide [Superlite 2000 Series] -Region = NTSC-J +Serial = SLKA-25208 +Name = From TV Animation - One Piece - Round the Land! +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65350 -Name = Simple 2000 Series Ultimate Vol.11 - Wonder Bass -Region = NTSC-J +Serial = SLKA-25213 +Name = Berserk +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65352 -Name = Simple 2000 Series Ultimate Vol.10 - Love Songs -Region = NTSC-J +Serial = SLKA-25214 +Name = Final Fantasy X - International [PlayStation 2 - Big Hit Series] +Region = NTSC-K +IPUWaitHack = 1 --------------------------------------------- -Serial = SLPM-65353 -Name = SuperLite 2000 Series Vol. 6 - Konohana 2 - Todokanai Requiem -Region = NTSC-J +Serial = SLKA-25215 +Name = Shining Wild +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65356 -Name = Natsuiro Komachi -Region = NTSC-J +Serial = SLKA-25216 +Name = Gitaroo-Man [PlayStation 2 - Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65357 -Name = BioHazard - Code Veronica - Perfect Version -Region = NTSC-J +Serial = SLKA-25217 +Name = Shinging Tears +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65358 -Name = Dance Dance Revolution Extreme -Region = NTSC-J -Compat = 5 +Serial = SLKA-25218 +Name = Hitman - Contracts +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65359 -Name = Judie no Atelier: Gramnad no Renkinjutsushi [Gust Best Price] -Region = NTSC-J +Serial = SLKA-25219 +Name = Monster Hunter G +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65361 -Name = Anubis: Zone of the Enders Special Edition [Limited Edition] -Region = NTSC-J +Serial = SLKA-25221 +Name = Busin Zero +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLPM-65362 -Name = NHK Tensai Bit-Kun - Guramon Battle -Region = NTSC-J +Serial = SLKA-25222 +Name = Rockman X8 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65364 -Name = School Heaven - Boy's Love Scramble! -Region = NTSC-J +Serial = SLKA-25224 +Name = Detective Saburou Jinguji 9 - Kind of Blue +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65365 -Name = Tokimeki Memorial - Girl's Side [Konami The Best] -Region = NTSC-J +Serial = SLKA-25225 +Name = Dororo +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65366 -Name = Dear Boys - Fast Break! -Region = NTSC-J +Serial = SLKA-25227 +Name = Neo Contra +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65367 -Name = Makai Eiyuuki Maximo - Machine Monster no Yabou -Region = NTSC-J -Compat = 4 +Serial = SLKA-25232 +Name = Naruto Naruthimetto Hero International +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65368 -Name = D.N. Angel - TV Animation Series -Region = NTSC-J +Serial = SLKA-25233 +Name = Sonic - Mega Collection Plus +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65370 -Name = Prince of Tennis - Sweat & Tears 2 -Region = NTSC-J +Serial = SLKA-25243 +Name = Medal of Honor - European Assault +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65372 -Name = Soccer Kantoku Saihai Simulation - Formation Final -Region = NTSC-J +Serial = SLKA-25244 +Name = WWE SmackDown! vs. Raw +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65373 -Name = Glass Rose -Region = NTSC-J -Compat = 5 +Serial = SLKA-25246 +Name = The Bard's Tale +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65374 -Name = Energy Airforce - Aim Strike! -Region = NTSC-J +Serial = SLKA-25249 +Name = Ys - The Ark of Napishtim [with Guide Book] +Region = NTSC-K +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65375 -Name = Shin Sangoku Musou 3 - Mushouden [Premium Pack] -Region = NTSC-J +Serial = SLKA-25251 +Name = Metal Gear Solid 3 - Snake Eater +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65377 -Name = Shin Sangoku Musou 3 - Mushouden -Region = NTSC-J +Serial = SLKA-25252 +Name = Forgotten Realms - Demon Stone +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65378 -Name = Busin 0: Wizardry Alternative Neo -Region = NTSC-J +Serial = SLKA-25254 +Name = Digimon Rumble Arena 2 +Region = NTSC-K +Compat = 5 +FpuCompareHack = 1 --------------------------------------------- -Serial = SLPM-65379 -Name = Baseball 2003 - Akikigou -Region = NTSC-J +Serial = SLKA-25255 +Name = Mobile Suit Gundam - Seed - Never Ending Tomorrow +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65380 -Name = Samurai Michi 2 -Region = NTSC-J +Serial = SLKA-25257 +Name = Fu-un Bakumatsu Den +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65381 -Name = Kimagure Strawberry Cafe -Region = NTSC-J +Serial = SLKA-25258 +Name = The Story of the Hero Yoshitsune +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65382 -Name = Grand Theft Auto III -Region = NTSC-J +Serial = SLKA-25259 +Name = Swords of Destiny +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65383 -Name = Growlanser IV - Wayfarer of the Time [Limited Edition] -Region = NTSC-J +Serial = SLKA-25261 +Name = Tsukiyo ni Saraba +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65384 -Name = Dream Mix TV World Fighters +Serial = SLKA-25263 +Name = NanoBreaker Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65386 -Name = Train Simulator - Midosuji Line -Region = NTSC-J +Serial = SLKA-25265 +Name = Devil May Cry 3 +Region = NTSC-K +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-65387 -Name = Aero Dancing 4 - New Generation [Sega The Best 2800] -Region = NTSC-J +Serial = SLKA-25266 +Name = Sangokushi IX [PlayStation 2 - Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65388 -Name = Lost Passage [Limited Edition] -Region = NTSC-J +Serial = SLKA-25268 +Name = Mobile Suit Gundam - Gundam vs. Z-Gundam +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65389 -Name = Lost Passage -Region = NTSC-J +Serial = SLKA-25270 +Name = Armored Core - Formula Front +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65390 -Name = Shinki Genso - Spectral Souls [Limited Edition] -Region = NTSC-J +Serial = SLKA-25275 +Name = King of Fighters 2002-2003, The +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65391 -Name = Shinki Genso - Spectral Souls -Region = NTSC-J +Serial = SLKA-25279 +Name = Hello Kitty - Rescue Mission +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65392 -Name = Kanojo no Densetsu - Boku no Sekiban -Region = NTSC-J +Serial = SLKA-25280 +Name = Ryu ga Gotoku 2 [Disc1of2] +Region = NTSC-K +MemCardFilter = SLKA-25280/SLKA-25342 --------------------------------------------- -Serial = SLPM-65393 -Name = Simple 2000 Series Vol.38 - The Friendship Adventure -Region = NTSC-J +Serial = SLKA-25281 +Name = Ryu ga Gotoku 2 [Disc2of2] +Region = NTSC-K +MemCardFilter = SLKA-25280/SLKA-25342 --------------------------------------------- -Serial = SLPM-65394 -Name = Love Smash! 5 -Region = NTSC-J +Serial = SLKA-25284 +Name = Sakura Taisen 3 +Region = NTSC-K +Compat = 1 --------------------------------------------- -Serial = SLPM-65395 -Name = Digi-Charat Fantasy -Region = NTSC-J +Serial = SLKA-25287 +Name = Metal Slug 4&5 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65397 -Name = Prince of Tennis - Kiss of Prince - Ice Version -Region = NTSC-J +Serial = SLKA-25289 +Name = Shin Sangoku Musou 4 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65398 -Name = Prince of Tennis - Kiss of Prince - Flame Version -Region = NTSC-J +Serial = SLKA-25290 +Name = Super Monkey Ball Deluxe +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65399 -Name = D.C.P.S. [Limited Edition] -Region = NTSC-J +Serial = SLKA-25291 +Name = Chains of Power +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65400 -Name = D.C.P.S. -Region = NTSC-J +Serial = SLKA-25296 +Name = Inuyasha - Feudal Combat +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65401 -Name = Tengai Makyou II - Manji Maru -Region = NTSC-J +Serial = SLKA-25297 +Name = Taito Memories - Joukan [Special Package] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65404 -Name = Kita He - Diamond Dust -Region = NTSC-J +Serial = SLKA-25298 +Name = Winning Eleven 9 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65405 -Name = Hyper Dimension Fortress Macross -Region = NTSC-J +Serial = SLKA-25299 +Name = From TV Animation - One Piece - Grand Battle! Combat Rush +Region = NTSC-K +--------------------------------------------- +Serial = SLKA-25300 +Name = Digital Devil Saga [Special Package] +Region = NTSC-J-K Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65406 -Name = Castlevania - Lament of Innocence [Limited Edition] -Region = NTSC-J +Serial = SLKA-25301 +Name = Digital Devil Saga: Avatar Tuner 2 +Region = NTSC-K +Compat = 5 +EETimingHack = 1 +MemCardFilter = SLKA-25301/SLKA-25300 --------------------------------------------- -Serial = SLPM-65407 -Name = Transformers Tatakai -Region = NTSC-J -Compat = 3 +Serial = SLKA-25307 +Name = Dragonball Z Sparking +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65408 -Name = Growlanser IV - Wayfarer of the Time -Region = NTSC-J +Serial = SLKA-25311 +Name = Marvel Nemesis - Rise of the Imperfects +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65409 -Name = Air Ranger 2 - Rescue Helicopter - Plus -Region = NTSC-J +Serial = SLKA-25313 +Name = Naruto - Uzumaki Chronicles +Region = NTSC-K +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65410 -Name = Getaway, The -Region = NTSC-J +Serial = SLKA-25317 +Name = Shin Sangoku Musou 3 [PlayStation 2 - Big Hit Series] +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65411 -Name = Onimusha Buraiden -Region = NTSC-J -Compat = 4 +Serial = SLKA-25320 +Name = Ikusa Gami +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65412 -Name = War of the Monsters -Region = NTSC-J +Serial = SLKA-25321 +Name = K.League - Winning Eleven 9 - Asia Championship +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65413 -Name = Onimusha 3 -Region = NTSC-J +Serial = SLKA-25322 +Name = Guilty Gear XX - Slash +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65414 -Name = Simple 2000 Series Vol.45 - The Love and Tears and Memory -Region = NTSC-J +Serial = SLKA-25323 +Name = SSX On Tour +Region = NTSC-J-K --------------------------------------------- -Serial = SLPM-65416 -Name = Pride Grand Prix 2003 -Region = NTSC-J +Serial = SLKA-25328 +Name = Castlevania - Curse of Darkness +Region = NTSC-K +Compat = 5 +vuClampMode = 0 //SPS with microVU +MemCardFilter = SLKA-25328/SLKA-25082 --------------------------------------------- -Serial = SLPM-65417 -Name = Mat Hoffman's Pro BMX 2003 -Region = NTSC-J +Serial = SLKA-25329 +Name = Shin Sangoku Musou 4 - Moushouden +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65418 -Name = Kelly Slater's Pro Surfer 2003 -Region = NTSC-J +Serial = SLKA-25331 +Name = Marc Ecko's Getting Up - Contents Under Pressure +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65419 -Name = Tony Hawk's Pro Skater 2003 -Region = NTSC-J +Serial = SLKA-25333 +Name = Metal Slug Complete +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65420 -Name = Dabitsuku 3 - Let's Become a Derby Owner -Region = NTSC-J +Serial = SLKA-25341 +Name = Driver - Parallel Lines +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65421 -Name = Ever 17 - Out of Infinity [Premium Edition] -Region = NTSC-J +Serial = SLKA-25342 +Name = Ryu ga Gotoku +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65422 -Name = Tom Clancy's Splinter Cell -Region = NTSC-J +Serial = SLKA-25351 +Name = One Piece Pirates Carnival +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65423 -Name = Sangokushi IX -Region = NTSC-J +Serial = SLKA-25352 +Name = Full Metal Alchemist - Dream Carnival +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65424 -Name = Moekko Company [Limited Edition] -Region = NTSC-J +Serial = SLKA-25353 +Name = Metal Gear Solid 3 - Subsistence [Limited Edition] [Disc1of2] +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65425 -Name = Moekko Company -Region = NTSC-J +Serial = SLKA-25354 +Name = Metal Gear Solid 3 - Subsistence [Limited Edition] [Disc2of2] +Region = NTSC-K +Compat = 5 +MemCardFilter = SLKA-25353 --------------------------------------------- -Serial = SLPM-65426 -Name = Pro Baseball Team Tsukuro! 2003 -Region = NTSC-J +Serial = SLKA-25359 +Name = Winning Eleven 9 - Liveware Edition +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65427 -Name = Riding Spirits 2 -Region = NTSC-J +Serial = SLKA-25361 +Name = Keroro Gunsou MeroMero Battle Royale Z +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65428 -Name = BioHazard Outbreak -Region = NTSC-J -Compat = 5 +Serial = SLKA-25364 +Name = Mobile Suit Gundam - Climax U.C. +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65429 -Name = Galaxy Angel - Moonlit Lovers -Region = NTSC-J +Serial = SLKA-25365 +Name = WWE Smack Down Vs RAW 2008 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65431 -Name = Sonic Heroes -Region = NTSC-J +Serial = SLKA-25366 +Name = Naruto - Uzumaki Chronicles 2 +Region = NTSC-K Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLPM-65432 -Name = J-League Winning Eleven Tactics -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65433 -Name = K-1 World Grand Prix 2003 -Region = NTSC-J +Serial = SLKA-25375 +Name = Transformers - The Game +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65434 -Name = Battle Gear 3 -Region = NTSC-J +Serial = SLKA-25381 +Name = Winning Eleven 10 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65435 -Name = Diamond Dust -Region = NTSC-J +Serial = SLKA-25384 +Name = Blazing Souls +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65438 -Name = Star Ocean 3 [Director's Cut] [Disc1of2] -Region = NTSC-J +Serial = SLKA-25388 +Name = One Piece - Grand Adventure +Region = NTSC-K Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-65439 -Name = Star Ocean 3 [Director's Cut] [Disc2of2] -Region = NTSC-J +Serial = SLKA-25389 +Name = Shinobido Imashime +Region = NTSC-K Compat = 5 -VuAddSubHack = 1 ---------------------------------------------- -Serial = SLPM-65441 -Name = Ashita no Joe: Masshiro ni Moetsukuru -Region = NTSC-J +eeClampMode = 3 //Otherwise freezes in some spot --------------------------------------------- -Serial = SLPM-65442 -Name = Terminator 3, The - Rise of the Machines -Region = NTSC-J +Serial = SLKA-25390 +Name = Shin Sangoku Musou 4 - Empires +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65443 -Name = Front Mission 4 -Region = NTSC-J +Serial = SLKA-25396 +Name = FIFA '07 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65444 -Name = Castlevania - Lament of Innocence -Region = NTSC-J +Serial = SLKA-25397 +Name = Dragon Ball Z Sparking NEO +Region = NTSC-K Compat = 5 --------------------------------------------- -Serial = SLPM-65445 -Name = Powerful Pro Baseball 10 - Decision -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65446 -Name = James Bond 007 - Everything or Nothing -Region = NTSC-J +Serial = SLKA-25406 +Name = King of Fighters, The - Maximum Impact - Regulation A +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65447 -Name = Kunoichi -Region = NTSC-J -Compat = 4 +Serial = SLKA-25407 +Name = DragonBall Z - Sparkling! Meteor +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65448 -Name = Cambrian QTS - Kaseki Ninattemo -Region = NTSC-J +Serial = SLKA-25413 +Name = SD Gundam G - Generation Spirits +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65449 -Name = SSX 3 -Region = NTSC-J +Serial = SLKA-25422 +Name = Silent Hill - Origins +Region = NTSC-K +Compat = 4 --------------------------------------------- -Serial = SLPM-65450 -Name = Tantei Gakuen Q: Kiokan no Satsui [First Limited Edition] -Region = NTSC-J +Serial = SLKA-25424 +Name = SNK Arcade Classics Vol.1 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65451 -Name = Prince of Tennis - Smash Hit! 2 [First Limited Edition] -Region = NTSC-J +Serial = SLKA-25443 +Name = Musou Orochi Maou Sairin +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65454 -Name = Prince of Tennis - Smash Hit! 2 -Region = NTSC-J +Serial = SLKA-25477 +Name = World Soccer Winning Eleven 2011 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65456 -Name = Magical Nurse Witch Komugi-chan [Limited Edition] -Region = NTSC-J +Serial = SLKA-25480 +Name = World Soccer Winning Eleven 2012 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65457 -Name = Magical Nurse Witch Komugi-chan -Region = NTSC-J +Serial = SLKA-35001 +Name = Metal Gear Solid 2 Substance +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65458 -Name = Kurogane no Houkou 2 - Warship Commander -Region = NTSC-J +Serial = SLKA-35003 +Name = Sakura Taisen - Atsuki Chishioni +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65459 -Name = Bujingai -Region = NTSC-J +Serial = SLKA-35004 +Name = Sakura Wars 5 So Long My Love +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-65460 -Name = Conflict Delta - Wangan War 1991 -Region = NTSC-J +Serial = SLKA-35005 +Name = Shin Sangoku Musou 5 Special +Region = NTSC-K --------------------------------------------- -Serial = SLPM-65461 -Name = Tantei Gakuen Q: Kiokan no Satsui +Serial = SLPM-20391 +Name = Saiyuki Gunlock Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65462 -Name = Shin Megami Tensei III: Nocturne Maniax +Serial = SLPM-20436 +Name = Sakigake!! Otokojuku Region = NTSC-J Compat = 5 -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-65463 -Name = Rocky +Serial = SLPM-55005 +Name = Mana Khemia 2: Ochita Gakuen to Renkinjutsushi Tachi Region = NTSC-J --------------------------------------------- -Serial = SLPM-65464 -Name = Wind - A Breath of Heart +Serial = SLPM-55008 +Name = Sengoku Basara X Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65465 -Name = Harry Potter to Kenja no Ishi +Serial = SLPM-55033 +Name = J. League Winning Eleven 2008 - Club Championship Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65466 -Name = Kousen Gaeri - Refrain +Serial = SLPM-55096 +Name = ThunderForce VI Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65468 -Name = Roommate Asami - D-Collection +Serial = SLPM-55108 +Name = Fate - Unlimited Codes Region = NTSC-J +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-65470 -Name = Firefighter F.D. 18 +Serial = SLPM-55110 +Name = Mercenaries 2 - World in Flames Region = NTSC-J --------------------------------------------- -Serial = SLPM-65471 -Name = Firefighter F.D. 18 +Serial = SLPM-55114 +Name = Mana Khemia 2: Ochita Gakuen to Renkinjutsushi Tachi Region = NTSC-J --------------------------------------------- -Serial = SLPM-65472 -Name = Train Simulator & Densha de Go! Tokyo Kyuukouhen +Serial = SLPM-55120 +Name = Fukakutei Sekai no Tantei Shinshi - Agyou Souma no Jiken File Region = NTSC-J --------------------------------------------- -Serial = SLPM-65473 -Name = Hagane no Renkinjutsushi - Tobenai Tenshi +Serial = SLPM-55122 +Name = Sengoku Musou 2 Region = NTSC-J +MemCardFilter = SLAJ-25077/SLPM-55122/SLPM-66307/SLPM-74247/SLAJ-25035/SLPM-65517/SLPM-74212/SLPM-74235/SLAJ-25048/SLPM-65718/SLPM-74224/SLPM-74249 --------------------------------------------- -Serial = SLPM-65474 -Name = Kurogane no Houkou 2 - Warship Commander [Limited Edition] +Serial = SLPM-55127 +Name = Need for Speed - Undercover Region = NTSC-J --------------------------------------------- -Serial = SLPM-65477 -Name = Crimson Sea 2 +Serial = SLPM-55131 +Name = World Soccer Winning Eleven 2009 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65478 -Name = Final Fantasy X-2 International +Serial = SLPM-55148 +Name = 007: Nagusame no Houshuu Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65479 -Name = Sims, The - Bustin' Out +Serial = SLPM-55182 +Name = J. League Winning Eleven 2009 - Club Championship Region = NTSC-J --------------------------------------------- -Serial = SLPM-65480 -Name = Michigan +Serial = SLPM-55184 +Name = Melty Blood - Actress Again Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65481 -Name = After... [Limited Edition] +Serial = SLPM-55226 +Name = FIFA 10: World Class Soccer Region = NTSC-J --------------------------------------------- -Serial = SLPM-65482 -Name = After... +Serial = SLPM-55244 +Name = Need for Speed - Undercover [EA:SY! 1980] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65483 -Name = Secret Weapons Over Normandy +Serial = SLPM-55251 +Name = WWE SmackDown vs. Raw 2009 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65484 -Name = WISP - Word Image Sound Play +Serial = SLPM-55258 +Name = World Soccer Winning Eleven 2010 - Aoki Samurai no Chousen Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65486 -Name = Airforce Delta - Blue Wing Knights +Serial = SLPM-55262 +Name = J.League Winning Eleven 2010 - Club Championship Region = NTSC-J --------------------------------------------- -Serial = SLPM-65488 -Name = Grand Theft Auto - Vice City +Serial = SLPM-55271 +Name = FIFA 10: World Class Soccer (EA:SY! 1980) Region = NTSC-J --------------------------------------------- -Serial = SLPM-65489 -Name = Tantei Jingiji Saburo - Innocent Black [WorkJam Best Collection] +Serial = SLPM-55276 +Name = World Soccer Winning Eleven 2011 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65490 -Name = Sanma Nisai Deus Mechanica - Demon Bane [Limited Edition] +Serial = SLPM-55280 +Name = The King of Fighters '98 Ultimate Match Region = NTSC-J --------------------------------------------- -Serial = SLPM-65491 -Name = Sanma Nisai Deus Mechanica - Demon Bane +Serial = SLPM-60101 +Name = 0 Story Region = NTSC-J --------------------------------------------- -Serial = SLPM-65492 -Name = GunGrave O.D. +Serial = SLPM-60102 +Name = From Software First Previews Region = NTSC-J --------------------------------------------- -Serial = SLPM-65493 -Name = Hurrah! Sailor +Serial = SLPM-60104 +Name = Konami PlayStation 2 Taikeban Region = NTSC-J --------------------------------------------- -Serial = SLPM-65494 -Name = Fuun Shinsengumi +Serial = SLPM-60106 +Name = Koei PlayStation 2 Line-Up Region = NTSC-J --------------------------------------------- -Serial = SLPM-65495 -Name = Monster Hunter +Serial = SLPM-60107 +Name = Golf Paradise Region = NTSC-J --------------------------------------------- -Serial = SLPM-65496 -Name = Hyper Street Fighter +Serial = SLPM-60172 +Name = Itadaki Street 3 - Okuman Chouja ni Shiteageru Region = NTSC-J --------------------------------------------- -Serial = SLPM-65497 -Name = World Soccer Winning Eleven 7 - International [Limited Edition] +Serial = SLPM-60207 +Name = Rockman X7 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65498 -Name = World Soccer Winning Eleven 7 - International +Serial = SLPM-60251 +Name = Devil May Cry 3 [Trial Version] Region = NTSC-J +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-65499 -Name = Bloody Roar 4 +Serial = SLPM-60262 +Name = 10th Anniversary Memorial Save Data [Disc 2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65500 -Name = Anubis: Zone of the Enders Special Edition +Serial = SLPM-60265 +Name = 10th Anniversary PlayStation & PlayStation 2 All-Soft Catalogue Special SaveData Collection [PS2 Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65501 -Name = Frogger - The Great Quest +Serial = SLPM-61147 +Name = Xenosaga Episode III - Also Sprach Zarathustra [Demo] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65502 -Name = GunGrave [Red Best Collection] +Serial = SLPM-62001 +Name = Drum Mania Region = NTSC-J --------------------------------------------- -Serial = SLPM-65503 -Name = Lord of the Rings, The - The Return of the King +Serial = SLPM-62002 +Name = Live World Soccer 2000 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65504 -Name = Cool Girl [Limited Edition] [Disc1of2] +Serial = SLPM-62004 +Name = Mahjong Yarouze 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65505 -Name = Cool Girl [Limited Edition] [Disc2of2] +Serial = SLPM-62005 +Name = Shin Sangokumusou Region = NTSC-J --------------------------------------------- -Serial = SLPM-65506 -Name = Cool Girl +Serial = SLPM-62006 +Name = Eisei Meijin 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65508 -Name = Pop'n Music 9 +Serial = SLPM-62007 +Name = Gradius III & IV Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65509 -Name = Prince of Tennis - Love of Prince - Sweet +Serial = SLPM-62008 +Name = Powerful Pro Baseball 7 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65510 -Name = Prince of Tennis - Love of Prince - Bitter +Serial = SLPM-62009 +Name = Ganbare Nippon Olympics 2000 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65512 -Name = Angel's Feather [Limited Edition] +Serial = SLPM-62010 +Name = Romance of the Three Kingdoms VII Region = NTSC-J --------------------------------------------- -Serial = SLPM-65513 -Name = Angel's Feather +Serial = SLPM-62011 +Name = Jikkyou GI Stable Region = NTSC-J --------------------------------------------- -Serial = SLPM-65514 -Name = Kaido Battle 2 - Chain Reaction +Serial = SLPM-62012 +Name = Keyboard Mania Region = NTSC-J --------------------------------------------- -Serial = SLPM-65515 -Name = Sakura Taisen - Mysterious Paris +Serial = SLPM-62013 +Name = Ring of Red Region = NTSC-J --------------------------------------------- -Serial = SLPM-65517 -Name = Sengoku Musou +Serial = SLPM-62015 +Name = Silpheed - The Lost Planet Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65518 -Name = Raimuiro Senkitan Jun [Limited Edition] +Serial = SLPM-62016 +Name = Super Bust-A-Move Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65519 -Name = Raimuiro Senkitan Jun +Serial = SLPM-62021 +Name = Angelique Trois [Premium Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65520 -Name = Tentama 2 Wins [Limited Edition] +Serial = SLPM-62022 +Name = Angelique Trois Region = NTSC-J --------------------------------------------- -Serial = SLPM-65521 -Name = Tentama 2 Wins +Serial = SLPM-62023 +Name = Winback Region = NTSC-J --------------------------------------------- -Serial = SLPM-65523 -Name = Hurrah! Sailor +Serial = SLPM-62027 +Name = Snowboard Heaven Region = NTSC-J --------------------------------------------- -Serial = SLPM-65524 -Name = Orange Pocket - Root [Limited Edition] +Serial = SLPM-62028 +Name = Greatest Striker Region = NTSC-J --------------------------------------------- -Serial = SLPM-65525 -Name = Orange Pocket - Root +Serial = SLPM-62029 +Name = Dance Summit 2001 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65526 -Name = Dororo +Serial = SLPM-62031 +Name = Primal Image for Printer Region = NTSC-J --------------------------------------------- -Serial = SLPM-65527 -Name = FIFA Total Football +Serial = SLPM-62032 +Name = ESPN NBA 2Night Region = NTSC-J --------------------------------------------- -Serial = SLPM-65529 -Name = Mission Impossible - Operation Surma +Serial = SLPM-62035 +Name = Got to Do! Hot Spring Table Tennis Region = NTSC-J --------------------------------------------- -Serial = SLPM-65530 -Name = J-League Pro Soccer Club - Tsukuku 2004 +Serial = SLPM-62036 +Name = Choukousoku Reversi Region = NTSC-J --------------------------------------------- -Serial = SLPM-65531 -Name = Sakura Taisen V - Episode 0 +Serial = SLPM-62040 +Name = J League Winning Eleven 8 - Asia Championship Region = NTSC-J --------------------------------------------- -Serial = SLPM-65532 -Name = Puyo Puyo Fever +Serial = SLPM-62041 +Name = ESPN National Hockey Night Region = NTSC-J --------------------------------------------- -Serial = SLPM-65533 -Name = Pyu to Fuku! Jaguar Ashita no Japan +Serial = SLPM-62044 +Name = RC Revenge Pro Region = NTSC-J --------------------------------------------- -Serial = SLPM-65534 -Name = Rogue Ops +Serial = SLPM-62045 +Name = Jikkou J. League Perfect Striker 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65535 -Name = Oshiete! Popotan +Serial = SLPM-62046 +Name = WTA Tennis Tour USA Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65537 -Name = Chou Battle Houshin [Koei The Best] +Serial = SLPM-62047 +Name = Endnesia Region = NTSC-J --------------------------------------------- -Serial = SLPM-65538 -Name = James Bond 007 - Nightfire [EA Best Hits] +Serial = SLPM-62048 +Name = Battle Gear 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65539 -Name = V-Rally 3 +Serial = SLPM-62049 +Name = Densha de Go! 3 - Takkyuu!! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65540 -Name = Galaxy Angel - Moonlit Lovers [First Limited Edition] +Serial = SLPM-62051 +Name = Yanya Caballista - featuring Gawoo Region = NTSC-J --------------------------------------------- -Serial = SLPM-65541 -Name = Angelique Trois - Aizouhen [Koei The Best] +Serial = SLPM-62052 +Name = Beatmania Da! Da! Da! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65542 -Name = Zero Shikikan Josentoki +Serial = SLPM-62053 +Name = World Soccer Winning Eleven 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65543 -Name = Pro Yakyu Spirits 2004 +Serial = SLPM-62054 +Name = Eternity Master V Region = NTSC-J --------------------------------------------- -Serial = SLPM-65545 -Name = Izayoi Renke Kamifurusato +Serial = SLPM-62055 +Name = Bloody Roar 3 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65546 -Name = Cross Channel - To All People [Limited Edition] +Serial = SLPM-62056 +Name = DNA - Dark Native Apostle Region = NTSC-J --------------------------------------------- -Serial = SLPM-65547 -Name = Cross Channel - To All People +Serial = SLPM-62060 +Name = Winning Post 4 Maximum 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65548 -Name = Freedom Fighters +Serial = SLPM-62062 +Name = Gitaroo Man One Region = NTSC-J --------------------------------------------- -Serial = SLPM-65549 -Name = Remember 11 - The Age of Infinity [Limited Edition] +Serial = SLPM-62063 +Name = Gradius III & IV [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65550 -Name = Remember 11 - The Age of Infinity +Serial = SLPM-62067 +Name = Hunter X Hunter - Ryumyaku no Saidan Region = NTSC-J --------------------------------------------- -Serial = SLPM-65551 -Name = Astro Boy Atom +Serial = SLPM-62068 +Name = Egbrowser Region = NTSC-J --------------------------------------------- -Serial = SLPM-65552 -Name = Metal Wolf Rev [Limited Edition] +Serial = SLPM-62069 +Name = All-Star Baseball 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65553 -Name = Metal Wolf Rev +Serial = SLPM-62070 +Name = Uchu-Jintte Naani Region = NTSC-J --------------------------------------------- -Serial = SLPM-65554 -Name = Croket Ban - King no Kiki wo Sukuu +Serial = SLPM-62072 +Name = Horse Breaker Region = NTSC-J --------------------------------------------- -Serial = SLPM-65555 -Name = Dragon Quest V - Bride of the Sky +Serial = SLPM-62073 +Name = Tam Tam Paradise Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65556 -Name = Nobunaga no Yabou - Tenka Sousei +Serial = SLPM-62075 +Name = Live World Soccer 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65557 -Name = Steady X Study [Limited Edition] +Serial = SLPM-62076 +Name = Age of Empires II: The Age of Kings Region = NTSC-J --------------------------------------------- -Serial = SLPM-65558 -Name = Steady X Study +Serial = SLPM-62077 +Name = Maestro Music 2, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-65559 -Name = Tenohira Taiyouni [Limited Edition] +Serial = SLPM-62078 +Name = Maestro Music 2, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-65560 -Name = Tenohira Taiyouni +Serial = SLPM-62081 +Name = Ever Blue Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65561 -Name = Shin Sangoku Musou 3 [Super Premium Pack] +Serial = SLPM-62082 +Name = Professional Baseball Japan 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65564 -Name = Shin Sangoku Musou 3 - Empires +Serial = SLPM-62084 +Name = ESPN X-Games Skateboarding Region = NTSC-J --------------------------------------------- -Serial = SLPM-65565 -Name = Shin Sangoku Musou 3 - Empires +Serial = SLPM-62087 +Name = Touge 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65566 -Name = La Corda d'Oro [Premium Box] +Serial = SLPM-62088 +Name = J-League Winning Eleven 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65567 -Name = Corda D'Oro, La +Serial = SLPM-62091 +Name = Ring of Red Region = NTSC-J --------------------------------------------- -Serial = SLPM-65569 -Name = Kita He - Diamond Dust + Kiss is Beginning +Serial = SLPM-62092 +Name = XG3 Extreme G Racing Region = NTSC-J --------------------------------------------- -Serial = SLPM-65570 -Name = Frogger [Konami Palace Collection] +Serial = SLPM-62094 +Name = Simple 2000 Series Vol. 2 - The Party Game Region = NTSC-J --------------------------------------------- -Serial = SLPM-65571 -Name = Generation of Chaos 4 [Limited Edition] +Serial = SLPM-62095 +Name = Flying Circus [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65572 -Name = Generation of Chaos 4 +Serial = SLPM-62096 +Name = Flying Circus Region = NTSC-J --------------------------------------------- -Serial = SLPM-65573 -Name = World Rallt Championship II Extreme [Spike The Best] +Serial = SLPM-62097 +Name = Keisusaikan, The - Shinjuku 24 Hours Region = NTSC-J --------------------------------------------- -Serial = SLPM-65574 -Name = Silent Hill 4 - The Room +Serial = SLPM-62098 +Name = Busin: Wizardry Alternative Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65575 -Name = Crimson Tears +Serial = SLPM-62100 +Name = Rez [Special Package] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65576 -Name = Tantei Jingiji Saburo - Kind of Blue +Serial = SLPM-62101 +Name = Rez Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65579 -Name = After School Love Beat +Serial = SLPM-62102 +Name = Crazy Taxi Region = NTSC-J --------------------------------------------- -Serial = SLPM-65580 -Name = Crash Bandicoot - Bakuso! Nitro Kart +Serial = SLPM-62104 +Name = Choro-Q HG2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65581 -Name = Haunted Mansion +Serial = SLPM-62107 +Name = Growlanser 3 - The Duel Darkness Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65582 -Name = Winning Post 6 Maximum 2004 +Serial = SLPM-62108 +Name = Growlanser 3 - The Duel Darkness Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65583 -Name = World Rally Championship 3 +Serial = SLPM-62109 +Name = Hippa Linda Region = NTSC-J -Compat = 4 -[patches = C4467D30] - - comment=patch by Nachbrenner - - //Skip sceIpuSync - patch=1,EE,0027c808,word,03e00008 - -[/patches] --------------------------------------------- -Serial = SLPM-65585 -Name = Princess Holiday +Serial = SLPM-62112 +Name = Itadaki Street 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65586 -Name = Online Pro Wrestling +Serial = SLPM-62113 +Name = World Soccer Winning Eleven 5 - Final Evolution Region = NTSC-J --------------------------------------------- -Serial = SLPM-65587 -Name = Fight Night 2004 +Serial = SLPM-62117 +Name = Momotaro Train X Region = NTSC-J --------------------------------------------- -Serial = SLPM-65588 -Name = Colorful Box - To Love [Limited Edition] +Serial = SLPM-62118 +Name = Bomberman Kart Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65589 -Name = Colorful Box - To Love +Serial = SLPM-62120 +Name = Jikkyou World Soccer 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65590 -Name = Densha de Go! Final +Serial = SLPM-62121 +Name = ESPN NBA 2Night 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65591 -Name = Lost Aya Sophia [Limited Edition] +Serial = SLPM-62122 +Name = Hermina to Culus: Lilie no Atelier Mou Hitotsu no Monogatari Region = NTSC-J --------------------------------------------- -Serial = SLPM-65592 -Name = Lost Aya Sophia +Serial = SLPM-62123 +Name = Winning Post 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65593 -Name = Beatmania IIDX - 7th Style +Serial = SLPM-62124 +Name = Ready 2 Rumble Boxing - Round 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65594 -Name = Iris no Atelier: Eternal Mana +Serial = SLPM-62125 +Name = Gauntlet - Dark Legacy Region = NTSC-J --------------------------------------------- -Serial = SLPM-65595 -Name = Shoubushi Gambler Densetsu - Tetsuya 2 [Athena Best] +Serial = SLPM-62127 +Name = Maximo Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65596 -Name = Juuni Kuniki - Kakukaku Taru Ou Michi Beni Midori no Uka +Serial = SLPM-62128 +Name = Le Mans 24 Hours Region = NTSC-J --------------------------------------------- -Serial = SLPM-65597 -Name = Digital Devil Saga: Avatar Tuner +Serial = SLPM-62129 +Name = Climax Tennis - WTA Tour Edition Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65598 -Name = Tenshou Gakuen Kensousoku +Serial = SLPM-62130 +Name = Virtua Fighter 4 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65599 -Name = Genso Suikoden 4 [Limited Edition] +Serial = SLPM-62131 +Name = Romance of the Three Kingdoms VIII Region = NTSC-J --------------------------------------------- -Serial = SLPM-65600 -Name = Genso Suikoden 4 +Serial = SLPM-62132 +Name = 24 - The Game Region = NTSC-J --------------------------------------------- -Serial = SLPM-65601 -Name = Omoide ni Kawaru-Kimi - Memories Off [SuperLite 2000 Series] +Serial = SLPM-62133 +Name = Bloody Roar 3 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65602 -Name = King of Colosseum 2 +Serial = SLPM-62134 +Name = Final Fantasy XI [Beta Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65603 -Name = Run Like Hell +Serial = SLPM-62137 +Name = Psyvariar Complete Edition [Special Sound Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65604 -Name = Animation Battle - Recca no Honou +Serial = SLPM-62138 +Name = Psyvariar Complete Edition [Special Capture Box] Region = NTSC-J -Compat = 4 -[patches = 9BDBA170] - comment=patch by Shadow Lady - //IPU menu hang fix... - patch=0,EE,00115c00,word,03e00008 -[/patches] --------------------------------------------- -Serial = SLPM-65607 -Name = 3LDK - Shiawase ni Narouyo [Limited Edition] +Serial = SLPM-62139 +Name = Psyvariar Complete Edition Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65608 -Name = 3LDK - Shiawase ni Narouyo +Serial = SLPM-62142 +Name = World Grand Prix Region = NTSC-J --------------------------------------------- -Serial = SLPM-65609 -Name = Memories Off... - Sorekara [Limited Edition] +Serial = SLPM-62143 +Name = Hakoniwa Tetsudou - Blue Train Express Region = NTSC-J --------------------------------------------- -Serial = SLPM-65610 -Name = Memories Off... - Sorekara +Serial = SLPM-62144 +Name = Super Bust-A-Move Region = NTSC-J --------------------------------------------- -Serial = SLPM-65611 -Name = Pizzicato Polka +Serial = SLPM-62147 +Name = Bass Strike Region = NTSC-J --------------------------------------------- -Serial = SLPM-65612 -Name = Harry Potter and The Prisoner of Azkaban +Serial = SLPM-62151 +Name = Live GI Stable 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65613 -Name = Yu-Gi-Oh! Capsule Monster Coliseum +Serial = SLPM-62153 +Name = Racing Construction - Mareru Tsukeru Hahiiru Ore - Dead Heat Region = NTSC-J --------------------------------------------- -Serial = SLPM-65614 -Name = Need for Speed Underground [EA Best Hits] +Serial = SLPM-62154 +Name = DDR Max - Dance Dance Revolution - 6th Mix Region = NTSC-J -EETimingHack = 1 //broken textures +Compat = 5 --------------------------------------------- -Serial = SLPM-65615 -Name = Dokapon DX +Serial = SLPM-62155 +Name = Baseball 2002, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-65616 -Name = Juuni Kuniki - Guren no Hyou Koujin noJi [Konami The Best] +Serial = SLPM-62157 +Name = Building Baku Region = NTSC-J --------------------------------------------- -Serial = SLPM-65617 -Name = Bouken Jidai Katsugeki Goemon [Konami Collection] +Serial = SLPM-62158 +Name = Virtua Fighter 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65618 -Name = Vampire Panic +Serial = SLPM-62159 +Name = World Soccer Winning Eleven 6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65619 -Name = Tom Clancy's Ghost Recon - Jungle Storm +Serial = SLPM-62161 +Name = Generation of Chaos - Next [Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65620 -Name = Akudaikan 2 [Global The Best] +Serial = SLPM-62164 +Name = Generation of Chaos - Next Region = NTSC-J --------------------------------------------- -Serial = SLPM-65621 -Name = Street Fighter III - 3rd Strike +Serial = SLPM-62165 +Name = Shikigami no Shiro [Limited Edition] Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65622 -Name = Silent Hill 3 [Konami The Best] +Serial = SLPM-62168 +Name = Disney Golf Classics Region = NTSC-J --------------------------------------------- -Serial = SLPM-65623 -Name = Tantei Gakuen Q: Kiokan no Satsui [Konami The Best] +Serial = SLPM-62169 +Name = Live World Soccer 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65624 -Name = Dear Boys Fast Break! [Konami Palace Collection] +Serial = SLPM-62171 +Name = Simple 2000 Series Vol.05 - The Blockbuster Hyper Region = NTSC-J --------------------------------------------- -Serial = SLPM-65625 -Name = Ashita no Joe: Masshiro ni Moetsukuru [Konami The Best] +Serial = SLPM-62175 +Name = Beatmania Utsu Utsu Utsu! [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65626 -Name = Kyoufu Shinbun (Heisei-Han) Kaiki! Shinrei File [Konami The Best] +Serial = SLPM-62176 +Name = Egbrowser BB Region = NTSC-J --------------------------------------------- -Serial = SLPM-65627 -Name = Gegege no Kitarou [Konami The Best] +Serial = SLPM-62177 +Name = Kuusen [Kadokawa The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65628 -Name = Konhana Pack - 3tsu no Jikenbou [SuperLite 2000 Series] +Serial = SLPM-62180 +Name = Simple 2000 Series Vol.01 - The Shougi Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65629 -Name = Kappa no Kai-Kata - How to Breed Kappas +Serial = SLPM-62182 +Name = Top Gun - Ace of the Sky Region = NTSC-J --------------------------------------------- -Serial = SLPM-65630 -Name = Jikkyo Powerful Pro Baseball XI +Serial = SLPM-62185 +Name = San Goku Shi VII Region = NTSC-J --------------------------------------------- -Serial = SLPM-65631 -Name = Silent Hill 2 [Konami The Best] +Serial = SLPM-62186 +Name = Get Backers - The Stolen City of Infinite Region = NTSC-J --------------------------------------------- -Serial = SLPM-65632 -Name = Virtua Fighter Cyber Generation - Ambition of the Judgement Six +Serial = SLPM-62190 +Name = High Heat - Major League Baseball 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65633 -Name = I Love Baseball - Pro Yakyu wo Koyonaku +Serial = SLPM-62193 +Name = J League Perfect Striker 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65634 -Name = Summer Girl - Promised Summer +Serial = SLPM-62197 +Name = Simple 2000 Series Vol.07 - The Real Fist Fighter Region = NTSC-J --------------------------------------------- -Serial = SLPM-65635 -Name = Bakuen Kakeshi Neverland Senki Zero +Serial = SLPM-62198 +Name = Simple 2000 Series Vol.04 - The Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65636 -Name = Sangokushi Senki 2 [Koei The Best] +Serial = SLPM-62199 +Name = Dragon Quest Characters - Toruneko no Daibouken 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65637 -Name = Rakugaki Oukoku 2 - Majo no Tataki +Serial = SLPM-62200 +Name = Horse Breaker Region = NTSC-J --------------------------------------------- -Serial = SLPM-65638 -Name = Full House Kiss +Serial = SLPM-62201 +Name = Winback Region = NTSC-J --------------------------------------------- -Serial = SLPM-65639 -Name = Party Shana Nanco [Limited Edition] +Serial = SLPM-62202 +Name = Winning Post 4 Maximum 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65640 -Name = Party Shana Nanco +Serial = SLPM-62203 +Name = Dog of Bay Region = NTSC-J --------------------------------------------- -Serial = SLPM-65641 -Name = Utau - Tumbling Dice +Serial = SLPM-62204 +Name = LEGO Racers 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65642 -Name = Meiwaku Seijin Panic Maker +Serial = SLPM-62205 +Name = Virtua Cop Re-Birth Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65643 -Name = RockMan X - Command Mission +Serial = SLPM-62206 +Name = Growlanser 2 [Atlus The Best] Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65644 -Name = Guilty Gear Isuka +Serial = SLPM-62207 +Name = Simple 2000 Series Vol.09 - Bittersweet Fools Region = NTSC-J --------------------------------------------- -Serial = SLPM-65648 -Name = Medal of Honor - Frontline [EA Best Hits] +Serial = SLPM-62209 +Name = Gigantic Drive Region = NTSC-J --------------------------------------------- -Serial = SLPM-65649 -Name = NBA Street 2 [EA Best Hits] +Serial = SLPM-62211 +Name = 18 Wheeler Region = NTSC-J --------------------------------------------- -Serial = SLPM-65650 -Name = Harry Potter and The Sorcerer's Stone [EA Best Hits] +Serial = SLPM-62212 +Name = Critical Bullet - Seventh Target Region = NTSC-J --------------------------------------------- -Serial = SLPM-65651 -Name = Kowloon Youma Gakuenki [Limited Edition] +Serial = SLPM-62213 +Name = Ultimate Fighting Championship 2 - Tap-Out Region = NTSC-J --------------------------------------------- -Serial = SLPM-65652 -Name = Kowloon Youma Gakuenki +Serial = SLPM-62214 +Name = Ever Blue 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65653 -Name = Darling Special Backlash - Koi no Exhaust Heat +Serial = SLPM-62215 +Name = Virtua Cop Re-Birth Region = NTSC-J --------------------------------------------- -Serial = SLPM-65654 -Name = Kaiketsu! Osabakiina +Serial = SLPM-62216 +Name = Ever Blue [CapKore The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65655 -Name = Finding Nemo [Yuke's The Best] +Serial = SLPM-62217 +Name = J League Winning Eleven 6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65657 -Name = World Soccer Winning Eleven 8 +Serial = SLPM-62218 +Name = Simple 2000 Series Vol.10 - The Table Game Sekai-Hen Region = NTSC-J --------------------------------------------- -Serial = SLPM-65661 -Name = Densha de Go! Professional 2 [Taito Best] +Serial = SLPM-62219 +Name = Simple 2000 Series Vol.08 - The Tennis Region = NTSC-J --------------------------------------------- -Serial = SLPM-65663 -Name = Zwei!! +Serial = SLPM-62221 +Name = Winning Post 5 - Max 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65664 -Name = Memories Off... Duet [SuperLite 2000 Series] +Serial = SLPM-62223 +Name = Simple 2000 Series Vol.11 - The Off-Road Buggy Region = NTSC-J --------------------------------------------- -Serial = SLPM-65665 -Name = BloodRayne +Serial = SLPM-62224 +Name = Simple 2000 Series Ultimate Vol.3 - Saisoku! Zokusha King - Buchigiri Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-65666 -Name = NBA Live 2004 [EA Best Hits] +Serial = SLPM-62225 +Name = Nobunaga no Yabou Arashi Seiki [with Power-Up Kit] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65668 -Name = Spectral Force - Radical Elements [Limited Edition] +Serial = SLPM-62227 +Name = Marvel vs. Capcom 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65669 -Name = Spectral Force - Radical Elements +Serial = SLPM-62228 +Name = Slipheed - The Lost Planet Region = NTSC-J --------------------------------------------- -Serial = SLPM-65670 -Name = Aqua Kids +Serial = SLPM-62229 +Name = Super Puzzle Bobble 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65671 -Name = W - Wish [Limited Edition] +Serial = SLPM-62230 +Name = Silent Scope 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65672 -Name = W - Wish +Serial = SLPM-62232 +Name = Simple 2000 Series Vol.15 - The Rugby Region = NTSC-J --------------------------------------------- -Serial = SLPM-65674 -Name = Taikou Risshiden V +Serial = SLPM-62233 +Name = Simple 2000 Series Ultimate Vol.4 - Urawaza Ikasa Majangai-Niisan Tsukanjimattayodane Region = NTSC-J --------------------------------------------- -Serial = SLPM-65675 -Name = Final Approach [Limited Edition] +Serial = SLPM-62234 +Name = Simple2000 Vol.13 The Renai Adv Garasu No Mori Region = NTSC-J --------------------------------------------- -Serial = SLPM-65676 -Name = Final Approach +Serial = SLPM-62235 +Name = GetBass Battle Region = NTSC-J --------------------------------------------- -Serial = SLPM-65677 -Name = Prince of Tennis - Smash Hit! [Konami The Best] +Serial = SLPM-62236 +Name = Power Smash 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65678 -Name = Prince of Tennis - Smash Hit! 2 [Konami The Best] +Serial = SLPM-62237 +Name = Gakuen Toshi Vara Noir [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65679 -Name = Prince of Tennis - Sweat 2 [Konami The Best] +Serial = SLPM-62238 +Name = Gakuen Toshi Vara Noir Region = NTSC-J --------------------------------------------- -Serial = SLPM-65680 -Name = Prince of Tennis - Make the Strongest Team +Serial = SLPM-62239 +Name = Supercar Street Challenge Region = NTSC-J --------------------------------------------- -Serial = SLPM-65681 -Name = Monochrome [Limited Edition] +Serial = SLPM-62244 +Name = Choro Q - High Grade 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65682 -Name = Monochrome +Serial = SLPM-62245 +Name = Yuusei Kara no Buttai - Episode 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65683 -Name = Violet no Atelier: Gramnad no Renkinjutsushi [Gust Best Price] +Serial = SLPM-62247 +Name = Shin Contra Region = NTSC-J --------------------------------------------- -Serial = SLPM-65684 -Name = Meine Liebe - Yuubinaru Kioku +Serial = SLPM-62248 +Name = Simple 2000 Series Vol.05 - The Love Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65685 -Name = Stella Deus +Serial = SLPM-62249 +Name = Hello Kitty Star Light - Inogasi Cube Region = NTSC-J --------------------------------------------- -Serial = SLPM-65686 -Name = Berserk [Branded Box] +Serial = SLPM-62250 +Name = Hello Kitty Star Light - Fusiginasekai Region = NTSC-J --------------------------------------------- -Serial = SLPM-65687 -Name = Star Wars - Battlefront +Serial = SLPM-62251 +Name = Simple 2000 Series Vol.14 - The Billiard Region = NTSC-J --------------------------------------------- -Serial = SLPM-65688 -Name = Berserk +Serial = SLPM-62252 +Name = Simple 2000 Series Vol.17 - The Suiri-Aratanaru 20 no Jikenbo Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65689 -Name = Never 7 - The End of Infinity [SuperLite 2000 Series] +Serial = SLPM-62253 +Name = Simple 2000 Series Vol.16 - The Sniper Region = NTSC-J --------------------------------------------- -Serial = SLPM-65690 -Name = Konohana 4 - Yami wo Harau Inori +Serial = SLPM-62254 +Name = Kaerazu no Mori Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65691 -Name = Ever 17 - Out of Infinity [SuperLite 2000 Series] +Serial = SLPM-62255 +Name = NBA Starting Five Region = NTSC-J --------------------------------------------- -Serial = SLPM-65692 -Name = BioHazard Outbreak - File 2 +Serial = SLPM-62256 +Name = Super Trucks Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65693 -Name = Tokimeki Memorial 3 [Konami Palace Selection] +Serial = SLPM-62257 +Name = Rally Championship Region = NTSC-J --------------------------------------------- -Serial = SLPM-65694 -Name = Genso Suikoden 3 [Konami Dendou Collection] +Serial = SLPM-62258 +Name = GTC Africa Region = NTSC-J --------------------------------------------- -Serial = SLPM-65695 -Name = Hard Luck - Return of the Heroes +Serial = SLPM-62260 +Name = DogStation Region = NTSC-J --------------------------------------------- -Serial = SLPM-65696 -Name = Simple 2000 Series Vol.62 - The Super Puzzle Bubble DX +Serial = SLPM-62261 +Name = DogStation Region = NTSC-J --------------------------------------------- -Serial = SLPM-65697 -Name = Shrek 2 +Serial = SLPM-62262 +Name = GI Jockey 2 [Koei the best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65698 -Name = Love Songs - ADV Futaba Riho 14-sai Natsu +Serial = SLPM-62263 +Name = Snowboard Heaven Region = NTSC-J --------------------------------------------- -Serial = SLPM-65699 -Name = Viewtiful Joe - Aratanaru Kibo +Serial = SLPM-62264 +Name = Shin Contra Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65700 -Name = Kengo 3 +Serial = SLPM-62265 +Name = Power Smash 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65701 -Name = Ghost Hunter +Serial = SLPM-62266 +Name = Momotaro Densetsu XI Region = NTSC-J --------------------------------------------- -Serial = SLPM-65702 -Name = Sangokushi Senki [Koei Collection Series] +Serial = SLPM-62268 +Name = Winning Eleven 6 - Final Evolution Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65703 -Name = Double Reaction Plus +Serial = SLPM-62269 +Name = Akagi - Yami ni Oritattatensai Region = NTSC-J --------------------------------------------- -Serial = SLPM-65704 -Name = Standard Daisenryaku Dengekisen +Serial = SLPM-62270 +Name = Simple 2000 Series Vol.19 - The Love Simulation - The Coffee Shop Region = NTSC-J --------------------------------------------- -Serial = SLPM-65705 -Name = Final Fantasy XI - Chains of Promathia [Expansion Disc] +Serial = SLPM-62271 +Name = Simple 2000 Series Vol.20 - The Dungeon RPG Region = NTSC-J --------------------------------------------- -Serial = SLPM-65706 -Name = Final Fantasy XI - Chains of Promathia [All-in-One Pack] +Serial = SLPM-62272 +Name = Simple 2000 Series Vol.18 - The Party Sugoroku Region = NTSC-J --------------------------------------------- -Serial = SLPM-65708 -Name = Hagane no Renkinjutsushi - Akaki Elixir no Akuma +Serial = SLPM-62273 +Name = Mai-Shin 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65710 -Name = Apocripha Zero +Serial = SLPM-62274 +Name = Powerful Pro Baseball 9 Ketteiban Region = NTSC-J --------------------------------------------- -Serial = SLPM-65714 -Name = Angelique Etoile [Premium Box] +Serial = SLPM-62275 +Name = Space Raiders Region = NTSC-J --------------------------------------------- -Serial = SLPM-65715 -Name = Angelique Etoile +Serial = SLPM-62276 +Name = Get Backers - All Members Gather Region = NTSC-J --------------------------------------------- -Serial = SLPM-65716 -Name = Gaika no Gouhou - Air Land Force [Koei The Best] +Serial = SLPM-62277 +Name = GI Jockey 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65717 -Name = Tsuki wa Higashi ni Ha wa Nishi na - Operation Sanctuary +Serial = SLPM-62278 +Name = Hunter x Hunter Region = NTSC-J --------------------------------------------- -Serial = SLPM-65718 -Name = Sengoku Musou Moushouden +Serial = SLPM-62279 +Name = Winning Post 5 - Maximum 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65719 -Name = Burnout 3 - Takedown +Serial = SLPM-62282 +Name = Silent Scope 2 - Innocent Sweeper Region = NTSC-J --------------------------------------------- -Serial = SLPM-65720 -Name = Shin Sangoku Musou 2 Mushouden [Koei the Best] +Serial = SLPM-62284 +Name = Europe Games Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-65721 -Name = Pro Yakyuu Spirits 2004 Climax +Serial = SLPM-62285 +Name = Waku Waku Volley 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65722 -Name = Airforce Delta - Blue Wing Knights [Konami the Best] +Serial = SLPM-62287 +Name = Fire Pro Wrestling Z [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65723 -Name = Van Helsing +Serial = SLPM-62288 +Name = Pop'n Music - Best Hits Region = NTSC-J --------------------------------------------- -Serial = SLPM-65724 -Name = Choro Q Works +Serial = SLPM-62291 +Name = Bomberman Land 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65725 -Name = James Bond 007 - Everything or Nothing [EA Best Hits] +Serial = SLPM-62292 +Name = Warrior Blade - Rasten vs. Barbarian Region = NTSC-J --------------------------------------------- -Serial = SLPM-65726 -Name = Star Wars - Jango Fett [EA Best Hits] +Serial = SLPM-62294 +Name = Simple 2000 Series Vol.21 - The Moonlight Tale RPG +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-62295 +Name = Simple 2000 Series Vol.22 - The Densha de Go! Commuter Train Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-65727 -Name = Lord of the Rings, The - The Return of the King [EA Best Hits] +Serial = SLPM-62296 +Name = Simple 2000 Series Vol.05 - Love Upper Boxing Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65728 -Name = Hobbit, The +Serial = SLPM-62297 +Name = Got To Do! Hot Spring Table Tennis Region = NTSC-J --------------------------------------------- -Serial = SLPM-65729 -Name = True Crime - Streets of L.A. +Serial = SLPM-62298 +Name = PuchiCopter Region = NTSC-J --------------------------------------------- -Serial = SLPM-65730 -Name = RockMan X8 +Serial = SLPM-62299 +Name = Winback [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65731 -Name = Tom Clancy's Rainbow Six 3 +Serial = SLPM-62300 +Name = Horse Breaker [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65732 -Name = Akaiito +Serial = SLPM-62301 +Name = Aerobics Revolution Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65734 -Name = Kita He - Diamond Dust [Hudson The Best] +Serial = SLPM-62305 +Name = Othello [SuperLite 2000] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65735 -Name = Ao no Mamade [Treasure Box] +Serial = SLPM-62307 +Name = Simple 2000 Series Vol.26 - The Paintball X 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65736 -Name = Ao no Mamade +Serial = SLPM-62308 +Name = Simple 2000 Series Vol.24 - The Bowling Region = NTSC-J --------------------------------------------- -Serial = SLPM-65737 -Name = Meshimase Roman Sabou +Serial = SLPM-62310 +Name = Souten Ryuu - The Arcade Region = NTSC-J --------------------------------------------- -Serial = SLPM-65738 -Name = Love Songs Adv - Futaba Riho 19 Sai +Serial = SLPM-62314 +Name = Simple 2000 Series Vol.07 - Saikyou! Shiro Biking Security Police Region = NTSC-J --------------------------------------------- -Serial = SLPM-65739 -Name = Nightmare Before Christmas +Serial = SLPM-62315 +Name = Pepit Copter [with Controller] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65740 -Name = J-League Winning Eleven 8 - Asia Championship +Serial = SLPM-62316 +Name = Table Mahjong [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65741 -Name = Driver 3 +Serial = SLPM-62318 +Name = XII Stag Region = NTSC-J --------------------------------------------- -Serial = SLPM-65742 -Name = Cool Girl [Konami the Best] +Serial = SLPM-62319 +Name = Romance of the Three Kingdoms VIII Region = NTSC-J --------------------------------------------- -Serial = SLPM-65744 -Name = Firefighter F.D. 18 [Konami The Best] +Serial = SLPM-62321 +Name = Robocop Region = NTSC-J --------------------------------------------- -Serial = SLPM-65745 -Name = Tokimeki Memorial - Girl's Side [Konami Dendou Collection] +Serial = SLPM-62322 +Name = Conveti 3, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-65746 -Name = FIFA Total Football 2 +Serial = SLPM-62324 +Name = Simple 2000 Series Vol.08 - Gekido! Merio King Region = NTSC-J --------------------------------------------- -Serial = SLPM-65748 -Name = Zoids Struggle +Serial = SLPM-62325 +Name = High Heat Major League Baseball 2003 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65749 -Name = Zoids Infinity +Serial = SLPM-62326 +Name = G-Taste Mahjong [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65750 -Name = Dokapon the World +Serial = SLPM-62327 +Name = G-Taste Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65751 -Name = Suigetsu Mayoi-Gokoro +Serial = SLPM-62328 +Name = Simple 2000 Series Vol.27 - The Pro Yakyuu 2003 Pennent Race Region = NTSC-J --------------------------------------------- -Serial = SLPM-65752 -Name = Neo Contra +Serial = SLPM-62334 +Name = Simple 2000 Series Vol.29 - The Nenai Board Game Region = NTSC-J --------------------------------------------- -Serial = SLPM-65753 -Name = Kessen [Koei Collection Series] +Serial = SLPM-62335 +Name = Simple 2000 Series Vol.28 - The Bushido - Tsujigiri Ichidai Region = NTSC-J --------------------------------------------- -Serial = SLPM-65754 -Name = Metal Gear Solid 2 [Konami Dendou Collection] +Serial = SLPM-62336 +Name = Simple 2000 Series Vol.44 - The First Step RPG Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65755 -Name = Samurai Western - Katsugeki Samurai-dou +Serial = SLPM-62337 +Name = Simple 2000 Series Vol.30 - The Basketball - 3-on-3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65756 -Name = Tennis no Oji-Sama - Rush & Dream +Serial = SLPM-62338 +Name = Ishikura Noboru no Igo Kouza Region = NTSC-J --------------------------------------------- -Serial = SLPM-65757 -Name = Medal of Honor - Rising Sun [EA Best Hits] +Serial = SLPM-62339 +Name = Kikou Heidai - J-Pheonix 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65758 -Name = Sonic Mega Collection Plus +Serial = SLPM-62340 +Name = Apprentice Magician Region = NTSC-J --------------------------------------------- -Serial = SLPM-65759 -Name = Mr. Incredible +Serial = SLPM-62341 +Name = Alice's Adventures in Wonderland Region = NTSC-J --------------------------------------------- -Serial = SLPM-65760 -Name = Grand Theft Auto III [Capcom The Best] +Serial = SLPM-62342 +Name = Fire Pro Wrestling Z Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65761 -Name = World Super Police +Serial = SLPM-62343 +Name = Simple 2000 Series Vol.34 - Love Horror Adventure Region = NTSC-J --------------------------------------------- -Serial = SLPM-65762 -Name = Katakamuna +Serial = SLPM-62344 +Name = Simple 2000 Series Vol.31 - The Chikyuu Boueigun Region = NTSC-J --------------------------------------------- -Serial = SLPM-65763 -Name = 007 Goldeneye - Rogue Agent +Serial = SLPM-62345 +Name = Simple 2000 Series Vol.32 - The Tank Region = NTSC-J --------------------------------------------- -Serial = SLPM-65764 -Name = Men at Work! 3 [Limited Edition] +Serial = SLPM-62348 +Name = Run-Dim Mechsmith Region = NTSC-J --------------------------------------------- -Serial = SLPM-65765 -Name = Men at Work! 3 +Serial = SLPM-62349 +Name = Welcome to Universal Studios Japan Region = NTSC-J --------------------------------------------- -Serial = SLPM-65766 -Name = Need for Speed Underground 2 +Serial = SLPM-62350 +Name = Hudson Selection Vol.2 - Star Soldier Region = NTSC-J --------------------------------------------- -Serial = SLPM-65767 -Name = NBA Starting Five 2005 +Serial = SLPM-62353 +Name = Simple 2000 Series Vol.33 - The Jet Coaster - Yuuenchi Otsukkurou! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65768 -Name = Beatmania IIDX - 8th Style +Serial = SLPM-62354 +Name = Space Invaders 25th Anniversary Region = NTSC-J --------------------------------------------- -Serial = SLPM-65769 -Name = Pop'n Music 10 [with Pop'n Controller 2] +Serial = SLPM-62355 +Name = Choro Q - High Grade 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65770 -Name = Pop'n Music 10 +Serial = SLPM-62356 +Name = World Soccer Winning Eleven 7 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65771 -Name = Natural 2 Duo - Sakurairo no Kisetsu [Deluxe Pack] +Serial = SLPM-62362 +Name = Sega Ages 2500 Series Vol.01 - Phantasy Star Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65772 -Name = Natural 2 Duo +Serial = SLPM-62364 +Name = Sega Ages 2500 Series Vol.02 - Monaco GP Region = NTSC-J --------------------------------------------- -Serial = SLPM-65773 -Name = Shining Tears +Serial = SLPM-62365 +Name = Cardinal Arc - Konton no Fuusatsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-65775 -Name = Dance Dance Revolution - Festival +Serial = SLPM-62366 +Name = Sega Ages 2500 Series Vol.03 - Fantasy Zone Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65776 -Name = Tenkuu Danzai - Skelter Heaven [Limited Edition] +Serial = SLPM-62367 +Name = Sega Ages 2500 Series Vol.01 - Phantasy Star [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65777 -Name = Tenkuu Danzai - Skelter Heaven +Serial = SLPM-62369 +Name = Karaoke Revolution - J-Pop Vol.1 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65778 -Name = Sega Ages 2500 Series Vol.18 - Dragon Force +Serial = SLPM-62370 +Name = Psyvariar Medium Unit [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65779 -Name = Exciting Pro Wrestling 5 [Yuke's the Best] +Serial = SLPM-62371 +Name = Psyvariar Revision [Superlite 2000 Series] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65780 -Name = Kessen III [Treasure Box] +Serial = SLPM-62373 +Name = Simple 2000 Series Vol.35 - The Helicopter Region = NTSC-J --------------------------------------------- -Serial = SLPM-65781 -Name = Kessen III +Serial = SLPM-62374 +Name = Simple 2000 Series Ultimate Vol.12 - Street Golfer Region = NTSC-J --------------------------------------------- -Serial = SLPM-65783 -Name = Nobunaga no Yabou Online - Tappi no Shou +Serial = SLPM-62375 +Name = Simple 2000 Series Vol.36 - The Musume Ikusei Simulation Region = NTSC-J --------------------------------------------- -Serial = SLPM-65785 -Name = Natsuiro - Hoshikuzu no Memory [Limited Edition] +Serial = SLPM-62376 +Name = Get Backers - All Members Gather [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65786 -Name = Natsuiro - Hoshikuzu no Memory +Serial = SLPM-62377 +Name = Get Backers Dakkanoku - Ubawareta Mugenshiro [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65787 -Name = NBA Live 2005 +Serial = SLPM-62378 +Name = Bakusou Convoy Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-65788 -Name = Winning Eleven 8 - Liveware Evolution +Serial = SLPM-62379 +Name = Karaoke Revolution - J-Pop Vol.2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65789 -Name = Metal Gear Solid 3 - Snake Eater [Premium Pack] +Serial = SLPM-62380 +Name = Karaoke Revolution - J-Pop Vol.3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65790 -Name = Metal Gear Solid 3 - Snake Eater +Serial = SLPM-62381 +Name = Karaoke Revolution - J-Pop Vol.4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65791 -Name = S.L.A.I. - Steel Lancer Arena International +Serial = SLPM-62382 +Name = Karaoke Revolution - Love & Ballad Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65793 -Name = SSX 3 [EA Best Hits] +Serial = SLPM-62383 +Name = Karaoke Revolution - Night Selection 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65794 -Name = Capcom Fighting Jam +Serial = SLPM-62384 +Name = Sega Ages 2500 Series Vol.04 - Space Harrier Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65795 -Name = Digital Devil Saga: Avatar Tuner 2 +Serial = SLPM-62385 +Name = Sega Ages 2500 Series Vol.05 - Golden Axe Region = NTSC-J -EETimingHack = 1 +Compat = 5 --------------------------------------------- -Serial = SLPM-65796 -Name = Project Altered Beast +Serial = SLPM-62389 +Name = Big Bass - Bass Tsuri Kanzen Kouryaku [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65797 -Name = Dragon Quest & Final Fantasy in Itadaki Street +Serial = SLPM-62390 +Name = Ichigeki Sacchuu! HoiHoi-san [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65798 -Name = Madden NFL Superbowl 2005 +Serial = SLPM-62391 +Name = Ichigeki Sacchuu! HoiHoi-san Region = NTSC-J --------------------------------------------- -Serial = SLPM-65799 -Name = New Jinsei Game +Serial = SLPM-62392 +Name = G1 Jockey 3 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65800 -Name = Radiata Stories +Serial = SLPM-62394 +Name = Power Smash 2 [Sega The Best - 2800 Series] Region = NTSC-J -VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-65801 -Name = Crash Bandicoot 5 +Serial = SLPM-62395 +Name = Simple 2000 Series Vol.37 - The Shooting - Double Shienryu Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65802 -Name = Def Jam - Vendetta [EA Best Hits] -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65803 -Name = Freedom Fighters [EA Best Hits] +Serial = SLPM-62397 +Name = Simple 2000 Honkaku Shikou Vol.5 - Kiryoku Kentei Region = NTSC-J --------------------------------------------- -Serial = SLPM-65804 -Name = European Club Soccer - Winning Eleven Tactics +Serial = SLPM-62400 +Name = Sega Ages 2500 Series Vol.12 - Puyo Puyo Tsu Perfect Set Region = NTSC-J --------------------------------------------- -Serial = SLPM-65805 -Name = Gojira Monster Fighter +Serial = SLPM-62401 +Name = Death Crimson OX+ Region = NTSC-J --------------------------------------------- -Serial = SLPM-65806 -Name = VM Japan +Serial = SLPM-62403 +Name = Chou Aniki - Seinaru Protein Densetsu Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65807 -Name = Urbz, The - Sims in the City +Serial = SLPM-62404 +Name = Hudson Selection Vol.1 - Cubic Lode Runner Region = NTSC-J --------------------------------------------- -Serial = SLPM-65808 -Name = Derby Tsuku 4 - Derby Uma o Tsukurou! +Serial = SLPM-62406 +Name = Kurogane no Houkou - Warship Commander [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65809 -Name = NanoBreaker +Serial = SLPM-62407 +Name = Hisako Takahashi's Let's Marathon! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65810 -Name = Densha de Go! Ryojouhen +Serial = SLPM-62408 +Name = Harry Potter - Quidditch World Cup Region = NTSC-J --------------------------------------------- -Serial = SLPM-65811 -Name = Zero Shikikan Josentoki [Taito Best] +Serial = SLPM-62409 +Name = Wizardry Empire III - Ancestry of the Emperor Region = NTSC-J --------------------------------------------- -Serial = SLPM-65812 -Name = Bakushou! Jinsei Kaimichi [Taito Best] +Serial = SLPM-62410 +Name = Silent Scope 3 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65813 -Name = Fu-un Bakumatsu Den +Serial = SLPM-62412 +Name = Simple 2000 Series Vol.41 - The Volleyball Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65815 -Name = Tom Clancy's Splinter Cell - Pandora Tomorrow +Serial = SLPM-62413 +Name = Kuusen 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65816 -Name = Shin Bakusou Dekotora Densetsu +Serial = SLPM-62414 +Name = Karaoke Revolution - Dreams & Memories Region = NTSC-J --------------------------------------------- -Serial = SLPM-65817 -Name = Tennis no Oji-Sama - Love of Prince Sweet [Konami Palace Selection] +Serial = SLPM-62415 +Name = G1 Jockey 2 [Koei Teiban Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65818 -Name = Tennis no Oji-Sama - Love of Prince Bitter [Konami Palace Selection] +Serial = SLPM-62416 +Name = Momotaro Densetsu XII - West Japan Hen Region = NTSC-J --------------------------------------------- -Serial = SLPM-65819 -Name = Tennis no Oji-Sama - Kiss of Prince - Ice Version [Konami Palace Selection] +Serial = SLPM-62417 +Name = Hudson Selection Vol.2 - Sakigake!! Kuromati Koukou Region = NTSC-J --------------------------------------------- -Serial = SLPM-65820 -Name = Tennis no Oji-Sama - Kiss of Prince - Flame Version [Konami Palace Selection] +Serial = SLPM-62418 +Name = Hudson Selection Vol.3 - PC Genjin Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65821 -Name = Shinseiki Yuusha Taisen +Serial = SLPM-62422 +Name = Hudson Selection Vol.4 - Adventure Island (Takahashi Meijin no Bouken Jima) Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65822 -Name = Ichigo 100% Strawberry Diary +Serial = SLPM-62423 +Name = Tetris Kiwamemichi [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65823 -Name = Shinsengumi Gunrou-den +Serial = SLPM-62424 +Name = Suku Suku Inufuku Region = NTSC-J --------------------------------------------- -Serial = SLPM-65824 -Name = Viewtiful Joe 2 +Serial = SLPM-62425 +Name = Sega Ages 2500 Series Vol.07 - Columns Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65825 -Name = Jikkyou Powerful Pro Yakyuu 11 Chou Ketteiban +Serial = SLPM-62426 +Name = Simple 2000 Series Vol.42 - The Ultimate Fight Region = NTSC-J --------------------------------------------- -Serial = SLPM-65826 -Name = Tsukiyo ni Saraba +Serial = SLPM-62427 +Name = Dance Dance Revolution - Party Collection Region = NTSC-J -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLPM-65828 -Name = Angel Wish +Serial = SLPM-62428 +Name = Kiwame Mahjong DXII - The 4th Mondo 21 Cup Competition Region = NTSC-J --------------------------------------------- -Serial = SLPM-65829 -Name = Ys - The Ark of Napishtim [Limited Edition] +Serial = SLPM-62429 +Name = Simple 2000 Series Vol.15 - The Love Ping Pong Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65830 -Name = Ys - The Ark of Napishtim +Serial = SLPM-62430 +Name = Simple 2000 Series Vol.43 - The Saiban Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65831 -Name = Hello Kitty no PikoPiko Daisakusen +Serial = SLPM-62432 +Name = Sega Ages 2500 Series Vol.11 - Hokuto no Ken Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65832 -Name = Izumo Complete +Serial = SLPM-62433 +Name = Sega Ages 2500 Series Vol.06 - Bonanza Brothers Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65833 -Name = Harukanaru Jikuu no Naka De 2 [Koei the Best] +Serial = SLPM-62437 +Name = Suisui Sweet - Amai Ai no Mitsukekata Region = NTSC-J --------------------------------------------- -Serial = SLPM-65834 -Name = Harukanaru Jikuu no Naka De 3 +Serial = SLPM-62438 +Name = Growlanser Collection Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65835 -Name = Bakumatsu Koihana - Shinsengumi +Serial = SLPM-62440 +Name = Growlanser III [Atlus The Best] Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-65836 -Name = Ys - The Ark of Napishtim +Serial = SLPM-62442 +Name = Youkoso Hitsuji-Mura Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-65837 -Name = Terminator 3 - Redemption +Serial = SLPM-62443 +Name = Sega Ages 2500 Series Vol.08 - Virtua Racing Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65838 -Name = Hanjuku Hero 4 [Limited Edition] +Serial = SLPM-62444 +Name = Sega Ages 2500 Series Vol.15 - Decathlete Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-65839 -Name = Hanjuku Hero 4 +Serial = SLPM-62445 +Name = Sega Ages 2500 Series Vol.09 - Gain Ground Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65840 -Name = Wizardry X - Zensen no Gakufu -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-65841 -Name = Mizuiro [Best] +Serial = SLPM-62446 +Name = Sega Ages 2500 Series Vol.10 - Afterburner II Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65842 -Name = Kanon [Best] +Serial = SLPM-62447 +Name = Sega Ages 2500 Series Vol.13 - Outrun Region = NTSC-J --------------------------------------------- -Serial = SLPM-65843 -Name = 120-en no Haru - 120yen Stories +Serial = SLPM-62448 +Name = Crossword [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65844 -Name = Air [Best] +Serial = SLPM-62449 +Name = Tom & Jerry - War of the Whiskers Region = NTSC-J --------------------------------------------- -Serial = SLPM-65846 -Name = Lord of the Rings, The - Uchitsu Kuni Daisanki +Serial = SLPM-62450 +Name = Karaoke Revolution - Anime Song Selection Region = NTSC-J --------------------------------------------- -Serial = SLPM-65847 -Name = Soriaro no Fuukin Remix [First Print - Limited Edition] +Serial = SLPM-62451 +Name = Karaoke Revolution - J-Pop Vol.5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65848 -Name = Soriaro no Fuukin Remix +Serial = SLPM-62453 +Name = G-Taste Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65853 -Name = Let's Make a Baseball Team 3 +Serial = SLPM-62454 +Name = Karaoke Revolution - J-Pop Vol.6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65854 -Name = Red Dead Revolver +Serial = SLPM-62455 +Name = Karaoke Revolution - J-Pop Vol.7 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65855 -Name = Girls Bravo - Romance 15's [Deluxe Pack] +Serial = SLPM-62456 +Name = Karaoke Revolution - J-Pop Vol.8 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65856 -Name = Girls Bravo - Romance 15's +Serial = SLPM-62457 +Name = Karaoke Revolution - Snow & Party Region = NTSC-J --------------------------------------------- -Serial = SLPM-65857 -Name = Memories Off - After Rain Vol.1 [Special Edition] +Serial = SLPM-62458 +Name = Daisan Teikoku Koubouki - Aufstieg und Fall des dritten Reiches Region = NTSC-J --------------------------------------------- -Serial = SLPM-65858 -Name = Memories Off - After Rain Vol.1 +Serial = SLPM-62459 +Name = Simple 2000 Series Vol.16 - Sengoku vs. Gendai Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65859 -Name = Junrui Sosa - Kan Pony - Eirian vs. Seirian +Serial = SLPM-62460 +Name = Kakoniwa Tetsudou - Blue Train Tokkyuuhen [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65860 -Name = Shinki Genso Spectral Souls II [Premium Box] +Serial = SLPM-62461 +Name = Shikigami no Shiro II Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65861 -Name = Shinki Genso Spectral Souls II +Serial = SLPM-62462 +Name = Gradius V Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65862 -Name = Pyua Pyua Mimi Toshippono Monogatari +Serial = SLPM-62463 +Name = Loop Sequencer - Music Generator Region = NTSC-J --------------------------------------------- -Serial = SLPM-65863 -Name = D1 Grand Prix Series - Professional Drift +Serial = SLPM-62464 +Name = Pop'n Taisen Pazurudame Online Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65864 -Name = Nobunaga no Yabou - Tenka Sousei [with Power-Up Kit] +Serial = SLPM-62465 +Name = LeMans 24 Hours [Sega The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65866 -Name = Izuku e Iku no, Anohi +Serial = SLPM-62466 +Name = Zooo [Superlite 2000 Series] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65867 -Name = Shinseiki Evangelion - Koutetsu no Girlfriend 2nd +Serial = SLPM-62467 +Name = Simple 2000 Series Vol.18 - Love Aerobics Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65868 -Name = Metal Saga - Chain of Cloud +Serial = SLPM-62468 +Name = Simple 2000 Series Vol.17 - Taisen! Bakudan Poy Poy Region = NTSC-J -DMABusyHack = 1 //intro fmv --------------------------------------------- -Serial = SLPM-65869 -Name = Monster Hunter G +Serial = SLPM-62469 +Name = Gunbird 1&2 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65870 -Name = Magic Teacher Negima - Honor Version +Serial = SLPM-62471 +Name = Uno [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65871 -Name = Magic Teacher Negima - Scholarship Version +Serial = SLPM-62472 +Name = Diet Channel Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65872 -Name = Simple 2000 Series Ultimate Vol.24 - Makai Tensei +Serial = SLPM-62473 +Name = Nobunaga no Yabou - Ranseiki [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65873 -Name = Simple 2000 Series Ultimate Vol.23 - Project Minerva Professional +Serial = SLPM-62474 +Name = Simple 2000 Series Vol.46 - The Kanji Quiz - Challenge! Kanji Kentei Region = NTSC-J --------------------------------------------- -Serial = SLPM-65874 -Name = Simple 2000 Series Vol.71 - The Fantasy Renai Adventure - Kanojo no Densetsu +Serial = SLPM-62475 +Name = Momotaro Densetsu XI [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65875 -Name = Growlanser IV - Wayfarer of the Time [Atlus The Best] +Serial = SLPM-62476 +Name = Get Backers Dakkanoku - Ura Shinjuku Saikyou Battle Region = NTSC-J --------------------------------------------- -Serial = SLPM-65876 -Name = Busin 0: Wizardry Alternative Neo [Atlus Best Collection] +Serial = SLPM-62477 +Name = Simple 2000 Series Vol.47 - The Gassen Sekigahara Region = NTSC-J --------------------------------------------- -Serial = SLPM-65878 -Name = Galaxy Angel - Eternal Lovers +Serial = SLPM-62478 +Name = Bomberman Kart DX Region = NTSC-J --------------------------------------------- -Serial = SLPM-65879 -Name = C1 Grand Prix Racing Battle +Serial = SLPM-62479 +Name = Karaoke Revolution - J-Pop Vol.9 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65880 -Name = Devil May Cry 3 +Serial = SLPM-62480 +Name = Hot Gimmick Cosplay Mahjong [Limited Edition] Region = NTSC-J Compat = 5 -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-65881 -Name = SmackDown vs. Raw - Exciting Professional Wrestling 6 +Serial = SLPM-62481 +Name = Waku Waku Volleyball 2 [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65882 -Name = Duel Masters +Serial = SLPM-62482 +Name = Pachinko Slot Tokodensho - Inoki Festival Region = NTSC-J --------------------------------------------- -Serial = SLPM-65883 -Name = Shadow of Rome +Serial = SLPM-62483 +Name = Simple 2000 Series Vol.48 - The Taxi Region = NTSC-J --------------------------------------------- -Serial = SLPM-65884 -Name = Remote Control Dandy SF +Serial = SLPM-62484 +Name = Simple 2000 Series Vol.50 - The Daibijin Region = NTSC-J --------------------------------------------- -Serial = SLPM-65885 -Name = Rumble Roses +Serial = SLPM-62485 +Name = Simple 2000 Series Vol.49 - The World Champ Dodgeballer Region = NTSC-J --------------------------------------------- -Serial = SLPM-65886 -Name = Guisard Revolution +Serial = SLPM-62486 +Name = Chou Saisoku! Zokusha King B.U. [Simple Series DX] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65887 -Name = Like Life an Hour +Serial = SLPM-62488 +Name = Hot Gimmick Cosplay Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65888 -Name = Dragon Quest VIII +Serial = SLPM-62489 +Name = Yoshinoya Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65889 -Name = Kazoku Keikaku - Kokoro no Kizuna +Serial = SLPM-62490 +Name = Dragon Quest VIII [Premium Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65890 -Name = Shin Sangoku Musou 4 +Serial = SLPM-62491 +Name = RockMan Power Battle Fighters Region = NTSC-J --------------------------------------------- -Serial = SLPM-65891 -Name = Sangokushi X +Serial = SLPM-62492 +Name = Karaoke Revolution - Kids Song Selection Region = NTSC-J --------------------------------------------- -Serial = SLPM-65892 -Name = Zill O'll Infinite +Serial = SLPM-62493 +Name = Simple 2000 Series Vol.54 - The Daikiju Region = NTSC-J --------------------------------------------- -Serial = SLPM-65894 -Name = Winning Post 6 - 2005 Version +Serial = SLPM-62494 +Name = Simple 2000 Series Vol.55 - The Cat Fight Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65896 -Name = Tsuki wa Kirisaku +Serial = SLPM-62495 +Name = Simple 2000 Series Vol.53 - The Camera Kozo Region = NTSC-J --------------------------------------------- -Serial = SLPM-65897 -Name = C1 Grand Prix Racing Battle +Serial = SLPM-62496 +Name = Simple 2000 Series Vol.52 - The Space Raiders Region = NTSC-J --------------------------------------------- -Serial = SLPM-65898 -Name = Castle Fantasia [Deluxe Pack] +Serial = SLPM-62497 +Name = Simple 2000 Series Vol.51 - The Battleship Region = NTSC-J --------------------------------------------- -Serial = SLPM-65899 -Name = Castle Fantasia +Serial = SLPM-62499 +Name = Tetuya Digest Region = NTSC-J --------------------------------------------- -Serial = SLPM-65900 -Name = Sakura Taisen 3 - Remake +Serial = SLPM-62500 +Name = Sega Ages 2500 Series Vol.14 - Alien Syndrome Region = NTSC-J --------------------------------------------- -Serial = SLPM-65901 -Name = Shark Tale +Serial = SLPM-62501 +Name = Juusou Kihei Valken Region = NTSC-J --------------------------------------------- -Serial = SLPM-65902 -Name = Memories Off - After Rain Vol.2 Souen [Special Edition] +Serial = SLPM-62502 +Name = Nobunaga Senki Region = NTSC-J --------------------------------------------- -Serial = SLPM-65903 -Name = Memories Off - After Rain Vol.2 Souen +Serial = SLPM-62503 +Name = Bomberman Battles Region = NTSC-J --------------------------------------------- -Serial = SLPM-65904 -Name = Baldr Force EXE +Serial = SLPM-62504 +Name = Simple 2000 Series Vol.56 - The Survival Game Region = NTSC-J --------------------------------------------- -Serial = SLPM-65906 -Name = Sakura Taisen 3 - Remake +Serial = SLPM-62505 +Name = Fukuhara Love Ping Pong Region = NTSC-J --------------------------------------------- -Serial = SLPM-65907 -Name = Def Jam Fight for NY +Serial = SLPM-62506 +Name = Vampire Panic Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65908 -Name = Shining Force Neo +Serial = SLPM-62508 +Name = Simple 2000 Series Vol.57 - The Baseball 2004 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65909 -Name = Super Monkey Ball Deluxe +Serial = SLPM-62509 +Name = Simple 2000 Series Vol.58 - The Surgeon Region = NTSC-J --------------------------------------------- -Serial = SLPM-65910 -Name = Cafe Lindbergh - Summer Season [Sweet Box] +Serial = SLPM-62510 +Name = Simple 2000 Series Vol.60 - The Tokusatsu Henshin Hero Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65911 -Name = Cafe Lindbergh - Summer Season +Serial = SLPM-62511 +Name = Victory Wings - Zero Pilot Series Region = NTSC-J --------------------------------------------- -Serial = SLPM-65912 -Name = Boboboubo Boubobo [Hudson the Best] +Serial = SLPM-62512 +Name = Keiei Simulation - Jurassic Park [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65913 -Name = Demento +Serial = SLPM-62513 +Name = Harry Potter and the Chamber of Secrets [EA Best Hits] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65914 -Name = Nana +Serial = SLPM-62514 +Name = Sim People [EA Best Hits] +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-62515 +Name = Psikyo Shooting Collection Vol.1 - Strikers 1945 1&2 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65915 -Name = Fallout - Brotherhood of Steel +Serial = SLPM-62516 +Name = EyeToy Sports - Let's Play Sports! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65916 -Name = Harukanaru Jikuu no Kade - Hachiha Katsunori +Serial = SLPM-62517 +Name = Winning Post 5 [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65917 -Name = Transformers Tatakai [The Best] +Serial = SLPM-62518 +Name = Teitoku no Ketsudan 4 [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65918 -Name = Dear My Love - Love Like Powdery Snow +Serial = SLPM-62519 +Name = Sangokushi VIII [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65919 -Name = Rumble Fish, The +Serial = SLPM-62521 +Name = Kiwame Mahjong DXII - The 4th Mondo 21 Cup Competition [Athena Best Collection] +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-62523 +Name = Shikigami no Shiro [Taito The Best] +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-62524 +Name = Simple 2000 Series Vol.59 - The Uchyujin to Hanashi Sou! Region = NTSC-J Compat = 5 +[patches = 85E92C92] + + //Skip videos (custom) + patch=0,EE,001b4cd8,word,00000000 + //Skip videos (custom) + patch=0,EE,001b4c90,word,03e00008 + patch=0,EE,001b4c94,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLPM-65920 -Name = Romancing SaGa - Minstrel Song +Serial = SLPM-62525 +Name = Simple 2000 Series Vol.61 - The O-Ane-Chan Bara Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65921 -Name = Pia Carrot e Youkoso!! 3 [Best Version] +Serial = SLPM-62526 +Name = Giant Robo - The Animation Region = NTSC-J --------------------------------------------- -Serial = SLPM-65922 -Name = Aikagi [Best Version] +Serial = SLPM-62528 +Name = Karaoke Revolution - Kazoku Idol Sengen [with Microphone] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65923 -Name = Canvas [Best Version] +Serial = SLPM-62529 +Name = Karaoke Revolution - Kazoku Idol Sengen Region = NTSC-J --------------------------------------------- -Serial = SLPM-65924 -Name = Kono Haretasora no Shita de [Limited Edition] +Serial = SLPM-62530 +Name = Gradius III & IV [Konami Dendou Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65925 -Name = Kono Haretasora no Shita de +Serial = SLPM-62531 +Name = Mahjong Yarouze! 2 [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65926 -Name = Y's IV - Mask of the Sun - A New Theory +Serial = SLPM-62532 +Name = Ys III - Wanderers from Ys [Limited Edition] Region = NTSC-J -eeClampMode = 3 +Compat = 5 --------------------------------------------- -Serial = SLPM-65927 -Name = Forgotten Realms - Demon Stone +Serial = SLPM-62534 +Name = Simple 2000 Series Vol.63 - Women's Swim Meet Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65928 -Name = SuperLite 2000 Series - Memories Off Mix +Serial = SLPM-62536 +Name = G1 Jockey 3 [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65929 -Name = Pro Baseball Spirits 2 +Serial = SLPM-62537 +Name = Star Wars - Starfighter [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65930 -Name = EVE - Burst Error Plus [GameBridge The Best] +Serial = SLPM-62538 +Name = Kyoushuu Kidou Butai - Kougeki Helicopter Senki Region = NTSC-J --------------------------------------------- -Serial = SLPM-65931 -Name = Shinseiki Genso - Spectral Souls [IF Collection] +Serial = SLPM-62539 +Name = Chess Champion [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65932 -Name = Sento Country Kai - New Operation [with Bonus DVD] +Serial = SLPM-62540 +Name = Super Husaru [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65934 -Name = Maple Colors +Serial = SLPM-62541 +Name = Super Bowling [Superlite 2000 Series Sports] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65935 -Name = Princess Maker 4 [Limited Edition] +Serial = SLPM-62542 +Name = Simple 2000 Series Vol.20 - The Love Mahjong 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65936 -Name = Princess Maker 4 +Serial = SLPM-62543 +Name = Simple 2000 Series Vol.65 - The Kyonshi Panic Region = NTSC-J --------------------------------------------- -Serial = SLPM-65937 -Name = Siekai no Senki +Serial = SLPM-62544 +Name = Simple 2000 Series Vol.19 - Akagi Yama ni Oritattatensai Region = NTSC-J --------------------------------------------- -Serial = SLPM-65938 -Name = Memories Off - After Rain Vol.3 [Special Edition] +Serial = SLPM-62545 +Name = Simple 2000 Series Vol.64 - Splatter Action Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65939 -Name = Memories Off - After Rain Vol.3 +Serial = SLPM-62546 +Name = Sangokushi VII [Koei Collection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65941 -Name = Mabino Style +Serial = SLPM-62547 +Name = Sega Ages 2500 Series Vol.16 - Virtua Fighter 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65942 -Name = Mercenaries +Serial = SLPM-62548 +Name = Heisei Bakutoden [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65943 -Name = Angel's Feather +Serial = SLPM-62549 +Name = Otona no Gal - Kimi ni Hane Man [Jaleco The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65944 -Name = Detective Saburou Jinguiji 9 - Kind of Blue [Workjam Best Collection - Vol.2] +Serial = SLPM-62550 +Name = Wizardry Empire III - Ancestry of the Emperor [Good Price - Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65945 -Name = Red Ninja - End of Honor +Serial = SLPM-62551 +Name = Wizardry Empire III - Ancestry of the Emperor [Good Price] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65946 -Name = Beatmania IIDX - 9th Style +Serial = SLPM-62552 +Name = Super Shanghai 2005 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-65947 -Name = Killer 7 +Serial = SLPM-62553 +Name = Sega Ages 2500 Series Vol.17 - Phantasy Star Generation 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65948 -Name = Enthusia Professional Racing +Serial = SLPM-62554 +Name = EyeToy - Sega Superstars [with Camera] Region = NTSC-J -eeClampMode = 3 --------------------------------------------- -Serial = SLPM-65949 -Name = Get Ride! AM Driver - The Truth of Xiangke +Serial = SLPM-62555 +Name = Momotaro Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-65950 -Name = Gantz - The Game +Serial = SLPM-62556 +Name = Simple 2000 Series Vol.66 - Brain Power Puzzles Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65951 -Name = Tom Clancy's Ghost Recon 2 +Serial = SLPM-62557 +Name = Simple 2000 Series Vol.67 - The Suiri Region = NTSC-J --------------------------------------------- -Serial = SLPM-65952 -Name = Tengai Makyou III - Namida +Serial = SLPM-62558 +Name = Simple 2000 Series Vol.21 - Kenka Joutou! Yankee Banchou Region = NTSC-J --------------------------------------------- -Serial = SLPM-65953 -Name = Final Fantasy XI [Entry Disc 2005] +Serial = SLPM-62559 +Name = Sega Superstars Region = NTSC-J --------------------------------------------- -Serial = SLPM-65954 -Name = Tom Clancy's Ghost Recon [Ubisoft Best] +Serial = SLPM-62560 +Name = Growlanser IV - Return Region = NTSC-J --------------------------------------------- -Serial = SLPM-65955 -Name = Tom Clancy's Splinter Cell [Ubisoft Best] +Serial = SLPM-62562 +Name = Psyvariar 2 - Ultimate Final Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65957 -Name = Harukanaru Jikuu no Kade Hachiha Katsunori +Serial = SLPM-62563 +Name = Psikyo Shooting Collection Vol.2 - Sengoku Ace & Sengoku Blade Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65958 -Name = Burnout 3 - Takedown [EA Best Hits] +Serial = SLPM-62564 +Name = Simple 2000 Series Vol.68 - The Runaway - Toumei Highway Region = NTSC-J --------------------------------------------- -Serial = SLPM-65959 -Name = Standard Daisenryoku - Shiwareta Shouri +Serial = SLPM-62565 +Name = Boboboubo Boubobo - Shuumare! Taikan Boubobo [with Camera] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65960 -Name = North Wind Promise Forever [Limited Edition] +Serial = SLPM-62566 +Name = Typing of the Dead - Zombie Panic Region = NTSC-J --------------------------------------------- -Serial = SLPM-65961 -Name = North Wind Promise Forever +Serial = SLPM-62567 +Name = Winback [Koei Best Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65962 -Name = Home Maid - Owari no Tachi [Limited Edition] +Serial = SLPM-62568 +Name = Shin Sangoku Musou [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65963 -Name = Home Maid - Owari no Tachi +Serial = SLPM-62569 +Name = PC Genjin [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65964 -Name = Magical Tale - Chitchana Mahoutsukai [Limited Edition] +Serial = SLPM-62570 +Name = Takahashi Meijin no Adventure Island [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65965 -Name = Magical Tale - Chitchana Mahoutsukai +Serial = SLPM-62571 +Name = Simple 2000 Series Ultimate Vol.22 - Stylish Mahjong Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65966 -Name = Spectral Force Chronicle [Limited Edition] +Serial = SLPM-62572 +Name = Boboboubo Boubobo - Shuumare! Taikan Boubobo Region = NTSC-J --------------------------------------------- -Serial = SLPM-65967 -Name = Spectral Force Chronicle +Serial = SLPM-62574 +Name = Shoubushi Densetsu - Tetsuya Digest [Athena Best Collection Vol.3] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65968 -Name = Lovely Doll - Lovely Idol [Limited Edition] +Serial = SLPM-62576 +Name = Jissen Paci-Slot Hisho Kata - Fist of North Star Plus Region = NTSC-J --------------------------------------------- -Serial = SLPM-65969 -Name = Lovely Doll - Lovely Idol +Serial = SLPM-62577 +Name = Jissen Pachi-Slot Hisshoho! Hokuto no Ken Plus Region = NTSC-J --------------------------------------------- -Serial = SLPM-65970 -Name = Kappa no Kai-Kata - How to Breed Kappas [Konami Palace Selection] +Serial = SLPM-62578 +Name = Buzz Rod Fishing Fantasy Region = NTSC-J --------------------------------------------- -Serial = SLPM-65971 -Name = Soshite Bokura wa... and He Said +Serial = SLPM-62579 +Name = Simple 2000 Series Vol.74 - The Girl for Prince Romance Region = NTSC-J --------------------------------------------- -Serial = SLPM-65972 -Name = Constantine +Serial = SLPM-62580 +Name = Simple 2000 Series Vol.69 - The Board Game Collection Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65973 -Name = Mirai Shounen Conan +Serial = SLPM-62581 +Name = K-1 Premium 2004 - Fighting Dynamite!! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65974 -Name = Kenka Banchou +Serial = SLPM-62582 +Name = Slotter-Up Core 6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65975 -Name = World Rally Championship 4 +Serial = SLPM-62583 +Name = Hudson Selection Vol.1 - Cubic Lode Runner [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65976 -Name = Grandia III +Serial = SLPM-62584 +Name = Hudson Selection Vol.2 - Star Soldier [Hudson The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65978 -Name = Kurogane no Houkou 2 - Warship Gunner [Koei The Best] +Serial = SLPM-62585 +Name = Sakigake! Cromartie High School [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65980 -Name = Dream Mix TV World Fighters [Hudson the Best] +Serial = SLPM-62586 +Name = Simple 2000 Series Vol.70 - Kanshikikan Region = NTSC-J --------------------------------------------- -Serial = SLPM-65981 -Name = Front Mission Online +Serial = SLPM-62588 +Name = Simple 2000 Series Vol.73 - The Saiyuki Saruden Region = NTSC-J --------------------------------------------- -Serial = SLPM-65982 -Name = Tokyo Bus Guide 2 +Serial = SLPM-62589 +Name = Simple 2000 Series Vol.72 - Ninhaza Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65984 -Name = Grand Theft Auto - San Andreas +Serial = SLPM-62591 +Name = GI Jockey 3 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPM-65985 -Name = Iris no Atelier: Eternal Mana 2 +Serial = SLPM-62593 +Name = Psikyo Shooting Collection Vol.3 - Sol Divide & Dragon Blaze Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-65986 -Name = Quartett! The Stage of Love [Limited Edition] +Serial = SLPM-62594 +Name = Hot Gimmick Cosplay Mahjong - Pure Region = NTSC-J --------------------------------------------- -Serial = SLPM-65987 -Name = Quartett! The Stage of Love +Serial = SLPM-62595 +Name = Choro Q - HG 3 [Takara The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65988 -Name = Shoujo Yoshitsune Den 2 [Premium Pack] +Serial = SLPM-62596 +Name = EX Okuman Chouja Game [Takara The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65989 -Name = Shoujo Yoshitsune Den 2 +Serial = SLPM-62597 +Name = Gakuen Heaven - Okawari! Region = NTSC-J --------------------------------------------- -Serial = SLPM-65990 -Name = Neo Contra [Konami Palace Selection] +Serial = SLPM-62599 +Name = Bomberman Kart DX Region = NTSC-J --------------------------------------------- -Serial = SLPM-65991 -Name = Anubis: Zone of the Enders Special Edition [Konami Dendou Collection] +Serial = SLPM-62600 +Name = Simple 2000 Series Vol.75 - The Tokudane Region = NTSC-J --------------------------------------------- -Serial = SLPM-65994 -Name = Remember 11 - The Age of Infinity [Superlite 2000 Series] +Serial = SLPM-62601 +Name = Conveti 3, The [Hamster The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-65995 -Name = Dog's Life +Serial = SLPM-62602 +Name = Yokushin - Giga Wing Generations Region = NTSC-J --------------------------------------------- -Serial = SLPM-65996 -Name = Mars of Destruction [Limited Edition] +Serial = SLPM-62603 +Name = Wizardry Summoner Region = NTSC-J --------------------------------------------- -Serial = SLPM-65997 -Name = Mars of Destruction +Serial = SLPM-62604 +Name = Simple 2000 Series Vol.76 - The Journey to the World of English Language Region = NTSC-J --------------------------------------------- -Serial = SLPM-65998 -Name = Vampire Darkstalkers Collection +Serial = SLPM-62605 +Name = Simple 2000 Series Vol.77 - The Hanashi Sou Kankokugo no Tabi Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-65999 -Name = Drag-on Dragoon 2 - Fuuin no Kurenai +Serial = SLPM-62606 +Name = Sega Ages 2500 Series Vol.19 - Fighting Vipers Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66000 -Name = Conflict Delta II - Gulf War 1991 +Serial = SLPM-62607 +Name = Shikigami no Shiro III [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66001 -Name = Chocolat - Maid Cafe Curio +Serial = SLPM-62608 +Name = Yoshinoya [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66002 -Name = Prince of Persia - Warrior Within +Serial = SLPM-62609 +Name = Majhong Haoh - Shinken Battle [Mycom The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66006 -Name = Angelique Trois - Aizouhen [Koei Selection] +Serial = SLPM-62610 +Name = Saikyou Toudai Shogi Supesharu II Region = NTSC-J --------------------------------------------- -Serial = SLPM-66007 -Name = Zoids Tactics +Serial = SLPM-62611 +Name = Taisen Hot Gimmick Axes Jong [Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66008 -Name = Musashiden II - Blademaster +Serial = SLPM-62612 +Name = Taisen Hot Gimmick Axes Jong Region = NTSC-J --------------------------------------------- -Serial = SLPM-66009 -Name = World Soccer Winning Eleven 9 - Bonus Pack +Serial = SLPM-62613 +Name = Tough Dark Fight Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66010 -Name = Tennis no Oji-Sama - Smash-Hit! [Konami Palace Selection] +Serial = SLPM-62614 +Name = Horse Breaker [Koei Teiban Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66011 -Name = Tennis no Oji-Sama - Smash-Hit! 2 [Konami Palace Selection] +Serial = SLPM-62615 +Name = Slotter Up Mania 6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66012 -Name = Tennis no Oji-Sama - Sweat & Tears 2 [Konami Palace Selection] +Serial = SLPM-62616 +Name = Simple 2000 Series Ultimate Vol.25 - Chou-Saisoku! Zokusha King BU no BU 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66013 -Name = Tennis no Oji-Sama - Form the Strongest Team [Konami Palace Selection] +Serial = SLPM-62617 +Name = Simple 2000 Series Vol.79 - Akko ni Omakase! The Party Quiz Region = NTSC-J --------------------------------------------- -Serial = SLPM-66014 -Name = Tennis no Oji-Sama - Rush & Dream [Konami Palace Selection] +Serial = SLPM-62618 +Name = Simple 2000 Series Vol.78 - The Uchuu Daisensou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66015 -Name = SuperLite 2000 Series - Ever 17 - The Out of Infinity [Premium Edition] +Serial = SLPM-62620 +Name = Pachi-Slot Winning Post Region = NTSC-J --------------------------------------------- -Serial = SLPM-66016 -Name = Jissen Pachi-Slot Hisshouhou! Onimusha 3 +Serial = SLPM-62621 +Name = Gradius V [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66018 -Name = Silent Hill 3 [Konami Dendou Collection] +Serial = SLPM-62622 +Name = Slotter Up Core 7 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66019 -Name = Stuntman +Serial = SLPM-62623 +Name = Elemental Gerad Region = NTSC-J +Compat = 5 +XgKickHack = 1 //Fixes chocolate coloured characters --------------------------------------------- -Serial = SLPM-66020 -Name = Psi-Ops - The Mindgate Conspiracy +Serial = SLPM-62624 +Name = Indoor Helicopter Adventure 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66021 -Name = NBA Street v3 +Serial = SLPM-62625 +Name = Onihama Bakusou Gurentai Gekitou Hen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66022 -Name = Kaido Touge no Densetsu +Serial = SLPM-62626 +Name = Oretachi Geasen Zoku Sono Vol.01 - Scramble Region = NTSC-J --------------------------------------------- -Serial = SLPM-66023 -Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo [Limited Edition] +Serial = SLPM-62627 +Name = Oretachi Geasen Zoku Sono Vol.02 - Crazy Climber Region = NTSC-J --------------------------------------------- -Serial = SLPM-66024 -Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo +Serial = SLPM-62628 +Name = Oretachi Geasen Zoku Sono Vol.03 - Karate Michi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66025 -Name = Generation of Chaos IV [Idea Factory Collection] +Serial = SLPM-62629 +Name = Mahjong Haoh - Battle Royal Region = NTSC-J --------------------------------------------- -Serial = SLPM-66026 -Name = Honotomi - First Kiss [Limited Edition] +Serial = SLPM-62630 +Name = Sukusuku Inufuku [Hamster The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66027 -Name = Honotomi - First Kiss +Serial = SLPM-62631 +Name = Simple 2000 Series 2-in-1 Vol.3 - The Puzzle Collection 2000 Toi & The Touyou Sandai Senjitsu Fusui, Seimeidanhan, Ekisen [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66028 -Name = Ururun Quest +Serial = SLPM-62632 +Name = Simple 2000 Series 2-in-1 Vol.3 - The Puzzle Collection 2000 Toi & The Touyou Sandai Senjitsu Fusui, Seimeidanhan, Ekisen [Disc2of2] Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPM-66029 -Name = Realize - Panorama Luminary +Serial = SLPM-62633 +Name = Simple 2000 Series 2-in-1 Vol.2 - The Bass Fishing & The Bowling Hyper [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66030 -Name = Heavy Metal Thunder +Serial = SLPM-62634 +Name = Simple 2000 Series 2-in-1 Vol.2 - The Bass Fishing & The Bowling Hyper [Disc2of2] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66031 -Name = Phantasy Star Universe +Serial = SLPM-62635 +Name = Simple 2000 Series Vol.26 - The Love Smash! 5.1 Region = NTSC-J -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-66032 -Name = Silent Hill 4 [Konami The Best] +Serial = SLPM-62636 +Name = Simple 2000 Series 2-in-1 Vol.1 - The Tennis & The Snowboard [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66033 -Name = Oz +Serial = SLPM-62637 +Name = Simple 2000 Series 2-in-1 Vol.1 - The Tennis & The Snowboard [Disc2of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66034 -Name = Grand Theft Auto - Vice City +Serial = SLPM-62638 +Name = Simple 2000 Series Vol.80 - The O-Ane-Chan Puruu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66035 -Name = Kenka Banchou +Serial = SLPM-62639 +Name = Mahjong Taikai III - Millennium League [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66038 -Name = Georama Sensen Ijou Nashi +Serial = SLPM-62640 +Name = Taikou Risshiden IV [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66039 -Name = SuperLite 2000 Series - Memories Off... Sorekara +Serial = SLPM-62641 +Name = Sangokushi VIII [with Power-Up Kit] [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66040 -Name = Edo Mono +Serial = SLPM-62642 +Name = Nobunaga no Yabou - Ranseiki [with Power-Up Kit] [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66041 -Name = Shoujo Yoshitsune Den [WellMADE The Best] +Serial = SLPM-62643 +Name = Bomberman Land 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66042 -Name = Brothers in Arms: Road to Hill 30 +Serial = SLPM-62644 +Name = Oretachi Geasen Zoku Sono Vol.04 - Time Pilot Region = NTSC-J --------------------------------------------- -Serial = SLPM-66043 -Name = Racing Game - Chuui! +Serial = SLPM-62645 +Name = Oretachi Geasen Zoku Sono Vol.05 - Moon Cresta Region = NTSC-J --------------------------------------------- -Serial = SLPM-66044 -Name = MVP Baseball 2005 +Serial = SLPM-62646 +Name = Oretachi Geasen Zoku Sono Vol.06 - Sonic Wings Region = NTSC-J --------------------------------------------- -Serial = SLPM-66045 -Name = My Merry May with be +Serial = SLPM-62648 +Name = K-1 World Max 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66046 -Name = Star Wars - Episode III - Revenge of the Sith +Serial = SLPM-62649 +Name = Simple 2000 Series Vol.88 - The Sekai Meisaku Gekijou Quiz Region = NTSC-J --------------------------------------------- -Serial = SLPM-66047 -Name = FIFA Street +Serial = SLPM-62650 +Name = Simple 2000 Series Vol.82 - The Kung-fu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66049 -Name = D.C.P.S. - Da Capo Plus Situation [Kadokawa the Best] +Serial = SLPM-62651 +Name = Simple 2000 Series Vol.83 - The Konchu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66050 -Name = Daisan Teikoku Koubouki II - Aufstieg und Fall des Dritten Reich +Serial = SLPM-62652 +Name = Simple 2000 Series Vol.81 - The Chikyuu Boueigun 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66051 -Name = Need for Speed Underground 2 [EA Best Hits] +Serial = SLPM-62653 +Name = Psikyo Shooting Collection Vol.1 - Strikers 1945 1&2 [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66052 -Name = Miko Mai - Eien no Omoi +Serial = SLPM-62655 +Name = Sega Ages 2500 Series Vol.11 - Hokuto no Ken Region = NTSC-J --------------------------------------------- -Serial = SLPM-66053 -Name = Dokapon DX [Asmik Ace Best Series] +Serial = SLPM-62656 +Name = Sega Ages 2500 Series Vol.12 - Puyo Puyo Perfect Set Region = NTSC-J --------------------------------------------- -Serial = SLPM-66054 -Name = Generation of Chaos 5 [Limited Edition] +Serial = SLPM-62658 +Name = Kyoushuu Kidou Butai - Kougeki Helicopter Senki [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66055 -Name = Generation of Chaos 5 +Serial = SLPM-62660 +Name = Oretachi Geasen Zoku Sono Vol.09 - Super Volleyball Region = NTSC-J --------------------------------------------- -Serial = SLPM-66056 -Name = Mushihime Sama +Serial = SLPM-62661 +Name = Oretachi Geasen Zoku Sono - Terra Cresta Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66057 -Name = Taito Memories Vol.1 +Serial = SLPM-62662 +Name = Simple 2000 Series 2-in-1 Vol.5 - The Shooting & The Helicopter [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66058 -Name = Sengoku Basara +Serial = SLPM-62663 +Name = Simple 2000 Series 2-in-1 Vol.5 - The Shooting & The Helicopter [Disc2of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66059 -Name = Robots +Serial = SLPM-62664 +Name = Simple 2000 Series 2-in-1 Vol.4 - The Bushidou & The Sniper 2 [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66060 -Name = Boukoku no Aegis 2035 - Warship Gunner +Serial = SLPM-62665 +Name = Simple 2000 Series 2-in-1 Vol.4 - The Bushidou & The Sniper 2 [Disc2of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66061 -Name = Jikkyou Powerful Pro Baseball 12 +Serial = SLPM-62666 +Name = Sega Ages 2500 Series Vol.01 - Phantasy Star Generation 1 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66062 -Name = Mahou Sensei Negima! Gold Medal +Serial = SLPM-62668 +Name = Sega Ages 2500 Series Vol.03 - Fantasy Zone Region = NTSC-J --------------------------------------------- -Serial = SLPM-66063 -Name = Mahou Sensei Negima! Silver Medal +Serial = SLPM-62670 +Name = Sega Ages 2500 Series Vol.05 - Golden Axe Region = NTSC-J --------------------------------------------- -Serial = SLPM-66064 -Name = Tough - Dark Fight +Serial = SLPM-62671 +Name = Sega Ages 2500 Series Vol.06 - Bonanza Bros. & Tant-R Region = NTSC-J --------------------------------------------- -Serial = SLPM-66065 -Name = Pop'n Music 11 +Serial = SLPM-62675 +Name = Sega Ages 2500 Series Vol.13 - Outrun Region = NTSC-J --------------------------------------------- -Serial = SLPM-66068 -Name = Richard Burns Rally +Serial = SLPM-62677 +Name = Sega Ages 2500 Series Vol.15 - Decathlete Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-66069 -Name = Shikigami no Shiro - Nanayozuki Gensoukyoku +Serial = SLPM-62678 +Name = Kurogane no Houkou - Warship Commander [Koei Selection Series] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66070 -Name = Shadow Hearts - From the New World [Limited Edition] +Serial = SLPM-62679 +Name = Relakuma - Ojama Shitemasu 2 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66071 -Name = Shadow Hearts - From the New World +Serial = SLPM-62680 +Name = Relakuma - Ojama Shitemasu 2 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66072 -Name = Fight Night Round 2 +Serial = SLPM-62681 +Name = Nobunaga no Yabou - Ranseiki [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66073 -Name = Hagane no Renkinjutsushi 3 - Kami o Tsugu Shoujo +Serial = SLPM-62682 +Name = Slotter Up Core 8 - Giant's Star III Region = NTSC-J --------------------------------------------- -Serial = SLPM-66074 -Name = Sonic Gems Collection +Serial = SLPM-62683 +Name = Mahjong Taikai Battle [Mycom The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66076 -Name = Meine Liebe - Yuubinaru kioku [Konami the Best] +Serial = SLPM-62684 +Name = Toudai Shogi - Jouseki Dojo Kanketsuhen [Mycom The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66077 -Name = K-1 World Max 2005 +Serial = SLPM-62685 +Name = Homura Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66078 -Name = White Princess the Second +Serial = SLPM-62686 +Name = Psikyo Shooting Collection Vol.2 - Sengoku Ace & Sengoku Blade [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66080 -Name = Generation of Chaos 3 [IF Collection] +Serial = SLPM-62687 +Name = Sega Ages 2500 Series Vol.24 - Last Bronx Region = NTSC-J --------------------------------------------- -Serial = SLPM-66081 -Name = Iris no Atelier: Eternal Mana [Gust Best Price] +Serial = SLPM-62689 +Name = Langrisser III Region = NTSC-J --------------------------------------------- -Serial = SLPM-66082 -Name = Fire Pro Wrestling Returns +Serial = SLPM-62690 +Name = Raiden III Region = NTSC-J --------------------------------------------- -Serial = SLPM-66084 -Name = Ramune - Garasu-Bin ni Uturu Umi +Serial = SLPM-62691 +Name = Sega Ages 2500 Series Vol.20 - Space Harrier Collection Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66085 -Name = Rumble Roses [Konami The Best] +Serial = SLPM-62692 +Name = Sega Ages 2500 Series Vol.21 - SDI & Quartet Region = NTSC-J --------------------------------------------- -Serial = SLPM-66086 -Name = Gokujou Seitokai +Serial = SLPM-62693 +Name = Slotter Up Mania 7 - Saishin Saikyou Pioneer MAX Region = NTSC-J --------------------------------------------- -Serial = SLPM-66087 -Name = Winning Post 7 +Serial = SLPM-62694 +Name = Slotter Up Mania 8 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66089 -Name = 3-Nen B-Gumi Kinpachi Sensei - Densetsu no Kyoudan ni Tate! [Best] +Serial = SLPM-62695 +Name = Oretachi Geasen Zoku Sono - Burger Time Region = NTSC-J --------------------------------------------- -Serial = SLPM-66090 -Name = Crash Tag Team Wrestling +Serial = SLPM-62696 +Name = Oretachi Geasen Zoku Sono - Yie Ar Kung-fu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66091 -Name = Shinobido Imashime +Serial = SLPM-62697 +Name = Generation of Chaos Next [Idea Factory Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66092 -Name = Taito Memories Gekan +Serial = SLPM-62698 +Name = Ultimate Pro Pinball Region = NTSC-J --------------------------------------------- -Serial = SLPM-66093 -Name = Kessen II [Koei Selection Series] +Serial = SLPM-62699 +Name = Neverland Card War Cardinal Arc - Konton no Fuusatsu [Idea Factory Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66094 -Name = Shin Sangoku Musou 2 [Koei Selection Series] +Serial = SLPM-62700 +Name = Princess Maker [Best Hit Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66096 -Name = Shin Sangoku Musou 2 - Mushouden [Koei Selection Series] +Serial = SLPM-62701 +Name = Princess Maker 2 [Best Hit Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66097 -Name = Shinseiki Evangelion - Ayanami Ikusai Keikaku with Asuka Hokan Keikaku [Broccoli Best Quality] +Serial = SLPM-62702 +Name = Momotaro Densetsu 15 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66098 -Name = True Crime - Streets of L.A. [CapKore] +Serial = SLPM-62703 +Name = Sega Rally Championship '95 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66100 -Name = Harukanaru Jikuu no Kade 3 +Serial = SLPM-62704 +Name = Oretachi Geasen Zoku Sono Vol.10 - Quarth Region = NTSC-J --------------------------------------------- -Serial = SLPM-66101 -Name = Shin Sangoku Musou 4 - Moushouden +Serial = SLPM-62705 +Name = Oretachi Geasen Zoku Sono - Nekketsu Koukou Dodgeball-bu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66102 -Name = Zwei!! [Taito the Best] +Serial = SLPM-62706 +Name = Oretachi Geasen Zoku Sono - Nekketsu Kouha Kunio-kun Region = NTSC-J --------------------------------------------- -Serial = SLPM-66103 -Name = WRC 3 [Spike the Best] +Serial = SLPM-62707 +Name = Oretachi Geasen Zoku Sono - Rabio Lepus Region = NTSC-J --------------------------------------------- -Serial = SLPM-66104 -Name = Puyo Puyo Fever 2 +Serial = SLPM-62708 +Name = Sega Ages 2500 Series Vol.22 - Advanced Daisenryaku - Doitsu Dengeki Sakusen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66105 -Name = Rhapsodia +Serial = SLPM-62709 +Name = Sega Ages 2500 Series Vol.23 - Sega Memorial Selection Region = NTSC-J --------------------------------------------- -Serial = SLPM-66106 -Name = Hoshi no Furu Koku [Limited Edition] +Serial = SLPM-62710 +Name = San Goku Shi VIII Region = NTSC-J --------------------------------------------- -Serial = SLPM-66107 -Name = Hoshi no Furu Koku +Serial = SLPM-62711 +Name = Welcome to Sheep Village [Superlite 2000] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66108 -Name = Burnout Revenge +Serial = SLPM-62712 +Name = Sega Ages 2500 Series Vol.25 - Gunstar Heroes - Treasure Box Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66109 -Name = Code Age Commanders +Serial = SLPM-62713 +Name = Yokushin - Giga Wing Generations [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66110 -Name = Fushigi no Umi no Nadia - Inherit the Blue Water [Limited Edition] +Serial = SLPM-62714 +Name = Shin Sangoku Musou Series Collection Joukan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66112 -Name = Fushigi no Umi no Nadia - Inherit the Blue Water +Serial = SLPM-62717 +Name = Sega Ages 2500 Series Vol.26 - Dynamite Deka Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66113 -Name = Hissatsu Ura-Kagyou +Serial = SLPM-62718 +Name = Sega Ages 2500 Series Vol.27 - Panzer Dragoon Region = NTSC-J --------------------------------------------- -Serial = SLPM-66114 -Name = Nizu no Senritsu [Limited Edition] +Serial = SLPM-62719 +Name = Nobunaga no Yabou - Tenka Souyo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66115 -Name = Nizu no Senritsu +Serial = SLPM-62720 +Name = Wizardry Summoner [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66116 -Name = NBA Live 2005 [EA Best Hits] +Serial = SLPM-62721 +Name = Ichigeki Sacchuu! HoiHoi-san [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66117 -Name = Metal Gear Solid 3 - Subsistence [with Headset] +Serial = SLPM-62722 +Name = Jissen Pachi-Slot Hisshouhou! Ore no Sora Region = NTSC-J --------------------------------------------- -Serial = SLPM-66122 -Name = Kingdom Hearts [Ultimate Hits] +Serial = SLPM-62724 +Name = Conveti 4, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-66123 -Name = Kingdom Hearts - Final Mix [Ultimate Hits] +Serial = SLPM-62725 +Name = Mahjong Hoah - Shinken Battle II Region = NTSC-J --------------------------------------------- -Serial = SLPM-66124 -Name = Final Fantasy X [Ultimate Hits] +Serial = SLPM-62726 +Name = Shooting Love - Trizeal Region = NTSC-J -IPUWaitHack = 1 --------------------------------------------- -Serial = SLPM-66125 -Name = Final Fantasy X-2 [Ultimate Hits] +Serial = SLPM-62727 +Name = Spectral vs. Generation Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66129 -Name = Guilty Gear XX #Reload +Serial = SLPM-62729 +Name = Oretachi Geasen Zoku Sono Vol.15 - Akumajou Dracula Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66130 -Name = Tom Clancy's Splinter Cell - Chaos Theory +Serial = SLPM-62730 +Name = Oretachi Geasen Zoku Sono Vol.16 - Contra Region = NTSC-J --------------------------------------------- -Serial = SLPM-66131 -Name = Tim Burton's The Nightmare Before Christmas [Premium Pack] +Serial = SLPM-62731 +Name = Oretachi Geasen Zoku Sono Vol.17 - Pooyan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66132 -Name = Gladiator - Road to Freedom - Remix +Serial = SLPM-62733 +Name = Garfield - Saving Arlene Region = NTSC-J --------------------------------------------- -Serial = SLPM-66134 -Name = Shuffle! On the Stage +Serial = SLPM-62736 +Name = Slotter Up Mania [Dorart Value Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66135 -Name = World Tank Museum For Game - Toubu Sensen Success +Serial = SLPM-62737 +Name = Rally Shox & Freestyle Motorcross [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66136 -Name = SuperLite 2000 Series - Akaiito +Serial = SLPM-62739 +Name = Suro Genjin Region = NTSC-J --------------------------------------------- -Serial = SLPM-66137 -Name = Clover Heart's Looking for Happiness [The Best] +Serial = SLPM-62740 +Name = Saikyo Shogi Gekisashi Special Region = NTSC-J --------------------------------------------- -Serial = SLPM-66138 -Name = Desire [Best Version] +Serial = SLPM-62743 +Name = School Heaven Okawari [The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66139 -Name = Duel Savior Destiny +Serial = SLPM-62744 +Name = Oretachi Geasen Zoku Sono - Thunder Cross Region = NTSC-J --------------------------------------------- -Serial = SLPM-66140 -Name = Atelier Marie + Elie: Salburg no Renkinjutsushi 1&2 +Serial = SLPM-62745 +Name = Oretachi Geasen Zoku Sono Vol.19 - Trio the Punch Region = NTSC-J --------------------------------------------- -Serial = SLPM-66141 -Name = Matantei Loki Ragnarok Mayoukaku +Serial = SLPM-62746 +Name = Sega Ages 2500 Series Vol.28 - Tetris Collection Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66142 -Name = Rebirth Moon [Limited Edition] +Serial = SLPM-62747 +Name = G1 Jockey 3 [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66143 -Name = Rebirth Moon +Serial = SLPM-62748 +Name = Nobunaga no Yabou - Renseiki [with Power-Up Kit] [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66144 -Name = D1 Grand Prix 2005 +Serial = SLPM-62749 +Name = Jissen Pachi-Slot Hisshouhou! Mister Magic Neo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66145 -Name = GoldenEye - Rogue Agent [EA Best Hits] +Serial = SLPM-62750 +Name = Momotaro Densetsu 16 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66146 -Name = Memories Off #5 - Togireta Film [Limited Edition] +Serial = SLPM-62752 +Name = Slotter Up Core 9 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66147 -Name = Memories Off #5 - Togireta Film +Serial = SLPM-62753 +Name = Homura [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66148 -Name = Star Wars - Battlefront [EA Best Hits] +Serial = SLPM-62754 +Name = Puyo Puyo! 15th Anniversary Region = NTSC-J --------------------------------------------- -Serial = SLPM-66149 -Name = Shirogane no Torikago [Limited Edition] +Serial = SLPM-62755 +Name = Mahjong Haoh - Shinken Battle [Mycom The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66150 -Name = Shirogane no Torikago +Serial = SLPM-62756 +Name = Saikyou Toudai Shogi 6 [Mycom The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66151 -Name = Killzone +Serial = SLPM-62757 +Name = EX Okuman Chouja Game [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66152 -Name = Konneko - Keep a Memory Green [Limited Edition] +Serial = SLPM-62758 +Name = River Ride Adventure featuring Salomon Region = NTSC-J --------------------------------------------- -Serial = SLPM-66153 -Name = Konneko - Keep a Memory Green +Serial = SLPM-62759 +Name = Nobunaga no Yabou - Soutensoku [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66155 -Name = Flame of Recca - Final Burning [Konami Palace Selection] +Serial = SLPM-62760 +Name = Sega Ages 2500 Vol.29 - Monster World Complete Collection Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66156 -Name = Marheaven Arm Fight Dream +Serial = SLPM-62761 +Name = Choro Q - HG 2 [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66157 -Name = Rune Princess [First Print - Limited Edition] +Serial = SLPM-62762 +Name = Sangokushi VIII [with Poer-Up Kit] [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66158 -Name = Rune Princess +Serial = SLPM-62763 +Name = Bomberman Land 3 [Hudson Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66159 -Name = Call of Duty - Final Hour +Serial = SLPM-62764 +Name = Ojama Shitemasu 2 Shuukan [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66160 -Name = Devil May Cry 3 [Special Edition] +Serial = SLPM-62766 +Name = Sega Ages 2500 Vol.30 - Galaxy Force II Region = NTSC-J -Compat = 5 -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-66163 -Name = Fuuraiki 2 +Serial = SLPM-62767 +Name = Sega Ages 2500 Vol.31 - Dennou Senki Virtual On Region = NTSC-J --------------------------------------------- -Serial = SLPM-66164 -Name = Mahou Tsukai Kurohime +Serial = SLPM-62770 +Name = Volleyball World Cup - Venus Evolution Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66165 -Name = Otome Hao Anesama ni Koi Shiteru +Serial = SLPM-62771 +Name = Choro Q HG 3 [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66166 -Name = Shadow the Hedgehog +Serial = SLPM-62772 +Name = Mahjong Haoh - Battle Royal [Mycom Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66167 -Name = God of War +Serial = SLPM-62773 +Name = Slotter Up Mania 9 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66168 -Name = Ryu Ga Gotoku +Serial = SLPM-62774 +Name = Jissen Pachi-Slot Hisshouhou! Selection - Salaryman Kintarou - Slotter Kintarou - Ore no Sora Region = NTSC-J --------------------------------------------- -Serial = SLPM-66169 -Name = J-League Winning Eleven 9 - Asia Championship +Serial = SLPM-62775 +Name = Sega Ages 2500 Vol.32 - Phantasy Star Complete Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-66170 -Name = Genso Suikoden V [Limited Edition] +Serial = SLPM-62778 +Name = Slotter Up Mania 10 - Pioneer Special 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66171 -Name = NBA Live '06 +Serial = SLPM-62779 +Name = Puyo Puyo! [Special Price] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66175 -Name = Akumajo Dracula - Yami no Juin +Serial = SLPM-62780 +Name = Fantasy Zone Complete Collection Region = NTSC-J Compat = 5 -vuClampMode = 0 //SPS with microVU --------------------------------------------- -Serial = SLPM-66176 -Name = Chaos Field - New Order -Region = NTSC-J +Serial = SLPM-64504 +Name = Maximo +Region = NTSC-K --------------------------------------------- -Serial = SLPM-66177 -Name = Matrix,The - Path of Neo -Region = NTSC-J +Serial = SLPM-64522 +Name = La Pucelle +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-66178 -Name = Pop'n Music 7 [Konami The Best] -Region = NTSC-J +Serial = SLPM-64523 +Name = Marvel Vs Capcom 2 +Region = NTSC-K --------------------------------------------- -Serial = SLPM-66179 -Name = Pop'n Music 8 [Konami The Best] -Region = NTSC-J +Serial = SLPM-64525 +Name = Guilty Gear X Plus "By Your Side" +Region = NTSC-K +Compat = 5 --------------------------------------------- -Serial = SLPM-66180 -Name = Beatmania IIDX - 10th Style -Region = NTSC-J +Serial = SLPM-64549 +Name = Shikigami no Shiro +Region = NTSC-K --------------------------------------------- -Serial = SLPM-66181 -Name = Beat Down - Fists of Vengeance +Serial = SLPM-65001 +Name = Kessen Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66182 -Name = Kono Haretasora no Shita de [Good Price] +Serial = SLPM-65002 +Name = Love/0 Story Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66183 -Name = Getaway, The - Black Monday +Serial = SLPM-65004 +Name = Reiselied - Ephemeral Fantasia Region = NTSC-J --------------------------------------------- -Serial = SLPM-66184 -Name = Ikusa Gami +Serial = SLPM-65005 +Name = I am the Coach Region = NTSC-J --------------------------------------------- -Serial = SLPM-66185 -Name = Game ni Nattayo! Dokura-chan [Limited Edition] +Serial = SLPM-65006 +Name = Beatmania IIDX - 3rd Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-66186 -Name = Game ni Nattayo! Dokura-chan +Serial = SLPM-65007 +Name = Roadsters Trophy 2000 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66187 -Name = Exciting Pro Wrestling 6 - SmackDown vs. RAW [Yuke's the Best] +Serial = SLPM-65008 +Name = 7 Blades Region = NTSC-J --------------------------------------------- -Serial = SLPM-66189 -Name = SSX On Tour +Serial = SLPM-65009 +Name = ESPN X-Games Snowboarding Region = NTSC-J --------------------------------------------- -Serial = SLPM-66190 -Name = Star Wars Battlefront II +Serial = SLPM-65010 +Name = Onimusha Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66191 -Name = Tiger Woods PGA Tour '06 +Serial = SLPM-65011 +Name = Guitar Freaks 3rd Mix and DrumMania 2nd Mix Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66192 -Name = Izumo 2 +Serial = SLPM-65012 +Name = Gitaroo Man Region = NTSC-J +Compat = 5 +eeRoundMode = 1 +vuRoundMode = 3 --------------------------------------------- -Serial = SLPM-66193 -Name = Fahrenheit +Serial = SLPM-65013 +Name = Shadow of Memories Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66194 -Name = Otona no Gal Jan 2 +Serial = SLPM-65014 +Name = Bouken Jidai Katsugeki - Goemon Region = NTSC-J +Compat = 5 +GoemonTlbHack = 1 --------------------------------------------- -Serial = SLPM-66195 -Name = SuperLite 2000 Series - Love Adventure Monochrome +Serial = SLPM-65015 +Name = Kessen 2 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66196 -Name = Sentimental Prelude [Best Version] +Serial = SLPM-65016 +Name = Love Songs [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66197 -Name = Godzilla Kaijuu Dairansen - Chikyuu Saishuu Kessen [Atari Hot Series] +Serial = SLPM-65017 +Name = Love Songs - Idol is my Classmate Region = NTSC-J --------------------------------------------- -Serial = SLPM-66201 -Name = Seishun no Kagayaki [Best Version] +Serial = SLPM-65018 +Name = Z.O.E.: Zone of the Enders [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66202 -Name = Fragments Blue [Special Edition] +Serial = SLPM-65019 +Name = Z.O.E.: Zone of the Enders Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66203 -Name = Fragments Blue +Serial = SLPM-65020 +Name = ParaPara Paradise Region = NTSC-J --------------------------------------------- -Serial = SLPM-66204 -Name = Madden NFL '06 +Serial = SLPM-65021 +Name = Super Galdelic Hour Region = NTSC-J --------------------------------------------- -Serial = SLPM-66205 -Name = Front Mission 5 - Scars of the War +Serial = SLPM-65022 +Name = BioHazard - Code Veronica - Perfect Version Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66206 -Name = Battlefield 2 - Modern Combat +Serial = SLPM-65023 +Name = Devil May Cry [Demo] [BioHazard - Code Veronica - Perfect Version - Bonus Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66207 -Name = Dororo [Sega the Best 2800] +Serial = SLPM-65024 +Name = BioHazard - 5th Anniversary Package - Nightmare Returns [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66208 -Name = Sakura Taisen V - Episode 0 - Samurai Girl of Wild [Sega the Best] +Serial = SLPM-65025 +Name = BioHazard - 5th Anniversary Package - Nightmare Returns [Disc2of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66209 -Name = Pop'n Music 9 [Konami The Best] +Serial = SLPM-65026 +Name = Beatmania IIDX - 4th Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-66210 -Name = Pop'n Music 10 [Konami The Best] +Serial = SLPM-65032 +Name = Tokyo Bus Guide - Annai Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66211 -Name = King Kong, Peter Jackson's - The Official Game of the Movie +Serial = SLPM-65033 +Name = Kikou Heiden - J-Pheonix Region = NTSC-J --------------------------------------------- -Serial = SLPM-66212 -Name = Sega Rally 2006 +Serial = SLPM-65034 +Name = Sangokushi North Winds Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66213 -Name = BioHazard 4 +Serial = SLPM-65038 +Name = Devil May Cry Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66214 -Name = White Clarity - And, the Tears Became You [First Print Limited Edition] +Serial = SLPM-65039 +Name = Densha de Go! Shinkansen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66215 -Name = White Clarity - And, the Tears Became You +Serial = SLPM-65040 +Name = Fear, The [Disc1of4] Region = NTSC-J +MemCardFilter = SLPM-65040/SLPM-65041/SLPM-65042/SLPM-65043 --------------------------------------------- -Serial = SLPM-66217 -Name = Jikkyou Powerful Pro Yakyuu 12 Ketteiban +Serial = SLPM-65041 +Name = Fear, The [Disc2of4] Region = NTSC-J +MemCardFilter = SLPM-65040/SLPM-65041/SLPM-65042/SLPM-65043 --------------------------------------------- -Serial = SLPM-66218 -Name = Eyeshield 21 Amefoot Yarouze! Ya-!Ha-! +Serial = SLPM-65042 +Name = Fear, The [Disc3of4] Region = NTSC-J +Compat = 5 +MemCardFilter = SLPM-65040/SLPM-65041/SLPM-65042/SLPM-65043 --------------------------------------------- -Serial = SLPM-66219 -Name = Tennis no Oji-Sama - Gakuensai no Oji-Sama +Serial = SLPM-65043 +Name = Fear, The [Disc4of4] Region = NTSC-J +MemCardFilter = SLPM-65040/SLPM-65041/SLPM-65042/SLPM-65043 --------------------------------------------- -Serial = SLPM-66220 -Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc1of3] +Serial = SLPM-65044 +Name = Aizouban Angelique Trois [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66221 -Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc2of3] +Serial = SLPM-65047 +Name = Capcom vs. SNK 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66222 -Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc3of3] +Serial = SLPM-65049 +Name = Beatmania IIDX - 5th Style - New Songs Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-66223 -Name = Metal Gear Solid 3 - Subsistence [Disc1of2] +Serial = SLPM-65050 +Name = Yu-Gi-Oh! Shin Duel Monsters 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66224 -Name = Metal Gear Solid 3 - Subsistence [Disc2of2] +Serial = SLPM-65051 +Name = Silent Hill 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66225 -Name = Da Capo Four Seasons [Deluxe Pack] +Serial = SLPM-65052 +Name = Guitar Freaks 4th Mix & Drummania 3rd Mix Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66226 -Name = Da Capo Four Seasons +Serial = SLPM-65053 +Name = Shin Sangoku Musou 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66227 -Name = GI Jockey 4 + Winning Post 7 [Twin Pack] [GI Jockey 4 Disc] +Serial = SLPM-65054 +Name = Princess Abarenbou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66228 -Name = GI Jockey 4 + Winning Post 7 [Twin Pack] [Winning Post 7 Disc] +Serial = SLPM-65056 +Name = Orega Kantoku da Vol.2 - Getitou Pennent Race Region = NTSC-J --------------------------------------------- -Serial = SLPM-66229 -Name = GI Jockey 4 +Serial = SLPM-65057 +Name = 7 Blades Region = NTSC-J --------------------------------------------- -Serial = SLPM-66231 -Name = Karutagura - Tamashii no Kunou +Serial = SLPM-65059 +Name = BioHazard Gun Survivor 2 - CODE - Veronica [with Guncon] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66232 -Name = Need for Speed - Most Wanted +Serial = SLPM-65060 +Name = BioHazard Gun Survivor 2 - CODE - Veronica Region = NTSC-J --------------------------------------------- -Serial = SLPM-66233 -Name = Kingdom Hearts II +Serial = SLPM-65061 +Name = Adventure of Tokyo Disney Sea Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66234 -Name = Wizardry X - Zensen no Gakufu [Wonder Price] +Serial = SLPM-65065 +Name = Sorcerous Stabber Orphen [Kadokawa The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66235 -Name = Psychic Force Complete +Serial = SLPM-65066 +Name = Bouken Jidai Katsugeki Goemon Region = NTSC-J --------------------------------------------- -Serial = SLPM-66237 -Name = Otometeki Koi Kakumei Rabu Rebo!! [Love Revo Box] +Serial = SLPM-65070 +Name = Shadow of Memories Region = NTSC-J --------------------------------------------- -Serial = SLPM-66238 -Name = Otometeki Koi Kakumei Rabu Rebo!! +Serial = SLPM-65071 +Name = Drift Champ Region = NTSC-J --------------------------------------------- -Serial = SLPM-66239 -Name = Wrestle Angels - Survivor +Serial = SLPM-65072 +Name = ESPN Winter X-Games Snowboarding 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66240 -Name = Jissen Pachi-Slot Hisshouhou! Aladdin 2 Evolution +Serial = SLPM-65073 +Name = Genso Suikoden III Region = NTSC-J +// This looks like a mess because it includes all serials for Suikoden 3, Suikoden 2, Suikogaiden 1, and Suikogaiden 2. A lot of these probably aren't actually required but it's not really hurting anything to have them here. +MemCardFilter = SLPM-65073/SLPM-65074/SLPM-65305/SLPM-65694/SLPM-86168/SLPM-86389/SLPM-87100/SLPM-86637/SLPM-86883/SLPM-87261/SLPM-86663/SLPM-86953/SLPM-87262 --------------------------------------------- -Serial = SLPM-66241 -Name = Jissen Pachinko Hisshouhou! CR Hokuto no Ken +Serial = SLPM-65074 +Name = Genso Suikoden III Region = NTSC-J +MemCardFilter = SLPM-65073/SLPM-65074/SLPM-65305/SLPM-65694/SLPM-86168/SLPM-86389/SLPM-87100/SLPM-86637/SLPM-86883/SLPM-87261/SLPM-86663/SLPM-86953/SLPM-87262 --------------------------------------------- -Serial = SLPM-66242 -Name = Dance Dance Revolution - Strike +Serial = SLPM-65075 +Name = K-1 World Grand Prix 2001 Region = NTSC-J -Compat = 2 --------------------------------------------- -Serial = SLPM-66243 -Name = Galaxy Angel II +Serial = SLPM-65076 +Name = Gundam - Federation vs. Zeon DX Region = NTSC-J --------------------------------------------- -Serial = SLPM-66244 -Name = Derby Tsuku 5 - Derby Uma o Tsukurou! +Serial = SLPM-65077 +Name = Metal Gear Solid 2 - Sons of Liberty [Premium Package] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66245 -Name = Jewels Ocean - Star of Sierra Leone +Serial = SLPM-65078 +Name = Metal Gear Solid 2 - Sons of Liberty Region = NTSC-J --------------------------------------------- -Serial = SLPM-66246 -Name = Shin Megami Tensei - Devil Summoner - Kuzunoha Raidou +Serial = SLPM-65080 +Name = Tokimeki Memorial 3 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66247 -Name = Meine Liebe II - Hokori to Seigi to Ai -Region = NTSC-J ---------------------------------------------- -Serial = SLPM-66248 -Name = Mr. Incredible - Kyouteki Underminer Toujou +Serial = SLPM-65082 +Name = Grandia Extreme [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66249 -Name = Growlanser V - Generations [Limited Edition] +Serial = SLPM-65083 +Name = Houshin Engi 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66250 -Name = Choro Q - HG 4 [Takara Best] +Serial = SLPM-65085 +Name = Alone in the Dark Region = NTSC-J --------------------------------------------- -Serial = SLPM-66251 -Name = EX Jinsei Game II [Takara Best] +Serial = SLPM-65086 +Name = Ayumi Hamasaki Dome Tour 2001 - A Visual Mix [Disc1of2] Region = NTSC-J +Compat = 5 +MemCardFilter = SLPS-25071/SLPS-25072/SLPM-65086/SLPM-65087 --------------------------------------------- -Serial = SLPM-66253 -Name = Finalist [Limited First Edition] +Serial = SLPM-65087 +Name = Ayumi Hamasaki Dome Tour 2001 - A Visual Mix [Disc2of2] Region = NTSC-J +Compat = 5 +MemCardFilter = SLPS-25071/SLPS-25072/SLPM-65086/SLPM-65087 --------------------------------------------- -Serial = SLPM-66254 -Name = Finalist +Serial = SLPM-65089 +Name = Grandia Extreme Region = NTSC-J --------------------------------------------- -Serial = SLPM-66255 -Name = World Soccer Winning Eleven 9 [Bonus Pack] +Serial = SLPM-65090 +Name = Spy Hunter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66257 -Name = Enthusia - Professional Racing +Serial = SLPM-65091 +Name = Harukanaru Toki no Naka de 2 [Limited Edition] Region = NTSC-J -eeClampMode = 3 --------------------------------------------- -Serial = SLPM-66258 -Name = Magic Teacher Negima - Honor Version [Konami The Best] +Serial = SLPM-65092 +Name = Harukanaru Toki no Naka de 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66259 -Name = Mahou Sensei Negima! Silver Medal [Konami The Best] +Serial = SLPM-65093 +Name = Sangokushi Senki Region = NTSC-J --------------------------------------------- -Serial = SLPM-66260 -Name = Remote Control Dandy SF [Konami the Best] +Serial = SLPM-65094 +Name = Keyboardmania 2nd & 3rd Mix Region = NTSC-J --------------------------------------------- -Serial = SLPM-66261 -Name = Oz [Konami The Best] +Serial = SLPM-65095 +Name = Space Channel 5 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66262 -Name = Tom Clancy's Rainbow Six 3 [Ubisoft The Best] +Serial = SLPM-65096 +Name = Space Channel 5 - Part 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66263 -Name = Full Spectrum Warrior +Serial = SLPM-65097 +Name = Galacta Meisaku Gekijou - Rakugaki Oukouku Region = NTSC-J -EETimingHack = 1 //flickery textures +Compat = 5 --------------------------------------------- -Serial = SLPM-66264 -Name = Canvas 2 - Niji-iro no Sketch [Deluxe Pack] +Serial = SLPM-65098 +Name = Silent Hill 2 - Saigo no Uta Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66265 -Name = Canvas 2 - Niji-iro no Sketch +Serial = SLPM-65100 +Name = Onimusha 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66266 -Name = Kurogane no Houkou 2 - Warship Commander [Koei The Best] +Serial = SLPM-65101 +Name = Onimusha 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66267 -Name = Taiko Risshiden V +Serial = SLPM-65105 +Name = Shin Combat Choro Q Region = NTSC-J --------------------------------------------- -Serial = SLPM-66268 -Name = Smackdown! vs. Raw 2006 - Exciting Pro Wrestling 7 +Serial = SLPM-65107 +Name = Simple 2000 Series Ultimate Vol.02 - Edit Racing Region = NTSC-J --------------------------------------------- -Serial = SLPM-66269 -Name = Blazing Souls [Limited Edition] +Serial = SLPM-65108 +Name = Jet de Go! 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66270 -Name = Blazing Souls +Serial = SLPM-65109 +Name = J-League Sakatsuku 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66271 -Name = Dirge of Cerberus - Final Fantasy VII +Serial = SLPM-65110 +Name = Roommania #203 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66272 -Name = I-O +Serial = SLPM-65111 +Name = NFL 2K2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66273 -Name = Memories Off After Rain Vol.1 - Ensou [Superlite 2000] +Serial = SLPM-65113 +Name = Splashdown Region = NTSC-J --------------------------------------------- -Serial = SLPM-66274 -Name = Ninkyouden Toseinin Ichidaiki +Serial = SLPM-65115 +Name = Final Fantasy X International Region = NTSC-J +IPUWaitHack = 1 --------------------------------------------- -Serial = SLPM-66275 -Name = Shin Onimusha - Dawn of Dreams [Disc1of2] +Serial = SLPM-65116 +Name = Lilie no Atelier Plus: Salburg no Renkinjutsushi 3 Region = NTSC-J -Compat = 2 -[patches = BD17248E] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 -[/patches] --------------------------------------------- -Serial = SLPM-66276 -Name = Shin Onimusha - Dawn of Dreams [Disc2of2] +Serial = SLPM-65117 +Name = Kikou Heiden J-Pheonix [Takara The Best] Region = NTSC-J -Compat = 2 -[patches = BD17248E] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 -[/patches] --------------------------------------------- -Serial = SLPM-66277 -Name = Juiced +Serial = SLPM-65118 +Name = Tokimeki Memorial 2 - Video Clips Region = NTSC-J --------------------------------------------- -Serial = SLPM-66278 -Name = Shin Gouketuji Ichizoku - Bonnou Kaihou +Serial = SLPM-65119 +Name = Shine - Spinning World Region = NTSC-J --------------------------------------------- -Serial = SLPM-66279 -Name = Nobunaga no Yabou - Kakushin +Serial = SLPM-65120 +Name = Shine - Spinning World Region = NTSC-J --------------------------------------------- -Serial = SLPM-66280 -Name = Monster Hunter 2 +Serial = SLPM-65121 +Name = Switch Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66281 -Name = Sonic Riders +Serial = SLPM-65122 +Name = J-Pheonix Burst Tactics [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66282 -Name = Memories Off After Rain Vol.2 - Souen [Superlite 2000] +Serial = SLPM-65123 +Name = J-Pheonix Burst Tactics Region = NTSC-J --------------------------------------------- -Serial = SLPM-66283 -Name = SuperLite 2000 Series - Memories Off After Rain Vol.3 - Graduation +Serial = SLPM-65124 +Name = Auto Modellista Region = NTSC-J --------------------------------------------- -Serial = SLPM-66284 -Name = Dessert Love - Sweet Plus +Serial = SLPM-65125 +Name = NBA 2K3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66285 -Name = Princess Concerto +Serial = SLPM-65126 +Name = Tokimeki Mamorial - Girl's Side Region = NTSC-J --------------------------------------------- -Serial = SLPM-66286 -Name = Genso Suikoden V +Serial = SLPM-65130 +Name = Dramatic Soccer Game - Becoming a National Team Member Region = NTSC-J --------------------------------------------- -Serial = SLPM-66287 -Name = Sengoku Basara +Serial = SLPM-65131 +Name = Judie no Atelier: Gramnad no Renkinjutsushi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66288 -Name = Full House Kiss 2 +Serial = SLPM-65132 +Name = Warriors of Might and Magic Region = NTSC-J --------------------------------------------- -Serial = SLPM-66289 -Name = Black Cat +Serial = SLPM-65133 +Name = Konohana 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66290 -Name = Galaxy Angel [The Best] +Serial = SLPM-65134 +Name = Red Card Region = NTSC-J --------------------------------------------- -Serial = SLPM-66291 -Name = Tenkabito +Serial = SLPM-65135 +Name = NBA 2K2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66292 -Name = Jissen Pachi-Slot Hisshouhou! Ultraman Club ST +Serial = SLPM-65137 +Name = All-Star Baseball 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66293 -Name = Gakuen Alice - KiraKira Memory Kiss +Serial = SLPM-65139 +Name = Gun Survivor 3 - Dino Crisis Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66294 -Name = Sotsugyou 2nd Generation +Serial = SLPM-65140 +Name = Jojo's Bizarre Adventure 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66295 -Name = Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou [Limited Edition] +Serial = SLPM-65141 +Name = Tsuzuse Gareijiri Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66296 -Name = Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou +Serial = SLPM-65142 +Name = Anime Super Remix, The - Kyojin no Hoshi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66297 -Name = Separate Hearts [Limited Edition] +Serial = SLPM-65143 +Name = Anime Super Remix, The - Ashita no Joe 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66298 -Name = Separate Hearts +Serial = SLPM-65148 +Name = Densha de Go! Ryojouhen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66299 -Name = Reishiki Kanjou Sentouki 2 +Serial = SLPM-65150 +Name = Aero Dancing 4 - New Generation Region = NTSC-J --------------------------------------------- -Serial = SLPM-66300 -Name = Wizardry Xth - Mugen no Gakuto +Serial = SLPM-65152 +Name = GunGrave [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66301 -Name = Ibara +Serial = SLPM-65153 +Name = GunGrave Region = NTSC-J --------------------------------------------- -Serial = SLPM-66302 -Name = Clannad +Serial = SLPM-65154 +Name = Rumbling Hearts Region = NTSC-J --------------------------------------------- -Serial = SLPM-66307 -Name = Sengoku Musou 2 +Serial = SLPM-65155 +Name = Rumbling Hearts Region = NTSC-J --------------------------------------------- -Serial = SLPM-66308 -Name = Harukanaru Toki no Naka Premium Boxset +Serial = SLPM-65156 +Name = Beatmania IIDX - 6th Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-66313 -Name = Guitar Freaks V & DrumMania V +Serial = SLPM-65158 +Name = Riding Spirits Region = NTSC-J --------------------------------------------- -Serial = SLPM-66314 -Name = Pop'n Music 12 - Iroha +Serial = SLPM-65160 +Name = Gitaroo Man [The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66315 -Name = Shinseiki Evangelion - Koutetsu no Girlfriend 2nd [Broccoli Best Quality] +Serial = SLPM-65161 +Name = Aero Dancing 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66316 -Name = Pro Soccer Club o Tsukurou! Europe Championship +Serial = SLPM-65164 +Name = Project Minerva [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66317 -Name = Capcom Classics Collection Vol.1 +Serial = SLPM-65165 +Name = Project Minerva Region = NTSC-J --------------------------------------------- -Serial = SLPM-66318 -Name = Haru no Ashioto - Step of Spring +Serial = SLPM-65166 +Name = Ultimate Fighting Championship 2 - Tap-Out Region = NTSC-J --------------------------------------------- -Serial = SLPM-66319 -Name = New Choro Q [Atlus Best Collection] +Serial = SLPM-65167 +Name = Pride Region = NTSC-J --------------------------------------------- -Serial = SLPM-66320 -Name = Final Fantasy XII +Serial = SLPM-65169 +Name = Combat Queen Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66321 -Name = Kurogane no Houkou - Warship Gunner 2 +Serial = SLPM-65170 +Name = Shin Sangoku Musou 2 - Mushouden Region = NTSC-J --------------------------------------------- -Serial = SLPM-66322 -Name = James Bond 007 - From Russia With Love +Serial = SLPM-65173 +Name = Innocent Black Region = NTSC-J --------------------------------------------- -Serial = SLPM-66323 -Name = Princess Software Collection, The +Serial = SLPM-65174 +Name = Britney's Dance Beat Region = NTSC-J --------------------------------------------- -Serial = SLPM-66324 -Name = World Football Climax +Serial = SLPM-65176 +Name = King of Colosseum - Red Region = NTSC-J --------------------------------------------- -Serial = SLPM-66325 -Name = Castlevania - Lament of Innocence [Konami Palace Selection] +Serial = SLPM-65177 +Name = Energy Airforce Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66327 -Name = Wallace and Gromit - The Curse of the Were-Rabbit +Serial = SLPM-65178 +Name = Ferrari F355 Challenge Region = NTSC-J --------------------------------------------- -Serial = SLPM-66328 -Name = Call of Duty 2 - Big Red One +Serial = SLPM-65179 +Name = Culdcept 2 - Expansion Region = NTSC-J --------------------------------------------- -Serial = SLPM-66329 -Name = Mahou Sensei Negima! Kagai Jugyou +Serial = SLPM-65180 +Name = Baseball 2003, The Region = NTSC-J -Compat = 5 // GS Software rendering only. VU XGkick Hack fixes some rendering problem. --------------------------------------------- -Serial = SLPM-66330 -Name = Tokimeki Memorial - Girl's Side - 2nd Kiss +Serial = SLPM-65183 +Name = Auto Modellista Region = NTSC-J --------------------------------------------- -Serial = SLPM-66331 -Name = Kouenji Onago Soccer [1st Stage Limited Edition] +Serial = SLPM-65184 +Name = Document of Metal Gear Solid 2, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-66332 -Name = Kouenji Onago Soccer +Serial = SLPM-65185 +Name = Ferrari F355 Challenge Region = NTSC-J --------------------------------------------- -Serial = SLPM-66333 -Name = Guilty Gear XX Slash +Serial = SLPM-65186 +Name = Thread Colors [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66334 -Name = WRC - World Rally Championship 4 [Spike the Best] +Serial = SLPM-65187 +Name = Thread Colors Region = NTSC-J --------------------------------------------- -Serial = SLPM-66336 -Name = Shinseiki Evangelion - Koutetsu no Girlfriend [Special Edition] +Serial = SLPM-65191 +Name = V-Rally 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66337 -Name = EVE New Generation [Deluxe Pack] +Serial = SLPM-65192 +Name = NBA Live 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66338 -Name = EVE New Generation +Serial = SLPM-65193 +Name = FIFA Soccer 2003 Region = NTSC-J +vuClampMode = 2 //missing geometry with microVU --------------------------------------------- -Serial = SLPM-66339 -Name = Neo Angelique [Premium Box] +Serial = SLPM-65196 +Name = Breath of Fire V: Dragon Quarter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66340 -Name = Neo Angelique +Serial = SLPM-65197 +Name = Nobunaga's Ambition Online Region = NTSC-J --------------------------------------------- -Serial = SLPM-66341 -Name = Jan Sangoku Musou +Serial = SLPM-65199 +Name = J-Pheonix - Cobalt Shoutaihen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66342 -Name = Winning Post 7 Maximum 2006 +Serial = SLPM-65200 +Name = Shinobi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66343 -Name = Shin Sangoku Musou 4 - Empires +Serial = SLPM-65202 +Name = K-1 World Grand Prix 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66348 -Name = Harukanaru Jikuu no Kade 3 - Unmei no Meikyuu +Serial = SLPM-65203 +Name = Phantom of Inferno [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66349 -Name = Spectral Force Chronicle +Serial = SLPM-65204 +Name = Phantom of Inferno Region = NTSC-J --------------------------------------------- -Serial = SLPM-66350 -Name = Spectral vs. Generation +Serial = SLPM-65205 +Name = Spider-Man Region = NTSC-J --------------------------------------------- -Serial = SLPM-66351 -Name = Soshite Kono Uchuu ni Kirameku Kimi no Shi +Serial = SLPM-65206 +Name = King of Colosseum - Green Region = NTSC-J --------------------------------------------- -Serial = SLPM-66352 -Name = Memories Off - Sorekara Again [Limited Edition] +Serial = SLPM-65207 +Name = Chou Battle Houshin Region = NTSC-J --------------------------------------------- -Serial = SLPM-66353 -Name = Memories Off - Sorekara Again +Serial = SLPM-65208 +Name = Pop'n Music 7 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66354 -Name = Black +Serial = SLPM-65209 +Name = Star Ocean 3 [Limited Edition] Region = NTSC-J Compat = 5 -vuClampMode = 0 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66356 -Name = Baldr Force EXE [Alchemist Best] +Serial = SLPM-65210 +Name = Chou Battle Houshin - Bundle #1 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66358 -Name = Shinobido Takumi +Serial = SLPM-65213 +Name = Evolution Skateboarding Region = NTSC-J --------------------------------------------- -Serial = SLPM-66359 -Name = Mutsuzaki Hoshi Kikari +Serial = SLPM-65215 +Name = Chou Battle Houshin - Bundle #2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66360 -Name = Ys V - Lost Kefin - Kingdom of Sand +Serial = SLPM-65218 +Name = Bomberman Jetters Region = NTSC-J --------------------------------------------- -Serial = SLPM-66361 -Name = Konohana 4 - Yami wo Harau Inori [Superlite 2000] +Serial = SLPM-65219 +Name = Cheerful Party Region = NTSC-J --------------------------------------------- -Serial = SLPM-66363 -Name = Dragon Quest - Shounen Yangus no Fushigi na Daibouken +Serial = SLPM-65220 +Name = Cheerful Party Region = NTSC-J --------------------------------------------- -Serial = SLPM-66364 -Name = Pro Yakyuu Spirits 3 +Serial = SLPM-65221 +Name = Clock Tower 3 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66371 -Name = Train Simulator & Densha de Go! Tokyo Kyuukouhen [Ongakukan Pocket Books] +Serial = SLPM-65222 +Name = Yu-Gi-Oh! 2 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66372 -Name = Digital Devil Saga: Avatar Tuner [Atlus Best Collection] +Serial = SLPM-65223 +Name = Triange Again Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66373 -Name = Digital Devil Saga: Avatar Tuner 2 [Atlus Best Collection] +Serial = SLPM-65224 +Name = NFL 2K3 Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66374 -Name = World Soccer Winning Eleven 10 +Serial = SLPM-65226 +Name = Savage Skies Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66375 -Name = Ookami +Serial = SLPM-65227 +Name = J-League Pro Soccer Club - Tsukuku! 3 +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-65228 +Name = Taisho Mononoke Ibunroku Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66376 -Name = KimiStar - Kimi to Study [BGM Collection Package] +Serial = SLPM-65229 +Name = Totsugeki! Army Men: Shijou Saishou no Sakusen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66377 -Name = KimiStar - Kimi to Study +Serial = SLPM-65230 +Name = Tokimeki Memorial 3 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66378 -Name = Garfield - Saving Arleene +Serial = SLPM-65231 +Name = Evolution Snowboarding Region = NTSC-J --------------------------------------------- -Serial = SLPM-66379 -Name = Kishin Houkou Demon Bane [Kadokawa The Best] +Serial = SLPM-65232 +Name = Devil May Cry 2 [Dante Disc] Region = NTSC-J +Compat = 5 +[patches] + comment=Note that this disc has the same CRC as SLUS-20484, the NTSC-U disc. +[/patches] --------------------------------------------- -Serial = SLPM-66380 -Name = Mitsu x Mitsu Drops - Love x Love Honey Life [Limited Edition] +Serial = SLPM-65233 +Name = Devil May Cry 2 [Lucia Disc] Region = NTSC-J +Compat = 5 +MemCardFilter = SLPM-65232 --------------------------------------------- -Serial = SLPM-66381 -Name = Mitsu x Mitsu Drops - Love x Love Honey Life +Serial = SLPM-65234 +Name = Gregory Horror Show - Soul Collector Region = NTSC-J --------------------------------------------- -Serial = SLPM-66382 -Name = Tenshou Gakuen Kensousoku [Tokudame Price] +Serial = SLPM-65235 +Name = New Roommania - Porori Seishun Region = NTSC-J --------------------------------------------- -Serial = SLPM-66383 -Name = Natsuyume Yobanashi [2800 Collection] +Serial = SLPM-65236 +Name = Anubis: Zone of the Enders Region = NTSC-J --------------------------------------------- -Serial = SLPM-66384 -Name = Iris [2800 Collection] +Serial = SLPM-65237 +Name = Z.O.E.: Zone of the Enders [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66385 -Name = Omoi no Kakera - Close to [2800 Collection] +Serial = SLPM-65238 +Name = Angelic Concert [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66386 -Name = FIFA World Cup - Germany 2006 +Serial = SLPM-65239 +Name = Angelic Concert Region = NTSC-J --------------------------------------------- -Serial = SLPM-66387 -Name = Shin Bakusou Dekotora Densetsu [Spike the Best] +Serial = SLPM-65241 +Name = Shin Megami Tensei III: Nocturne [Limited Edition] Region = NTSC-J +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-66388 -Name = Fire Pro Wrestling Returns [Spike The Best] +Serial = SLPM-65242 +Name = Shin Megami Tensei III: Nocturne Region = NTSC-J +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-66390 -Name = Shoubi no Ki ni Shoubi no Hanasaku - Das Versprechen +Serial = SLPM-65243 +Name = Densha de Go! Professional 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66391 -Name = Prince of Persia - The Two Thrones +Serial = SLPM-65244 +Name = Tom Clancy's Ghost Recon Region = NTSC-J --------------------------------------------- -Serial = SLPM-66393 -Name = Final Fantasy XI - Aht Urghan no Hihou [All-in-One Pack] +Serial = SLPM-65245 +Name = BioHazard Gun Survivor 4 - Heroes Never Die Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66394 -Name = Final Fantasy XI - Aht Urghan no Hihou +Serial = SLPM-65246 +Name = Kaidou Battle Region = NTSC-J --------------------------------------------- -Serial = SLPM-66395 -Name = Honoo no Takkyubin +Serial = SLPM-65247 +Name = Sangokushi Senki 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66396 -Name = Tensei Hakken Fuumoroku +Serial = SLPM-65248 +Name = Shin Sangoku Musou 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66398 -Name = Parufu - Chocolat Second Brew +Serial = SLPM-65249 +Name = Chaos Legion Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66399 -Name = Samurai 7 [Limited Edition] +Serial = SLPM-65254 +Name = Galaxy Angel Region = NTSC-J --------------------------------------------- -Serial = SLPM-66400 -Name = Samurai 7 +Serial = SLPM-65255 +Name = Chobits Region = NTSC-J --------------------------------------------- -Serial = SLPM-66401 -Name = Wrestle Kingdom +Serial = SLPM-65256 +Name = First Kiss Story 1&2 [Limited Edition] +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-65257 +Name = Silent Hill 3 Region = NTSC-J Compat = 5 +MemCardFilter = SLPM-65257/SLPM-65622/SLPM-66018/SLPM-65051/SLPM-65098/SLPM-65341/SLPM-65631 --------------------------------------------- -Serial = SLPM-66402 -Name = Taito Memories Vol.1 [Taito The Best] +Serial = SLPM-65260 +Name = Air Land Force Region = NTSC-J --------------------------------------------- -Serial = SLPM-66405 -Name = Rajirugi - Precious +Serial = SLPM-65262 +Name = Boboboubo Boubobo Hajike Matsuri Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66406 -Name = Sakura Hana +Serial = SLPM-65263 +Name = Shin Sangoku Musou 2 & Shin Sangoku Musou 2 Mushouden [Koei Mega Pack] [Disc1of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66407 -Name = Mighty Heart +Serial = SLPM-65264 +Name = Shin Sangoku Musou 2 & Shin Sangoku Musou 2 Mushouden [Koei Mega Pack] [Disc2of2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66408 -Name = Tsuyo Kiss - Mighty Heart +Serial = SLPM-65266 +Name = Drag-on Dragoon Region = NTSC-J --------------------------------------------- -Serial = SLPM-66409 -Name = Street Fighter Zero - Fighters Generation +Serial = SLPM-65267 +Name = Kurogane no Houkou 2 - Warship Gunner Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66410 -Name = Brothers In Arms: Meiyo no Daishou +Serial = SLPM-65268 +Name = Initial D - Special Stage Region = NTSC-J --------------------------------------------- -Serial = SLPM-66412 -Name = Pizzicato Polka - Suisei Genya [2800 Collection] +Serial = SLPM-65269 +Name = NBA 2K3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66413 -Name = Cross+Channel - To All People [2800 Collection] +Serial = SLPM-65270 +Name = Virtua Fighter 4 - Evolution Region = NTSC-J --------------------------------------------- -Serial = SLPM-66415 -Name = Mystereet [First Print - Limited Edition] +Serial = SLPM-65271 +Name = Over the Monochrome Rainbow featuring Shogo Hamada Region = NTSC-J --------------------------------------------- -Serial = SLPM-66416 -Name = Mystereet +Serial = SLPM-65273 +Name = Triange Again 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66417 -Name = Jikkyou Powerful Pro Major League +Serial = SLPM-65274 +Name = Saishuu Heiki Kanojo [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66418 -Name = Growlanser V - Generations +Serial = SLPM-65275 +Name = Saishuu Heiki Kanojo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66419 -Name = Valkyrie Profile 2 - Silmeria +Serial = SLPM-65276 +Name = Grand Prix Challenge Region = NTSC-J -Compat = 5 -VuAddSubHack = 1 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLPM-66420 -Name = Front Mission 4 [Ultimate Hits] +Serial = SLPM-65277 +Name = DDR Max 2 - Dance Dance Revolution - 7th Mix Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66421 -Name = Front Mission 5 - Scars of the War [Ultimate Hits] +Serial = SLPM-65278 +Name = Generation of Chaos 3 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66422 -Name = Romancing Saga - Minstrel Song [Ultimate Hits] +Serial = SLPM-65279 +Name = Generation of Chaos 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66424 -Name = La Corda D'oro [Koei the Best] +Serial = SLPM-65280 +Name = Green Green - Sound of the Ring Dynamic [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66426 -Name = Beatmania IIDX 11 - Red +Serial = SLPM-65281 +Name = Green Green - Sound of the Ring Dynamic Region = NTSC-J --------------------------------------------- -Serial = SLPM-66427 -Name = Full Spectrum Warrior - Ten Hammers +Serial = SLPM-65282 +Name = Green Green - Sound of the Ring Romantic [Limited Edition] Region = NTSC-J -EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPM-66429 -Name = Special Forces - Fire for Effect +Serial = SLPM-65283 +Name = Green Green - Sound of the Ring Romantic Region = NTSC-J --------------------------------------------- -Serial = SLPM-66430 -Name = Destroy All Humans! +Serial = SLPM-65284 +Name = World Rallt Championship II Extreme Region = NTSC-J --------------------------------------------- -Serial = SLPM-66431 -Name = WinBack 2 - Project Poseidon +Serial = SLPM-65285 +Name = Love Hina Gorgeous [First Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66432 -Name = Tamashii Kyou [Limited Edition] +Serial = SLPM-65286 +Name = Auto Modellista - US Tuned Region = NTSC-J --------------------------------------------- -Serial = SLPM-66433 -Name = Tamashii Kyou +Serial = SLPM-65287 +Name = Final Fantasy XI - Girade no Genei Region = NTSC-J --------------------------------------------- -Serial = SLPM-66434 -Name = Festa!! Hyper Girls Party [Limited Edition] +Serial = SLPM-65288 +Name = Final Fantasy XI - Girade no Genei [All-in-One Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66435 -Name = Festa!! Hyper Girls Party +Serial = SLPM-65289 +Name = Final Fantasy XI [Entry Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66436 -Name = Iris no Atelier: Grand Fantasm +Serial = SLPM-65290 +Name = Merge Marginal [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66437 -Name = Soul Link Extension +Serial = SLPM-65291 +Name = Merge Marginal Region = NTSC-J --------------------------------------------- -Serial = SLPM-66438 -Name = Melty Blood - Act Cadenza +Serial = SLPM-65294 +Name = Cafe Little Wish - Mahou no Recipe [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66439 -Name = Hokenshitsu e Youkoso [Limited Edition] +Serial = SLPM-65295 +Name = Cafe Little Wish - Mahou no Recipe Region = NTSC-J --------------------------------------------- -Serial = SLPM-66440 -Name = Hokenshitsu e Youkoso +Serial = SLPM-65296 +Name = F Fanatic [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66441 -Name = Oookuki +Serial = SLPM-65297 +Name = F Fanatic Region = NTSC-J --------------------------------------------- -Serial = SLPM-66443 -Name = FIFA Street 2 +Serial = SLPM-65298 +Name = Winning Post 5 - Maximum 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66444 -Name = Spartan - Total Warrior +Serial = SLPM-65299 +Name = Konohana 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66445 -Name = Persona 3 +Serial = SLPM-65300 +Name = All-Star Pro Wrestling 3 Region = NTSC-J Compat = 5 -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-66446 -Name = Beat Down - Fists of Vengeance [CapKore] +Serial = SLPM-65301 +Name = Torakapuu! Dash [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66447 -Name = Sengoku Basara 2 +Serial = SLPM-65302 +Name = Torakapuu! Dash Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66448 -Name = We Are [Limited Edition] +Serial = SLPM-65303 +Name = Virtual On - Marz Region = NTSC-J --------------------------------------------- -Serial = SLPM-66449 -Name = We Are +Serial = SLPM-65305 +Name = Genso Suikoden 3 Region = NTSC-J +MemCardFilter = SLPM-65073/SLPM-65074/SLPM-65305/SLPM-65694/SLPM-86168/SLPM-86389/SLPM-87100/SLPM-86637/SLPM-86883/SLPM-87261/SLPM-86663/SLPM-86953/SLPM-87262 --------------------------------------------- -Serial = SLPM-66450 -Name = Jikkyou Powerful Pro Baseball 13 +Serial = SLPM-65306 +Name = Sakura Yuki Gekka [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66451 -Name = Major League Baseball 2K6 +Serial = SLPM-65307 +Name = Sakura Yuki Gekka Region = NTSC-J --------------------------------------------- -Serial = SLPM-66452 -Name = Kamaitachi no Yoru 3 +Serial = SLPM-65308 +Name = Shutokou Battle 01 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66453 -Name = Hiiro no Kakera [Limited Edition] +Serial = SLPM-65309 +Name = Splashdown [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66454 -Name = Hiiro no Kakera +Serial = SLPM-65310 +Name = The Mark of Kry Region = NTSC-J --------------------------------------------- -Serial = SLPM-66455 -Name = Spectral Force - Radical Elements [IF Collection] +Serial = SLPM-65311 +Name = Violet no Atelier: Gramnad no Renkinjutsushi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66456 -Name = Asobi ni Iku Yo! [Limited Edition] +Serial = SLPM-65313 +Name = First Kiss Story 1&2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66457 -Name = Asobi ni Iku Yo! +Serial = SLPM-65314 +Name = Hanjuku Hero VS 3-D [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66458 -Name = Acheter Fuuraiki +Serial = SLPM-65315 +Name = Hanjuku Hero VS 3-D Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66459 -Name = Zero Pilot - Zero +Serial = SLPM-65316 +Name = Pop'n Music 8 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66460 -Name = Summer ## +Serial = SLPM-65317 +Name = Jikkyou Powerful Pro Baseball 10 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66461 -Name = Tom Clancy's Ghost Recon - Advanced Warfighter +Serial = SLPM-65318 +Name = Shoubushi Tetsuya 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66462 -Name = Disney-Pixer's Cars +Serial = SLPM-65319 +Name = Eve Burst Error Plus [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66463 -Name = Def Jam - Fight for NY [EA Best Hits] +Serial = SLPM-65320 +Name = Eve Burst Error Plus Region = NTSC-J --------------------------------------------- -Serial = SLPM-66464 -Name = MVP Baseball 2005 [EA Best Hits] +Serial = SLPM-65321 +Name = Prince of Tennis - Smash Hit! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66465 -Name = Mercenaries [EA Best Hits] +Serial = SLPM-65322 +Name = Prince of Tennis - Smash Hit! - B-Type Region = NTSC-J --------------------------------------------- -Serial = SLPM-66467 -Name = Midway Arcade Treasures - The Game Center of USA +Serial = SLPM-65323 +Name = Prince of Tennis - Smash Hit! - C-Type Region = NTSC-J --------------------------------------------- -Serial = SLPM-66468 -Name = Area 51 +Serial = SLPM-65324 +Name = Gregory Horror Show - Soul Collector Region = NTSC-J --------------------------------------------- -Serial = SLPM-66469 -Name = Love-Com - Punch de Court [Limited Edition] +Serial = SLPM-65325 +Name = Air Ranger 2 - Rescue Helicopter [Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66470 -Name = Love-Com - Punch de Court +Serial = SLPM-65326 +Name = Choro Q HG 4 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66471 -Name = Hanaki +Serial = SLPM-65327 +Name = Prince of Tennis - Smash Hit! [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66472 -Name = Planetarian - The Reverie of a Little Planet +Serial = SLPM-65328 +Name = Shirachuu Tankenbu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66473 -Name = True Crime - New York City +Serial = SLPM-65329 +Name = Makai Tensei Region = NTSC-J --------------------------------------------- -Serial = SLPM-66474 -Name = Odin Sphere +Serial = SLPM-65330 +Name = Akudaikan 2 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66475 -Name = Pachislot Hokuto no Ken [Limited Edition] +Serial = SLPM-65331 +Name = RockMan X7 Region = NTSC-J +eeClampMode = 3//For camera issues in some scenes. --------------------------------------------- -Serial = SLPM-66476 -Name = Jissen Pachi-Slot Hisshouhou! Salaryman Kintarou +Serial = SLPM-65332 +Name = Mahoromatic Automatic Maiden [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66477 -Name = Kamiwaza +Serial = SLPM-65333 +Name = Mahoromatic Automatic Maiden Region = NTSC-J --------------------------------------------- -Serial = SLPM-66478 -Name = Star Ocean 3 - Till the End of Time [Ultimate Hits] [Disc1of2] +Serial = SLPM-65334 +Name = Shinseiki Evangelion - Ayanami Ikusei Keikaku with Asuka Hokan Keikaku Region = NTSC-J Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66479 -Name = Star Ocean 3 - Till the End of Time [Ultimate Hits] [Disc2of2] +Serial = SLPM-65335 +Name = Gekitou Professional Baseball Region = NTSC-J -Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66480 -Name = Dragon Quest V - Bride of the Sky [Ultimate Hits] +Serial = SLPM-65336 +Name = K-1 World Grand Prix - The Beast Attack! Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66481 -Name = Dragon Quest VIII [Ultimate Hits] +Serial = SLPM-65337 +Name = Gegege no Kitaro - Ibun Youkaitan Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66482 -Name = Tokimeki Memorial - Girl's Side 2nd Kiss +Serial = SLPM-65338 +Name = Junni Kuniki - Guren no Hyou Koujin no Mitsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66483 -Name = Mushihimesama [Taito Best] +Serial = SLPM-65339 +Name = Akudaikan [Global The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66484 -Name = Guitar Freaks & Drummania - Masterpiece Silver +Serial = SLPM-65340 +Name = Shinseiki Evangelion - Ayanami Ikusai Keikaku with Asuka Hokan Keikaku Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66485 -Name = State of Emergency - Revenge +Serial = SLPM-65341 +Name = Silent Hill 2 - Saigo No Uta [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66486 -Name = Tentama - 1st Sunny Side [2800 Collection] +Serial = SLPM-65342 +Name = Kyoufu Shinbun (Heisei) Kaiki! Shinrei File Region = NTSC-J --------------------------------------------- -Serial = SLPM-66487 -Name = Tentama 2 - Wins [2800 Collection] +Serial = SLPM-65343 +Name = Kikou Heidai - J-Pheonix 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66488 -Name = My Merry May With Be [2800 Collection] +Serial = SLPM-65344 +Name = Project Minerva - Professional Region = NTSC-J --------------------------------------------- -Serial = SLPM-66489 -Name = Mabino Style [2800 Collection] +Serial = SLPM-65345 +Name = Simple 2000 Series Ultimate Vol.09 - Runabout 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66491 -Name = Ayaka Shibito +Serial = SLPM-65346 +Name = Winning Post 6 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66492 -Name = Commandos Strike Force +Serial = SLPM-65347 +Name = Bistro Cupid 2 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66493 -Name = Shinten Makai - Generation of Chaos V [IF Collection] +Serial = SLPM-65348 +Name = Bistro Cupid 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66494 -Name = Joshikousei Game's High! [Limited Edition] +Serial = SLPM-65349 +Name = Tokyo Bus Guide [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66495 -Name = Joshikousei Game's High! +Serial = SLPM-65350 +Name = Simple 2000 Series Ultimate Vol.11 - Wonder Bass Region = NTSC-J --------------------------------------------- -Serial = SLPM-66496 -Name = Tom Clancy's Splinter Cell - Chaos Theory +Serial = SLPM-65352 +Name = Simple 2000 Series Ultimate Vol.10 - Love Songs Region = NTSC-J --------------------------------------------- -Serial = SLPM-66497 -Name = Ice Age 2 +Serial = SLPM-65353 +Name = SuperLite 2000 Series Vol. 6 - Konohana 2 - Todokanai Requiem Region = NTSC-J --------------------------------------------- -Serial = SLPM-66498 -Name = TOCA Race Driver 2 - Ultimate Racing Simulator +Serial = SLPM-65356 +Name = Natsuiro Komachi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66499 -Name = Kamisama Kazoku - Ouen Ganbou +Serial = SLPM-65357 +Name = BioHazard - Code Veronica - Perfect Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-66500 -Name = Like Life an Hour [Best Version] +Serial = SLPM-65358 +Name = Dance Dance Revolution Extreme Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66501 -Name = Onimusha [Mega Hits] +Serial = SLPM-65359 +Name = Judie no Atelier: Gramnad no Renkinjutsushi [Gust Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66502 -Name = Devil May Cry [Mega Hits] +Serial = SLPM-65361 +Name = Anubis: Zone of the Enders Special Edition [Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66503 -Name = Metal Gear Solid 2 [Mega Hits] +Serial = SLPM-65362 +Name = NHK Tensai Bit-Kun - Guramon Battle Region = NTSC-J --------------------------------------------- -Serial = SLPM-66504 -Name = Onimusha 2 [Mega Hits] +Serial = SLPM-65364 +Name = School Heaven - Boy's Love Scramble! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66505 -Name = Shin Sangoku Musou 2 [Mega Hits] +Serial = SLPM-65365 +Name = Tokimeki Memorial - Girl's Side [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66506 -Name = Gundam - Federation vs. Zeon DX [Mega Hits] +Serial = SLPM-65366 +Name = Dear Boys - Fast Break! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66507 -Name = Otome no Jijou [Limited Edition] +Serial = SLPM-65367 +Name = Makai Eiyuuki Maximo - Machine Monster no Yabou Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66508 -Name = Otome no Jijou +Serial = SLPM-65368 +Name = D.N. Angel - TV Animation Series Region = NTSC-J --------------------------------------------- -Serial = SLPM-66509 -Name = Rugby '06 +Serial = SLPM-65370 +Name = Prince of Tennis - Sweat & Tears 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66510 -Name = NHL '06 +Serial = SLPM-65372 +Name = Soccer Kantoku Saihai Simulation - Formation Final Region = NTSC-J --------------------------------------------- -Serial = SLPM-66511 -Name = Kyuuryuu Youma Gakuenki Re-charge +Serial = SLPM-65373 +Name = Glass Rose Region = NTSC-J -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLPM-66512 -Name = Fate-stay Night - Realta Nua [Extra Edition] +Serial = SLPM-65374 +Name = Energy Airforce - Aim Strike! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66513 -Name = Fate-stay Night - Realta Nua +Serial = SLPM-65375 +Name = Shin Sangoku Musou 3 - Mushouden [Premium Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66514 -Name = Medal of Honor - European Assault [EA Best Hits] +Serial = SLPM-65377 +Name = Shin Sangoku Musou 3 - Mushouden Region = NTSC-J --------------------------------------------- -Serial = SLPM-66515 -Name = Star Wars - Episode III - Sith no Fukushuu [EA Best Hits] +Serial = SLPM-65378 +Name = Busin 0: Wizardry Alternative Neo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66516 -Name = Sims, The & The Urbz - Sims in the City [EA Best Hits] +Serial = SLPM-65379 +Name = Baseball 2003 - Akikigou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66518 -Name = Teikoku Sensenki [Best Version] +Serial = SLPM-65380 +Name = Samurai Michi 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66519 -Name = Gakuen Heaven - Boy's Love Scramble! [Best Version] +Serial = SLPM-65381 +Name = Kimagure Strawberry Cafe Region = NTSC-J --------------------------------------------- -Serial = SLPM-66520 -Name = BioHazard - Code Veronica [Premium Box] +Serial = SLPM-65382 +Name = Grand Theft Auto III Region = NTSC-J --------------------------------------------- -Serial = SLPM-66521 -Name = Taito Memories Vol.2 [Taito The Best] +Serial = SLPM-65383 +Name = Growlanser IV - Wayfarer of the Time [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66522 -Name = Shin Sangoku Musou 3 [KOEI Selection] +Serial = SLPM-65384 +Name = Dream Mix TV World Fighters Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66523 -Name = Sangokushi IX [with Power-Up Kit] +Serial = SLPM-65386 +Name = Train Simulator - Midosuji Line Region = NTSC-J --------------------------------------------- -Serial = SLPM-66524 -Name = Angelique Etoile [Koei Best] +Serial = SLPM-65387 +Name = Aero Dancing 4 - New Generation [Sega The Best 2800] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66525 -Name = Zill O'll Infinite [Koei The Best] +Serial = SLPM-65388 +Name = Lost Passage [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66526 -Name = Gaika no Gouhou - Air Land Force [KOEI Selection] +Serial = SLPM-65389 +Name = Lost Passage Region = NTSC-J --------------------------------------------- -Serial = SLPM-66527 -Name = Sangokushi Senki 2 [KOEI Selection] +Serial = SLPM-65390 +Name = Shinki Genso - Spectral Souls [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66528 -Name = Nobunaga no Yabou - Tenka Sousei [with Power Up Kit] [KOEI the Best] +Serial = SLPM-65391 +Name = Shinki Genso - Spectral Souls Region = NTSC-J --------------------------------------------- -Serial = SLPM-66529 -Name = Boukoku no Aegis 2035 - Warship Gunner [KOEI the Best] +Serial = SLPM-65392 +Name = Kanojo no Densetsu - Boku no Sekiban Region = NTSC-J --------------------------------------------- -Serial = SLPM-66530 -Name = Gift Prism +Serial = SLPM-65393 +Name = Simple 2000 Series Vol.38 - The Friendship Adventure Region = NTSC-J --------------------------------------------- -Serial = SLPM-66531 -Name = Nizu no Senritsu 2 [Limited Edition] +Serial = SLPM-65394 +Name = Love Smash! 5 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66532 -Name = Nizu no Senritsu 2 +Serial = SLPM-65395 +Name = Digi-Charat Fantasy Region = NTSC-J --------------------------------------------- -Serial = SLPM-66533 -Name = Pop'n Music 13 - Carnival +Serial = SLPM-65397 +Name = Prince of Tennis - Kiss of Prince - Ice Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-66534 -Name = Ryu Koku [Limited Edition] +Serial = SLPM-65398 +Name = Prince of Tennis - Kiss of Prince - Flame Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-66535 -Name = Ryu Koku +Serial = SLPM-65399 +Name = D.C.P.S. [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66536 -Name = Aria: The Natural ~Tooi Yume no Mirage~ +Serial = SLPM-65400 +Name = D.C.P.S. Region = NTSC-J --------------------------------------------- -Serial = SLPM-66537 -Name = Iris no Atelier: Eternal Mana 2 [Gust Best Price] +Serial = SLPM-65401 +Name = Tengai Makyou II - Manji Maru Region = NTSC-J --------------------------------------------- -Serial = SLPM-66538 -Name = GI Jockey 4 2006 +Serial = SLPM-65404 +Name = Kita He - Diamond Dust Region = NTSC-J --------------------------------------------- -Serial = SLPM-66539 -Name = Nobunaga no Yabou Online - Haten no Shou +Serial = SLPM-65405 +Name = Hyper Dimension Fortress Macross Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66542 -Name = Sengoku Musou 2 Empires +Serial = SLPM-65406 +Name = Castlevania - Lament of Innocence [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66543 -Name = Youjinbou - Unmei no Freud +Serial = SLPM-65407 +Name = Transformers Tatakai Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66544 -Name = Sekai no Zente - Two of Us +Serial = SLPM-65408 +Name = Growlanser IV - Wayfarer of the Time Region = NTSC-J --------------------------------------------- -Serial = SLPM-66548 -Name = Harukanaru Jikuu no Uchi de Mai Ichi Yoru +Serial = SLPM-65409 +Name = Air Ranger 2 - Rescue Helicopter - Plus Region = NTSC-J --------------------------------------------- -Serial = SLPM-66549 -Name = Sangokushi XI +Serial = SLPM-65410 +Name = Getaway, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-66550 -Name = God Hand +Serial = SLPM-65411 +Name = Onimusha Buraiden Region = NTSC-J Compat = 5 +MemCardFilter = SLPM-65411/SLPM-65413 --------------------------------------------- -Serial = SLPM-66551 -Name = Appleseed EX +Serial = SLPM-65412 +Name = War of the Monsters Region = NTSC-J --------------------------------------------- -Serial = SLPM-66552 -Name = Neverland Reportage +Serial = SLPM-65413 +Name = Onimusha 3 Region = NTSC-J +MemCardFilter = SLPM-65411/SLPM-65413 --------------------------------------------- -Serial = SLPM-66553 -Name = Chaos Wars +Serial = SLPM-65414 +Name = Simple 2000 Series Vol.45 - The Love and Tears and Memory Region = NTSC-J --------------------------------------------- -Serial = SLPM-66554 -Name = Interlude [Best Version] +Serial = SLPM-65416 +Name = Pride Grand Prix 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66555 -Name = SuperLite 2000 Series - Tokyo Bus Guide 2 +Serial = SLPM-65417 +Name = Mat Hoffman's Pro BMX 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66556 -Name = Shinobido Imashime [Spike The Best] +Serial = SLPM-65418 +Name = Kelly Slater's Pro Surfer 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66557 -Name = FIFA Street [EA Best Hits] +Serial = SLPM-65419 +Name = Tony Hawk's Pro Skater 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66558 -Name = Tomb Raider - Legend +Serial = SLPM-65420 +Name = Dabitsuku 3 - Let's Become a Derby Owner Region = NTSC-J --------------------------------------------- -Serial = SLPM-66559 -Name = Winning Post 6 [KOEI Selection] +Serial = SLPM-65421 +Name = Ever 17 - Out of Infinity [Premium Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66560 -Name = Sangokushi X [KOEI The Best] +Serial = SLPM-65422 +Name = Tom Clancy's Splinter Cell Region = NTSC-J --------------------------------------------- -Serial = SLPM-66561 -Name = NBA Live '06 [EA Best Hits] +Serial = SLPM-65423 +Name = Sangokushi IX Region = NTSC-J --------------------------------------------- -Serial = SLPM-66562 -Name = Need for Speed - Most Wanted [EA Best Hits] +Serial = SLPM-65424 +Name = Moekko Company [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66563 -Name = Nizu no Senritsu [2800 Collection] +Serial = SLPM-65425 +Name = Moekko Company Region = NTSC-J --------------------------------------------- -Serial = SLPM-66564 -Name = REC - DokiDoki Seiyuu Paradise [Limited Edition] +Serial = SLPM-65426 +Name = Pro Baseball Team Tsukuro! 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66565 -Name = REC - DokiDoki Seiyuu Paradise +Serial = SLPM-65427 +Name = Riding Spirits 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66566 -Name = Tenshou Gakuen Gekkou Hasumi +Serial = SLPM-65428 +Name = BioHazard Outbreak Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66567 -Name = Driver - Parallel Lines +Serial = SLPM-65429 +Name = Galaxy Angel - Moonlit Lovers Region = NTSC-J --------------------------------------------- -Serial = SLPM-66568 -Name = Brothers in Arms: Road to Hill 30 [Ubisoft Best] +Serial = SLPM-65431 +Name = Sonic Heroes Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66569 -Name = Secret of Evangelion +Serial = SLPM-65432 +Name = J-League Winning Eleven Tactics Region = NTSC-J --------------------------------------------- -Serial = SLPM-66570 -Name = I's Pure +Serial = SLPM-65433 +Name = K-1 World Grand Prix 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66571 -Name = Memories Off #5 - Togireta [Superlite 2000 Series] +Serial = SLPM-65434 +Name = Battle Gear 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66572 -Name = LEGO Star Wars II - The Original Trilogy +Serial = SLPM-65435 +Name = Diamond Dust Region = NTSC-J --------------------------------------------- -Serial = SLPM-66573 -Name = Kurogane no Houkou 2 - Warship Gunner [KOEI Selection] +Serial = SLPM-65438 +Name = Star Ocean 3 [Director's Cut] [Disc1of2] Region = NTSC-J +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66574 -Name = Meitantei Evangelion +Serial = SLPM-65439 +Name = Star Ocean 3 [Director's Cut] [Disc2of2] Region = NTSC-J +Compat = 5 +VuAddSubHack = 1 +MemCardFilter = SLPM-65438 --------------------------------------------- -Serial = SLPM-66575 -Name = Guitar Freaks V-2 & Drummania V-2 +Serial = SLPM-65441 +Name = Ashita no Joe: Masshiro ni Moetsukuru Region = NTSC-J --------------------------------------------- -Serial = SLPM-66576 -Name = Seiken Densetsu 4 +Serial = SLPM-65442 +Name = Terminator 3, The - Rise of the Machines Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66577 -Name = Gladiator - Road to Freedom [Special Remix] [Ertain the Best] +Serial = SLPM-65443 +Name = Front Mission 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66582 -Name = Kohitsuji Hokaku Keakaku! Sweet Boys Life [Limited Edition] +Serial = SLPM-65444 +Name = Castlevania - Lament of Innocence Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66583 -Name = Kohitsuji Hokaku Keakaku! Sweet Boys Life +Serial = SLPM-65445 +Name = Powerful Pro Baseball 10 - Decision Region = NTSC-J --------------------------------------------- -Serial = SLPM-66584 -Name = Yoake Yori Ruriiro na - Brighter than Dawning Blue +Serial = SLPM-65446 +Name = James Bond 007 - Everything or Nothing Region = NTSC-J --------------------------------------------- -Serial = SLPM-66585 -Name = Elvandia Story +Serial = SLPM-65447 +Name = Kunoichi Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66586 -Name = Karutagura - Tamashii no Kunou [2800 Collection] +Serial = SLPM-65448 +Name = Cambrian QTS - Kaseki Ninattemo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66587 -Name = Karutagura - Tamashii no Kunou [Best Version] +Serial = SLPM-65449 +Name = SSX 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66588 -Name = White Princess the Second [2800 Collection] +Serial = SLPM-65450 +Name = Tantei Gakuen Q: Kiokan no Satsui [First Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66589 -Name = NBA Live '07 +Serial = SLPM-65451 +Name = Prince of Tennis - Smash Hit! 2 [First Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66590 -Name = Jikkyou Powerful Pro Yakyuu 13 Chou Ketteiban +Serial = SLPM-65454 +Name = Prince of Tennis - Smash Hit! 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66591 -Name = FlatOut 2 GTR +Serial = SLPM-65456 +Name = Magical Nurse Witch Komugi-chan [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66592 -Name = Negima! 3-Jikanme [Theater Version] +Serial = SLPM-65457 +Name = Magical Nurse Witch Komugi-chan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66593 -Name = Negima! 3-Jikanme [Live Version] +Serial = SLPM-65458 +Name = Kurogane no Houkou 2 - Warship Commander Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66594 -Name = Rhapsodia [Konami the Best] +Serial = SLPM-65459 +Name = Bujingai Region = NTSC-J --------------------------------------------- -Serial = SLPM-66595 -Name = J-League Winning Eleven 10 - Europa League '06-'07 +Serial = SLPM-65460 +Name = Conflict Delta - Wangan War 1991 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66596 -Name = Prince of Tennis - Gakuensai no Oji-sama [Konami the Best] +Serial = SLPM-65461 +Name = Tantei Gakuen Q: Kiokan no Satsui Region = NTSC-J --------------------------------------------- -Serial = SLPM-66598 -Name = Yatohime Zankikou +Serial = SLPM-65462 +Name = Shin Megami Tensei III: Nocturne Maniax Region = NTSC-J +Compat = 5 +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-66600 -Name = Madden NFL '07 +Serial = SLPM-65463 +Name = Rocky Region = NTSC-J --------------------------------------------- -Serial = SLPM-66601 -Name = SSX On Tour [EA Best Hits] +Serial = SLPM-65464 +Name = Wind - A Breath of Heart Region = NTSC-J --------------------------------------------- -Serial = SLPM-66602 -Name = Ryu ga Gotoku 2 +Serial = SLPM-65465 +Name = Harry Potter to Kenja no Ishi Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66604 -Name = Galaxy Angel - Moonlit Lovers [Banpresido the Best] +Serial = SLPM-65466 +Name = Kousen Gaeri - Refrain Region = NTSC-J --------------------------------------------- -Serial = SLPM-66605 -Name = Castle Fantasia - Arihato Senki +Serial = SLPM-65468 +Name = Roommate Asami - D-Collection Region = NTSC-J --------------------------------------------- -Serial = SLPM-66606 -Name = White Breath - Kizuna [First Print - Limited Edition] +Serial = SLPM-65470 +Name = Firefighter F.D. 18 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66607 -Name = White Breath - Kizuna +Serial = SLPM-65471 +Name = Firefighter F.D. 18 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66608 -Name = Prince of Tennis - DokiDoki Survival - Sanroku no Mystic +Serial = SLPM-65472 +Name = Train Simulator & Densha de Go! Tokyo Kyuukouhen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66609 -Name = Dance Dance Revolution - SuperNOVA +Serial = SLPM-65473 +Name = Hagane no Renkinjutsushi - Tobenai Tenshi Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66610 -Name = Prince of Tennis - DokiDoki Survival - Umibe no Secret +Serial = SLPM-65474 +Name = Kurogane no Houkou 2 - Warship Commander [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66611 -Name = Tomoyo After - It's Wonderful Life [CS Edition] +Serial = SLPM-65477 +Name = Crimson Sea 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66612 -Name = School Love [Limited Edition] +Serial = SLPM-65478 +Name = Final Fantasy X-2 International Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66613 -Name = Medal of Honor - Rising Sun & Frontline [EA Best Hits] +Serial = SLPM-65479 +Name = Sims, The - Bustin' Out Region = NTSC-J --------------------------------------------- -Serial = SLPM-66615 -Name = James Bond 007 - Everything or Nothing & Nightfire [EA Best Hits] +Serial = SLPM-65480 +Name = Michigan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66617 -Name = Need for Speed - Carbon +Serial = SLPM-65481 +Name = After... [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66618 -Name = Yumemishi [First Print Limited Edition] +Serial = SLPM-65482 +Name = After... Region = NTSC-J --------------------------------------------- -Serial = SLPM-66619 -Name = Yumemishi +Serial = SLPM-65483 +Name = Secret Weapons Over Normandy Region = NTSC-J --------------------------------------------- -Serial = SLPM-66620 -Name = Higurashi no Naku Koro ni Matsuri +Serial = SLPM-65484 +Name = WISP - Word Image Sound Play Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66621 -Name = Beatmania IIDX 12 - Happy Sky +Serial = SLPM-65486 +Name = Airforce Delta - Blue Wing Knights Region = NTSC-J --------------------------------------------- -Serial = SLPM-66622 -Name = Tom Clancy's Ghost Recon 2 [Ubisoft Best] +Serial = SLPM-65488 +Name = Grand Theft Auto - Vice City Region = NTSC-J --------------------------------------------- -Serial = SLPM-66623 -Name = Dokapon the World [Asmik Tokudane Series] +Serial = SLPM-65489 +Name = Tantei Jingiji Saburo - Innocent Black [WorkJam Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66624 -Name = Tsuyo Kiss - Mighty Heart [Princess Soft Collection] +Serial = SLPM-65490 +Name = Sanma Nisai Deus Mechanica - Demon Bane [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66625 -Name = Trouble Fortune Comany - Happy Cure [Limited Edition] +Serial = SLPM-65491 +Name = Sanma Nisai Deus Mechanica - Demon Bane Region = NTSC-J --------------------------------------------- -Serial = SLPM-66626 -Name = Trouble Fortune Comany - Happy Cure +Serial = SLPM-65492 +Name = GunGrave O.D. Region = NTSC-J --------------------------------------------- -Serial = SLPM-66627 -Name = WWE SmackDown! vs. RAW 2007 +Serial = SLPM-65493 +Name = Hurrah! Sailor Region = NTSC-J --------------------------------------------- -Serial = SLPM-66628 -Name = OutRun2 SP [First Print Limited Edition] +Serial = SLPM-65494 +Name = Fuun Shinsengumi Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPM-66630 -Name = Marheaven - Arm Fight Dream [Konami the Best] +Serial = SLPM-65495 +Name = Monster Hunter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66631 -Name = Gokujou Seitokai [Konami the Best] +Serial = SLPM-65496 +Name = Hyper Street Fighter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66632 -Name = Kenka Banchou 2 - Full Throttle +Serial = SLPM-65497 +Name = World Soccer Winning Eleven 7 - International [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66633 -Name = Shoujo Mahou Gaku Little Witch Romanesque +Serial = SLPM-65498 +Name = World Soccer Winning Eleven 7 - International Region = NTSC-J --------------------------------------------- -Serial = SLPM-66634 -Name = Devil Summoner - Kuzunoha Raidou [Atlus Best Collection] +Serial = SLPM-65499 +Name = Bloody Roar 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66635 -Name = Wind - A Breath of Heart [Alchemist Best Collection] +Serial = SLPM-65500 +Name = Anubis: Zone of the Enders Special Edition Region = NTSC-J --------------------------------------------- -Serial = SLPM-66636 -Name = Hyper Street Fighter II - The Anniversary Edition [CapKore] +Serial = SLPM-65501 +Name = Frogger - The Great Quest Region = NTSC-J --------------------------------------------- -Serial = SLPM-66637 -Name = Vampire Darkstalkers Collection [Capcom the Best] +Serial = SLPM-65502 +Name = GunGrave [Red Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66638 -Name = Demento [CapKore] +Serial = SLPM-65503 +Name = Lord of the Rings, The - The Return of the King Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66639 -Name = Street Fighter III - 3rd Strike [Capcom the Best] +Serial = SLPM-65504 +Name = Cool Girl [Limited Edition] [Disc1of2] Region = NTSC-J +MemCardFilter = SLPM-65504/SLPM-65505/SLPM-65506/SLPM-65742 --------------------------------------------- -Serial = SLPM-66640 -Name = Full House Kiss [CapKore] +Serial = SLPM-65505 +Name = Cool Girl [Limited Edition] [Disc2of2] Region = NTSC-J +MemCardFilter = SLPM-65504/SLPM-65505/SLPM-65506/SLPM-65742 --------------------------------------------- -Serial = SLPM-66641 -Name = School Love +Serial = SLPM-65506 +Name = Cool Girl Region = NTSC-J +MemCardFilter = SLPM-65504/SLPM-65505/SLPM-65506/SLPM-65742 --------------------------------------------- -Serial = SLPM-66642 -Name = Prince of Tennis, The - Card Hunter [First Print Limited Edition] +Serial = SLPM-65508 +Name = Pop'n Music 9 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66643 -Name = OutRun2 SP +Serial = SLPM-65509 +Name = Prince of Tennis - Love of Prince - Sweet Region = NTSC-J --------------------------------------------- -Serial = SLPM-66644 -Name = J-League Pro Soccer Club o Tsukurou 5 +Serial = SLPM-65510 +Name = Prince of Tennis - Love of Prince - Bitter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66645 -Name = Bionicle Heroes +Serial = SLPM-65512 +Name = Angel's Feather [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66646 -Name = Shining Force EXA +Serial = SLPM-65513 +Name = Angel's Feather Region = NTSC-J --------------------------------------------- -Serial = SLPM-66649 -Name = Taito Memories II - Joukan +Serial = SLPM-65514 +Name = Kaido Battle 2 - Chain Reaction Region = NTSC-J --------------------------------------------- -Serial = SLPM-66651 -Name = Battlefield 2 - Modern Combat [EA Best Hits] +Serial = SLPM-65515 +Name = Sakura Taisen - Mysterious Paris Region = NTSC-J --------------------------------------------- -Serial = SLPM-66652 -Name = Burnout Revenge [EA Best Hits] +Serial = SLPM-65517 +Name = Sengoku Musou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66653 -Name = Akudaikan 3 +Serial = SLPM-65518 +Name = Raimuiro Senkitan Jun [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66654 -Name = Harukanaru Toki no Naka de 2 [Koei Selection] +Serial = SLPM-65519 +Name = Raimuiro Senkitan Jun Region = NTSC-J --------------------------------------------- -Serial = SLPM-66655 -Name = Harukanaru Jikuu no Kade - Hachiha Katsunori [Koei the Best] +Serial = SLPM-65520 +Name = Tentama 2 Wins [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66656 -Name = Warship Gunner 2 - Change of Direction [Koei the Best] +Serial = SLPM-65521 +Name = Tentama 2 Wins Region = NTSC-J --------------------------------------------- -Serial = SLPM-66657 -Name = Shin Sangoku Musou 3 Mushoden [Koei Selection] +Serial = SLPM-65523 +Name = Hurrah! Sailor Region = NTSC-J --------------------------------------------- -Serial = SLPM-66658 -Name = Shin Sangoku Musou 3 Empires [Koei Selection] +Serial = SLPM-65524 +Name = Orange Pocket - Root [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66659 -Name = Soshite Kono Uchuu ni Kirameku Kimi no Shi XXX +Serial = SLPM-65525 +Name = Orange Pocket - Root Region = NTSC-J --------------------------------------------- -Serial = SLPM-66660 -Name = Hokuto no Ken +Serial = SLPM-65526 +Name = Dororo Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66661 -Name = Dessert Love - Sweet Plus [Best Collection] +Serial = SLPM-65527 +Name = FIFA Total Football Region = NTSC-J --------------------------------------------- -Serial = SLPM-66662 -Name = Dog Island, The - Hitsotsuno no Hana no Monogatari +Serial = SLPM-65529 +Name = Mission Impossible - Operation Surma Region = NTSC-J --------------------------------------------- -Serial = SLPM-66663 -Name = Phantasy Star Universe - Ambition of the Illuminus +Serial = SLPM-65530 +Name = J-League Pro Soccer Club - Tsukuku 2004 Region = NTSC-J -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-66664 -Name = Full House Kiss 2 [CapKore] +Serial = SLPM-65531 +Name = Sakura Taisen V - Episode 0 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66667 -Name = Meine Liebe II [Konami Palace Selection] +Serial = SLPM-65532 +Name = Puyo Puyo Fever Region = NTSC-J --------------------------------------------- -Serial = SLPM-66668 -Name = Akumajo Dracula - Yami no Juin [Konami the Best] +Serial = SLPM-65533 +Name = Pyu to Fuku! Jaguar Ashita no Japan Region = NTSC-J -vuClampMode = 0 //SPS with microVU --------------------------------------------- -Serial = SLPM-66669 -Name = Prince of Tennis, The - Card Hunter [First Print Limited Edition] +Serial = SLPM-65534 +Name = Rogue Ops Region = NTSC-J --------------------------------------------- -Serial = SLPM-66670 -Name = Stella Deus [Best Version] +Serial = SLPM-65535 +Name = Oshiete! Popotan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66671 -Name = Shining Wind +Serial = SLPM-65537 +Name = Chou Battle Houshin [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66672 -Name = Tom Clancy's Splinter Cell - Double Agent +Serial = SLPM-65538 +Name = James Bond 007 - Nightfire [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66673 -Name = Prince of Persia - Warrior Within [Ubisoft the Best] +Serial = SLPM-65539 +Name = V-Rally 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66674 -Name = Tiger Woods PGA Tour '07 +Serial = SLPM-65540 +Name = Galaxy Angel - Moonlit Lovers [First Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66675 -Name = Kingdom Hearts II - Final Mix + +Serial = SLPM-65541 +Name = Angelique Trois - Aizouhen [Koei The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66676 -Name = Kingdom Hearts Re: Chain of Memories +Serial = SLPM-65542 +Name = Zero Shikikan Josentoki Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66677 -Name = Final Fantasy X - International [Ultimate Hits] +Serial = SLPM-65543 +Name = Pro Yakyu Spirits 2004 Region = NTSC-J -IPUWaitHack = 1 --------------------------------------------- -Serial = SLPM-66678 -Name = Final Fantasy X-2 - International + Last Mission [Ultimate Hits] +Serial = SLPM-65545 +Name = Izayoi Renke Kamifurusato Region = NTSC-J --------------------------------------------- -Serial = SLPM-66679 -Name = Devil Summoner: Kuzunoha Raidou tai Abaddon Ou [Plus] +Serial = SLPM-65546 +Name = Cross Channel - To All People [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66683 -Name = Devil Summoner: Kuzunoha Raidou tai Abaddon Ou +Serial = SLPM-65547 +Name = Cross Channel - To All People Region = NTSC-J --------------------------------------------- -Serial = SLPM-66685 -Name = Seaman 2 - Peking Genjin Ikusei Kit +Serial = SLPM-65548 +Name = Freedom Fighters Region = NTSC-J -Compat = 2 --------------------------------------------- -Serial = SLPM-66686 -Name = GuitarFreaks & DrumMania Masterpiece Gold +Serial = SLPM-65549 +Name = Remember 11 - The Age of Infinity [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66687 -Name = Hiiro no Kakera - Ano Sora no Shita de +Serial = SLPM-65550 +Name = Remember 11 - The Age of Infinity +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-65551 +Name = Astro Boy Atom Region = NTSC-J --------------------------------------------- -Serial = SLPM-66688 -Name = Harukanaru Jikuu no Kade 3 [Koei the Best] +Serial = SLPM-65552 +Name = Metal Wolf Rev [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66689 -Name = Persona 3 FES [Append Edition] +Serial = SLPM-65553 +Name = Metal Wolf Rev Region = NTSC-J -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-66690 -Name = Persona 3 FES [Independent Starting Version] +Serial = SLPM-65554 +Name = Croket Ban - King no Kiki wo Sukuu Region = NTSC-J -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-66691 -Name = Sengoku Basara 2 [CapKore] +Serial = SLPM-65555 +Name = Dragon Quest V - Bride of the Sky Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66692 -Name = Seikai no Senki [Best Hit] +Serial = SLPM-65556 +Name = Nobunaga no Yabou - Tenka Sousei Region = NTSC-J --------------------------------------------- -Serial = SLPM-66693 -Name = Princess Maker 4 [Best Version] +Serial = SLPM-65557 +Name = Steady X Study [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66694 -Name = Spongebob +Serial = SLPM-65558 +Name = Steady X Study Region = NTSC-J --------------------------------------------- -Serial = SLPM-66695 -Name = Kono Aozora ni Yakusoku o - Melody of the Sun and Sea +Serial = SLPM-65559 +Name = Tenohira Taiyouni [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66696 -Name = SuperLite 2000 Series - Memories Off - Sorekara Again +Serial = SLPM-65560 +Name = Tenohira Taiyouni Region = NTSC-J --------------------------------------------- -Serial = SLPM-66697 -Name = Nightmare Before Christmas, The [CapKore] +Serial = SLPM-65561 +Name = Shin Sangoku Musou 3 [Super Premium Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66698 -Name = Shijou Saikyou no Teishi - Kenichi +Serial = SLPM-65564 +Name = Shin Sangoku Musou 3 - Empires Region = NTSC-J --------------------------------------------- -Serial = SLPM-66700 -Name = Konjiki no Corda 2 +Serial = SLPM-65565 +Name = Shin Sangoku Musou 3 - Empires Region = NTSC-J --------------------------------------------- -Serial = SLPM-66701 -Name = Sangokushi XI [with Power-Up Kit] +Serial = SLPM-65566 +Name = La Corda d'Oro [Premium Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66702 -Name = Winning Post 7 - Maximum 2007 +Serial = SLPM-65567 +Name = Corda D'Oro, La Region = NTSC-J --------------------------------------------- -Serial = SLPM-66703 -Name = Racing Game - Chuui!!!! [Konami the Best] +Serial = SLPM-65569 +Name = Kita He - Diamond Dust + Kiss is Beginning Region = NTSC-J --------------------------------------------- -Serial = SLPM-66704 -Name = Negima! Dream Tactic Yumemiru Otome Princess [Maihime Edition] +Serial = SLPM-65570 +Name = Frogger [Konami Palace Collection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66705 -Name = Negima! Dream Tactic Yumemiru Otome Princess [Utahime Edition] +Serial = SLPM-65571 +Name = Generation of Chaos 4 [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66708 -Name = Brothers In Arms: Earned In Blood [Ubisoft Best] +Serial = SLPM-65572 +Name = Generation of Chaos 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66709 -Name = Angel Profile +Serial = SLPM-65573 +Name = World Rallt Championship II Extreme [Spike The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66710 -Name = Godfather, The +Serial = SLPM-65574 +Name = Silent Hill 4 - The Room Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66712 -Name = Rozen Maiden - Geppetto Garden [Limited Edition] +Serial = SLPM-65575 +Name = Crimson Tears Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-66714 -Name = Wrestle Kingdom 2 - Pro Wrestling Sekai Taisen +Serial = SLPM-65576 +Name = Tantei Jingiji Saburo - Kind of Blue Region = NTSC-J --------------------------------------------- -Serial = SLPM-66715 -Name = Shinki Gensou Spectral Souls II [IF Collection] +Serial = SLPM-65579 +Name = After School Love Beat Region = NTSC-J --------------------------------------------- -Serial = SLPM-66716 -Name = Growlanser VI +Serial = SLPM-65580 +Name = Crash Bandicoot - Bakuso! Nitro Kart Region = NTSC-J --------------------------------------------- -Serial = SLPM-66717 -Name = Standard Daisenryaku - Dengekisen [Sega the Best] +Serial = SLPM-65581 +Name = Haunted Mansion Region = NTSC-J --------------------------------------------- -Serial = SLPM-66718 -Name = Standard Daisenryoku - Shiwareta Shouri [Sega the Best] +Serial = SLPM-65582 +Name = Winning Post 6 Maximum 2004 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66719 -Name = Tenka-bito [Sega the Best] +Serial = SLPM-65583 +Name = World Rally Championship 3 Region = NTSC-J +Compat = 4 +XgKickHack = 1 +[patches = C4467D30] + + comment=patch by Nachbrenner + + //Skip sceIpuSync + patch=1,EE,0027c808,word,03e00008 + +[/patches] --------------------------------------------- -Serial = SLPM-66720 -Name = Guilty Gear XX #Slash [Sega the Best] +Serial = SLPM-65585 +Name = Princess Holiday Region = NTSC-J --------------------------------------------- -Serial = SLPM-66721 -Name = Musou Orochi +Serial = SLPM-65586 +Name = Online Pro Wrestling Region = NTSC-J --------------------------------------------- -Serial = SLPM-66722 -Name = Jissen Pachinko Hisshouhou! CR Aladdin Destiny EX +Serial = SLPM-65587 +Name = Fight Night 2004 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66723 -Name = Zoids Infinity Fuzors [Tomy Best Collection] +Serial = SLPM-65588 +Name = Colorful Box - To Love [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66724 -Name = Zoids Tactics [Tomy Best Collection] +Serial = SLPM-65589 +Name = Colorful Box - To Love Region = NTSC-J --------------------------------------------- -Serial = SLPM-66725 -Name = Zoids Struggle [Tomy Best Collection] +Serial = SLPM-65590 +Name = Densha de Go! Final Region = NTSC-J --------------------------------------------- -Serial = SLPM-66726 -Name = Ojousama Kumikyoku - Sweet Concert +Serial = SLPM-65591 +Name = Lost Aya Sophia [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66727 -Name = Love Drops +Serial = SLPM-65592 +Name = Lost Aya Sophia Region = NTSC-J --------------------------------------------- -Serial = SLPM-66728 -Name = Pro Yakyuu Spirits 4 +Serial = SLPM-65593 +Name = Beatmania IIDX - 7th Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-66729 -Name = Shounen Onyouji - Tsubasa Yoima, Ten e Kare [Deluxe Box] +Serial = SLPM-65594 +Name = Iris no Atelier: Eternal Mana Region = NTSC-J --------------------------------------------- -Serial = SLPM-66730 -Name = Shounen Onyouji - Tsubasa Yoima, Ten e Kare +Serial = SLPM-65595 +Name = Shoubushi Gambler Densetsu - Tetsuya 2 [Athena Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66731 -Name = Black [EA Best Hits] +Serial = SLPM-65596 +Name = Juuni Kuniki - Kakukaku Taru Ou Michi Beni Midori no Uka Region = NTSC-J -vuClampMode = 0 --------------------------------------------- -Serial = SLPM-66732 -Name = Iinazuke [Limited Edition] +Serial = SLPM-65597 +Name = Digital Devil Saga: Avatar Tuner Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66733 -Name = Iinazuke +Serial = SLPM-65598 +Name = Tenshou Gakuen Kensousoku Region = NTSC-J --------------------------------------------- -Serial = SLPM-66734 -Name = Kiruto - Anata to Tsumugu Yume to Koi no Dress [Limited Edition] +Serial = SLPM-65599 +Name = Genso Suikoden 4 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66735 -Name = Kiruto - Anata to Tsumugu Yume to Koi no Dress +Serial = SLPM-65600 +Name = Genso Suikoden 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66736 -Name = Rogue Hearts Dungeon +Serial = SLPM-65601 +Name = Omoide ni Kawaru-Kimi - Memories Off [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66737 -Name = Sakura Ran Koukou Hosutobu [Limited Edition] +Serial = SLPM-65602 +Name = King of Colosseum 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66738 -Name = Sakura Ran Koukou Hosutobu +Serial = SLPM-65603 +Name = Run Like Hell Region = NTSC-J --------------------------------------------- -Serial = SLPM-66739 -Name = Burnout Dominator +Serial = SLPM-65604 +Name = Animation Battle - Recca no Honou Region = NTSC-J +Compat = 5 +[patches = 9BDBA170] + comment=patch by Shadow Lady + //IPU menu hang fix... + patch=0,EE,00115c00,word,03e00008 +[/patches] --------------------------------------------- -Serial = SLPM-66740 -Name = Sentou Kokka Kai - Legend [DX Pack] +Serial = SLPM-65607 +Name = 3LDK - Shiawase ni Narouyo [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66741 -Name = Sentou Kokka Kai - Legend +Serial = SLPM-65608 +Name = 3LDK - Shiawase ni Narouyo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66742 -Name = Pop'n Music 14 Fever +Serial = SLPM-65609 +Name = Memories Off... - Sorekara [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66743 -Name = Shinkyouku Soukai Polyphonica +Serial = SLPM-65610 +Name = Memories Off... - Sorekara Region = NTSC-J --------------------------------------------- -Serial = SLPM-66744 -Name = Killer 7 [CapKore] +Serial = SLPM-65611 +Name = Pizzicato Polka Region = NTSC-J --------------------------------------------- -Serial = SLPM-66745 -Name = Shadow of Rome [CapKore] +Serial = SLPM-65612 +Name = Harry Potter and The Prisoner of Azkaban Region = NTSC-J --------------------------------------------- -Serial = SLPM-66746 -Name = Guilty Gear XX - Accent Core +Serial = SLPM-65613 +Name = Yu-Gi-Oh! Capsule Monster Coliseum Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66747 -Name = Baroque +Serial = SLPM-65614 +Name = Need for Speed Underground [EA Best Hits] Region = NTSC-J +EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SLPM-66748 -Name = Mana-Khemia - Gakuen no Renkinjutsu Shitachi +Serial = SLPM-65615 +Name = Dokapon DX Region = NTSC-J -DMABusyHack = 1 --------------------------------------------- -Serial = SLPM-66749 -Name = Wizardry X 2 - Mugen no Gakuto [Wonder Price] +Serial = SLPM-65616 +Name = Juuni Kuniki - Guren no Hyou Koujin noJi [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66750 -Name = Final Fantasy XII International - Zodiac Job System [with Bonus DVD] +Serial = SLPM-65617 +Name = Bouken Jidai Katsugeki Goemon [Konami Collection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66751 -Name = Mahoroba Stories +Serial = SLPM-65618 +Name = Vampire Panic Region = NTSC-J --------------------------------------------- -Serial = SLPM-66752 -Name = Medal of Honor - Vanguard +Serial = SLPM-65619 +Name = Tom Clancy's Ghost Recon - Jungle Storm Region = NTSC-J --------------------------------------------- -Serial = SLPM-66753 -Name = Getsumento Heiki Mina - Futatsu no Project M [Limited Edition] +Serial = SLPM-65620 +Name = Akudaikan 2 [Global The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66754 -Name = Getsumento Heiki Mina - Futatsu no Project M +Serial = SLPM-65621 +Name = Street Fighter III - 3rd Strike Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66755 -Name = Majommusume - A La Mode II +Serial = SLPM-65622 +Name = Silent Hill 3 [Konami The Best] Region = NTSC-J +MemCardFilter = SLPM-65257/SLPM-65622/SLPM-66018/SLPM-65051/SLPM-65098/SLPM-65341/SLPM-65631 --------------------------------------------- -Serial = SLPM-66756 -Name = Que - Ancient Leaf no Yousei [Limited Edition] +Serial = SLPM-65623 +Name = Tantei Gakuen Q: Kiokan no Satsui [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66757 -Name = Que - Ancient Leaf no Yousei +Serial = SLPM-65624 +Name = Dear Boys Fast Break! [Konami Palace Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66758 -Name = Neo Angelique [Koei the Best] +Serial = SLPM-65625 +Name = Ashita no Joe: Masshiro ni Moetsukuru [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66759 -Name = Harukanaru Jikuu no Kade 3 - Izayoiki [Koei the Best] +Serial = SLPM-65626 +Name = Kyoufu Shinbun (Heisei-Han) Kaiki! Shinrei File [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66760 -Name = Nobunaga no Yabou - Soutensoku [with Power-Up Kit] [Koei Selection] +Serial = SLPM-65627 +Name = Gegege no Kitarou [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66761 -Name = Panic Palette [Limited Edition] +Serial = SLPM-65628 +Name = Konhana Pack - 3tsu no Jikenbou [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66762 -Name = Panic Palette +Serial = SLPM-65629 +Name = Kappa no Kai-Kata - How to Breed Kappas Region = NTSC-J --------------------------------------------- -Serial = SLPM-66763 -Name = Neon Genesis Evangelion - Battle Orchestra +Serial = SLPM-65630 +Name = Jikkyo Powerful Pro Baseball XI Region = NTSC-J --------------------------------------------- -Serial = SLPM-66764 -Name = Izumo Zero +Serial = SLPM-65631 +Name = Silent Hill 2 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66765 -Name = Juujimoto Ripputai Sypher - Game of Survival [Limited Edition] +Serial = SLPM-65632 +Name = Virtua Fighter Cyber Generation - Ambition of the Judgement Six Region = NTSC-J --------------------------------------------- -Serial = SLPM-66766 -Name = Juujimoto Ripputai Sypher - Game of Survival +Serial = SLPM-65633 +Name = I Love Baseball - Pro Yakyu wo Koyonaku Region = NTSC-J --------------------------------------------- -Serial = SLPM-66767 -Name = Urban Chaos - Riot Response +Serial = SLPM-65634 +Name = Summer Girl - Promised Summer Region = NTSC-J --------------------------------------------- -Serial = SLPM-66768 -Name = Missing Parts - The Tantei Stories - Side A [Best Version] +Serial = SLPM-65635 +Name = Bakuen Kakeshi Neverland Senki Zero Region = NTSC-J --------------------------------------------- -Serial = SLPM-66769 -Name = Missing Parts - The Tantei Stories - Side B [Best Version] +Serial = SLPM-65636 +Name = Sangokushi Senki 2 [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66770 -Name = Kuon no Kizuna - Sairinsho [Best Version] +Serial = SLPM-65637 +Name = Rakugaki Oukoku 2 - Majo no Tataki Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66771 -Name = Densha de Go! Shinkansen [PlayStation 2 The Best] +Serial = SLPM-65638 +Name = Full House Kiss Region = NTSC-J --------------------------------------------- -Serial = SLPM-66772 -Name = Densha de Go! Final [PlayStation 2 The Best] +Serial = SLPM-65639 +Name = Party Shana Nanco [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66773 -Name = Densha de Go! Professional 2 [Taito Best] +Serial = SLPM-65640 +Name = Party Shana Nanco Region = NTSC-J --------------------------------------------- -Serial = SLPM-66774 -Name = Energy Airforce - AimStrike! [Taito Best] +Serial = SLPM-65641 +Name = Utau - Tumbling Dice Region = NTSC-J --------------------------------------------- -Serial = SLPM-66775 -Name = Taito Memories Joukan [Taito Best] +Serial = SLPM-65642 +Name = Meiwaku Seijin Panic Maker Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66776 -Name = Taito Memories Gekan [Taito Best] +Serial = SLPM-65643 +Name = RockMan X - Command Mission Region = NTSC-J --------------------------------------------- -Serial = SLPM-66777 -Name = Jikkyou Powerful Pro Yakyuu 14 +Serial = SLPM-65644 +Name = Guilty Gear Isuka Region = NTSC-J --------------------------------------------- -Serial = SLPM-66778 -Name = Galaxy Angel - Eternal Lovers [Broccoli The Best Quality] +Serial = SLPM-65648 +Name = Medal of Honor - Frontline [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66779 -Name = Galaxy Angel II - Mugen Kairou no Kagi +Serial = SLPM-65649 +Name = NBA Street 2 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66781 -Name = Dragon Quest - Shonen Yangus to Fushigi no Dungeon [Ultimate Hits] +Serial = SLPM-65650 +Name = Harry Potter and The Sorcerer's Stone [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66782 -Name = Valkyrie Profile 2 - Silmeria [Ultimate Hits] +Serial = SLPM-65651 +Name = Kowloon Youma Gakuenki [Limited Edition] Region = NTSC-J -Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66783 -Name = Idol Janshi Suchie-Pai 4 [Limited Edition] +Serial = SLPM-65652 +Name = Kowloon Youma Gakuenki Region = NTSC-J --------------------------------------------- -Serial = SLPM-66785 -Name = Idol Janshi Suchie-Pai 4 +Serial = SLPM-65653 +Name = Darling Special Backlash - Koi no Exhaust Heat Region = NTSC-J --------------------------------------------- -Serial = SLPM-66786 -Name = Gift - Prism [Broccoli Best Quality] +Serial = SLPM-65654 +Name = Kaiketsu! Osabakiina Region = NTSC-J --------------------------------------------- -Serial = SLPM-66787 -Name = Tsuika AS+ Eternal Name +Serial = SLPM-65655 +Name = Finding Nemo [Yuke's The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66788 -Name = Grand Theft Auto - San Andreas [Best Price] +Serial = SLPM-65657 +Name = World Soccer Winning Eleven 8 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66789 -Name = Grand Theft Auto III [Best Price] +Serial = SLPM-65661 +Name = Densha de Go! Professional 2 [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66790 -Name = Grand Theft Auto - Vice City [Best Price] +Serial = SLPM-65663 +Name = Zwei!! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66791 -Name = Memories Off #5 Encore +Serial = SLPM-65664 +Name = Memories Off... Duet [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66792 -Name = Metal Gear Solid 2 - Sons of Liberty [20th Anniversary Edition] +Serial = SLPM-65665 +Name = BloodRayne Region = NTSC-J --------------------------------------------- -Serial = SLPM-66794 -Name = Metal Gear Solid 3 - Snake Eater [20th Anniversary Edition] +Serial = SLPM-65666 +Name = NBA Live 2004 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66796 -Name = Metal Gear Solid - 20th Anniversary Collection +Serial = SLPM-65668 +Name = Spectral Force - Radical Elements [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66800 -Name = Pirates of the Caribbean - At World's End +Serial = SLPM-65669 +Name = Spectral Force - Radical Elements Region = NTSC-J --------------------------------------------- -Serial = SLPM-66801 -Name = Izumo Complete [GN Software Best] +Serial = SLPM-65670 +Name = Aqua Kids Region = NTSC-J --------------------------------------------- -Serial = SLPM-66802 -Name = Kimore Hi no Namiki Michi [GN Software Best] +Serial = SLPM-65671 +Name = W - Wish [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66803 -Name = Shikaku Tantei - Sora no Sekai - Thousand Dreams +Serial = SLPM-65672 +Name = W - Wish Region = NTSC-J --------------------------------------------- -Serial = SLPM-66804 -Name = Colorful Aquarium - My Little Mermaid [Limited Edition] +Serial = SLPM-65674 +Name = Taikou Risshiden V Region = NTSC-J --------------------------------------------- -Serial = SLPM-66805 -Name = Colorful Aquarium - My Little Mermaid +Serial = SLPM-65675 +Name = Final Approach [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66806 -Name = Shuffle! On the Stage [Kadokawa the Best] +Serial = SLPM-65676 +Name = Final Approach Region = NTSC-J --------------------------------------------- -Serial = SLPM-66807 -Name = Disney-Pixar's Remy no Oishii Restaurant (Ratatouille) +Serial = SLPM-65677 +Name = Prince of Tennis - Smash Hit! [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66808 -Name = Tom Clancy's Ghost Recon - Advanced Warfighter [Ubisoft the Best] +Serial = SLPM-65678 +Name = Prince of Tennis - Smash Hit! 2 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66809 -Name = Saishu Shiken Kujira - Alive +Serial = SLPM-65679 +Name = Prince of Tennis - Sweat 2 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66810 -Name = J.League Winning Eleven 2007 Club Championship +Serial = SLPM-65680 +Name = Prince of Tennis - Make the Strongest Team Region = NTSC-J --------------------------------------------- -Serial = SLPM-66811 -Name = Winning Post 7 [Koei the Best] +Serial = SLPM-65681 +Name = Monochrome [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66812 -Name = GI Jockey 4 [Koei the Best] +Serial = SLPM-65682 +Name = Monochrome Region = NTSC-J --------------------------------------------- -Serial = SLPM-66813 -Name = Sangokushi IX [Koei Selection] +Serial = SLPM-65683 +Name = Violet no Atelier: Gramnad no Renkinjutsushi [Gust Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66814 -Name = Pure x Cure Re-covery +Serial = SLPM-65684 +Name = Meine Liebe - Yuubinaru Kioku Region = NTSC-J --------------------------------------------- -Serial = SLPM-66815 -Name = Baldr Bullet - Equilibrium +Serial = SLPM-65685 +Name = Stella Deus Region = NTSC-J --------------------------------------------- -Serial = SLPM-66816 -Name = Chanter# - Kimi no Uta ga Todoitara +Serial = SLPM-65686 +Name = Berserk [Branded Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66817 -Name = Palais de Reine +Serial = SLPM-65687 +Name = Star Wars - Battlefront Region = NTSC-J --------------------------------------------- -Serial = SLPM-66818 -Name = Quiz & Variety SukuSuku Inufuku 2 - Motto SukuSuku +Serial = SLPM-65688 +Name = Berserk Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66819 -Name = Beat Down - Fists of Vengeance [Best Price] +Serial = SLPM-65689 +Name = Never 7 - The End of Infinity [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66820 -Name = Jissen Pachinko Hisshouhou! CR Sakura Taisen +Serial = SLPM-65690 +Name = Konohana 4 - Yami wo Harau Inori Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66821 -Name = Sengoku Musou 2 Mushouden +Serial = SLPM-65691 +Name = Ever 17 - Out of Infinity [SuperLite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66822 -Name = GuitarFreaks V3 & DrumMania V3 +Serial = SLPM-65692 +Name = BioHazard Outbreak - File #2 Region = NTSC-J +Compat = 5 +MemCardFilter = SLPM-65692/SLPM-65428/SLPM-74201 --------------------------------------------- -Serial = SLPM-66823 -Name = Taka Reet Ura Mahjong Retsuden - Mukoubushi +Serial = SLPM-65693 +Name = Tokimeki Memorial 3 [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66824 -Name = Hiiro no Kakera 2 [Limited Edition] +Serial = SLPM-65694 +Name = Genso Suikoden 3 [Konami Dendou Collection] Region = NTSC-J +MemCardFilter = SLPM-65073/SLPM-65074/SLPM-65305/SLPM-65694/SLPM-86168/SLPM-86389/SLPM-87100/SLPM-86637/SLPM-86883/SLPM-87261/SLPM-86663/SLPM-86953/SLPM-87262 --------------------------------------------- -Serial = SLPM-66825 -Name = Hiiro no Kakera 2 +Serial = SLPM-65695 +Name = Hard Luck - Return of the Heroes Region = NTSC-J --------------------------------------------- -Serial = SLPM-66826 -Name = Youki Hime Den [Limited Edition] +Serial = SLPM-65696 +Name = Simple 2000 Series Vol.62 - The Super Puzzle Bubble DX Region = NTSC-J --------------------------------------------- -Serial = SLPM-66827 -Name = Youki Hime Den +Serial = SLPM-65697 +Name = Shrek 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66828 -Name = Beatmania IIDX 13 - DistorteD +Serial = SLPM-65698 +Name = Love Songs - ADV Futaba Riho 14-sai Natsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66829 -Name = Major League Baseball 2K7 +Serial = SLPM-65699 +Name = Viewtiful Joe - Aratanaru Kibo Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66830 -Name = Disney's Lewis to Mirai Dorobou (Meet the Robinsons) +Serial = SLPM-65700 +Name = Kengo 3 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66835 -Name = Kiniro no Corda 2 Anchor +Serial = SLPM-65701 +Name = Ghost Hunter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66836 -Name = EA Sports Rugby '08 +Serial = SLPM-65702 +Name = Sangokushi Senki [Koei Collection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66837 -Name = Madden NFL '08 +Serial = SLPM-65703 +Name = Double Reaction Plus Region = NTSC-J --------------------------------------------- -Serial = SLPM-66838 -Name = Fantastic Fortune 2 - Triple Star [Best Hit Selection] +Serial = SLPM-65704 +Name = Standard Daisenryaku Dengekisen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66839 -Name = We Are [Best Hit Selection] +Serial = SLPM-65705 +Name = Final Fantasy XI - Chains of Promathia [Expansion Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66840 -Name = Nizu no Senritsu 2 [Best Hit Selection] +Serial = SLPM-65706 +Name = Final Fantasy XI - Chains of Promathia [All-in-One Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66841 -Name = Will O' Wisp [Limited Edition] +Serial = SLPM-65708 +Name = Hagane no Renkinjutsushi - Akaki Elixir no Akuma Region = NTSC-J --------------------------------------------- -Serial = SLPM-66842 -Name = Will O' Wisp +Serial = SLPM-65710 +Name = Apocripha Zero Region = NTSC-J --------------------------------------------- -Serial = SLPM-66843 -Name = Generations of Chaos - Desire +Serial = SLPM-65714 +Name = Angelique Etoile [Premium Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66844 -Name = Yuukyuu no Sakura [Limited Edition] +Serial = SLPM-65715 +Name = Angelique Etoile Region = NTSC-J --------------------------------------------- -Serial = SLPM-66845 -Name = Yuukyuu no Sakura +Serial = SLPM-65716 +Name = Gaika no Gouhou - Air Land Force [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66846 -Name = Prism Ark - Awake +Serial = SLPM-65717 +Name = Tsuki wa Higashi ni Ha wa Nishi na - Operation Sanctuary Region = NTSC-J --------------------------------------------- -Serial = SLPM-66847 -Name = Arabians Lost - The Engagement on Desert +Serial = SLPM-65718 +Name = Sengoku Musou Moushouden Region = NTSC-J --------------------------------------------- -Serial = SLPM-66848 -Name = Sengoku Basara 2 Heroes +Serial = SLPM-65719 +Name = Burnout 3 - Takedown Region = NTSC-J --------------------------------------------- -Serial = SLPM-66849 -Name = Iris no Atelier: Grand Fantasm [Gust Best Price] +Serial = SLPM-65720 +Name = Shin Sangoku Musou 2 Mushouden [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66850 -Name = Arcana Heart +Serial = SLPM-65721 +Name = Pro Yakyuu Spirits 2004 Climax Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66851 -Name = Grand Theft Auto - Liberty City Stories +Serial = SLPM-65722 +Name = Airforce Delta - Blue Wing Knights [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66852 -Name = Capcom Classics Collection [Best Price] +Serial = SLPM-65723 +Name = Van Helsing Region = NTSC-J --------------------------------------------- -Serial = SLPM-66853 -Name = Jojo no Kimyouna Bouken - Ougon no Kaze [Best Price] +Serial = SLPM-65724 +Name = Choro Q Works Region = NTSC-J --------------------------------------------- -Serial = SLPM-66854 -Name = Street Fighter Zero - Fighters Generation [Best Price] +Serial = SLPM-65725 +Name = James Bond 007 - Everything or Nothing [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66855 -Name = Togainu no Chi - True Blood [Limited Edition] +Serial = SLPM-65726 +Name = Star Wars - Jango Fett [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66856 -Name = Togainu no Chi - True Blood +Serial = SLPM-65727 +Name = Lord of the Rings, The - The Return of the King [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66857 -Name = Itsuka, Todoku, Ano Sora ni [Limited Edition] +Serial = SLPM-65728 +Name = Hobbit, The Region = NTSC-J --------------------------------------------- -Serial = SLPM-66858 -Name = Itsuka, Todoku, Ano Sora ni +Serial = SLPM-65729 +Name = True Crime - Streets of L.A. Region = NTSC-J --------------------------------------------- -Serial = SLPM-66859 -Name = Sengoku Basara [Best Price] +Serial = SLPM-65730 +Name = RockMan X8 Region = NTSC-J +MemCardFilter = SLPM-65730/SLPM-65643 --------------------------------------------- -Serial = SLPM-66860 -Name = Nettai Teikiatsu Otome [Limited Edition] +Serial = SLPM-65731 +Name = Tom Clancy's Rainbow Six 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66861 -Name = Nettai Teikiatsu Otome +Serial = SLPM-65732 +Name = Akaiito Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66862 -Name = Ayaka Shibito [Best Selection] +Serial = SLPM-65734 +Name = Kita He - Diamond Dust [Hudson The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66863 -Name = WWE SmackDown vs. RAW 2008 +Serial = SLPM-65735 +Name = Ao no Mamade [Treasure Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66864 -Name = Umisho +Serial = SLPM-65736 +Name = Ao no Mamade Region = NTSC-J --------------------------------------------- -Serial = SLPM-66866 -Name = Jissen Pachi-Slot Hisshouhou! Hokuto no Ken 2 +Serial = SLPM-65737 +Name = Meshimase Roman Sabou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66867 -Name = MotoGP '07 +Serial = SLPM-65738 +Name = Love Songs Adv - Futaba Riho 19 Sai Region = NTSC-J --------------------------------------------- -Serial = SLPM-66868 -Name = Tom Clancy's Splinter Cell - Double Agent [Ubisoft the Best] +Serial = SLPM-65739 +Name = Nightmare Before Christmas Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66869 -Name = Need for Speed - Carbon [EA Best Hits] +Serial = SLPM-65740 +Name = J-League Winning Eleven 8 - Asia Championship Region = NTSC-J --------------------------------------------- -Serial = SLPM-66870 -Name = Kuri no Okurimono [First Print Special Edition] +Serial = SLPM-65741 +Name = Driver 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66871 -Name = Shoukan Shoujo - Elemental Girl Calling [DX Pack] +Serial = SLPM-65742 +Name = Cool Girl [Konami the Best] Region = NTSC-J +MemCardFilter = SLPM-65504/SLPM-65505/SLPM-65506/SLPM-65742 --------------------------------------------- -Serial = SLPM-66872 -Name = Shoukan Shoujo - Elemental Girl Calling +Serial = SLPM-65744 +Name = Firefighter F.D. 18 [Konami The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPM-66873 -Name = Lucky Star [DX Pack] +Serial = SLPM-65745 +Name = Tokimeki Memorial - Girl's Side [Konami Dendou Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66874 -Name = Lucky Star +Serial = SLPM-65746 +Name = FIFA Total Football 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66875 -Name = Jikkyou Powerful Pro Major League 2 +Serial = SLPM-65748 +Name = Zoids Struggle Region = NTSC-J --------------------------------------------- -Serial = SLPM-66876 -Name = Izumo 2 [GN Software Best] +Serial = SLPM-65749 +Name = Zoids Infinity Region = NTSC-J --------------------------------------------- -Serial = SLPM-66877 -Name = Summer## [GN Software Best] +Serial = SLPM-65750 +Name = Dokapon the World Region = NTSC-J --------------------------------------------- -Serial = SLPM-66878 -Name = Dokapon Kingdom +Serial = SLPM-65751 +Name = Suigetsu Mayoi-Gokoro Region = NTSC-J --------------------------------------------- -Serial = SLPM-66879 -Name = StarTRain - Your Past Makes Your Future [Limited Edition] +Serial = SLPM-65752 +Name = Neo Contra Region = NTSC-J --------------------------------------------- -Serial = SLPM-66880 -Name = StarTRain - Your Past Makes Your Future +Serial = SLPM-65753 +Name = Kessen [Koei Collection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66881 -Name = TOCA Race Driver 3 - Ultimate Racing Simulator +Serial = SLPM-65754 +Name = Metal Gear Solid 2 [Konami Dendou Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66882 -Name = Hakarena Heart [Limited Edition] +Serial = SLPM-65755 +Name = Samurai Western - Katsugeki Samurai-dou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66883 -Name = Hakarena Heart +Serial = SLPM-65756 +Name = Tennis no Oji-Sama - Rush & Dream Region = NTSC-J --------------------------------------------- -Serial = SLPM-66884 -Name = NBA Live '08 +Serial = SLPM-65757 +Name = Medal of Honor - Rising Sun [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66885 -Name = Winning Eleven 2008 +Serial = SLPM-65758 +Name = Sonic Mega Collection Plus Region = NTSC-J +MemCardFilter = SLPM-65758/SLAJ-25027/SLPM-65431 --------------------------------------------- -Serial = SLPM-66886 -Name = Harry Potter and the Order of the Phoenix +Serial = SLPM-65759 +Name = Mr. Incredible Region = NTSC-J --------------------------------------------- -Serial = SLPM-66887 -Name = Harukanaru Jikuu no Kade 3 - Unmei no Meikyuu [Koei the Best] +Serial = SLPM-65760 +Name = Grand Theft Auto III [Capcom The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66888 -Name = GI Jockey 4 - 2007 +Serial = SLPM-65761 +Name = World Super Police Region = NTSC-J --------------------------------------------- -Serial = SLPM-66889 -Name = Pri-Saga! Princess o Sagase! [Limited Edition] +Serial = SLPM-65762 +Name = Katakamuna Region = NTSC-J --------------------------------------------- -Serial = SLPM-66890 -Name = Pri-Saga! Princess o Sagase! +Serial = SLPM-65763 +Name = 007 Goldeneye - Rogue Agent Region = NTSC-J --------------------------------------------- -Serial = SLPM-66891 -Name = Myself, Yourself [Limited Edition] +Serial = SLPM-65764 +Name = Men at Work! 3 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66892 -Name = Myself, Yourself +Serial = SLPM-65765 +Name = Men at Work! 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66893 -Name = Final Fantasy XI - Vana'diel Collection +Serial = SLPM-65766 +Name = Need for Speed Underground 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66894 -Name = Final Fantasy XI - Wings of the Goddess +Serial = SLPM-65767 +Name = NBA Starting Five 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66895 -Name = Manea Sugoroku - Kabukuro +Serial = SLPM-65768 +Name = Beatmania IIDX - 8th Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-66896 -Name = Pia Carrot e Youkoso!! G.O. Summer Fair +Serial = SLPM-65769 +Name = Pop'n Music 10 [with Pop'n Controller 2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66897 -Name = Tales of the Abyss +Serial = SLPM-65770 +Name = Pop'n Music 10 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66898 -Name = Spectral Gene [Limited Edition] +Serial = SLPM-65771 +Name = Natural 2 Duo - Sakurairo no Kisetsu [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66899 -Name = Spectral Gene +Serial = SLPM-65772 +Name = Natural 2 Duo Region = NTSC-J --------------------------------------------- -Serial = SLPM-66900 -Name = Kuri no Okurimono +Serial = SLPM-65773 +Name = Shining Tears Region = NTSC-J --------------------------------------------- -Serial = SLPM-66901 -Name = 12Riven - The Psi-Climinal of Integral +Serial = SLPM-65775 +Name = Dance Dance Revolution - Festival Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66902 -Name = Disney Princess - Enchanted Journey +Serial = SLPM-65776 +Name = Tenkuu Danzai - Skelter Heaven [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66903 -Name = GI Jockey 4 - 2007 [with Winning Post 7 - 2007 - Premium Pack] +Serial = SLPM-65777 +Name = Tenkuu Danzai - Skelter Heaven Region = NTSC-J --------------------------------------------- -Serial = SLPM-66905 -Name = D.C. Da Capo The Origin +Serial = SLPM-65778 +Name = Sega Ages 2500 Series Vol.18 - Dragon Force Region = NTSC-J --------------------------------------------- -Serial = SLPM-66906 -Name = Tensho Gakuen Gekkoroku [Tokudame Price] +Serial = SLPM-65779 +Name = Exciting Pro Wrestling 5 [Yuke's the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66907 -Name = Iinazuke [Princess Soft Collection] +Serial = SLPM-65780 +Name = Kessen III [Treasure Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66908 -Name = Izumo 2 - Gakuen Kyousoukyoku - Double Tact +Serial = SLPM-65781 +Name = Kessen III Region = NTSC-J --------------------------------------------- -Serial = SLPM-66909 -Name = Shinkyouku Soukai Polyphonica 3&4 Hanashi Kanketsuhen +Serial = SLPM-65783 +Name = Nobunaga no Yabou Online - Tappi no Shou Region = NTSC-J --------------------------------------------- -Serial = SLPM-66910 -Name = Stuntman - Ignition +Serial = SLPM-65785 +Name = Natsuiro - Hoshikuzu no Memory [Limited Edition] Region = NTSC-J -VIFFIFOHack = 1 --------------------------------------------- -Serial = SLPM-66911 -Name = Finalist [Princess Soft Collection] +Serial = SLPM-65786 +Name = Natsuiro - Hoshikuzu no Memory Region = NTSC-J --------------------------------------------- -Serial = SLPM-66912 -Name = Higurashi no Naku Koro ni Matsuri - Kakera Asobi [Append Version] +Serial = SLPM-65787 +Name = NBA Live 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66913 -Name = Higurashi no Naku Koro ni Matsuri - Kakera Asobi +Serial = SLPM-65788 +Name = Winning Eleven 8 - Liveware Evolution Region = NTSC-J --------------------------------------------- -Serial = SLPM-66914 -Name = Houkago wa Hakugin no Shirabe +Serial = SLPM-65789 +Name = Metal Gear Solid 3 - Snake Eater [Premium Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66915 -Name = Yu-Gi-Oh Dual Monsters GX - Tag Force Evolution +Serial = SLPM-65790 +Name = Metal Gear Solid 3 - Snake Eater Region = NTSC-J --------------------------------------------- -Serial = SLPM-66916 -Name = Jikkyou Powerful Pro Yakyuu 14 Chou Ketteiban +Serial = SLPM-65791 +Name = S.L.A.I. - Steel Lancer Arena International Region = NTSC-J --------------------------------------------- -Serial = SLPM-66917 -Name = Grand Theft Auto - Vice City Stories +Serial = SLPM-65793 +Name = SSX 3 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66918 -Name = Princess Maker 5 +Serial = SLPM-65794 +Name = Capcom Fighting Jam Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66919 -Name = Kyuuketsu Kitan Moonties +Serial = SLPM-65795 +Name = Digital Devil Saga: Avatar Tuner 2 Region = NTSC-J +EETimingHack = 1 +MemCardFilter = SCAJ-20120/SLPM-65795/SLPM-66373/SCAJ-20095/SLPM-65597/SLPM-66372 --------------------------------------------- -Serial = SLPM-66920 -Name = Hoshi Furu +Serial = SLPM-65796 +Name = Project Altered Beast Region = NTSC-J --------------------------------------------- -Serial = SLPM-66921 -Name = H2O +Serial = SLPM-65797 +Name = Dragon Quest & Final Fantasy in Itadaki Street Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66922 -Name = D.C. II P.S. - Da Capo II Plus Situation [DX Pack] +Serial = SLPM-65798 +Name = Madden NFL Superbowl 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66924 -Name = D.C. II P.S. - Da Capo II Plus Situation +Serial = SLPM-65799 +Name = New Jinsei Game Region = NTSC-J --------------------------------------------- -Serial = SLPM-66926 -Name = NiGHTS into Dreams... +Serial = SLPM-65800 +Name = Radiata Stories Region = NTSC-J -Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPM-66927 -Name = Wrestle Angels - Survivor [Good Price] +Serial = SLPM-65801 +Name = Crash Bandicoot 5 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66929 -Name = Elminage - Yami no Fujo to Kamigami no Yubiwa +Serial = SLPM-65802 +Name = Def Jam - Vendetta [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66931 -Name = Juiced 2 - Hot Import Nights +Serial = SLPM-65803 +Name = Freedom Fighters [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66932 -Name = Need for Speed - ProStreet +Serial = SLPM-65804 +Name = European Club Soccer - Winning Eleven Tactics Region = NTSC-J --------------------------------------------- -Serial = SLPM-66933 -Name = Kimi ga Aruji de Shitsuji ga Oro de - Oshie Nikki [Limited Edition] +Serial = SLPM-65805 +Name = Gojira Monster Fighter Region = NTSC-J --------------------------------------------- -Serial = SLPM-66934 -Name = Kimi ga Aruji de Shitsuji ga Oro de - Oshie Nikki +Serial = SLPM-65806 +Name = VM Japan Region = NTSC-J --------------------------------------------- -Serial = SLPM-66935 -Name = True Tears +Serial = SLPM-65807 +Name = Urbz, The - Sims in the City Region = NTSC-J --------------------------------------------- -Serial = SLPM-66936 -Name = Night Wizard - The Video Game - Denial of the World +Serial = SLPM-65808 +Name = Derby Tsuku 4 - Derby Uma o Tsukurou! Region = NTSC-J --------------------------------------------- -Serial = SLPM-66937 -Name = Jan Sangoku Musou [Koei the Best] +Serial = SLPM-65809 +Name = NanoBreaker Region = NTSC-J --------------------------------------------- -Serial = SLPM-66938 -Name = Angelique Etoile [Koei Selection] +Serial = SLPM-65810 +Name = Densha de Go! Ryojouhen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66939 -Name = Boukoku no Aegis 2035 - Warship Gunner [Koei Selection] +Serial = SLPM-65811 +Name = Zero Shikikan Josentoki [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66940 -Name = Gundam Musou Special +Serial = SLPM-65812 +Name = Bakushou! Jinsei Kaimichi [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66941 -Name = Hokuto no Ken (Fist of the North Star) [Sega the Best] +Serial = SLPM-65813 +Name = Fu-un Bakumatsu Den Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66942 -Name = Final Approach 2 - 1st Priority [First Print Limited Edition] +Serial = SLPM-65815 +Name = Tom Clancy's Splinter Cell - Pandora Tomorrow Region = NTSC-J --------------------------------------------- -Serial = SLPM-66943 -Name = Final Approach 2 - 1st Priority +Serial = SLPM-65816 +Name = Shin Bakusou Dekotora Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66944 -Name = Petit Four [Limited Edition] +Serial = SLPM-65817 +Name = Tennis no Oji-Sama - Love of Prince Sweet [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66945 -Name = Petit Four +Serial = SLPM-65818 +Name = Tennis no Oji-Sama - Love of Prince Bitter [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66946 -Name = NBA Live '07 [EA Best Hits] +Serial = SLPM-65819 +Name = Tennis no Oji-Sama - Kiss of Prince - Ice Version [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66947 -Name = Nobunaga no Yabou - Kakushin [with Power-Up Kit] +Serial = SLPM-65820 +Name = Tennis no Oji-Sama - Kiss of Prince - Flame Version [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66948 -Name = Nobunaga no Yabou - Kakushin [with Power-Up Kit and Sangokushi XI] +Serial = SLPM-65821 +Name = Shinseiki Yuusha Taisen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66950 -Name = Winning Post 7 Maximum 2008 +Serial = SLPM-65822 +Name = Ichigo 100% Strawberry Diary Region = NTSC-J --------------------------------------------- -Serial = SLPM-66952 -Name = Harukanaru Jikuu no Kade 4 +Serial = SLPM-65823 +Name = Shinsengumi Gunrou-den Region = NTSC-J --------------------------------------------- -Serial = SLPM-66953 -Name = Musou Orochi - Maou Sairin +Serial = SLPM-65824 +Name = Viewtiful Joe 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66954 -Name = Nobunaga no Yabou - Online - Souha no Shou +Serial = SLPM-65825 +Name = Jikkyou Powerful Pro Yakyuu 11 Chou Ketteiban Region = NTSC-J --------------------------------------------- -Serial = SLPM-66956 -Name = Neo Angelique - Full Voice +Serial = SLPM-65826 +Name = Tsukiyo ni Saraba Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66957 -Name = Neon Genesis Evangelion - Battle Orchestra [Broccoli Best Quality] +Serial = SLPM-65828 +Name = Angel Wish Region = NTSC-J --------------------------------------------- -Serial = SLPM-66958 -Name = Aoishiro [Limited Edition] +Serial = SLPM-65829 +Name = Ys - The Ark of Napishtim [Limited Edition] Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66959 -Name = Aoishiro +Serial = SLPM-65830 +Name = Ys - The Ark of Napishtim Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66960 -Name = Need for Speed - Underground 2 [EA-SY! 1980] +Serial = SLPM-65831 +Name = Hello Kitty no PikoPiko Daisakusen Region = NTSC-J --------------------------------------------- -Serial = SLPM-66961 -Name = Black [EA-SY! 1980] +Serial = SLPM-65832 +Name = Izumo Complete Region = NTSC-J -vuClampMode = 0 --------------------------------------------- -Serial = SLPM-66962 -Name = Burnout 3 - Takedown [EA-SY! 1980] +Serial = SLPM-65833 +Name = Harukanaru Jikuu no Naka De 2 [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66963 -Name = Medal of Honor - Frontline [EA-SY! 1980] +Serial = SLPM-65834 +Name = Harukanaru Jikuu no Naka De 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66964 -Name = Guilty Gear XX - Accent Core Plus [Append Edition] +Serial = SLPM-65835 +Name = Bakumatsu Koihana - Shinsengumi Region = NTSC-J --------------------------------------------- -Serial = SLPM-66965 -Name = Guilty Gear XX - Accent Core Plus +Serial = SLPM-65836 +Name = Ys - The Ark of Napishtim Region = NTSC-J -Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLPM-66966 -Name = Godfather, The [EA-SY! 1980] +Serial = SLPM-65837 +Name = Terminator 3 - Redemption Region = NTSC-J --------------------------------------------- -Serial = SLPM-66967 -Name = Aria: The Natural ~Tooi Yume no Mirage~ [Alchemist Best Collection] +Serial = SLPM-65838 +Name = Hanjuku Hero 4 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66968 -Name = Kamiwaza [Acquire the Best] +Serial = SLPM-65839 +Name = Hanjuku Hero 4 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-66969 -Name = Hoshigari Empusa +Serial = SLPM-65840 +Name = Wizardry X - Zensen no Gakufu Region = NTSC-J --------------------------------------------- -Serial = SLPM-66970 -Name = Pro Yakyuu Spirits 5 +Serial = SLPM-65841 +Name = Mizuiro [Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66971 -Name = Sangokushi IX [with Power-Up Kit] [Koei Selection] +Serial = SLPM-65842 +Name = Kanon [Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66972 -Name = Kurogane no Houkou 2 - Warship Commander [Koei Selection] +Serial = SLPM-65843 +Name = 120-en no Haru - 120yen Stories Region = NTSC-J --------------------------------------------- -Serial = SLPM-66973 -Name = Princess Nightmare +Serial = SLPM-65844 +Name = Air [Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66974 -Name = Slotter Up Core 10 - Mach GoGoGo +Serial = SLPM-65845 +Name = Baldur's Gate: Dark Alliance II Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPM-66977 -Name = Shinkyouku Soukai Polyphonica 0-4 Hanashi Full Pack +Serial = SLPM-65846 +Name = Lord of the Rings, The - Uchitsu Kuni Daisanki Region = NTSC-J --------------------------------------------- -Serial = SLPM-66978 -Name = Persona 4 [Konami-style Special Edition] +Serial = SLPM-65847 +Name = Soriaro no Fuukin Remix [First Print - Limited Edition] Region = NTSC-J -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-66987 -Name = Kowloon Youma Gakuen Ki [Best Version] +Serial = SLPM-65848 +Name = Soriaro no Fuukin Remix Region = NTSC-J --------------------------------------------- -Serial = SLPM-66989 -Name = Castle Fantasia - Arihato Senki [Best Version] +Serial = SLPM-65853 +Name = Let's Make a Baseball Team 3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-66990 -Name = Majommusume A La Mode II [Best Version] +Serial = SLPM-65854 +Name = Red Dead Revolver Region = NTSC-J --------------------------------------------- -Serial = SLPM-66991 -Name = Fuuraiki [Best Version] +Serial = SLPM-65855 +Name = Girls Bravo - Romance 15's [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66992 -Name = Fuuuraiki 2 [Best Version] +Serial = SLPM-65856 +Name = Girls Bravo - Romance 15's Region = NTSC-J --------------------------------------------- -Serial = SLPM-66993 -Name = Rim Runners [Best Version] +Serial = SLPM-65857 +Name = Memories Off - After Rain Vol.1 [Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66994 -Name = Mana-Khemia - Gakuen no Renkinjutsu Shitachi [Best Version] +Serial = SLPM-65858 +Name = Memories Off - After Rain Vol.1 Region = NTSC-J -DMABusyHack = 1 --------------------------------------------- -Serial = SLPM-66996 -Name = Shuumatsu Otome Gensou Alicematic Apocalypse [Limited Edition] +Serial = SLPM-65859 +Name = Junrui Sosa - Kan Pony - Eirian vs. Seirian Region = NTSC-J --------------------------------------------- -Serial = SLPM-66997 -Name = Shuumatsu Otome Gensou Alicematic Apocalypse +Serial = SLPM-65860 +Name = Shinki Genso Spectral Souls II [Premium Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-66998 -Name = Fushigi Yuugi - Suzaku Ibun [Limited Edition] +Serial = SLPM-65861 +Name = Shinki Genso Spectral Souls II Region = NTSC-J --------------------------------------------- -Serial = SLPM-66999 -Name = Fushigi Yuugi - Suzaku Ibun +Serial = SLPM-65862 +Name = Pyua Pyua Mimi Toshippono Monogatari Region = NTSC-J --------------------------------------------- -Serial = SLPM-67000 -Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo [IF Collection] +Serial = SLPM-65863 +Name = D1 Grand Prix Series - Professional Drift Region = NTSC-J --------------------------------------------- -Serial = SLPM-67002 -Name = Metal Gear Solid 2 - Substance +Serial = SLPM-65864 +Name = Nobunaga no Yabou - Tenka Sousei [with Power-Up Kit] Region = NTSC-J --------------------------------------------- -Serial = SLPM-67003 -Name = Sakura Taisen - Atsuki Chishioni +Serial = SLPM-65866 +Name = Izuku e Iku no, Anohi Region = NTSC-J --------------------------------------------- -Serial = SLPM-67004 -Name = Medal of Honor - Rising Sun +Serial = SLPM-65867 +Name = Shinseiki Evangelion - Koutetsu no Girlfriend 2nd Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-67005 -Name = Lord of the Rings, The - The Return of the King +Serial = SLPM-65868 +Name = Metal Saga - Chain of Cloud Region = NTSC-J +DMABusyHack = 1 //intro fmv --------------------------------------------- -Serial = SLPM-67006 -Name = Train Simulator - Kyushu Shinkansen +Serial = SLPM-65869 +Name = Monster Hunter G Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-67007 -Name = Train Simulator - Keisei Toei Keikyu +Serial = SLPM-65870 +Name = Magic Teacher Negima - Honor Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-67008 -Name = Metal Gear Solid 2 - Substance [Konami Dendou Collection] +Serial = SLPM-65871 +Name = Magic Teacher Negima - Scholarship Version Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-67009 -Name = Sakura Taisen V - Saraba Itoshiki Hito Yo +Serial = SLPM-65872 +Name = Simple 2000 Series Ultimate Vol.24 - Makai Tensei Region = NTSC-J --------------------------------------------- -Serial = SLPM-67010 -Name = God of War +Serial = SLPM-65873 +Name = Simple 2000 Series Ultimate Vol.23 - Project Minerva Professional Region = NTSC-J --------------------------------------------- -Serial = SLPM-67011 -Name = God of War [CapKore] +Serial = SLPM-65874 +Name = Simple 2000 Series Vol.71 - The Fantasy Renai Adventure - Kanojo no Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPM-67012 -Name = God of War [Best Price] +Serial = SLPM-65875 +Name = Growlanser IV - Wayfarer of the Time [Atlus The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-67013 -Name = God of War II - The End Begins +Serial = SLPM-65876 +Name = Busin 0: Wizardry Alternative Neo [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-67015 -Name = School Days LxH +Serial = SLPM-65878 +Name = Galaxy Angel - Eternal Lovers Region = NTSC-J --------------------------------------------- -Serial = SLPM-67502 -Name = Devil May Cry -Region = NTSC-K -Compat = 5 ---------------------------------------------- -Serial = SLPM-67507 -Name = Onimusha Warlords -Region = NTSC-K +Serial = SLPM-65879 +Name = C1 Grand Prix Racing Battle +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67508 -Name = Gitaroo Man -Region = NTSC-K +Serial = SLPM-65880 +Name = Devil May Cry 3 +Region = NTSC-J Compat = 5 -eeRoundMode = 1 -vuRoundMode = 3 ---------------------------------------------- -Serial = SLPM-67513 -Name = Final Fantasy X International -Region = NTSC-K -IPUWaitHack = 1 ---------------------------------------------- -Serial = SLPM-67514 -Name = Kessen -Region = NTSC-K +eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-67518 -Name = Onimusha 2 Samurai's Destiny -Region = NTSC-K +Serial = SLPM-65881 +Name = SmackDown vs. Raw - Exciting Professional Wrestling 6 +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67524 -Name = Armored Core 3 -Region = NTSC-K +Serial = SLPM-65882 +Name = Duel Masters +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67528 -Name = Hajime no Ippo - Victorious Boxers [Championship Edition] -Region = NTSC-K +Serial = SLPM-65883 +Name = Shadow of Rome +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67529 -Name = Gun Survivor 3 Dino Crisis -Region = NTSC-K +Serial = SLPM-65884 +Name = Remote Control Dandy SF +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67531 -Name = Kessen 2 -Region = NTSC-K +Serial = SLPM-65885 +Name = Rumble Roses +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67535 -Name = Memories Of -Region = NTSC-J-K +Serial = SLPM-65886 +Name = Guisard Revolution +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67536 -Name = Senkaiden Hoshin Engi -Region = NTSC-K +Serial = SLPM-65887 +Name = Like Life an Hour +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67540 -Name = Auto Modellista -Region = NTSC-K +Serial = SLPM-65888 +Name = Dragon Quest VIII +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPM-67546 -Name = Lord of the Rings - The Two Towers -Region = NTSC-K +Serial = SLPM-65889 +Name = Kazoku Keikaku - Kokoro no Kizuna +Region = NTSC-J --------------------------------------------- -Serial = SLPM-64549 -Name = Shikigami no Shiro -Region = NTSC-K +Serial = SLPM-65890 +Name = Shin Sangoku Musou 4 +Region = NTSC-J --------------------------------------------- -Serial = SLPM-67552 -Name = Tomak - Save the Earth Again [Complete Edition] -Region = NTSC-K +Serial = SLPM-65891 +Name = Sangokushi X +Region = NTSC-J --------------------------------------------- -Serial = SLPM-68018 -Name = Virtua Fighter - 10th Anniversary Edition +Serial = SLPM-65892 +Name = Zill O'll Infinite Region = NTSC-J --------------------------------------------- -Serial = SLPM-68503 -Name = Metal Gear Solid 2 - Sons of Liberty [Shareholder Edition] +Serial = SLPM-65894 +Name = Winning Post 6 - 2005 Version Region = NTSC-J --------------------------------------------- -Serial = SLPM-68504 -Name = Tokimeki Memorial 3 - Special Sound Track +Serial = SLPM-65896 +Name = Tsuki wa Kirisaku Region = NTSC-J --------------------------------------------- -Serial = SLPM-68513 -Name = DragonBall Z - Budokai 2 V +Serial = SLPM-65897 +Name = C1 Grand Prix Racing Battle Region = NTSC-J --------------------------------------------- -Serial = SLPM-68516 -Name = Metal Gear Solid 3 - Snake Eater [Shareholder Edition] +Serial = SLPM-65898 +Name = Castle Fantasia [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74001 -Name = Gungriffon Blaze [PlayStation 2 The Best] +Serial = SLPM-65899 +Name = Castle Fantasia Region = NTSC-J --------------------------------------------- -Serial = SLPM-74002 -Name = Shin Sangoku Musou [PlayStation 2 The Best] +Serial = SLPM-65900 +Name = Sakura Taisen 3 - Remake Region = NTSC-J +Compat = 2 --------------------------------------------- -Serial = SLPM-74003 -Name = Crash Bandikoot 4 - Saikuretsu [PlayStation 2 The Best] +Serial = SLPM-65901 +Name = Shark Tale Region = NTSC-J --------------------------------------------- -Serial = SLPM-74004 -Name = Maximo - Ghosts to Glory [PlayStation 2 The Best] +Serial = SLPM-65902 +Name = Memories Off - After Rain Vol.2 Souen [Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74005 -Name = Romance of the Three Kingdoms VII [PlayStation 2 The Best] +Serial = SLPM-65903 +Name = Memories Off - After Rain Vol.2 Souen Region = NTSC-J --------------------------------------------- -Serial = SLPM-74006 -Name = Rez [PlayStation 2 The Best] +Serial = SLPM-65904 +Name = Baldr Force EXE Region = NTSC-J --------------------------------------------- -Serial = SLPM-74007 -Name = Busin: Wizardry Alternative [PlayStation 2 The Best] +Serial = SLPM-65906 +Name = Sakura Taisen 3 - Remake Region = NTSC-J --------------------------------------------- -Serial = SLPM-74044 -Name = Space Channel 5 - Part 2 [PlayStation 2 The Best] +Serial = SLPM-65907 +Name = Def Jam Fight for NY Region = NTSC-J --------------------------------------------- -Serial = SLPM-74101 -Name = Bomberman Land 2 [PlayStation 2 The Best] +Serial = SLPM-65908 +Name = Shining Force Neo Region = NTSC-J --------------------------------------------- -Serial = SLPM-74102 -Name = Momotaro Densetsu 12 [PlayStation 2 The Best] +Serial = SLPM-65909 +Name = Super Monkey Ball Deluxe Region = NTSC-J --------------------------------------------- -Serial = SLPM-74103 -Name = Momotaro Dentetsu USA [PlayStation 2 The Best] +Serial = SLPM-65910 +Name = Cafe Lindbergh - Summer Season [Sweet Box] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74104 -Name = Momotarou Densetsu 15 [PlayStation 2 The Best] +Serial = SLPM-65911 +Name = Cafe Lindbergh - Summer Season Region = NTSC-J --------------------------------------------- -Serial = SLPM-74201 -Name = Biohazard Outbreak [PlayStation 2 The Best] +Serial = SLPM-65912 +Name = Boboboubo Boubobo [Hudson the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74202 -Name = Fuun Shinsengumi [PlayStation 2 The Best] +Serial = SLPM-65913 +Name = Demento Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74204 -Name = Shutokou Battle 01 [PlayStation 2 The Best] +Serial = SLPM-65914 +Name = Nana Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74205 -Name = Shin Megami Tensei III: Nocturne [PlayStation 2 The Best] +Serial = SLPM-65915 +Name = Fallout - Brotherhood of Steel Region = NTSC-J -eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPM-74206 -Name = Onimusha [PlayStation 2 The Best] +Serial = SLPM-65916 +Name = Harukanaru Jikuu no Kade - Hachiha Katsunori Region = NTSC-J --------------------------------------------- -Serial = SLPM-74208 -Name = Tengai Makyou 2 - Manjimaru [PlayStation 2 The Best] +Serial = SLPM-65917 +Name = Transformers Tatakai [The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74209 -Name = Samurai Michi 2 [PlayStation 2 The Best] +Serial = SLPM-65918 +Name = Dear My Love - Love Like Powdery Snow Region = NTSC-J --------------------------------------------- -Serial = SLPM-74210 -Name = Puyo Puyo Fever [PlayStation 2 The Best] +Serial = SLPM-65919 +Name = Rumble Fish, The Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74211 -Name = Shutokou Battle 0 [PlayStation 2 The Best] +Serial = SLPM-65920 +Name = Romancing SaGa - Minstrel Song Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74212 -Name = Sengoku Musou [PlayStation 2 The Best] +Serial = SLPM-65921 +Name = Pia Carrot e Youkoso!! 3 [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74215 -Name = Shin Sangoku Musou 3 [PlayStation 2 The Best] +Serial = SLPM-65922 +Name = Aikagi [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74218 -Name = Shining Tears [PlayStation 2 The Best] +Serial = SLPM-65923 +Name = Canvas [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74219 -Name = Shin Sangoku Musou 3 - Empires [PlayStation 2 The Best] +Serial = SLPM-65924 +Name = Kono Haretasora no Shita de [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74220 -Name = Kengo 3 [PlayStation 2 The Best] +Serial = SLPM-65925 +Name = Kono Haretasora no Shita de Region = NTSC-J --------------------------------------------- -Serial = SLPM-74221 -Name = Kenka Banchou [PlayStation 2 The Best] +Serial = SLPM-65926 +Name = Y's IV - Mask of the Sun - A New Theory Region = NTSC-J +eeClampMode = 3 --------------------------------------------- -Serial = SLPM-74222 -Name = Samurai Kanzenban [PlayStation 2 The Best] +Serial = SLPM-65927 +Name = Forgotten Realms - Demon Stone Region = NTSC-J --------------------------------------------- -Serial = SLPM-74224 -Name = Sengoku Musou Moushouden [PlayStation 2 The Best] +Serial = SLPM-65928 +Name = SuperLite 2000 Series - Memories Off Mix Region = NTSC-J --------------------------------------------- -Serial = SLPM-74225 -Name = Nobunaga no Yabou - Tenka Sousei [PlayStation 2 The Best] +Serial = SLPM-65929 +Name = Pro Baseball Spirits 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-74226 -Name = Metal Saga - Sajin no Kusari [PlayStation 2 The Best] +Serial = SLPM-65930 +Name = EVE - Burst Error Plus [GameBridge The Best] Region = NTSC-J -DMABusyHack = 1 //intro fmv --------------------------------------------- -Serial = SLPM-74227 -Name = Ikusa Gami [PlayStation 2 The Best] +Serial = SLPM-65931 +Name = Shinseiki Genso - Spectral Souls [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74228 -Name = Fuun Bakumatsu-den [PlayStation 2 The Best] +Serial = SLPM-65932 +Name = Sento Country Kai - New Operation [with Bonus DVD] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74229 -Name = BioHazard 4 [PlayStation 2 The Best] +Serial = SLPM-65934 +Name = Maple Colors Region = NTSC-J --------------------------------------------- -Serial = SLPM-74230 -Name = Devil May Cry [PlayStation 2 The Best] +Serial = SLPM-65935 +Name = Princess Maker 4 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74231 -Name = Kessen III [PlayStation 2 The Best] +Serial = SLPM-65936 +Name = Princess Maker 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-74232 -Name = Shin Onimusha - Dawn of Dreams [PlayStation 2 The Best] +Serial = SLPM-65937 +Name = Siekai no Senki Region = NTSC-J --------------------------------------------- -Serial = SLPM-74234 -Name = Ryu Ga Gotoku [PlayStation 2 The Best] +Serial = SLPM-65938 +Name = Memories Off - After Rain Vol.3 [Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74235 -Name = Sengoku Musou [PlayStation 2 The Best] +Serial = SLPM-65939 +Name = Memories Off - After Rain Vol.3 Region = NTSC-J --------------------------------------------- -Serial = SLPM-74236 -Name = Shin Sangoku Musou 4 [PlayStation 2 The Best] +Serial = SLPM-65941 +Name = Mabino Style Region = NTSC-J --------------------------------------------- -Serial = SLPM-74237 -Name = New Jinsei Game [PlayStation 2 The Best] +Serial = SLPM-65942 +Name = Mercenaries Region = NTSC-J --------------------------------------------- -Serial = SLPM-74238 -Name = Genso Suikoden V [PlayStation 2 The Best] +Serial = SLPM-65943 +Name = Angel's Feather Region = NTSC-J --------------------------------------------- -Serial = SLPM-74239 -Name = Okami [PlayStation 2 The Best] +Serial = SLPM-65944 +Name = Detective Saburou Jinguiji 9 - Kind of Blue [Workjam Best Collection - Vol.2] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74240 -Name = Tengai Makyou III - Namida [Best Version] +Serial = SLPM-65945 +Name = Red Ninja - End of Honor Region = NTSC-J --------------------------------------------- -Serial = SLPM-74241 -Name = God Hand [PlayStation 2 The Best] +Serial = SLPM-65946 +Name = Beatmania IIDX - 9th Style Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74242 -Name = Devil May Cry 3 [Special Edition] [PlayStation 2 The Best] +Serial = SLPM-65947 +Name = Killer 7 Region = NTSC-J -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-74243 -Name = True Crime - New York City [PlayStation 2 The Best] +Serial = SLPM-65948 +Name = Enthusia Professional Racing Region = NTSC-J +eeClampMode = 3 --------------------------------------------- -Serial = SLPM-74244 -Name = Phantasy Star Universe [PlayStation 2 The Best] +Serial = SLPM-65949 +Name = Get Ride! AM Driver - The Truth of Xiangke Region = NTSC-J -eeRoundMode = 0 --------------------------------------------- -Serial = SLPM-74245 -Name = Monster Hunter 2 [PlayStation 2 The Best] +Serial = SLPM-65950 +Name = Gantz - The Game Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74246 -Name = Capcom vs. SNK 2 - Millionaire Fighting 2001 [PlayStation 2 the Best - Reprint] +Serial = SLPM-65951 +Name = Tom Clancy's Ghost Recon 2 Region = NTSC-J --------------------------------------------- -Serial = SLPM-74247 -Name = Sengoku Musou 2 [PlayStation 2 The Best] +Serial = SLPM-65952 +Name = Tengai Makyou III - Namida Region = NTSC-J --------------------------------------------- -Serial = SLPM-74248 -Name = Monster Hunter G [PlayStation 2 The Best] +Serial = SLPM-65953 +Name = Final Fantasy XI [Entry Disc 2005] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74249 -Name = Sengoku Musou Moushouden [PlayStation 2 The Best] +Serial = SLPM-65954 +Name = Tom Clancy's Ghost Recon [Ubisoft Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74250 -Name = Shin Sangoku Musou 4 Moushouden [PlayStation 2 The Best] +Serial = SLPM-65955 +Name = Tom Clancy's Splinter Cell [Ubisoft Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74251 -Name = Shin Onimusha - Dawn of Dreams [PlayStation 2 the Best - Reprint Disc 1] +Serial = SLPM-65957 +Name = Harukanaru Jikuu no Kade Hachiha Katsunori Region = NTSC-J --------------------------------------------- -Serial = SLPM-74252 -Name = Shin Onimusha - Dawn of Dreams [Playstation 2 the Best - Reprint Disc 2] +Serial = SLPM-65958 +Name = Burnout 3 - Takedown [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74253 -Name = Ryu ga Gotoku [PlayStation 2 the Best - Reprint] +Serial = SLPM-65959 +Name = Standard Daisenryoku - Shiwareta Shouri Region = NTSC-J --------------------------------------------- -Serial = SLPM-74254 -Name = EX Jinsei Game II [PlayStation 2 the Best - Reprint] +Serial = SLPM-65960 +Name = North Wind Promise Forever [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74259 -Name = Odin Sphere [PlayStation 2 The Best] +Serial = SLPM-65961 +Name = North Wind Promise Forever Region = NTSC-J --------------------------------------------- -Serial = SLPM-74265 -Name = Nobunaga no Yabou: Kakushin [PlayStation 2 The Best] +Serial = SLPM-65962 +Name = Home Maid - Owari no Tachi [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74276 -Name = Sangoku Musou 2 [PlayStation 2 The Best] +Serial = SLPM-65963 +Name = Home Maid - Owari no Tachi Region = NTSC-J --------------------------------------------- -Serial = SLPM-74277 -Name = Persona 3 FES [PlayStation 2 The Best] +Serial = SLPM-65964 +Name = Magical Tale - Chitchana Mahoutsukai [Limited Edition] Region = NTSC-J -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-74278 -Name = Persona 4 [PlayStation 2 The Best] +Serial = SLPM-65965 +Name = Magical Tale - Chitchana Mahoutsukai Region = NTSC-J -VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPM-74286 -Name = Shin Sangoku Musou 5 Special [PlayStation 2 The Best] +Serial = SLPM-65966 +Name = Spectral Force Chronicle [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74301 -Name = Ryu ga Gotoku 2 [PlayStation 2 The Best] +Serial = SLPM-65967 +Name = Spectral Force Chronicle Region = NTSC-J --------------------------------------------- -Serial = SLPM-74402 -Name = Capcom vs. SNK 2 [PlayStation 2 The Best] +Serial = SLPM-65968 +Name = Lovely Doll - Lovely Idol [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74403 -Name = Densha de Go! Shinkansen [PlayStation 2 The Best] +Serial = SLPM-65969 +Name = Lovely Doll - Lovely Idol Region = NTSC-J --------------------------------------------- -Serial = SLPM-74404 -Name = Space Channel 5 - Part 2 [PlayStation 2 The Best] +Serial = SLPM-65970 +Name = Kappa no Kai-Kata - How to Breed Kappas [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74405 -Name = Samurai Complete Edition [PlayStation 2 The Best] +Serial = SLPM-65971 +Name = Soshite Bokura wa... and He Said Region = NTSC-J --------------------------------------------- -Serial = SLPM-74406 -Name = WRC - World Rally Chanpionship [PlayStation 2 The Best] +Serial = SLPM-65972 +Name = Constantine Region = NTSC-J --------------------------------------------- -Serial = SLPM-74407 -Name = Jet de Go! 2 [PlayStation 2 The Best] +Serial = SLPM-65973 +Name = Mirai Shounen Conan Region = NTSC-J --------------------------------------------- -Serial = SLPM-74408 -Name = Rakugaki Kingdom [PlayStation 2 The Best] +Serial = SLPM-65974 +Name = Kenka Banchou Region = NTSC-J --------------------------------------------- -Serial = SLPM-74409 -Name = Gun Survivor 2 - Biohazard Code - Veronica [PlayStation 2 The Best] +Serial = SLPM-65975 +Name = World Rally Championship 4 Region = NTSC-J --------------------------------------------- -Serial = SLPM-74410 -Name = Breath of Fire V: Dragon Quarter [PlayStation 2 The Best] +Serial = SLPM-65976 +Name = Grandia III [Disc1of2] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74411 -Name = Culdcelt II - Expansion [PlayStation 2 The Best] +Serial = SLPM-65977 +Name = Grandia III [Disc2of2] Region = NTSC-J +Compat = 5 +MemCardFilter = SLPM-65976 --------------------------------------------- -Serial = SLPM-74412 -Name = Kengo 2 [PlayStation 2 The Best] +Serial = SLPM-65978 +Name = Kurogane no Houkou 2 - Warship Gunner [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74414 -Name = Energy Airforce +Serial = SLPM-65980 +Name = Dream Mix TV World Fighters [Hudson the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPM-74415 -Name = Shinobi [PlayStation 2 The Best] +Serial = SLPM-65981 +Name = Front Mission Online Region = NTSC-J --------------------------------------------- -Serial = SLPM-74416 -Name = Clock Tower 3 +Serial = SLPM-65982 +Name = Tokyo Bus Guide 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPM-74420 -Name = Initial D - Street Stage [PlayStation 2 The Best] +Serial = SLPM-65984 +Name = Grand Theft Auto - San Andreas Region = NTSC-J --------------------------------------------- -Serial = SLPM-74421 -Name = Virtual On - Marz [PlayStation 2 The Best] +Serial = SLPM-65985 +Name = Iris no Atelier: Eternal Mana 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20001 -Name = Ridge Racer V +Serial = SLPM-65986 +Name = Quartett! The Stage of Love [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20002 -Name = Doukyu Billiards +Serial = SLPM-65987 +Name = Quartett! The Stage of Love Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-20003 -Name = Street Fighter EX3 +Serial = SLPM-65988 +Name = Shoujo Yoshitsune Den 2 [Premium Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20005 -Name = EX Billiards +Serial = SLPM-65989 +Name = Shoujo Yoshitsune Den 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20006 -Name = A-Train 6 +Serial = SLPM-65990 +Name = Neo Contra [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20007 -Name = Driving Emotion Type S +Serial = SLPM-65991 +Name = Anubis: Zone of the Enders Special Edition [Konami Dendou Collection] Region = NTSC-J -Compat = 4 -EETimingHack = 1 //Garbage in FMVs. --------------------------------------------- -Serial = SLPS-20009 -Name = Golf Paradise +Serial = SLPM-65994 +Name = Remember 11 - The Age of Infinity [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20010 -Name = Pro Baseball Gekikuukan +Serial = SLPM-65995 +Name = Dog's Life Region = NTSC-J --------------------------------------------- -Serial = SLPS-20011 -Name = American Arcade +Serial = SLPM-65996 +Name = Mars of Destruction [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20012 -Name = Sky Surfer +Serial = SLPM-65997 +Name = Mars of Destruction Region = NTSC-J --------------------------------------------- -Serial = SLPS-20013 -Name = Primal Image Vol.01 +Serial = SLPM-65998 +Name = Vampire Darkstalkers Collection Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20015 -Name = Tekken Tag Tournament +Serial = SLPM-65999 +Name = Drag-on Dragoon 2 - Fuuin no Kurenai Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20016 -Name = Dream Audition +Serial = SLPM-66000 +Name = Conflict Delta II - Gulf War 1991 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20017 -Name = Street Mahjong Trance 2 +Serial = SLPM-66001 +Name = Chocolat - Maid Cafe Curio Region = NTSC-J --------------------------------------------- -Serial = SLPS-20018 -Name = Stepping Selection [Disc1of2] +Serial = SLPM-66002 +Name = Prince of Persia - Warrior Within Region = NTSC-J --------------------------------------------- -Serial = SLPS-20019 -Name = Stepping Selection [Disc2of2] +Serial = SLPM-66006 +Name = Angelique Trois - Aizouhen [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20020 -Name = FIFA 2000 World Championship +Serial = SLPM-66007 +Name = Zoids Tactics Region = NTSC-J --------------------------------------------- -Serial = SLPS-20021 -Name = Wild Wild Racing +Serial = SLPM-66008 +Name = Musashiden II - Blademaster Region = NTSC-J --------------------------------------------- -Serial = SLPS-20022 -Name = All-Star Pro Wrestling +Serial = SLPM-66009 +Name = World Soccer Winning Eleven 9 - Bonus Pack Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20023 -Name = Cross Fire +Serial = SLPM-66010 +Name = Tennis no Oji-Sama - Smash-Hit! [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20024 -Name = Hresvelgr +Serial = SLPM-66011 +Name = Tennis no Oji-Sama - Smash-Hit! 2 [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20025 -Name = SSX - Snowboard Supercross +Serial = SLPM-66012 +Name = Tennis no Oji-Sama - Sweat & Tears 2 [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20027 -Name = Aquaqua +Serial = SLPM-66013 +Name = Tennis no Oji-Sama - Form the Strongest Team [Konami Palace Selection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20028 -Name = Game Select 5 +Serial = SLPM-66014 +Name = Tennis no Oji-Sama - Rush & Dream [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20029 -Name = Surfroid +Serial = SLPM-66015 +Name = SuperLite 2000 Series - Ever 17 - The Out of Infinity [Premium Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20031 -Name = Mechsmith, The - Run-Dim +Serial = SLPM-66016 +Name = Jissen Pachi-Slot Hisshouhou! Onimusha 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20033 -Name = Gungriffon Blaze +Serial = SLPM-66018 +Name = Silent Hill 3 [Konami Dendou Collection] Region = NTSC-J +MemCardFilter = SLPM-65257/SLPM-65622/SLPM-66018/SLPM-65051/SLPM-65098/SLPM-65341/SLPM-65631 --------------------------------------------- -Serial = SLPS-20034 -Name = Velvet File +Serial = SLPM-66019 +Name = Stuntman Region = NTSC-J --------------------------------------------- -Serial = SLPS-20035 -Name = Pro Mahjong Kiwame Next +Serial = SLPM-66020 +Name = Psi-Ops - The Mindgate Conspiracy Region = NTSC-J --------------------------------------------- -Serial = SLPS-20036 -Name = Magical Sports - 2000 Koushien +Serial = SLPM-66021 +Name = NBA Street v3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20037 -Name = Magical Sports - Go Go Golf +Serial = SLPM-66022 +Name = Kaido Touge no Densetsu Region = NTSC-J --------------------------------------------- -Serial = SLPS-20038 -Name = Grappler Baki - Baki Saidai no Tournament +Serial = SLPM-66023 +Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20040 -Name = Moto GP +Serial = SLPM-66024 +Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo Region = NTSC-J --------------------------------------------- -Serial = SLPS-20041 -Name = Mahjong Goku Taisei +Serial = SLPM-66025 +Name = Generation of Chaos IV [Idea Factory Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20042 -Name = F1 Racing Championship +Serial = SLPM-66026 +Name = Honotomi - First Kiss [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20043 -Name = Lake Masters Fishing EX +Serial = SLPM-66027 +Name = Honotomi - First Kiss Region = NTSC-J --------------------------------------------- -Serial = SLPS-20044 -Name = F1 Championship Season 2000 +Serial = SLPM-66028 +Name = Ururun Quest Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20047 -Name = Toudai Shogi +Serial = SLPM-66029 +Name = Realize - Panorama Luminary Region = NTSC-J --------------------------------------------- -Serial = SLPS-20048 -Name = Sim Theme Park +Serial = SLPM-66030 +Name = Heavy Metal Thunder Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20050 -Name = Happy! Happy!! Boarders +Serial = SLPM-66031 +Name = Phantasy Star Universe Region = NTSC-J +eeRoundMode = 0 --------------------------------------------- -Serial = SLPS-20051 -Name = Hissatsu Pachinko Station V +Serial = SLPM-66032 +Name = Silent Hill 4 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20052 -Name = Global Folktale +Serial = SLPM-66033 +Name = Oz Region = NTSC-J --------------------------------------------- -Serial = SLPS-20053 -Name = Tenshi no Present - Marle Oukoku Monogatari +Serial = SLPM-66034 +Name = Grand Theft Auto - Vice City Region = NTSC-J --------------------------------------------- -Serial = SLPS-20054 -Name = FIFA World Championship 2001 +Serial = SLPM-66035 +Name = Kenka Banchou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20055 -Name = Technictix +Serial = SLPM-66038 +Name = Georama Sensen Ijou Nashi Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20057 -Name = Dog of Bay +Serial = SLPM-66039 +Name = SuperLite 2000 Series - Memories Off... Sorekara Region = NTSC-J --------------------------------------------- -Serial = SLPS-20058 -Name = Kengo +Serial = SLPM-66040 +Name = Edo Mono Region = NTSC-J --------------------------------------------- -Serial = SLPS-20059 -Name = Hresvelgr [International Edition] +Serial = SLPM-66041 +Name = Shoujo Yoshitsune Den [WellMADE The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20060 -Name = Dream Audition 2 +Serial = SLPM-66042 +Name = Brothers in Arms: Road to Hill 30 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20062 -Name = Truck Kyousokyoku +Serial = SLPM-66043 +Name = Racing Game - Chuui! Region = NTSC-J --------------------------------------------- -Serial = SLPS-20064 -Name = Top Gear Daredevil +Serial = SLPM-66044 +Name = MVP Baseball 2005 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20065 -Name = Madden NFL 2001 +Serial = SLPM-66045 +Name = My Merry May with be Region = NTSC-J --------------------------------------------- -Serial = SLPS-20066 -Name = Rhapsody 3 - Tenshi no Present - The Marl Kingdom Stories +Serial = SLPM-66046 +Name = Star Wars - Episode III - Revenge of the Sith Region = NTSC-J --------------------------------------------- -Serial = SLPS-20067 -Name = Crazy Bumps +Serial = SLPM-66047 +Name = FIFA Street Region = NTSC-J --------------------------------------------- -Serial = SLPS-20068 -Name = Midnight Club - Street Racing +Serial = SLPM-66049 +Name = D.C.P.S. - Da Capo Plus Situation [Kadokawa the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20071 -Name = Game Select 5 +Serial = SLPM-66050 +Name = Daisan Teikoku Koubouki II - Aufstieg und Fall des Dritten Reich Region = NTSC-J --------------------------------------------- -Serial = SLPS-20072 -Name = Real Robots Regiment +Serial = SLPM-66051 +Name = Need for Speed Underground 2 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20073 -Name = NBA Live 2001 +Serial = SLPM-66052 +Name = Miko Mai - Eien no Omoi Region = NTSC-J --------------------------------------------- -Serial = SLPS-20078 -Name = Generation of Chaos +Serial = SLPM-66053 +Name = Dokapon DX [Asmik Ace Best Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20082 -Name = Saikyou Toudai Shogi 3 [Mycom Best] +Serial = SLPM-66054 +Name = Generation of Chaos 5 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20083 -Name = Air Ranger Rescue Helicopter +Serial = SLPM-66055 +Name = Generation of Chaos 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20084 -Name = Basic Studio [Disc 1] +Serial = SLPM-66056 +Name = Mushihime Sama Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20085 -Name = Basic Studio [Disc 2] +Serial = SLPM-66057 +Name = Taito Memories Vol.1 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20086 -Name = Generation of Chaos [Limited Edition] +Serial = SLPM-66058 +Name = Sengoku Basara Region = NTSC-J --------------------------------------------- -Serial = SLPS-20087 -Name = Generation of Chaos +Serial = SLPM-66059 +Name = Robots Region = NTSC-J --------------------------------------------- -Serial = SLPS-20089 -Name = Gun-Heats +Serial = SLPM-66060 +Name = Boukoku no Aegis 2035 - Warship Gunner Region = NTSC-J --------------------------------------------- -Serial = SLPS-20091 -Name = Gekisha Boy 2 +Serial = SLPM-66061 +Name = Jikkyou Powerful Pro Baseball 12 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20092 -Name = Tiger Woods PGA Tour 2001 +Serial = SLPM-66062 +Name = Mahou Sensei Negima! Gold Medal Region = NTSC-J --------------------------------------------- -Serial = SLPS-20094 -Name = Shinseiki Evangelion - Typing Project-E [TVware Information Revolution Series] +Serial = SLPM-66063 +Name = Mahou Sensei Negima! Silver Medal Region = NTSC-J --------------------------------------------- -Serial = SLPS-20095 -Name = Knockout Kings 2001 +Serial = SLPM-66064 +Name = Tough - Dark Fight Region = NTSC-J --------------------------------------------- -Serial = SLPS-20097 -Name = Magical Sports - Koshien +Serial = SLPM-66065 +Name = Pop'n Music 11 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20098 -Name = Magical Sports - Hard Hitter +Serial = SLPM-66068 +Name = Richard Burns Rally Region = NTSC-J --------------------------------------------- -Serial = SLPS-20100 -Name = Tetsu-One Train Battle +Serial = SLPM-66069 +Name = Shikigami no Shiro - Nanayozuki Gensoukyoku Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20101 -Name = City Crisis +Serial = SLPM-66070 +Name = Shadow Hearts - From the New World [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20102 -Name = Pachinko Paradise 6 +Serial = SLPM-66071 +Name = Shadow Hearts - From the New World Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20103 -Name = Lake Masters EX Super +Serial = SLPM-66072 +Name = Fight Night Round 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20104 -Name = Bokujou Monogatari 3 +Serial = SLPM-66073 +Name = Hagane no Renkinjutsushi 3 - Kami o Tsugu Shoujo Region = NTSC-J --------------------------------------------- -Serial = SLPS-20105 -Name = Growlanser II - The Sense of Justice [Deluxe Pack] +Serial = SLPM-66074 +Name = Sonic Gems Collection Region = NTSC-J -Compat = 4 +Compat = 5 +MemCardFilter = SLPM-66074/SLPM-65758/SLAJ-25027/SLPM-65431 --------------------------------------------- -Serial = SLPS-20106 -Name = Growlanser II - The Sense of Justice +Serial = SLPM-66076 +Name = Meine Liebe - Yuubinaru kioku [Konami the Best] Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-20108 -Name = Quake III - Revolution +Serial = SLPM-66077 +Name = K-1 World Max 2005 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20111 -Name = Magical Sports - Pro Baseball 2001 +Serial = SLPM-66078 +Name = White Princess the Second Region = NTSC-J --------------------------------------------- -Serial = SLPS-20112 -Name = Hissatsu Pachinko Station v2.0 +Serial = SLPM-66080 +Name = Generation of Chaos 3 [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20113 -Name = Time Crisis II [with Guncon 2] +Serial = SLPM-66081 +Name = Iris no Atelier: Eternal Mana [Gust Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20120 -Name = Formula One 2001 +Serial = SLPM-66082 +Name = Fire Pro Wrestling Returns Region = NTSC-J --------------------------------------------- -Serial = SLPS-20121 -Name = Kanon +Serial = SLPM-66084 +Name = Ramune - Garasu-Bin ni Uturu Umi Region = NTSC-J --------------------------------------------- -Serial = SLPS-20122 -Name = Time Crisis II +Serial = SLPM-66085 +Name = Rumble Roses [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20125 -Name = Shanghai - The Four Elements [Super Value 2800] +Serial = SLPM-66086 +Name = Gokujou Seitokai Region = NTSC-J --------------------------------------------- -Serial = SLPS-20128 -Name = Toshiyuki Morikawa Private Collection - Puppet Princess of Marl's Kingdom +Serial = SLPM-66087 +Name = Winning Post 7 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20130 -Name = New Best Play Professional Baseball +Serial = SLPM-66089 +Name = 3-Nen B-Gumi Kinpachi Sensei - Densetsu no Kyoudan ni Tate! [Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20132 -Name = Chenuen no San Goku Shi (Chen Wen's Romance of the Three Kingdoms) +Serial = SLPM-66090 +Name = Crash Tag Team Wrestling Region = NTSC-J --------------------------------------------- -Serial = SLPS-20136 -Name = Guilty Gear X Plus [DX Pack] +Serial = SLPM-66091 +Name = Shinobido Imashime Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-20137 -Name = Guilty Gear X Plus +Serial = SLPM-66092 +Name = Taito Memories Gekan Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20139 -Name = All Star Pro-Wrestling II +Serial = SLPM-66093 +Name = Kessen II [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20143 -Name = RPG Tsukuru 5 +Serial = SLPM-66094 +Name = Shin Sangoku Musou 2 [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20144 -Name = Seed, The +Serial = SLPM-66096 +Name = Shin Sangoku Musou 2 - Mushouden [Koei Selection Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20150 -Name = Akira Psycho Ball +Serial = SLPM-66097 +Name = Shinseiki Evangelion - Ayanami Ikusai Keikaku with Asuka Hokan Keikaku [Broccoli Best Quality] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20161 -Name = Saikyou Toudai Shogi Special +Serial = SLPM-66098 +Name = True Crime - Streets of L.A. [CapKore] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20162 -Name = Typing Kengo 634 [with Keyboard] +Serial = SLPM-66100 +Name = Harukanaru Jikuu no Kade 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20163 -Name = Typing Kengo 634 +Serial = SLPM-66101 +Name = Shin Sangoku Musou 4 - Moushouden Region = NTSC-J --------------------------------------------- -Serial = SLPS-20165 -Name = La Pucelle +Serial = SLPM-66102 +Name = Zwei!! [Taito the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20167 -Name = La Pucelle +Serial = SLPM-66103 +Name = WRC 3 [Spike the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20171 -Name = Smash Court Tennis Pro +Serial = SLPM-66104 +Name = Puyo Puyo Fever 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20175 -Name = Typing Love Story - Boys Be +Serial = SLPM-66105 +Name = Rhapsodia Region = NTSC-J +// this is the JP Suikoden Tactics +MemCardFilter = SLPM-66105/SLPM-66594/SLPM-65599/SLPM-65600 --------------------------------------------- -Serial = SLPS-20177 -Name = Make Your Dream Home +Serial = SLPM-66106 +Name = Hoshi no Furu Koku [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20178 -Name = Samurai +Serial = SLPM-66107 +Name = Hoshi no Furu Koku Region = NTSC-J --------------------------------------------- -Serial = SLPS-20185 -Name = Wangan Midnight +Serial = SLPM-66108 +Name = Burnout Revenge Region = NTSC-J -Compat = 1 +MemCardFilter = SLAJ-25066/SLPM-66108/SLPM-66652/SLPM-65719/SLPM-65958/SLPM-66962/SLAJ-25053/SLPM-66204 --------------------------------------------- -Serial = SLPS-20187 -Name = Black Matrix 2 +Serial = SLPM-66109 +Name = Code Age Commanders Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20194 -Name = Underwater Unit +Serial = SLPM-66110 +Name = Fushigi no Umi no Nadia - Inherit the Blue Water [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20196 -Name = Akagawa Jiro - Tsuki no Hikari - Shizumeru Kane no Satsujin +Serial = SLPM-66112 +Name = Fushigi no Umi no Nadia - Inherit the Blue Water Region = NTSC-J --------------------------------------------- -Serial = SLPS-20198 -Name = Raging Bless +Serial = SLPM-66113 +Name = Hissatsu Ura-Kagyou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20199 -Name = F1 2002 +Serial = SLPM-66114 +Name = Nizu no Senritsu [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20202 -Name = Coloball 2002 +Serial = SLPM-66115 +Name = Nizu no Senritsu Region = NTSC-J --------------------------------------------- -Serial = SLPS-20208 -Name = I am Small! +Serial = SLPM-66116 +Name = NBA Live 2005 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20214 -Name = 3-D Fighting School 2 +Serial = SLPM-66117 +Name = Metal Gear Solid 3 - Subsistence [with Headset] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20216 -Name = Air Ranger - Rescue Helicopter +Serial = SLPM-66122 +Name = Kingdom Hearts [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20218 -Name = Ninja Assault +Serial = SLPM-66123 +Name = Kingdom Hearts - Final Mix [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20219 -Name = Tsukande! Mawashite! Dossun Pazuru Egg Mania +Serial = SLPM-66124 +Name = Final Fantasy X [Ultimate Hits] Region = NTSC-J +IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-20221 -Name = Taiko no Tatsujin [with Tatacon Reproduction Controller] +Serial = SLPM-66125 +Name = Final Fantasy X-2 [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20222 -Name = Inaka Kurasi - Nan no Shima no Monogatari +Serial = SLPM-66129 +Name = Guilty Gear XX #Reload Region = NTSC-J --------------------------------------------- -Serial = SLPS-20226 -Name = Yamasa Digital Slot World SP DX +Serial = SLPM-66130 +Name = Tom Clancy's Splinter Cell - Chaos Theory Region = NTSC-J --------------------------------------------- -Serial = SLPS-20230 -Name = Chulip +Serial = SLPM-66131 +Name = Tim Burton's The Nightmare Before Christmas [Premium Pack] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20243 -Name = New Price Go Go Golf +Serial = SLPM-66132 +Name = Gladiator - Road to Freedom - Remix Region = NTSC-J --------------------------------------------- -Serial = SLPS-20245 -Name = Low Rider +Serial = SLPM-66134 +Name = Shuffle! On the Stage Region = NTSC-J --------------------------------------------- -Serial = SLPS-20250 -Name = Makai Senki Disgaea [Limited Edition] +Serial = SLPM-66135 +Name = World Tank Museum For Game - Toubu Sensen Success Region = NTSC-J --------------------------------------------- -Serial = SLPS-20251 -Name = Makai Senki Disgaea +Serial = SLPM-66136 +Name = SuperLite 2000 Series - Akaiito Region = NTSC-J --------------------------------------------- -Serial = SLPS-20256 -Name = Cool Shot - Yukawa Keiko +Serial = SLPM-66137 +Name = Clover Heart's Looking for Happiness [The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20258 -Name = Yamasa Digi World 4D +Serial = SLPM-66138 +Name = Desire [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20259 -Name = Kotoba no Puzzle - Mojipittan +Serial = SLPM-66139 +Name = Duel Savior Destiny Region = NTSC-J --------------------------------------------- -Serial = SLPS-20260 -Name = Sakigake!! Kuromati Koukou +Serial = SLPM-66140 +Name = Atelier Marie + Elie: Salburg no Renkinjutsushi 1&2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20262 -Name = Slot Pro DX - Fujiko 2 +Serial = SLPM-66141 +Name = Matantei Loki Ragnarok Mayoukaku Region = NTSC-J --------------------------------------------- -Serial = SLPS-20263 -Name = J.League Tactics Manager - Realtime Soccer Simulation +Serial = SLPM-66142 +Name = Rebirth Moon [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20265 -Name = Fever 7 +Serial = SLPM-66143 +Name = Rebirth Moon Region = NTSC-J --------------------------------------------- -Serial = SLPS-20272 -Name = Taiko no Tatsujin Doki +Serial = SLPM-66144 +Name = D1 Grand Prix 2005 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20273 -Name = Netsu Chu! Pro Baseball 2003 +Serial = SLPM-66145 +Name = GoldenEye - Rogue Agent [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20279 -Name = Hissatsu Pachinko Station v7 - Tensei Bakabon 2 +Serial = SLPM-66146 +Name = Memories Off #5 - Togireta Film [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20280 -Name = Mahou no Pumpkin +Serial = SLPM-66147 +Name = Memories Off #5 - Togireta Film Region = NTSC-J --------------------------------------------- -Serial = SLPS-20282 -Name = Taiko no Tatsujin +Serial = SLPM-66148 +Name = Star Wars - Battlefront [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20284 -Name = Marl de Jigsaw +Serial = SLPM-66149 +Name = Shirogane no Torikago [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20285 -Name = Slotter Up Core +Serial = SLPM-66150 +Name = Shirogane no Torikago Region = NTSC-J --------------------------------------------- -Serial = SLPS-20287 -Name = Yakiniku Bugyou Bonfire! +Serial = SLPM-66151 +Name = Killzone Region = NTSC-J --------------------------------------------- -Serial = SLPS-20288 -Name = Saikyo Todai Shogi 2003 +Serial = SLPM-66152 +Name = Konneko - Keep a Memory Green [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20289 -Name = Yamasa Digi World SP - Umi Ichiban R +Serial = SLPM-66153 +Name = Konneko - Keep a Memory Green Region = NTSC-J --------------------------------------------- -Serial = SLPS-20291 -Name = Fish Eyes 3 +Serial = SLPM-66155 +Name = Flame of Recca - Final Burning [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20293 -Name = Jissen Pachi-Slot Hisshouhou! Savanna Park +Serial = SLPM-66156 +Name = Marheaven Arm Fight Dream Region = NTSC-J --------------------------------------------- -Serial = SLPS-20294 -Name = Hanabi Shokunin Ninarou 2 +Serial = SLPM-66157 +Name = Rune Princess [First Print - Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20296 -Name = Dugout '03 - The Turning Point +Serial = SLPM-66158 +Name = Rune Princess Region = NTSC-J --------------------------------------------- -Serial = SLPS-20299 -Name = Black Matrix 2 +Serial = SLPM-66159 +Name = Call of Duty - Final Hour Region = NTSC-J --------------------------------------------- -Serial = SLPS-20300 -Name = Mobile Suit - Gundam Seed +Serial = SLPM-66160 +Name = Devil May Cry 3 [Special Edition] Region = NTSC-J +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLPS-20301 -Name = Gachinko Professional Baseball +Serial = SLPM-66163 +Name = Fuuraiki 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20303 -Name = Inaka Kurasi [Best Collection] +Serial = SLPM-66164 +Name = Mahou Tsukai Kurohime Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20305 -Name = Real Sports Professional Baseball +Serial = SLPM-66165 +Name = Otome Hao Anesama ni Koi Shiteru Region = NTSC-J --------------------------------------------- -Serial = SLPS-20311 -Name = Primopuel - My Special Partner [Limited Edition] +Serial = SLPM-66166 +Name = Shadow the Hedgehog Region = NTSC-J --------------------------------------------- -Serial = SLPS-20312 -Name = Primopuel - My Special Partner +Serial = SLPM-66167 +Name = God of War Region = NTSC-J --------------------------------------------- -Serial = SLPS-20316 -Name = Hissatsu Pachinko Station v8 +Serial = SLPM-66168 +Name = Ryu Ga Gotoku Region = NTSC-J --------------------------------------------- -Serial = SLPS-20317 -Name = Jissen Pachi-Slot Hisshouhou! King Camel +Serial = SLPM-66169 +Name = J-League Winning Eleven 9 - Asia Championship Region = NTSC-J --------------------------------------------- -Serial = SLPS-20320 -Name = Taiko no Tatsujin 3 [with Tatacon Drum Bundle] +Serial = SLPM-66170 +Name = Genso Suikoden V [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20321 -Name = Taiko no Tatsujin - Appare Sandaime +Serial = SLPM-66171 +Name = NBA Live '06 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20322 -Name = Netsu Chu! Pro Baseball 2003 Fall +Serial = SLPM-66175 +Name = Akumajo Dracula - Yami no Juin Region = NTSC-J +Compat = 5 +vuClampMode = 0 //SPS with microVU +MemCardFilter = SLPM-66175/SLPM-66668/SLPM-65406/SLPM-65444/SLPM-66325 --------------------------------------------- -Serial = SLPS-20323 -Name = Pochinya +Serial = SLPM-66176 +Name = Chaos Field - New Order Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-20328 -Name = Otona no Gal Jan - Kimi ni Hane Man +Serial = SLPM-66177 +Name = Matrix,The - Path of Neo Region = NTSC-J --------------------------------------------- -Serial = SLPS-20329 -Name = Kamen Rider 555 +Serial = SLPM-66178 +Name = Pop'n Music 7 [Konami The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20330 -Name = Taiko no Tatsujin 4 - Waku Waku Anime Maturi +Serial = SLPM-66179 +Name = Pop'n Music 8 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20331 -Name = Fever 9 - Sankyo +Serial = SLPM-66180 +Name = Beatmania IIDX - 10th Style Region = NTSC-J --------------------------------------------- -Serial = SLPS-20333 -Name = Taisen 1 - Shogi +Serial = SLPM-66181 +Name = Beat Down - Fists of Vengeance Region = NTSC-J --------------------------------------------- -Serial = SLPS-20334 -Name = Taisen 2 - Go +Serial = SLPM-66182 +Name = Kono Haretasora no Shita de [Good Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20335 -Name = Taisen 3 - Mahjong +Serial = SLPM-66183 +Name = Getaway, The - Black Monday Region = NTSC-J --------------------------------------------- -Serial = SLPS-20336 -Name = Taisen 4 - Soldier +Serial = SLPM-66184 +Name = Ikusa Gami Region = NTSC-J --------------------------------------------- -Serial = SLPS-20337 -Name = Slotter UP - Core Alpha +Serial = SLPM-66185 +Name = Game ni Nattayo! Dokura-chan [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20339 -Name = Jissen Pachi-Slot Hisshouhou! Sammy's Collection 2 DX +Serial = SLPM-66186 +Name = Game ni Nattayo! Dokura-chan Region = NTSC-J --------------------------------------------- -Serial = SLPS-20340 -Name = Jissen Pachi-Slot Hisshouhou! Sammy's Collection 2 +Serial = SLPM-66187 +Name = Exciting Pro Wrestling 6 - SmackDown vs. RAW [Yuke's the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20343 -Name = Net de Bomberman +Serial = SLPM-66189 +Name = SSX On Tour Region = NTSC-J --------------------------------------------- -Serial = SLPS-20344 -Name = Phantom Brave [Limited Edition] +Serial = SLPM-66190 +Name = Star Wars Battlefront II Region = NTSC-J --------------------------------------------- -Serial = SLPS-20345 -Name = Phantom Brave +Serial = SLPM-66191 +Name = Tiger Woods PGA Tour '06 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20347 -Name = Saikyou Toudai Shogi 2004 +Serial = SLPM-66192 +Name = Izumo 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20349 -Name = Mahjong Party - Duel with The Idol +Serial = SLPM-66193 +Name = Fahrenheit Region = NTSC-J --------------------------------------------- -Serial = SLPS-20350 -Name = Soccer Life +Serial = SLPM-66194 +Name = Otona no Gal Jan 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20351 -Name = Slotter UP - Mania 4 +Serial = SLPM-66195 +Name = SuperLite 2000 Series - Love Adventure Monochrome Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20352 -Name = Sukisyo - First Limit & Target Nights +Serial = SLPM-66196 +Name = Sentimental Prelude [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20354 -Name = Yamasa Digi World 3 [Best of Best] +Serial = SLPM-66197 +Name = Godzilla Kaijuu Dairansen - Chikyuu Saishuu Kessen [Atari Hot Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20355 -Name = Yamasa Digi World SP - Neo Magic Pulsar XX [Best of Best] +Serial = SLPM-66201 +Name = Seishun no Kagayaki [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20356 -Name = Yamasa Digi World 4 [Best of Best] +Serial = SLPM-66202 +Name = Fragments Blue [Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20357 -Name = Yamasa Digi World SP - Umi Ichiban R [Best of Best] +Serial = SLPM-66203 +Name = Fragments Blue Region = NTSC-J --------------------------------------------- -Serial = SLPS-20361 -Name = Princess Maker - Refine +Serial = SLPM-66204 +Name = Madden NFL '06 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20362 -Name = Kaiketsu Zorro Mezase! Itazura King [Limited Edition] +Serial = SLPM-66205 +Name = Front Mission 5 - Scars of the War Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20364 -Name = Sekai Saikyou Ginsei Igo 5 +Serial = SLPM-66206 +Name = Battlefield 2 - Modern Combat Region = NTSC-J --------------------------------------------- -Serial = SLPS-20365 -Name = RockMan Collection [Special Box] +Serial = SLPM-66207 +Name = Dororo [Sega the Best 2800] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20366 -Name = CR Kamen Rider Pachi-Slot Expert 5 +Serial = SLPM-66208 +Name = Sakura Taisen V - Episode 0 - Samurai Girl of Wild [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20367 -Name = Curry House Coco Ichibanya +Serial = SLPM-66209 +Name = Pop'n Music 9 [Konami The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20368 -Name = Kaiketsu Zorro Mezase! Itazura King +Serial = SLPM-66210 +Name = Pop'n Music 10 [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20369 -Name = Kinnikuman Generations +Serial = SLPM-66211 +Name = King Kong, Peter Jackson's - The Official Game of the Movie Region = NTSC-J --------------------------------------------- -Serial = SLPS-20370 -Name = Slotter Up Core 3 - Doronjo ni Omakase! +Serial = SLPM-66212 +Name = Sega Rally 2006 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20371 -Name = Mahjong Haou Shinken Battle +Serial = SLPM-66213 +Name = BioHazard 4 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20372 -Name = Jisen Pachisuri Hissou Hou! Hokuto no Ken [Limited Edition] +Serial = SLPM-66214 +Name = White Clarity - And, the Tears Became You [First Print Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20373 -Name = Jisen Pachisuri Hissou Hou! Hokuto no Ken +Serial = SLPM-66215 +Name = White Clarity - And, the Tears Became You Region = NTSC-J --------------------------------------------- -Serial = SLPS-20374 -Name = Football Kingdom [Trial Edition] +Serial = SLPM-66217 +Name = Jikkyou Powerful Pro Yakyuu 12 Ketteiban Region = NTSC-J --------------------------------------------- -Serial = SLPS-20375 -Name = Sanyo Pachinko Paradise 10 +Serial = SLPM-66218 +Name = Eyeshield 21 Amefoot Yarouze! Ya-!Ha-! Region = NTSC-J --------------------------------------------- -Serial = SLPS-20376 -Name = Daito Giken Koushiki Pachi-Slot Simulator Yoshimune +Serial = SLPM-66219 +Name = Tennis no Oji-Sama - Gakuensai no Oji-Sama Region = NTSC-J --------------------------------------------- -Serial = SLPS-20377 -Name = Fish Eyes 3 [Best Collection] +Serial = SLPM-66220 +Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc1of3] Region = NTSC-J +MemCardFilter = SLPM-66117 --------------------------------------------- -Serial = SLPS-20378 -Name = Slotter UP - Core 4 +Serial = SLPM-66221 +Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc2of3] Region = NTSC-J -Compat = 5 +MemCardFilter = SLPM-66117 --------------------------------------------- -Serial = SLPS-20379 -Name = Eikan wa Kimini 2004 - Koshien no Kodou [Artdink Best Choice] +Serial = SLPM-66222 +Name = Metal Gear Solid 3 - Subsistence [First Print Limited Edition] [Disc3of3] Region = NTSC-J +MemCardFilter = SLPM-66117 --------------------------------------------- -Serial = SLPS-20380 -Name = Shinkon Gattai Gondannar!! +Serial = SLPM-66223 +Name = Metal Gear Solid 3 - Subsistence [Disc1of2] Region = NTSC-J +MemCardFilter = SLPM-66117 --------------------------------------------- -Serial = SLPS-20381 -Name = Monkey Turn V +Serial = SLPM-66224 +Name = Metal Gear Solid 3 - Subsistence [Disc2of2] Region = NTSC-J +MemCardFilter = SLPM-66117 --------------------------------------------- -Serial = SLPS-20382 -Name = Taiko no Tatsujin 4th Generation - Gathering Festival [with Drum Controller] +Serial = SLPM-66225 +Name = Da Capo Four Seasons [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20383 -Name = Taiko no Tatsujin - Atsumare Matsurida Yonndaime +Serial = SLPM-66226 +Name = Da Capo Four Seasons Region = NTSC-J --------------------------------------------- -Serial = SLPS-20384 -Name = Hayarikami +Serial = SLPM-66227 +Name = GI Jockey 4 + Winning Post 7 [Twin Pack] [GI Jockey 4 Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20386 -Name = Value 2000 Series - Igo 4 +Serial = SLPM-66228 +Name = GI Jockey 4 + Winning Post 7 [Twin Pack] [Winning Post 7 Disc] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20387 -Name = Value 2000 Series - Shogi 4 +Serial = SLPM-66229 +Name = GI Jockey 4 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20388 -Name = CR Pachinko Yellow Cab - Pachitte Chonmage Tatsujin 6 +Serial = SLPM-66231 +Name = Karutagura - Tamashii no Kunou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20389 -Name = Saikyou Toudai Shogi 5 [Mycom Best] +Serial = SLPM-66232 +Name = Need for Speed - Most Wanted Region = NTSC-J +MemCardFilter = SLAJ-25075/SLPM-66232/SLPM-66562/SLPM-65766/SLPM-66051/SLPM-66960 --------------------------------------------- -Serial = SLPS-20391 -Name = Saiyuki Gunlock +Serial = SLPM-66233 +Name = Kingdom Hearts II Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20392 -Name = Toudai Shogi - Jouseki Dojo Kanketsuhen +Serial = SLPM-66234 +Name = Wizardry X - Zensen no Gakufu [Wonder Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20393 -Name = Princess Maker 2 +Serial = SLPM-66235 +Name = Psychic Force Complete Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20394 -Name = Suki na Mono wa Sukida Rashouganai + White Flower + Sukisyo! +Serial = SLPM-66237 +Name = Otometeki Koi Kakumei Rabu Rebo!! [Love Revo Box] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20396 -Name = Slotter UP - Mania 5 +Serial = SLPM-66238 +Name = Otometeki Koi Kakumei Rabu Rebo!! Region = NTSC-J --------------------------------------------- -Serial = SLPS-20398 -Name = La Pucelle - Hikari no Seijyo Densetsu Nijuu +Serial = SLPM-66239 +Name = Wrestle Angels - Survivor Region = NTSC-J --------------------------------------------- -Serial = SLPS-20399 -Name = Taiko no Tatsujin - Go! Go! Godaime [with Tatacon] +Serial = SLPM-66240 +Name = Jissen Pachi-Slot Hisshouhou! Aladdin 2 Evolution Region = NTSC-J --------------------------------------------- -Serial = SLPS-20400 -Name = Taiko no Tatsujin - Go! Go! Godaime +Serial = SLPM-66241 +Name = Jissen Pachinko Hisshouhou! CR Hokuto no Ken Region = NTSC-J --------------------------------------------- -Serial = SLPS-20401 -Name = Tecmo Hit Parade +Serial = SLPM-66242 +Name = Dance Dance Revolution - Strike Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20402 -Name = Kamen Rider Blade +Serial = SLPM-66243 +Name = Galaxy Angel II Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20403 -Name = Shanghai - Sangoku Pai Tatagi [Super Value 2800] +Serial = SLPM-66244 +Name = Derby Tsuku 5 - Derby Uma o Tsukurou! Region = NTSC-J --------------------------------------------- -Serial = SLPS-20405 -Name = Slotter UP - Core 5 +Serial = SLPM-66245 +Name = Jewels Ocean - Star of Sierra Leone Region = NTSC-J --------------------------------------------- -Serial = SLPS-20406 -Name = Cam-Station [with EyeToy & USB Headset] +Serial = SLPM-66246 +Name = Devil Summoner - Kuzunoha Raidou tai Chouriki Heidan Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20407 -Name = Mahjong Sangokushi +Serial = SLPM-66247 +Name = Meine Liebe II - Hokori to Seigi to Ai Region = NTSC-J --------------------------------------------- -Serial = SLPS-20408 -Name = Card Captor Sakura - Sakura-Chan to Asobo! +Serial = SLPM-66248 +Name = Mr. Incredible - Kyouteki Underminer Toujou Region = NTSC-J -Compat = 4 -[patches = 08FB9DCF] - - comment=patches by Nachbrenner - - //skip eyetoy check - patch=0,EE,013385b0,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLPS-20409 -Name = Phantom Kingdom [Limited Edition] +Serial = SLPM-66249 +Name = Growlanser V - Generations [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20410 -Name = Phantom Kingdom [Limited Edition] +Serial = SLPM-66250 +Name = Choro Q - HG 4 [Takara Best] Region = NTSC-J -Status = 5 --------------------------------------------- -Serial = SLPS-20411 -Name = Hissatsu Pachinko Station v9 +Serial = SLPM-66251 +Name = EX Jinsei Game II [Takara Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20412 -Name = Hissatsu Pachinko Station v10 +Serial = SLPM-66253 +Name = Finalist [Limited First Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20413 -Name = Taiko no Tatsujin - Taiko Drum Masters [with Drum Controller] +Serial = SLPM-66254 +Name = Finalist Region = NTSC-J --------------------------------------------- -Serial = SLPS-20414 -Name = Taiko no Tatsujin - Taiko Drum Masters +Serial = SLPM-66255 +Name = World Soccer Winning Eleven 9 [Bonus Pack] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20416 -Name = Inyou Taisenki - Byakko Enbu [with EyeToy] +Serial = SLPM-66257 +Name = Enthusia - Professional Racing Region = NTSC-J +eeClampMode = 3 --------------------------------------------- -Serial = SLPS-20417 -Name = Inyou Taisenki - Byakko Enbu +Serial = SLPM-66258 +Name = Magic Teacher Negima - Honor Version [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20418 -Name = Cam-Station +Serial = SLPM-66259 +Name = Mahou Sensei Negima! Silver Medal [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20420 -Name = Ultraman Nexus +Serial = SLPM-66260 +Name = Remote Control Dandy SF [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20421 -Name = Sekai Saikyou Ginsei Igo 6 +Serial = SLPM-66261 +Name = Oz [Konami The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20422 -Name = Hayarikami Revenge +Serial = SLPM-66262 +Name = Tom Clancy's Rainbow Six 3 [Ubisoft The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20423 -Name = LEGO Star Wars - The Video Game +Serial = SLPM-66263 +Name = Full Spectrum Warrior Region = NTSC-J +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPS-20424 -Name = Taiko no Tatsujin - Tobikkiri! Anime Special [with Tatacon] +Serial = SLPM-66264 +Name = Canvas 2 - Niji-iro no Sketch [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20425 -Name = Taiko no Tatsujin - Tobikkiri! Anime Special +Serial = SLPM-66265 +Name = Canvas 2 - Niji-iro no Sketch Region = NTSC-J --------------------------------------------- -Serial = SLPS-20426 -Name = Madagascar +Serial = SLPM-66266 +Name = Kurogane no Houkou 2 - Warship Commander [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20428 -Name = Monkey Turn V [Bandai the Best] +Serial = SLPM-66267 +Name = Taiko Risshiden V Region = NTSC-J --------------------------------------------- -Serial = SLPS-20429 -Name = Hissatsu Pachislot Ninja Hattori Kun V +Serial = SLPM-66268 +Name = Smackdown! vs. Raw 2006 - Exciting Pro Wrestling 7 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20430 -Name = Simple 2000 Series Vol.91 - The All-Star Kakutou +Serial = SLPM-66269 +Name = Blazing Souls [Limited Edition] Region = NTSC-J -Compat = 5 -XgKickHack = 1 //fixes cell shade like effect... --------------------------------------------- -Serial = SLPS-20431 -Name = Simple 2000 Series Vol.86 - The Menkyou Shutoku Simulation +Serial = SLPM-66270 +Name = Blazing Souls Region = NTSC-J --------------------------------------------- -Serial = SLPS-20436 -Name = Sakigake!! Otokojuku +Serial = SLPM-66271 +Name = Dirge of Cerberus - Final Fantasy VII Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20439 -Name = Simple 2000 Series Vol.79 - The Party Quiz - Akko ni Omakase +Serial = SLPM-66272 +Name = I-O Region = NTSC-J --------------------------------------------- -Serial = SLPS-20440 -Name = Simple 2000 Series Vol.88 - The Mini Bijo Keikan +Serial = SLPM-66273 +Name = Memories Off After Rain Vol.1 - Ensou [Superlite 2000] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20441 -Name = Simple 2000 Series Vol.87 - The Senko +Serial = SLPM-66274 +Name = Ninkyouden Toseinin Ichidaiki Region = NTSC-J --------------------------------------------- -Serial = SLPS-20442 -Name = Daito Giken Koushiki Pachi-Slot Simulator Banchou +Serial = SLPM-66275 +Name = Shin Onimusha - Dawn of Dreams [Disc1of2] Region = NTSC-J +Compat = 5 +[patches = BD17248E] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLPS-20443 -Name = Blocks Club with Bumpy Trot +Serial = SLPM-66276 +Name = Shin Onimusha - Dawn of Dreams [Disc2of2] Region = NTSC-J +Compat = 2 +MemCardFilter = SLPM-66275 +[patches = BD17248E] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLPS-20444 -Name = Simple 2000 Series Vol.90 - The O-Ane-Chan Bara 2 +Serial = SLPM-66277 +Name = Juiced Region = NTSC-J --------------------------------------------- -Serial = SLPS-20445 -Name = Simple 2000 Series Ultimate Vol.28 - The Gaidou! Genocide Grand Prix - Drive to Survive +Serial = SLPM-66278 +Name = Shin Gouketuji Ichizoku - Bonnou Kaihou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20446 -Name = Simple 2000 Series Vol.89 - The Party Game 2 +Serial = SLPM-66279 +Name = Nobunaga no Yabou - Kakushin Region = NTSC-J --------------------------------------------- -Serial = SLPS-20447 -Name = Kamen Rider Hibiki +Serial = SLPM-66280 +Name = Monster Hunter 2 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-20450 -Name = Taiko no Tatsujin - Wai Wai Happy Muyome [with Tatacon] +Serial = SLPM-66281 +Name = Sonic Riders Region = NTSC-J --------------------------------------------- -Serial = SLPS-20451 -Name = Taiko no Tatsujin - Wai Wai Happy Muyome +Serial = SLPM-66282 +Name = Memories Off After Rain Vol.2 - Souen [Superlite 2000] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20452 -Name = Simple 2000 Series Ultimate Vol.30 - Kourin! Zokusha Goddo! +Serial = SLPM-66283 +Name = SuperLite 2000 Series - Memories Off After Rain Vol.3 - Graduation Region = NTSC-J --------------------------------------------- -Serial = SLPS-20453 -Name = Simple 2000 Series Ultimate Vol.29 - K-1 Premium 2005 Dynamite!! +Serial = SLPM-66284 +Name = Dessert Love - Sweet Plus Region = NTSC-J --------------------------------------------- -Serial = SLPS-20454 -Name = Simple 2000 Series Vol.93 - The Right Brain Drill +Serial = SLPM-66285 +Name = Princess Concerto Region = NTSC-J --------------------------------------------- -Serial = SLPS-20455 -Name = Simple 2000 Series Vol.94 - The Aka-Champion - Come on Baby +Serial = SLPM-66286 +Name = Genso Suikoden V Region = NTSC-J --------------------------------------------- -Serial = SLPS-20456 -Name = Simple 2000 Series Vol.95 - The Zombie vs. Kyuukyuusha +Serial = SLPM-66287 +Name = Sengoku Basara Region = NTSC-J --------------------------------------------- -Serial = SLPS-20457 -Name = Hissatsu Pachislo Evolution 2 - Oso Matsu-Kun +Serial = SLPM-66288 +Name = Full House Kiss 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20458 -Name = Simple 2000 Series Vol.96 - The Pirate +Serial = SLPM-66289 +Name = Black Cat Region = NTSC-J --------------------------------------------- -Serial = SLPS-20459 -Name = Yamasa Digi World SP - Isao Lady +Serial = SLPM-66290 +Name = Galaxy Angel [The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20460 -Name = Rakushou! Pachi-Slot Sengen 4 +Serial = SLPM-66291 +Name = Tenkabito Region = NTSC-J --------------------------------------------- -Serial = SLPS-20461 -Name = Simple 2000 Series Vol.99 - The Genshijin +Serial = SLPM-66292 +Name = Jissen Pachi-Slot Hisshouhou! Ultraman Club ST Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20462 -Name = Ougon Kishi Garo [Limited Edition] +Serial = SLPM-66293 +Name = Gakuen Alice - KiraKira Memory Kiss Region = NTSC-J --------------------------------------------- -Serial = SLPS-20463 -Name = Ougon Kishi Garo +Serial = SLPM-66294 +Name = Sotsugyou 2nd Generation Region = NTSC-J --------------------------------------------- -Serial = SLPS-20464 -Name = Simple 2000 Series Vol.105 - The Maid Fuku to Kikanjuu +Serial = SLPM-66295 +Name = Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20465 -Name = Simple 2000 Series Vol.100 - The Otoko Tachi no Kijuu Houza +Serial = SLPM-66296 +Name = Yamiyo ni Sasayaku - Tantei Sagara Kyouichirou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20466 -Name = Simple 2000 Series Vol.101 - The Oanechan Pon - Oanechan 2 +Serial = SLPM-66297 +Name = Separate Hearts [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20467 -Name = Simple 2000 Series Vol.102 - The Fuhyou - Senjou no Inu Tachi +Serial = SLPM-66298 +Name = Separate Hearts Region = NTSC-J --------------------------------------------- -Serial = SLPS-20468 -Name = Simple 2000 Series Vol.106 - The Block Kuzushi Quest - Dragon Kingdom +Serial = SLPM-66299 +Name = Reishiki Kanjou Sentouki 2 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20469 -Name = Matching Maker 2 +Serial = SLPM-66300 +Name = Wizardry Xth - Mugen no Gakuto Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-20470 -Name = Simple 2000 Series Vol.103 - The Chikyuu Boueigun Tactics +Serial = SLPM-66301 +Name = Ibara Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20471 -Name = Chulip [Super Best Collection] +Serial = SLPM-66302 +Name = Clannad Region = NTSC-J --------------------------------------------- -Serial = SLPS-20472 -Name = Daito Giken Koushiki Pachi-Slot Simulator - Hihouden +Serial = SLPM-66307 +Name = Sengoku Musou 2 Region = NTSC-J +MemCardFilter = SLAJ-25077/SLPM-55122/SLPM-66307/SLPM-74247/SLAJ-25035/SLPM-65517/SLPM-74212/SLPM-74235/SLAJ-25048/SLPM-65718/SLPM-74224/SLPM-74249 --------------------------------------------- -Serial = SLPS-20473 -Name = Simple 2000 Series Vol.104 - The Robot Tsuku Rouze! - Gekitou! Robot Fight +Serial = SLPM-66308 +Name = Harukanaru Toki no Naka Premium Boxset Region = NTSC-J --------------------------------------------- -Serial = SLPS-20474 -Name = Simple 2000 Series Vol.107 - The Honoo no Kakutou Banchou +Serial = SLPM-66313 +Name = Guitar Freaks V & DrumMania V Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20475 -Name = Yamasa Digi World SP - Giant Pulsar +Serial = SLPM-66314 +Name = Pop'n Music 12 - Iroha Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-20476 -Name = Simple 2000 Series Vol.108 - The Nippon Tokushubutai +Serial = SLPM-66315 +Name = Shinseiki Evangelion - Koutetsu no Girlfriend 2nd [Broccoli Best Quality] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20477 -Name = Fish Eyes 3 [Super Best Collection] +Serial = SLPM-66316 +Name = Pro Soccer Club o Tsukurou! Europe Championship Region = NTSC-J --------------------------------------------- -Serial = SLPS-20478 -Name = Simple 2000 Series Vol.109 - The Taxi 2 +Serial = SLPM-66317 +Name = Capcom Classics Collection Vol.1 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20479 -Name = Sokudoku Master +Serial = SLPM-66318 +Name = Haru no Ashioto - Step of Spring Region = NTSC-J --------------------------------------------- -Serial = SLPS-20480 -Name = Simple 2000 Series Vol.110 - The Toubou Prisoner +Serial = SLPM-66319 +Name = New Choro Q [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20481 -Name = Simple 2000 Series Vol.112 - The Tousou Highway 2 - Road Warrior 2050 +Serial = SLPM-66320 +Name = Final Fantasy XII Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-20482 -Name = 3-D Mahjong + Suzume Paitori +Serial = SLPM-66321 +Name = Kurogane no Houkou - Warship Gunner 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-20483 -Name = Kamen Rider Kabuto +Serial = SLPM-66322 +Name = James Bond 007 - From Russia With Love Region = NTSC-J --------------------------------------------- -Serial = SLPS-20484 -Name = Simple 2000 Series Ultimate Vol.34 - Sakigake!! Otokojuku +Serial = SLPM-66323 +Name = Princess Software Collection, The Region = NTSC-J --------------------------------------------- -Serial = SLPS-20485 -Name = Taiko no Tatsujin Doka! [with Tatacon Controller] +Serial = SLPM-66324 +Name = World Football Climax Region = NTSC-J --------------------------------------------- -Serial = SLPS-20486 -Name = Taiko no Tatsujin Bang Tap! Toomori 7 Daimei +Serial = SLPM-66325 +Name = Castlevania - Lament of Innocence [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20487 -Name = Pachi-Slot King! Kagaku Ninja-Tai Gatchaman +Serial = SLPM-66327 +Name = Wallace and Gromit - The Curse of the Were-Rabbit Region = NTSC-J --------------------------------------------- -Serial = SLPS-20488 -Name = Simple 2000 Series Vol.113 - The Tairyou Jigoku +Serial = SLPM-66328 +Name = Call of Duty 2 - Big Red One Region = NTSC-J --------------------------------------------- -Serial = SLPS-20489 -Name = Simple 2000 Series Vol.114 - The Jokouppichi Torimonochou - Oanechan Go Go Go! +Serial = SLPM-66329 +Name = Mahou Sensei Negima! Kagai Jugyou Region = NTSC-J +Compat = 5 // GS Software rendering only. VU XGkick Hack fixes some rendering problem. --------------------------------------------- -Serial = SLPS-20490 -Name = Pachi-Slot Club Collection - IM Juggler EX - Juggler Selection +Serial = SLPM-66330 +Name = Tokimeki Memorial - Girl's Side - 2nd Kiss Region = NTSC-J --------------------------------------------- -Serial = SLPS-20491 -Name = Simple 2000 Series Vol.118 - The Raku Musha Dokaku Takeshi Samurai Toujou +Serial = SLPM-66331 +Name = Kouenji Onago Soccer [1st Stage Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20492 -Name = Simple 2000 Series Vol.115 - The Roomshare to Iu Seikatsu +Serial = SLPM-66332 +Name = Kouenji Onago Soccer Region = NTSC-J --------------------------------------------- -Serial = SLPS-20493 -Name = Simple 2000 Series Vol.116 - The Neko Mura no Hitobito Pagu Daikan no Akugyou Zanmai +Serial = SLPM-66333 +Name = Guilty Gear XX Slash Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-20494 -Name = Simple 2000 Series Vol.117 - The Zerosen +Serial = SLPM-66334 +Name = WRC - World Rally Championship 4 [Spike the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20496 -Name = Daito Giken Koushiki Pachi-Slot Simulator - Shake II +Serial = SLPM-66336 +Name = Shinseiki Evangelion - Koutetsu no Girlfriend [Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20497 -Name = Simple 2000 Series Vol.119 - The Survival Game 2 +Serial = SLPM-66337 +Name = EVE New Generation [Deluxe Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20499 -Name = Inaka Kurashi - Nan no Shima no Monogatari [Super Best Collection] +Serial = SLPM-66338 +Name = EVE New Generation Region = NTSC-J --------------------------------------------- -Serial = SLPS-20500 -Name = Simple 2000 Series Vol.120 - The Saigo no Nippon Tsuwamono +Serial = SLPM-66339 +Name = Neo Angelique [Premium Box] Region = NTSC-J --------------------------------------------- -Serial = SLPS-20501 -Name = Hayarikami 2 +Serial = SLPM-66340 +Name = Neo Angelique Region = NTSC-J --------------------------------------------- -Serial = SLPS-20503 -Name = Simple 2000 Series Vol.121 - The Boku no Machidzukuri 2 - Machi-ing Maker 2.1 +Serial = SLPM-66341 +Name = Jan Sangoku Musou Region = NTSC-J --------------------------------------------- -Serial = SLPS-20504 -Name = Daito Giken Koushiki Pachi-Slot Simulator - Shin Yoshimune +Serial = SLPM-66342 +Name = Winning Post 7 Maximum 2006 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25001 -Name = Eternal Ring +Serial = SLPM-66343 +Name = Shin Sangoku Musou 4 - Empires Region = NTSC-J --------------------------------------------- -Serial = SLPS-25002 -Name = Dead or Alive 2 +Serial = SLPM-66348 +Name = Harukanaru Jikuu no Kade 3 - Unmei no Meikyuu Region = NTSC-J -Compat = 5 -[patches = 7894BA09] - // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function - patch=0,EE,00290408,word,24060000 - - //patch=0,EE,0029055C,word,10000013 - - // I tried to write a comment explaining this then realised the futility - //patch=0,EE,0028FE78,word,FFB300E0 - //patch=0,EE,0028FE7C,word,3C130058 - //patch=0,EE,0028FE80,word,0C0CD678 - //patch=0,EE,0028FE84,word,266457C0 - //patch=0,EE,0028FE88,word,1440FFFD - //patch=0,EE,0028FE8C,word,32224000 - //patch=0,EE,0028FE90,word,1040000E - //patch=0,EE,0028FE94,word,FFB400F0 - //patch=0,EE,0028FE98,word,3402C020 - //patch=0,EE,0028FE9C,word,322BFFF0 - //patch=0,EE,0028FEA0,word,1162000B - //patch=0,EE,0028FEA4,word,3C140058 - //patch=0,EE,0028FEA8,word,00000000 -[/patches] --------------------------------------------- -Serial = SLPS-25003 -Name = Evergrace +Serial = SLPM-66349 +Name = Spectral Force Chronicle Region = NTSC-J --------------------------------------------- -Serial = SLPS-25004 -Name = Kensetsu Juuki Kenka Battle - Buchigire Kongou!! +Serial = SLPM-66350 +Name = Spectral vs. Generation Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25005 -Name = Rock'n Mega Stage +Serial = SLPM-66351 +Name = Soshite Kono Uchuu ni Kirameku Kimi no Shi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25006 -Name = Koushien Baseball +Serial = SLPM-66352 +Name = Memories Off - Sorekara Again [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25007 -Name = Armored Core 2 +Serial = SLPM-66353 +Name = Memories Off - Sorekara Again Region = NTSC-J --------------------------------------------- -Serial = SLPS-25008 -Name = Sorcerous Stabber Orphen +Serial = SLPM-66354 +Name = Black Region = NTSC-J +Compat = 5 +vuClampMode = 0 --------------------------------------------- -Serial = SLPS-25009 -Name = G-Saviour +Serial = SLPM-66356 +Name = Baldr Force EXE [Alchemist Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25010 -Name = Unison +Serial = SLPM-66358 +Name = Shinobido Takumi Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25011 -Name = Sunrise Eiyuutan R +Serial = SLPM-66359 +Name = Mutsuzaki Hoshi Kikari Region = NTSC-J --------------------------------------------- -Serial = SLPS-25012 -Name = Victorious Boxers +Serial = SLPM-66360 +Name = Ys V - Lost Kefin - Kingdom of Sand Region = NTSC-J --------------------------------------------- -Serial = SLPS-25013 -Name = Kurikuri Mix +Serial = SLPM-66361 +Name = Konohana 4 - Yami wo Harau Inori [Superlite 2000] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25014 -Name = Choro Q - High Grade [Limited Edition] +Serial = SLPM-66363 +Name = Dragon Quest - Shounen Yangus no Fushigi na Daibouken Region = NTSC-J --------------------------------------------- -Serial = SLPS-25015 -Name = Choro Q - High Grade +Serial = SLPM-66364 +Name = Pro Yakyuu Spirits 3 +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-66371 +Name = Train Simulator & Densha de Go! Tokyo Kyuukouhen [Ongakukan Pocket Books] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25016 -Name = Neo Atlas 3 +Serial = SLPM-66372 +Name = Digital Devil Saga: Avatar Tuner [Atlus Best Collection] Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25017 -Name = A-Train 2001 +Serial = SLPM-66373 +Name = Digital Devil Saga: Avatar Tuner 2 [Atlus Best Collection] Region = NTSC-J +EETimingHack = 1 +MemCardFilter = SCAJ-20120/SLPM-65795/SLPM-66373/SCAJ-20095/SLPM-65597/SLPM-66372 --------------------------------------------- -Serial = SLPS-25018 -Name = Sidewinder Max +Serial = SLPM-66374 +Name = World Soccer Winning Eleven 10 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25020 -Name = Mobile Suit Gundam +Serial = SLPM-66375 +Name = Ookami Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25022 -Name = Cool Boarders - Code Alien +Serial = SLPM-66376 +Name = KimiStar - Kimi to Study [BGM Collection Package] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25023 -Name = Bouncer, The +Serial = SLPM-66377 +Name = KimiStar - Kimi to Study Region = NTSC-J --------------------------------------------- -Serial = SLPS-25025 -Name = Seven Lance Moromos - Cavalryman Corps +Serial = SLPM-66378 +Name = Garfield - Saving Arleene Region = NTSC-J -Compat = 5 -EETimingHack = 1 //Correct graphics after changing scene. --------------------------------------------- -Serial = SLPS-25026 -Name = Dead or Alive 2 - Hardcore +Serial = SLPM-66379 +Name = Kishin Houkou Demon Bane [Kadokawa The Best] Region = NTSC-J -Compat = 1 --------------------------------------------- -Serial = SLPS-25028 -Name = Shutokou Battle 0 +Serial = SLPM-66380 +Name = Mitsu x Mitsu Drops - Love x Love Honey Life [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25030 -Name = Lunatic Dawn - Tempest +Serial = SLPM-66381 +Name = Mitsu x Mitsu Drops - Love x Love Honey Life Region = NTSC-J --------------------------------------------- -Serial = SLPS-25032 -Name = Golful Golf +Serial = SLPM-66382 +Name = Tenshou Gakuen Kensousoku [Tokudame Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25033 -Name = Kaze no Klonoa 2 - Sekai ga Nozonda Wasuremono +Serial = SLPM-66383 +Name = Natsuyume Yobanashi [2800 Collection] Region = NTSC-J -Compat = 4 -eeClampMode = 3 //Objects needed appear in wrong places without it -[patches = 1645DE53] - - comment=Patch by Shadow Lady - //For hang in Volk City - //Skip sceIpuSync - patch=0,EE,003047D0,word,03e00008 - -[/patches] --------------------------------------------- -Serial = SLPS-25034 -Name = Flower, Sun and Rain +Serial = SLPM-66384 +Name = Iris [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25035 -Name = Monster Farm 3 +Serial = SLPM-66385 +Name = Omoi no Kakera - Close to [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25036 -Name = Gallop Racer 5 +Serial = SLPM-66386 +Name = FIFA World Cup - Germany 2006 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25037 -Name = Velvet File Plus +Serial = SLPM-66387 +Name = Shin Bakusou Dekotora Densetsu [Spike the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25038 -Name = True Love Story 3 +Serial = SLPM-66388 +Name = Fire Pro Wrestling Returns [Spike The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25039 -Name = Missing Blue [First Limited Edition] +Serial = SLPM-66390 +Name = Shoubi no Ki ni Shoubi no Hanasaku - Das Versprechen Region = NTSC-J --------------------------------------------- -Serial = SLPS-25040 -Name = Armored Core 2 - Another Age +Serial = SLPM-66391 +Name = Prince of Persia - The Two Thrones Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25041 -Name = Shadow Hearts +Serial = SLPM-66393 +Name = Final Fantasy XI - Aht Urghan no Hihou [All-in-One Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25042 -Name = Maken Shao [Limited Edition] +Serial = SLPM-66394 +Name = Final Fantasy XI - Aht Urghan no Hihou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25044 -Name = Evergrace 2 +Serial = SLPM-66395 +Name = Honoo no Takkyubin Region = NTSC-J --------------------------------------------- -Serial = SLPS-25045 -Name = Lilie no Atelier: Salburg no Renkinjutsushi 3 +Serial = SLPM-66396 +Name = Tensei Hakken Fuumoroku Region = NTSC-J --------------------------------------------- -Serial = SLPS-25046 -Name = Golf Navigator Vol.1 +Serial = SLPM-66398 +Name = Parufu - Chocolat Second Brew Region = NTSC-J --------------------------------------------- -Serial = SLPS-25047 -Name = Golf Navigator Vol.2 +Serial = SLPM-66399 +Name = Samurai 7 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25048 -Name = Zeonic Front - Mobile Suit Gundam 0079 +Serial = SLPM-66400 +Name = Samurai 7 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25050 -Name = Final Fantasy X +Serial = SLPM-66401 +Name = Wrestle Kingdom Region = NTSC-J Compat = 5 -IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-25051 -Name = Missing Blue +Serial = SLPM-66402 +Name = Taito Memories Vol.1 [Taito The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25052 -Name = Ace Combat 4 - Shattered Skies +Serial = SLPM-66405 +Name = Rajirugi - Precious Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25053 -Name = Eikan wa Kimini - Koushien no Hasha +Serial = SLPM-66406 +Name = Sakura Hana Region = NTSC-J --------------------------------------------- -Serial = SLPS-25054 -Name = Tamamayu Story 2 +Serial = SLPM-66407 +Name = Mighty Heart Region = NTSC-J --------------------------------------------- -Serial = SLPS-25055 -Name = Golf Navigator Vol.3 +Serial = SLPM-66408 +Name = Tsuyo Kiss - Mighty Heart Region = NTSC-J --------------------------------------------- -Serial = SLPS-25057 -Name = King's Field 4 +Serial = SLPM-66409 +Name = Street Fighter Zero - Fighters Generation Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25059 -Name = G-Breaker - Legend of Cloudia +Serial = SLPM-66410 +Name = Brothers In Arms: Meiyo no Daishou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25060 -Name = Mobile Suit Gundam - Megurial Sora [Limited Edition] +Serial = SLPM-66412 +Name = Pizzicato Polka - Suisei Genya [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25062 -Name = Kidou Senshi Gundam - Meguriai Sora +Serial = SLPM-66413 +Name = Cross+Channel - To All People [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25064 -Name = Sea-Man +Serial = SLPM-66415 +Name = Mystereet [First Print - Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25069 -Name = FIFA 2002 - Road to World Cup +Serial = SLPM-66416 +Name = Mystereet Region = NTSC-J --------------------------------------------- -Serial = SLPS-25070 -Name = Tales of the Sunrise Heroes 2 +Serial = SLPM-66417 +Name = Jikkyou Powerful Pro Major League Region = NTSC-J --------------------------------------------- -Serial = SLPS-25071 -Name = Visual Mix - Ayumi Hamasaki Dome Tour 2001 +Serial = SLPM-66418 +Name = Growlanser V - Generations Region = NTSC-J --------------------------------------------- -Serial = SLPS-25074 -Name = Project Zero +Serial = SLPM-66419 +Name = Valkyrie Profile 2 - Silmeria Region = NTSC-J Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPS-25075 -Name = Sidewinder F -Region = NTSC-J ---------------------------------------------- -Serial = SLPS-25076 -Name = Sidewinder F +Serial = SLPM-66420 +Name = Front Mission 4 [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25077 -Name = Vampire Night +Serial = SLPM-66421 +Name = Front Mission 5 - Scars of the War [Ultimate Hits] Region = NTSC-J -Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25078 -Name = SSX Tricky +Serial = SLPM-66422 +Name = Romancing Saga - Minstrel Song [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25079 -Name = Madden NFL 2002 +Serial = SLPM-66424 +Name = La Corda D'oro [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25080 -Name = Uchuu Senkan Yamato - Iscandar he no Tsuioku [Special Edition] +Serial = SLPM-66426 +Name = Beatmania IIDX 11 - Red Region = NTSC-J --------------------------------------------- -Serial = SLPS-25081 -Name = Saishuu Densha +Serial = SLPM-66427 +Name = Full Spectrum Warrior - Ten Hammers Region = NTSC-J +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLPS-25084 -Name = Thunder Strike - Operation Phoenix +Serial = SLPM-66429 +Name = Special Forces - Fire for Effect Region = NTSC-J --------------------------------------------- -Serial = SLPS-25085 -Name = Soul Reaver 2 - Legacy of Kain +Serial = SLPM-66430 +Name = Destroy All Humans! Region = NTSC-J --------------------------------------------- -Serial = SLPS-25088 -Name = Final Fantasy X International +Serial = SLPM-66431 +Name = WinBack 2 - Project Poseidon Region = NTSC-J -Compat = 5 -IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-25094 -Name = Reveal Fantasia +Serial = SLPM-66432 +Name = Tamashii Kyou [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25095 -Name = Uchuu Senkan Yamato - Iscandar he no Tsuioku +Serial = SLPM-66433 +Name = Tamashii Kyou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25096 -Name = Galerians 2 [Limited Edition] +Serial = SLPM-66434 +Name = Festa!! Hyper Girls Party [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25097 -Name = Velvet File Plus +Serial = SLPM-66435 +Name = Festa!! Hyper Girls Party Region = NTSC-J --------------------------------------------- -Serial = SLPS-25098 -Name = Air Ranger 2 - Rescue Helicopter +Serial = SLPM-66436 +Name = Iris no Atelier: Grand Fantasm Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25099 -Name = WRC - World Rally Championship +Serial = SLPM-66437 +Name = Soul Link Extension Region = NTSC-J --------------------------------------------- -Serial = SLPS-25100 -Name = Tekken 4 +Serial = SLPM-66438 +Name = Melty Blood - Act Cadenza Region = NTSC-J Compat = 5 -[patches = 26173F9A] - - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,00291764,word,24200001 - patch=0,EE,00291964,word,00000000 - -[/patches] -[patches = 7c359c94] - - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,00291764,word,24200001 - patch=0,EE,00291964,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLPS-25102 -Name = Project Arms +Serial = SLPM-66439 +Name = Hokenshitsu e Youkoso [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25103 -Name = Super Robot Taisen Impact [Limited Edition] +Serial = SLPM-66440 +Name = Hokenshitsu e Youkoso Region = NTSC-J --------------------------------------------- -Serial = SLPS-25104 -Name = Super Robot Taisen Impact +Serial = SLPM-66441 +Name = Oookuki Region = NTSC-J --------------------------------------------- -Serial = SLPS-25105 -Name = Kingdom Hearts +Serial = SLPM-66443 +Name = FIFA Street 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25107 -Name = Kengo 2 +Serial = SLPM-66444 +Name = Spartan - Total Warrior Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25108 -Name = Runabout 3 - Neo Age +Serial = SLPM-66445 +Name = Persona 3 Region = NTSC-J +Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPS-25111 -Name = Higanbana +Serial = SLPM-66446 +Name = Beat Down - Fists of Vengeance [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25112 -Name = Armored Core 3 +Serial = SLPM-66447 +Name = Sengoku Basara 2 Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25113 -Name = Zettai Zetsumei Toshi +Serial = SLPM-66448 +Name = We Are [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25114 -Name = G-Breaker - Daisanshi Cloudia Taisen +Serial = SLPM-66449 +Name = We Are Region = NTSC-J --------------------------------------------- -Serial = SLPS-25115 -Name = EOE - Eve of Evtinction +Serial = SLPM-66450 +Name = Jikkyou Powerful Pro Baseball 13 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25117 -Name = Sankyo Fever 6 +Serial = SLPM-66451 +Name = Major League Baseball 2K6 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25118 -Name = FIFA 2002 +Serial = SLPM-66452 +Name = Kamaitachi no Yoru 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25119 -Name = Galerians 2 +Serial = SLPM-66453 +Name = Hiiro no Kakera [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25120 -Name = Gundam Gihren's Ambition +Serial = SLPM-66454 +Name = Hiiro no Kakera Region = NTSC-J --------------------------------------------- -Serial = SLPS-25121 -Name = dot Hack Vol.1 +Serial = SLPM-66455 +Name = Spectral Force - Radical Elements [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25122 -Name = Mobile Suit Gundam - Lost War Chronicles [Limited Edition] +Serial = SLPM-66456 +Name = Asobi ni Iku Yo! [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25123 -Name = Mobile Suit Gundam - Lost War Chronicles +Serial = SLPM-66457 +Name = Asobi ni Iku Yo! Region = NTSC-J --------------------------------------------- -Serial = SLPS-25124 -Name = G-Breaker 2 - Doumei no Hangeki +Serial = SLPM-66458 +Name = Acheter Fuuraiki Region = NTSC-J --------------------------------------------- -Serial = SLPS-25125 -Name = Iris [Limited Edition] +Serial = SLPM-66459 +Name = Zero Pilot - Zero Region = NTSC-J --------------------------------------------- -Serial = SLPS-25127 -Name = Air +Serial = SLPM-66460 +Name = Summer ## Region = NTSC-J --------------------------------------------- -Serial = SLPS-25128 -Name = Victorious Boxer - Championship Version +Serial = SLPM-66461 +Name = Tom Clancy's Ghost Recon - Advanced Warfighter Region = NTSC-J --------------------------------------------- -Serial = SLPS-25129 -Name = Victorious Boxer - Championship Version +Serial = SLPM-66462 +Name = Disney-Pixer's Cars Region = NTSC-J --------------------------------------------- -Serial = SLPS-25130 -Name = Roommate Asami - Okusama wa Joshikousei +Serial = SLPM-66463 +Name = Def Jam - Fight for NY [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25131 -Name = Ghost Vibration +Serial = SLPM-66464 +Name = MVP Baseball 2005 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25135 -Name = Kamaitachi no Yoru 2 +Serial = SLPM-66465 +Name = Mercenaries [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25136 -Name = Kuon no Kizuna Sairin Mikotonori +Serial = SLPM-66467 +Name = Midway Arcade Treasures - The Game Center of USA Region = NTSC-J --------------------------------------------- -Serial = SLPS-25138 -Name = Ever 17 - The Out of Infinity +Serial = SLPM-66468 +Name = Area 51 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25139 -Name = Baldur's Gate: Dark Alliance +Serial = SLPM-66469 +Name = Love-Com - Punch de Court [Limited Edition] Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25142 -Name = Tiger Woods PGA Tour 2002 +Serial = SLPM-66470 +Name = Love-Com - Punch de Court Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25143 -Name = dot Hack Vol.2 - Mutation +Serial = SLPM-66471 +Name = Hanaki Region = NTSC-J --------------------------------------------- -Serial = SLPS-25144 -Name = Memorial Song +Serial = SLPM-66472 +Name = Planetarian - The Reverie of a Little Planet Region = NTSC-J --------------------------------------------- -Serial = SLPS-25145 -Name = Hooligan [Limited Edition] +Serial = SLPM-66473 +Name = True Crime - New York City Region = NTSC-J --------------------------------------------- -Serial = SLPS-25146 -Name = Hooligan +Serial = SLPM-66474 +Name = Odin Sphere Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25149 -Name = Ever 17 - The Out of Infinity +Serial = SLPM-66475 +Name = Pachislot Hokuto no Ken [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25150 -Name = Only You +Serial = SLPM-66476 +Name = Jissen Pachi-Slot Hisshouhou! Salaryman Kintarou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25151 -Name = Medal of Honor - Jishousaidai no Sakusen +Serial = SLPM-66477 +Name = Kamiwaza Region = NTSC-J --------------------------------------------- -Serial = SLPS-25154 -Name = Flower, Sun and Rain [Victor The Best] +Serial = SLPM-66478 +Name = Star Ocean 3 - Till the End of Time [Ultimate Hits] [Disc1of2] Region = NTSC-J +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPS-25155 -Name = Ultraman Fighting Evolution 2 +Serial = SLPM-66479 +Name = Star Ocean 3 - Till the End of Time [Ultimate Hits] [Disc2of2] Region = NTSC-J +Compat = 5 +VuAddSubHack = 1 +MemCardFilter = SLPM-66478 --------------------------------------------- -Serial = SLPS-25156 -Name = King of Fighters 2000, The +Serial = SLPM-66480 +Name = Dragon Quest V - Bride of the Sky [Ultimate Hits] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25158 -Name = dot Hack - Vol.3 - Erosion Pollution +Serial = SLPM-66481 +Name = Dragon Quest VIII [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25159 -Name = Technic Beat +Serial = SLPM-66482 +Name = Tokimeki Memorial - Girl's Side 2nd Kiss Region = NTSC-J --------------------------------------------- -Serial = SLPS-25160 -Name = Final Fantasy XI 2002 [Special Art Box] +Serial = SLPM-66483 +Name = Mushihimesama [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25161 -Name = Uchuu Senkan Yamato - Ankoku Seidan Teikoku no Gyakushuu [Special Edition] +Serial = SLPM-66484 +Name = Guitar Freaks & Drummania - Masterpiece Silver Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25162 -Name = Uchuu Senkan Yamato - Ankoku Seidan Teikoku no Gyakushuu +Serial = SLPM-66485 +Name = State of Emergency - Revenge Region = NTSC-J --------------------------------------------- -Serial = SLPS-25164 -Name = Uchuu Senkan Yamato - Nijuu Ginga no Houkai +Serial = SLPM-66486 +Name = Tentama - 1st Sunny Side [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25165 -Name = Gunvari Collection + Time Crisis +Serial = SLPM-66487 +Name = Tentama 2 - Wins [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25166 -Name = Ingot 79 +Serial = SLPM-66488 +Name = My Merry May With Be [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25169 -Name = Armored Core 3 - Silent Line +Serial = SLPM-66489 +Name = Mabino Style [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25170 -Name = SD Gundam G Generation Neo +Serial = SLPM-66491 +Name = Ayaka Shibito Region = NTSC-J --------------------------------------------- -Serial = SLPS-25171 -Name = Lupin III - Majutsu no Isan +Serial = SLPM-66492 +Name = Commandos Strike Force Region = NTSC-J --------------------------------------------- -Serial = SLPS-25172 -Name = Tales of Destiny 2 +Serial = SLPM-66493 +Name = Shinten Makai - Generation of Chaos V [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25174 -Name = DragonBall Z - Budokai +Serial = SLPM-66494 +Name = Joshikousei Game's High! [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25177 -Name = Gallop Racer 6 - Revolution +Serial = SLPM-66495 +Name = Joshikousei Game's High! Region = NTSC-J --------------------------------------------- -Serial = SLPS-25178 -Name = Argus no Senshi +Serial = SLPM-66496 +Name = Tom Clancy's Splinter Cell - Chaos Theory Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25179 -Name = FIFA 2003 +Serial = SLPM-66497 +Name = Ice Age 2 Region = NTSC-J -vuClampMode = 2 //missing geometry with microVU --------------------------------------------- -Serial = SLPS-25181 -Name = Gunvari Collection & Time Crisis +Serial = SLPM-66498 +Name = TOCA Race Driver 2 - Ultimate Racing Simulator Region = NTSC-J --------------------------------------------- -Serial = SLPS-25182 -Name = Idol Janshi R - Jan-Guru Project [Limited Edition] +Serial = SLPM-66499 +Name = Kamisama Kazoku - Ouen Ganbou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25183 -Name = Idol Janshi R - Jan-Guru Project +Serial = SLPM-66500 +Name = Like Life an Hour [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25184 -Name = Guilty Gear XX - The Midnight Carnival +Serial = SLPM-66501 +Name = Onimusha [Mega Hits] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25185 -Name = Unlimited SaGa [Limited Edition] +Serial = SLPM-66502 +Name = Devil May Cry [Mega Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25186 -Name = Kidou Shin Sangumi Moeyo Ken +Serial = SLPM-66503 +Name = Metal Gear Solid 2 [Mega Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25190 -Name = Sweet Legacy +Serial = SLPM-66504 +Name = Onimusha 2 [Mega Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25191 -Name = Mizuiro Light Blue +Serial = SLPM-66505 +Name = Shin Sangoku Musou 2 [Mega Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25192 -Name = My Merry May +Serial = SLPM-66506 +Name = Gundam - Federation vs. Zeon DX [Mega Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25193 -Name = My Merry May +Serial = SLPM-66507 +Name = Otome no Jijou [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25195 -Name = Venus & Braves [Premium Pack] +Serial = SLPM-66508 +Name = Otome no Jijou Region = NTSC-J -Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25196 -Name = Venus & Braves +Serial = SLPM-66509 +Name = Rugby '06 Region = NTSC-J -Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25197 -Name = Kingdom Hearts - Final Mix [Limited Edition] +Serial = SLPM-66510 +Name = NHL '06 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25198 -Name = Kingdom Hearts - Final Mix +Serial = SLPM-66511 +Name = Kyuuryuu Youma Gakuenki Re-charge Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25199 -Name = Unlimited Saga +Serial = SLPM-66512 +Name = Fate-stay Night - Realta Nua [Extra Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25200 -Name = Final Fantasy XI +Serial = SLPM-66513 +Name = Fate-stay Night - Realta Nua Region = NTSC-J -Compat = 3 --------------------------------------------- -Serial = SLPS-25201 -Name = Reveal Fantasia +Serial = SLPM-66514 +Name = Medal of Honor - European Assault [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25202 -Name = dot Hack - Vol.4 - Zettai Houi +Serial = SLPM-66515 +Name = Star Wars - Episode III - Sith no Fukushuu [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25204 -Name = Moto GP3 +Serial = SLPM-66516 +Name = Sims, The & The Urbz - Sims in the City [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25205 -Name = Ys I-II - Eternal Story [Limited Edition] +Serial = SLPM-66518 +Name = Teikoku Sensenki [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25206 -Name = Ys I-II - Eternal Story +Serial = SLPM-66519 +Name = Gakuen Heaven - Boy's Love Scramble! [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25209 -Name = Metal Slug 3 +Serial = SLPM-66520 +Name = BioHazard - Code Veronica [Premium Box] +Region = NTSC-J +--------------------------------------------- +Serial = SLPM-66521 +Name = Taito Memories Vol.2 [Taito The Best] Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25212 -Name = Giren no Yabou - Zeon Dokuritsu Sensouden +Serial = SLPM-66522 +Name = Shin Sangoku Musou 3 [KOEI Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25213 -Name = Bass Landing 3 +Serial = SLPM-66523 +Name = Sangokushi IX [with Power-Up Kit] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25214 -Name = Guardian Angel +Serial = SLPM-66524 +Name = Angelique Etoile [Koei Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25215 -Name = Iris [Limited Edition] +Serial = SLPM-66525 +Name = Zill O'll Infinite [Koei The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25216 -Name = Iris +Serial = SLPM-66526 +Name = Gaika no Gouhou - Air Land Force [KOEI Selection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25217 -Name = Shadow Tower Abyss +Serial = SLPM-66527 +Name = Sangokushi Senki 2 [KOEI Selection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25219 -Name = Canary +Serial = SLPM-66528 +Name = Nobunaga no Yabou - Tenka Sousei [with Power Up Kit] [KOEI the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25220 -Name = Elysion +Serial = SLPM-66529 +Name = Boukoku no Aegis 2035 - Warship Gunner [KOEI the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25221 -Name = Pia - Welcome to Carrot 3 +Serial = SLPM-66530 +Name = Gift Prism Region = NTSC-J --------------------------------------------- -Serial = SLPS-25223 -Name = Canvas +Serial = SLPM-66531 +Name = Nizu no Senritsu 2 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25224 -Name = Ai Yori Aoshi [Limited Edition] +Serial = SLPM-66532 +Name = Nizu no Senritsu 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25225 -Name = Ai Yori Aoshi +Serial = SLPM-66533 +Name = Pop'n Music 13 - Carnival Region = NTSC-J --------------------------------------------- -Serial = SLPS-25226 -Name = Memories Off - Duet +Serial = SLPM-66534 +Name = Ryu Koku [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25227 -Name = Super Robot Wars - Alpha 2nd [Limited Edition] +Serial = SLPM-66535 +Name = Ryu Koku Region = NTSC-J --------------------------------------------- -Serial = SLPS-25228 -Name = Super Robot Wars - Alpha 2nd +Serial = SLPM-66536 +Name = Aria: The Natural ~Tooi Yume no Mirage~ Region = NTSC-J --------------------------------------------- -Serial = SLPS-25230 -Name = Soul Calibur II +Serial = SLPM-66537 +Name = Iris no Atelier: Eternal Mana 2 [Gust Best Price] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25231 -Name = Myst III - Exile +Serial = SLPM-66538 +Name = GI Jockey 4 2006 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25233 -Name = Do DonPachi Daioujou +Serial = SLPM-66539 +Name = Nobunaga no Yabou Online - Haten no Shou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25234 -Name = Tenchu 3 +Serial = SLPM-66542 +Name = Sengoku Musou 2 Empires Region = NTSC-J --------------------------------------------- -Serial = SLPS-25235 -Name = Yumeria +Serial = SLPM-66543 +Name = Youjinbou - Unmei no Freud Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25236 -Name = Fantastic Fortune 2 +Serial = SLPM-66544 +Name = Sekai no Zente - Two of Us Region = NTSC-J --------------------------------------------- -Serial = SLPS-25237 -Name = Only You +Serial = SLPM-66548 +Name = Harukanaru Jikuu no Uchi de Mai Ichi Yoru Region = NTSC-J --------------------------------------------- -Serial = SLPS-25238 -Name = My Merry Maybe +Serial = SLPM-66549 +Name = Sangokushi XI Region = NTSC-J --------------------------------------------- -Serial = SLPS-25240 -Name = Motion Gravure Series - Megumi +Serial = SLPM-66550 +Name = God Hand Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25241 -Name = Motion Gravure Series - Hiroko Mori +Serial = SLPM-66551 +Name = Appleseed EX Region = NTSC-J --------------------------------------------- -Serial = SLPS-25242 -Name = Motion Gravure Series - Tomomi Kitagawa +Serial = SLPM-66552 +Name = Neverland Reportage Region = NTSC-J --------------------------------------------- -Serial = SLPS-25243 -Name = Motion Gravure Series - Harumi Nemoto +Serial = SLPM-66553 +Name = Chaos Wars Region = NTSC-J --------------------------------------------- -Serial = SLPS-25244 -Name = Max Payne +Serial = SLPM-66554 +Name = Interlude [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25245 -Name = True Love Story - Summer Days and Yet +Serial = SLPM-66555 +Name = SuperLite 2000 Series - Tokyo Bus Guide 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25246 -Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" +Serial = SLPM-66556 +Name = Shinobido Imashime [Spike The Best] Region = NTSC-J -//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang --------------------------------------------- -Serial = SLPS-25247 -Name = R-Type Final +Serial = SLPM-66557 +Name = FIFA Street [EA Best Hits] Region = NTSC-J -Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLPS-25248 -Name = Kino no Tabi - The Beautiful World +Serial = SLPM-66558 +Name = Tomb Raider - Legend Region = NTSC-J --------------------------------------------- -Serial = SLPS-25250 -Name = Final Fantasy X-2 +Serial = SLPM-66559 +Name = Winning Post 6 [KOEI Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25251 -Name = MVP Baseball 2003 +Serial = SLPM-66560 +Name = Sangokushi X [KOEI The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25254 -Name = Enter the Matrix +Serial = SLPM-66561 +Name = NBA Live '06 [EA Best Hits] Region = NTSC-J -EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25255 -Name = Sidewinder V [Premium Flight Box] +Serial = SLPM-66562 +Name = Need for Speed - Most Wanted [EA Best Hits] Region = NTSC-J +MemCardFilter = SLAJ-25075/SLPM-66232/SLPM-66562/SLPM-65766/SLPM-66051/SLPM-66960 --------------------------------------------- -Serial = SLPS-25256 -Name = Never 7 - The End of Infinity +Serial = SLPM-66563 +Name = Nizu no Senritsu [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25257 -Name = Close To +Serial = SLPM-66564 +Name = REC - DokiDoki Seiyuu Paradise [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25258 -Name = Virtual View - R.C.T. Eyes Play +Serial = SLPM-66565 +Name = REC - DokiDoki Seiyuu Paradise Region = NTSC-J --------------------------------------------- -Serial = SLPS-25259 -Name = Virtual View - Nemoto Harumi +Serial = SLPM-66566 +Name = Tenshou Gakuen Gekkou Hasumi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25260 -Name = Virtual View - Megumi +Serial = SLPM-66567 +Name = Driver - Parallel Lines Region = NTSC-J --------------------------------------------- -Serial = SLPS-25261 -Name = Guilty Gear XX #Reload +Serial = SLPM-66568 +Name = Brothers in Arms: Road to Hill 30 [Ubisoft Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25262 -Name = Private Nurse Maria +Serial = SLPM-66569 +Name = Secret of Evangelion Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25264 -Name = RahXephon [Limited Edition] +Serial = SLPM-66570 +Name = I's Pure Region = NTSC-J --------------------------------------------- -Serial = SLPS-25265 -Name = RahXephon +Serial = SLPM-66571 +Name = Memories Off #5 - Togireta [Superlite 2000 Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25266 -Name = King of Fighters 2001, The +Serial = SLPM-66572 +Name = LEGO Star Wars II - The Original Trilogy Region = NTSC-J +MemCardFilter = SLPM-66572/SLPS-20423 --------------------------------------------- -Serial = SLPS-25270 -Name = Sunrise World War +Serial = SLPM-66573 +Name = Kurogane no Houkou 2 - Warship Gunner [KOEI Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25271 -Name = Sidewinder V +Serial = SLPM-66574 +Name = Meitantei Evangelion Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25272 -Name = Hulk, The +Serial = SLPM-66575 +Name = Guitar Freaks V-2 & Drummania V-2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25274 -Name = Aikagi +Serial = SLPM-66576 +Name = Seiken Densetsu 4 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25275 -Name = Def Jam - Vendetta +Serial = SLPM-66577 +Name = Gladiator - Road to Freedom [Special Remix] [Ertain the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25276 -Name = Natsuyume Ya Wa +Serial = SLPM-66582 +Name = Kohitsuji Hokaku Keakaku! Sweet Boys Life [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25278 -Name = Memories Off - Mix +Serial = SLPM-66583 +Name = Kohitsuji Hokaku Keakaku! Sweet Boys Life Region = NTSC-J --------------------------------------------- -Serial = SLPS-25279 -Name = Adventure Boy Club Magazine +Serial = SLPM-66584 +Name = Yoake Yori Ruriiro na - Brighter than Dawning Blue Region = NTSC-J --------------------------------------------- -Serial = SLPS-25282 -Name = School Heaven - Boy's Love Scramble! +Serial = SLPM-66585 +Name = Elvandia Story Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25283 -Name = Interlude +Serial = SLPM-66586 +Name = Karutagura - Tamashii no Kunou [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25287 -Name = Victorious Boxers 2 - Ippo's Road to Glory +Serial = SLPM-66587 +Name = Karutagura - Tamashii no Kunou [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25288 -Name = D-A - Black [Limited Edition] +Serial = SLPM-66588 +Name = White Princess the Second [2800 Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25289 -Name = Time Crisis 3 [with G-Con 2] +Serial = SLPM-66589 +Name = NBA Live '07 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25290 -Name = Time Crisis 3 +Serial = SLPM-66590 +Name = Jikkyou Powerful Pro Yakyuu 13 Chou Ketteiban Region = NTSC-J --------------------------------------------- -Serial = SLPS-25291 -Name = Baldur's Gate: Dark Alliance [PCCW The Best] +Serial = SLPM-66591 +Name = FlatOut 2 GTR Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25292 -Name = D-A - Black +Serial = SLPM-66592 +Name = Negima! 3-Jikanme [Theater Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25293 -Name = Naruto - Narutimett Hero +Serial = SLPM-66593 +Name = Negima! 3-Jikanme [Live Version] Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25294 -Name = Uchuu no Stellvia +Serial = SLPM-66594 +Name = Rhapsodia [Konami the Best] Region = NTSC-J +MemCardFilter = SLPM-66105/SLPM-66594/SLPM-65599/SLPM-65600 --------------------------------------------- -Serial = SLPS-25295 -Name = Kaena +Serial = SLPM-66595 +Name = J-League Winning Eleven 10 - Europa League '06-'07 Region = NTSC-J -Compat = 5 -EETimingHack = 1 //For black textures on chars. --------------------------------------------- -Serial = SLPS-25296 -Name = Super Robot Wars - Scramble Commander +Serial = SLPM-66596 +Name = Prince of Tennis - Gakuensai no Oji-sama [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25298 -Name = Tentama 1st - Sunny Side +Serial = SLPM-66598 +Name = Yatohime Zankikou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25299 -Name = Shinseiki Evangelions 2 +Serial = SLPM-66600 +Name = Madden NFL '07 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25300 -Name = R - Racing Evolution +Serial = SLPM-66601 +Name = SSX On Tour [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25301 -Name = Missing Parts - The Tantei Stories - Side A +Serial = SLPM-66602 +Name = Ryu ga Gotoku 2 [Disc1of2] Region = NTSC-J +MemCardFilter = SLPM-66602/SLPM-74301/SLPM-66168/SLPM-74234/SLPM-74253 --------------------------------------------- -Serial = SLPS-25302 -Name = Masked Rider - Geneology of Justice +Serial = SLPM-66603 +Name = Ryu ga Gotoku 2 [Disc2of2] Region = NTSC-J +MemCardFilter = SLPM-66602/SLPM-74301/SLPM-66168/SLPM-74234/SLPM-74253 --------------------------------------------- -Serial = SLPS-25303 -Name = Zero - Crimson Butterfly +Serial = SLPM-66604 +Name = Galaxy Angel - Moonlit Lovers [Banpresido the Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25304 -Name = Beast Sapp +Serial = SLPM-66605 +Name = Castle Fantasia - Arihato Senki Region = NTSC-J --------------------------------------------- -Serial = SLPS-25305 -Name = Mobile Suit Z Gundam - AEUG vs. Titans +Serial = SLPM-66606 +Name = White Breath - Kizuna [First Print - Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25307 -Name = New Century GPX Cyber Formula - Road to the Infinity +Serial = SLPM-66607 +Name = White Breath - Kizuna Region = NTSC-J --------------------------------------------- -Serial = SLPS-25308 -Name = Crouching Tiger, Hidden Dragon +Serial = SLPM-66608 +Name = Prince of Tennis - DokiDoki Survival - Sanroku no Mystic Region = NTSC-J --------------------------------------------- -Serial = SLPS-25309 -Name = WWE SmackDown! 4 - Shut your mouth [Yuke's The Best] +Serial = SLPM-66609 +Name = Dance Dance Revolution - SuperNOVA Region = NTSC-J --------------------------------------------- -Serial = SLPS-25310 -Name = Disney-Pixar's Finding Nemo +Serial = SLPM-66610 +Name = Prince of Tennis - DokiDoki Survival - Umibe no Secret Region = NTSC-J --------------------------------------------- -Serial = SLPS-25311 -Name = Spy Fiction +Serial = SLPM-66611 +Name = Tomoyo After - It's Wonderful Life [CS Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25312 -Name = Zero Pilot - The Miracle in Lonely Air +Serial = SLPM-66612 +Name = School Love [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25313 -Name = Seven Samurai 20XX +Serial = SLPM-66613 +Name = Medal of Honor - Rising Sun & Frontline [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25314 -Name = Nebula - Echo Night +Serial = SLPM-66615 +Name = James Bond 007 - Everything or Nothing & Nightfire [EA Best Hits] Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25315 -Name = One Piece - Grand Battle 3 +Serial = SLPM-66617 +Name = Need for Speed - Carbon Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25316 -Name = SNK vs. Capcom Chaos +Serial = SLPM-66618 +Name = Yumemishi [First Print Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25317 -Name = Shadow Hearts 2 [Deluxe Pack] +Serial = SLPM-66619 +Name = Yumemishi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25319 -Name = Kero Kero King DX Plus +Serial = SLPM-66620 +Name = Higurashi no Naku Koro ni Matsuri Region = NTSC-J --------------------------------------------- -Serial = SLPS-25320 -Name = InuYasha - Juso no Kamen +Serial = SLPM-66621 +Name = Beatmania IIDX 12 - Happy Sky Region = NTSC-J --------------------------------------------- -Serial = SLPS-25321 -Name = Derby Stallion 2004 +Serial = SLPM-66622 +Name = Tom Clancy's Ghost Recon 2 [Ubisoft Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25323 -Name = Usagi - Yasei no Topai - Yamashiro Mahjong-Hen +Serial = SLPM-66623 +Name = Dokapon the World [Asmik Tokudane Series] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25324 -Name = Rhapsody of Zephyr +Serial = SLPM-66624 +Name = Tsuyo Kiss - Mighty Heart [Princess Soft Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25326 -Name = WWE Smackdown! Here Comes the Pain - Exciting Pro Wrestling 5 [Limited Edition] +Serial = SLPM-66625 +Name = Trouble Fortune Comany - Happy Cure [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25329 -Name = Kuon +Serial = SLPM-66626 +Name = Trouble Fortune Comany - Happy Cure Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25330 -Name = DragonBall Z - Budokai 2 +Serial = SLPM-66627 +Name = WWE SmackDown! vs. RAW 2007 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25332 -Name = Snow [First Limited Edition] +Serial = SLPM-66628 +Name = OutRun2 SP [First Print Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25333 -Name = Gallop Racer Lucky 7 +Serial = SLPM-66629 +Name = Dirge of Cerberus - Final Fantasy VII International Region = NTSC-J --------------------------------------------- -Serial = SLPS-25334 -Name = Shadow Hearts 2 +Serial = SLPM-66630 +Name = Marheaven - Arm Fight Dream [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25336 -Name = Bass Landing 3 [with TsuriCon2+] [Sammy Best] +Serial = SLPM-66631 +Name = Gokujou Seitokai [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25337 -Name = Bass Landing 3 [Sammy Best] +Serial = SLPM-66632 +Name = Kenka Banchou 2 - Full Throttle Region = NTSC-J --------------------------------------------- -Serial = SLPS-25338 -Name = Armored Core - Nexus +Serial = SLPM-66633 +Name = Shoujo Mahou Gaku Little Witch Romanesque Region = NTSC-J --------------------------------------------- -Serial = SLPS-25340 -Name = Missing Parts - Side B +Serial = SLPM-66634 +Name = Devil Summoner - Kuzunoha Raidou tai Chouriki Heidan [Atlus Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25341 -Name = Backyard Wrestling - Don't Try This at Home +Serial = SLPM-66635 +Name = Wind - A Breath of Heart [Alchemist Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25342 -Name = Snow +Serial = SLPM-66636 +Name = Hyper Street Fighter II - The Anniversary Edition [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25343 -Name = Gunslinger Girl Vol.1 +Serial = SLPM-66637 +Name = Vampire Darkstalkers Collection [Capcom the Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25344 -Name = Saiyuki Reload +Serial = SLPM-66638 +Name = Demento [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25345 -Name = Super Robot Wars MX +Serial = SLPM-66639 +Name = Street Fighter III - 3rd Strike [Capcom the Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25346 -Name = Samurai Spirits Zero +Serial = SLPM-66640 +Name = Full House Kiss [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25347 -Name = King of Fighters 2002, The +Serial = SLPM-66641 +Name = School Love Region = NTSC-J --------------------------------------------- -Serial = SLPS-25348 -Name = Kokoro no Tobira [Limited Edition] +Serial = SLPM-66642 +Name = Prince of Tennis, The - Card Hunter [First Print Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25349 -Name = Kokoro no Tobira +Serial = SLPM-66643 +Name = OutRun2 SP Region = NTSC-J --------------------------------------------- -Serial = SLPS-25350 -Name = Netsu Chu! Pro Baseball 2004 +Serial = SLPM-66644 +Name = J-League Pro Soccer Club o Tsukurou 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25351 -Name = Burnout 2 - Point of Impact +Serial = SLPM-66645 +Name = Bionicle Heroes Region = NTSC-J --------------------------------------------- -Serial = SLPS-25352 -Name = Espgaluda +Serial = SLPM-66646 +Name = Shining Force EXA Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25353 -Name = Xenosaga Freaks +Serial = SLPM-66649 +Name = Taito Memories II - Joukan Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25354 -Name = Panzer Frony - Ausf. B +Serial = SLPM-66651 +Name = Battlefield 2 - Modern Combat [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25355 -Name = UFC 2004 - Ultimate Fighting Championship +Serial = SLPM-66652 +Name = Burnout Revenge [EA Best Hits] Region = NTSC-J +MemCardFilter = SLAJ-25066/SLPM-66108/SLPM-66652/SLPM-65719/SLPM-65958/SLPM-66962/SLAJ-25053/SLPM-66204 --------------------------------------------- -Serial = SLPS-25356 -Name = Broken Sword - Nenereru Ryuu no Densetsu +Serial = SLPM-66653 +Name = Akudaikan 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25357 -Name = 3-Nen B-Gumi Kinpachi Sensei - Densetsu no Kyoudan ni Tate! +Serial = SLPM-66654 +Name = Harukanaru Toki no Naka de 2 [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25358 -Name = Gold Gasho Bell! - Friendship Tag Battle +Serial = SLPM-66655 +Name = Harukanaru Jikuu no Kade - Hachiha Katsunori [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25359 -Name = Shaman King Funbari Spirits +Serial = SLPM-66656 +Name = Warship Gunner 2 - Change of Direction [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25360 -Name = Katamari Damacy +Serial = SLPM-66657 +Name = Shin Sangoku Musou 3 Mushoden [Koei Selection] Region = NTSC-J -Compat = 5 -mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLPS-25361 -Name = Smash Court Professional Tournament 2 +Serial = SLPM-66658 +Name = Shin Sangoku Musou 3 Empires [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25362 -Name = Tetsujin 28 Go +Serial = SLPM-66659 +Name = Soshite Kono Uchuu ni Kirameku Kimi no Shi XXX Region = NTSC-J --------------------------------------------- -Serial = SLPS-25363 -Name = Sakura Zakashobotai +Serial = SLPM-66660 +Name = Hokuto no Ken Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25364 -Name = Ultraman +Serial = SLPM-66661 +Name = Dessert Love - Sweet Plus [Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25365 -Name = Missing Blue [Best Price] +Serial = SLPM-66662 +Name = Dog Island, The - Hitsotsuno no Hana no Monogatari Region = NTSC-J --------------------------------------------- -Serial = SLPS-25366 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Premium Box] [Disc1of2] +Serial = SLPM-66663 +Name = Phantasy Star Universe - Ambition of the Illuminus Region = NTSC-J +eeRoundMode = 0 --------------------------------------------- -Serial = SLPS-25367 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Premium Box] [Disc2of2] +Serial = SLPM-66664 +Name = Full House Kiss 2 [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25368 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc1of2] +Serial = SLPM-66667 +Name = Meine Liebe II [Konami Palace Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25369 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc2of2] +Serial = SLPM-66668 +Name = Akumajo Dracula - Yami no Juin [Konami the Best] Region = NTSC-J +vuClampMode = 0 //SPS with microVU +MemCardFilter = SLPM-66175/SLPM-66668/SLPM-65406/SLPM-65444/SLPM-66325 --------------------------------------------- -Serial = SLPS-25370 -Name = Spawn - Armageddon +Serial = SLPM-66669 +Name = Prince of Tennis, The - Card Hunter [First Print Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25371 -Name = DearS [Limited Edition] +Serial = SLPM-66670 +Name = Stella Deus [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25372 -Name = DearS +Serial = SLPM-66671 +Name = Shining Wind Region = NTSC-J --------------------------------------------- -Serial = SLPS-25373 -Name = Gunslinger Girl Vol.2 +Serial = SLPM-66672 +Name = Tom Clancy's Splinter Cell - Double Agent Region = NTSC-J --------------------------------------------- -Serial = SLPS-25374 -Name = Great Escape, The +Serial = SLPM-66673 +Name = Prince of Persia - Warrior Within [Ubisoft the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25375 -Name = XIII +Serial = SLPM-66674 +Name = Tiger Woods PGA Tour '07 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25376 -Name = Metal Slug 4 +Serial = SLPM-66675 +Name = Kingdom Hearts II - Final Mix + Region = NTSC-J Compat = 5 +// reads Re:Chain data and vice-versa +MemCardFilter = SLPM-66675/SLPM-66676 --------------------------------------------- -Serial = SLPS-25377 -Name = Nightmare of Druaga, The - Fushigi no Dungeon -Region = NTSC-J ---------------------------------------------- -Serial = SLPS-25378 -Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou [Limited Edition] +Serial = SLPM-66676 +Name = Kingdom Hearts Re: Chain of Memories Region = NTSC-J +Compat = 5 +MemCardFilter = SLPM-66675/SLPM-66676 --------------------------------------------- -Serial = SLPS-25379 -Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou +Serial = SLPM-66677 +Name = Final Fantasy X - International [Ultimate Hits] Region = NTSC-J +IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-25381 -Name = Gakuen Heaven - Boy's Love Scramble! Type B +Serial = SLPM-66678 +Name = Final Fantasy X-2 - International + Last Mission [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25382 -Name = One Piece - Land Land +Serial = SLPM-66679 +Name = Devil Summoner: Kuzunoha Raidou tai Abaddon Ou [Plus] Region = NTSC-J +MemCardFilter = SLPM-66679/SLPM-66683/SLPM-66246/SLPM-66634 --------------------------------------------- -Serial = SLPS-25383 -Name = Digimon Battle Chronicle +Serial = SLPM-66683 +Name = Devil Summoner: Kuzunoha Raidou tai Abaddon Ou Region = NTSC-J +MemCardFilter = SLPM-66679/SLPM-66683/SLPM-66246/SLPM-66634 --------------------------------------------- -Serial = SLPS-25384 -Name = Tenchu Kurenai +Serial = SLPM-66685 +Name = Seaman 2 - Peking Genjin Ikusei Kit Region = NTSC-J +Compat = 2 --------------------------------------------- -Serial = SLPS-25385 -Name = Friends Seishun no Kagayaki +Serial = SLPM-66686 +Name = GuitarFreaks & DrumMania Masterpiece Gold Region = NTSC-J --------------------------------------------- -Serial = SLPS-25386 -Name = King of Fighters, The - Maximum Impact Maniax +Serial = SLPM-66687 +Name = Hiiro no Kakera - Ano Sora no Shita de Region = NTSC-J --------------------------------------------- -Serial = SLPS-25387 -Name = True Love Story - Summer Days, and Yet... +Serial = SLPM-66688 +Name = Harukanaru Jikuu no Kade 3 [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25388 -Name = Gunslinger Girl Vol.3 +Serial = SLPM-66689 +Name = Persona 3 FES [Append Edition] Region = NTSC-J +VuClipFlagHack = 1 +MemCardFilter = SLPM-66445/SLPM-66689/SLPM-66690 --------------------------------------------- -Serial = SLPS-25389 -Name = Gundam Seed - Never Ending Tomorrow +Serial = SLPM-66690 +Name = Persona 3 FES [Independent Starting Version] Region = NTSC-J +VuClipFlagHack = 1 +MemCardFilter = SLPM-66445/SLPM-66689/SLPM-66690 --------------------------------------------- -Serial = SLPS-25390 -Name = Clover's Heart - Looking for Happiness [Limited Edition] +Serial = SLPM-66691 +Name = Sengoku Basara 2 [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25391 -Name = Clover's Heart - Looking for Happiness +Serial = SLPM-66692 +Name = Seikai no Senki [Best Hit] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25392 -Name = Desire +Serial = SLPM-66693 +Name = Princess Maker 4 [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25393 -Name = Rim Runners +Serial = SLPM-66694 +Name = Spongebob Region = NTSC-J --------------------------------------------- -Serial = SLPS-25394 -Name = Another Century's Episode +Serial = SLPM-66695 +Name = Kono Aozora ni Yakusoku o - Melody of the Sun and Sea Region = NTSC-J --------------------------------------------- -Serial = SLPS-25395 -Name = Sentimental Prelude +Serial = SLPM-66696 +Name = SuperLite 2000 Series - Memories Off - Sorekara Again Region = NTSC-J --------------------------------------------- -Serial = SLPS-25396 -Name = Fantastic Fortune 2 - Triple Star +Serial = SLPM-66697 +Name = Nightmare Before Christmas, The [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25397 -Name = Golden Voyage - Sinbad Adventure +Serial = SLPM-66698 +Name = Shijou Saikyou no Teishi - Kenichi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25398 -Name = Naruto - Narutimett Hero 2 +Serial = SLPM-66700 +Name = Konjiki no Corda 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25399 -Name = Keroro Gunsou - Mero Mero Battle Royale +Serial = SLPM-66701 +Name = Sangokushi XI [with Power-Up Kit] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25400 -Name = Tales of Symphonia +Serial = SLPM-66702 +Name = Winning Post 7 - Maximum 2007 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25401 -Name = Magna Carta +Serial = SLPM-66703 +Name = Racing Game - Chuui!!!! [Konami the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25402 -Name = Hagane no Renkinjutsushi - Dream Carnival +Serial = SLPM-66704 +Name = Negima! Dream Tactic Yumemiru Otome Princess [Maihime Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25403 -Name = Hitman - Silent Assassin [Eidos The Best] +Serial = SLPM-66705 +Name = Negima! Dream Tactic Yumemiru Otome Princess [Utahime Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25404 -Name = RPG Maker 3 +Serial = SLPM-66708 +Name = Brothers In Arms: Earned In Blood [Ubisoft Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25405 -Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou [Best Collection] +Serial = SLPM-66709 +Name = Angel Profile Region = NTSC-J --------------------------------------------- -Serial = SLPS-25406 -Name = Hitman - Contracts +Serial = SLPM-66710 +Name = Godfather, The Region = NTSC-J --------------------------------------------- -Serial = SLPS-25407 -Name = King of Fighters 2003, The +Serial = SLPM-66712 +Name = Rozen Maiden - Geppetto Garden [Limited Edition] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25408 -Name = Armored Core - Nine Breaker +Serial = SLPM-66713 +Name = Taito Memories Vol.2 Gekan Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25409 -Name = Futakoi [Limited Edition] +Serial = SLPM-66714 +Name = Wrestle Kingdom 2 - Pro Wrestling Sekai Taisen Region = NTSC-J --------------------------------------------- -Serial = SLPS-25410 -Name = Futakoi +Serial = SLPM-66715 +Name = Shinki Gensou Spectral Souls II [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25411 -Name = To Heart 2 [Deluxe Edition] +Serial = SLPM-66716 +Name = Growlanser VI Region = NTSC-J --------------------------------------------- -Serial = SLPS-25413 -Name = To Heart 2 [Limited Edition] +Serial = SLPM-66717 +Name = Standard Daisenryaku - Dengekisen [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25414 -Name = To Heart 2 +Serial = SLPM-66718 +Name = Standard Daisenryoku - Shiwareta Shouri [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25415 -Name = Chu-Kana Janshi [Collector's Edition] +Serial = SLPM-66719 +Name = Tenka-bito [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25416 -Name = Chu Kana Janshi Tenho Pai-Nyan +Serial = SLPM-66720 +Name = Guilty Gear XX #Slash [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25417 -Name = Panzer Front Ausf.B [Enterbrain Collection] +Serial = SLPM-66721 +Name = Musou Orochi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25418 -Name = Ace Combat 5 - The Unsung War +Serial = SLPM-66722 +Name = Jissen Pachinko Hisshouhou! CR Aladdin Destiny EX Region = NTSC-J --------------------------------------------- -Serial = SLPS-25419 -Name = Mobile Suit Gundam - Gundam vs. Z-Gundam +Serial = SLPM-66723 +Name = Zoids Infinity Fuzors [Tomy Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25421 -Name = Bokujou Monogarari - Oh! Wonderful Life +Serial = SLPM-66724 +Name = Zoids Tactics [Tomy Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25422 -Name = Death by Degrees - Tekken - Nina Williams +Serial = SLPM-66725 +Name = Zoids Struggle [Tomy Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25423 -Name = Kaitou Apricot - Complete Edition [Limited Edition] +Serial = SLPM-66726 +Name = Ojousama Kumikyoku - Sweet Concert Region = NTSC-J --------------------------------------------- -Serial = SLPS-25424 -Name = Kaitou Apricot - Complete Edition +Serial = SLPM-66727 +Name = Love Drops Region = NTSC-J --------------------------------------------- -Serial = SLPS-25425 -Name = SD Gundam Force Daikessen! +Serial = SLPM-66728 +Name = Pro Yakyuu Spirits 4 Region = NTSC-J -eeClampMode = 2 //Needed for SPS on some characters --------------------------------------------- -Serial = SLPS-25426 -Name = Detective Conan - Inheritance of Britain +Serial = SLPM-66729 +Name = Shounen Onyouji - Tsubasa Yoima, Ten e Kare [Deluxe Box] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25427 -Name = Legions Gekitou! Saga Battle +Serial = SLPM-66730 +Name = Shounen Onyouji - Tsubasa Yoima, Ten e Kare Region = NTSC-J --------------------------------------------- -Serial = SLPS-25428 -Name = Metal Slug 3 [SNK Best Collection] +Serial = SLPM-66731 +Name = Black [EA Best Hits] Region = NTSC-J +vuClampMode = 0 --------------------------------------------- -Serial = SLPS-25429 -Name = King of Fighters 2000, The [SNK Best Collection] +Serial = SLPM-66732 +Name = Iinazuke [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25430 -Name = Lupin III - Columbus no Isan wa Akenisomar +Serial = SLPM-66733 +Name = Iinazuke Region = NTSC-J --------------------------------------------- -Serial = SLPS-25432 -Name = Majommusume A La Mode [Magical Box] +Serial = SLPM-66734 +Name = Kiruto - Anata to Tsumugu Yume to Koi no Dress [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25433 -Name = Teikoku Sensenki [Limited Edition] +Serial = SLPM-66735 +Name = Kiruto - Anata to Tsumugu Yume to Koi no Dress Region = NTSC-J --------------------------------------------- -Serial = SLPS-25434 -Name = Rhapsody of Zephyr, The [Best Collection] +Serial = SLPM-66736 +Name = Rogue Hearts Dungeon Region = NTSC-J --------------------------------------------- -Serial = SLPS-25435 -Name = Majommusume A La Mode +Serial = SLPM-66737 +Name = Sakura Ran Koukou Hosutobu [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25436 -Name = Teikoku Sensenki +Serial = SLPM-66738 +Name = Sakura Ran Koukou Hosutobu Region = NTSC-J --------------------------------------------- -Serial = SLPS-25437 -Name = D A - White +Serial = SLPM-66739 +Name = Burnout Dominator Region = NTSC-J --------------------------------------------- -Serial = SLPS-25438 -Name = D A - White [Limited Edition] +Serial = SLPM-66740 +Name = Sentou Kokka Kai - Legend [DX Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25439 -Name = Hajime no Ippo - All-Stars +Serial = SLPM-66741 +Name = Sentou Kokka Kai - Legend Region = NTSC-J --------------------------------------------- -Serial = SLPS-25440 -Name = Gold Gashbell!! Gekitou! Saikyou no Mamonotachi +Serial = SLPM-66742 +Name = Pop'n Music 14 Fever Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25441 -Name = Ultraman Fighting Evolution 3 +Serial = SLPM-66743 +Name = Shinkyouku Soukai Polyphonica Region = NTSC-J --------------------------------------------- -Serial = SLPS-25443 -Name = Kawa no Nushi Tsuri - Wonderful Journey +Serial = SLPM-66744 +Name = Killer 7 [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25444 -Name = Cherry Blossom +Serial = SLPM-66745 +Name = Shadow of Rome [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25445 -Name = Kagero II - Dark Illusion +Serial = SLPM-66746 +Name = Guilty Gear XX - Accent Core Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25447 -Name = Top wo Nerae! Gunbuster +Serial = SLPM-66747 +Name = Baroque Region = NTSC-J --------------------------------------------- -Serial = SLPS-25448 -Name = King of Fighters '94, The - Rebout [Special Pack] +Serial = SLPM-66748 +Name = Mana-Khemia - Gakuen no Renkinjutsu Shitachi Region = NTSC-J +DMABusyHack = 1 --------------------------------------------- -Serial = SLPS-25449 -Name = King of Fighters '94, The - Rebout +Serial = SLPM-66749 +Name = Wizardry X 2 - Mugen no Gakuto [Wonder Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25450 -Name = Tales of Rebirth +Serial = SLPM-66750 +Name = Final Fantasy XII International - Zodiac Job System [with Bonus DVD] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25451 -Name = Hana to Taiyou to Ame to [Super Best Collection] +Serial = SLPM-66751 +Name = Mahoroba Stories Region = NTSC-J --------------------------------------------- -Serial = SLPS-25452 -Name = Kino no Tabi - The Beautiful World [MediaWorks Best] +Serial = SLPM-66752 +Name = Medal of Honor - Vanguard Region = NTSC-J --------------------------------------------- -Serial = SLPS-25453 -Name = Digimon World X +Serial = SLPM-66753 +Name = Getsumento Heiki Mina - Futatsu no Project M [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25454 -Name = Daisenryaku VII Exceed +Serial = SLPM-66754 +Name = Getsumento Heiki Mina - Futatsu no Project M Region = NTSC-J --------------------------------------------- -Serial = SLPS-25455 -Name = Sanyo Pachinko Paradise 11 +Serial = SLPM-66755 +Name = Majommusume - A La Mode II Region = NTSC-J --------------------------------------------- -Serial = SLPS-25456 -Name = Gladiator - Road to Freedom +Serial = SLPM-66756 +Name = Que - Ancient Leaf no Yousei [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25457 -Name = Poncotsu Roman Daikatsugeki Bumpy Trot +Serial = SLPM-66757 +Name = Que - Ancient Leaf no Yousei Region = NTSC-J --------------------------------------------- -Serial = SLPS-25458 -Name = King of Fighters 2001, The [SNK Best Collection] +Serial = SLPM-66758 +Name = Neo Angelique [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25459 -Name = Sword of Destiny +Serial = SLPM-66759 +Name = Harukanaru Jikuu no Kade 3 - Izayoiki [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25460 -Name = DragonBall Z 3 +Serial = SLPM-66760 +Name = Nobunaga no Yabou - Soutensoku [with Power-Up Kit] [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25461 -Name = Armored Core - Formula Front +Serial = SLPM-66761 +Name = Panic Palette [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25462 -Name = Armored Core - Last Raven +Serial = SLPM-66762 +Name = Panic Palette Region = NTSC-J --------------------------------------------- -Serial = SLPS-25463 -Name = My Home o Tsukurou 2! Takumi +Serial = SLPM-66763 +Name = Neon Genesis Evangelion - Battle Orchestra Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25464 -Name = Daisenryaku VII Exceed +Serial = SLPM-66764 +Name = Izumo Zero Region = NTSC-J --------------------------------------------- -Serial = SLPS-25465 -Name = Azumi +Serial = SLPM-66765 +Name = Juujimoto Ripputai Sypher - Game of Survival [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25466 -Name = Eternal Aselia - The Spirit of Eternity Sword [Limited Edition] +Serial = SLPM-66766 +Name = Juujimoto Ripputai Sypher - Game of Survival Region = NTSC-J --------------------------------------------- -Serial = SLPS-25467 -Name = Minna Daisuki Katamaki Damacy +Serial = SLPM-66767 +Name = Urban Chaos - Riot Response Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25468 -Name = Eternal Aselia - The Spirit of Eternity Sword +Serial = SLPM-66768 +Name = Missing Parts - The Tantei Stories - Side A [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25469 -Name = Baseball Live 2005 +Serial = SLPM-66769 +Name = Missing Parts - The Tantei Stories - Side B [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25470 -Name = Bouken-ou Beat - Dark Next Century +Serial = SLPM-66770 +Name = Kuon no Kizuna - Sairinsho [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25471 -Name = Gakkou o Tsukurou - Happy Days!! +Serial = SLPM-66771 +Name = Densha de Go! Shinkansen [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25472 -Name = XIII (Thirteen) [Best Collection] +Serial = SLPM-66772 +Name = Densha de Go! Final [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25473 -Name = One Piece - Grand Battle! Combat Rush +Serial = SLPM-66773 +Name = Densha de Go! Professional 2 [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25474 -Name = Beck - The Game +Serial = SLPM-66774 +Name = Energy Airforce - AimStrike! [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25476 -Name = Saint Seiya Seiiki Juunikyuu Hen +Serial = SLPM-66775 +Name = Taito Memories Joukan [Taito Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25478 -Name = Mobile Suit Gundam - One Year War +Serial = SLPM-66776 +Name = Taito Memories Gekan [Taito Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25479 -Name = Gold Gashbell - Friendship Tag Battle 2 +Serial = SLPM-66777 +Name = Jikkyou Powerful Pro Yakyuu 14 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25480 -Name = ZIPANG +Serial = SLPM-66778 +Name = Galaxy Angel - Eternal Lovers [Broccoli The Best Quality] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25481 -Name = Gattsu!! Mori no Ishimatsu +Serial = SLPM-66779 +Name = Galaxy Angel II - Mugen Kairou no Kagi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25482 -Name = Yuki Katari [Renewal Version] +Serial = SLPM-66781 +Name = Dragon Quest - Shonen Yangus to Fushigi no Dungeon [Ultimate Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25483 -Name = Sui-Toshi-Zun +Serial = SLPM-66782 +Name = Valkyrie Profile 2 - Silmeria [Ultimate Hits] Region = NTSC-J +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLPS-25484 -Name = SNK vs. Capcom Chaos [SNK Best Collection] +Serial = SLPM-66783 +Name = Idol Janshi Suchie-Pai 4 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25485 -Name = Mobile Suit Gundam Ver.1.5 [Gundam the Best] +Serial = SLPM-66785 +Name = Idol Janshi Suchie-Pai 4 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25486 -Name = Mobile Suit Gundam - Lost War Chronicles [Gundam the Best] +Serial = SLPM-66786 +Name = Gift - Prism [Broccoli Best Quality] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25487 -Name = Mobile Suit Gundam - Megurial Sora [Gundam the Best] +Serial = SLPM-66787 +Name = Tsuika AS+ Eternal Name Region = NTSC-J --------------------------------------------- -Serial = SLPS-25488 -Name = Zeonic Front - Mobile Suit Gundam 0079 [Gundam the Best] +Serial = SLPM-66788 +Name = Grand Theft Auto - San Andreas [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25489 -Name = Ambition of Giren - Zeon Independence War + Direction Book of Capture [Gundam the Best] +Serial = SLPM-66789 +Name = Grand Theft Auto III [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25491 -Name = SD Gundam G Generation Neo [Gundam The Best] +Serial = SLPM-66790 +Name = Grand Theft Auto - Vice City [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25492 -Name = SD Gundam G Generation - Gundam Seed [Gundam The Best] +Serial = SLPM-66791 +Name = Memories Off #5 Encore Region = NTSC-J --------------------------------------------- -Serial = SLPS-25493 -Name = Backyard Wrestling 2 - There Goes the Neighborhood +Serial = SLPM-66792 +Name = Metal Gear Solid 2 - Sons of Liberty [20th Anniversary Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25494 -Name = Fragrence Tale +Serial = SLPM-66794 +Name = Metal Gear Solid 3 - Snake Eater [20th Anniversary Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25495 -Name = Metal Slug 5 +Serial = SLPM-66796 +Name = Metal Gear Solid - 20th Anniversary Collection Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25496 -Name = Berwick Saga - Tear Ring Saga Series [Deluxe Pack] +Serial = SLPM-66800 +Name = Pirates of the Caribbean - At World's End Region = NTSC-J --------------------------------------------- -Serial = SLPS-25497 -Name = Berwick Saga - Tear Ring Saga Series +Serial = SLPM-66801 +Name = Izumo Complete [GN Software Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25498 -Name = Jikuu Bouken Zentrix +Serial = SLPM-66802 +Name = Kimore Hi no Namiki Michi [GN Software Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25499 -Name = Yu Yu Hakusho Forever +Serial = SLPM-66803 +Name = Shikaku Tantei - Sora no Sekai - Thousand Dreams Region = NTSC-J --------------------------------------------- -Serial = SLPS-25500 -Name = Namco 50th Anniversary Collection +Serial = SLPM-66804 +Name = Colorful Aquarium - My Little Mermaid [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25501 -Name = Onmyou Taisenki - Hasha no In +Serial = SLPM-66805 +Name = Colorful Aquarium - My Little Mermaid Region = NTSC-J --------------------------------------------- -Serial = SLPS-25502 -Name = Steamboy +Serial = SLPM-66806 +Name = Shuffle! On the Stage [Kadokawa the Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25503 -Name = NeoGeo Online Collection Vol.2 - Bakumatsu Roman - Gekka no Kenshi 1&2 +Serial = SLPM-66807 +Name = Disney-Pixar's Remy no Oishii Restaurant (Ratatouille) Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25504 -Name = Garou - Mark of the Wolves [Limited Edition] +Serial = SLPM-66808 +Name = Tom Clancy's Ghost Recon - Advanced Warfighter [Ubisoft the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25505 -Name = Namco X Capcom +Serial = SLPM-66809 +Name = Saishu Shiken Kujira - Alive Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25506 -Name = For Symphony - With All One's Heart +Serial = SLPM-66810 +Name = J.League Winning Eleven 2007 Club Championship Region = NTSC-J --------------------------------------------- -Serial = SLPS-25507 -Name = Mai-Hime [Limited Edition] +Serial = SLPM-66811 +Name = Winning Post 7 [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25508 -Name = Mai-Hime - The Another +Serial = SLPM-66812 +Name = GI Jockey 4 [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25509 -Name = Garou - Mark of the Wolves +Serial = SLPM-66813 +Name = Sangokushi IX [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25510 -Name = Tekken 5 +Serial = SLPM-66814 +Name = Pure x Cure Re-covery Region = NTSC-J -Compat = 5 -eeClampMode = 1 --------------------------------------------- -Serial = SLPS-25511 -Name = Rasetsu Alternative +Serial = SLPM-66815 +Name = Baldr Bullet - Equilibrium Region = NTSC-J --------------------------------------------- -Serial = SLPS-25513 -Name = Aoi Umi no Trista [Limited Edition] +Serial = SLPM-66816 +Name = Chanter# - Kimi no Uta ga Todoitara Region = NTSC-J --------------------------------------------- -Serial = SLPS-25514 -Name = Aoi Umi no Trista +Serial = SLPM-66817 +Name = Palais de Reine Region = NTSC-J --------------------------------------------- -Serial = SLPS-25515 -Name = Futakoi Alternative [Limited Edition] +Serial = SLPM-66818 +Name = Quiz & Variety SukuSuku Inufuku 2 - Motto SukuSuku Region = NTSC-J --------------------------------------------- -Serial = SLPS-25516 -Name = Futakoi Alternative +Serial = SLPM-66819 +Name = Beat Down - Fists of Vengeance [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25517 -Name = Enjoy Golf! +Serial = SLPM-66820 +Name = Jissen Pachinko Hisshouhou! CR Sakura Taisen Region = NTSC-J --------------------------------------------- -Serial = SLPS-25518 -Name = InuYasha - Ougi Ranbu +Serial = SLPM-66821 +Name = Sengoku Musou 2 Mushouden Region = NTSC-J --------------------------------------------- -Serial = SLPS-25519 -Name = Sousei no Aquarion +Serial = SLPM-66822 +Name = GuitarFreaks V3 & DrumMania V3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25520 -Name = Gundam True Odyssey +Serial = SLPM-66823 +Name = Taka Reet Ura Mahjong Retsuden - Mukoubushi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25521 -Name = Soccer Life 2 +Serial = SLPM-66824 +Name = Hiiro no Kakera 2 [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25522 -Name = Yoshitsuneki [Goukakenran Box] +Serial = SLPM-66825 +Name = Hiiro no Kakera 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25523 -Name = Yoshitsuneki +Serial = SLPM-66826 +Name = Youki Hime Den [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25525 -Name = King of Fighters, The - NeoWave +Serial = SLPM-66827 +Name = Youki Hime Den Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25526 -Name = Medical 91 +Serial = SLPM-66828 +Name = Beatmania IIDX 13 - DistorteD Region = NTSC-J --------------------------------------------- -Serial = SLPS-25527 -Name = dot Hack - Fragment +Serial = SLPM-66829 +Name = Major League Baseball 2K7 Region = NTSC-J -Compat = 5 -EETimingHack = 1 -OPHFlagHack = 1 -DMABusyHack = 1 --------------------------------------------- -Serial = SLPS-25528 -Name = Summon Night EX Thesis - Yoake no Tsubasa +Serial = SLPM-66830 +Name = Disney's Lewis to Mirai Dorobou (Meet the Robinsons) Region = NTSC-J --------------------------------------------- -Serial = SLPS-25529 -Name = Ultraman Fighting Evolution - Rebirth +Serial = SLPM-66835 +Name = Kiniro no Corda 2 Anchor Region = NTSC-J --------------------------------------------- -Serial = SLPS-25530 -Name = Garouden Break Blow +Serial = SLPM-66836 +Name = EA Sports Rugby '08 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25531 -Name = SD Gundam G Generation - Gundam Seed Edition +Serial = SLPM-66837 +Name = Madden NFL '08 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25532 -Name = Critical Velocity +Serial = SLPM-66838 +Name = Fantastic Fortune 2 - Triple Star [Best Hit Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25533 -Name = Tales of Legendia +Serial = SLPM-66839 +Name = We Are [Best Hit Selection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25534 -Name = Twinkle Star Sprites - La Petite Princesse +Serial = SLPM-66840 +Name = Nizu no Senritsu 2 [Best Hit Selection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25535 -Name = NeoGeo Online Collection Vol.3 - The King of Fighters - Orochi Collection [Special Pack] +Serial = SLPM-66841 +Name = Will O' Wisp [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25537 -Name = Super Robot Wars - Alpha 3 +Serial = SLPM-66842 +Name = Will O' Wisp Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25538 -Name = Super Robot Wars - Alpha [Premium Pack] +Serial = SLPM-66843 +Name = Generations of Chaos - Desire Region = NTSC-J --------------------------------------------- -Serial = SLPS-25539 -Name = School Rumble [Limited Edition] +Serial = SLPM-66844 +Name = Yuukyuu no Sakura [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25540 -Name = School Rumble +Serial = SLPM-66845 +Name = Yuukyuu no Sakura Region = NTSC-J --------------------------------------------- -Serial = SLPS-25541 -Name = New Century GPX Cyber Formula - Road to the Infinity 2 +Serial = SLPM-66846 +Name = Prism Ark - Awake Region = NTSC-J --------------------------------------------- -Serial = SLPS-25542 -Name = Naruto Uzumaki Ninden +Serial = SLPM-66847 +Name = Arabians Lost - The Engagement on Desert Region = NTSC-J -Compat = 4 -OPHFLagHack = 1 --------------------------------------------- -Serial = SLPS-25543 -Name = Futakoi - Koi to Mizugi no Survival +Serial = SLPM-66848 +Name = Sengoku Basara 2 Heroes Region = NTSC-J --------------------------------------------- -Serial = SLPS-25544 -Name = Fatal Frame - Zero +Serial = SLPM-66849 +Name = Iris no Atelier: Grand Fantasm [Gust Best Price] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25545 -Name = Fighting for One Piece +Serial = SLPM-66850 +Name = Arcana Heart Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25546 -Name = Ichigo Mashimaro [Limited Edition] +Serial = SLPM-66851 +Name = Grand Theft Auto - Liberty City Stories Region = NTSC-J --------------------------------------------- -Serial = SLPS-25547 -Name = Ichigo Mashimaro +Serial = SLPM-66852 +Name = Capcom Classics Collection [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25548 -Name = Pachitte Ultra Seven Chonmage Tatsujin 8 +Serial = SLPM-66853 +Name = Jojo no Kimyouna Bouken - Ougon no Kaze [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25549 -Name = Gundam Seed Destiny - Generation of C.E. +Serial = SLPM-66854 +Name = Street Fighter Zero - Fighters Generation [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25550 -Name = Cowboy Bebop - Tsuitou no Yakyoku [Limited Edition] +Serial = SLPM-66855 +Name = Togainu no Chi - True Blood [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25551 -Name = Cowboy Bebop - Tsuitou no Yakyoku +Serial = SLPM-66856 +Name = Togainu no Chi - True Blood Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25552 -Name = Inuyasha - Juuso no Kamen [Bandai the Best] +Serial = SLPM-66857 +Name = Itsuka, Todoku, Ano Sora ni [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25553 -Name = Yoshitsune Eiyuuden Shura +Serial = SLPM-66858 +Name = Itsuka, Todoku, Ano Sora ni Region = NTSC-J --------------------------------------------- -Serial = SLPS-25554 -Name = Eureka Seven TR1 - New Wave +Serial = SLPM-66859 +Name = Sengoku Basara [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25556 -Name = Hissatsu Pachinko Station V11 +Serial = SLPM-66860 +Name = Nettai Teikiatsu Otome [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25557 -Name = Urban Reign +Serial = SLPM-66861 +Name = Nettai Teikiatsu Otome Region = NTSC-J --------------------------------------------- -Serial = SLPS-25558 -Name = NeoGeo Battle Coliseum +Serial = SLPM-66862 +Name = Ayaka Shibito [Best Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25559 -Name = Samurai Spirits - Tenkaichi Kenkakuden +Serial = SLPM-66863 +Name = WWE SmackDown vs. RAW 2008 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25560 -Name = DragonBall Z - Sparking! +Serial = SLPM-66864 +Name = Umisho Region = NTSC-J --------------------------------------------- -Serial = SLPS-25561 -Name = MotoGP 4 +Serial = SLPM-66866 +Name = Jissen Pachi-Slot Hisshouhou! Hokuto no Ken 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25564 -Name = Gallop Racer 8 - Live Horse Racing +Serial = SLPM-66867 +Name = MotoGP '07 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25565 -Name = Hisshou Pachinko Kouryoku Series Vol.1 - CR Shinseiki Evangelion +Serial = SLPM-66868 +Name = Tom Clancy's Splinter Cell - Double Agent [Ubisoft the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25566 -Name = Simple 2000 Series Ultimate Vol.27 - After Class Love Beat +Serial = SLPM-66869 +Name = Need for Speed - Carbon [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25567 -Name = Pachitte Chonmage Tatsujin 9 +Serial = SLPM-66870 +Name = Kuri no Okurimono [First Print Special Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25568 -Name = Keroro Gunsou - Mero Mero Battle Royale [Bandai The Best] +Serial = SLPM-66871 +Name = Shoukan Shoujo - Elemental Girl Calling [DX Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25569 -Name = Kidou Senshi Gundam SEED - Rengou vs. Z.A.F.T. +Serial = SLPM-66872 +Name = Shoukan Shoujo - Elemental Girl Calling Region = NTSC-J -eeRoundMode = 1 -FpuNegDivHack = 1 +Compat = 5 --------------------------------------------- -Serial = SLPS-25570 -Name = Kino no Tabi 2 - The Beautiful World +Serial = SLPM-66873 +Name = Lucky Star [DX Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25571 -Name = Metal Slug 4 [SNK Best Collection] +Serial = SLPM-66874 +Name = Lucky Star Region = NTSC-J --------------------------------------------- -Serial = SLPS-25572 -Name = Samurai Spirits Zero [SNK Best Collection] +Serial = SLPM-66875 +Name = Jikkyou Powerful Pro Major League 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25573 -Name = King of Fighters 2002, The [SNK Best Collection] +Serial = SLPM-66876 +Name = Izumo 2 [GN Software Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25574 -Name = Sanyo Pachinko Paradise 12 +Serial = SLPM-66877 +Name = Summer## [GN Software Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25575 -Name = Keroro Gunsou - Mero Mero Battle Royale Z +Serial = SLPM-66878 +Name = Dokapon Kingdom Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25576 -Name = One Piece - Pirates Carnival +Serial = SLPM-66879 +Name = StarTRain - Your Past Makes Your Future [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25577 -Name = Soul Calibur III +Serial = SLPM-66880 +Name = StarTRain - Your Past Makes Your Future Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25578 -Name = K-1 World Grand Prix 2005 +Serial = SLPM-66881 +Name = TOCA Race Driver 3 - Ultimate Racing Simulator Region = NTSC-J --------------------------------------------- -Serial = SLPS-25579 -Name = Little Aid +Serial = SLPM-66882 +Name = Hakarena Heart [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25580 -Name = Chicken Little +Serial = SLPM-66883 +Name = Hakarena Heart Region = NTSC-J --------------------------------------------- -Serial = SLPS-25581 -Name = Simple 2000 Series Vol.92 - The Game of a Curse +Serial = SLPM-66884 +Name = NBA Live '08 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25582 -Name = Asutoro Kyudan Kessen +Serial = SLPM-66885 +Name = Winning Eleven 2008 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25584 -Name = From TV Animation - One Piece - Pirates Carnival [with Multitap for new models] +Serial = SLPM-66886 +Name = Harry Potter and the Order of the Phoenix Region = NTSC-J --------------------------------------------- -Serial = SLPS-25585 -Name = Monster Farm 5 +Serial = SLPM-66887 +Name = Harukanaru Jikuu no Kade 3 - Unmei no Meikyuu [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25586 -Name = Tales of the Abyss +Serial = SLPM-66888 +Name = GI Jockey 4 - 2007 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25587 -Name = Sugar Sugar Rune - Koimo Osharemo Pick-Up +Serial = SLPM-66889 +Name = Pri-Saga! Princess o Sagase! [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25588 -Name = Meitantei Conan - Daiei Teikoku no Isan [Bandai The Best] +Serial = SLPM-66890 +Name = Pri-Saga! Princess o Sagase! Region = NTSC-J --------------------------------------------- -Serial = SLPS-25589 -Name = Naruto Narutimett Hero 3 +Serial = SLPM-66891 +Name = Myself, Yourself [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25590 -Name = Namco Museum Arcade Hits +Serial = SLPM-66892 +Name = Myself, Yourself Region = NTSC-J --------------------------------------------- -Serial = SLPS-25591 -Name = Last Escort - Shinya no Kokuchou Monogatari +Serial = SLPM-66893 +Name = Final Fantasy XI - Vana'diel Collection Region = NTSC-J --------------------------------------------- -Serial = SLPS-25592 -Name = Sunrise Eiyuutan 3 +Serial = SLPM-66894 +Name = Final Fantasy XI - Wings of the Goddess Region = NTSC-J --------------------------------------------- -Serial = SLPS-25593 -Name = Hoshigari Empusa +Serial = SLPM-66895 +Name = Manea Sugoroku - Kabukuro Region = NTSC-J --------------------------------------------- -Serial = SLPS-25596 -Name = Konjiki no Gashbell! - Go!Go! Mamodo Fight +Serial = SLPM-66896 +Name = Pia Carrot e Youkoso!! G.O. Summer Fair Region = NTSC-J --------------------------------------------- -Serial = SLPS-25597 -Name = Kawa no Nushi Tsuri - Wonderful Journey [Best Collection] +Serial = SLPM-66897 +Name = Tales of the Abyss Region = NTSC-J --------------------------------------------- -Serial = SLPS-25598 -Name = Gakkou o Tsukurou - Happy Days!! [Best Collection] +Serial = SLPM-66898 +Name = Spectral Gene [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25599 -Name = Shakugan no Shana +Serial = SLPM-66899 +Name = Spectral Gene Region = NTSC-J ---------------------------------------------- -Serial = SLPS-25600 -Name = Samurai Champloo - Sidetracked +--------------------------------------------- +Serial = SLPM-66900 +Name = Kuri no Okurimono Region = NTSC-J --------------------------------------------- -Serial = SLPS-25601 -Name = Ueki no Housoku - Taosu Zeroberuto Juudan!! +Serial = SLPM-66901 +Name = 12Riven - The Psi-Climinal of Integral Region = NTSC-J --------------------------------------------- -Serial = SLPS-25602 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.2 - Bomber Powerful & Yume Yume World DX +Serial = SLPM-66902 +Name = Disney Princess - Enchanted Journey Region = NTSC-J --------------------------------------------- -Serial = SLPS-25603 -Name = Tensei - Swords of Destiny [Best Collection] +Serial = SLPM-66903 +Name = GI Jockey 4 - 2007 [with Winning Post 7 - 2007 - Premium Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25604 -Name = Ar tonelico: Sekai no Owari de Utai Tsudukeru Shoujo +Serial = SLPM-66905 +Name = D.C. Da Capo The Origin Region = NTSC-J --------------------------------------------- -Serial = SLPS-25605 -Name = NeoGeo Online Collection Vol.3 - The King of Fighters - Orochi Collection +Serial = SLPM-66906 +Name = Tensho Gakuen Gekkoroku [Tokudame Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25606 -Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioutachi +Serial = SLPM-66907 +Name = Iinazuke [Princess Soft Collection] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25607 -Name = Makai Senki Disgaea 2 [Limited Edition] +Serial = SLPM-66908 +Name = Izumo 2 - Gakuen Kyousoukyoku - Double Tact Region = NTSC-J --------------------------------------------- -Serial = SLPS-25608 -Name = Makai Senki Disgaea 2 +Serial = SLPM-66909 +Name = Shinkyouku Soukai Polyphonica 3&4 Hanashi Kanketsuhen Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25609 -Name = King of Fighters, The - Maximum Impact 2 +Serial = SLPM-66910 +Name = Stuntman - Ignition Region = NTSC-J +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLPS-25610 -Name = Ryuuko no Ken - Ten-Chi-Jin (Art of Fighting Collection) +Serial = SLPM-66911 +Name = Finalist [Princess Soft Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25611 -Name = Strawberry Panic [Limited Edition] +Serial = SLPM-66912 +Name = Higurashi no Naku Koro ni Matsuri - Kakera Asobi [Append Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25612 -Name = Strawberry Panic +Serial = SLPM-66913 +Name = Higurashi no Naku Koro ni Matsuri - Kakera Asobi Region = NTSC-J --------------------------------------------- -Serial = SLPS-25613 -Name = My Home o Tsukurou 2! Takumi [Best Collection] +Serial = SLPM-66914 +Name = Houkago wa Hakugin no Shirabe Region = NTSC-J --------------------------------------------- -Serial = SLPS-25614 -Name = Mai-Hime - Unmei no Keitouju [Best Collection] +Serial = SLPM-66915 +Name = Yu-Gi-Oh Dual Monsters GX - Tag Force Evolution Region = NTSC-J --------------------------------------------- -Serial = SLPS-25615 -Name = My Home wo Tsukurou 2! Kantan Sekkei!! +Serial = SLPM-66916 +Name = Jikkyou Powerful Pro Yakyuu 14 Chou Ketteiban Region = NTSC-J --------------------------------------------- -Serial = SLPS-25616 -Name = Ski Jumping Pairs Reloaded +Serial = SLPM-66917 +Name = Grand Theft Auto - Vice City Stories Region = NTSC-J --------------------------------------------- -Serial = SLPS-25617 -Name = Etude Prologue - Yureugoku Kokoro no Katachi +Serial = SLPM-66918 +Name = Princess Maker 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25618 -Name = D-A - Black [Best Price] +Serial = SLPM-66919 +Name = Kyuuketsu Kitan Moonties Region = NTSC-J --------------------------------------------- -Serial = SLPS-25619 -Name = D-A - White [Best Price] +Serial = SLPM-66920 +Name = Hoshi Furu Region = NTSC-J --------------------------------------------- -Serial = SLPS-25620 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.3 - CR Marilyn Monroe +Serial = SLPM-66921 +Name = H2O Region = NTSC-J --------------------------------------------- -Serial = SLPS-25621 -Name = Kashimashi! Girl Meets Girl [Limited Edition] +Serial = SLPM-66922 +Name = D.C. II P.S. - Da Capo II Plus Situation [DX Pack] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25622 -Name = Kashimashi! Girl Meets Girl +Serial = SLPM-66924 +Name = D.C. II P.S. - Da Capo II Plus Situation Region = NTSC-J --------------------------------------------- -Serial = SLPS-25623 -Name = Another Century's Episode 2 +Serial = SLPM-66926 +Name = NiGHTS into Dreams... Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25624 -Name = Futakoi-Futakoi Island Collection +Serial = SLPM-66927 +Name = Wrestle Angels - Survivor [Good Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25626 -Name = Chronicles of Narnia, The - The Lion, The Witch and The Wardrobe +Serial = SLPM-66929 +Name = Elminage - Yami no Fujo to Kamigami no Yubiwa Region = NTSC-J --------------------------------------------- -Serial = SLPS-25627 -Name = Mobile Suit Gundam Climax U.C. +Serial = SLPM-66931 +Name = Juiced 2 - Hot Import Nights Region = NTSC-J --------------------------------------------- -Serial = SLPS-25628 -Name = IGPX +Serial = SLPM-66932 +Name = Need for Speed - ProStreet Region = NTSC-J --------------------------------------------- -Serial = SLPS-25629 -Name = Ace Combat Zero - The Belkan War +Serial = SLPM-66933 +Name = Kimi ga Aruji de Shitsuji ga Oro de - Oshie Nikki [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25630 -Name = Pro Yakyuu Netsu Star 2006 +Serial = SLPM-66934 +Name = Kimi ga Aruji de Shitsuji ga Oro de - Oshie Nikki Region = NTSC-J --------------------------------------------- -Serial = SLPS-25631 -Name = Simple 2000 Series Vol.98 - Roman Sabou +Serial = SLPM-66935 +Name = True Tears Region = NTSC-J --------------------------------------------- -Serial = SLPS-25632 -Name = Simple 2000 Series Vol.97 - The Koi no Engine +Serial = SLPM-66936 +Name = Night Wizard - The Video Game - Denial of the World Region = NTSC-J --------------------------------------------- -Serial = SLPS-25633 -Name = Futakoi Alternative - Koi to Shoujo to Machinegun [Best Collection] +Serial = SLPM-66937 +Name = Jan Sangoku Musou [Koei the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25634 -Name = Metal Slug 5 [SNK Best Collection] +Serial = SLPM-66938 +Name = Angelique Etoile [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25635 -Name = King of Fighters 2003, The [SNK Best Collection] +Serial = SLPM-66939 +Name = Boukoku no Aegis 2035 - Warship Gunner [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25636 -Name = King of Fighters, The - Maximum Impact +Serial = SLPM-66940 +Name = Gundam Musou Special Region = NTSC-J --------------------------------------------- -Serial = SLPS-25638 -Name = King of Fighters, The - Maximum Impact 2 +Serial = SLPM-66941 +Name = Hokuto no Ken (Fist of the North Star) [Sega the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25639 -Name = Plus Plum 2 Again +Serial = SLPM-66942 +Name = Final Approach 2 - 1st Priority [First Print Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25640 -Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc1of2] +Serial = SLPM-66943 +Name = Final Approach 2 - 1st Priority Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25641 -Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc2of2] +Serial = SLPM-66944 +Name = Petit Four [Limited Edition] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25642 -Name = Super DragonBall Z +Serial = SLPM-66945 +Name = Petit Four Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25643 -Name = Kimikisu +Serial = SLPM-66946 +Name = NBA Live '07 [EA Best Hits] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25644 -Name = Simple 2000 Ultimate Series Vol.31 - K-1 World Max 2005 +Serial = SLPM-66947 +Name = Nobunaga no Yabou - Kakushin [with Power-Up Kit] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25645 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.4 - CR Ashita Gaarusa Yoshimoto World +Serial = SLPM-66948 +Name = Nobunaga no Yabou - Kakushin [with Power-Up Kit and Sangokushi XI] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25646 -Name = Eureka Seven - New Vision +Serial = SLPM-66950 +Name = Winning Post 7 Maximum 2008 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25647 -Name = Simple 2000 Series Ultimate Vol.32 - Azumi +Serial = SLPM-66952 +Name = Harukanaru Jikuu no Kade 4 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25648 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.5 - CR Shinseiki Evangelion Second Impact & Pachisuro Shinseiki Evangelion +Serial = SLPM-66953 +Name = Musou Orochi - Maou Sairin Region = NTSC-J --------------------------------------------- -Serial = SLPS-25649 -Name = Space Sheriff Spirits +Serial = SLPM-66954 +Name = Nobunaga no Yabou - Online - Souha no Shou Region = NTSC-J --------------------------------------------- -Serial = SLPS-25650 -Name = Metal Slug 3D +Serial = SLPM-66956 +Name = Neo Angelique - Full Voice Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25651 -Name = dot Hack G.U. Vol.1 - Saitan +Serial = SLPM-66957 +Name = Neon Genesis Evangelion - Battle Orchestra [Broccoli Best Quality] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25653 -Name = Cluster Edge [Limited Edition] +Serial = SLPM-66958 +Name = Aoishiro [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25654 -Name = Cluster Edge +Serial = SLPM-66959 +Name = Aoishiro Region = NTSC-J --------------------------------------------- -Serial = SLPS-25655 -Name = dot Hack G.U. Vol.2 - Kimi Omou Koe +Serial = SLPM-66960 +Name = Need for Speed - Underground 2 [EA-SY! 1980] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25656 -Name = dot Hack - G.U. Vol.3 - Aruku Youna Hayasa de +Serial = SLPM-66961 +Name = Black [EA-SY! 1980] Region = NTSC-J +vuClampMode = 0 --------------------------------------------- -Serial = SLPS-25657 -Name = Fighting Beauty Wulong +Serial = SLPM-66962 +Name = Burnout 3 - Takedown [EA-SY! 1980] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25658 -Name = Binchou-Tan - Shiwase Koyomi [Limited Edition] +Serial = SLPM-66963 +Name = Medal of Honor - Frontline [EA-SY! 1980] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25659 -Name = Binchou-Tan - Shiwase Koyomi +Serial = SLPM-66964 +Name = Guilty Gear XX - Accent Core Plus [Append Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25660 -Name = King of Fighters XI, The +Serial = SLPM-66965 +Name = Guilty Gear XX - Accent Core Plus Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLPS-25661 -Name = King of Fighters, The - Nests +Serial = SLPM-66966 +Name = Godfather, The [EA-SY! 1980] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25662 -Name = Kyo Kara Maoh! The 1st trip of Maoh! [Premium Box] +Serial = SLPM-66967 +Name = Aria: The Natural ~Tooi Yume no Mirage~ [Alchemist Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25663 -Name = Kyo Kara Maoh! The 1st trip of Maoh! +Serial = SLPM-66968 +Name = Kamiwaza [Acquire the Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25664 -Name = NeoGeo Online Collection - Garou Densetsu Battle Archives Vol.1 +Serial = SLPM-66969 +Name = Hoshigari Empusa Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25665 -Name = Pachitte Chonmage Tatsujin 10 +Serial = SLPM-66970 +Name = Pro Yakyuu Spirits 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25666 -Name = Sakura Zakashobotai [Irem Best] +Serial = SLPM-66971 +Name = Sangokushi IX [with Power-Up Kit] [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25667 -Name = Daito Giken Premium Pachi-Slot Collection - Yoshimune +Serial = SLPM-66972 +Name = Kurogane no Houkou 2 - Warship Commander [Koei Selection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25668 -Name = Torikago no Mukougawa - The Angles with Strange Wings +Serial = SLPM-66973 +Name = Princess Nightmare Region = NTSC-J --------------------------------------------- -Serial = SLPS-25669 -Name = School Rumble 2nd Term [Limited Edition] +Serial = SLPM-66974 +Name = Slotter Up Core 10 - Mach GoGoGo Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25670 -Name = School Rumble 2nd Term +Serial = SLPM-66977 +Name = Shinkyouku Soukai Polyphonica 0-4 Hanashi Full Pack Region = NTSC-J --------------------------------------------- -Serial = SLPS-25671 -Name = School Rumble [Best Collection] +Serial = SLPM-66978 +Name = Persona 4 [Konami-style Special Edition] Region = NTSC-J +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPS-25672 -Name = 7Cafe - Katashiki Mei Bonba Pawafuru 2 +Serial = SLPM-66987 +Name = Kowloon Youma Gakuen Ki [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25673 -Name = Last Escort - The Black Butterfly Special Night +Serial = SLPM-66989 +Name = Castle Fantasia - Arihato Senki [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25674 -Name = Metal Slug 6 +Serial = SLPM-66990 +Name = Majommusume A La Mode II [Best Version] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25675 -Name = Battle Stadium D.O.N. +Serial = SLPM-66991 +Name = Fuuraiki [Best Version] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25676 -Name = Kinnikuman Muscle Grand Prix Max +Serial = SLPM-66992 +Name = Fuuuraiki 2 [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25677 -Name = Blood+ One Night Kiss +Serial = SLPM-66993 +Name = Rim Runners [Best Version] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25678 -Name = Utawareru Mono [Limited Edition] +Serial = SLPM-66994 +Name = Mana-Khemia - Gakuen no Renkinjutsu Shitachi [Best Version] Region = NTSC-J +DMABusyHack = 1 --------------------------------------------- -Serial = SLPS-25679 -Name = Utawareru Mono +Serial = SLPM-66996 +Name = Shuumatsu Otome Gensou Alicematic Apocalypse [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25680 -Name = Mai-Kinoto Hime [Limited Edition] +Serial = SLPM-66997 +Name = Shuumatsu Otome Gensou Alicematic Apocalypse Region = NTSC-J --------------------------------------------- -Serial = SLPS-25681 -Name = Mai-Kinoto Hime +Serial = SLPM-66998 +Name = Fushigi Yuugi - Suzaku Ibun [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25682 -Name = Sanyo Pachinko Paradise 13 +Serial = SLPM-66999 +Name = Fushigi Yuugi - Suzaku Ibun Region = NTSC-J --------------------------------------------- -Serial = SLPS-25683 -Name = Poncotsu Roman Daikatsugeki Bumpy Trot [Irem Collection] +Serial = SLPM-67000 +Name = Fushigi Yuugi - Shigiyuugi Kurotake Kaiden Gaiden - Kagami no Fujo [IF Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25684 -Name = Mermaid Prism [Limited Edition] +Serial = SLPM-67002 +Name = Metal Gear Solid 2 - Substance Region = NTSC-J --------------------------------------------- -Serial = SLPS-25685 -Name = Rurouni Kenshin - Enjou! Kyoto Rinne +Serial = SLPM-67003 +Name = Sakura Taisen - Atsuki Chishioni Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25686 -Name = Jojo no Kimyou na Bouken - Phantom Blood +Serial = SLPM-67004 +Name = Medal of Honor - Rising Sun Region = NTSC-J --------------------------------------------- -Serial = SLPS-25687 -Name = Korobotto Adventure +Serial = SLPM-67005 +Name = Lord of the Rings, The - The Return of the King Region = NTSC-J --------------------------------------------- -Serial = SLPS-25688 -Name = Simoun - Shoubi Sensou - Fuuin no Remersion [First Print - Limited Edition] +Serial = SLPM-67006 +Name = Train Simulator - Kyushu Shinkansen Region = NTSC-J --------------------------------------------- -Serial = SLPS-25689 -Name = Simoun - Shoubi Sensou - Fuuin no Remersion +Serial = SLPM-67007 +Name = Train Simulator - Keisei Toei Keikyu Region = NTSC-J --------------------------------------------- -Serial = SLPS-25690 -Name = DragonBall Z - Sparking Neo +Serial = SLPM-67008 +Name = Metal Gear Solid 2 - Substance [Konami Dendou Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25691 -Name = Captain Tsubasa +Serial = SLPM-67009 +Name = Sakura Taisen V - Saraba Itoshiki Hito Yo Region = NTSC-J --------------------------------------------- -Serial = SLPS-25693 -Name = Shinseiki GPX - Road to the Infinity 3 +Serial = SLPM-67010 +Name = God of War Region = NTSC-J --------------------------------------------- -Serial = SLPS-25694 -Name = Princess Princess +Serial = SLPM-67011 +Name = God of War [CapKore] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25695 -Name = New Century GPX Cyber Formula - Road to the Infinity 3 +Serial = SLPM-67012 +Name = God of War [Best Price] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25696 -Name = Mermaid Prism +Serial = SLPM-67013 +Name = God of War II - The End Begins Region = NTSC-J --------------------------------------------- -Serial = SLPS-25697 -Name = CR Fever Powerful Zero +Serial = SLPM-67015 +Name = School Days LxH Region = NTSC-J +--------------------------------------------- +Serial = SLPM-67502 +Name = Devil May Cry +Region = NTSC-K Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLPS-25698 -Name = Fatal Fury - Battle Archives 2 -Region = NTSC-J +Serial = SLPM-67507 +Name = Onimusha Warlords +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25699 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.8 -Region = NTSC-J +Serial = SLPM-67508 +Name = Gitaroo Man +Region = NTSC-K +Compat = 5 +eeRoundMode = 1 +vuRoundMode = 3 --------------------------------------------- -Serial = SLPS-25700 -Name = Aoi no Tristia [The Best Price] -Region = NTSC-J +Serial = SLPM-67513 +Name = Final Fantasy X International +Region = NTSC-K +IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-25701 -Name = Gallop Racer Inbreed -Region = NTSC-J +Serial = SLPM-67514 +Name = Kessen +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25702 -Name = Amekoushi no Kan -Region = NTSC-J +Serial = SLPM-67518 +Name = Onimusha 2 Samurai's Destiny +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25703 -Name = Simple 2000 Series Vol.111 - The Itadaki Raider -Region = NTSC-J +Serial = SLPM-67524 +Name = Armored Core 3 +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25704 -Name = Summon Night 4 -Region = NTSC-J +Serial = SLPM-67528 +Name = Hajime no Ippo - Victorious Boxers [Championship Edition] +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25708 -Name = Zero no Tsukaima [Limited Edition] -Region = NTSC-J +Serial = SLPM-67529 +Name = Gun Survivor 3 Dino Crisis +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25709 -Name = Zero no Tsukaima -Region = NTSC-J +Serial = SLPM-67531 +Name = Kessen 2 +Region = NTSC-K --------------------------------------------- -Serial = SLPS-25710 -Name = K-1 World Grand Prix 2006 -Region = NTSC-J +Serial = SLPM-67535 +Name = Memories Of +Region = NTSC-J-K --------------------------------------------- -Serial = SLPS-25711 -Name = Kashimashi! Girl Meets Girl [Best Collection] +Serial = SLPM-67536 +Name = Senkaiden Hoshin Engi +Region = NTSC-K +--------------------------------------------- +Serial = SLPM-67540 +Name = Auto Modellista +Region = NTSC-K +Compat = 5 +--------------------------------------------- +Serial = SLPM-67546 +Name = Lord of the Rings - The Two Towers +Region = NTSC-K +--------------------------------------------- +Serial = SLPM-67552 +Name = Tomak - Save the Earth Again [Complete Edition] +Region = NTSC-K +--------------------------------------------- +Serial = SLPM-68018 +Name = Virtua Fighter - 10th Anniversary Edition Region = NTSC-J --------------------------------------------- -Serial = SLPS-25712 -Name = King of Fighters Neowave [SNK the Best] +Serial = SLPM-68503 +Name = Metal Gear Solid 2 - Sons of Liberty [Shareholder Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25713 -Name = Twinkle Star Sprites - La Petite Princesse [SNK the Best] +Serial = SLPM-68504 +Name = Tokimeki Memorial 3 - Special Sound Track Region = NTSC-J --------------------------------------------- -Serial = SLPS-25714 -Name = Naruto - Konoha Spirits +Serial = SLPM-68513 +Name = DragonBall Z - Budokai 2 V Region = NTSC-J -OPHFLagHack = 1 --------------------------------------------- -Serial = SLPS-25715 -Name = Tales of Destiny +Serial = SLPM-68516 +Name = Metal Gear Solid 3 - Snake Eater [Shareholder Edition] Region = NTSC-J -FpuMulHack = 1 --------------------------------------------- -Serial = SLPS-25716 -Name = Digimon Savers - Another Mission +Serial = SLPM-74001 +Name = Gungriffon Blaze [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25717 -Name = Simple 2000 Series Ultimate Vol.33 - Ururun Quest +Serial = SLPM-74002 +Name = Shin Sangoku Musou [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25718 -Name = Mobile Suit Gundam Seed Destiny - Rengou vs. Z.A.F.T. II Plus +Serial = SLPM-74003 +Name = Crash Bandikoot 4 - Saikuretsu [PlayStation 2 The Best] Region = NTSC-J -Compat = 5 -eeRoundMode = 1 -FpuNegDivHack = 1 --------------------------------------------- -Serial = SLPS-25719 -Name = Happiness! Deluxe [First Print Limited Edition] +Serial = SLPM-74004 +Name = Maximo - Ghosts to Glory [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25720 -Name = Happiness! Deluxe +Serial = SLPM-74005 +Name = Romance of the Three Kingdoms VII [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25721 -Name = HimeHibi - Princess Days +Serial = SLPM-74006 +Name = Rez [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25722 -Name = Routes PE [Limited Edition] +Serial = SLPM-74007 +Name = Busin: Wizardry Alternative [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25723 -Name = Reijou Tantei - Office Love Jiken +Serial = SLPM-74044 +Name = Space Channel 5 - Part 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25724 -Name = Pachinko Kaou - Misora Hibari +Serial = SLPM-74101 +Name = Bomberman Land 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25725 -Name = King's Field - Dark Side Box +Serial = SLPM-74102 +Name = Momotaro Densetsu 12 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25726 -Name = SNK Slot Panic Vol.1 +Serial = SLPM-74103 +Name = Momotaro Dentetsu USA [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25727 -Name = Routes PE +Serial = SLPM-74104 +Name = Momotarou Densetsu 15 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25728 -Name = Kujibiki Ambulance [Limited Edition] +Serial = SLPM-74201 +Name = Biohazard Outbreak [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25729 -Name = Kujibibi Unbalance +Serial = SLPM-74202 +Name = Fuun Shinsengumi [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25730 -Name = Armored Core [Machine Side Box] +Serial = SLPM-74204 +Name = Shutokou Battle 01 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25733 -Name = Super Robot Taisen OG - Original Generations +Serial = SLPM-74205 +Name = Shin Megami Tensei III: Nocturne [PlayStation 2 The Best] Region = NTSC-J +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLPS-25734 -Name = Battle of Yu Yu Hakushou - Shitou! Ankoku Bujutsukai 120% +Serial = SLPM-74206 +Name = Onimusha [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25735 -Name = Dragon Shadow Spell +Serial = SLPM-74208 +Name = Tengai Makyou 2 - Manjimaru [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25736 -Name = Samurai Spirits - Tenkaichi Kenkakuten [SNK Best] +Serial = SLPM-74209 +Name = Samurai Michi 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25737 -Name = Neo Geo Battle Coliseum [SNK Best] +Serial = SLPM-74210 +Name = Puyo Puyo Fever [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25738 -Name = Soul Cradle Sekai o Kurau Mono [Limited Edition] +Serial = SLPM-74211 +Name = Shutokou Battle 0 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25739 -Name = Soul Cradle Sekai o Kurau Mono +Serial = SLPM-74212 +Name = Sengoku Musou [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25740 -Name = Lupin III - Lupin ni wa Shi o, Zenigata ni wa Koi o +Serial = SLPM-74215 +Name = Shin Sangoku Musou 3 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25742 -Name = Aa Megami-sama [Holy Box] +Serial = SLPM-74218 +Name = Shining Tears [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25743 -Name = Aa Megami-sama +Serial = SLPM-74219 +Name = Shin Sangoku Musou 3 - Empires [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25744 -Name = Saint Seiya Meiou Hades Juunikyuu Hen +Serial = SLPM-74220 +Name = Kengo 3 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25745 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.1 - CR Shinseiki Evangelion +Serial = SLPM-74221 +Name = Kenka Banchou [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25746 -Name = CR Fever Captain Harlock +Serial = SLPM-74222 +Name = Samurai Kanzenban [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25747 -Name = Garouden Break Blow - Fist or Twist +Serial = SLPM-74224 +Name = Sengoku Musou Moushouden [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25748 -Name = Aoi Sora no Neosphere - Nanoka Franka no Hatsumei Koubouki 2 [Limited Edition] +Serial = SLPM-74225 +Name = Nobunaga no Yabou - Tenka Sousei [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25749 -Name = Aoi Sora no Neosphere - Nanoka Franka no Hatsumei Koubouki 2 +Serial = SLPM-74226 +Name = Metal Saga - Sajin no Kusari [PlayStation 2 The Best] Region = NTSC-J +DMABusyHack = 1 //intro fmv --------------------------------------------- -Serial = SLPS-25750 -Name = Super Robot Taisen - Scramble Commander The 2nd +Serial = SLPM-74227 +Name = Ikusa Gami [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25751 -Name = Gakuen Utopia - Manabi Straight! KiraKira Happy Festa! [Limited Edition] +Serial = SLPM-74228 +Name = Fuun Bakumatsu-den [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25752 -Name = Gakuen Utopia - Manabi Straight! KiraKira Happy Festa! +Serial = SLPM-74229 +Name = BioHazard 4 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25753 -Name = Ichigo Mashimaro [Shock SP] +Serial = SLPM-74230 +Name = Devil May Cry [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25754 -Name = Kino no Tabi 2 - The Beautiful World [Electric Shock SP] +Serial = SLPM-74231 +Name = Kessen III [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25756 -Name = dot Hack G.U. Vol.1 - Saitan [Bandai the Best] +Serial = SLPM-74232 +Name = Shin Onimusha - Dawn of Dreams [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25757 -Name = Nanatsu Iro - Drops Pure!! [First Print Limited Edition] +Serial = SLPM-74234 +Name = Ryu Ga Gotoku [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25758 -Name = Nanatsu Iro - Drops Pure!! +Serial = SLPM-74235 +Name = Sengoku Musou [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25759 -Name = Shiju Hachi +Serial = SLPM-74236 +Name = Shin Sangoku Musou 4 [PlayStation 2 The Best] Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25760 -Name = VitaminX [Limited Edition] +Serial = SLPM-74237 +Name = New Jinsei Game [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25761 -Name = VitaminX +Serial = SLPM-74238 +Name = Genso Suikoden V [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25762 -Name = Metal Slug Complete +Serial = SLPM-74239 +Name = Okami [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25763 -Name = Shin Bokujou Monogatari - Pure Innocent Life +Serial = SLPM-74240 +Name = Tengai Makyou III - Namida [Best Version] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25764 -Name = Busou Renkin +Serial = SLPM-74241 +Name = God Hand [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25765 -Name = King of Fighters, The - Maximum Impact Regulation A +Serial = SLPM-74242 +Name = Devil May Cry 3 [Special Edition] [PlayStation 2 The Best] Region = NTSC-J +eeRoundMode = 0 --------------------------------------------- -Serial = SLPS-25766 -Name = Orange Honey - Boku wa Kimi ni Koishiteru [Limited Edition] +Serial = SLPM-74243 +Name = True Crime - New York City [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25767 -Name = Orange Honey - Boku wa Kimi ni Koishiteru +Serial = SLPM-74244 +Name = Phantasy Star Universe [PlayStation 2 The Best] Region = NTSC-J +eeRoundMode = 0 --------------------------------------------- -Serial = SLPS-25768 -Name = Naruto Shippuuden Narutimate Accel +Serial = SLPM-74245 +Name = Monster Hunter 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25769 -Name = Netsu Chu! Pro Baseball 2007 +Serial = SLPM-74246 +Name = Capcom vs. SNK 2 - Millionaire Fighting 2001 [PlayStation 2 the Best - Reprint] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25770 -Name = Rakushou! Pachi-Slot Sengen 5 +Serial = SLPM-74247 +Name = Sengoku Musou 2 [PlayStation 2 The Best] Region = NTSC-J +MemCardFilter = SLAJ-25077/SLPM-55122/SLPM-66307/SLPM-74247/SLAJ-25035/SLPM-65517/SLPM-74212/SLPM-74235/SLAJ-25048/SLPM-65718/SLPM-74224/SLPM-74249 --------------------------------------------- -Serial = SLPS-25771 -Name = Grim Grimoire +Serial = SLPM-74248 +Name = Monster Hunter G [PlayStation 2 The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25773 -Name = Tales of Fandom Vol.2 [Tia Version] +Serial = SLPM-74249 +Name = Sengoku Musou Moushouden [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25774 -Name = Tales of Fandom Vol.2 [Luke Version] +Serial = SLPM-74250 +Name = Shin Sangoku Musou 4 Moushouden [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25775 -Name = Magician's Academy, The +Serial = SLPM-74251 +Name = Shin Onimusha - Dawn of Dreams [PlayStation 2 the Best - Reprint Disc 1] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25776 -Name = Pachitte Chonmage Tatsujin 12 +Serial = SLPM-74252 +Name = Shin Onimusha - Dawn of Dreams [Playstation 2 the Best - Reprint Disc 2] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25777 -Name = Sumomomomomo - Chijou Saikyou no Yome [Limited Edition] +Serial = SLPM-74253 +Name = Ryu ga Gotoku [PlayStation 2 the Best - Reprint] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25778 -Name = Sumomomomomo - Chijou Saikyou no Yome +Serial = SLPM-74254 +Name = EX Jinsei Game II [PlayStation 2 the Best - Reprint] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25779 -Name = King of Fighters, The - Maximum Impact 2 [SNK Best Collection] +Serial = SLPM-74259 +Name = Odin Sphere [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25780 -Name = Nodame Cantabile +Serial = SLPM-74265 +Name = Nobunaga no Yabou: Kakushin [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25781 -Name = Fuuun Super Combo +Serial = SLPM-74276 +Name = Sangoku Musou 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25782 -Name = World Heroes - Gorgeous +Serial = SLPM-74277 +Name = Persona 3 FES [PlayStation 2 The Best] Region = NTSC-J +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPS-25783 -Name = King of Fighters '98, The - Ultimate Match +Serial = SLPM-74278 +Name = Persona 4 [PlayStation 2 The Best] Region = NTSC-J +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLPS-25784 -Name = Another Century's Episode 3 - The Final +Serial = SLPM-74286 +Name = Shin Sangoku Musou 5 Special [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25786 -Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.10 - CR Shinseiki Evangelion - Kiseki no Hachi Ha +Serial = SLPM-74301 +Name = Ryu ga Gotoku 2 [PlayStation 2 The Best] Region = NTSC-J +MemCardFilter = SLPM-66602/SLPM-74301/SLPM-66168/SLPM-74234/SLPM-74253 --------------------------------------------- -Serial = SLPS-25787 -Name = Sanyo Pachinko Paradise 14 +Serial = SLPM-74402 +Name = Capcom vs. SNK 2 [PlayStation 2 The Best] Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25788 -Name = Metal Slug [SNK Best Collection] +Serial = SLPM-74403 +Name = Densha de Go! Shinkansen [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25789 -Name = King of Fighters XI, The [SNK Best Collection] +Serial = SLPM-74404 +Name = Space Channel 5 - Part 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25790 -Name = Art of Fighting Collection [NeoGeo Online Collection the Best] +Serial = SLPM-74405 +Name = Samurai Complete Edition [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25791 -Name = King of Fighters, The - Orochi Collection [NeoGeo Online Collection the Best] +Serial = SLPM-74406 +Name = WRC - World Rally Chanpionship [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25792 -Name = Bakumatsu Roman - Last Blade 2-in-1 [NeoGeo Online Collection the Best] +Serial = SLPM-74407 +Name = Jet de Go! 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25793 -Name = Garou - Mark of the Wolves [NeoGeo Online Collection the Best] +Serial = SLPM-74408 +Name = Rakugaki Kingdom [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25794 -Name = Cluster Edge [Best Collection] +Serial = SLPM-74409 +Name = Gun Survivor 2 - Biohazard Code - Veronica [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25795 -Name = School Rumble - 2nd Term [Best Collection] +Serial = SLPM-74410 +Name = Breath of Fire V: Dragon Quarter [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25796 -Name = Ore no Shite Agake +Serial = SLPM-74411 +Name = Culdcelt II - Expansion [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25797 -Name = Ikki Tousen - Shining Dragon [Limited Edition] +Serial = SLPM-74412 +Name = Kengo 2 [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25798 -Name = Ikki Tousen - Shining Dragon +Serial = SLPM-74414 +Name = Energy Airforce Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25799 -Name = Ultraman Fighting Evolution 3 [Banpresto Best] +Serial = SLPM-74415 +Name = Shinobi [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25800 -Name = Ultraman Fighting Evolution - Rebirth [Banpresto Best] +Serial = SLPM-74416 +Name = Clock Tower 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25801 -Name = Kyou Kara Maou! Shin Ma-Kuni no Kyuujitsu [Limited Edition] +Serial = SLPM-74420 +Name = Initial D - Street Stage [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25802 -Name = Kyou Kara Maou! Shin Ma-Kuni no Kyuujitsu +Serial = SLPM-74421 +Name = Virtual On - Marz [PlayStation 2 The Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25803 -Name = xxxHolic - Shigatsu Tsuitachi no Izayoi Sowa +Serial = SLPS-20001 +Name = Ridge Racer V Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25804 -Name = Dear My Sun [Limited Edition] +Serial = SLPS-20002 +Name = Doukyu Billiards Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25806 -Name = Kateikyoushi Hitman Reborn! Dream Hyper Battle +Serial = SLPS-20003 +Name = Street Fighter EX3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25807 -Name = Saint Beast - Rasen no Shou [Limited Edition] +Serial = SLPS-20005 +Name = EX Billiards Region = NTSC-J --------------------------------------------- -Serial = SLPS-25808 -Name = Saint Beast - Rasen no Shou +Serial = SLPS-20006 +Name = A-Train 6 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25809 -Name = Gintama Gin-San to Issho! Boku no Kabuki Machi Nikki +Serial = SLPS-20007 +Name = Driving Emotion Type S Region = NTSC-J +Compat = 5 +EETimingHack = 1 //Garbage in FMVs. --------------------------------------------- -Serial = SLPS-25810 -Name = Dear My Sun +Serial = SLPS-20009 +Name = Golf Paradise Region = NTSC-J --------------------------------------------- -Serial = SLPS-25811 -Name = Happiness! Deluxe [Best Collection] +Serial = SLPS-20010 +Name = Pro Baseball Gekikuukan Region = NTSC-J --------------------------------------------- -Serial = SLPS-25812 -Name = Tori no Hoshi - Aerial Planet +Serial = SLPS-20011 +Name = American Arcade Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25813 -Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.11 - Shinseiki Evangelion - Magokoro o, Kimi ni +Serial = SLPS-20012 +Name = Sky Surfer Region = NTSC-J --------------------------------------------- -Serial = SLPS-25814 -Name = Shinseiki GPX Cyber Formula - Road to the Infinity 4 +Serial = SLPS-20013 +Name = Primal Image Vol.01 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25815 -Name = DragonBall Z Sparking! Meteor +Serial = SLPS-20015 +Name = Tekken Tag Tournament Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25816 -Name = Yamasa Digi World - Collaboration SP Pachi-Slot Ridge Racer +Serial = SLPS-20016 +Name = Dream Audition Region = NTSC-J --------------------------------------------- -Serial = SLPS-25817 -Name = Bakumatsu Renka - Karyuu Kenshiden [Limited Edition] +Serial = SLPS-20017 +Name = Street Mahjong Trance 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25818 -Name = Bakumatsu Renka - Karyuu Kenshiden +Serial = SLPS-20018 +Name = Stepping Selection [Disc1of2] Region = NTSC-J +MemCardFilter = SLPS-20018/SLPS-20019 --------------------------------------------- -Serial = SLPS-25819 -Name = Ar tonelico II: Sekai ni Hibiku Shoujo-Tachi no Souzoushi +Serial = SLPS-20019 +Name = Stepping Selection [Disc2of2] Region = NTSC-J -eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests +MemCardFilter = SLPS-20018/SLPS-20019 --------------------------------------------- -Serial = SLPS-25820 -Name = Kateikyoushi Hitman Reborn!! Let's Ansatsu! Nerawareta 10 Daime! +Serial = SLPS-20020 +Name = FIFA 2000 World Championship Region = NTSC-J --------------------------------------------- -Serial = SLPS-25821 -Name = Suzumiya Haruhi no Tomadoi [Limited Edition] +Serial = SLPS-20021 +Name = Wild Wild Racing Region = NTSC-J --------------------------------------------- -Serial = SLPS-25822 -Name = Suzumiya Haruhi no Tomadoi +Serial = SLPS-20022 +Name = All-Star Pro Wrestling Region = NTSC-J --------------------------------------------- -Serial = SLPS-25823 -Name = Spider-Man 3 +Serial = SLPS-20023 +Name = Cross Fire Region = NTSC-J --------------------------------------------- -Serial = SLPS-25825 -Name = Zero no Tsukaima [Best Collection] +Serial = SLPS-20024 +Name = Hresvelgr Region = NTSC-J --------------------------------------------- -Serial = SLPS-25826 -Name = My Home o Tsukurou 2! Easy Design [Best Collection] +Serial = SLPS-20025 +Name = SSX - Snowboard Supercross Region = NTSC-J --------------------------------------------- -Serial = SLPS-25827 -Name = Soukou Kihei Votoms +Serial = SLPS-20027 +Name = Aquaqua Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25828 -Name = Pachitte Chonmage Tatsujin 13 - Pachinko Hissatsu Shigotojin III +Serial = SLPS-20028 +Name = Game Select 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25829 -Name = A.C.E. Another Century's Episode 2 [Special Vocal Version] +Serial = SLPS-20029 +Name = Surfroid Region = NTSC-J --------------------------------------------- -Serial = SLPS-25830 -Name = Zero no Tsukaima - Muma ga Tsumugu Yokaze no Gensoukyoku [Limited Edition] +Serial = SLPS-20031 +Name = Mechsmith, The - Run-Dim Region = NTSC-J --------------------------------------------- -Serial = SLPS-25831 -Name = Zero no Tsukaima - Muma ga Tsumugu Yokaze no Gensoukyoku +Serial = SLPS-20033 +Name = Gungriffon Blaze Region = NTSC-J --------------------------------------------- -Serial = SLPS-25832 -Name = SD Gundam G Generation Spirits +Serial = SLPS-20034 +Name = Velvet File Region = NTSC-J --------------------------------------------- -Serial = SLPS-25833 -Name = Simple 2000 Series Vol.122 - The Ningyo Hime Monogatari - Mermaid Prism +Serial = SLPS-20035 +Name = Pro Mahjong Kiwame Next Region = NTSC-J --------------------------------------------- -Serial = SLPS-25834 -Name = Transformers - The Game +Serial = SLPS-20036 +Name = Magical Sports - 2000 Koushien Region = NTSC-J --------------------------------------------- -Serial = SLPS-25835 -Name = Super Robot Taisen OG - Original Generations Gaiden [Limited Edition] +Serial = SLPS-20037 +Name = Magical Sports - Go Go Golf Region = NTSC-J --------------------------------------------- -Serial = SLPS-25836 -Name = Super Robot Taisen OG - Original Generations Gaiden +Serial = SLPS-20038 +Name = Grappler Baki - Baki Saidai no Tournament Region = NTSC-J --------------------------------------------- -Serial = SLPS-25837 -Name = Naruto Shippuuden - Narutimate Accel 2 +Serial = SLPS-20040 +Name = Moto GP Region = NTSC-J --------------------------------------------- -Serial = SLPS-25838 -Name = Taiheiyou no Arashi - Senkan Yamato, Akatsuki ni Shutsugekisu +Serial = SLPS-20041 +Name = Mahjong Goku Taisei Region = NTSC-J --------------------------------------------- -Serial = SLPS-25839 -Name = Samurai Spirits: Rokuban Shoubu [NeoGeo Online Collection Vol. 12] +Serial = SLPS-20042 +Name = F1 Racing Championship Region = NTSC-J --------------------------------------------- -Serial = SLPS-25840 -Name = Guitar Hero III - Legends of Rock [with Guitar] +Serial = SLPS-20043 +Name = Lake Masters Fishing EX Region = NTSC-J --------------------------------------------- -Serial = SLPS-25841 -Name = Tales of Destiny [Director's Cut] [Premium Box] +Serial = SLPS-20044 +Name = F1 Championship Season 2000 Region = NTSC-J -FpuMulHack = 1 --------------------------------------------- -Serial = SLPS-25842 -Name = Tales of Destiny [Director's Cut] +Serial = SLPS-20047 +Name = Toudai Shogi Region = NTSC-J -Compat = 4 -FpuMulHack = 1 --------------------------------------------- -Serial = SLPS-25843 -Name = Tir-Na-Nog +Serial = SLPS-20048 +Name = Sim Theme Park Region = NTSC-J --------------------------------------------- -Serial = SLPS-25844 -Name = Last Escort 2 - Shiya no Amai Ira [Gorgeous Version] +Serial = SLPS-20050 +Name = Happy! Happy!! Boarders Region = NTSC-J --------------------------------------------- -Serial = SLPS-25845 -Name = Last Escort 2 - Shiya no Amai Ira +Serial = SLPS-20051 +Name = Hissatsu Pachinko Station V Region = NTSC-J --------------------------------------------- -Serial = SLPS-25847 -Name = Amekoushi no Kan [The Best Price] +Serial = SLPS-20052 +Name = Global Folktale Region = NTSC-J --------------------------------------------- -Serial = SLPS-25848 -Name = Naraku no Shiro +Serial = SLPS-20053 +Name = Tenshi no Present - Marle Oukoku Monogatari Region = NTSC-J --------------------------------------------- -Serial = SLPS-25849 -Name = Sunsoft Collection +Serial = SLPS-20054 +Name = FIFA World Championship 2001 Region = NTSC-J -Compat = 4 --------------------------------------------- -Serial = SLPS-25850 -Name = KimiKiss [ebKore+] +Serial = SLPS-20055 +Name = Technictix Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25851 -Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioku Tachi [Irem Collection] +Serial = SLPS-20057 +Name = Dog of Bay Region = NTSC-J --------------------------------------------- -Serial = SLPS-25852 -Name = Sanyo Pachinko Paradise 13 [Irem Collection] +Serial = SLPS-20058 +Name = Kengo Region = NTSC-J --------------------------------------------- -Serial = SLPS-25853 -Name = Pachinko Kamen Rider - Shocker Zenmetsu Daisakusen +Serial = SLPS-20059 +Name = Hresvelgr [International Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25854 -Name = Poison Pink +Serial = SLPS-20060 +Name = Dream Audition 2 Region = NTSC-J -eeClampMode = 0 //in-game background visible --------------------------------------------- -Serial = SLPS-25855 -Name = Battle of Sunrise +Serial = SLPS-20062 +Name = Truck Kyousokyoku Region = NTSC-J --------------------------------------------- -Serial = SLPS-25856 -Name = Tomb Raider - Anniversary +Serial = SLPS-20064 +Name = Top Gear Daredevil Region = NTSC-J --------------------------------------------- -Serial = SLPS-25858 -Name = Dengeki SP - Shakugan no Shana +Serial = SLPS-20065 +Name = Madden NFL 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25859 -Name = Orange Honey - Boku wa Kimi ni Koishiteru [Best Version] +Serial = SLPS-20066 +Name = Rhapsody 3 - Tenshi no Present - The Marl Kingdom Stories Region = NTSC-J --------------------------------------------- -Serial = SLPS-25860 -Name = Code Geass - Hangyaku no Lelouch - Lost Colors +Serial = SLPS-20067 +Name = Crazy Bumps Region = NTSC-J --------------------------------------------- -Serial = SLPS-25861 -Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.10 [Special Price Edition] +Serial = SLPS-20068 +Name = Midnight Club - Street Racing Region = NTSC-J +MemCardFilter = SLPS-20068/SLPS-20067 --------------------------------------------- -Serial = SLPS-25862 -Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.05 - CR Neon Genesis Evangelion Sekandoinpakuto & Pachislot Neon Genesis Evangelion [Special Price Edition] +Serial = SLPS-20071 +Name = Game Select 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25863 -Name = Fatal Fury - Battle Archives 1 [SNK the Best] +Serial = SLPS-20072 +Name = Real Robots Regiment Region = NTSC-J --------------------------------------------- -Serial = SLPS-25864 -Name = Fatal Fury - Battle Archives 2 [SNK the Best] +Serial = SLPS-20073 +Name = NBA Live 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25865 -Name = King of Fighters, The - Nests [SNK the Best] +Serial = SLPS-20078 +Name = Generation of Chaos Region = NTSC-J --------------------------------------------- -Serial = SLPS-25866 -Name = Fuuun Super Combo [SNK the Best] +Serial = SLPS-20082 +Name = Saikyou Toudai Shogi 3 [Mycom Best] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25867 -Name = Hanayoi Romanesque - Ai to Kanashimi [Limited Edition] +Serial = SLPS-20083 +Name = Air Ranger Rescue Helicopter Region = NTSC-J --------------------------------------------- -Serial = SLPS-25868 -Name = Hanayoi Romanesque - Ai to Kanashimi +Serial = SLPS-20084 +Name = Basic Studio [Disc 1] Region = NTSC-J +MemCardFilter = SLPS-20084/SLPS-20085 --------------------------------------------- -Serial = SLPS-25869 -Name = CR Shinseiki Evangelion - Shito, Futatabi +Serial = SLPS-20085 +Name = Basic Studio [Disc 2] Region = NTSC-J +MemCardFilter = SLPS-20084/SLPS-20085 --------------------------------------------- -Serial = SLPS-25887 -Name = Super Robot Taisen Z +Serial = SLPS-20086 +Name = Generation of Chaos [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-25892 -Name = Nogizaka Haruka no Himitsu - Cosplay Hajimemashita +Serial = SLPS-20087 +Name = Generation of Chaos Region = NTSC-J --------------------------------------------- -Serial = SLPS-25894 -Name = Aa Megami-sama [PlayStation 2 The Best] +Serial = SLPS-20089 +Name = Gun-Heats Region = NTSC-J --------------------------------------------- -Serial = SLPS-25905 -Name = Dragon Ball Z: Infinite World +Serial = SLPS-20091 +Name = Gekisha Boy 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-25906 -Name = ADK Tamashii +Serial = SLPS-20092 +Name = Tiger Woods PGA Tour 2001 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25914 -Name = Kidou Senshi Gundam: Giren no Yabou - Axis no Kyoui V +Serial = SLPS-20094 +Name = Shinseiki Evangelion - Typing Project-E [TVware Information Revolution Series] Region = NTSC-J -FpuNegDivHack = 1 --------------------------------------------- -Serial = SLPS-25927 -Name = Tomb Raider Underworld +Serial = SLPS-20095 +Name = Knockout Kings 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPS-25930 -Name = Major League Baseball 2K9 +Serial = SLPS-20097 +Name = Magical Sports - Koshien Region = NTSC-J --------------------------------------------- -Serial = SLPS-25934 -Name = Samurai Spirits: Rokuban Shoubu [NeoGeo Online Collection the Best] +Serial = SLPS-20098 +Name = Magical Sports - Hard Hitter Region = NTSC-J --------------------------------------------- -Serial = SLPS-25935 -Name = The King of Fighters '98 Ultimate Match (NeoGeo Online Collection the Best) +Serial = SLPS-20100 +Name = Tetsu-One Train Battle Region = NTSC-J --------------------------------------------- -Serial = SLPS-25944 -Name = Kamen Rider Climax Heroes +Serial = SLPS-20101 +Name = City Crisis Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-25959 -Name = Kidou Senshi Gundam: Giren no Yabou - Axis no Kyoui V +Serial = SLPS-20102 +Name = Pachinko Paradise 6 Region = NTSC-J -FpuNegDivHack = 1 --------------------------------------------- -Serial = SLPS-29001 -Name = Xenosaga Episode 1 - Der Wille zur Macht [Premium Box] +Serial = SLPS-20103 +Name = Lake Masters EX Super Region = NTSC-J --------------------------------------------- -Serial = SLPS-29002 -Name = Xenosaga Episode 1 - Der Wille zur Macht +Serial = SLPS-20104 +Name = Bokujou Monogatari 3 Region = NTSC-J -Compat = 5 --------------------------------------------- -Serial = SLPS-29003 -Name = Lord of the Rings - The Two Towers [Collector's Box] +Serial = SLPS-20105 +Name = Growlanser II - The Sense of Justice [Deluxe Pack] Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLPS-29004 -Name = Lord of the Rings, The - The Two Towers +Serial = SLPS-20106 +Name = Growlanser II - The Sense of Justice Region = NTSC-J -Compat = 2 +Compat = 4 --------------------------------------------- -Serial = SLPS-29005 -Name = Xenosaga Episode 1 - Der Wille zur Macht [Reloaded] +Serial = SLPS-20108 +Name = Quake III - Revolution Region = NTSC-J --------------------------------------------- -Serial = SLPS-72501 -Name = Final Fantasy X [Mega Hits] +Serial = SLPS-20111 +Name = Magical Sports - Pro Baseball 2001 Region = NTSC-J -IPUWaitHack = 1 --------------------------------------------- -Serial = SLPS-72502 -Name = Tales of Destiny 2 [Mega Hits] +Serial = SLPS-20112 +Name = Hissatsu Pachinko Station v2.0 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73003 -Name = Farms Story 3 [PlayStation 2 The Best] +Serial = SLPS-20113 +Name = Time Crisis II [with Guncon 2] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73005 -Name = Guilty Gear X - Plus [PlayStation 2 The Best] +Serial = SLPS-20120 +Name = Formula One 2001 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73006 -Name = Time Crisis II [PlayStation 2 The Best] +Serial = SLPS-20121 +Name = Kanon Region = NTSC-J --------------------------------------------- -Serial = SLPS-73101 -Name = Kotoba no Puzzle - Mojipittan [PlayStation 2 The Best] +Serial = SLPS-20122 +Name = Time Crisis II Region = NTSC-J --------------------------------------------- -Serial = SLPS-73102 -Name = Bokujou Monogatari 3 - Heart ni Hi o Tsukete [PlayStation 2 The Best] +Serial = SLPS-20125 +Name = Shanghai - The Four Elements [Super Value 2800] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73103 -Name = Makai Senki Disgaea [PlayStation 2 The Best] +Serial = SLPS-20128 +Name = Toshiyuki Morikawa Private Collection - Puppet Princess of Marl's Kingdom Region = NTSC-J --------------------------------------------- -Serial = SLPS-73104 -Name = Tekken Tag Tournament [PlayStation 2 The Best] +Serial = SLPS-20129 +Name = Marl de Jigsaw Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73105 -Name = Kinnikuman Generations [PlayStation 2 The Best] +Serial = SLPS-20130 +Name = New Best Play Professional Baseball Region = NTSC-J --------------------------------------------- -Serial = SLPS-73106 -Name = Pilot Nina Rou! 2 [PlayStation 2 The Best] +Serial = SLPS-20132 +Name = Chenuen no San Goku Shi (Chen Wen's Romance of the Three Kingdoms) Region = NTSC-J --------------------------------------------- -Serial = SLPS-73107 -Name = Taiko no Tatsujin 5 [PlayStation 2 The Best] +Serial = SLPS-20136 +Name = Guilty Gear X Plus [DX Pack] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73108 -Name = Phantom Brave [PlayStation 2 The Best] +Serial = SLPS-20137 +Name = Guilty Gear X Plus Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73109 -Name = Bokujou Monogatari 3 - Heart ni Hi o Tsukete [PlayStation 2 The Best] +Serial = SLPS-20139 +Name = All Star Pro-Wrestling II Region = NTSC-J --------------------------------------------- -Serial = SLPS-73110 -Name = Taiko no Tatsujin - Appare Sandaime [PlayStation 2 The Best] +Serial = SLPS-20143 +Name = RPG Tsukuru 5 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73111 -Name = Taiko no Tatsujin Super Animehit [PlayStation 2 The Best] +Serial = SLPS-20144 +Name = Seed, The Region = NTSC-J --------------------------------------------- -Serial = SLPS-73201 -Name = Fatal Frame 2 - Crimson Butterfly [PlayStation 2 The Best] +Serial = SLPS-20150 +Name = Akira Psycho Ball Region = NTSC-J --------------------------------------------- -Serial = SLPS-73202 -Name = Armored Core - Nexus [PlayStation 2 The Best] +Serial = SLPS-20161 +Name = Saikyou Toudai Shogi Special Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73204 -Name = Zettai Zetsumi Toshi [PlayStation 2 The Best] +Serial = SLPS-20162 +Name = Typing Kengo 634 [with Keyboard] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73205 -Name = Ace Combat 4 - Shattered Skies [PlayStation 2 The Best] +Serial = SLPS-20163 +Name = Typing Kengo 634 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73206 -Name = Super Robot Taisen Alpha 2nd [PlayStation 2 The Best] +Serial = SLPS-20165 +Name = La Pucelle Region = NTSC-J --------------------------------------------- -Serial = SLPS-73207 -Name = DragonBall Z [PlayStation 2 The Best] +Serial = SLPS-20167 +Name = La Pucelle Region = NTSC-J --------------------------------------------- -Serial = SLPS-73208 -Name = DragonBall Z 2 [PlayStation 2 The Best] +Serial = SLPS-20171 +Name = Smash Court Tennis Pro Region = NTSC-J --------------------------------------------- -Serial = SLPS-73209 -Name = Tekken 4 [PlayStation 2 The Best] +Serial = SLPS-20175 +Name = Typing Love Story - Boys Be Region = NTSC-J --------------------------------------------- -Serial = SLPS-73210 -Name = Katamari Damacy [PlayStation 2 The Best] +Serial = SLPS-20177 +Name = Make Your Dream Home Region = NTSC-J -mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLPS-73211 -Name = Summon Night 3 [PlayStation 2 The Best] +Serial = SLPS-20178 +Name = Samurai Region = NTSC-J --------------------------------------------- -Serial = SLPS-73212 -Name = Naruto Narutimett Hero [PlayStation 2 The Best] +Serial = SLPS-20185 +Name = Wangan Midnight Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73214 -Name = Shadow Hearts 2 [Director's Cut] [PlayStation 2 The Best] +Serial = SLPS-20187 +Name = Black Matrix 2 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73216 -Name = Magna Carta [PlayStation 2 The Best] +Serial = SLPS-20194 +Name = Underwater Unit Region = NTSC-J --------------------------------------------- -Serial = SLPS-73217 -Name = Tales of Symphonia [PlayStation 2 The Best] +Serial = SLPS-20196 +Name = Akagawa Jiro - Tsuki no Hikari - Shizumeru Kane no Satsujin Region = NTSC-J --------------------------------------------- -Serial = SLPS-73218 -Name = Ace Combat 5 - The Unsung War [PlayStation 2 The Best] +Serial = SLPS-20198 +Name = Raging Bless Region = NTSC-J --------------------------------------------- -Serial = SLPS-73219 -Name = Tales of Destiny 2 [PlayStation 2 The Best] +Serial = SLPS-20199 +Name = F1 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73220 -Name = Ultraman [PlayStation 2 The Best] +Serial = SLPS-20202 +Name = Coloball 2002 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73221 -Name = Naruto Narutimett Hero 2 [PlayStation 2 The Best] +Serial = SLPS-20208 +Name = I am Small! Region = NTSC-J --------------------------------------------- -Serial = SLPS-73222 -Name = Harvest Moon - A Wonderful Life [PlayStation 2 The Best] +Serial = SLPS-20214 +Name = 3-D Fighting School 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73223 -Name = Tekken 5 [PlayStation 2 The Best] +Serial = SLPS-20216 +Name = Air Ranger - Rescue Helicopter Region = NTSC-J -eeClampMode = 1 --------------------------------------------- -Serial = SLPS-73224 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [PlayStation 2 The Best] [Disc1of2] +Serial = SLPS-20218 +Name = Ninja Assault Region = NTSC-J --------------------------------------------- -Serial = SLPS-73225 -Name = Xenosaga Episode II - Jenseits von Gut und Bose [PlayStation 2 The Best] [Disc2of2] +Serial = SLPS-20219 +Name = Tsukande! Mawashite! Dossun Pazuru Egg Mania Region = NTSC-J --------------------------------------------- -Serial = SLPS-73226 -Name = Tenchu Kurenai [PlayStation 2 The Best] +Serial = SLPS-20221 +Name = Taiko no Tatsujin [with Tatacon Reproduction Controller] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73227 -Name = Another Century's Episode [PlayStation 2 The Best] +Serial = SLPS-20222 +Name = Inaka Kurasi - Nan no Shima no Monogatari Region = NTSC-J --------------------------------------------- -Serial = SLPS-73228 -Name = Fuun Bakumatsuden [PlayStation 2 The Best] +Serial = SLPS-20226 +Name = Yamasa Digital Slot World SP DX Region = NTSC-J --------------------------------------------- -Serial = SLPS-73229 -Name = TearRing Saga Series - Berwick Saga [PlayStation 2 The Best] +Serial = SLPS-20230 +Name = Chulip Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73230 -Name = dot Hack - Vol.1 & Vol.2 [PlayStation 2 The Best] [Vol.1 Disc] +Serial = SLPS-20243 +Name = New Price Go Go Golf Region = NTSC-J --------------------------------------------- -Serial = SLPS-73231 -Name = dot Hack - Vol.1 & Vol.2 [PlayStation 2 The Best] [Vol.2 Disc] +Serial = SLPS-20245 +Name = Low Rider Region = NTSC-J --------------------------------------------- -Serial = SLPS-73232 -Name = dot Hack - Vol.3 & Vol.4 [PlayStation 2 The Best] [Vol.3 Disc] +Serial = SLPS-20250 +Name = Makai Senki Disgaea [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73233 -Name = dot Hack - Vol.3 & Vol.4 [PlayStation 2 The Best] [Vol.4 Disc] +Serial = SLPS-20251 +Name = Makai Senki Disgaea Region = NTSC-J --------------------------------------------- -Serial = SLPS-73234 -Name = Kidou Senshi Z-Gundam - AEUG vs. Titans [PlayStation 2 The Best] +Serial = SLPS-20256 +Name = Cool Shot - Yukawa Keiko Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73235 -Name = DragonBall Z 3 [PlayStation 2 The Best] +Serial = SLPS-20258 +Name = Yamasa Digi World 4D Region = NTSC-J --------------------------------------------- -Serial = SLPS-73236 -Name = Venus & Braves [PlayStation 2 The Best] +Serial = SLPS-20259 +Name = Kotoba no Puzzle - Mojipittan Region = NTSC-J --------------------------------------------- -Serial = SLPS-73237 -Name = Tenchu San [PlayStation 2 The Best] +Serial = SLPS-20260 +Name = Sakigake!! Kuromati Koukou Region = NTSC-J --------------------------------------------- -Serial = SLPS-73238 -Name = Super Robot Wars - Alpha 3 [PlayStation 2 The Best] +Serial = SLPS-20262 +Name = Slot Pro DX - Fujiko 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73239 -Name = Yu Yu Hakusho Forever [PlayStation 2 The Best] +Serial = SLPS-20263 +Name = J.League Tactics Manager - Realtime Soccer Simulation Region = NTSC-J --------------------------------------------- -Serial = SLPS-73240 -Name = Katamari Damacy [PlayStation 2 The Best] +Serial = SLPS-20265 +Name = Fever 7 Region = NTSC-J -mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLPS-73241 -Name = Minna Daisuki Katamari Damacy [PlayStation 2 The Best] +Serial = SLPS-20272 +Name = Taiko no Tatsujin Doki Region = NTSC-J -vuClampMode = 3 -mvuFlagSpeedHack = 0 +Compat = 5 --------------------------------------------- -Serial = SLPS-73242 -Name = Tales of Legendia [PlayStation 2 The Best] +Serial = SLPS-20273 +Name = Netsu Chu! Pro Baseball 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73243 -Name = Namco X Capcom [PlayStation 2 The Best] +Serial = SLPS-20279 +Name = Hissatsu Pachinko Station v7 - Tensei Bakabon 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73244 -Name = R-Type Final [PlayStation 2 The Best] +Serial = SLPS-20280 +Name = Mahou no Pumpkin Region = NTSC-J -Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLPS-73245 -Name = Fatal Frame - Zero [PlayStation 2 The Best] +Serial = SLPS-20282 +Name = Taiko no Tatsujin Region = NTSC-J --------------------------------------------- -Serial = SLPS-73246 -Name = Gundam True Odyssey [PlayStation 2 The Best] +Serial = SLPS-20284 +Name = Marl de Jigsaw Region = NTSC-J --------------------------------------------- -Serial = SLPS-73247 -Name = Armored Core - Last Raven [PlayStation 2 The Best] +Serial = SLPS-20285 +Name = Slotter Up Core Region = NTSC-J --------------------------------------------- -Serial = SLPS-73248 -Name = Kagero 2 - Dark Illusion [PlayStation 2 The Best] +Serial = SLPS-20287 +Name = Yakiniku Bugyou Bonfire! Region = NTSC-J --------------------------------------------- -Serial = SLPS-73249 -Name = Ar tonelico: Sekai no Owari de Utai Tsudukeru Shoujo [PlayStation 2 The Best] +Serial = SLPS-20288 +Name = Saikyo Todai Shogi 2003 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73250 -Name = Ace Combat Zero - The Belkan War [PlayStation 2 The Best] +Serial = SLPS-20289 +Name = Yamasa Digi World SP - Umi Ichiban R Region = NTSC-J --------------------------------------------- -Serial = SLPS-73251 -Name = Naruto - Narutimett Hero 3 [PlayStation 2 The Best] +Serial = SLPS-20291 +Name = Fish Eyes 3 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73252 -Name = Tales of the Abyss [PlayStation 2 The Best] +Serial = SLPS-20293 +Name = Jissen Pachi-Slot Hisshouhou! Savanna Park Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73253 -Name = Rurouni Kenshin - Enjou! Kyoto Rinne [PlayStation 2 The Best] +Serial = SLPS-20294 +Name = Hanabi Shokunin Ninarou 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73254 -Name = Makai Senki Disgaea [PlayStation 2 The Best] +Serial = SLPS-20296 +Name = Dugout '03 - The Turning Point Region = NTSC-J --------------------------------------------- -Serial = SLPS-73255 -Name = Fatal Frame [PlayStation 2 the Best - Reprint] +Serial = SLPS-20299 +Name = Black Matrix 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73256 -Name = Fatal Frame 2 - Crimson Butterfly [PlayStation 2 the Best - Reprint] +Serial = SLPS-20300 +Name = Mobile Suit - Gundam Seed Region = NTSC-J --------------------------------------------- -Serial = SLPS-73257 -Name = Fatal Frame III - The Tormented [PlayStation 2 the Best - Reprint] +Serial = SLPS-20301 +Name = Gachinko Professional Baseball Region = NTSC-J --------------------------------------------- -Serial = SLPS-73258 -Name = Kenka Banchou 2 - Full Throttle [PlayStation 2 The Best] +Serial = SLPS-20303 +Name = Inaka Kurasi [Best Collection] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73263 -Name = Ar tonelico II: Sekai ni Hibiku Shoujo-Tachi no Metafalica [PlayStation 2 The Best] +Serial = SLPS-20305 +Name = Real Sports Professional Baseball Region = NTSC-J -eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLPS-73401 -Name = Victorious Boxers - Championship Edition [PlayStation 2 The Best] +Serial = SLPS-20311 +Name = Primopuel - My Special Partner [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73402 -Name = Shutoko Battle Zero [PlayStation 2 The Best] +Serial = SLPS-20312 +Name = Primopuel - My Special Partner Region = NTSC-J --------------------------------------------- -Serial = SLPS-73403 -Name = Armored Core 2 [PlayStation 2 The Best] +Serial = SLPS-20316 +Name = Hissatsu Pachinko Station v8 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73404 -Name = Klonoa 2 [PlayStation 2 The Best] +Serial = SLPS-20317 +Name = Jissen Pachi-Slot Hisshouhou! King Camel Region = NTSC-J -eeClampMode = 3 //Objects needed appear in wrong places without it +Compat = 5 --------------------------------------------- -Serial = SLPS-73405 -Name = Zero [PlayStation 2 The Best] +Serial = SLPS-20320 +Name = Taiko no Tatsujin 3 [with Tatacon Drum Bundle] Region = NTSC-J --------------------------------------------- -Serial = SLPS-73406 -Name = Dead or Alive 2 - Hardcore [PlayStation 2 The Best] +Serial = SLPS-20321 +Name = Taiko no Tatsujin - Appare Sandaime Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73407 -Name = Sidewinder MAX [PlayStation 2 The Best] +Serial = SLPS-20322 +Name = Netsu Chu! Pro Baseball 2003 Fall Region = NTSC-J --------------------------------------------- -Serial = SLPS-73410 -Name = Ace Combat 4 [PlayStation 2 The Best] +Serial = SLPS-20323 +Name = Pochinya Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73411 -Name = Armored Core 2 - Another Age [PlayStation 2 The Best] +Serial = SLPS-20328 +Name = Otona no Gal Jan - Kimi ni Hane Man Region = NTSC-J --------------------------------------------- -Serial = SLPS-73412 -Name = Vampire Night [PlayStation 2 The Best] +Serial = SLPS-20329 +Name = Kamen Rider 555 Region = NTSC-J -EETimingHack = 1 +Compat = 5 --------------------------------------------- -Serial = SLPS-73415 -Name = Gallop Racer 6 - Revolution [PlayStation 2 The Best] +Serial = SLPS-20330 +Name = Taiko no Tatsujin 4 - Waku Waku Anime Maturi Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLPS-73416 -Name = Super Robot Wars - Impact [PlayStation 2 The Best] +Serial = SLPS-20331 +Name = Fever 9 - Sankyo Region = NTSC-J --------------------------------------------- -Serial = SLPS-73417 -Name = Armored Core 3 [PlayStation 2 The Best] +Serial = SLPS-20333 +Name = Taisen 1 - Shogi Region = NTSC-J --------------------------------------------- -Serial = SLPS-73418 -Name = Shadow Hearts [PlayStation 2 The Best] +Serial = SLPS-20334 +Name = Taisen 2 - Go Region = NTSC-J --------------------------------------------- -Serial = SLPS-73419 -Name = Lupin III - Majutsu-Ou no Isan [PlayStation 2 The Best] +Serial = SLPS-20335 +Name = Taisen 3 - Mahjong Region = NTSC-J --------------------------------------------- -Serial = SLPS-73420 -Name = Armored Core 3 - Silent Line [PlayStation 2 The Best] +Serial = SLPS-20336 +Name = Taisen 4 - Soldier Region = NTSC-J --------------------------------------------- -Serial = SLPS-73421 -Name = Tenchu 3 [PlayStation 2 The Best] +Serial = SLPS-20337 +Name = Slotter UP - Core Alpha Region = NTSC-J --------------------------------------------- -Serial = SLPS-73422 -Name = Ultraman Fighting Evolution 2 [PlayStation 2 The Best] +Serial = SLPS-20339 +Name = Jissen Pachi-Slot Hisshouhou! Sammy's Collection 2 DX Region = NTSC-J --------------------------------------------- -Serial = SLPS-73423 -Name = Monster Farm 4 [PlayStation 2 The Best] +Serial = SLPS-20340 +Name = Jissen Pachi-Slot Hisshouhou! Sammy's Collection 2 Region = NTSC-J --------------------------------------------- -Serial = SLPS-73424 -Name = Guilty Gear XX [PlayStation 2 The Best] +Serial = SLPS-20343 +Name = Net de Bomberman Region = NTSC-J --------------------------------------------- -Serial = SLPS-73901 -Name = Xenosaga Episode 1 - Der Wille zur Macht [PlayStation 2 The Best] +Serial = SLPS-20344 +Name = Phantom Brave [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10058 -Name = Densha de Go! Shinkansen [with Controller] +Serial = SLPS-20345 +Name = Phantom Brave Region = NTSC-J --------------------------------------------- -Serial = TCPS-10068 -Name = Densha de Go! Ryojo-hen [with Controller] +Serial = SLPS-20347 +Name = Saikyou Toudai Shogi 2004 Region = NTSC-J --------------------------------------------- -Serial = TCPS-10074 -Name = Space Invaders 25th Anniversary Bundle +Serial = SLPS-20349 +Name = Mahjong Party - Duel with The Idol Region = NTSC-J --------------------------------------------- -Serial = TCPS-10084 -Name = Zero Shinkikan Josentoki +Serial = SLPS-20350 +Name = Soccer Life Region = NTSC-J --------------------------------------------- -Serial = TCPS-10085 -Name = Densha de Go! Final [Limited Edition] +Serial = SLPS-20351 +Name = Slotter UP - Mania 4 Region = NTSC-J --------------------------------------------- -Serial = TCPS-10094 -Name = Ys III - Wanderer from Ys +Serial = SLPS-20352 +Name = Sukisyo - First Limit & Target Nights Region = NTSC-J --------------------------------------------- -Serial = TCPS-10106 -Name = Ys IV - Mask of the Sun - A New Theory +Serial = SLPS-20354 +Name = Yamasa Digi World 3 [Best of Best] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10107 -Name = Giga Wing Generations +Serial = SLPS-20355 +Name = Yamasa Digi World SP - Neo Magic Pulsar XX [Best of Best] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10109 -Name = Ys III - Wanderer from Ys [Limited Edition] +Serial = SLPS-20356 +Name = Yamasa Digi World 4 [Best of Best] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10111 -Name = Eremental Gerad +Serial = SLPS-20357 +Name = Yamasa Digi World SP - Umi Ichiban R [Best of Best] Region = NTSC-J -XgKickHack = 1 //Fixes chocolate coloured characters --------------------------------------------- -Serial = TCPS-10113 -Name = Mushihime-sama +Serial = SLPS-20361 +Name = Princess Maker - Refine Region = NTSC-J --------------------------------------------- -Serial = TCPS-10114 -Name = Matantei Loki Ragnarok Mayoukaku +Serial = SLPS-20362 +Name = Kaiketsu Zorro Mezase! Itazura King [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10117 -Name = Mushihime-sama [Limited Edition] +Serial = SLPS-20364 +Name = Sekai Saikyou Ginsei Igo 5 Region = NTSC-J --------------------------------------------- -Serial = TCPS-10123 -Name = Langrisser III +Serial = SLPS-20365 +Name = RockMan Collection [Special Box] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10125 -Name = Raiden III +Serial = SLPS-20366 +Name = CR Kamen Rider Pachi-Slot Expert 5 Region = NTSC-J --------------------------------------------- -Serial = TCPS-10128 -Name = Ultimate Pro Pinball +Serial = SLPS-20367 +Name = Curry House Coco Ichibanya Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = TCPS-10130 -Name = Homura +Serial = SLPS-20368 +Name = Kaiketsu Zorro Mezase! Itazura King Region = NTSC-J --------------------------------------------- -Serial = TCPS-10131 -Name = Ibara +Serial = SLPS-20369 +Name = Kinnikuman Generations Region = NTSC-J --------------------------------------------- -Serial = TCPS-10132 -Name = Psychic Force Complete +Serial = SLPS-20370 +Name = Slotter Up Core 3 - Doronjo ni Omakase! Region = NTSC-J --------------------------------------------- -Serial = TCPS-10133 -Name = Psychic Force Complete [with Wong Figure] +Serial = SLPS-20371 +Name = Mahjong Haou Shinken Battle Region = NTSC-J --------------------------------------------- -Serial = TCPS-10134 -Name = Psychic Force Complete [with Emilio Figure] +Serial = SLPS-20372 +Name = Jisen Pachisuri Hissou Hou! Hokuto no Ken [Limited Edition] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10135 -Name = Psychic Force Complete [with Wendy Figure] +Serial = SLPS-20373 +Name = Jisen Pachisuri Hissou Hou! Hokuto no Ken Region = NTSC-J --------------------------------------------- -Serial = TCPS-10136 -Name = Psychic Force Complete [with 3 Figures] +Serial = SLPS-20374 +Name = Football Kingdom [Trial Edition] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10147 -Name = Zero Shikikan Josentoki Ni +Serial = SLPS-20375 +Name = Sanyo Pachinko Paradise 10 Region = NTSC-J --------------------------------------------- -Serial = TCPS-10148 -Name = Zero Shikikan Josentoki Ni [Limited Edition] +Serial = SLPS-20376 +Name = Daito Giken Koushiki Pachi-Slot Simulator Yoshimune Region = NTSC-J --------------------------------------------- -Serial = TCPS-10152 -Name = Rozen Maiden - Duel Valzer +Serial = SLPS-20377 +Name = Fish Eyes 3 [Best Collection] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10154 -Name = Ys V - Lost Kefin - Kingdom of Sand +Serial = SLPS-20378 +Name = Slotter UP - Core 4 Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = TCPS-10159 -Name = Suzuki TT Super Bikes - Real Road Racing +Serial = SLPS-20379 +Name = Eikan wa Kimini 2004 - Koshien no Kodou [Artdink Best Choice] Region = NTSC-J --------------------------------------------- -Serial = TCPS-10166 -Name = Wizardry Gaiden +Serial = SLPS-20380 +Name = Shinkon Gattai Gondannar!! Region = NTSC-J --------------------------------------------- -Serial = TCPS-10168 -Name = Mushihime-sama [Taito The Best] +Serial = SLPS-20381 +Name = Monkey Turn V Region = NTSC-J --------------------------------------------- -Serial = TCPS-10172 -Name = Homura [Taito the Best] +Serial = SLPS-20382 +Name = Taiko no Tatsujin 4th Generation - Gathering Festival [with Drum Controller] Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = PBPS-95205 -Name = Demo Disc -Region = PAL-Unk +Serial = SLPS-20383 +Name = Taiko no Tatsujin - Atsumare Matsurida Yonndaime +Region = NTSC-J --------------------------------------------- -Serial = SCED-50041 -Name = Tekken Tag Tournament [Demo] -Region = PAL-Unk +Serial = SLPS-20384 +Name = Hayarikami +Region = NTSC-J --------------------------------------------- -Serial = SCED-50163 -Name = PlayStation 2 Greatest Hits Vol.3 [Demo] -Region = PAL-Unk +Serial = SLPS-20386 +Name = Value 2000 Series - Igo 4 +Region = NTSC-J --------------------------------------------- -Serial = SCED-50254 -Name = Official Review of the 2000 FIA Formula 1 World Championship [Formula One 2001 Bonus Disc] -Region = PAL-E +Serial = SLPS-20387 +Name = Value 2000 Series - Shogi 4 +Region = NTSC-J --------------------------------------------- -Serial = SCED-50286 -Name = Red Faction [Demo] -Region = PAL-Unk +Serial = SLPS-20388 +Name = CR Pachinko Yellow Cab - Pachitte Chonmage Tatsujin 6 +Region = NTSC-J --------------------------------------------- -Serial = SCED-50614 -Name = Jak and Daxter - The Precursor Legacy [Demo] -Region = PAL-Unk +Serial = SLPS-20389 +Name = Saikyou Toudai Shogi 5 [Mycom Best] +Region = NTSC-J --------------------------------------------- -Serial = SCED-50642 -Name = Final Fantasy X [Demo] [Final Fantasy VI PS1 - Bonus Disc] -Region = PAL-E -IPUWaitHack = 1 +Serial = SLPS-20391 +Name = Saiyuki Gunlock +Region = NTSC-J --------------------------------------------- -Serial = SCED-50748 -Name = Official PlayStation 2 Magazine Demo 26 -Region = PAL-Unk +Serial = SLPS-20392 +Name = Toudai Shogi - Jouseki Dojo Kanketsuhen +Region = NTSC-J --------------------------------------------- -Serial = SCED-50907 -Name = Final Fantasy X [Bonus Disc - Beyond Final Fantasy] -Region = PAL-Unk -IPUWaitHack = 1 +Serial = SLPS-20393 +Name = Princess Maker 2 +Region = NTSC-J --------------------------------------------- -Serial = SCED-51531 -Name = Official PlayStation 2 Magazine Demo 33 -Region = PAL-Unk +Serial = SLPS-20394 +Name = Suki na Mono wa Sukida Rashouganai + White Flower + Sukisyo! +Region = NTSC-J --------------------------------------------- -Serial = SCED-51537 -Name = Official PlayStation 2 Magazine Demo 37 -Region = PAL-Unk +Serial = SLPS-20396 +Name = Slotter UP - Mania 5 +Region = NTSC-J --------------------------------------------- -Serial = SCED-52818 -Name = EyeToy - Chat [Light] -Region = PAL-M11 +Serial = SLPS-20398 +Name = La Pucelle - Hikari no Seijyo Densetsu Nijuu +Region = NTSC-J --------------------------------------------- -Serial = SCED-52970 -Name = SCEE Hits Demo -Region = PAL-Unk +Serial = SLPS-20399 +Name = Taiko no Tatsujin - Go! Go! Godaime [with Tatacon] +Region = NTSC-J --------------------------------------------- -Serial = SCED-53163 -Name = Official PlayStation 2 Magazine Demo 60 -Region = PAL-M12 +Serial = SLPS-20400 +Name = Taiko no Tatsujin - Go! Go! Godaime +Region = NTSC-J --------------------------------------------- -Serial = SCES-50000 -Name = Ridge Racer V -Region = PAL-M5 -Compat = 5 +Serial = SLPS-20401 +Name = Tecmo Hit Parade +Region = NTSC-J --------------------------------------------- -Serial = SCES-50001 -Name = Tekken Tag Tournament -Region = PAL-M5 +Serial = SLPS-20402 +Name = Kamen Rider Blade +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-50002 -Name = FantaVision -Region = PAL-M5 ---------------------------------------------- -Serial = SCES-50003 -Name = Dead or Alive 2 - Hardcore -Region = PAL-M5 -Compat = 1 ---------------------------------------------- -Serial = SCES-50004 -Name = Formula One 2001 -Region = PAL-M6 -Compat = 4 +Serial = SLPS-20403 +Name = Shanghai - Sangoku Pai Tatagi [Super Value 2800] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50005 -Name = Wipeout Fusion -Region = PAL-E -Compat = 5 +Serial = SLPS-20405 +Name = Slotter UP - Core 5 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50006 -Name = Drakan - The Ancients' Gates // aka "Drakan 2" -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 // flickery textures -[patches] - comment=This gamedisc supports multiple languages. - comment=Language selection is done through the BIOS configuration. - comment=Implementation requires Full boot - "Boot CDVD (full)". - // - patch=1,EE,001C2274,word,3C013F7F // 3C013F80 - patch=1,EE,801C2274,word,3C013F7F // 3C013F80 - a clone from 001C2274. - patch=1,EE,A01C2274,word,3C013F7F // 3C013F80 - a clone from 001C2274. - // Fix by pgert that reduces displaycrap which arises with Resolution Scaling - // around the Health & Mana bars. Improvement someone? -[/patches] +Serial = SLPS-20406 +Name = Cam-Station [with EyeToy & USB Headset] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50009 -Name = Wild Wild Racing -Region = PAL-Unk +Serial = SLPS-20407 +Name = Mahjong Sangokushi +Region = NTSC-J --------------------------------------------- -Serial = SCES-50034 -Name = MotoGP -Region = PAL-Unk +Serial = SLPS-20408 +Name = Card Captor Sakura - Sakura-Chan to Asobo! +Region = NTSC-J Compat = 4 ---------------------------------------------- -Serial = SCES-50105 -Name = Sky Odyssey -Region = PAL-Unk ---------------------------------------------- -Serial = SCES-50139 -Name = World Rally Championship -Region = PAL-M7 -Compat = 5 ---------------------------------------------- -Serial = SCES-50240 -Name = Extermination -Region = PAL-Unk ---------------------------------------------- -Serial = SCES-50241 -Name = Bouncer, The -Region = PAL-M6 -Compat = 5 ---------------------------------------------- -Serial = SCES-50244 -Name = This is Football 2002 -Region = PAL-E ---------------------------------------------- -Serial = SCES-50246 -Name = AirBlade -Region = PAL-Unk -Compat = 5 ---------------------------------------------- -Serial = SCES-50293 -Name = ATV Off-Road -Region = PAL-Unk ---------------------------------------------- -Serial = SCES-50294 -Name = Gran Turismo 3 A-Spec -Region = PAL-M5 -Compat = 5 ---------------------------------------------- -Serial = SCES-50295 -Name = Dark Cloud -Region = PAL-Unk -Compat = 5 ---------------------------------------------- -Serial = SCES-50300 -Name = Time Crisis 2 -Region = PAL-Unk ---------------------------------------------- -Serial = SCES-50354 -Name = Klonoa 2 - Lunatea's Veil -Region = PAL-Unk -Compat = 5 -eeClampMode = 3 //Objects needed appear in wrong places without it -[patches = 7EBEEBBD] +[patches = 08FB9DCF] - comment=Patch By CKemu + comment=patches by Nachbrenner - //Skips IUP blitz - patch=0,EE,003078F4,word,00000000 + //skip eyetoy check + patch=0,EE,013385b0,word,00000000 [/patches] --------------------------------------------- -Serial = SCES-50360 -Name = Twisted Metal - Black -Region = PAL-Unk +Serial = SLPS-20409 +Name = Phantom Kingdom [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50361 -Name = Jak and Daxter - The Precursor Legacy -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20410 +Name = Phantom Kingdom [Limited Edition] +Region = NTSC-J +Status = 5 --------------------------------------------- -Serial = SCES-50408 -Name = PaRappa the Rapper 2 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20411 +Name = Hissatsu Pachinko Station v9 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50409 -Name = MotoGP 2 -Region = PAL-Unk +Serial = SLPS-20412 +Name = Hissatsu Pachinko Station v10 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50410 -Name = Ace Combat - Distant Thunder -Region = PAL-Unk +Serial = SLPS-20413 +Name = Taiko no Tatsujin - Taiko Drum Masters [with Drum Controller] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50411 -Name = Vampire Night -Region = PAL-Unk +Serial = SLPS-20414 +Name = Taiko no Tatsujin - Taiko Drum Masters +Region = NTSC-J Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SCES-50459 -Name = Dropship - United Peace Force -Region = PAL-Unk -Compat = 2 +Serial = SLPS-20416 +Name = Inyou Taisenki - Byakko Enbu [with EyeToy] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50490 -Name = Final Fantasy X -Region = PAL-E -Compat = 5 -IPUWaitHack = 1 +Serial = SLPS-20417 +Name = Inyou Taisenki - Byakko Enbu +Region = NTSC-J --------------------------------------------- -Serial = SCES-50491 -Name = Final Fantasy X -Region = PAL-F -IPUWaitHack = 1 +Serial = SLPS-20418 +Name = Cam-Station +Region = NTSC-J --------------------------------------------- -Serial = SCES-50492 -Name = Final Fantasy X -Region = PAL-G -Compat = 5 -IPUWaitHack = 1 +Serial = SLPS-20420 +Name = Ultraman Nexus +Region = NTSC-J --------------------------------------------- -Serial = SCES-50493 -Name = Final Fantasy X -Region = PAL-I -IPUWaitHack = 1 +Serial = SLPS-20421 +Name = Sekai Saikyou Ginsei Igo 6 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50494 -Name = Final Fantasy X -Region = PAL-S -IPUWaitHack = 1 +Serial = SLPS-20422 +Name = Hayarikami Revenge +Region = NTSC-J --------------------------------------------- -Serial = SCES-50499 -Name = Ecco the Dolphin - Defender of the Future -Region = PAL-Unk -Compat = 2 +Serial = SLPS-20423 +Name = LEGO Star Wars - The Video Game +Region = NTSC-J --------------------------------------------- -Serial = SCES-50500 -Name = Headhunter -Region = PAL-Unk +Serial = SLPS-20424 +Name = Taiko no Tatsujin - Tobikkiri! Anime Special [with Tatacon] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50501 -Name = Rez -Region = PAL-E -Compat = 5 +Serial = SLPS-20425 +Name = Taiko no Tatsujin - Tobikkiri! Anime Special +Region = NTSC-J --------------------------------------------- -Serial = SCES-50522 -Name = Disney's Peter Pan - Adventures in Neverland -Region = PAL-E -Compat = 5 +Serial = SLPS-20426 +Name = Madagascar +Region = NTSC-J --------------------------------------------- -Serial = SCES-50526 -Name = Peter Pan -Region = PAL-Unk +Serial = SLPS-20428 +Name = Monkey Turn V [Bandai the Best] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50531 -Name = Peter Pan - Legenden om Onskeoen -Region = PAL-Unk +Serial = SLPS-20429 +Name = Hissatsu Pachislot Ninja Hattori Kun V +Region = NTSC-J --------------------------------------------- -Serial = SCES-50595 -Name = Disney-Pixar's Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20430 +Name = Simple 2000 Series Vol.91 - The All-Star Kakutou +Region = NTSC-J +Compat = 5 +XgKickHack = 1 //fixes cell shade like effect... --------------------------------------------- -Serial = SCES-50596 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20431 +Name = Simple 2000 Series Vol.86 - The Menkyou Shutoku Simulation +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-20436 +Name = Sakigake!! Otokojuku +Region = NTSC-J --------------------------------------------- -Serial = SCES-50597 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20439 +Name = Simple 2000 Series Vol.79 - The Party Quiz - Akko ni Omakase +Region = NTSC-J --------------------------------------------- -Serial = SCES-50598 -Name = Monsterit Oy -Region = PAL-Unk +Serial = SLPS-20440 +Name = Simple 2000 Series Vol.88 - The Mini Bijo Keikan +Region = NTSC-J --------------------------------------------- -Serial = SCES-50599 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20441 +Name = Simple 2000 Series Vol.87 - The Senko +Region = NTSC-J --------------------------------------------- -Serial = SCES-50600 -Name = Disney's Monster Inc. - Scare Island -Region = PAL-Unk +Serial = SLPS-20442 +Name = Daito Giken Koushiki Pachi-Slot Simulator Banchou +Region = NTSC-J --------------------------------------------- -Serial = SCES-50601 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20443 +Name = Blocks Club with Bumpy Trot +Region = NTSC-J --------------------------------------------- -Serial = SCES-50602 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20444 +Name = Simple 2000 Series Vol.90 - The O-Ane-Chan Bara 2 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-50603 -Name = Monstruos S.A - La Isla de los Sustos -Region = PAL-Unk +Serial = SLPS-20445 +Name = Simple 2000 Series Ultimate Vol.28 - The Gaidou! Genocide Grand Prix - Drive to Survive +Region = NTSC-J --------------------------------------------- -Serial = SCES-50604 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20446 +Name = Simple 2000 Series Vol.89 - The Party Game 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50605 -Name = Monsters Inc. -Region = PAL-Unk +Serial = SLPS-20447 +Name = Kamen Rider Hibiki +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-50611 -Name = Space Channel 5 -Region = PAL-E +Serial = SLPS-20450 +Name = Taiko no Tatsujin - Wai Wai Happy Muyome [with Tatacon] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50612 -Name = Space Channel 5 - Part 2 -Region = PAL-Unk +Serial = SLPS-20451 +Name = Taiko no Tatsujin - Wai Wai Happy Muyome +Region = NTSC-J --------------------------------------------- -Serial = SCES-50614 -Name = Jak & Daxter - The Precursor Legacy -Region = PAL-Unk +Serial = SLPS-20452 +Name = Simple 2000 Series Ultimate Vol.30 - Kourin! Zokusha Goddo! +Region = NTSC-J --------------------------------------------- -Serial = SCES-50759 -Name = Virtua Fighter 4 -Region = PAL-Unk +Serial = SLPS-20453 +Name = Simple 2000 Series Ultimate Vol.29 - K-1 Premium 2005 Dynamite!! +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-50760 -Name = Ico -Region = PAL-M5 -Compat = 5 -eeClampMode = 2 // Otherwise freezes in various spots, check full intro -vuClampMode = 1 // Otherwise camera gets stuck off the player in various spots. +Serial = SLPS-20454 +Name = Simple 2000 Series Vol.93 - The Right Brain Drill +Region = NTSC-J --------------------------------------------- -Serial = SCES-50781 -Name = Destruction Derby Arena [Beta, Promo, & Full Retail] -Region = PAL-E -Compat = 4 +Serial = SLPS-20455 +Name = Simple 2000 Series Vol.94 - The Aka-Champion - Come on Baby +Region = NTSC-J --------------------------------------------- -Serial = SCES-50791 -Name = Frequency -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20456 +Name = Simple 2000 Series Vol.95 - The Zombie vs. Kyuukyuusha +Region = NTSC-J --------------------------------------------- -Serial = SCES-50810 -Name = Smash Court Tennis - Pro Tournament -Region = PAL-Unk +Serial = SLPS-20457 +Name = Hissatsu Pachislo Evolution 2 - Oso Matsu-Kun +Region = NTSC-J --------------------------------------------- -Serial = SCES-50850 -Name = Gran Turismo - Concept 2002 Tokyo-Geneva -Region = PAL-Unk +Serial = SLPS-20458 +Name = Simple 2000 Series Vol.96 - The Pirate +Region = NTSC-J --------------------------------------------- -Serial = SCES-50858 -Name = Gran Turismo - Concept 2002 Tokyo-Geneva -Region = PAL-M6 -Compat = 5 +Serial = SLPS-20459 +Name = Yamasa Digi World SP - Isao Lady +Region = NTSC-J --------------------------------------------- -Serial = SCES-50878 -Name = Tekken 4 -Region = PAL-Unk +Serial = SLPS-20460 +Name = Rakushou! Pachi-Slot Sengen 4 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-20461 +Name = Simple 2000 Series Vol.99 - The Genshijin +Region = NTSC-J Compat = 5 -[patches = 2251E14D] - - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,00292424,word,24200001 - patch=0,EE,00292624,word,00000000 - -[/patches] -[patches = F48F994A] - - comment=patches by Shadow Lady - //IPU BUSY! fix... - patch=0,EE,00292424,word,24200001 - patch=0,EE,00292624,word,00000000 - -[/patches] --------------------------------------------- -Serial = SCES-50885 -Name = Ape Escape 2 -Region = PAL-Unk +Serial = SLPS-20462 +Name = Ougon Kishi Garo [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50887 -Name = Alpine Racer 3 -Region = PAL-Unk -Compat = 3 +Serial = SLPS-20463 +Name = Ougon Kishi Garo +Region = NTSC-J --------------------------------------------- -Serial = SCES-50888 -Name = Pac-Man World 2 -Region = PAL-Unk +Serial = SLPS-20464 +Name = Simple 2000 Series Vol.105 - The Maid Fuku to Kikanjuu +Region = NTSC-J --------------------------------------------- -Serial = SCES-50889 -Name = Ninja Assault -Region = PAL-Unk +Serial = SLPS-20465 +Name = Simple 2000 Series Vol.100 - The Otoko Tachi no Kijuu Houza +Region = NTSC-J --------------------------------------------- -Serial = SCES-50916 -Name = Ratchet & Clank -Region = PAL-M5 +Serial = SLPS-20466 +Name = Simple 2000 Series Vol.101 - The Oanechan Pon - Oanechan 2 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-20467 +Name = Simple 2000 Series Vol.102 - The Fuhyou - Senjou no Inu Tachi +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-20468 +Name = Simple 2000 Series Vol.106 - The Block Kuzushi Quest - Dragon Kingdom +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-50917 -Name = Sly Racoon -Region = PAL-Unk +Serial = SLPS-20469 +Name = Matching Maker 2 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-50928 -Name = SOCOM - U.S. Navy SEALs [Beta & Full Release] -Region = PAL-M6 +Serial = SLPS-20470 +Name = Simple 2000 Series Vol.103 - The Chikyuu Boueigun Tactics +Region = NTSC-J --------------------------------------------- -Serial = SCES-50934 -Name = World Rally Championship II Extreme -Region = PAL-Unk +Serial = SLPS-20471 +Name = Chulip [Super Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50935 -Name = World Rally Championship II Extreme -Region = PAL-Unk +Serial = SLPS-20472 +Name = Daito Giken Koushiki Pachi-Slot Simulator - Hihouden +Region = NTSC-J --------------------------------------------- -Serial = SCES-50956 -Name = Ferrari F355 Challenge -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20473 +Name = Simple 2000 Series Vol.104 - The Robot Tsuku Rouze! - Gekitou! Robot Fight +Region = NTSC-J --------------------------------------------- -Serial = SCES-50960 -Name = Disney's Stitch: Experiment 626 -Region = PAL-E +Serial = SLPS-20474 +Name = Simple 2000 Series Vol.107 - The Honoo no Kakutou Banchou +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-20475 +Name = Yamasa Digi World SP - Giant Pulsar +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-50966 -Name = Disney's Stitch - Experiment 626 -Region = PAL-Unk +Serial = SLPS-20476 +Name = Simple 2000 Series Vol.108 - The Nippon Tokushubutai +Region = NTSC-J --------------------------------------------- -Serial = SCES-50967 -Name = Kingdom Hearts -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20477 +Name = Fish Eyes 3 [Super Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SCES-50968 -Name = Kingdom Hearts -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20478 +Name = Simple 2000 Series Vol.109 - The Taxi 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50969 -Name = Kingdom Hearts -Region = PAL-G -Compat = 5 +Serial = SLPS-20479 +Name = Sokudoku Master +Region = NTSC-J --------------------------------------------- -Serial = SCES-50970 -Name = Kingdom Hearts -Region = PAL-I +Serial = SLPS-20480 +Name = Simple 2000 Series Vol.110 - The Toubou Prisoner +Region = NTSC-J --------------------------------------------- -Serial = SCES-50971 -Name = Kingdom Hearts -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20481 +Name = Simple 2000 Series Vol.112 - The Tousou Highway 2 - Road Warrior 2050 +Region = NTSC-J --------------------------------------------- -Serial = SCES-50982 -Name = Moto GP 3 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-20482 +Name = 3-D Mahjong + Suzume Paitori +Region = NTSC-J --------------------------------------------- -Serial = SCES-50987 -Name = Resident Evil - Outbreak -Region = PAL-Unk +Serial = SLPS-20483 +Name = Kamen Rider Kabuto +Region = NTSC-J --------------------------------------------- -Serial = SCES-51004 -Name = Formula One 2002 -Region = PAL-Unk +Serial = SLPS-20484 +Name = Simple 2000 Series Ultimate Vol.34 - Sakigake!! Otokojuku +Region = NTSC-J --------------------------------------------- -Serial = SCES-51039 -Name = This is Football 2003 -Region = PAL-E +Serial = SLPS-20485 +Name = Taiko no Tatsujin Doka! [with Tatacon Controller] +Region = NTSC-J --------------------------------------------- -Serial = SCES-51040 -Name = Le Monde des Bleus 2003 -Region = PAL-Unk +Serial = SLPS-20486 +Name = Taiko no Tatsujin Bang Tap! Toomori 7 Daimei +Region = NTSC-J --------------------------------------------- -Serial = SCES-51041 -Name = This is Football 2003 -Region = PAL-Unk +Serial = SLPS-20487 +Name = Pachi-Slot King! Kagaku Ninja-Tai Gatchaman +Region = NTSC-J --------------------------------------------- -Serial = SCES-51102 -Name = Ape Escape 2 -Region = PAL-Unk +Serial = SLPS-20488 +Name = Simple 2000 Series Vol.113 - The Tairyou Jigoku +Region = NTSC-J --------------------------------------------- -Serial = SCES-51103 -Name = Ape Escape 2 -Region = PAL-Unk +Serial = SLPS-20489 +Name = Simple 2000 Series Vol.114 - The Jokouppichi Torimonochou - Oanechan Go Go Go! +Region = NTSC-J --------------------------------------------- -Serial = SCES-51104 -Name = Ape Escape 2 -Region = PAL-Unk +Serial = SLPS-20490 +Name = Pachi-Slot Club Collection - IM Juggler EX - Juggler Selection +Region = NTSC-J --------------------------------------------- -Serial = SCES-51105 -Name = Ape Escape 2 -Region = PAL-Unk +Serial = SLPS-20491 +Name = Simple 2000 Series Vol.118 - The Raku Musha Dokaku Takeshi Samurai Toujou +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97225 -Name = Primal [Demo] -Region = NTSC-U +Serial = SLPS-20492 +Name = Simple 2000 Series Vol.115 - The Roomshare to Iu Seikatsu +Region = NTSC-J --------------------------------------------- -Serial = SCUS-97142 -Name = Primal - Civilization Is Only Skin Deep -Region = NTSC-U +Serial = SLPS-20493 +Name = Simple 2000 Series Vol.116 - The Neko Mura no Hitobito Pagu Daikan no Akugyou Zanmai +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-51135 -Name = Primal -Region = PAL-M5 -Compat = 5 // With GSdx, SW-mode only (issue 1212). -// [patches] -// comment=- Widescreen enforcement lazy-hack by pgert. -// patch=1,EE,204886FC,extended,00000001 // 00000000 -// // -// patch=1,EE,00103D9C,word,3C013F55 // 3C013F66 - X-axis of X-button & "Start" on Start menu - better. -// patch=1,EE,80103D9C,word,3C013F55 // 3C013F66 - a clone from 00103D9C. -// patch=1,EE,A0103D9C,word,3C013F55 // 3C013F66 - a clone from 00103D9C. -// // -// patch=1,EE,0012A000,word,3C013F40 // 3C013F66 - Y-axis of X-button & "Select" on TV-mode menu - better. -// patch=1,EE,8012A000,word,3C013F40 // 3C013F66 - a clone from 0012A000. -// patch=1,EE,A012A000,word,3C013F40 // 3C013F66 - a clone from 0012A000. -// [/patches] +Serial = SLPS-20494 +Name = Simple 2000 Series Vol.117 - The Zerosen +Region = NTSC-J --------------------------------------------- -Serial = SCES-51685 -Name = Primal -Region = PAL-R +Serial = SLPS-20496 +Name = Daito Giken Koushiki Pachi-Slot Simulator - Shake II +Region = NTSC-J --------------------------------------------- -Serial = SCES-51159 -Name = Getaway, The -Region = PAL-M5 -Compat = 5 +Serial = SLPS-20497 +Name = Simple 2000 Series Vol.119 - The Survival Game 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51164 -Name = Mark of Kri, The -Region = PAL-Unk +Serial = SLPS-20499 +Name = Inaka Kurashi - Nan no Shima no Monogatari [Super Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SCES-51176 -Name = Disney's Treasure Planet -Region = PAL-Unk +Serial = SLPS-20500 +Name = Simple 2000 Series Vol.120 - The Saigo no Nippon Tsuwamono +Region = NTSC-J --------------------------------------------- -Serial = SCES-51179 -Name = This is Football 2003 -Region = PAL-Unk +Serial = SLPS-20501 +Name = Hayarikami 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51190 -Name = Dark Chronicle -Region = PAL-M5 -Compat = 5 +Serial = SLPS-20503 +Name = Simple 2000 Series Vol.121 - The Boku no Machidzukuri 2 - Machi-ing Maker 2.1 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51224 -Name = War of the Monsters -Region = PAL-Unk +Serial = SLPS-20504 +Name = Daito Giken Koushiki Pachi-Slot Simulator - Shin Yoshimune +Region = NTSC-J --------------------------------------------- -Serial = SCES-51248 -Name = Dog's Life -Region = PAL-Unk +Serial = SLPS-25001 +Name = Eternal Ring +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-51426 -Name = Getaway, The -Region = PAL-Unk +Serial = SLPS-25002 +Name = Dead or Alive 2 +Region = NTSC-J +Compat = 5 +[patches = 7894BA09] + // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function + patch=0,EE,00290408,word,24060000 + + //patch=0,EE,0029055C,word,10000013 + + // I tried to write a comment explaining this then realised the futility + //patch=0,EE,0028FE78,word,FFB300E0 + //patch=0,EE,0028FE7C,word,3C130058 + //patch=0,EE,0028FE80,word,0C0CD678 + //patch=0,EE,0028FE84,word,266457C0 + //patch=0,EE,0028FE88,word,1440FFFD + //patch=0,EE,0028FE8C,word,32224000 + //patch=0,EE,0028FE90,word,1040000E + //patch=0,EE,0028FE94,word,FFB400F0 + //patch=0,EE,0028FE98,word,3402C020 + //patch=0,EE,0028FE9C,word,322BFFF0 + //patch=0,EE,0028FEA0,word,1162000B + //patch=0,EE,0028FEA4,word,3C140058 + //patch=0,EE,0028FEA8,word,00000000 +[/patches] --------------------------------------------- -Serial = SCES-51428 -Name = Shinobi -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25003 +Name = Evergrace +Region = NTSC-J --------------------------------------------- -Serial = SCES-51463 -Name = Ghosthunter -Region = PAL-Unk +Serial = SLPS-25004 +Name = Kensetsu Juuki Kenka Battle - Buchigire Kongou!! +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-51480 -Name = Twisted Metal - Black - Online -Region = PAL-M5 +Serial = SLPS-25005 +Name = Rock'n Mega Stage +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-51513 -Name = EyeToy - Play -Region = PAL-Unk +Serial = SLPS-25006 +Name = Koushien Baseball +Region = NTSC-J --------------------------------------------- -Serial = SCES-51533 -Name = God of War -Region = PAL-Unk +Serial = SLPS-25007 +Name = Armored Core 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51578 -Name = Network Access Disc [Original, v4.02 & v4.03] -Region = PAL-M7 +Serial = SLPS-25008 +Name = Sorcerous Stabber Orphen +Region = NTSC-J --------------------------------------------- -Serial = SCES-51592 -Name = Formula One 2003 -Region = PAL-M6 +Serial = SLPS-25009 +Name = G-Saviour +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25010 +Name = Unison +Region = NTSC-J Compat = 5 -XgKickHack = 1 //For SPS. --------------------------------------------- -Serial = SCES-51593 -Name = Hardware Online Arena [Beta, Promo & Full Release] -Region = PAL-M4 +Serial = SLPS-25011 +Name = Sunrise Eiyuutan R +Region = NTSC-J --------------------------------------------- -Serial = SCES-51607 -Name = Ratchet & Clank 2 - Locked & Loaded -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25012 +Name = Victorious Boxers +Region = NTSC-J --------------------------------------------- -Serial = SCES-51608 -Name = Jak & Daxter 2 - Renegade -Region = PAL-Unk +Serial = SLPS-25013 +Name = Kurikuri Mix +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25014 +Name = Choro Q - High Grade [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-51610 -Name = This is Football 2004 (Red Devils 2004) -Region = PAL-Unk +Serial = SLPS-25015 +Name = Choro Q - High Grade +Region = NTSC-J --------------------------------------------- -Serial = SCES-51611 -Name = This is Football 2004 -Region = PAL-Unk +Serial = SLPS-25016 +Name = Neo Atlas 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51612 -Name = This is Football 5 -Region = PAL-Unk +Serial = SLPS-25017 +Name = A-Train 2001 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51613 -Name = This is Football 2004 -Region = PAL-Unk +Serial = SLPS-25018 +Name = Sidewinder Max +Region = NTSC-J --------------------------------------------- -Serial = SCES-51614 -Name = Monde des Bleus 2004, Le - Nouvelle Generation -Region = PAL-Unk +Serial = SLPS-25020 +Name = Mobile Suit Gundam +Region = NTSC-J --------------------------------------------- -Serial = SCES-51618 -Name = SOCOM -Region = PAL-Unk +Serial = SLPS-25022 +Name = Cool Boarders - Code Alien +Region = NTSC-J --------------------------------------------- -Serial = SCES-51635 -Name = Brave - The Search for Spirit Dancer -Region = PAL-Unk +Serial = SLPS-25023 +Name = Bouncer, The +Region = NTSC-J --------------------------------------------- -Serial = SCES-51648 -Name = Everquest - Online Adventures -Region = PAL-E-I +Serial = SLPS-25025 +Name = Seven Lance Moromos - Cavalryman Corps +Region = NTSC-J +Compat = 5 +EETimingHack = 1 //Correct graphics after changing scene. --------------------------------------------- -Serial = SCES-51677 -Name = My Street -Region = PAL-Unk +Serial = SLPS-25026 +Name = Dead or Alive 2 - Hardcore +Region = NTSC-J +Compat = 1 --------------------------------------------- -Serial = SCES-51684 -Name = World Rally Championship 3 -Region = PAL-Unk +Serial = SLPS-25028 +Name = Shutokou Battle 0 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51706 -Name = Amplitude -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25030 +Name = Lunatic Dawn - Tempest +Region = NTSC-J --------------------------------------------- -Serial = SCES-51719 -Name = Gran Turismo 4 -Region = PAL-Unk -Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLPS-25032 +Name = Golful Golf +Region = NTSC-J --------------------------------------------- -Serial = SCES-51725 -Name = Everquest Online Adventures -Region = PAL-E -Compat = 3 -[patches = 555019B2] +Serial = SLPS-25033 +Name = Kaze no Klonoa 2 - Sekai ga Nozonda Wasuremono +Region = NTSC-J +Compat = 5 +eeClampMode = 3 //Objects needed appear in wrong places without it +[patches = 1645DE53] - patch=0,EE,00571414,word,00000000 - patch=0,EE,00571438,word,00000000 + comment=Patch by Shadow Lady + //For hang in Volk City + //Skip sceIpuSync + patch=0,EE,003047D0,word,03e00008 [/patches] --------------------------------------------- -Serial = SCES-51844 -Name = Time Crisis 3 -Region = PAL-Unk +Serial = SLPS-25034 +Name = Flower, Sun and Rain +Region = NTSC-J --------------------------------------------- -Serial = SCES-51895 -Name = EyeToy - Groove -Region = PAL-Unk +Serial = SLPS-25035 +Name = Monster Farm 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51904 -Name = SOCOM II - U.S. Navy SEALs -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SLPS-25036 +Name = Gallop Racer 5 +Region = NTSC-J --------------------------------------------- -Serial = SCES-51910 -Name = Arc the Lad - Twilight of the Spirits -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25037 +Name = Velvet File Plus +Region = NTSC-J --------------------------------------------- -Serial = SCES-51920 -Name = Forbidden Siren -Region = PAL-Unk +Serial = SLPS-25038 +Name = True Love Story 3 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25039 +Name = Missing Blue [First Limited Edition] +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25040 +Name = Armored Core 2 - Another Age +Region = NTSC-J Compat = 5 +MemCardFilter = SCPS-55024/SLPS-25007/SLPS-25040/SLPS-73403/SLPS-73411 --------------------------------------------- -Serial = SCES-51971 -Name = Rise to Honor -Region = PAL-Unk +Serial = SLPS-25041 +Name = Shadow Hearts +Region = NTSC-J --------------------------------------------- -Serial = SCES-51977 -Name = Hardware Online Arena -Region = PAL-Unk +Serial = SLPS-25042 +Name = Maken Shao [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-51979 -Name = Destruction Derby Arenas -Region = PAL-M6 +Serial = SLPS-25044 +Name = Evergrace 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52004 -Name = Killzone -Region = PAL-M6 +Serial = SLPS-25045 +Name = Lilie no Atelier: Salburg no Renkinjutsushi 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52033 -Name = Syphon Filter - The Omega Strain -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 //random hangs in US version, code is the same. -[patches = 27E54B37] - comment=COP2 patch by Refraction - patch=0,EE,003953F8,word,48438000 - patch=0,EE,003735FC,word,4B06521B -[/patches] +Serial = SLPS-25046 +Name = Golf Navigator Vol.1 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52042 -Name = Formula One 2004 -Region = PAL-Unk +Serial = SLPS-25047 +Name = Golf Navigator Vol.2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52065 -Name = Flipnic -Region = PAL-Unk +Serial = SLPS-25048 +Name = Zeonic Front - Mobile Suit Gundam 0079 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52099 -Name = I-Ninja -Region = PAL-Unk +Serial = SLPS-25050 +Name = Final Fantasy X +Region = NTSC-J +Compat = 5 +IPUWaitHack = 1 --------------------------------------------- -Serial = SCES-52124 -Name = kill.switch -Region = PAL-M5 +Serial = SLPS-25051 +Name = Missing Blue +Region = NTSC-J --------------------------------------------- -Serial = SCES-52154 -Name = EyeToy - Chat -Region = PAL-M11 +Serial = SLPS-25052 +Name = Ace Combat 4 - Shattered Skies +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-52156 -Name = Ghosthunter - Hunter on the spectres -Region = PAL-Unk +Serial = SLPS-25053 +Name = Eikan wa Kimini - Koushien no Hasha +Region = NTSC-J --------------------------------------------- -Serial = SCES-52268 -Name = Sing-Star -Region = PAL-Unk +Serial = SLPS-25054 +Name = Tamamayu Story 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52299 -Name = SingStar -Region = PAL-Unk +Serial = SLPS-25055 +Name = Golf Navigator Vol.3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52306 -Name = SOCOM II - U.S. Navy SEALs -Region = PAL-Unk -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = SLPS-25057 +Name = King's Field 4 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52327 -Name = Forbidden Siren -Region = PAL-Unk +Serial = SLPS-25059 +Name = G-Breaker - Legend of Cloudia +Region = NTSC-J --------------------------------------------- -Serial = SCES-52328 -Name = Forbidden Siren -Region = PAL-G -Compat = 5 +Serial = SLPS-25060 +Name = Mobile Suit Gundam - Megurial Sora [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52329 -Name = Forbidden Siren -Region = PAL-Unk +Serial = SLPS-25062 +Name = Kidou Senshi Gundam - Meguriai Sora +Region = NTSC-J --------------------------------------------- -Serial = SCES-52330 -Name = Forbidden Siren - Viviendo la Pesadilla -Region = PAL-S +Serial = SLPS-25064 +Name = Sea-Man +Region = NTSC-J --------------------------------------------- -Serial = SCES-52389 -Name = World Rally Championship 4 -Region = PAL-Unk -Compat = 1 +Serial = SLPS-25069 +Name = FIFA 2002 - Road to World Cup +Region = NTSC-J --------------------------------------------- -Serial = SCES-52405 -Name = DJ - Decks & FX - House Edition -Region = PAL-M9 -Compat = 5 +Serial = SLPS-25070 +Name = Tales of the Sunrise Heroes 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52410 -Name = Athens 2004 -Region = PAL-Unk +Serial = SLPS-25071 +Name = Visual Mix - Ayumi Hamasaki Dome Tour 2001 [Disc1of2] +Region = NTSC-J +MemCardFilter = SLPS-25071/SLPS-25072/SLPM-65086/SLPM-65087 --------------------------------------------- -Serial = SCES-52411 -Name = Athens 2004 [Platinum] -Region = PAL-Unk +Serial = SLPS-25072 +Name = Visual Mix - Ayumi Hamasaki Dome Tour 2001 [Disc2of2] +Region = NTSC-J +MemCardFilter = SLPS-25071/SLPS-25072/SLPM-65086/SLPM-65087 --------------------------------------------- -Serial = SCES-52412 -Name = Jackie Chan Adventures -Region = PAL-Unk +Serial = SLPS-25074 +Name = Project Zero +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-52423 -Name = Smash Court Tennis - Pro Tournament 2 -Region = PAL-M5 +Serial = SLPS-25075 +Name = Sidewinder F +Region = NTSC-J --------------------------------------------- -Serial = SCES-52424 -Name = Ace Combat - Squadron Leader -Region = PAL-E -[patches = 1D54FEA9] - patch=0,EE,001A3154,word,48498800 - patch=0,EE,001A3158,word,4B00682C - patch=0,EE,001A3164,word,484A8800 - patch=0,EE,001A3168,word,4B0C682C -[/patches] +Serial = SLPS-25076 +Name = Sidewinder F +Region = NTSC-J --------------------------------------------- -Serial = SCES-52425 -Name = This is Football 5 -Region = PAL-Unk +Serial = SLPS-25077 +Name = Vampire Night +Region = NTSC-J +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SCES-52426 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25078 +Name = SSX Tricky +Region = NTSC-J --------------------------------------------- -Serial = SCES-52427 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25079 +Name = Madden NFL 2002 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52429 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25080 +Name = Uchuu Senkan Yamato - Iscandar he no Tsuioku [Special Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52430 -Name = Le Monde des Bleus 2005 -Region = PAL-Unk +Serial = SLPS-25081 +Name = Saishuu Densha +Region = NTSC-J --------------------------------------------- -Serial = SCES-52431 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25084 +Name = Thunder Strike - Operation Phoenix +Region = NTSC-J --------------------------------------------- -Serial = SCES-52432 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25085 +Name = Soul Reaver 2 - Legacy of Kain +Region = NTSC-J --------------------------------------------- -Serial = SCED-52436 -Name = Playstation2 UK Demo 7-2004 -Region = PAL-Unk +Serial = SLPS-25088 +Name = Final Fantasy X International +Region = NTSC-J Compat = 5 +IPUWaitHack = 1 --------------------------------------------- -Serial = SCES-52438 -Name = Gran Turismo 4 - Prologue -Region = PAL-Unk -Compat = 5 -//eeClampMode = 3 // Text in races works -vuClampMode = 2 // Text in GT mode works +Serial = SLPS-25094 +Name = Reveal Fantasia +Region = NTSC-J --------------------------------------------- -Serial = SCES-52456 -Name = Ratchet & Clank 3 -Region = PAL-Unk +Serial = SLPS-25095 +Name = Uchuu Senkan Yamato - Iscandar he no Tsuioku +Region = NTSC-J --------------------------------------------- -Serial = SCES-52460 -Name = Jak 3 -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25096 +Name = Galerians 2 [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52529 -Name = Sly Racoon 2 - Band of Thieves -Region = PAL-M11 -Compat = 5 +Serial = SLPS-25097 +Name = Velvet File Plus +Region = NTSC-J --------------------------------------------- -Serial = SCES-52530 -Name = Crisis Zone -Region = PAL-Unk +Serial = SLPS-25098 +Name = Air Ranger 2 - Rescue Helicopter +Region = NTSC-J --------------------------------------------- -Serial = SCES-52564 -Name = Sing-Star -Region = PAL-Unk +Serial = SLPS-25099 +Name = WRC - World Rally Championship +Region = NTSC-J --------------------------------------------- -Serial = SCES-52565 -Name = Sing-Star -Region = PAL-Unk +Serial = SLPS-25100 +Name = Tekken 4 +Region = NTSC-J +Compat = 5 +[patches = 26173F9A] + + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,00291764,word,24200001 + patch=0,EE,00291964,word,00000000 + +[/patches] +[patches = 7c359c94] + + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,00291764,word,24200001 + patch=0,EE,00291964,word,00000000 + +[/patches] --------------------------------------------- -Serial = SCES-52566 -Name = SingStar -Region = PAL-Unk +Serial = SLPS-25102 +Name = Project Arms +Region = NTSC-J --------------------------------------------- -Serial = SCES-52582 -Name = Everybody's Golf -Region = PAL-Unk +Serial = SLPS-25103 +Name = Super Robot Taisen Impact [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52586 -Name = Death by Degrees -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25104 +Name = Super Robot Taisen Impact +Region = NTSC-J --------------------------------------------- -Serial = SCES-52596 -Name = This is Football 2005 -Region = PAL-Unk +Serial = SLPS-25105 +Name = Kingdom Hearts +Region = NTSC-J --------------------------------------------- -Serial = SCES-52677 -Name = Network Access Disc & Hardware - Online Arena -Region = PAL-Unk // Multiple languages +Serial = SLPS-25107 +Name = Kengo 2 +Region = NTSC-J Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages and widescreen. - comment=- Language & widescreen selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". - comment=- * * * * * * - comment=- Using GSdx, this gamedisc crashes in gamemenu with SW-mode, - comment=- and has no 3D display with HW-mode. - comment=- Playable by toggling between HW-mode (in menu) and SW-mode (in game). -[/patches] --------------------------------------------- -Serial = SCES-52748 -Name = EyeToy - Play 2 -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25108 +Name = Runabout 3 - Neo Age +Region = NTSC-J --------------------------------------------- -Serial = SCES-52756 -Name = DJ - Decks & FX - Claudio Coccoluto Edition -Region = PAL-I +Serial = SLPS-25111 +Name = Higanbana +Region = NTSC-J --------------------------------------------- -Serial = SCES-52758 -Name = Getaway, The - Black Monday -Region = PAL-Unk +Serial = SLPS-25112 +Name = Armored Core 3 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-52762 -Name = DJ Decks & FX -Region = PAL-Unk +Serial = SLPS-25113 +Name = Zettai Zetsumei Toshi +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-52763 -Name = DJ Decks & FX Vol.1 -Region = PAL-Unk +Serial = SLPS-25114 +Name = G-Breaker - Daisanshi Cloudia Taisen +Region = NTSC-J --------------------------------------------- -Serial = SCES-52826 -Name = Sing-Star Party -Region = PAL-Unk +Serial = SLPS-25115 +Name = EOE - Eve of Evtinction +Region = NTSC-J --------------------------------------------- -Serial = SCES-52827 -Name = SingStar Party -Region = PAL-Unk +Serial = SLPS-25117 +Name = Sankyo Fever 6 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25118 +Name = FIFA 2002 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52828 -Name = Sing-Star NRJ Music Tour -Region = PAL-F +Serial = SLPS-25119 +Name = Galerians 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-52829 -Name = Sing-Star Party -Region = PAL-Unk +Serial = SLPS-25120 +Name = Gundam Gihren's Ambition +Region = NTSC-J --------------------------------------------- -Serial = SCES-52830 -Name = SingStar Party -Region = PAL-Unk +Serial = SLPS-25121 +Name = dot Hack Vol.1 +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCES-52883 -Name = EyeToy - Kinetic -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25122 +Name = Mobile Suit Gundam - Lost War Chronicles [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52892 -Name = Moto GP 4 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25123 +Name = Mobile Suit Gundam - Lost War Chronicles +Region = NTSC-J --------------------------------------------- -Serial = SCES-52893 -Name = Killzone -Region = PAL-E-Gr-R +Serial = SLPS-25124 +Name = G-Breaker 2 - Doumei no Hangeki +Region = NTSC-J --------------------------------------------- -Serial = SCES-52930 -Name = EyeToy - Monkey Mania -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25125 +Name = Iris [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-52948 -Name = Getaway, The - Black Monday -Region = PAL-Unk +Serial = SLPS-25127 +Name = Air +Region = NTSC-J --------------------------------------------- -Serial = SCES-53033 -Name = Formula One 2005 -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25128 +Name = Victorious Boxer - Championship Version +Region = NTSC-J --------------------------------------------- -Serial = SCES-53053 -Name = Death by Degrees -Region = PAL-Unk +Serial = SLPS-25129 +Name = Victorious Boxer - Championship Version +Region = NTSC-J --------------------------------------------- -Serial = SCES-53054 -Name = Death by Degrees -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25130 +Name = Roommate Asami - Okusama wa Joshikousei +Region = NTSC-J --------------------------------------------- -Serial = SCES-53055 -Name = Eyetoy - Antigrav -Region = PAL-M5 +Serial = SLPS-25131 +Name = Ghost Vibration +Region = NTSC-J --------------------------------------------- -Serial = SCES-53133 -Name = God of War -Region = PAL-E -Compat = 4 +Serial = SLPS-25135 +Name = Kamaitachi no Yoru 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53178 -Name = SingStar Pop -Region = PAL-Unk +Serial = SLPS-25136 +Name = Kuon no Kizuna Sairin Mikotonori +Region = NTSC-J --------------------------------------------- -Serial = SCES-53179 -Name = SingStar Pop -Region = PAL-Unk +Serial = SLPS-25138 +Name = Ever 17 - The Out of Infinity +Region = NTSC-J --------------------------------------------- -Serial = SCES-53180 -Name = Sing-Star - The Dome -Region = PAL-Unk +Serial = SLPS-25139 +Name = Baldur's Gate: Dark Alliance +Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SCES-53181 -Name = SingStar -Region = PAL-Unk +Serial = SLPS-25142 +Name = Tiger Woods PGA Tour 2002 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53182 -Name = Sing-Star Pop -Region = PAL-S +Serial = SLPS-25143 +Name = dot Hack Vol.2 - Mutation +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCES-53183 -Name = SingStar Pop -Region = PAL-Unk +Serial = SLPS-25144 +Name = Memorial Song +Region = NTSC-J --------------------------------------------- -Serial = SCES-53184 -Name = SingStar Norske Hits -Region = PAL-Unk +Serial = SLPS-25145 +Name = Hooligan [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53185 -Name = SingStar Svenska Hits -Region = PAL-Unk +Serial = SLPS-25146 +Name = Hooligan +Region = NTSC-J --------------------------------------------- -Serial = SCES-53202 -Name = Tekken 5 -Region = PAL-Unk -Compat = 5 -eeClampMode = 1 +Serial = SLPS-25149 +Name = Ever 17 - The Out of Infinity +Region = NTSC-J --------------------------------------------- -Serial = SCES-53247 -Name = WRC - World Rally Championship - Rally Evolved -Region = PAL-Unk -Compat = 4 -XgKickHack = 1 //SPS. -[patches = cbbc2e7f] - comment=patches by Nachbrenner - //fix delay slot violation - patch=1,EE,003cc890,word,19c0004d - patch=1,EE,003cc894,word,01ad6826 - patch=1,EE,003cbc78,word,01ce7026 - patch=1,EE,003cbc7c,word,19a0006c - patch=1,EE,003cc528,word,01ce7026 - patch=1,EE,003cc52c,word,19a0000c - patch=1,EE,003cc46c,word,01ce7026 - patch=1,EE,003cc470,word,19a0000f - patch=1,EE,003cc704,word,01ce7026 - patch=1,EE,003cc708,word,19a0000f - patch=1,EE,003ccbb4,word,01ce7026 - patch=1,EE,003ccbb8,word,19a00011 -[/patches] +Serial = SLPS-25150 +Name = Only You +Region = NTSC-J --------------------------------------------- -Serial = SCES-53285 -Name = Ratchet - Gladiator -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25151 +Name = Medal of Honor - Jishousaidai no Sakusen +Region = NTSC-J --------------------------------------------- -Serial = SCES-53286 -Name = Jak X - Combat Racing -Region = PAL-Unk +Serial = SLPS-25154 +Name = Flower, Sun and Rain [Victor The Best] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53300 -Name = SOCOM 3 - U.S. Navy SEALs -Region = PAL-M5 +Serial = SLPS-25155 +Name = Ultraman Fighting Evolution 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53304 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25156 +Name = King of Fighters 2000, The +Region = NTSC-J --------------------------------------------- -Serial = SCES-53305 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25158 +Name = dot Hack - Vol.3 - Erosion Pollution +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCES-53307 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25159 +Name = Technic Beat +Region = NTSC-J --------------------------------------------- -Serial = SCES-53308 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25160 +Name = Final Fantasy XI 2002 [Special Art Box] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53310 -Name = Roland Garros 2005 -Region = PAL-E -Compat = 5 +Serial = SLPS-25161 +Name = Uchuu Senkan Yamato - Ankoku Seidan Teikoku no Gyakushuu [Special Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53312 -Name = Soul Calibur 3 -Region = PAL-Unk -Compat = 4 -vuRoundMode = 3 +Serial = SLPS-25162 +Name = Uchuu Senkan Yamato - Ankoku Seidan Teikoku no Gyakushuu +Region = NTSC-J --------------------------------------------- -Serial = SCES-53315 -Name = EyeToy - Play 3 -Region = PAL-M12 +Serial = SLPS-25164 +Name = Uchuu Senkan Yamato - Nijuu Ginga no Houkai +Region = NTSC-J --------------------------------------------- -Serial = SCES-53323 -Name = SingStar Pop World -Region = PAL-Unk +Serial = SLPS-25165 +Name = Gunvari Collection + Time Crisis +Region = NTSC-J --------------------------------------------- -Serial = SCES-53326 -Name = Shadow of the Colossus -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25166 +Name = Ingot 79 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53328 -Name = Genji -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25169 +Name = Armored Core 3 - Silent Line +Region = NTSC-J +MemCardFilter = SCAJ-20011/SCPS-55014/SLPS-25112/SLPS-25169/SLPS-73417/SLPS-73420 --------------------------------------------- -Serial = SCES-53347 -Name = SpyToy -Region = PAL-Unk +Serial = SLPS-25170 +Name = SD Gundam G Generation Neo +Region = NTSC-J --------------------------------------------- -Serial = SCES-53358 -Name = 24 - The Game -Region = PAL-Unk +Serial = SLPS-25171 +Name = Lupin III - Majutsu no Isan +Region = NTSC-J --------------------------------------------- -Serial = SCES-53372 -Name = Tourist Trophy - The Real Riding Simulator -Region = PAL-Unk +Serial = SLPS-25172 +Name = Tales of Destiny 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53397 -Name = SingStar Pop - World Events Code -Region = PAL-Unk +Serial = SLPS-25174 +Name = DragonBall Z - Budokai +Region = NTSC-J --------------------------------------------- -Serial = SCES-53409 -Name = Sly 3 -Region = PAL-M11 +Serial = SLPS-25177 +Name = Gallop Racer 6 - Revolution +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25178 +Name = Argus no Senshi +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-53422 -Name = Stuart Little 3 - Big Photo Adventure -Region = PAL-M9 +Serial = SLPS-25179 +Name = FIFA 2003 +Region = NTSC-J +vuClampMode = 2 //missing geometry with microVU --------------------------------------------- -Serial = SCES-53449 -Name = AFL Premiership 2005 -Region = PAL-Unk +Serial = SLPS-25181 +Name = Gunvari Collection & Time Crisis +Region = NTSC-J --------------------------------------------- -Serial = SCES-53450 -Name = Gaelic Football 2005 -Region = PAL-Unk +Serial = SLPS-25182 +Name = Idol Janshi R - Jan-Guru Project [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53565 -Name = SingStar Pop -Region = PAL-Unk +Serial = SLPS-25183 +Name = Idol Janshi R - Jan-Guru Project +Region = NTSC-J --------------------------------------------- -Serial = SCES-53602 -Name = Sing-Star '80s -Region = PAL-E +Serial = SLPS-25184 +Name = Guilty Gear XX - The Midnight Carnival +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53603 -Name = Sing-Star '80s -Region = PAL-F +Serial = SLPS-25185 +Name = Unlimited SaGa [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53604 -Name = Sing-Star '80s -Region = PAL-G +Serial = SLPS-25186 +Name = Kidou Shin Sangumi Moeyo Ken +Region = NTSC-J --------------------------------------------- -Serial = SCES-53605 -Name = Sing-Star '80s -Region = PAL-Unk +Serial = SLPS-25190 +Name = Sweet Legacy +Region = NTSC-J --------------------------------------------- -Serial = SCES-53606 -Name = Sing-Star '80s -Region = PAL-Unk +Serial = SLPS-25191 +Name = Mizuiro Light Blue +Region = NTSC-J --------------------------------------------- -Serial = SCES-53607 -Name = Sing-Star '80s -Region = PAL-Unk +Serial = SLPS-25192 +Name = My Merry May +Region = NTSC-J --------------------------------------------- -Serial = SCES-53609 -Name = Sing-Star '80s -Region = PAL-Unk +Serial = SLPS-25193 +Name = My Merry May +Region = NTSC-J --------------------------------------------- -Serial = SCES-53610 -Name = Sing-Star '80s -Region = PAL-Unk +Serial = SLPS-25195 +Name = Venus & Braves [Premium Pack] +Region = NTSC-J +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SCES-53642 -Name = Ape Escape 3 -Region = PAL-Unk +Serial = SLPS-25196 +Name = Venus & Braves +Region = NTSC-J Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SCES-53663 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25197 +Name = Kingdom Hearts - Final Mix [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53669 -Name = Buzz! The Music Quiz -Region = PAL-Unk +Serial = SLPS-25198 +Name = Kingdom Hearts - Final Mix +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53688 -Name = Urban Reign -Region = PAL-M5 -Compat = 4 +Serial = SLPS-25199 +Name = Unlimited Saga +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53795 -Name = SingStar '80s -Region = PAL-Unk +Serial = SLPS-25200 +Name = Final Fantasy XI +Region = NTSC-J +Compat = 3 --------------------------------------------- -Serial = SCES-53851 -Name = Forbidden Siren 2 -Region = PAL-M5 -Compat = 4 -XgKickHack = 1 //SPS. -[patches = C040B6AB] - comment=swapping a COP2 op into place to make the flags work without delays - patch=0,EE,002E2B44,word,48449000 - patch=0,EE,002E2B4C,word,4BC949FF -[/patches] +Serial = SLPS-25201 +Name = Reveal Fantasia +Region = NTSC-J --------------------------------------------- -Serial = SCES-53879 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25202 +Name = dot Hack - Vol.4 - Zettai Houi +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SCES-53880 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25204 +Name = Moto GP3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53881 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25205 +Name = Ys I-II - Eternal Story [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53882 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25206 +Name = Ys I-II - Eternal Story +Region = NTSC-J --------------------------------------------- -Serial = SCES-53883 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25209 +Name = Metal Slug 3 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53884 -Name = Buzz! The Big Quiz -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25212 +Name = Giren no Yabou - Zeon Dokuritsu Sensouden +Region = NTSC-J --------------------------------------------- -Serial = SCES-53889 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25213 +Name = Bass Landing 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53890 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25214 +Name = Guardian Angel +Region = NTSC-J --------------------------------------------- -Serial = SCES-53891 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25215 +Name = Iris [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53893 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25216 +Name = Iris +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53894 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25217 +Name = Shadow Tower Abyss +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-53895 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25219 +Name = Canary +Region = NTSC-J --------------------------------------------- -Serial = SCES-53897 -Name = Sing-Star Rocks! -Region = PAL-F +Serial = SLPS-25220 +Name = Elysion +Region = NTSC-J --------------------------------------------- -Serial = SCES-53898 -Name = Sing-Star Rocks! -Region = PAL-Unk +Serial = SLPS-25221 +Name = Pia - Welcome to Carrot 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-53925 -Name = Buzz! The Big Quiz -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25223 +Name = Canvas +Region = NTSC-J --------------------------------------------- -Serial = SCES-53926 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25224 +Name = Ai Yori Aoshi [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53927 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25225 +Name = Ai Yori Aoshi +Region = NTSC-J --------------------------------------------- -Serial = SCES-53929 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25226 +Name = Memories Off - Duet +Region = NTSC-J --------------------------------------------- -Serial = SCES-53931 -Name = Shinobido - Way of the Ninja -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25227 +Name = Super Robot Wars - Alpha 2nd [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-53950 -Name = F1 '06 -Region = PAL-Unk +Serial = SLPS-25228 +Name = Super Robot Wars - Alpha 2nd +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25230 +Name = Soul Calibur II +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-53960 -Name = B-Boy -Region = PAL-Unk +Serial = SLPS-25231 +Name = Myst III - Exile +Region = NTSC-J --------------------------------------------- -Serial = SCES-54025 -Name = SingStar Rocks! -Region = PAL-Unk +Serial = SLPS-25233 +Name = Do DonPachi Daioujou +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54041 -Name = Ace Combat - The Belkan War -Region = PAL-E -[patches = 194C9F38] - patch=0,EE,00131EB4,word,48498800 - patch=0,EE,00131EB8,word,4B00682C - patch=0,EE,00131EC4,word,484A8800 - patch=0,EE,00131EC8,word,4B0C682C -[/patches] +Serial = SLPS-25234 +Name = Tenchu 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54071 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25235 +Name = Yumeria +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54073 -Name = Buzz! The Big Quiz -Region = PAL-Unk +Serial = SLPS-25236 +Name = Fantastic Fortune 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54077 -Name = SingStar [Promo] -Region = PAL-I +Serial = SLPS-25237 +Name = Only You +Region = NTSC-J --------------------------------------------- -Serial = SCES-54078 -Name = SingStar Norsk pa Norsk -Region = PAL-Unk +Serial = SLPS-25238 +Name = My Merry Maybe +Region = NTSC-J --------------------------------------------- -Serial = SCES-54128 -Name = Deutsch Rock-Pop -Region = PAL-Unk +Serial = SLPS-25240 +Name = Motion Gravure Series - Megumi +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54129 -Name = SingStar -Region = PAL-Unk +Serial = SLPS-25241 +Name = Motion Gravure Series - Hiroko Mori +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54131 -Name = Sing-Star Anthems -Region = PAL-Unk -Compat = 3 +Serial = SLPS-25242 +Name = Motion Gravure Series - Tomomi Kitagawa +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54145 -Name = Lemmings -Region = PAL-Unk +Serial = SLPS-25243 +Name = Motion Gravure Series - Harumi Nemoto +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SCES-54191 -Name = Sing-Star Legends -Region = PAL-Unk +Serial = SLPS-25244 +Name = Max Payne +Region = NTSC-J --------------------------------------------- -Serial = SCES-54197 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25245 +Name = True Love Story - Summer Days and Yet +Region = NTSC-J --------------------------------------------- -Serial = SCES-54198 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25246 +Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" +Region = NTSC-J +//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang --------------------------------------------- -Serial = SCES-54206 -Name = God of War II -Region = PAL-M6 +Serial = SLPS-25247 +Name = R-Type Final +Region = NTSC-J Compat = 5 +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SCES-54219 -Name = Buzz! Junior - Jungle Party -Region = PAL-Unk ---------------------------------------------- -Serial = SCES-54220 -Name = Buzz! Junior - Jungle Party -Region = PAL-Unk +Serial = SLPS-25248 +Name = Kino no Tabi - The Beautiful World +Region = NTSC-J --------------------------------------------- -Serial = SCES-54257 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25250 +Name = Final Fantasy X-2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54258 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25251 +Name = MVP Baseball 2003 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54259 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25254 +Name = Enter the Matrix +Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SCES-54260 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25255 +Name = Sidewinder V [Premium Flight Box] +Region = NTSC-J --------------------------------------------- -Serial = SCES-54261 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25256 +Name = Never 7 - The End of Infinity +Region = NTSC-J --------------------------------------------- -Serial = SCES-54262 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25257 +Name = Close To +Region = NTSC-J --------------------------------------------- -Serial = SCES-54263 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25258 +Name = Virtual View - R.C.T. Eyes Play +Region = NTSC-J --------------------------------------------- -Serial = SCES-54264 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25259 +Name = Virtual View - Nemoto Harumi +Region = NTSC-J --------------------------------------------- -Serial = SCES-54265 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25260 +Name = Virtual View - Megumi +Region = NTSC-J --------------------------------------------- -Serial = SCES-54266 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25261 +Name = Guilty Gear XX #Reload +Region = NTSC-J --------------------------------------------- -Serial = SCES-54267 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25262 +Name = Private Nurse Maria +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54268 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25264 +Name = RahXephon [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-54269 -Name = Buzz! The Sports Quiz -Region = PAL-Unk +Serial = SLPS-25265 +Name = RahXephon +Region = NTSC-J --------------------------------------------- -Serial = SCES-54325 -Name = SingStar Legendat -Region = PAL-Unk +Serial = SLPS-25266 +Name = King of Fighters 2001, The +Region = NTSC-J --------------------------------------------- -Serial = SCES-54329 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25270 +Name = Sunrise World War +Region = NTSC-J --------------------------------------------- -Serial = SCES-54330 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25271 +Name = Sidewinder V +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54353 -Name = SingStar Legends -Region = PAL-Unk +Serial = SLPS-25272 +Name = Hulk, The +Region = NTSC-J --------------------------------------------- -Serial = SCES-54477 -Name = Socom US Navy Seals - Combined Assault -Region = PAL-E -Compat = 4 +Serial = SLPS-25274 +Name = Aikagi +Region = NTSC-J --------------------------------------------- -Serial = SCES-54497 -Name = Buzz! Le Mega Quiz -Region = PAL-F +Serial = SLPS-25275 +Name = Def Jam - Vendetta +Region = NTSC-J --------------------------------------------- -Serial = SCES-54499 -Name = Buzz! Das Mega-Quiz -Region = PAL-G +Serial = SLPS-25276 +Name = Natsuyume Ya Wa +Region = NTSC-J --------------------------------------------- -Serial = SCES-54500 -Name = Buzz! El Mega Concurso -Region = PAL-S +Serial = SLPS-25278 +Name = Memories Off - Mix +Region = NTSC-J --------------------------------------------- -Serial = SCES-54507 -Name = Buzz! The Mega Quiz -Region = PAL-M3 +Serial = SLPS-25279 +Name = Adventure Boy Club Magazine +Region = NTSC-J --------------------------------------------- -Serial = SCES-54524 -Name = Buzz! Junior - Jungle Party -Region = PAL-Unk +Serial = SLPS-25282 +Name = School Heaven - Boy's Love Scramble! +Region = NTSC-J --------------------------------------------- -Serial = SCES-54535 -Name = Everybody's Tennis -Region = PAL-Unk +Serial = SLPS-25283 +Name = Interlude +Region = NTSC-J --------------------------------------------- -Serial = SCES-54538 -Name = Eyetoy - Play Astro Zoo -Region = PAL-M15 +Serial = SLPS-25287 +Name = Victorious Boxers 2 - Ippo's Road to Glory +Region = NTSC-J --------------------------------------------- -Serial = SCES-54552 -Name = Rogue Galaxy -Region = PAL-M5 +Serial = SLPS-25288 +Name = D-A - Black [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-54571 -Name = Sing-Star Pop Hits -Region = PAL-G +Serial = SLPS-25289 +Name = Time Crisis 3 [with G-Con 2] +Region = NTSC-J --------------------------------------------- -Serial = SCES-54597 -Name = Buzz! The Mega Quiz -Region = PAL-M3 +Serial = SLPS-25290 +Name = Time Crisis 3 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54598 -Name = SingStar - Svenska Hits Schlager -Region = PAL-Unk +Serial = SLPS-25291 +Name = Baldur's Gate: Dark Alliance [PCCW The Best] +Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SCES-54599 -Name = SingStar - '90s -Region = PAL-E +Serial = SLPS-25292 +Name = D-A - Black +Region = NTSC-J --------------------------------------------- -Serial = SCES-54600 -Name = SingStar - Die Toten Hosen -Region = PAL-G +Serial = SLPS-25293 +Name = Naruto - Narutimett Hero +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54601 -Name = SingStar - Apres-Ski Party -Region = PAL-G +Serial = SLPS-25294 +Name = Uchuu no Stellvia +Region = NTSC-J --------------------------------------------- -Serial = SCES-54625 -Name = Buzz! Junior - Monster Rumble -Region = PAL-M7 +Serial = SLPS-25295 +Name = Kaena +Region = NTSC-J +Compat = 5 +EETimingHack = 1 //For black textures on chars. --------------------------------------------- -Serial = SCES-54638 -Name = Gaelic Games - Football 2 -Region = PAL-E +Serial = SLPS-25296 +Name = Super Robot Wars - Scramble Commander +Region = NTSC-J --------------------------------------------- -Serial = SCES-54676 -Name = Buzz! Junior - RoboJam -Region = PAL-M7 +Serial = SLPS-25298 +Name = Tentama 1st - Sunny Side +Region = NTSC-J --------------------------------------------- -Serial = SCES-54688 -Name = ATV Offroad Fury 4 -Region = PAL-M12 +Serial = SLPS-25299 +Name = Shinseiki Evangelions 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-54748 -Name = WipEout Pulse -Region = PAL-M5 +Serial = SLPS-25300 +Name = R - Racing Evolution +Region = NTSC-J --------------------------------------------- -Serial = SCES-54749 -Name = Buzz! Junior - Dino Den -Region = PAL-M8 +Serial = SLPS-25301 +Name = Missing Parts - The Tantei Stories - Side A +Region = NTSC-J --------------------------------------------- -Serial = SCES-54762 -Name = SingStar R&B -Region = PAL-G +Serial = SLPS-25302 +Name = Masked Rider - Geneology of Justice +Region = NTSC-J --------------------------------------------- -Serial = SCES-54794 -Name = Syphon Filter - Dark Mirror -Region = PAL-M5 +Serial = SLPS-25303 +Name = Zero - Crimson Butterfly +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-54823 -Name = SingStar Bollywood -Region = PAL-E +Serial = SLPS-25304 +Name = Beast Sapp +Region = NTSC-J --------------------------------------------- -Serial = SCES-54844 -Name = Buzz! The Hollywood Quiz -Region = PAL-E +Serial = SLPS-25305 +Name = Mobile Suit Z Gundam - AEUG vs. Titans +Region = NTSC-J --------------------------------------------- -Serial = SCES-54845 -Name = Buzz! The Hollywood Quiz -Region = PAL-G +Serial = SLPS-25307 +Name = New Century GPX Cyber Formula - Road to the Infinity +Region = NTSC-J --------------------------------------------- -Serial = SCES-54848 -Name = Buzz! Hollywood -Region = PAL-M2 +Serial = SLPS-25308 +Name = Crouching Tiger, Hidden Dragon +Region = NTSC-J --------------------------------------------- -Serial = SCES-54851 -Name = Buzz! The Hollywood Quiz -Region = PAL-M3 +Serial = SLPS-25309 +Name = WWE SmackDown! 4 - Shut your mouth [Yuke's The Best] +Region = NTSC-J --------------------------------------------- -Serial = SCES-55093 -Name = Buzz! The Pop Quiz -Region = PAL-E +Serial = SLPS-25310 +Name = Disney-Pixar's Finding Nemo +Region = NTSC-J --------------------------------------------- -Serial = SCES-55094 -Name = Buzz! The Pop Quiz -Region = PAL-M3 +Serial = SLPS-25311 +Name = Spy Fiction +Region = NTSC-J --------------------------------------------- -Serial = SCES-55179 -Name = SingStar Schlager -Region = PAL-G +Serial = SLPS-25312 +Name = Zero Pilot - The Miracle in Lonely Air +Region = NTSC-J --------------------------------------------- -Serial = SCES-55183 -Name = SingStar Turkish Party -Region = PAL-Unk +Serial = SLPS-25313 +Name = Seven Samurai 20XX +Region = NTSC-J --------------------------------------------- -Serial = SCES-55210 -Name = Buzz! Junior - Ace Racers -Region = PAL-M6 +Serial = SLPS-25314 +Name = Nebula - Echo Night +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-55213 -Name = Buzz! Escuela de Talentos -Region = PAL-S +Serial = SLPS-25315 +Name = One Piece - Grand Battle 3 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-55361 -Name = SingStar Boy Bands vs Girl Bands -Region = PAL-G +Serial = SLPS-25316 +Name = SNK vs. Capcom Chaos +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-55362 -Name = SingStar Hottest Hits -Region = PAL-G +Serial = SLPS-25317 +Name = Shadow Hearts 2 [Deluxe Pack] [Disc1of2] +Region = NTSC-J --------------------------------------------- -Serial = SCES-55385 -Name = Buzz! Brain of the UK -Region = PAL-E +Serial = SLPS-25318 +Name = Shadow Hearts 2 [Deluxe Pack] [Disc2of2] +Region = NTSC-J --------------------------------------------- -Serial = SCES-55387 -Name = Buzz! Deutschlands Superquiz -Region = PAL-G +Serial = SLPS-25319 +Name = Kero Kero King DX Plus +Region = NTSC-J --------------------------------------------- -Serial = SCES-55437 -Name = SingStar ABBA -Region = PAL-G +Serial = SLPS-25320 +Name = InuYasha - Juso no Kamen +Region = NTSC-J --------------------------------------------- -Serial = SCES-55454 -Name = SingStar Queen -Region = PAL-G +Serial = SLPS-25321 +Name = Derby Stallion 2004 +Region = NTSC-J --------------------------------------------- -Serial = SCES-55510 -Name = Jak and Dexter - The Lost Frontier -Region = PAL-M12 +Serial = SLPS-25323 +Name = Usagi - Yasei no Topai - Yamashiro Mahjong-Hen +Region = NTSC-J --------------------------------------------- -Serial = SCES-55538 -Name = SingStar -Region = PAL-G +Serial = SLPS-25324 +Name = Rhapsody of Zephyr +Region = NTSC-J --------------------------------------------- -Serial = SCES-55552 -Name = SingStar MoTown -Region = PAL-G +Serial = SLPS-25326 +Name = WWE Smackdown! Here Comes the Pain - Exciting Pro Wrestling 5 [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-55557 -Name = SingStar Take That -Region = PAL-G +Serial = SLPS-25329 +Name = Kuon +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SCES-55570 -Name = SingStar Chartbreaker -Region = PAL-G +Serial = SLPS-25330 +Name = DragonBall Z - Budokai 2 +Region = NTSC-J --------------------------------------------- -Serial = SCES-55573 -Name = MotorStorm - Arctic Edge -Region = PAL-M14 -OPHFLagHack = 1 +Serial = SLPS-25332 +Name = Snow [First Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SCES-55606 -Name = SingStar Die groten Solokunstler -Region = PAL-G +Serial = SLPS-25333 +Name = Gallop Racer Lucky 7 +Region = NTSC-J --------------------------------------------- -Serial = SCES-82034 -Name = Xenosaga II - Jenseits von Gut und Bose [Disc 1] -Region = PAL-Unk +Serial = SLPS-25334 +Name = Shadow Hearts 2 [Disc1of2] +Region = NTSC-J --------------------------------------------- -Serial = SCES-82035 -Name = Xenosaga II - Jenseits von Gut und Bose [Disc 2] -Region = PAL-Unk +Serial = SLPS-25335 +Name = Shadow Hearts 2 [Disc1of2] +Region = NTSC-J +MemCardFilter = SLPS-25334 --------------------------------------------- -Serial = SLED-50117 -Name = Metal Gear Solid 2 - Sons of Liberty [Demo] [Zone of the Enders Bonus Disc] -Region = PAL-E +Serial = SLPS-25336 +Name = Bass Landing 3 [with TsuriCon2+] [Sammy Best] +Region = NTSC-J --------------------------------------------- -Serial = SLED-50359 -Name = Devil May Cry [Demo] -Region = PAL-E +Serial = SLPS-25337 +Name = Bass Landing 3 [Sammy Best] +Region = NTSC-J --------------------------------------------- -Serial = SLED-50478 -Name = WWF Smackdown! - Just Bring It [Demo] -Region = PAL-Unk +Serial = SLPS-25338 +Name = Armored Core - Nexus [Disc 1] +Region = NTSC-J +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SLED-50488 -Name = Spy Hunter [Demo] -Region = PAL-Unk +Serial = SLPS-25339 +Name = Armored Core - Nexus [Disc 2] +Region = NTSC-J +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SLED-50884 -Name = TimeSplitters 2 [Demo] -Region = PAL-E +Serial = SLPS-25340 +Name = Missing Parts - Side B +Region = NTSC-J --------------------------------------------- -Serial = SLED-51211 -Name = Burnout 2 - Point of Impact [Demo] -Region = PAL-Unk +Serial = SLPS-25341 +Name = Backyard Wrestling - Don't Try This at Home +Region = NTSC-J --------------------------------------------- -Serial = SLED-51281 -Name = Haven - Call of the King [Demo] -Region = PAL-E +Serial = SLPS-25342 +Name = Snow +Region = NTSC-J --------------------------------------------- -Serial = SLED-51901 -Name = Soul Calibur II [Demo] -Region = PAL-E +Serial = SLPS-25343 +Name = Gunslinger Girl Vol.1 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLED-52375 -Name = Fight Night 2004 [Demo] -Region = PAL-E +Serial = SLPS-25344 +Name = Saiyuki Reload +Region = NTSC-J --------------------------------------------- -Serial = SLED-52441 -Name = Transformers [Demo] -Region = PAL-E +Serial = SLPS-25345 +Name = Super Robot Wars MX +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLED-52473 -Name = Transformers - Optimus Prime [Demo] -Region = PAL-E +Serial = SLPS-25346 +Name = Samurai Spirits Zero +Region = NTSC-J --------------------------------------------- -Serial = SLED-52474 -Name = Transformers - Red Alert [Demo] -Region = PAL-E +Serial = SLPS-25347 +Name = King of Fighters 2002, The +Region = NTSC-J --------------------------------------------- -Serial = SLED-52476 -Name = UEFA Euro 2004 - Portugal [Demo] -Region = PAL-M5 +Serial = SLPS-25348 +Name = Kokoro no Tobira [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLED-52488 -Name = The Suffering [Demo] -Region = PAL-E +Serial = SLPS-25349 +Name = Kokoro no Tobira +Region = NTSC-J --------------------------------------------- -Serial = SLED-52929 -Name = Prince of Persia - Warrior Within [Demo] -Region = PAL-M5 +Serial = SLPS-25350 +Name = Netsu Chu! Pro Baseball 2004 +Region = NTSC-J --------------------------------------------- -Serial = SLED-53083 -Name = Monster Hunter [Demo] -Region = PAL-M5 +Serial = SLPS-25351 +Name = Burnout 2 - Point of Impact +Region = NTSC-J --------------------------------------------- -Serial = SLED-53109 -Name = Juiced [Demo] -Region = PAL-M5 +Serial = SLPS-25352 +Name = Espgaluda +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLED-53673 -Name = 007 - From Russia with Love [Demo] -Region = PAL-E +Serial = SLPS-25353 +Name = Xenosaga Freaks +Region = NTSC-J --------------------------------------------- -Serial = SLED-53719 -Name = Pro Evolution Soccer 5 [Demo] -Region = PAL-E +Serial = SLPS-25354 +Name = Panzer Frony - Ausf. B +Region = NTSC-J --------------------------------------------- -Serial = SLED-53723 -Name = Peter Jackson's king Kong [Demo] -Region = PAL-E +Serial = SLPS-25355 +Name = UFC 2004 - Ultimate Fighting Championship +Region = NTSC-J --------------------------------------------- -Serial = SLED-53745 -Name = Total Overdose [Demo] -Region = PAL-M5 +Serial = SLPS-25356 +Name = Broken Sword - Nenereru Ryuu no Densetsu +Region = NTSC-J --------------------------------------------- -Serial = SLED-53845 -Name = Matrix - Path of Neo [Demo] -Region = PAL-E +Serial = SLPS-25357 +Name = 3-Nen B-Gumi Kinpachi Sensei - Densetsu no Kyoudan ni Tate! +Region = NTSC-J --------------------------------------------- -Serial = SLED-53937 -Name = Black [Demo] -Region = PAL-M5 +Serial = SLPS-25358 +Name = Gold Gasho Bell! - Friendship Tag Battle +Region = NTSC-J --------------------------------------------- -Serial = SLED-53951 -Name = Honda Demo [Demo] -Region = PAL-E +Serial = SLPS-25359 +Name = Shaman King Funbari Spirits +Region = NTSC-J --------------------------------------------- -Serial = SLED-53953 -Name = FIFA Street 2 [Demo] -Region = PAL-E +Serial = SLPS-25360 +Name = Katamari Damacy +Region = NTSC-J +Compat = 5 +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLED-54035 -Name = Play the Best Demos from Atari [Demo] -Region = PAL-M5 +Serial = SLPS-25361 +Name = Smash Court Professional Tournament 2 +Region = NTSC-J --------------------------------------------- -Serial = SLED-54312 -Name = Need for Speed - Carbon [Demo] -Region = PAL-Unk +Serial = SLPS-25362 +Name = Tetsujin 28 Go +Region = NTSC-J --------------------------------------------- -Serial = SLES-50003 -Name = Swap Magic DVD Disc v2.0 -Region = PAL-Unk +Serial = SLPS-25363 +Name = Sakura Zakashobotai +Region = NTSC-J --------------------------------------------- -Serial = SLES-50009 -Name = Action Replay MAX -Region = PAL-E -Compat = 5 +Serial = SLPS-25364 +Name = Ultraman +Region = NTSC-J --------------------------------------------- -Serial = SLES-50010 -Name = Ready 2 Rumble - Round 2 -Region = PAL-Unk +Serial = SLPS-25365 +Name = Missing Blue [Best Price] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50011 -Name = FIFA 2001 -Region = PAL-Unk +Serial = SLPS-25366 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Premium Box] [Disc1of2] +Region = NTSC-J +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-50012 -Name = FIFA 2001 -Region = PAL-Unk +Serial = SLPS-25367 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Premium Box] [Disc2of2] +Region = NTSC-J +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-50013 -Name = FIFA 2001 -Region = PAL-G +Serial = SLPS-25368 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc1of2] +Region = NTSC-J +// allows import of Xenosaga I, Xenosaga I Reloaded, and Xenosaga Freaks data +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-50014 -Name = FIFA 2001 -Region = PAL-Unk +Serial = SLPS-25369 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [Disc2of2] +Region = NTSC-J +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-50015 -Name = FIFA 2001 -Region = PAL-Unk +Serial = SLPS-25370 +Name = Spawn - Armageddon +Region = NTSC-J --------------------------------------------- -Serial = SLES-50016 -Name = FIFA 2001 -Region = PAL-Unk +Serial = SLPS-25371 +Name = DearS [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50017 -Name = F1 Championship Season 2000 -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25372 +Name = DearS +Region = NTSC-J --------------------------------------------- -Serial = SLES-50018 -Name = Kessen -Region = PAL-Unk +Serial = SLPS-25373 +Name = Gunslinger Girl Vol.2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50019 -Name = Kessen -Region = PAL-Unk +Serial = SLPS-25374 +Name = Great Escape, The +Region = NTSC-J --------------------------------------------- -Serial = SLES-50020 -Name = Kessen -Region = PAL-Unk +Serial = SLPS-25375 +Name = XIII +Region = NTSC-J --------------------------------------------- -Serial = SLES-50021 -Name = Madden NFL 2001 -Region = PAL-E +Serial = SLPS-25376 +Name = Metal Slug 4 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50022 -Name = NBA Live 2001 -Region = PAL-Unk +Serial = SLPS-25377 +Name = Nightmare of Druaga, The - Fushigi no Dungeon +Region = NTSC-J --------------------------------------------- -Serial = SLES-50023 -Name = NBA Live 2001 -Region = PAL-Unk +Serial = SLPS-25378 +Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50024 -Name = NBA Live 2001 -Region = PAL-Unk +Serial = SLPS-25379 +Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou +Region = NTSC-J --------------------------------------------- -Serial = SLES-50025 -Name = NBA 2001 -Region = PAL-Unk +Serial = SLPS-25381 +Name = Gakuen Heaven - Boy's Love Scramble! Type B +Region = NTSC-J --------------------------------------------- -Serial = SLES-50026 -Name = NBA 2001 -Region = PAL-Unk +Serial = SLPS-25382 +Name = One Piece - Land Land +Region = NTSC-J --------------------------------------------- -Serial = SLES-50027 -Name = NHL 2001 -Region = PAL-Unk +Serial = SLPS-25383 +Name = Digimon Battle Chronicle +Region = NTSC-J --------------------------------------------- -Serial = SLES-50028 -Name = NHL 2001 -Region = PAL-G +Serial = SLPS-25384 +Name = Tenchu Kurenai +Region = NTSC-J --------------------------------------------- -Serial = SLES-50030 -Name = SSX Snowboarding -Region = PAL-M3 +Serial = SLPS-25385 +Name = Friends Seishun no Kagayaki +Region = NTSC-J --------------------------------------------- -Serial = SLES-50031 -Name = X-Squad -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25386 +Name = King of Fighters, The - Maximum Impact Maniax +Region = NTSC-J --------------------------------------------- -Serial = SLES-50032 -Name = Theme Park World -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25387 +Name = True Love Story - Summer Days, and Yet... +Region = NTSC-J --------------------------------------------- -Serial = SLES-50033 -Name = Swing Away Golf -Region = PAL-Unk +Serial = SLPS-25388 +Name = Gunslinger Girl Vol.3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50035 -Name = Winter X-games Snowboarding -Region = PAL-M3 +Serial = SLPS-25389 +Name = Gundam Seed - Never Ending Tomorrow +Region = NTSC-J --------------------------------------------- -Serial = SLES-50036 -Name = ESPN International Track & Field -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25390 +Name = Clover's Heart - Looking for Happiness [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50037 -Name = Silent Scope -Region = PAL-Unk +Serial = SLPS-25391 +Name = Clover's Heart - Looking for Happiness +Region = NTSC-J --------------------------------------------- -Serial = SLES-50038 -Name = Gradius III & IV -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25392 +Name = Desire +Region = NTSC-J --------------------------------------------- -Serial = SLES-50039 -Name = International Superstar Soccer -Region = PAL-E-G +Serial = SLPS-25393 +Name = Rim Runners +Region = NTSC-J --------------------------------------------- -Serial = SLES-50042 -Name = Disney's Dinosaur -Region = PAL-Unk +Serial = SLPS-25394 +Name = Another Century's Episode +Region = NTSC-J --------------------------------------------- -Serial = SLES-50043 -Name = Disney's Dinosaur -Region = PAL-Unk +Serial = SLPS-25395 +Name = Sentimental Prelude +Region = NTSC-J --------------------------------------------- -Serial = SLES-50044 -Name = Rayman Revolution -Region = PAL-Unk +Serial = SLPS-25396 +Name = Fantastic Fortune 2 - Triple Star +Region = NTSC-J --------------------------------------------- -Serial = SLES-50045 -Name = Disney's Jungle Book - Groove Party -Region = PAL-Unk +Serial = SLPS-25397 +Name = Golden Voyage - Sinbad Adventure +Region = NTSC-J --------------------------------------------- -Serial = SLES-50046 -Name = F1 Racing Championship -Region = PAL-Unk -Compat = 4 -[patches = EDD7E0FF] - - comment=patches by Nachbrenner - - //Skip Videos - patch=0,EE,0024ddc0,word,24020001 - -[/patches] +Serial = SLPS-25398 +Name = Naruto - Narutimett Hero 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50047 -Name = F1 Racing Championship -Region = PAL-Unk +Serial = SLPS-25399 +Name = Keroro Gunsou - Mero Mero Battle Royale +Region = NTSC-J --------------------------------------------- -Serial = SLES-50048 -Name = Donald Duck - Quack Attack -Region = PAL-Unk +Serial = SLPS-25400 +Name = Tales of Symphonia +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50050 -Name = Evergrace -Region = PAL-M5 +Serial = SLPS-25401 +Name = Magna Carta +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25402 +Name = Hagane no Renkinjutsushi - Dream Carnival +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50051 -Name = Eternal Ring -Region = PAL-Unk +Serial = SLPS-25403 +Name = Hitman - Silent Assassin [Eidos The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50052 -Name = Pool Master -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25404 +Name = RPG Maker 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50053 -Name = Aqua Aqua - Wetrix 2 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25405 +Name = Tokyo Majin Gakuen - Kaihoujyou Kefurokou [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50054 -Name = Midnight Club -Region = PAL-Unk +Serial = SLPS-25406 +Name = Hitman - Contracts +Region = NTSC-J --------------------------------------------- -Serial = SLES-50055 -Name = Smuggler's Run -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25407 +Name = King of Fighters 2003, The +Region = NTSC-J --------------------------------------------- -Serial = SLES-50056 -Name = Surfing H3O -Region = PAL-Unk +Serial = SLPS-25408 +Name = Armored Core - Nine Breaker +Region = NTSC-J +MemCardFilter = SLPS-25408/SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SLES-50057 -Name = Dynasty Warriors 2 -Region = PAL-E +Serial = SLPS-25409 +Name = Futakoi [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50059 -Name = Dynasty Warriors 2 -Region = PAL-Unk +Serial = SLPS-25410 +Name = Futakoi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50060 -Name = International Superstar Soccer -Region = PAL-Unk +Serial = SLPS-25411 +Name = To Heart 2 [Deluxe Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50061 -Name = Smuggler's Run -Region = PAL-G -Compat = 5 +Serial = SLPS-25413 +Name = To Heart 2 [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50062 -Name = Orphen - Scion of Sorcery -Region = PAL-Unk +Serial = SLPS-25414 +Name = To Heart 2 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25415 +Name = Chu-Kana Janshi [Collector's Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50064 -Name = Stunt GP -Region = PAL-Unk +Serial = SLPS-25416 +Name = Chu Kana Janshi Tenho Pai-Nyan +Region = NTSC-J --------------------------------------------- -Serial = SLES-50068 -Name = Top Gear Daredevil -Region = PAL-E +Serial = SLPS-25417 +Name = Panzer Front Ausf.B [Enterbrain Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50069 -Name = Top Gear Daredevil -Region = PAL-Unk +Serial = SLPS-25418 +Name = Ace Combat 5 - The Unsung War +Region = NTSC-J --------------------------------------------- -Serial = SLES-50071 -Name = Midnight Club - Street Racing -Region = PAL-Unk -Compat = 3 +Serial = SLPS-25419 +Name = Mobile Suit Gundam - Gundam vs. Z-Gundam +Region = NTSC-J --------------------------------------------- -Serial = SLES-50072 -Name = Street Fighter EX3 -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25421 +Name = Bokujou Monogarari - Oh! Wonderful Life +Region = NTSC-J --------------------------------------------- -Serial = SLES-50073 -Name = Driving Emotion Type-S -Region = PAL-Unk +Serial = SLPS-25422 +Name = Death by Degrees - Tekken - Nina Williams +Region = NTSC-J --------------------------------------------- -Serial = SLES-50074 -Name = Unreal Tournament -Region = PAL-E -Compat = 5 +Serial = SLPS-25423 +Name = Kaitou Apricot - Complete Edition [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50075 -Name = ESPN NBA 2Night -Region = PAL-Unk +Serial = SLPS-25424 +Name = Kaitou Apricot - Complete Edition +Region = NTSC-J --------------------------------------------- -Serial = SLES-50076 -Name = Super Bust-A-Move -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25425 +Name = SD Gundam Force Daikessen! +Region = NTSC-J +eeClampMode = 2 //Needed for SPS on some characters --------------------------------------------- -Serial = SLES-50077 -Name = RC Revenge Pro -Region = PAL-M4 -Compat = 5 +Serial = SLPS-25426 +Name = Detective Conan - Inheritance of Britain +Region = NTSC-J --------------------------------------------- -Serial = SLES-50078 -Name = TimeSplitters -Region = PAL-Unk +Serial = SLPS-25427 +Name = Legions Gekitou! Saga Battle +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50079 -Name = Armored Core 2 -Region = PAL-Unk +Serial = SLPS-25428 +Name = Metal Slug 3 [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50080 -Name = NBA Hoopz -Region = PAL-Unk +Serial = SLPS-25429 +Name = King of Fighters 2000, The [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50106 -Name = Fur Fighters - Viggo's Revenge -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25430 +Name = Lupin III - Columbus no Isan wa Akenisomar +Region = NTSC-J --------------------------------------------- -Serial = SLES-50107 -Name = Legends of Wrestling -Region = PAL-Unk +Serial = SLPS-25432 +Name = Majommusume A La Mode [Magical Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50109 -Name = 7 Blades -Region = PAL-Unk +Serial = SLPS-25433 +Name = Teikoku Sensenki [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50110 -Name = Ephemeral Fantasia -Region = PAL-M3 -Compat = 5 +Serial = SLPS-25434 +Name = Rhapsody of Zephyr, The [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50111 -Name = Zone of the Enders -Region = PAL-M4 +Serial = SLPS-25435 +Name = Majommusume A La Mode +Region = NTSC-J --------------------------------------------- -Serial = SLES-50112 -Name = Shadow of Memories -Region = PAL-Unk +Serial = SLPS-25436 +Name = Teikoku Sensenki +Region = NTSC-J --------------------------------------------- -Serial = SLES-50113 -Name = Ring of Red -Region = PAL-M3 -Compat = 5 +Serial = SLPS-25437 +Name = D A - White +Region = NTSC-J --------------------------------------------- -Serial = SLES-50114 -Name = Kengo - Master of Bushido -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25438 +Name = D A - White [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50115 -Name = Tokyo Xtreme Racer -Region = PAL-E +Serial = SLPS-25439 +Name = Hajime no Ippo - All-Stars +Region = NTSC-J --------------------------------------------- -Serial = SLES-50118 -Name = Tiger Woods PGA Tour 2001 -Region = PAL-Unk +Serial = SLPS-25440 +Name = Gold Gashbell!! Gekitou! Saikyou no Mamonotachi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50120 -Name = Rumble Racing -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25441 +Name = Ultraman Fighting Evolution 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50126 -Name = Quake III - Revolution -Region = PAL-Unk +Serial = SLPS-25443 +Name = Kawa no Nushi Tsuri - Wonderful Journey +Region = NTSC-J --------------------------------------------- -Serial = SLES-50127 -Name = Quake III - Revolution -Region = PAL-Unk +Serial = SLPS-25444 +Name = Cherry Blossom +Region = NTSC-J --------------------------------------------- -Serial = SLES-50128 -Name = Knockout Kings 2001 -Region = PAL-Unk +Serial = SLPS-25445 +Name = Kagero II - Dark Illusion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50130 -Name = Knockout Kings 2001 -Region = PAL-Unk +Serial = SLPS-25447 +Name = Top wo Nerae! Gunbuster +Region = NTSC-J --------------------------------------------- -Serial = SLES-50131 -Name = Le Mans 24 Hours -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25448 +Name = King of Fighters '94, The - Rebout [Special Pack] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50132 -Name = MX Rider -Region = PAL-Unk +Serial = SLPS-25449 +Name = King of Fighters '94, The - Rebout +Region = NTSC-J --------------------------------------------- -Serial = SLES-50134 -Name = Oni -Region = PAL-E +Serial = SLPS-25450 +Name = Tales of Rebirth +Region = NTSC-J Compat = 5 -[patches = 22E85E68] - - comment=patches by Nachbrenner - - //skip "branch if copro 0 condition false" - patch=0,EE,001cef7c,word,00000000 // bc0f $001cef7c - -[/patches] ---------------------------------------------- -Serial = SLES-50136 -Name = Robot Warlords -Region = PAL-E ---------------------------------------------- -Serial = SLES-50137 -Name = Robot Warlords -Region = PAL-F --------------------------------------------- -Serial = SLES-50138 -Name = Robot Warlords -Region = PAL-G +Serial = SLPS-25451 +Name = Hana to Taiyou to Ame to [Super Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50155 -Name = Operation Winback -Region = PAL-M3 -Compat = 5 -vuClampMode = 3 //For full textures showing. +Serial = SLPS-25452 +Name = Kino no Tabi - The Beautiful World [MediaWorks Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50158 -Name = Gungriffon Blaze -Region = PAL-Unk +Serial = SLPS-25453 +Name = Digimon World X +Region = NTSC-J --------------------------------------------- -Serial = SLES-50159 -Name = Gungriffon Blaze -Region = PAL-Unk +Serial = SLPS-25454 +Name = Daisenryaku VII Exceed +Region = NTSC-J --------------------------------------------- -Serial = SLES-50160 -Name = Gungriffon Blaze -Region = PAL-Unk +Serial = SLPS-25455 +Name = Sanyo Pachinko Paradise 11 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50165 -Name = Star Wars - Starfighter -Region = PAL-Unk +Serial = SLPS-25456 +Name = Gladiator - Road to Freedom +Region = NTSC-J --------------------------------------------- -Serial = SLES-50166 -Name = Star Wars - Starfighter -Region = PAL-Unk +Serial = SLPS-25457 +Name = Poncotsu Roman Daikatsugeki Bumpy Trot +Region = NTSC-J --------------------------------------------- -Serial = SLES-50167 -Name = Star Wars - Starfighter -Region = PAL-Unk +Serial = SLPS-25458 +Name = King of Fighters 2001, The [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50168 -Name = Star Wars - Starfighter -Region = PAL-Unk +Serial = SLPS-25459 +Name = Sword of Destiny +Region = NTSC-J --------------------------------------------- -Serial = SLES-50169 -Name = Star Wars - Starfighter -Region = PAL-Unk +Serial = SLPS-25460 +Name = DragonBall Z 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50170 -Name = World Destruction League - Thunder Tanks -Region = PAL-Unk +Serial = SLPS-25461 +Name = Armored Core - Formula Front +Region = NTSC-J --------------------------------------------- -Serial = SLES-50171 -Name = ESPN National Hockey Night -Region = PAL-Unk +Serial = SLPS-25462 +Name = Armored Core - Last Raven +Region = NTSC-J --------------------------------------------- -Serial = SLES-50176 -Name = Oni -Region = PAL-Unk +Serial = SLPS-25463 +Name = My Home o Tsukurou 2! Takumi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50177 -Name = Oni -Region = PAL-G -Compat = 5 -[patches = 32629F36] - - comment=patches by Nachbrenner - - //skip "branch if copro 0 condition false" - patch=0,EE,001cef7c,word,00000000 // bc0f $001cef7c - -[/patches] +Serial = SLPS-25464 +Name = Daisenryaku VII Exceed +Region = NTSC-J --------------------------------------------- -Serial = SLES-50182 -Name = MTV Music Generator 2 -Region = PAL-M5 +Serial = SLPS-25465 +Name = Azumi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50183 -Name = Wacky Races -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25466 +Name = Eternal Aselia - The Spirit of Eternity Sword [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50185 -Name = Alone in the Dark 4 -Region = PAL-M5 +Serial = SLPS-25467 +Name = Minna Daisuki Katamari Damacy +Region = NTSC-J Compat = 5 +vuClampMode = 3 +mvuFlagSpeedHack = 0 +MemCardFilter = SCAJ-20135/SLPS-25467/SLPS-73241/SCAJ-20079/SLPS-25360/SLPS-73210/SLPS-73240 --------------------------------------------- -Serial = SLES-50186 -Name = Heroes of Might and Magic -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50187 -Name = Warriors of Might and Magic -Region = PAL-Unk +Serial = SLPS-25468 +Name = Eternal Aselia - The Spirit of Eternity Sword +Region = NTSC-J --------------------------------------------- -Serial = SLES-50191 -Name = Army Men - Green Rogue -Region = PAL-Unk +Serial = SLPS-25469 +Name = Baseball Live 2005 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50192 -Name = Army Men - Sarges Heroes 2 -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25470 +Name = Bouken-ou Beat - Dark Next Century +Region = NTSC-J --------------------------------------------- -Serial = SLES-50193 -Name = Silpheed - The Lost Planet -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25471 +Name = Gakkou o Tsukurou - Happy Days!! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50194 -Name = 4x4 Evolution -Region = PAL-Unk +Serial = SLPS-25472 +Name = XIII (Thirteen) [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50195 -Name = UEFA Challenge -Region = PAL-Unk +Serial = SLPS-25473 +Name = One Piece - Grand Battle! Combat Rush +Region = NTSC-J --------------------------------------------- -Serial = SLES-50196 -Name = Soul Reaver 2 - Legacy of Kain -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25474 +Name = Beck - The Game +Region = NTSC-J --------------------------------------------- -Serial = SLES-50201 -Name = Evil Twin - Cyprien's Chronicles -Region = PAL-Unk +Serial = SLPS-25476 +Name = Saint Seiya Seiiki Juunikyuu Hen +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50202 -Name = DNA - Dark Native Apostle -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25478 +Name = Mobile Suit Gundam - One Year War +Region = NTSC-J --------------------------------------------- -Serial = SLES-50203 -Name = Bloody Roar 3 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25479 +Name = Gold Gashbell - Friendship Tag Battle 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50204 -Name = Star Wars - Super Bombad Racing -Region = PAL-Unk +Serial = SLPS-25480 +Name = ZIPANG +Region = NTSC-J --------------------------------------------- -Serial = SLES-50206 -Name = Star Wars - Super Bombad Racing -Region = PAL-Unk +Serial = SLPS-25481 +Name = Gattsu!! Mori no Ishimatsu +Region = NTSC-J --------------------------------------------- -Serial = SLES-50209 -Name = Jeremy McGrath Supercross World -Region = PAL-Unk +Serial = SLPS-25482 +Name = Yuki Katari [Renewal Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50210 -Name = XG3 - Extreme-G Racing -Region = PAL-M4 -Compat = 4 +Serial = SLPS-25483 +Name = Sui-Toshi-Zun +Region = NTSC-J --------------------------------------------- -Serial = SLES-50211 -Name = Gauntlet - Dark Legacy -Region = PAL-Unk // Multiple languages -Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] +Serial = SLPS-25484 +Name = SNK vs. Capcom Chaos [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50212 -Name = Paris-Dakar Rally -Region = PAL-Unk -Compat = 5 -SkipMPEGPatch = 1 +Serial = SLPS-25485 +Name = Mobile Suit Gundam Ver.1.5 [Gundam the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50213 -Name = NFL Quarterback Club 2002 -Region = PAL-Unk +Serial = SLPS-25486 +Name = Mobile Suit Gundam - Lost War Chronicles [Gundam the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50214 -Name = 18 Wheeler -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25487 +Name = Mobile Suit Gundam - Megurial Sora [Gundam the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50215 -Name = Crazy Taxi -Region = PAL-M4 -Compat = 5 -[patches = C9C145BF] - - comment=patches by Nachbrenner - - //skip movie "PlaySega" - patch=0,EE,001a42d0,word,03e00008 - patch=0,EE,001a42d4,word,00000000 - //skip movie "PlayAcclaim" - patch=0,EE,001a4468,word,03e00008 - patch=0,EE,001a446c,word,00000000 - -[/patches] +Serial = SLPS-25488 +Name = Zeonic Front - Mobile Suit Gundam 0079 [Gundam the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50217 -Name = Dave Mirra Freestyle BMX 2 -Region = PAL-Unk +Serial = SLPS-25489 +Name = Ambition of Giren - Zeon Independence War + Direction Book of Capture [Gundam the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50218 -Name = All-Star Baseball 2002 -Region = PAL-Unk +Serial = SLPS-25491 +Name = SD Gundam G Generation Neo [Gundam The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50219 -Name = NBA Street -Region = PAL-Unk +Serial = SLPS-25492 +Name = SD Gundam G Generation - Gundam Seed [Gundam The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50220 -Name = EA Sports Rugby -Region = PAL-E +Serial = SLPS-25493 +Name = Backyard Wrestling 2 - There Goes the Neighborhood +Region = NTSC-J --------------------------------------------- -Serial = SLES-50221 -Name = Conflict Zone -Region = PAL-M3 +Serial = SLPS-25494 +Name = Fragrence Tale +Region = NTSC-J --------------------------------------------- -Serial = SLES-50224 -Name = Kuri Kuri Mix -Region = PAL-Unk +Serial = SLPS-25495 +Name = Metal Slug 5 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50225 -Name = Escape from Monkey Island -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50226 -Name = Escape from Monkey Island 4 -Region = PAL-Unk +Serial = SLPS-25496 +Name = Berwick Saga - Tear Ring Saga Series [Deluxe Pack] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50227 -Name = Escape from Monkey Island (Flucht von Monkey Island) -Region = PAL-G -Compat = 5 +Serial = SLPS-25497 +Name = Berwick Saga - Tear Ring Saga Series +Region = NTSC-J --------------------------------------------- -Serial = SLES-50228 -Name = Escape from Monkey Island 4 -Region = PAL-Unk +Serial = SLPS-25498 +Name = Jikuu Bouken Zentrix +Region = NTSC-J --------------------------------------------- -Serial = SLES-50229 -Name = Monkey Island 4 -Region = PAL-Unk +Serial = SLPS-25499 +Name = Yu Yu Hakusho Forever +Region = NTSC-J --------------------------------------------- -Serial = SLES-50230 -Name = Lotus Challenge -Region = PAL-M5 -Compat = 5 -XgKickHack = 1 //SPS. +Serial = SLPS-25500 +Name = Namco 50th Anniversary Collection +Region = NTSC-J --------------------------------------------- -Serial = SLES-50231 -Name = International League Soccer -Region = PAL-Unk +Serial = SLPS-25501 +Name = Onmyou Taisenki - Hasha no In +Region = NTSC-J --------------------------------------------- -Serial = SLES-50232 -Name = Off-Road Wide Open -Region = PAL-Unk +Serial = SLPS-25502 +Name = Steamboy +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50233 -Name = Army Men - Air Attack - Blade's Revenge -Region = PAL-Unk +Serial = SLPS-25503 +Name = NeoGeo Online Collection Vol.2 - Bakumatsu Roman - Gekka no Kenshi 1&2 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50243 -Name = David Beckham Soccer -Region = PAL-Unk +Serial = SLPS-25504 +Name = Garou - Mark of the Wolves [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50247 -Name = Onimusha - Warlords -Region = PAL-Unk +Serial = SLPS-25505 +Name = Namco X Capcom +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50248 -Name = MDK 2 - Armageddon -Region = PAL-Unk +Serial = SLPS-25506 +Name = For Symphony - With All One's Heart +Region = NTSC-J --------------------------------------------- -Serial = SLES-50252 -Name = Penny Racers -Region = PAL-Unk +Serial = SLPS-25507 +Name = Mai-Hime [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50253 -Name = Modern Groove - Ministry of Sound Edition -Region = PAL-E +Serial = SLPS-25508 +Name = Mai-Hime - The Another +Region = NTSC-J --------------------------------------------- -Serial = SLES-50259 -Name = Flintstones - Viva Rock Vegas -Region = PAL-Unk +Serial = SLPS-25509 +Name = Garou - Mark of the Wolves +Region = NTSC-J --------------------------------------------- -Serial = SLES-50260 -Name = Hidden Invasion -Region = PAL-Unk +Serial = SLPS-25510 +Name = Tekken 5 +Region = NTSC-J +Compat = 5 +eeClampMode = 1 --------------------------------------------- -Serial = SLES-50261 -Name = Sky Surfer -Region = PAL-Unk +Serial = SLPS-25511 +Name = Rasetsu Alternative +Region = NTSC-J --------------------------------------------- -Serial = SLES-50262 -Name = World Destruction League - War Jets -Region = PAL-Unk +Serial = SLPS-25513 +Name = Aoi Umi no Trista [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50263 -Name = Portal Runner -Region = PAL-Unk +Serial = SLPS-25514 +Name = Aoi Umi no Trista +Region = NTSC-J --------------------------------------------- -Serial = SLES-50266 -Name = Playmobil - Hype - The Time Quest -Region = PAL-Unk +Serial = SLPS-25515 +Name = Futakoi Alternative [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50267 -Name = CART Fury Championship Racing -Region = PAL-Unk +Serial = SLPS-25516 +Name = Futakoi Alternative +Region = NTSC-J --------------------------------------------- -Serial = SLES-50268 -Name = SpyHunter -Region = PAL-Unk +Serial = SLPS-25517 +Name = Enjoy Golf! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50273 -Name = Legion - The Legend of Excalibur -Region = PAL-Unk +Serial = SLPS-25518 +Name = InuYasha - Ougi Ranbu +Region = NTSC-J --------------------------------------------- -Serial = SLES-50274 -Name = Arctic Thunder -Region = PAL-Unk +Serial = SLPS-25519 +Name = Sousei no Aquarion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50275 -Name = EA Sports Rugby -Region = PAL-Unk +Serial = SLPS-25520 +Name = Gundam True Odyssey +Region = NTSC-J --------------------------------------------- -Serial = SLES-50276 -Name = Gift, The -Region = PAL-Unk +Serial = SLPS-25521 +Name = Soccer Life 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50277 -Name = Red Faction -Region = PAL-E +Serial = SLPS-25522 +Name = Yoshitsuneki [Goukakenran Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50278 -Name = Red Faction -Region = PAL-F +Serial = SLPS-25523 +Name = Yoshitsuneki +Region = NTSC-J --------------------------------------------- -Serial = SLES-50279 -Name = Red Faction -Region = PAL-G +Serial = SLPS-25525 +Name = King of Fighters, The - NeoWave +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50280 -Name = Victorious Boxers -Region = PAL-E +Serial = SLPS-25526 +Name = Medical 91 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50282 -Name = Age of Empires II: The Age of Kings -Region = PAL-M5 +Serial = SLPS-25527 +Name = dot Hack - Fragment +Region = NTSC-J Compat = 5 +EETimingHack = 1 +OPHFlagHack = 1 +DMABusyHack = 1 +SkipMPEGHack = 1 --------------------------------------------- -Serial = SLES-50283 -Name = WTA Tour Tennis -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50284 -Name = Silent Scope 2 -Region = PAL-Unk +Serial = SLPS-25528 +Name = Summon Night EX Thesis - Yoake no Tsubasa +Region = NTSC-J --------------------------------------------- -Serial = SLES-50285 -Name = Police 24-7 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25529 +Name = Ultraman Fighting Evolution - Rebirth +Region = NTSC-J --------------------------------------------- -Serial = SLES-50288 -Name = Stuntman -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25530 +Name = Garouden Break Blow +Region = NTSC-J --------------------------------------------- -Serial = SLES-50296 -Name = Gift -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25531 +Name = SD Gundam G Generation - Gundam Seed Edition +Region = NTSC-J --------------------------------------------- -Serial = SLES-50297 -Name = Gift -Region = PAL-G +Serial = SLPS-25532 +Name = Critical Velocity +Region = NTSC-J --------------------------------------------- -Serial = SLES-50306 -Name = Resident Evil - CODE Veronica X -Region = PAL-M4 +Serial = SLPS-25533 +Name = Tales of Legendia +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50310 -Name = Freak Out -Region = PAL-Unk -Compat = 4 ---------------------------------------------- -Serial = SLES-50314 -Name = Giants - Citizen Kabuto -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50325 -Name = Max Payne -Region = PAL-E -Compat = 4 +Serial = SLPS-25534 +Name = Twinkle Star Sprites - La Petite Princesse +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50326 -Name = Max Payne -Region = PAL-Unk +Serial = SLPS-25535 +Name = NeoGeo Online Collection Vol.3 - The King of Fighters - Orochi Collection [Special Pack] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50330 -Name = Grand Theft Auto III -Region = PAL-E +Serial = SLPS-25537 +Name = Super Robot Wars - Alpha 3 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50335 -Name = Rune - Viking Warlord -Region = PAL-Unk +Serial = SLPS-25538 +Name = Super Robot Wars - Alpha [Premium Pack] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50336 -Name = Rune - Viking Warlord -Region = PAL-Unk +Serial = SLPS-25539 +Name = School Rumble [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50337 -Name = Rune - Viking Warlord -Region = PAL-Unk +Serial = SLPS-25540 +Name = School Rumble +Region = NTSC-J --------------------------------------------- -Serial = SLES-50338 -Name = Rune - Viking Warlord -Region = PAL-Unk +Serial = SLPS-25541 +Name = New Century GPX Cyber Formula - Road to the Infinity 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50339 -Name = Rune - Viking Warlord -Region = PAL-Unk +Serial = SLPS-25542 +Name = Naruto Uzumaki Ninden +Region = NTSC-J +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-50341 -Name = Smuggler's Run 2 - Hostile Territory -Region = PAL-M4 +Serial = SLPS-25543 +Name = Futakoi - Koi to Mizugi no Survival +Region = NTSC-J --------------------------------------------- -Serial = SLES-50350 -Name = Disney's Tarzan - Freeride -Region = PAL-Unk +Serial = SLPS-25544 +Name = Fatal Frame - Zero +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50351 -Name = Lake Masters EX -Region = PAL-M3 +Serial = SLPS-25545 +Name = Fighting for One Piece +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50355 -Name = Batman Vengeance -Region = PAL-Unk +Serial = SLPS-25546 +Name = Ichigo Mashimaro [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50356 -Name = ESPN International Winter Sports -Region = PAL-Unk +Serial = SLPS-25547 +Name = Ichigo Mashimaro +Region = NTSC-J --------------------------------------------- -Serial = SLES-50358 -Name = Devil May Cry -Region = PAL-E -Compat = 5 +Serial = SLPS-25548 +Name = Pachitte Ultra Seven Chonmage Tatsujin 8 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50362 -Name = Jonny Moseley Mad Trix -Region = PAL-Unk +Serial = SLPS-25549 +Name = Gundam Seed Destiny - Generation of C.E. +Region = NTSC-J --------------------------------------------- -Serial = SLES-50364 -Name = City Crisis -Region = PAL-Unk +Serial = SLPS-25550 +Name = Cowboy Bebop - Tsuitou no Yakyoku [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50366 -Name = Star Wars - Racer Revenge -Region = PAL-Unk +Serial = SLPS-25551 +Name = Cowboy Bebop - Tsuitou no Yakyoku +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50371 -Name = Star Wars - Jedi Starfighter -Region = PAL-Unk +Serial = SLPS-25552 +Name = Inuyasha - Juuso no Kamen [Bandai the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50372 -Name = Star Wars - Jedi Starfighter -Region = PAL-Unk +Serial = SLPS-25553 +Name = Yoshitsune Eiyuuden Shura +Region = NTSC-J --------------------------------------------- -Serial = SLES-50373 -Name = Star Wars - Jedi Starfighter -Region = PAL-Unk +Serial = SLPS-25554 +Name = Eureka Seven TR1 - New Wave +Region = NTSC-J --------------------------------------------- -Serial = SLES-50374 -Name = Star Wars - Jedi Starfighter -Region = PAL-Unk +Serial = SLPS-25556 +Name = Hissatsu Pachinko Station V11 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50375 -Name = Star Wars - Jedi Starfighter -Region = PAL-Unk +Serial = SLPS-25557 +Name = Urban Reign +Region = NTSC-J --------------------------------------------- -Serial = SLES-50382 -Name = Silent Hill 2 -Region = PAL-M6 +Serial = SLPS-25558 +Name = NeoGeo Battle Coliseum +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50383 -Name = Metal Gear Solid 2 - Sons of Liberty -Region = PAL-M3 +Serial = SLPS-25559 +Name = Samurai Spirits - Tenkaichi Kenkakuden +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50384 -Name = Project Zero II -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50385 -Name = Metal Gear Solid 2 - Sons of Liberty -Region = PAL-Unk +Serial = SLPS-25560 +Name = DragonBall Z - Sparking! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50386 -Name = Crash Bandicoot - Wrath of Cortex -Region = PAL-M6 -Compat = 5 +Serial = SLPS-25561 +Name = MotoGP 4 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50390 -Name = Driven -Region = PAL-Unk +Serial = SLPS-25564 +Name = Gallop Racer 8 - Live Horse Racing +Region = NTSC-J --------------------------------------------- -Serial = SLES-50395 -Name = World Championship Snooker 2002 -Region = PAL-Unk +Serial = SLPS-25565 +Name = Hisshou Pachinko Kouryoku Series Vol.1 - CR Shinseiki Evangelion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50396 -Name = Mike Tyson Heavyweight Boxing -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25566 +Name = Simple 2000 Series Ultimate Vol.27 - After Class Love Beat +Region = NTSC-J --------------------------------------------- -Serial = SLES-50397 -Name = Prisoner of War -Region = PAL-Unk +Serial = SLPS-25567 +Name = Pachitte Chonmage Tatsujin 9 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50398 -Name = UEFA Champions League -Region = PAL-Unk +Serial = SLPS-25568 +Name = Keroro Gunsou - Mero Mero Battle Royale [Bandai The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50400 -Name = Shaun Palmer's Pro Snowboarder -Region = PAL-E +Serial = SLPS-25569 +Name = Kidou Senshi Gundam SEED - Rengou vs. Z.A.F.T. +Region = NTSC-J +eeRoundMode = 1 +FpuNegDivHack = 1 --------------------------------------------- -Serial = SLES-50401 -Name = Shaun Palmer's Pro Snowboarder -Region = PAL-Unk +Serial = SLPS-25570 +Name = Kino no Tabi 2 - The Beautiful World +Region = NTSC-J --------------------------------------------- -Serial = SLES-50402 -Name = Shaun Palmer's Pro Snowboarder -Region = PAL-Unk +Serial = SLPS-25571 +Name = Metal Slug 4 [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50412 -Name = Pro Evolution Soccer -Region = PAL-M3 +Serial = SLPS-25572 +Name = Samurai Spirits Zero [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50421 -Name = Supercar Street Challenge -Region = PAL-Unk +Serial = SLPS-25573 +Name = King of Fighters 2002, The [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50422 -Name = Madden NFL 2002 -Region = PAL-Unk +Serial = SLPS-25574 +Name = Sanyo Pachinko Paradise 12 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50423 -Name = F1 2001 -Region = PAL-M4 +Serial = SLPS-25575 +Name = Keroro Gunsou - Mero Mero Battle Royale Z +Region = NTSC-J Compat = 5 -[patches = 063ff7db] - - comment=Patch by Shadow Lady. - - //IPU dma fix - patch=0,EE,003b8680,word,00000000 - -[/patches] ---------------------------------------------- -Serial = SLES-50424 -Name = Cricket 2002 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50425 -Name = NHL 2002 -Region = PAL-Unk --------------------------------------------- -Serial = SLES-50426 -Name = NHL 2002 -Region = PAL-Unk +Serial = SLPS-25576 +Name = One Piece - Pirates Carnival +Region = NTSC-J --------------------------------------------- -Serial = SLES-50427 -Name = NHL 2002 -Region = PAL-Unk +Serial = SLPS-25577 +Name = Soul Calibur III +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50428 -Name = MX 2002 featuring Ricky Carmichael -Region = PAL-Unk +Serial = SLPS-25578 +Name = K-1 World Grand Prix 2005 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50429 -Name = Alex Ferguson Player Manager 2002 -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25579 +Name = Little Aid +Region = NTSC-J --------------------------------------------- -Serial = SLES-50430 -Name = ESPN X-Games Skateboarding -Region = PAL-Unk +Serial = SLPS-25580 +Name = Chicken Little +Region = NTSC-J --------------------------------------------- -Serial = SLES-50431 -Name = F1 2001 -Region = PAL-Unk +Serial = SLPS-25581 +Name = Simple 2000 Series Vol.92 - The Game of a Curse +Region = NTSC-J --------------------------------------------- -Serial = SLES-50432 -Name = Tony Hawk Pro Skater 3 -Region = PAL-Unk +Serial = SLPS-25582 +Name = Asutoro Kyudan Kessen +Region = NTSC-J --------------------------------------------- -Serial = SLES-50433 -Name = GoDai - Elemental Force -Region = PAL-Unk +Serial = SLPS-25584 +Name = From TV Animation - One Piece - Pirates Carnival [with Multitap for new models] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50434 -Name = Army Men - Real Time Strategy -Region = PAL-Unk +Serial = SLPS-25585 +Name = Monster Farm 5 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50435 -Name = Tony Hawk's Pro Skater 3 -Region = PAL-E +Serial = SLPS-25586 +Name = Tales of the Abyss +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50436 -Name = Tony Hawk Pro Skater 3 -Region = PAL-Unk +Serial = SLPS-25587 +Name = Sugar Sugar Rune - Koimo Osharemo Pick-Up +Region = NTSC-J --------------------------------------------- -Serial = SLES-50437 -Name = Tony Hawk's Pro Skater 3 -Region = PAL-Unk +Serial = SLPS-25588 +Name = Meitantei Conan - Daiei Teikoku no Isan [Bandai The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50438 -Name = Motor Mayhem -Region = PAL-Unk +Serial = SLPS-25589 +Name = Naruto Narutimett Hero 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50443 -Name = LEGO Racers 2 -Region = PAL-Unk +Serial = SLPS-25590 +Name = Namco Museum Arcade Hits +Region = NTSC-J --------------------------------------------- -Serial = SLES-50444 -Name = Portal Runner -Region = PAL-Unk +Serial = SLPS-25591 +Name = Last Escort - Shinya no Kokuchou Monogatari +Region = NTSC-J --------------------------------------------- -Serial = SLES-50445 -Name = Burnout -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25592 +Name = Sunrise Eiyuutan 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50446 -Name = Shadow Man - 2econd Coming -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25593 +Name = Hoshigari Empusa +Region = NTSC-J --------------------------------------------- -Serial = SLES-50447 -Name = All-Star Baseball 2003 -Region = PAL-Unk +Serial = SLPS-25596 +Name = Konjiki no Gashbell! - Go!Go! Mamodo Fight +Region = NTSC-J --------------------------------------------- -Serial = SLES-50451 -Name = NHL Hitz 2002 -Region = PAL-Unk +Serial = SLPS-25597 +Name = Kawa no Nushi Tsuri - Wonderful Journey [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50457 -Name = Rayman M -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25598 +Name = Gakkou o Tsukurou - Happy Days!! [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50460 -Name = Official PlayStation 2 Magazine Demo 11 -Region = PAL-Unk +Serial = SLPS-25599 +Name = Shakugan no Shana +Region = NTSC-J --------------------------------------------- -Serial = SLES-50462 -Name = Pro Evolution Soccer -Region = PAL-Unk +Serial = SLPS-25600 +Name = Samurai Champloo - Sidetracked +Region = NTSC-J --------------------------------------------- -Serial = SLES-50464 -Name = FIFA 2002 -Region = PAL-M5 +Serial = SLPS-25601 +Name = Ueki no Housoku - Taosu Zeroberuto Juudan!! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50465 -Name = FIFA 2002 -Region = PAL-Unk +Serial = SLPS-25602 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.2 - Bomber Powerful & Yume Yume World DX +Region = NTSC-J --------------------------------------------- -Serial = SLES-50466 -Name = FIFA 2002 -Region = PAL-Unk +Serial = SLPS-25603 +Name = Tensei - Swords of Destiny [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50467 -Name = FIFA 2002 -Region = PAL-G +Serial = SLPS-25604 +Name = Ar tonelico: Sekai no Owari de Utai Tsudukeru Shoujo +Region = NTSC-J --------------------------------------------- -Serial = SLES-50469 -Name = FIFA 2002 -Region = PAL-Unk +Serial = SLPS-25605 +Name = NeoGeo Online Collection Vol.3 - The King of Fighters - Orochi Collection +Region = NTSC-J --------------------------------------------- -Serial = SLES-50470 -Name = FIFA 2002 -Region = PAL-Unk +Serial = SLPS-25606 +Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioutachi +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50471 -Name = FIFA 2002 -Region = PAL-Unk +Serial = SLPS-25607 +Name = Makai Senki Disgaea 2 [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50472 -Name = GTC Africa -Region = PAL-M5 +Serial = SLPS-25608 +Name = Makai Senki Disgaea 2 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50477 -Name = WWF Smackdown! - Just Bring It -Region = PAL-E +Serial = SLPS-25609 +Name = King of Fighters, The - Maximum Impact 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50479 -Name = Turok Evolution -Region = PAL-M4 -Compat = 5 +Serial = SLPS-25610 +Name = Ryuuko no Ken - Ten-Chi-Jin (Art of Fighting Collection) +Region = NTSC-J --------------------------------------------- -Serial = SLES-50480 -Name = Aggressive Inline Skating -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25611 +Name = Strawberry Panic [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50481 -Name = Vexx -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25612 +Name = Strawberry Panic +Region = NTSC-J --------------------------------------------- -Serial = SLES-50484 -Name = Rayman M -Region = PAL-Unk +Serial = SLPS-25613 +Name = My Home o Tsukurou 2! Takumi [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50486 -Name = Splashdown -Region = PAL-Unk +Serial = SLPS-25614 +Name = Mai-Hime - Unmei no Keitouju [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50487 -Name = Space Race -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25615 +Name = My Home wo Tsukurou 2! Kantan Sekkei!! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50495 -Name = Who Wants to be a Millionaire - 2nd Edition -Region = PAL-Unk +Serial = SLPS-25616 +Name = Ski Jumping Pairs Reloaded +Region = NTSC-J --------------------------------------------- -Serial = SLES-50496 -Name = Qui Veut Gagner des Millions -Region = PAL-Unk +Serial = SLPS-25617 +Name = Etude Prologue - Yureugoku Kokoro no Katachi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50497 -Name = Who Wants to be a Millionaire 2 (Wer wird Millionar 2) -Region = PAL-G +Serial = SLPS-25618 +Name = D-A - Black [Best Price] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50498 -Name = Grandia II -Region = PAL-E +Serial = SLPS-25619 +Name = D-A - White [Best Price] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50503 -Name = Weakest Link -Region = PAL-Unk +Serial = SLPS-25620 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.3 - CR Marilyn Monroe +Region = NTSC-J --------------------------------------------- -Serial = SLES-50504 -Name = Half-Life -Region = PAL-E -Compat = 5 +Serial = SLPS-25621 +Name = Kashimashi! Girl Meets Girl [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50505 -Name = Half-Life -Region = PAL-G -Compat = 5 +Serial = SLPS-25622 +Name = Kashimashi! Girl Meets Girl +Region = NTSC-J --------------------------------------------- -Serial = SLES-50506 -Name = Half-Life -Region = PAL-Unk +Serial = SLPS-25623 +Name = Another Century's Episode 2 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50507 -Name = Half-Life -Region = PAL-Unk +Serial = SLPS-25624 +Name = Futakoi-Futakoi Island Collection +Region = NTSC-J --------------------------------------------- -Serial = SLES-50508 -Name = Half-Life -Region = PAL-Unk +Serial = SLPS-25626 +Name = Chronicles of Narnia, The - The Lion, The Witch and The Wardrobe +Region = NTSC-J --------------------------------------------- -Serial = SLES-50509 -Name = Half-Life -Region = PAL-Unk +Serial = SLPS-25627 +Name = Mobile Suit Gundam Climax U.C. +Region = NTSC-J --------------------------------------------- -Serial = SLES-50510 -Name = Mummy Returns, The -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 +Serial = SLPS-25628 +Name = IGPX +Region = NTSC-J --------------------------------------------- -Serial = SLES-50511 -Name = G-Surfers -Region = PAL-E +Serial = SLPS-25629 +Name = Ace Combat Zero - The Belkan War +Region = NTSC-J +MemCardFilter = SCAJ-20173/SLPS-25629/SLPS-73250/SLPS-25052/SLPS-73205/SLPS-73410/SCAJ-20104/SCAJ-20136/SLPS-25418/SLPS-73218 --------------------------------------------- -Serial = SLES-50512 -Name = Bass Strike -Region = PAL-Unk +Serial = SLPS-25630 +Name = Pro Yakyuu Netsu Star 2006 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50533 -Name = Sunny Garcia Surfing -Region = PAL-E +Serial = SLPS-25631 +Name = Simple 2000 Series Vol.98 - Roman Sabou +Region = NTSC-J --------------------------------------------- -Serial = SLES-50534 -Name = NBA Live 2002 -Region = PAL-Unk +Serial = SLPS-25632 +Name = Simple 2000 Series Vol.97 - The Koi no Engine +Region = NTSC-J --------------------------------------------- -Serial = SLES-50535 -Name = NBA Live 2002 -Region = PAL-Unk +Serial = SLPS-25633 +Name = Futakoi Alternative - Koi to Shoujo to Machinegun [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50536 -Name = NBA Live 2002 -Region = PAL-Unk +Serial = SLPS-25634 +Name = Metal Slug 5 [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50537 -Name = NBA Live 2002 -Region = PAL-Unk +Serial = SLPS-25635 +Name = King of Fighters 2003, The [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50538 -Name = NBA Live 2002 -Region = PAL-Unk +Serial = SLPS-25636 +Name = King of Fighters, The - Maximum Impact +Region = NTSC-J --------------------------------------------- -Serial = SLES-50539 -Name = James Bond 007 - Agent Under Fire -Region = PAL-Unk +Serial = SLPS-25638 +Name = King of Fighters, The - Maximum Impact 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50540 -Name = Simpsons Road Rage -Region = PAL-Unk +Serial = SLPS-25639 +Name = Plus Plum 2 Again +Region = NTSC-J --------------------------------------------- -Serial = SLES-50541 -Name = Capcom vs. SNK 2 - Mark of the Millennium -Region = PAL-Unk +Serial = SLPS-25640 +Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc1of2] +Region = NTSC-J +Compat = 5 +// allows import of Xenosaga II save data +MemCardFilter = SLPS-25640/SLPS-25368 --------------------------------------------- -Serial = SLES-50544 -Name = Jet Ion GP -Region = PAL-E +Serial = SLPS-25641 +Name = Xenosaga Episode III - Also Sprach Zarathustra [Disc2of2] +Region = NTSC-J Compat = 5 +MemCardFilter = SLPS-25640/SLPS-25368 --------------------------------------------- -Serial = SLES-50545 -Name = SSX Tricky -Region = PAL-Unk +Serial = SLPS-25642 +Name = Super DragonBall Z +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50546 -Name = LMA Manager 2002 -Region = PAL-E +Serial = SLPS-25643 +Name = Kimikisu +Region = NTSC-J --------------------------------------------- -Serial = SLES-50547 -Name = Roger Lemerre - La Selection des Champions 2002 -Region = PAL-Unk +Serial = SLPS-25644 +Name = Simple 2000 Ultimate Series Vol.31 - K-1 World Max 2005 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50548 -Name = BDFL Manager 2002 -Region = PAL-Unk +Serial = SLPS-25645 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.4 - CR Ashita Gaarusa Yoshimoto World +Region = NTSC-J --------------------------------------------- -Serial = SLES-50549 -Name = Football Manager Campionato 2002 -Region = PAL-Unk +Serial = SLPS-25646 +Name = Eureka Seven - New Vision +Region = NTSC-J --------------------------------------------- -Serial = SLES-50550 -Name = Manager de Liga 2002 -Region = PAL-Unk +Serial = SLPS-25647 +Name = Simple 2000 Series Ultimate Vol.32 - Azumi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50551 -Name = Tetris Worlds -Region = PAL-Unk +Serial = SLPS-25648 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.5 - CR Shinseiki Evangelion Second Impact & Pachisuro Shinseiki Evangelion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50552 -Name = Jet Ski Riders -Region = PAL-Unk +Serial = SLPS-25649 +Name = Space Sheriff Spirits +Region = NTSC-J --------------------------------------------- -Serial = SLES-50553 -Name = Project Eden -Region = PAL-M5 +Serial = SLPS-25650 +Name = Metal Slug 3D +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50554 -Name = Thunderhawk - Operation Pheonix -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50556 -Name = New York Race -Region = PAL-Unk +Serial = SLPS-25651 +Name = dot Hack G.U. Vol.1 - Saitan +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233/SLPS-25651/SLPS-25655/SLPS-25656/SLPS-25756 --------------------------------------------- -Serial = SLES-50558 -Name = DSF Futball Manager 2002 -Region = PAL-G +Serial = SLPS-25653 +Name = Cluster Edge [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50559 -Name = Guy Roux Manager 2002 -Region = PAL-Unk +Serial = SLPS-25654 +Name = Cluster Edge +Region = NTSC-J --------------------------------------------- -Serial = SLES-50562 -Name = Super Bust-A-Move 2 -Region = PAL-Unk +Serial = SLPS-25655 +Name = dot Hack G.U. Vol.2 - Kimi Omou Koe +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233/SLPS-25651/SLPS-25655/SLPS-25656/SLPS-25756 --------------------------------------------- -Serial = SLES-50568 -Name = Top Gun - Combat Zones -Region = PAL-Unk +Serial = SLPS-25656 +Name = dot Hack - G.U. Vol.3 - Aruku Youna Hayasa de +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233/SLPS-25651/SLPS-25655/SLPS-25656/SLPS-25756 --------------------------------------------- -Serial = SLES-50570 -Name = Tour de France, Le -Region = PAL-Unk +Serial = SLPS-25657 +Name = Fighting Beauty Wulong +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50572 -Name = Robot Wars - Arenas of Destruction -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50575 -Name = Dark Summit -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50578 -Name = Kessen II -Region = PAL-Unk -[patches = 9FAC4FF3] - comment=COP2 flag instance patch by refraction - // a mac flag check just after a vsub which gets in the way, rearranging - patch=0,EE,00170F20,word,48438800 - patch=0,EE,00170F24,word,4BE521AC - patch=0,EE,00170F28,word,30848000 - patch=0,EE,00170F2C,word,4BE72B3C -[/patches] +Serial = SLPS-25658 +Name = Binchou-Tan - Shiwase Koyomi [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50579 -Name = Kessen II -Region = PAL-Unk +Serial = SLPS-25659 +Name = Binchou-Tan - Shiwase Koyomi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50580 -Name = Kessen II -Region = PAL-Unk +Serial = SLPS-25660 +Name = King of Fighters XI, The +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50584 -Name = G1 Jockey -Region = PAL-Unk +Serial = SLPS-25661 +Name = King of Fighters, The - Nests +Region = NTSC-J --------------------------------------------- -Serial = SLES-50586 -Name = ESPN Winter Sports 2002 -Region = PAL-Unk +Serial = SLPS-25662 +Name = Kyo Kara Maoh! The 1st trip of Maoh! [Premium Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50589 -Name = Worms Blast -Region = PAL-Unk +Serial = SLPS-25663 +Name = Kyo Kara Maoh! The 1st trip of Maoh! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50590 -Name = Music Maker -Region = PAL-Unk +Serial = SLPS-25664 +Name = NeoGeo Online Collection - Garou Densetsu Battle Archives Vol.1 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50591 -Name = Guilty Gear X -Region = PAL-E +Serial = SLPS-25665 +Name = Pachitte Chonmage Tatsujin 10 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50592 -Name = No One Lives Forever -Region = PAL-Unk +Serial = SLPS-25666 +Name = Sakura Zakashobotai [Irem Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50606 -Name = State of Emergency -Region = PAL-M4 +Serial = SLPS-25667 +Name = Daito Giken Premium Pachi-Slot Collection - Yoshimune +Region = NTSC-J --------------------------------------------- -Serial = SLES-50608 -Name = Shadow Man - 2econd Coming -Region = PAL-Unk +Serial = SLPS-25668 +Name = Torikago no Mukougawa - The Angles with Strange Wings +Region = NTSC-J --------------------------------------------- -Serial = SLES-50613 -Name = Woody Woodpecker -Region = PAL-M5 +Serial = SLPS-25669 +Name = School Rumble 2nd Term [Limited Edition] +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50619 -Name = Jonny Moseley Mad Trix -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50620 -Name = Micro Machines -Region = PAL-Unk +Serial = SLPS-25670 +Name = School Rumble 2nd Term +Region = NTSC-J --------------------------------------------- -Serial = SLES-50628 -Name = Simpsons Road Rage -Region = PAL-Unk +Serial = SLPS-25671 +Name = School Rumble [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50630 -Name = Dragon Rage -Region = PAL-Unk +Serial = SLPS-25672 +Name = 7Cafe - Katashiki Mei Bonba Pawafuru 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50631 -Name = Dragon Rage -Region = PAL-Unk +Serial = SLPS-25673 +Name = Last Escort - The Black Butterfly Special Night +Region = NTSC-J --------------------------------------------- -Serial = SLES-50632 -Name = Dragon Rage -Region = PAL-Unk +Serial = SLPS-25674 +Name = Metal Slug 6 +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50633 -Name = Gitaroo Man -Region = PAL-Unk +Serial = SLPS-25675 +Name = Battle Stadium D.O.N. +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50636 -Name = Centre Court - Hardhitter -Region = PAL-M3 +Serial = SLPS-25676 +Name = Kinnikuman Muscle Grand Prix Max +Region = NTSC-J --------------------------------------------- -Serial = SLES-50637 -Name = Pro Rally 2002 -Region = PAL-M5 +Serial = SLPS-25677 +Name = Blood+ One Night Kiss +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50638 -Name = High Heat Major League Baseball 2003 -Region = PAL-Unk +Serial = SLPS-25678 +Name = Utawareru Mono [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50639 -Name = Everblue -Region = PAL-E -Compat = 5 +Serial = SLPS-25679 +Name = Utawareru Mono +Region = NTSC-J --------------------------------------------- -Serial = SLES-50640 -Name = Salt Lake City 2002 Olympic Winter Games -Region = PAL-Unk +Serial = SLPS-25680 +Name = Mai-Kinoto Hime [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50641 -Name = Dynasty Warriors 3 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25681 +Name = Mai-Kinoto Hime +Region = NTSC-J --------------------------------------------- -Serial = SLES-50643 -Name = Shifters -Region = PAL-Unk +Serial = SLPS-25682 +Name = Sanyo Pachinko Paradise 13 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50644 -Name = Shifters -Region = PAL-Unk +Serial = SLPS-25683 +Name = Poncotsu Roman Daikatsugeki Bumpy Trot [Irem Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50645 -Name = Shifters -Region = PAL-Unk +Serial = SLPS-25684 +Name = Mermaid Prism [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50647 -Name = Casper - Spirit Dimensions -Region = PAL-Unk +Serial = SLPS-25685 +Name = Rurouni Kenshin - Enjou! Kyoto Rinne +Region = NTSC-J --------------------------------------------- -Serial = SLES-50649 -Name = Taz Wanted -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25686 +Name = Jojo no Kimyou na Bouken - Phantom Blood +Region = NTSC-J --------------------------------------------- -Serial = SLES-50650 -Name = Resident Evil Gun Survivor 2 - Code Veronica -Region = PAL-Unk +Serial = SLPS-25687 +Name = Korobotto Adventure +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50653 -Name = Gitaroo Man -Region = PAL-Unk +Serial = SLPS-25688 +Name = Simoun - Shoubi Sensou - Fuuin no Remersion [First Print - Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50654 -Name = Dune, Frank Herbert's -Region = PAL-Unk +Serial = SLPS-25689 +Name = Simoun - Shoubi Sensou - Fuuin no Remersion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50661 -Name = Atlantis III -Region = PAL-Unk +Serial = SLPS-25690 +Name = DragonBall Z - Sparking Neo +Region = NTSC-J --------------------------------------------- -Serial = SLES-50662 -Name = Shadow of Zorro, The -Region = PAL-Unk +Serial = SLPS-25691 +Name = Captain Tsubasa +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50670 -Name = ESPN Winter X-Games Snowboarding 2 -Region = PAL-Unk +Serial = SLPS-25693 +Name = Shinseiki GPX - Road to the Infinity 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50672 -Name = Baldur's Gate: Dark Alliance -Region = PAL-M5 -Compat = 4 +Serial = SLPS-25694 +Name = Princess Princess +Region = NTSC-J --------------------------------------------- -Serial = SLES-50677 -Name = Shadow Hearts -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25695 +Name = New Century GPX Cyber Formula - Road to the Infinity 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50679 -Name = Tenchu 3 - Wrath of Heaven -Region = PAL-Unk +Serial = SLPS-25696 +Name = Mermaid Prism +Region = NTSC-J --------------------------------------------- -Serial = SLES-50680 -Name = Pirates - The Legend of Black Kat -Region = PAL-Unk +Serial = SLPS-25697 +Name = CR Fever Powerful Zero +Region = NTSC-J Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-50683 -Name = Sled Storm -Region = PAL-M3 +Serial = SLPS-25698 +Name = Fatal Fury - Battle Archives 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50684 -Name = Medal of Honor - Frontline -Region = PAL-Unk +Serial = SLPS-25699 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.8 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50686 -Name = Iron Aces 2 - Birds of Prey -Region = PAL-Unk +Serial = SLPS-25700 +Name = Aoi no Tristia [The Best Price] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50703 -Name = Maximo -Region = PAL-Unk +Serial = SLPS-25701 +Name = Gallop Racer Inbreed +Region = NTSC-J --------------------------------------------- -Serial = SLES-50704 -Name = Godai - Elemental Force -Region = PAL-F-G -Compat = 5 +Serial = SLPS-25702 +Name = Amekoushi no Kan +Region = NTSC-J --------------------------------------------- -Serial = SLES-50706 -Name = Army Men - Real Time Strategy -Region = PAL-Unk +Serial = SLPS-25703 +Name = Simple 2000 Series Vol.111 - The Itadaki Raider +Region = NTSC-J --------------------------------------------- -Serial = SLES-50709 -Name = Weakest Link (Le Maillon Fable) -Region = PAL-F +Serial = SLPS-25704 +Name = Summon Night 4 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50710 -Name = Dr. Muto -Region = PAL-Unk +Serial = SLPS-25708 +Name = Zero no Tsukaima [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50711 -Name = Red Card Football -Region = PAL-Unk +Serial = SLPS-25709 +Name = Zero no Tsukaima +Region = NTSC-J --------------------------------------------- -Serial = SLES-50713 -Name = Freaky Flyers -Region = PAL-Unk +Serial = SLPS-25710 +Name = K-1 World Grand Prix 2006 +Region = NTSC-J +Compat = 4 --------------------------------------------- -Serial = SLES-50714 -Name = Defender -Region = PAL-E +Serial = SLPS-25711 +Name = Kashimashi! Girl Meets Girl [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50715 -Name = Gravity Games Bike Street - Vertical Dirt -Region = PAL-Unk +Serial = SLPS-25712 +Name = King of Fighters Neowave [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50716 -Name = Fireblade -Region = PAL-Unk +Serial = SLPS-25713 +Name = Twinkle Star Sprites - La Petite Princesse [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50717 -Name = Mortal Kombat - Deadly Alliance -Region = PAL-E -Compat = 5 +Serial = SLPS-25714 +Name = Naruto - Konoha Spirits +Region = NTSC-J +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-50720 -Name = FMX - Freestyle Metal X -Region = PAL-Unk +Serial = SLPS-25715 +Name = Tales of Destiny +Region = NTSC-J +FpuMulHack = 1 --------------------------------------------- -Serial = SLES-50721 -Name = Pryzm - Dark Unicorn -Region = PAL-Unk +Serial = SLPS-25716 +Name = Digimon Savers - Another Mission +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25717 +Name = Simple 2000 Series Ultimate Vol.33 - Ururun Quest +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25718 +Name = Mobile Suit Gundam Seed Destiny - Rengou vs. Z.A.F.T. II Plus +Region = NTSC-J Compat = 5 +eeRoundMode = 1 +FpuNegDivHack = 1 --------------------------------------------- -Serial = SLES-50722 -Name = Premier Manager 2002-2003 -Region = PAL-Unk +Serial = SLPS-25719 +Name = Happiness! Deluxe [First Print Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50723 -Name = TOCA Race Driver -Region = PAL-Unk +Serial = SLPS-25720 +Name = Happiness! Deluxe +Region = NTSC-J --------------------------------------------- -Serial = SLES-50725 -Name = V-Rally 3 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25721 +Name = HimeHibi - Princess Days +Region = NTSC-J --------------------------------------------- -Serial = SLES-50726 -Name = Myst III - Exile -Region = PAL-Unk +Serial = SLPS-25722 +Name = Routes PE [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50727 -Name = Knockout Kings 2002 -Region = PAL-Unk +Serial = SLPS-25723 +Name = Reijou Tantei - Office Love Jiken +Region = NTSC-J --------------------------------------------- -Serial = SLES-50728 -Name = Tiger Woods PGA Tour 2002 -Region = PAL-Unk +Serial = SLPS-25724 +Name = Pachinko Kaou - Misora Hibari +Region = NTSC-J --------------------------------------------- -Serial = SLES-50730 -Name = VIP -Region = PAL-Unk +Serial = SLPS-25725 +Name = King's Field - Dark Side Box +Region = NTSC-J --------------------------------------------- -Serial = SLES-50731 -Name = Need for Speed - Hot Pursuit 2 -Region = PAL-M6 -Compat = 5 -vuClampMode = 2 //white textures +Serial = SLPS-25726 +Name = SNK Slot Panic Vol.1 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50735 -Name = Jade Cocoon 2 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25727 +Name = Routes PE +Region = NTSC-J --------------------------------------------- -Serial = SLES-50738 -Name = Star Trek Voyager - Elite Force -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25728 +Name = Kujibiki Ambulance [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50739 -Name = Soldier of Fortune - Gold Edition -Region = PAL-Unk +Serial = SLPS-25729 +Name = Kujibibi Unbalance +Region = NTSC-J --------------------------------------------- -Serial = SLES-50751 -Name = Herdy Gerdy -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25730 +Name = Armored Core [Machine Side Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50752 -Name = Pro Tennis WTA Tour -Region = PAL-Unk +Serial = SLPS-25733 +Name = Super Robot Taisen OG - Original Generations +Region = NTSC-J --------------------------------------------- -Serial = SLES-50753 -Name = Freekstyle -Region = PAL-Unk +Serial = SLPS-25734 +Name = Battle of Yu Yu Hakushou - Shitou! Ankoku Bujutsukai 120% +Region = NTSC-J --------------------------------------------- -Serial = SLES-50754 -Name = Simpsons Skateboarding -Region = PAL-Unk +Serial = SLPS-25735 +Name = Dragon Shadow Spell +Region = NTSC-J --------------------------------------------- -Serial = SLES-50755 -Name = Simpsons Skateboarding -Region = PAL-Unk +Serial = SLPS-25736 +Name = Samurai Spirits - Tenkaichi Kenkakuten [SNK Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50757 -Name = Atlantis III -Region = PAL-Unk +Serial = SLPS-25737 +Name = Neo Geo Battle Coliseum [SNK Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50758 -Name = Eve of Extinction -Region = PAL-Unk +Serial = SLPS-25738 +Name = Soul Cradle Sekai o Kurau Mono [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50763 -Name = Rally Championship -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25739 +Name = Soul Cradle Sekai o Kurau Mono +Region = NTSC-J --------------------------------------------- -Serial = SLES-50765 -Name = Music Maker -Region = PAL-Unk +Serial = SLPS-25740 +Name = Lupin III - Lupin ni wa Shi o, Zenigata ni wa Koi o +Region = NTSC-J --------------------------------------------- -Serial = SLES-50767 -Name = V8 Supercars Australia - Race Driver -Region = PAL-Unk +Serial = SLPS-25742 +Name = Aa Megami-sama [Holy Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50768 -Name = Rally Championship -Region = PAL-Unk +Serial = SLPS-25743 +Name = Aa Megami-sama +Region = NTSC-J --------------------------------------------- -Serial = SLES-50769 -Name = Mr. Moskeeto -Region = PAL-Unk +Serial = SLPS-25744 +Name = Saint Seiya Meiou Hades Juunikyuu Hen +Region = NTSC-J --------------------------------------------- -Serial = SLES-50770 -Name = Mad Maestro! -Region = PAL-Unk +Serial = SLPS-25745 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.1 - CR Shinseiki Evangelion +Region = NTSC-J --------------------------------------------- -Serial = SLES-50771 -Name = Blood Omen 2 - Legend of Kain -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25746 +Name = CR Fever Captain Harlock +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25747 +Name = Garouden Break Blow - Fist or Twist +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25748 +Name = Aoi Sora no Neosphere - Nanoka Franka no Hatsumei Koubouki 2 [Limited Edition] +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25749 +Name = Aoi Sora no Neosphere - Nanoka Franka no Hatsumei Koubouki 2 +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25750 +Name = Super Robot Taisen - Scramble Commander The 2nd +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25751 +Name = Gakuen Utopia - Manabi Straight! KiraKira Happy Festa! [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50772 -Name = Blood Omen 2 - Legend of Kain -Region = PAL-Unk +Serial = SLPS-25752 +Name = Gakuen Utopia - Manabi Straight! KiraKira Happy Festa! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50773 -Name = Donald Duck Phantomias Platyrhynchos Kineticus -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25753 +Name = Ichigo Mashimaro [Shock SP] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50777 -Name = Battle Engine Aquila -Region = PAL-Unk +Serial = SLPS-25754 +Name = Kino no Tabi 2 - The Beautiful World [Electric Shock SP] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50778 -Name = TD Overdrive - The Brotherhood of Speed -Region = PAL-Unk -Compat = 2 +Serial = SLPS-25756 +Name = dot Hack G.U. Vol.1 - Saitan [Bandai the Best] +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233/SLPS-25651/SLPS-25655/SLPS-25656/SLPS-25756 --------------------------------------------- -Serial = SLES-50779 -Name = ESPN NBA 2Night 2002 -Region = PAL-Unk +Serial = SLPS-25757 +Name = Nanatsu Iro - Drops Pure!! [First Print Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50787 -Name = International Superstar Soccer 2 -Region = PAL-Unk +Serial = SLPS-25758 +Name = Nanatsu Iro - Drops Pure!! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50788 -Name = Frogger - The Great Quest -Region = PAL-Unk +Serial = SLPS-25759 +Name = Shiju Hachi +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50790 -Name = International Superstar Soccer 2002 -Region = PAL-Unk +Serial = SLPS-25760 +Name = VitaminX [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50793 -Name = Grand Theft Auto III -Region = PAL-Unk +Serial = SLPS-25761 +Name = VitaminX +Region = NTSC-J --------------------------------------------- -Serial = SLES-50794 -Name = Sven-Goran Eriksson's World Manager 2002 -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25762 +Name = Metal Slug Complete +Region = NTSC-J --------------------------------------------- -Serial = SLES-50795 -Name = Superman - Shadow of Apokolips -Region = PAL-Unk +Serial = SLPS-25763 +Name = Shin Bokujou Monogatari - Pure Innocent Life +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50796 -Name = FIFA World Cup 2002 -Region = PAL-Unk +Serial = SLPS-25764 +Name = Busou Renkin +Region = NTSC-J --------------------------------------------- -Serial = SLES-50797 -Name = FIFA World Cup 2002 -Region = PAL-Unk +Serial = SLPS-25765 +Name = King of Fighters, The - Maximum Impact Regulation A +Region = NTSC-J --------------------------------------------- -Serial = SLES-50798 -Name = FIFA World Cup 2002 -Region = PAL-Unk -Compat = 4 -EETimingHack = 1 +Serial = SLPS-25766 +Name = Orange Honey - Boku wa Kimi ni Koishiteru [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50799 -Name = FIFA World Cup 2002 -Region = PAL-Unk +Serial = SLPS-25767 +Name = Orange Honey - Boku wa Kimi ni Koishiteru +Region = NTSC-J --------------------------------------------- -Serial = SLES-50800 -Name = FIFA World Cup 2002 -Region = PAL-Unk +Serial = SLPS-25768 +Name = Naruto Shippuuden Narutimate Accel +Region = NTSC-J --------------------------------------------- -Serial = SLES-50801 -Name = FIFA World Cup 2002 -Region = PAL-Unk +Serial = SLPS-25769 +Name = Netsu Chu! Pro Baseball 2007 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50802 -Name = Knockout Kings 2002 -Region = PAL-Unk +Serial = SLPS-25770 +Name = Rakushou! Pachi-Slot Sengen 5 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50804 -Name = Deus Ex -Region = PAL-E +Serial = SLPS-25771 +Name = Grim Grimoire +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50805 -Name = Deus Ex -Region = PAL-Unk +Serial = SLPS-25773 +Name = Tales of Fandom Vol.2 [Tia Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50806 -Name = Deus Ex -Region = PAL-Unk +Serial = SLPS-25774 +Name = Tales of Fandom Vol.2 [Luke Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50807 -Name = Deus Ex -Region = PAL-Unk +Serial = SLPS-25775 +Name = Magician's Academy, The +Region = NTSC-J --------------------------------------------- -Serial = SLES-50808 -Name = Deus Ex -Region = PAL-Unk +Serial = SLPS-25776 +Name = Pachitte Chonmage Tatsujin 12 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50809 -Name = Next Generation Tennis 2003 -Region = PAL-Unk +Serial = SLPS-25777 +Name = Sumomomomomo - Chijou Saikyou no Yome [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50812 -Name = Spider-Man -Region = PAL-Unk +Serial = SLPS-25778 +Name = Sumomomomomo - Chijou Saikyou no Yome +Region = NTSC-J --------------------------------------------- -Serial = SLES-50813 -Name = Spider-Man -Region = PAL-Unk +Serial = SLPS-25779 +Name = King of Fighters, The - Maximum Impact 2 [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50814 -Name = Spider-Man -Region = PAL-Unk +Serial = SLPS-25780 +Name = Nodame Cantabile +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-25781 +Name = Fuuun Super Combo +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50815 -Name = Blood Omen 2 - Legend of Kain -Region = PAL-Unk +Serial = SLPS-25782 +Name = World Heroes - Gorgeous +Region = NTSC-J --------------------------------------------- -Serial = SLES-50816 -Name = DTM Race Driver -Region = PAL-M3 -Compat = 5 +Serial = SLPS-25783 +Name = King of Fighters '98, The - Ultimate Match +Region = NTSC-J --------------------------------------------- -Serial = SLES-50818 -Name = Pro Race Driver -Region = PAL-Unk +Serial = SLPS-25784 +Name = Another Century's Episode 3 - The Final +Region = NTSC-J --------------------------------------------- -Serial = SLES-50820 -Name = Micro Machines -Region = PAL-Unk +Serial = SLPS-25786 +Name = Hisshou Pachinko-Pachislot Kouryoku Series Vol.10 - CR Shinseiki Evangelion - Kiseki no Hachi Ha +Region = NTSC-J --------------------------------------------- -Serial = SLES-50821 -Name = Project Zero -Region = PAL-M5 +Serial = SLPS-25787 +Name = Sanyo Pachinko Paradise 14 +Region = NTSC-J Compat = 5 -[patches] - comment=- This gamedisc only lets you choose language once, - comment=- whereafter it stores that setting in the memcard. - comment=- To change the language you actually have to erase - comment=- the memcard content for the game. -[/patches] --------------------------------------------- -Serial = SLES-50822 -Name = Shadow Hearts -Region = PAL-Unk +Serial = SLPS-25788 +Name = Metal Slug [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50826 -Name = Star Wars - Clone Wars -Region = PAL-Unk +Serial = SLPS-25789 +Name = King of Fighters XI, The [SNK Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50829 -Name = Commandos 2 - Men of Courage -Region = PAL-Unk +Serial = SLPS-25790 +Name = Art of Fighting Collection [NeoGeo Online Collection the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50831 -Name = Star Wars - Bounty Hunter -Region = PAL-Unk +Serial = SLPS-25791 +Name = King of Fighters, The - Orochi Collection [NeoGeo Online Collection the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50832 -Name = Star Wars - Bounty Hunter -Region = PAL-Unk +Serial = SLPS-25792 +Name = Bakumatsu Roman - Last Blade 2-in-1 [NeoGeo Online Collection the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50833 -Name = Star Wars - Bounty Hunter -Region = PAL-Unk +Serial = SLPS-25793 +Name = Garou - Mark of the Wolves [NeoGeo Online Collection the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50834 -Name = Star Wars - Bounty Hunter -Region = PAL-Unk +Serial = SLPS-25794 +Name = Cluster Edge [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50835 -Name = Star Wars - Bounty Hunter -Region = PAL-Unk +Serial = SLPS-25795 +Name = School Rumble - 2nd Term [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50836 -Name = Indiana Jones and The Emperor's Tomb -Region = PAL-Unk -EETimingHack = 1 //For texture flicker. +Serial = SLPS-25796 +Name = Ore no Shite Agake +Region = NTSC-J --------------------------------------------- -Serial = SLES-50837 -Name = Indiana Jones and The Emperor's Tomb -Region = PAL-Unk -EETimingHack = 1 //For texture flicker. +Serial = SLPS-25797 +Name = Ikki Tousen - Shining Dragon [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50838 -Name = Indiana Jones and The Emperor's Tomb -Region = PAL-G +Serial = SLPS-25798 +Name = Ikki Tousen - Shining Dragon +Region = NTSC-J Compat = 5 -EETimingHack = 1 //For texture flicker. --------------------------------------------- -Serial = SLES-50839 -Name = Indiana Jones and The Emperor's Tomb -Region = PAL-Unk -EETimingHack = 1 //For texture flicker. +Serial = SLPS-25799 +Name = Ultraman Fighting Evolution 3 [Banpresto Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50840 -Name = Indiana Jones and The Emperor's Tomb -Region = PAL-Unk -EETimingHack = 1 //For texture flicker. +Serial = SLPS-25800 +Name = Ultraman Fighting Evolution - Rebirth [Banpresto Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50841 -Name = Largo Winch - Empire Under Threat -Region = PAL-M5 -Compat = 5 +Serial = SLPS-25801 +Name = Kyou Kara Maou! Shin Ma-Kuni no Kyuujitsu [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50842 -Name = Downforce -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25802 +Name = Kyou Kara Maou! Shin Ma-Kuni no Kyuujitsu +Region = NTSC-J --------------------------------------------- -Serial = SLES-50843 -Name = Crashed -Region = PAL-Unk +Serial = SLPS-25803 +Name = xxxHolic - Shigatsu Tsuitachi no Izayoi Sowa +Region = NTSC-J --------------------------------------------- -Serial = SLES-50845 -Name = Medal of Honour - Frontline -Region = PAL-Unk +Serial = SLPS-25804 +Name = Dear My Sun [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50846 -Name = Medal of Honor - Frontline -Region = PAL-Unk +Serial = SLPS-25806 +Name = Kateikyoushi Hitman Reborn! Dream Hyper Battle +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50848 -Name = Speed Kings -Region = PAL-Unk +Serial = SLPS-25807 +Name = Saint Beast - Rasen no Shou [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50849 -Name = Urban Freestyle Soccer -Region = PAL-Unk +Serial = SLPS-25808 +Name = Saint Beast - Rasen no Shou +Region = NTSC-J --------------------------------------------- -Serial = SLES-50850 -Name = ATV Off-Road 2 -Region = PAL-Unk +Serial = SLPS-25809 +Name = Gintama Gin-San to Issho! Boku no Kabuki Machi Nikki +Region = NTSC-J --------------------------------------------- -Serial = SLES-50852 -Name = Sven-Goran Eriksson's World Challenge -Region = PAL-Unk +Serial = SLPS-25810 +Name = Dear My Sun +Region = NTSC-J --------------------------------------------- -Serial = SLES-50853 -Name = Marcel DeSaily Pro Football -Region = PAL-Unk +Serial = SLPS-25811 +Name = Happiness! Deluxe [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50854 -Name = WM Nationalspieler -Region = PAL-Unk +Serial = SLPS-25812 +Name = Tori no Hoshi - Aerial Planet +Region = NTSC-J --------------------------------------------- -Serial = SLES-50859 -Name = Commandos 2 - Men of Courage -Region = PAL-Unk +Serial = SLPS-25813 +Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.11 - Shinseiki Evangelion - Magokoro o, Kimi ni +Region = NTSC-J --------------------------------------------- -Serial = SLES-50860 -Name = Commandos 2 - Men of Courage -Region = PAL-Unk +Serial = SLPS-25814 +Name = Shinseiki GPX Cyber Formula - Road to the Infinity 4 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50861 -Name = Top Angler -Region = PAL-Unk +Serial = SLPS-25815 +Name = DragonBall Z Sparking! Meteor +Region = NTSC-J --------------------------------------------- -Serial = SLES-50862 -Name = Street Hoops -Region = PAL-Unk +Serial = SLPS-25816 +Name = Yamasa Digi World - Collaboration SP Pachi-Slot Ridge Racer +Region = NTSC-J --------------------------------------------- -Serial = SLES-50870 -Name = Mat Hoffman's Pro BMX 2 -Region = PAL-Unk +Serial = SLPS-25817 +Name = Bakumatsu Renka - Karyuu Kenshiden [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50871 -Name = Mat Hoffman's Pro BMX 2 -Region = PAL-Unk +Serial = SLPS-25818 +Name = Bakumatsu Renka - Karyuu Kenshiden +Region = NTSC-J --------------------------------------------- -Serial = SLES-50872 -Name = Mat Hoffman's Pro BMX 2 -Region = PAL-Unk +Serial = SLPS-25819 +Name = Ar tonelico II: Sekai ni Hibiku Shoujo-Tachi no Souzoushi +Region = NTSC-J +Compat = 5 +eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLES-50873 -Name = Reign of Fire -Region = PAL-Unk +Serial = SLPS-25820 +Name = Kateikyoushi Hitman Reborn!! Let's Ansatsu! Nerawareta 10 Daime! +Region = NTSC-J --------------------------------------------- -Serial = SLES-50874 -Name = F1 2002 -Region = PAL-Unk +Serial = SLPS-25821 +Name = Suzumiya Haruhi no Tomadoi [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50875 -Name = F1 2002 -Region = PAL-Unk +Serial = SLPS-25822 +Name = Suzumiya Haruhi no Tomadoi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50876 -Name = Driv3r -Region = PAL-Unk +Serial = SLPS-25823 +Name = Spider-Man 3 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50877 -Name = TimeSplitters 2 -Region = PAL-E -Compat = 5 +Serial = SLPS-25825 +Name = Zero no Tsukaima [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50879 -Name = Paris-Dakar 2 -Region = PAL-Unk -Compat = 5 -FPUNegDivHack = 1 //Fixes sky being shown over the 3d. -EETimingHack = 1 //Flickery videos without it. -[patches = CB4EBD11] - - comment=patches by Nachbrenner - - //Skip Intro Videos - patch=0,EE,00139188,word,10000029 - //KOSMOS fix - patch=0,EE,00171874,word,00000000 // D1_CHCR - patch=0,EE,001718c4,word,00000000 // GS_CSR - -[/patches] +Serial = SLPS-25826 +Name = My Home o Tsukurou 2! Easy Design [Best Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50880 -Name = BMX XXX -Region = PAL-M4 -Compat = 5 +Serial = SLPS-25827 +Name = Soukou Kihei Votoms +Region = NTSC-J --------------------------------------------- -Serial = SLES-50882 -Name = Mary-Kate and Ashley - Sweet 16 -Region = PAL-Unk +Serial = SLPS-25828 +Name = Pachitte Chonmage Tatsujin 13 - Pachinko Hissatsu Shigotojin III +Region = NTSC-J --------------------------------------------- -Serial = SLES-50886 -Name = Transworld Surf -Region = PAL-Unk +Serial = SLPS-25829 +Name = A.C.E. Another Century's Episode 2 [Special Vocal Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50891 -Name = Legaia 2 - Duel Saga -Region = PAL-Unk +Serial = SLPS-25830 +Name = Zero no Tsukaima - Muma ga Tsumugu Yokaze no Gensoukyoku [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50892 -Name = Lethal Skies Elite Pilot - Team SW -Region = PAL-Unk +Serial = SLPS-25831 +Name = Zero no Tsukaima - Muma ga Tsumugu Yokaze no Gensoukyoku +Region = NTSC-J --------------------------------------------- -Serial = SLES-50897 -Name = Super Trucks -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25832 +Name = SD Gundam G Generation Spirits +Region = NTSC-J --------------------------------------------- -Serial = SLES-50898 -Name = X-Men - The Next Dimension -Region = PAL-Unk +Serial = SLPS-25833 +Name = Simple 2000 Series Vol.122 - The Ningyo Hime Monogatari - Mermaid Prism +Region = NTSC-J --------------------------------------------- -Serial = SLES-50899 -Name = X-Men - The Next Dimension -Region = PAL-Unk +Serial = SLPS-25834 +Name = Transformers - The Game +Region = NTSC-J --------------------------------------------- -Serial = SLES-50900 -Name = X-Men - The Next Dimension -Region = PAL-Unk +Serial = SLPS-25835 +Name = Super Robot Taisen OG - Original Generations Gaiden [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50902 -Name = Conflict - Desert Storm -Region = PAL-Unk +Serial = SLPS-25836 +Name = Super Robot Taisen OG - Original Generations Gaiden +Region = NTSC-J --------------------------------------------- -Serial = SLES-50905 -Name = Armored Core 2 - Another Age -Region = PAL-Unk +Serial = SLPS-25837 +Name = Naruto Shippuuden - Narutimate Accel 2 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50906 -Name = Master Rally -Region = PAL-Unk +Serial = SLPS-25838 +Name = Taiheiyou no Arashi - Senkan Yamato, Akatsuki ni Shutsugekisu +Region = NTSC-J --------------------------------------------- -Serial = SLES-50908 -Name = Monster Jam - Maximum Destruction -Region = PAL-Unk +Serial = SLPS-25839 +Name = Samurai Spirits: Rokuban Shoubu [NeoGeo Online Collection Vol. 12] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50914 -Name = International Cue Club -Region = PAL-E +Serial = SLPS-25840 +Name = Guitar Hero III - Legends of Rock [with Guitar] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50919 -Name = Akira Psycho Ball -Region = PAL-Unk -Compat = 4 +Serial = SLPS-25841 +Name = Tales of Destiny [Director's Cut] [Premium Box] +Region = NTSC-J +FpuMulHack = 1 +// allows import of non-DC Tales of Destiny data +MemCardFilter = SLPS-25841/SLPS-25842/SLPS-25715 --------------------------------------------- -Serial = SLES-50920 -Name = King's Field IV -Region = PAL-Unk +Serial = SLPS-25842 +Name = Tales of Destiny [Director's Cut] +Region = NTSC-J Compat = 5 +FpuMulHack = 1 +MemCardFilter = SLPS-25841/SLPS-25842/SLPS-25715 --------------------------------------------- -Serial = SLES-50921 -Name = Way of the Samurai -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-50922 -Name = Terminator, The - Dawn of Fate -Region = PAL-Unk +Serial = SLPS-25843 +Name = Tir-Na-Nog +Region = NTSC-J --------------------------------------------- -Serial = SLES-50927 -Name = Commandos 2 - Men of Courage -Region = PAL-Unk +Serial = SLPS-25844 +Name = Last Escort 2 - Shiya no Amai Ira [Gorgeous Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50930 -Name = Dino Stalker -Region = PAL-Unk +Serial = SLPS-25845 +Name = Last Escort 2 - Shiya no Amai Ira +Region = NTSC-J --------------------------------------------- -Serial = SLES-50932 -Name = Smash Court Tennis - Pro Tournament -Region = PAL-M5 +Serial = SLPS-25847 +Name = Amekoushi no Kan [The Best Price] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50933 -Name = eJay Clubworld -Region = PAL-Unk +Serial = SLPS-25848 +Name = Naraku no Shiro +Region = NTSC-J --------------------------------------------- -Serial = SLES-50935 -Name = Circus Maximus - Chariot Wars -Region = PAL-Unk +Serial = SLPS-25849 +Name = Sunsoft Collection +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-50936 -Name = Endgame -Region = PAL-Unk +Serial = SLPS-25850 +Name = KimiKiss [ebKore+] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50937 -Name = LEGO Football Mania -Region = PAL-Unk +Serial = SLPS-25851 +Name = Zettai Zetsumei Toshi 2 - Itetsuita Kioku Tachi [Irem Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50939 -Name = USA Racer -Region = PAL-Unk +Serial = SLPS-25852 +Name = Sanyo Pachinko Paradise 13 [Irem Collection] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50946 -Name = Britney's Dance Beat -Region = PAL-Unk +Serial = SLPS-25853 +Name = Pachinko Kamen Rider - Shocker Zenmetsu Daisakusen +Region = NTSC-J --------------------------------------------- -Serial = SLES-50947 -Name = Britney's Dance Beat -Region = PAL-Unk +Serial = SLPS-25854 +Name = Poison Pink +Region = NTSC-J +eeClampMode = 0 //in-game background visible --------------------------------------------- -Serial = SLES-50948 -Name = Britney's Dance Beat -Region = PAL-Unk +Serial = SLPS-25855 +Name = Battle of Sunrise +Region = NTSC-J --------------------------------------------- -Serial = SLES-50953 -Name = Air Rescue Ranger -Region = PAL-Unk +Serial = SLPS-25856 +Name = Tomb Raider - Anniversary +Region = NTSC-J --------------------------------------------- -Serial = SLES-50954 -Name = Tokyo Road Race -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25858 +Name = Dengeki SP - Shakugan no Shana +Region = NTSC-J --------------------------------------------- -Serial = SLES-50955 -Name = London Racer 2 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25859 +Name = Orange Honey - Boku wa Kimi ni Koishiteru [Best Version] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50958 -Name = Warhammer 40,000 - Firewarrior -Region = PAL-E +Serial = SLPS-25860 +Name = Code Geass - Hangyaku no Lelouch - Lost Colors +Region = NTSC-J --------------------------------------------- -Serial = SLES-50963 -Name = Riding Spirits -Region = PAL-Unk +Serial = SLPS-25861 +Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.10 [Special Price Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50964 -Name = Antz Extreme Racing -Region = PAL-Unk +Serial = SLPS-25862 +Name = Hisshou Pachinko - Pachi-Slot Kouryoku Series Vol.05 - CR Neon Genesis Evangelion Sekandoinpakuto & Pachislot Neon Genesis Evangelion [Special Price Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50965 -Name = Spider-Man -Region = PAL-Unk +Serial = SLPS-25863 +Name = Fatal Fury - Battle Archives 1 [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50972 -Name = Barbarian -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25864 +Name = Fatal Fury - Battle Archives 2 [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50974 -Name = Zapper - One Wicked Cricket! -Region = PAL-Unk +Serial = SLPS-25865 +Name = King of Fighters, The - Nests [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50975 -Name = Thing, The -Region = PAL-M4 -Compat = 5 +Serial = SLPS-25866 +Name = Fuuun Super Combo [SNK the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50976 -Name = Thing, The (Das Ding) -Region = PAL-G -Compat = 5 +Serial = SLPS-25867 +Name = Hanayoi Romanesque - Ai to Kanashimi [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50978 -Name = Onimusha 2 - Samurai's Destiny -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25868 +Name = Hanayoi Romanesque - Ai to Kanashimi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50981 -Name = RC Sports Copter Challenge -Region = PAL-Unk +Serial = SLPS-25869 +Name = CR Shinseiki Evangelion - Shito, Futatabi +Region = NTSC-J --------------------------------------------- -Serial = SLES-50984 -Name = Gumball 3000 -Region = PAL-Unk +Serial = SLPS-25881 +Name = Kinnikuman Muscle Grand Prix 2 +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50985 -Name = Gumball 3000 -Region = PAL-Unk -Compat = 5 +Serial = SLPS-25887 +Name = Super Robot Taisen Z +Region = NTSC-J --------------------------------------------- -Serial = SLES-50986 -Name = Twin Caliber -Region = PAL-M4 -Compat = 5 +Serial = SLPS-25892 +Name = Nogizaka Haruka no Himitsu - Cosplay Hajimemashita +Region = NTSC-J --------------------------------------------- -Serial = SLES-50987 -Name = Scorpion King, The - Rise of an Akkadian -Region = PAL-Unk +Serial = SLPS-25894 +Name = Aa Megami-sama [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-50988 -Name = Lord of the Rings, The - The Fellowship of the Ring (Der Herr der Ringe - Die Gefahrten) -Region = PAL-G +Serial = SLPS-25905 +Name = Dragon Ball Z: Infinite World +Region = NTSC-J --------------------------------------------- -Serial = SLES-50992 -Name = Hitman 2 - Silent Assassin -Region = PAL-Unk +Serial = SLPS-25906 +Name = ADK Tamashii +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-50994 -Name = Paris-Marseille Racing II -Region = PAL-Unk +Serial = SLPS-25914 +Name = Kidou Senshi Gundam: Giren no Yabou - Axis no Kyoui V +Region = NTSC-J +FpuNegDivHack = 1 --------------------------------------------- -Serial = SLES-50995 -Name = Fireblade -Region = PAL-Unk +Serial = SLPS-25915 +Name = The King of Fighters 2002 - Unlimited Match +Region = NTSC-J --------------------------------------------- -Serial = SLES-50997 -Name = Rally Fusion - Race of Champions -Region = PAL-Unk +Serial = SLPS-25927 +Name = Tomb Raider Underworld +Region = NTSC-J --------------------------------------------- -Serial = SLES-50998 -Name = Xtreme Express - World Grand Prix -Region = PAL-Unk +Serial = SLPS-25930 +Name = Major League Baseball 2K9 +Region = NTSC-J --------------------------------------------- -Serial = SLES-50999 -Name = UFC Throwdown -Region = PAL-Unk +Serial = SLPS-25934 +Name = Samurai Spirits: Rokuban Shoubu [NeoGeo Online Collection the Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51009 -Name = Autobahn Raser IV -Region = PAL-G +Serial = SLPS-25935 +Name = The King of Fighters '98 Ultimate Match (NeoGeo Online Collection the Best) +Region = NTSC-J --------------------------------------------- -Serial = SLES-51011 -Name = Knight Rider - The Game -Region = PAL-Unk +Serial = SLPS-25944 +Name = Kamen Rider Climax Heroes +Region = NTSC-J Compat = 5 --------------------------------------------- -Serial = SLES-51013 -Name = Blade 2 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51014 -Name = Blade 2 -Region = PAL-Unk +Serial = SLPS-25959 +Name = Kidou Senshi Gundam: Giren no Yabou - Axis no Kyoui V +Region = NTSC-J +FpuNegDivHack = 1 --------------------------------------------- -Serial = SLES-51017 -Name = Scooby-Doo! and The Night of 100 Frights -Region = PAL-Unk +Serial = SLPS-25983 +Name = The King of Fighters 2002 - Unlimited Match +Region = NTSC-J --------------------------------------------- -Serial = SLES-51018 -Name = Scooby-Doo! and The Night of 100 Frights -Region = PAL-Unk +Serial = SLPS-29001 +Name = Xenosaga Episode 1 - Der Wille zur Macht [Premium Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51019 -Name = Scooby-Doo! and The Night of 100 Frights -Region = PAL-Unk +Serial = SLPS-29002 +Name = Xenosaga Episode 1 - Der Wille zur Macht +Region = NTSC-J +Compat = 5 --------------------------------------------- -Serial = SLES-51022 -Name = Virtual Racer - Jaques Villeneuve -Region = PAL-Unk +Serial = SLPS-29003 +Name = Lord of the Rings - The Two Towers [Collector's Box] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51023 -Name = LMA Manager 2003 -Region = PAL-E +Serial = SLPS-29004 +Name = Lord of the Rings, The - The Two Towers +Region = NTSC-J Compat = 5 -[patches = 5C313124] - comment=patches by Shadow Lady - //IPU menus - patch=0,EE,002328a8,word,00000000 - patch=0,EE,00338570,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLES-51025 -Name = BDFL Manager 2003 -Region = PAL-Unk +Serial = SLPS-29005 +Name = Xenosaga Episode 1 - Der Wille zur Macht [Reloaded] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51038 -Name = MX Superfly featuring Ricky Carmichael -Region = PAL-Unk +Serial = SLPS-72501 +Name = Final Fantasy X [Mega Hits] +Region = NTSC-J +IPUWaitHack = 1 --------------------------------------------- -Serial = SLES-51042 -Name = Disney Golf -Region = PAL-Unk +Serial = SLPS-72502 +Name = Tales of Destiny 2 [Mega Hits] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51043 -Name = Spyro - Enter the Dragonfly -Region = PAL-Unk -[patches = 0EF1D4BA] - comment=Spyro PAL startup fix - patch=1,EE,001E763C,word,24020001 -[/patches] +Serial = SLPS-73003 +Name = Farms Story 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51044 -Name = Burnout 2 - Point of Impact -Region = PAL-M5 -Compat = 5 +Serial = SLPS-73005 +Name = Guilty Gear X - Plus [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51045 -Name = Legends of Wrestling II -Region = PAL-Unk +Serial = SLPS-73006 +Name = Time Crisis II [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51046 -Name = State of Emergency -Region = PAL-Unk +Serial = SLPS-73101 +Name = Kotoba no Puzzle - Mojipittan [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51053 -Name = Tom & Jerry's War of the Wiskers -Region = PAL-Unk +Serial = SLPS-73102 +Name = Bokujou Monogatari 3 - Heart ni Hi o Tsukete [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51054 -Name = Midnight Club 2 -Region = PAL-Unk -Compat = 3 +Serial = SLPS-73103 +Name = Makai Senki Disgaea [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51055 -Name = Go Go Golf -Region = PAL-E +Serial = SLPS-73104 +Name = Tekken Tag Tournament [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51056 -Name = Fighting Fury -Region = PAL-E +Serial = SLPS-73105 +Name = Kinnikuman Generations [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51057 -Name = Hard Hitter 2 -Region = PAL-Unk +Serial = SLPS-73106 +Name = Pilot Nina Rou! 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51058 -Name = Maken Shao - Demon Sword -Region = PAL-Unk +Serial = SLPS-73107 +Name = Taiko no Tatsujin 5 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51060 -Name = Butt Ugly Martians -Region = PAL-Unk +Serial = SLPS-73108 +Name = Phantom Brave [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51061 -Name = Grand Theft Auto - Vice City -Region = PAL-E -Compat = 5 +Serial = SLPS-73109 +Name = Bokujou Monogatari 3 - Heart ni Hi o Tsukete [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51064 -Name = Gladius -Region = PAL-Unk +Serial = SLPS-73110 +Name = Taiko no Tatsujin - Appare Sandaime [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51065 -Name = Gladius -Region = PAL-Unk +Serial = SLPS-73111 +Name = Taiko no Tatsujin Super Animehit [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51066 -Name = Gladius -Region = PAL-Unk +Serial = SLPS-73201 +Name = Fatal Frame 2 - Crimson Butterfly [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51069 -Name = RTX - Red Rock -Region = PAL-Unk +Serial = SLPS-73202 +Name = Armored Core - Nexus [PlayStation 2 The Best] [Disc 1] +Region = NTSC-J +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SLES-51070 -Name = RTX Red Rock -Region = PAL-Unk +Serial = SLPS-73203 +Name = Armored Core - Nexus [PlayStation 2 The Best] [Disc 2] +Region = NTSC-J +MemCardFilter = SCAJ-20076/SCAJ-20077/SLPS-25338/SLPS-25339/SLPS-73202/SLPS-73203 --------------------------------------------- -Serial = SLES-51071 -Name = RTX - Red Rock -Region = PAL-Unk -Compat = 4 +Serial = SLPS-73204 +Name = Zettai Zetsumi Toshi [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51072 -Name = RTX - Red Rock -Region = PAL-Unk +Serial = SLPS-73205 +Name = Ace Combat 4 - Shattered Skies [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51073 -Name = RTX Red Rock -Region = PAL-Unk +Serial = SLPS-73206 +Name = Super Robot Taisen Alpha 2nd [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51076 -Name = Liverpool FC - Club Football -Region = PAL-Unk +Serial = SLPS-73207 +Name = DragonBall Z [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51077 -Name = Club Football Real Madrid -Region = PAL-Unk +Serial = SLPS-73208 +Name = DragonBall Z 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51078 -Name = FC Barcelona - Club Football -Region = PAL-Unk -Compat = 4 +Serial = SLPS-73209 +Name = Tekken 4 [PlayStation 2 The Best] +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-73210 +Name = Katamari Damacy [PlayStation 2 The Best] +Region = NTSC-J +mvuFlagSpeedHack = 0 +--------------------------------------------- +Serial = SLPS-73211 +Name = Summon Night 3 [PlayStation 2 The Best] +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-73212 +Name = Naruto Narutimett Hero [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51079 -Name = Ajax Club Football -Region = PAL-Unk +Serial = SLPS-73214 +Name = Shadow Hearts 2 [Director's Cut] [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51080 -Name = AC Milan Club Football -Region = PAL-Unk +Serial = SLPS-73216 +Name = Magna Carta [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51081 -Name = Club Football - Juventus 2003-2004 Season -Region = PAL-Unk +Serial = SLPS-73217 +Name = Tales of Symphonia [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51082 -Name = Hamburger SV Club Football - Saison 2003-2004 -Region = PAL-Unk +Serial = SLPS-73218 +Name = Ace Combat 5 - The Unsung War [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51083 -Name = Borussia Dortmund Club Football - Saison 2003-2004 -Region = PAL-Unk +Serial = SLPS-73219 +Name = Tales of Destiny 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51084 -Name = BDFL Manager 2004 -Region = PAL-Unk +Serial = SLPS-73220 +Name = Ultraman [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51085 -Name = Aston Villa - Club Football -Region = PAL-Unk +Serial = SLPS-73221 +Name = Naruto Narutimett Hero 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51086 -Name = Club Football - Chelsea -Region = PAL-Unk +Serial = SLPS-73222 +Name = Harvest Moon - A Wonderful Life [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51087 -Name = Leeds United - Club Football -Region = PAL-Unk +Serial = SLPS-73223 +Name = Tekken 5 [PlayStation 2 The Best] +Region = NTSC-J +eeClampMode = 1 --------------------------------------------- -Serial = SLES-51088 -Name = Club Football - Rangers -Region = PAL-Unk +Serial = SLPS-73224 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [PlayStation 2 The Best] [Disc1of2] +Region = NTSC-J +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-51089 -Name = Club Football - Arsenal -Region = PAL-Unk +Serial = SLPS-73225 +Name = Xenosaga Episode II - Jenseits von Gut und Bose [PlayStation 2 The Best] [Disc2of2] +Region = NTSC-J +MemCardFilter = SLPS-29001/SLPS-29002/SLPS-29005/SLPS-25368/SLPS-25353/SLPS-73224 --------------------------------------------- -Serial = SLES-51090 -Name = Club Football - Manchester United -Region = PAL-Unk +Serial = SLPS-73226 +Name = Tenchu Kurenai [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51093 -Name = Largo Winch - Empire Under Threat -Region = PAL-Unk -Compat = 5 +Serial = SLPS-73227 +Name = Another Century's Episode [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51094 -Name = FC Internazionale - Club Football -Region = PAL-Unk +Serial = SLPS-73228 +Name = Fuun Bakumatsuden [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51095 -Name = Dino Stalker -Region = PAL-Unk +Serial = SLPS-73229 +Name = TearRing Saga Series - Berwick Saga [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51096 -Name = Dino Stalker -Region = PAL-Unk +Serial = SLPS-73230 +Name = dot Hack - Vol.1 & Vol.2 [PlayStation 2 The Best] [Vol.1 Disc] +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLES-51100 -Name = Club Football - Liverpool - 2003-2004 Season -Region = PAL-Unk +Serial = SLPS-73231 +Name = dot Hack - Vol.1 & Vol.2 [PlayStation 2 The Best] [Vol.2 Disc] +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLES-51101 -Name = Eggo Mania -Region = PAL-M3 -Compat = 5 -[patches = 30b27954] - - comment= patches by Nachbrenner - //skip IPU synchronisation - patch=0,EE,00111100,word,00000000 - -[/patches] +Serial = SLPS-73232 +Name = dot Hack - Vol.3 & Vol.4 [PlayStation 2 The Best] [Vol.3 Disc] +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLES-51108 -Name = Hitman 2 - Silent Assassin -Region = PAL-F +Serial = SLPS-73233 +Name = dot Hack - Vol.3 & Vol.4 [PlayStation 2 The Best] [Vol.4 Disc] +Region = NTSC-J +MemCardFilter = SCPS-55029/SCPS-55042/SCAJ-20004/SCAJ-20024/SLPS-25121/SLPS-25143/SLPS-25158/SLPS-25202/SLPS-73230/SLPS-73231/SLPS-73232/SLPS-73233 --------------------------------------------- -Serial = SLES-51109 -Name = Hitman 2 - Silent Assassin -Region = PAL-G +Serial = SLPS-73234 +Name = Kidou Senshi Z-Gundam - AEUG vs. Titans [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51113 -Name = Zone of the Enders: The 2nd Runner Special Edition -Region = PAL-M5 -Compat = 5 +Serial = SLPS-73235 +Name = DragonBall Z 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51114 -Name = Pro Evolution Soccer 2 -Region = PAL-M5 +Serial = SLPS-73236 +Name = Venus & Braves [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51117 -Name = Colin McRae Rally 3 -Region = PAL-Unk +Serial = SLPS-73237 +Name = Tenchu San [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51118 -Name = Wizardry - Tales of the Forsaken Land -Region = PAL-Unk -Compat = 5 +Serial = SLPS-73238 +Name = Super Robot Wars - Alpha 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51124 -Name = Turok Evolution -Region = PAL-G -Compat = 5 +Serial = SLPS-73239 +Name = Yu Yu Hakusho Forever [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51125 -Name = Sega Soccer Slam -Region = PAL-Unk +Serial = SLPS-73240 +Name = Katamari Damacy [PlayStation 2 The Best] +Region = NTSC-J +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLES-51126 -Name = Whirl Tour -Region = PAL-Unk +Serial = SLPS-73241 +Name = Minna Daisuki Katamari Damacy [PlayStation 2 The Best] +Region = NTSC-J +vuClampMode = 3 +mvuFlagSpeedHack = 0 +MemCardFilter = SCAJ-20135/SLPS-25467/SLPS-73241/SCAJ-20079/SLPS-25360/SLPS-73210/SLPS-73240 --------------------------------------------- -Serial = SLES-51128 -Name = Total Immersion Racing -Region = PAL-M5 -Compat = 5 +Serial = SLPS-73242 +Name = Tales of Legendia [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51130 -Name = Tony Hawk's Pro Skater 4 -Region = PAL-Unk +Serial = SLPS-73243 +Name = Namco X Capcom [PlayStation 2 The Best] +Region = NTSC-J +--------------------------------------------- +Serial = SLPS-73244 +Name = R-Type Final [PlayStation 2 The Best] +Region = NTSC-J Compat = 5 -vuRoundMode = 0 //Crashes without. +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLES-51132 -Name = Tony Hawk's Pro Skater 4 -Region = PAL-Unk -vuRoundMode = 0 //Crashes without. +Serial = SLPS-73245 +Name = Fatal Frame - Zero [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51133 -Name = Red Faction 2 -Region = PAL-Unk -Compat = 4 +Serial = SLPS-73246 +Name = Gundam True Odyssey [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51134 -Name = Powerpuff Girls - Relish Rampage -Region = PAL-Unk -Compat = 4 +Serial = SLPS-73247 +Name = Armored Core - Last Raven [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51141 -Name = Summoner 2 -Region = PAL-E -Compat = 5 +Serial = SLPS-73248 +Name = Kagero 2 - Dark Illusion [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51142 -Name = Summoner 2 -Region = PAL-G -Compat = 5 +Serial = SLPS-73249 +Name = Ar tonelico: Sekai no Owari de Utai Tsudukeru Shoujo [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51143 -Name = Summoner 2 -Region = PAL-Unk +Serial = SLPS-73250 +Name = Ace Combat Zero - The Belkan War [PlayStation 2 The Best] +Region = NTSC-J +MemCardFilter = SCAJ-20173/SLPS-25629/SLPS-73250/SLPS-25052/SLPS-73205/SLPS-73410/SCAJ-20104/SCAJ-20136/SLPS-25418/SLPS-73218 --------------------------------------------- -Serial = SLES-51144 -Name = Shox - Rally Reinvented -Region = PAL-M7 -Compat = 5 +Serial = SLPS-73251 +Name = Naruto - Narutimett Hero 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51145 -Name = Monopoly Party -Region = PAL-Unk +Serial = SLPS-73252 +Name = Tales of the Abyss [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51150 -Name = Scrabble Interactive - 2003 Edition -Region = PAL-M3 +Serial = SLPS-73253 +Name = Rurouni Kenshin - Enjou! Kyoto Rinne [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51151 -Name = NHL 2003 -Region = PAL-Unk -vuClampMode = 2 +Serial = SLPS-73254 +Name = Makai Senki Disgaea [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51153 -Name = LEGO Island - Extreme Stunts -Region = PAL-Unk +Serial = SLPS-73255 +Name = Fatal Frame [PlayStation 2 the Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51154 -Name = Madden NFL 2003 -Region = PAL-Unk +Serial = SLPS-73256 +Name = Fatal Frame 2 - Crimson Butterfly [PlayStation 2 the Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51156 -Name = Silent Hill 2 - Director's Cut -Region = PAL-M5 -Compat = 5 +Serial = SLPS-73257 +Name = Fatal Frame III - The Tormented [PlayStation 2 the Best - Reprint] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51157 -Name = Silent Scope 3 -Region = PAL-Unk +Serial = SLPS-73258 +Name = Kenka Banchou 2 - Full Throttle [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51160 -Name = Sub Rebellion -Region = PAL-Unk +Serial = SLPS-73263 +Name = Ar tonelico II: Sekai ni Hibiku Shoujo-Tachi no Metafalica [PlayStation 2 The Best] +Region = NTSC-J +eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLES-51162 -Name = Metropolismania -Region = PAL-Unk +Serial = SLPS-73401 +Name = Victorious Boxers - Championship Edition [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51168 -Name = AFL Live 2004 - Aussie Rules Football -Region = PAL-Unk -Compat = 5 +Serial = SLPS-73402 +Name = Shutoko Battle Zero [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51174 -Name = Marvel vs. Capcom 2 -Region = PAL-Unk +Serial = SLPS-73403 +Name = Armored Core 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51180 -Name = Tom Clancy's The Sum of All Fears -Region = PAL-M5 -Compat = 5 +Serial = SLPS-73404 +Name = Klonoa 2 [PlayStation 2 The Best] +Region = NTSC-J +eeClampMode = 3 //Objects needed appear in wrong places without it --------------------------------------------- -Serial = SLES-51181 -Name = Tom Clancy's Ghost Recon -Region = PAL-Unk +Serial = SLPS-73405 +Name = Zero [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51182 -Name = Tom Clancy's Ghost Recon -Region = PAL-Unk +Serial = SLPS-73406 +Name = Dead or Alive 2 - Hardcore [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51188 -Name = Rocket Power - Beach Bandits -Region = PAL-Unk +Serial = SLPS-73407 +Name = Sidewinder MAX [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51189 -Name = MTV's Celebrity Deathmatch -Region = PAL-Unk +Serial = SLPS-73410 +Name = Ace Combat 4 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51191 -Name = Auto Modellista -Region = PAL-Unk -Compat = 5 +Serial = SLPS-73411 +Name = Armored Core 2 - Another Age [PlayStation 2 The Best] +Region = NTSC-J +MemCardFilter = SCPS-55024/SLPS-25007/SLPS-25040/SLPS-73403/SLPS-73411 --------------------------------------------- -Serial = SLES-51192 -Name = Harry Potter and the Chamber of Secrets -Region = PAL-Unk +Serial = SLPS-73412 +Name = Vampire Night [PlayStation 2 The Best] +Region = NTSC-J +EETimingHack = 1 --------------------------------------------- -Serial = SLES-51194 -Name = Harry Potter - Kammer D Schreckens -Region = PAL-Unk +Serial = SLPS-73415 +Name = Gallop Racer 6 - Revolution [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51195 -Name = Harry Potter y La Camara Secreta -Region = PAL-S +Serial = SLPS-73416 +Name = Super Robot Wars - Impact [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51196 -Name = Harry Potter e La Camera dei Secreti -Region = PAL-I +Serial = SLPS-73417 +Name = Armored Core 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51197 -Name = FIFA 2003 -Region = PAL-M7 -Compat = 4 -vuClampMode = 2 //missing geometry with microVU +Serial = SLPS-73418 +Name = Shadow Hearts [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51198 -Name = NBA Live 2003 -Region = PAL-Unk +Serial = SLPS-73419 +Name = Lupin III - Majutsu-Ou no Isan [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51199 -Name = 4x4 Evolution II -Region = PAL-Unk +Serial = SLPS-73420 +Name = Armored Core 3 - Silent Line [PlayStation 2 The Best] +Region = NTSC-J +MemCardFilter = SCAJ-20011/SCPS-55014/SLPS-25112/SLPS-25169/SLPS-73417/SLPS-73420 --------------------------------------------- -Serial = SLES-51200 -Name = Kelly Slater's Pro Surfer -Region = PAL-Unk +Serial = SLPS-73421 +Name = Tenchu 3 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51201 -Name = Kelly Slater's Pro Surfer -Region = PAL-Unk +Serial = SLPS-73422 +Name = Ultraman Fighting Evolution 2 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51202 -Name = Wreckless - The Yakuza Missions -Region = PAL-Unk +Serial = SLPS-73423 +Name = Monster Farm 4 [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51203 -Name = Enter the Matrix -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 +Serial = SLPS-73424 +Name = Guilty Gear XX [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51208 -Name = Rocky -Region = PAL-Unk +Serial = SLPS-73901 +Name = Xenosaga Episode 1 - Der Wille zur Macht [PlayStation 2 The Best] +Region = NTSC-J --------------------------------------------- -Serial = SLES-51209 -Name = Haven - Call of the King -Region = PAL-Unk +Serial = SLUS-20001 +Name = Tekken Tag Tournament +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51214 -Name = 18 Wheeler - American Pro Trucker -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51220 -Name = Ty - The Tazmanian Tiger -Region = PAL-5 +Serial = SLUS-20002 +Name = Ridge Racer V +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51222 -Name = Rayman 3 - Hoodlum Havoc -Region = PAL-Unk +Serial = SLUS-20003 +Name = Portal Runner +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51223 -Name = Runabout 3 - Neo Age -Region = PAL-E +Serial = SLUS-20004 +Name = Army Men - Air Attack 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51226 -Name = Twin Caliber -Region = PAL-Unk +Serial = SLUS-20005 +Name = World Destruction League - Thunder Tanks +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51227 -Name = Tomb Raider - Angel of Darkness // aka "TRAOD" -Region = PAL-Unk // Multiple languages +Serial = SLUS-20006 +Name = Warriors of Might and Magic +Region = NTSC-U Compat = 5 -//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang -[patches] - comment=- This gamedisc supports multiple languages and widescreen. - comment=- Language & widescreen selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". - comment=- Full boot is recommended anyway for this gamedisc to avoid textproblems. -[/patches] --------------------------------------------- -Serial = SLES-51229 -Name = Virtua Cop - Elite Edition -Region = PAL-M5 +Serial = SLUS-20007 +Name = World Destruction League - War Jetz +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51230 -Name = Minority Report -Region = PAL-Unk +Serial = SLUS-20008 +Name = All-Star Baseball 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51232 -Name = Virtua Tennis 2 -Region = PAL-Unk +Serial = SLUS-20009 +Name = Surfing - H30 +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20011 +Name = Orphen - Scion of Sorcery +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51233 -Name = DragonBall Z - Budokai -Region = PAL-M4 +Serial = SLUS-20012 +Name = Super Car Street Challenge +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20013 +Name = Tony Hawk's Pro Skater 3 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51235 -Name = Raging Blades -Region = PAL-Unk +Serial = SLUS-20014 +Name = Armored Core 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51236 -Name = Gungrave -Region = PAL-Unk +Serial = SLUS-20015 +Name = Eternal Ring +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51244 -Name = XIII -Region = PAL-M5 +Serial = SLUS-20016 +Name = Evergrace +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51247 -Name = Inspector Gadget - Mad Robots Invasion -Region = PAL-Unk +Serial = SLUS-20017 +Name = Maximo - Ghosts to Glory +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51249 -Name = Castleween -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20018 +Name = Onimusha - Warlords +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51250 -Name = Shox - Rally Reinvented -Region = PAL-E +Serial = SLUS-20021 +Name = Kengo - Master of Bushido +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51251 -Name = Shox - Rally Reinvented -Region = PAL-Unk +Serial = SLUS-20024 +Name = Legacy of Kain - Blood Omen 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51252 -Name = Lord of the Rings, The - The Two Towers -Region = PAL-Unk +Serial = SLUS-20028 +Name = No One Lives Forever +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51253 -Name = Lord of the Rings, The - The Two Towers (Seigneur des Anneaux - Les Deux Tours) -Region = PAL-F +Serial = SLUS-20029 +Name = Top Gear Daredevil +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51254 -Name = Lord of the Rings, The - The Two Towers (Der Herr der Ringe - Die Zwei Turme) -Region = PAL-G +Serial = SLUS-20032 +Name = Real Pool +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51255 -Name = Lord of the Rings, The - The Two Towers -Region = PAL-Unk +Serial = SLUS-20034 +Name = Unreal Tournament +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51256 -Name = Lord of the Rings, The - The Two Towers (El Senor de Los Anillos - Las Dos Torres) -Region = PAL-S +Serial = SLUS-20035 +Name = Baldur's Gate: Dark Alliance +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51257 -Name = Sims, The (Die Sims) -Region = PAL-G +Serial = SLUS-20037 +Name = Run Like Hell - Hunt or Be Hunted +Region = NTSC-U +Compat = 5 +[patches = F802A575] + comment=swapping a COP2 op into place to make the flags work without delays + patch=0,EE,001D249C,word,4A0002FF + patch=0,EE,001D24AC,word,4B07FA0B + patch=0,EE,001D268C,word,4A0002FF + patch=0,EE,001D269C,word,4B07FA0B +[/patches] --------------------------------------------- -Serial = SLES-51258 -Name = James Bond 007 - Nightfire -Region = PAL-Unk +Serial = SLUS-20039 +Name = Top Gear Dare Devil +Region = NTSC-U --------------------------------------------- -Serial = SLES-51260 -Name = James Bond 007 - Nightfire -Region = PAL-Unk +Serial = SLUS-20040 +Name = Gradius III & IV +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51265 -Name = Dynasty Warriors Tactics -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51266 -Name = Dynasty Tactics -Region = PAL-Unk +Serial = SLUS-20041 +Name = ESPN International Track & Field +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51267 -Name = Dynasty Tactics -Region = PAL-Unk +Serial = SLUS-20042 +Name = LEGO Racers 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51271 -Name = Mobile Suit Gundam - Federation vs. Zeon -Region = PAL-Unk +Serial = SLUS-20043 +Name = Star Wars - Super Bombad Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51272 -Name = Wakeboarding Unleashed -Region = PAL-Unk +Serial = SLUS-20044 +Name = Star Wars - StarFighter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51273 -Name = Wakeboarding Unleashed -Region = PAL-Unk +Serial = SLUS-20045 +Name = Legend of Alon Dar, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51282 -Name = Tiger Woods PGA Tour 2003 -Region = PAL-Unk +Serial = SLUS-20047 +Name = Gauntlet - Dark Legacy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51283 -Name = WWE Smackdown! 4 - Shut Your Mouth -Region = PAL-Unk +Serial = SLUS-20048 +Name = Legion - Legend of Excalibur +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51284 -Name = Contra - Shattered Soldier -Region = PAL-M3 +Serial = SLUS-20049 +Name = MLB Slugfest 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51285 -Name = Spongebob Squarepants - Revenge of the Flying Dutchman -Region = PAL-Unk -Compat = 3 +Serial = SLUS-20050 +Name = NBA Hoopz +Region = NTSC-U --------------------------------------------- -Serial = SLES-51286 -Name = X-Men 2 - Wolverine's Revenge -Region = PAL-Unk +Serial = SLUS-20051 +Name = NFL Blitz 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51287 -Name = X-Men 2 - Wolverine's Revenge -Region = PAL-Unk +Serial = SLUS-20054 +Name = Ready 2 Rumble Boxing - Round 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51289 -Name = Gunfighter 2 - Legend of Jesse James -Region = PAL-Unk +Serial = SLUS-20056 +Name = Spy Hunter +Region = NTSC-U +Compat = 5 +VIF1StallHack = 1 //Fixes loading hang --------------------------------------------- -Serial = SLES-51290 -Name = Sword of the Samurai -Region = PAL-Unk +Serial = SLUS-20058 +Name = Moto GP +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51294 -Name = XIII -Region = PAL-Unk +Serial = SLUS-20062 +Name = Grand Theft Auto III +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51296 -Name = Grand Prix Challenge -Region = PAL-Unk -Compat = 4 -VIFFIFOHack = 1 +Serial = SLUS-20063 +Name = Midnight Club - Street Racing +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20063/SLUS-20065 --------------------------------------------- -Serial = SLES-51298 -Name = Jimmy Neutron - Boy Genius -Region = PAL-Unk +Serial = SLUS-20064 +Name = Oni +Region = NTSC-U +Compat = 5 +[patches = FD9CD8FC] + + comment=patch by Shadow Lady + + //skip branch bc0f + patch=0,EE,001CF3CC,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLES-51301 -Name = SOS - The Final Escape -Region = PAL-Unk +Serial = SLUS-20065 +Name = Smuggler's Run +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51302 -Name = Bomberman Kart -Region = PAL-Unk +Serial = SLUS-20066 +Name = Half-Life +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51303 -Name = LEGO Dome Racers -Region = PAL-Unk +Serial = SLUS-20069 +Name = Bouncer, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51307 -Name = Wild Arms 3 -Region = PAL-Unk +Serial = SLUS-20070 +Name = Q-Ball Billiards Master +Region = NTSC-U --------------------------------------------- -Serial = SLES-51308 -Name = Reel Fishing 3 -Region = PAL-Unk +Serial = SLUS-20071 +Name = Dead or Alive 2 +Region = NTSC-U +Compat = 5 +[patches = 23AF6876] +//dvd version + // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function + patch=0,EE,002b06ec,word,24060000 + + //Patch by Prafull after combining pseudonym's gamefix and benji229's patch + //skips some sound but game works + patch=0,EE,002b06ec,word,24060000 + patch=0,EE,002b0868,word,10000014 +[/patches] +[patches = 51068006] +//cd version + // change TLSNDDRV RPC to blocking, better would be to move the wait to the top of the function + patch=0,EE,002b06ec,word,24060000 + + //Patch by Prafull after combining pseudonym's gamefix and benji229's patch + //skips some sound but game works + patch=0,EE,002b06ec,word,24060000 + patch=0,EE,002b0868,word,10000014 +[/patches] --------------------------------------------- -Serial = SLES-51311 -Name = Rugrats Royal Ransom -Region = PAL-Unk +Serial = SLUS-20072 +Name = MX 2002 - featuring Ricky Carmichael +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51312 -Name = Rugrats Royal Ransom -Region = PAL-Unk +Serial = SLUS-20073 +Name = Red Faction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51313 -Name = Activision Anthology -Region = PAL-Unk +Serial = SLUS-20074 +Name = Summoner +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51315 -Name = Great Escape, The -Region = PAL-M5 +Serial = SLUS-20075 +Name = Disney's Jungle Book - Rhythm & Groove +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51316 -Name = Grand Theft Auto - Vice City -Region = PAL-Unk +Serial = SLUS-20076 +Name = Disney's Tarzan Untamed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51317 -Name = Minority Report -Region = PAL-Unk +Serial = SLUS-20077 +Name = Donald Duck Goin' Quackers +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51318 -Name = Minority Report -Region = PAL-Unk +Serial = SLUS-20078 +Name = Silent Scope +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51322 -Name = Robotech Battlecry -Region = PAL-Unk +Serial = SLUS-20079 +Name = Dynasty Warriors 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51333 -Name = Dark Angel -Region = PAL-Unk +Serial = SLUS-20080 +Name = GunGriffon Blaze +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51339 -Name = NFL 2K3 -Region = PAL-Unk +Serial = SLUS-20084 +Name = Soldier of Fortune - Gold Edition +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51340 -Name = NBA 2K3 -Region = PAL-Unk +Serial = SLUS-20085 +Name = Silpheed Lost Planet +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51341 -Name = NHL 2K3 -Region = PAL-Unk +Serial = SLUS-20086 +Name = Commandos 2 - Men of Courage +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51343 -Name = Galerians - Ash -Region = PAL-Unk +Serial = SLUS-20087 +Name = Army Men - Green Rogue +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51344 -Name = Guilty Gear X2 -Region = PAL-Unk +Serial = SLUS-20088 +Name = Fur Fighters - Viggo's Revenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51345 -Name = Run Like Hell -Region = PAL-Unk -[patches = 945301BE] - comment=swapping a COP2 op into place to make the flags work without delays - patch=0,EE,001D4534,word,4A0002FF - patch=0,EE,001D4544,word,4B07FA0B - - patch=0,EE,001D4720,word,4A0002FF - patch=0,EE,001D4730,word,4B07FA0B -[/patches] +Serial = SLUS-20089 +Name = ESPN - Winter X Games - Snowboarding +Region = NTSC-U --------------------------------------------- -Serial = SLES-51347 -Name = Die Hard - Vendetta -Region = PAL-Unk +Serial = SLUS-20090 +Name = TimeSplitters +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51348 -Name = Die Hard - Vendetta -Region = PAL-Unk +Serial = SLUS-20091 +Name = 4x4 Evolution +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51349 -Name = Evolution Skateboarding -Region = PAL-Unk +Serial = SLUS-20092 +Name = Surfing H3O +Region = NTSC-U --------------------------------------------- -Serial = SLES-51350 -Name = Ben Hur -Region = PAL-Unk +Serial = SLUS-20093 +Name = Madden NFL 2001 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51354 -Name = Jurassic Park - Operation Genesis -Region = PAL-Unk +Serial = SLUS-20094 +Name = X Squad +Region = NTSC-U --------------------------------------------- -Serial = SLES-51355 -Name = Big Mutha Truckers -Region = PAL-Unk +Serial = SLUS-20095 +Name = SSX +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51356 -Name = Road Trip Adventure -Region = PAL-M3 +Serial = SLUS-20096 +Name = Swing Away Golf +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51357 -Name = G1 Jockey 3 -Region = PAL-Unk +Serial = SLUS-20097 +Name = FIFA Soccer 2001 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51358 -Name = Mystic Heroes -Region = PAL-Unk +Serial = SLUS-20098 +Name = Kessen +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51360 -Name = Simpsons Skateboarding -Region = PAL-Unk +Serial = SLUS-20099 +Name = Theme Park Rollercoaster +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51361 -Name = Simpsons Skateboarding -Region = PAL-Unk +Serial = SLUS-20100 +Name = NHL 2001 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51362 -Name = Simpsons Skateboarding -Region = PAL-Unk +Serial = SLUS-20101 +Name = NASCAR 2001 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51363 -Name = Music 3000 -Region = PAL-Unk +Serial = SLUS-20102 +Name = NBA Live 2001 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51365 -Name = BMX XXX -Region = PAL-Unk +Serial = SLUS-20103 +Name = F1 2000 Championship Edition +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51371 -Name = Pride FC -Region = PAL-Unk +Serial = SLUS-20104 +Name = Tiger Woods PGA Tour 2001 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51372 -Name = Wallace & Gromit in Project Zoo -Region = PAL-Unk -Compat = 1 +Serial = SLUS-20105 +Name = MDK 2 - Armageddon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51374 -Name = RoboCop -Region = PAL-Unk +Serial = SLUS-20108 +Name = Wild Wild Racing +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51381 -Name = Everblue 2 -Region = PAL-Unk +Serial = SLUS-20109 +Name = Rune - Viking Warlord +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51382 -Name = Shrek - Super Party -Region = PAL-Unk +Serial = SLUS-20111 +Name = Deus Ex - The Conspiracy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51383 -Name = Beach King Stunt Racer -Region = PAL-M4 +Serial = SLUS-20112 +Name = Star Trek - Shattered Universe +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51385 -Name = Rugrats Rescate Real -Region = PAL-Unk +Serial = SLUS-20113 +Name = Driving Emotion Type S +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51387 -Name = World Racing -Region = PAL-Unk +Serial = SLUS-20114 +Name = Simpsons, The - Skateboarding +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51388 -Name = Sega Bass Fishing Duel -Region = PAL-Unk +Serial = SLUS-20115 +Name = Super Bust-A-Move +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51390 -Name = Fightbox -Region = PAL-E +Serial = SLUS-20128 +Name = ESPN - MLS Extra Time +Region = NTSC-U --------------------------------------------- -Serial = SLES-51391 -Name = RTL Skispringen 2003 -Region = PAL-Unk +Serial = SLUS-20130 +Name = Street Fighter EX3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51392 -Name = Evolution Snowboarding -Region = PAL-Unk +Serial = SLUS-20131 +Name = Dark Angel - Vampire Apocalypse +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51393 -Name = Syberia -Region = PAL-Unk +Serial = SLUS-20132 +Name = Army Men - Sarge's Heroes 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51397 -Name = IndyCar Series -Region = PAL-Unk +Serial = SLUS-20133 +Name = High Heat Baseball 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51398 -Name = World Championship Snooker 2003 -Region = PAL-Unk +Serial = SLUS-20134 +Name = Sky Odyssey +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51399 -Name = Armored Core 3 -Region = PAL-Unk +Serial = SLUS-20136 +Name = Barbarian +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51400 -Name = Tenchu - Wrath of Heaven -Region = PAL-Unk +Serial = SLUS-20138 +Name = Rayman 2 - Revolution +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51401 -Name = Tenchu - Wrath of Heaven -Region = PAL-Unk +Serial = SLUS-20139 +Name = Simpsons, The - Road Rage +Region = NTSC-U --------------------------------------------- -Serial = SLES-51402 -Name = Tenchu - Wrath of Heaven -Region = PAL-Unk +Serial = SLUS-20140 +Name = NHL Hitz 2002 +Region = NTSC-U Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-51403 -Name = Tenchu - Wrath of Heaven -Region = PAL-Unk +Serial = SLUS-20141 +Name = CART Fury - Championship Racing +Region = NTSC-U +Compat = 5 +[patches = 116154AD] + + comment=patches by Nachbrenner + + //skip PSX2_Mpeg_PlayFile__FPc + patch=0,EE,00107a00,word,03e00008 + patch=0,EE,00107a04,word,24020001 + //skip SuperSync__Fi + patch=0,EE,00100eb0,word,03e00008 + patch=0,EE,00100eb4,word,24020001 + +[/patches] --------------------------------------------- -Serial = SLES-51409 -Name = Frogger Beyond -Region = PAL-Unk +Serial = SLUS-20143 +Name = ESPN - NBA 2 Night +Region = NTSC-U --------------------------------------------- -Serial = SLES-51418 -Name = Fisherman's Challenge -Region = PAL-Unk +Serial = SLUS-20144 +Name = Metal Gear Solid 2 - Sons of Liberty +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51423 -Name = Celtic - Club Football -Region = PAL-Unk +Serial = SLUS-20145 +Name = Ring of Red +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51433 -Name = Ghost Vibration -Region = PAL-Unk +Serial = SLUS-20146 +Name = Shadow of Destiny +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51434 -Name = Silent Hill 3 -Region = PAL-M5 +Serial = SLUS-20147 +Name = Aliens vs. Predator - Extinction +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51435 -Name = International Superstar Soccer 3 -Region = PAL-Unk +Serial = SLUS-20148 +Name = Zone of the Enders +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51436 -Name = Chessmaster 9000 -Region = PAL-Unk +Serial = SLUS-20149 +Name = Tribes - Aerial Assault +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51439 -Name = Mortal Kombat - Deadly Alliance -Region = PAL-G +Serial = SLUS-20150 +Name = Knockout Kings 2001 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-51441 -Name = Dynasty Warriors 3 - Extreme Legends -Region = PAL-Unk +Serial = SLUS-20151 +Name = Klonoa 2 - Lunatea's Veil +Region = NTSC-U +Compat = 5 +eeClampMode = 3 //Objects needed appear in wrong places without it +[patches = 2F56CBC9] + + comment=patches by nachbrenner + + //Skip sceIpuSync + patch=0,EE,00305b90,word,03e00008 + +[/patches] --------------------------------------------- -Serial = SLES-51442 -Name = Dynasty Warriors 3 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20152 +Name = Ace Combat 4 - Shattered Skies +Region = NTSC-U +Compat = 5 +[patches = A32F7CD0] + comment=Rearranging COP2 ops + // this one seems unintuitive but I can't see how the cycles add up for the maddbc to be the source of the flags + patch=0,EE,0010FFC8,word,48428800 + patch=0,EE,0010FFDC,word,4BE83A4B + + // same as ace combat 5, these are definite + patch=0,EE,0017C6C4,word,48438800 + patch=0,EE,0017C6D4,word,4BE4282C + patch=0,EE,0017C0C4,word,48438800 + patch=0,EE,0017C0D4,word,4B0B602C +[/patches] --------------------------------------------- -Serial = SLES-51443 -Name = Dynasty Warriors 3 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20153 +Name = RC Revenge Pro +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51445 -Name = Rygar - The Legendary Adventure -Region = PAL-M5 +Serial = SLUS-20154 +Name = NFL Quarterback Club 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51448 -Name = Resident Evil - Dead Aim -Region = PAL-Unk +Serial = SLUS-20157 +Name = Haven - Call of the King +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20158 +Name = Heroes of Might and Magic +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51449 -Name = Return to Castle Wolfenstein - Operation Resurrection -Region = PAL-Unk +Serial = SLUS-20159 +Name = Dave Mirra Freestyle BMX 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51451 -Name = Whiteout -Region = PAL-Unk +Serial = SLUS-20160 +Name = Winback - Covert Operations +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51456 -Name = LMA Manager 2004 -Region = PAL-Unk +Serial = SLUS-20162 +Name = Aqua Aqua +Region = NTSC-U --------------------------------------------- -Serial = SLES-51458 -Name = BDFL Manager 2004 -Region = PAL-Unk +Serial = SLUS-20164 +Name = Project Eden +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51460 -Name = Football Manager 2004 -Region = PAL-Unk +Serial = SLUS-20165 +Name = Legacy of Kain - Soul Reaver 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51462 -Name = Shrek Super Party -Region = PAL-Unk +Serial = SLUS-20166 +Name = ESPN - National Hockey Night +Region = NTSC-U --------------------------------------------- -Serial = SLES-51466 -Name = Tom Clancy's Splinter Cell -Region = PAL-M5 +Serial = SLUS-20167 +Name = Quake III - Revolution +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51467 -Name = Freedom Fighters -Region = PAL-Unk +Serial = SLUS-20168 +Name = Triple Play 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51469 -Name = Freedom Fighters -Region = PAL-Unk +Serial = SLUS-20169 +Name = Ephemeral Fantasia +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51470 -Name = Freedom Fighters -Region = PAL-Unk +Serial = SLUS-20170 +Name = Adventures of Cookie & Cream, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51473 -Name = Kya - Dark Lineage -Region = PAL-M5 +Serial = SLUS-20171 +Name = Motor Mayhem - Vehicular Combat League +Region = NTSC-U --------------------------------------------- -Serial = SLES-51474 -Name = Blood Rayne -Region = PAL-Unk +Serial = SLUS-20172 +Name = Pryzm - Chapter One - The Dark Unicorn +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51476 -Name = Mystic Heroes -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51477 -Name = Mystic Heroes -Region = PAL-Unk +Serial = SLUS-20173 +Name = Unison +Region = NTSC-U --------------------------------------------- -Serial = SLES-51479 -Name = Def Jam Vendetta -Region = PAL-Unk +Serial = SLUS-20174 +Name = Rumble Racing +Region = NTSC-U --------------------------------------------- -Serial = SLES-51481 -Name = NBA Street 2 -Region = PAL-M2 +Serial = SLUS-20175 +Name = Mobile Suit Gundam - Journey to Jaburo +Region = NTSC-U Compat = 5 -vuClampMode = 2 //missing environment with microVU --------------------------------------------- -Serial = SLES-51482 -Name = Downtown Run -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51488 -Name = Tour de France, Le - Centenary Edition -Region = PAL-Unk +Serial = SLUS-20176 +Name = NASCAR Heat 2002 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51492 -Name = Pro Beach Soccer -Region = PAL-Unk +Serial = SLUS-20177 +Name = Test Drive - Off-Road - Wide Open +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51493 -Name = Mr. Golf -Region = PAL-Unk +Serial = SLUS-20178 +Name = Giants - Citizen Kabuto +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51495 -Name = SX Superstar -Region = PAL-M4 +Serial = SLUS-20179 +Name = X-Files - Resist or Serve +Region = NTSC-U Compat = 5 -[patches = 96B76E56] - - comment=patches by Nachbrenner - - //fix IPU busy! - patch=0,EE,003300b0,word,03e00008 - patch=0,EE,003300b4,word,00000000 - -[/patches] --------------------------------------------- -Serial = SLES-51496 -Name = Breath of Fire: Dragon Quarter -Region = PAL-M5 +Serial = SLUS-20181 +Name = Escape from Monkey Island +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51503 -Name = Ace Lightning -Region = PAL-Unk +Serial = SLUS-20182 +Name = Stretch Panic +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51504 -Name = Chessmaster -Region = PAL-Unk +Serial = SLUS-20183 +Name = Tiny Toon Adventures - Defenders Of The Universe +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51507 -Name = Futurama -Region = PAL-M5 +Serial = SLUS-20184 +Name = Resident Evil - CODE Veronica X +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51508 -Name = Hulk, The -Region = PAL-Unk +Serial = SLUS-20186 +Name = Monster Jam - Maximum Destruction +Region = NTSC-U --------------------------------------------- -Serial = SLES-51509 -Name = World of Outlaws - Sprint Cars -Region = PAL-Unk +Serial = SLUS-20187 +Name = NBA Street +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51510 -Name = Dancing Stage Fever MegaMix -Region = PAL-M5 +Serial = SLUS-20189 +Name = Tokyo Xtreme Racer Zero +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51511 -Name = Crash Nitro Kart -Region = PAL-Unk +Serial = SLUS-20190 +Name = Monster Rancher 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51523 -Name = Conflict - Desert Storm II -Region = PAL-Unk +Serial = SLUS-20191 +Name = Defender +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51525 -Name = Fallout - Brotherhood of Steel -Region = PAL-Unk +Serial = SLUS-20194 +Name = Grandia II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51526 -Name = Fallout - Brotherhood of Steel -Region = PAL-Unk +Serial = SLUS-20195 +Name = Dragon Rage +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51541 -Name = Grand Theft Auto - San Andreas -Region = PAL-Unk +Serial = SLUS-20196 +Name = Soccer America +Region = NTSC-U --------------------------------------------- -Serial = SLES-51547 -Name = Next Generation Tennis 2003 -Region = PAL-Unk +Serial = SLUS-20197 +Name = Pac-Man Fever +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51548 -Name = This is Football -Region = PAL-I-S +Serial = SLUS-20198 +Name = Fire Blade +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51553 -Name = Chaos Legion -Region = PAL-Unk +Serial = SLUS-20199 +Name = Shaun Palmer's Pro Snowboarder +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51554 -Name = Cell Damage Overdrive -Region = PAL-Unk +Serial = SLUS-20202 +Name = Crazy Taxi +Region = NTSC-U +Compat = 5 +[patches = F00293CA] + + comment=patches by Nachbrenner + + //skip movie "PlaySega" + patch=0,EE,001a0b50,word,03e00008 + patch=0,EE,001a0b54,word,00000000 + //skip movie "PlayAcclaim" + patch=0,EE,001a0ce8,word,03e00008 + patch=0,EE,001a0cec,word,00000000 + +[/patches] +[patches = 4C9EE7DF] + + comment=patches by Nachbrenner + + //skip movie "PlaySega" + patch=0,EE,001a1950,word,03e00008 + patch=0,EE,001a1954,word,00000000 + //skip movie "PlayAcclaim" + patch=0,EE,001a1ae8,word,03e00008 + patch=0,EE,001a1aec,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLES-51555 -Name = Play It Pinball -Region = PAL-Unk +Serial = SLUS-20204 +Name = Smuggler's Run 2 - Hostile Territory +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51557 -Name = Broken Sword - The Sleeping Dragon -Region = PAL-Unk +Serial = SLUS-20205 +Name = Casper Spirit Dimensions +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51579 -Name = Yu-Gi-Oh! - The Duelists of the Roses -Region = PAL-Unk +Serial = SLUS-20206 +Name = Army Men - RTS +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51580 -Name = London Racer World Challenge -Region = PAL-Unk +Serial = SLUS-20207 +Name = Le Mans - 24 Hours +Region = NTSC-U --------------------------------------------- -Serial = SLES-51581 -Name = Dead to Rights -Region = PAL-M4 +Serial = SLUS-20208 +Name = Sunny Garcia Surfing +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51584 -Name = F1 Career Challenge -Region = PAL-Unk +Serial = SLUS-20209 +Name = Midnight Club II +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51588 -Name = Evil Dead - A Fistful of Boomstick (with Bonus DVD Movie) -Region = PAL-Unk +Serial = SLUS-20210 +Name = 18 Wheeler - American Pro Trucker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51589 -Name = Resident Evil - Outbreak -Region = PAL-M5 +Serial = SLUS-20211 +Name = Top Gun - Combat Zone +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51590 -Name = Cabela's Big Game Hunter -Region = PAL-Unk +Serial = SLUS-20212 +Name = Bloody Roar 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51594 -Name = Disney's Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20213 +Name = Test Drive +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51595 -Name = Grand Theft Auto - Vice City -Region = PAL-Unk +Serial = SLUS-20214 +Name = State of Emergency +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51600 -Name = WWE Crush Hour -Region = PAL-Unk +Serial = SLUS-20216 +Name = Devil May Cry +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51602 -Name = All-Stars Baseball 2004 -Region = PAL-Unk +Serial = SLUS-20217 +Name = Arctic Thunder +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51603 -Name = Seek & Destroy -Region = PAL-Unk +Serial = SLUS-20218 +Name = Stunt GP +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51605 -Name = Motorsiege - Warriors of Prime Time -Region = PAL-E +Serial = SLUS-20219 +Name = Time Crisis II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51606 -Name = Unlimited Saga -Region = PAL-E +Serial = SLUS-20220 +Name = Dead to Rights +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51615 -Name = King of Route 66, The -Region = PAL-Unk +Serial = SLUS-20221 +Name = Vampire Night +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-51616 -Name = Virtua Fighter 4 Evolution -Region = PAL-Unk +Serial = SLUS-20222 +Name = MTV - Music Generator 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51617 -Name = Starsky & Hutch -Region = PAL-Unk +Serial = SLUS-20223 +Name = Splashdown +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51618 -Name = Starsky & Hutch -Region = PAL-Unk +Serial = SLUS-20224 +Name = Pac-Man World 2 +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51619 -Name = Clock Tower 3 -Region = PAL-M5 +Serial = SLUS-20225 +Name = Gadget Racers +Region = NTSC-U Compat = 5 +[patches = 03854A28] + //Patched by Prafull + //Fixes vsync issues + patch=0,EE,001a62ac,word,03e00008 + //Avoid hang at first loading screen + patch=0,EE,001a6288,word,00000000 + //Skips movies + patch=0,EE,001b1700,word,24020001 +[/patches] --------------------------------------------- -Serial = SLES-51620 -Name = Black and Bruised -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51621 -Name = Dirt Track Devils -Region = PAL-Unk +Serial = SLUS-20226 +Name = Batman - Vengeance +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51622 -Name = Maxxed Out Racing -Region = PAL-E +Serial = SLUS-20227 +Name = Star Trek Voyager - Elite Force +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51623 -Name = Sniper 2, The -Region = PAL-E +Serial = SLUS-20228 +Name = Silent Hill 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51624 -Name = Eternal Quest -Region = PAL-E +Serial = SLUS-20229 +Name = Jonny Moseley - Mad Trix +Region = NTSC-U +Compat = 2 +--------------------------------------------- +Serial = SLUS-20230 +Name = Max Payne +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51625 -Name = Ultimate Mindgames -Region = PAL-Unk +Serial = SLUS-20231 +Name = Herdy Gerdy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51629 -Name = International Pool Championship -Region = PAL-Unk +Serial = SLUS-20232 +Name = Thunderstrike - Operation Phoenix +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51630 -Name = Play It Chess Challenger -Region = PAL-Unk +Serial = SLUS-20233 +Name = Mobile Suit Gundam - Zeonic Front +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51633 -Name = Racing Simulation 3 -Region = PAL-M5 +Serial = SLUS-20234 +Name = MX Rider +Region = NTSC-U --------------------------------------------- -Serial = SLES-51636 -Name = XGRA - Extreme G Racing Association -Region = PAL-Unk +Serial = SLUS-20235 +Name = Superman - Shadow of Apokolips +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51646 -Name = Energy Airforce -Region = PAL-Unk +Serial = SLUS-20236 +Name = Taz Wanted +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51649 -Name = Judge Dredd vs. Judge Death -Region = PAL-Unk +Serial = SLUS-20237 +Name = ESPN - X Games Skateboarding +Region = NTSC-U --------------------------------------------- -Serial = SLES-51650 -Name = Judge Dredd - Dredd vs. Death -Region = PAL-Unk +Serial = SLUS-20238 +Name = Crash Bandicoot - The Wrath of Cortex +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51653 -Name = Mace Griffin - Bounty Hunter -Region = PAL-E +Serial = SLUS-20239 +Name = Driven +Region = NTSC-U --------------------------------------------- -Serial = SLES-51654 -Name = Mace Griffin - Bounty Hunter -Region = PAL-G +Serial = SLUS-20240 +Name = Conflict Zone +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51658 -Name = Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20241 +Name = NCAA Football 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51659 -Name = Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20242 +Name = Legends of Wrestling +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51660 -Name = Risk - Global Domination -Region = PAL-Unk +Serial = SLUS-20243 +Name = Silent Scope 2 - Dark Silhouette +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51661 -Name = Dynasty Warriors 4 -Region = PAL-Unk +Serial = SLUS-20244 +Name = RoboTech BattleCry +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51662 -Name = Dynasty Warriors 4 -Region = PAL-Unk +Serial = SLUS-20245 +Name = Jeremy McGrath - Supercross World 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51663 -Name = Dynasty Warriors 4 -Region = PAL-G +Serial = SLUS-20246 +Name = Capcom vs. SNK 2 - Mark of the Millennium 2001 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51664 -Name = Dynasty Warriors 4 -Region = PAL-Unk +Serial = SLUS-20247 +Name = Tetris Worlds +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51665 -Name = Dynasty Warriors 4 -Region = PAL-Unk +Serial = SLUS-20249 +Name = Armored Core 2 - Another Age +Region = NTSC-U +// can import data from regular Armored Core 2 +MemCardFilter = SLUS-20249/SLUS-20014 --------------------------------------------- -Serial = SLES-51666 -Name = Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20250 +Name = Stuntman +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51667 -Name = Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20251 +Name = Harvest Moon - Save the Homeland +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51668 -Name = Piglet's Big Game -Region = PAL-Unk +Serial = SLUS-20252 +Name = UFC - Ultimate Fighting Championship - Throwdown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51670 -Name = Alter Echo -Region = PAL-E +Serial = SLUS-20253 +Name = Mummy Returns, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51671 -Name = Alter Echo -Region = PAL-Unk +Serial = SLUS-20255 +Name = Gallop Racer 2001 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51675 -Name = Psyvariar -Region = PAL-Unk +Serial = SLUS-20257 +Name = Frogger - The Great Quest +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51678 -Name = Super Farm -Region = PAL-Unk +Serial = SLUS-20259 +Name = Wizadry - Tale of the Forsaken Land +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51680 -Name = Splashdown 2 - Rides Gone Wild -Region = PAL-Unk +Serial = SLUS-20261 +Name = ESPN - NBA 2 Night 2002 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51681 -Name = Splashdown 2 - Rides Gone Wild -Region = PAL-Unk +Serial = SLUS-20262 +Name = Rugby 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51682 -Name = Headhunter - Redemption -Region = PAL-Unk +Serial = SLUS-20263 +Name = Madden NFL 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51686 -Name = Pitfall - The Lost Expedition -Region = PAL-Unk +Serial = SLUS-20264 +Name = F1 2001 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51687 -Name = Pitfall - The Lost Expedition -Region = PAL-Unk +Serial = SLUS-20265 +Name = James Bond 007 - Agent Under Fire +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51688 -Name = Pitfall - The Lost Expedition -Region = PAL-Unk +Serial = SLUS-20266 +Name = NASCAR - Thunder 2002 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51689 -Name = Pitfall - The Lost Expedition -Region = PAL-Unk +Serial = SLUS-20267 +Name = dot Hack - Part 1 - Infection +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564 --------------------------------------------- -Serial = SLES-51690 -Name = Pitfall - The Lost Expedition -Region = PAL-Unk +Serial = SLUS-20268 +Name = Star Wars - Racer Revenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51693 -Name = Suffering, The -Region = PAL-E +Serial = SLUS-20270 +Name = Eve of Extinction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51696 -Name = Dragon's Lair 3D - Special Edition -Region = PAL-Unk +Serial = SLUS-20271 +Name = Shifters +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51697 -Name = SSX 3 -Region = PAL-M5 +Serial = SLUS-20272 +Name = Rayman Arena +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51698 -Name = Mobile Light Force 2 -Region = PAL-M5 +Serial = SLUS-20273 +Name = Namco Museum +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51699 -Name = Virtua Fighter - 10th Anniversary Edition -Region = PAL-Unk +Serial = SLUS-20274 +Name = City Crisis +Region = NTSC-U --------------------------------------------- -Serial = SLES-51702 -Name = Battlestar Galactica - Apostasy -Region = PAL-Unk +Serial = SLUS-20275 +Name = Kessen 2 +Region = NTSC-U +Compat = 5 +[patches = 53A803AF] + comment=COP2 flag instance patch by refraction + // a mac flag check just after a vsub which gets in the way, rearranging + patch=0,EE,0016EFB0,word,48438800 + patch=0,EE,0016EFB4,word,4BE521AC + patch=0,EE,0016EFB8,word,30848000 + patch=0,EE,0016EFBC,word,4BE72B3C +[/patches] --------------------------------------------- -Serial = SLES-51704 -Name = XII Stag -Region = PAL-Unk +Serial = SLUS-20277 +Name = Dynasty Warriors 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51705 -Name = Ford Racing 2 -Region = PAL-Unk +Serial = SLUS-20278 +Name = Yanya Caballista - City Skater +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51707 -Name = Secret Weapons Over Normandy -Region = PAL-Unk +Serial = SLUS-20279 +Name = X-Men - Next Dimension +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51708 -Name = Secret Weapons over Normandy -Region = PAL-Unk +Serial = SLUS-20280 +Name = FIFA 2002 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51709 -Name = Secret Weapons over Normandy -Region = PAL-Unk +Serial = SLUS-20281 +Name = NHL 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51710 -Name = Secret Weapons over Normandy -Region = PAL-Unk +Serial = SLUS-20282 +Name = Victorious Boxers - Ippo's Road to Glory +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51711 -Name = Secret Weapons over Normandy -Region = PAL-Unk +Serial = SLUS-20283 +Name = World of Outlaws - Sprint Cars 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51712 -Name = Snowboard Racer 2 -Region = PAL-Unk +Serial = SLUS-20284 +Name = Freaky Flyers +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51713 -Name = Bust-A-Bloc -Region = PAL-Unk +Serial = SLUS-20285 +Name = Moto GP 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51714 -Name = BCV - Battle Construction Vehicles -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51715 -Name = Seed, The - War Zone -Region = PAL-E +Serial = SLUS-20286 +Name = Smash Court Tennis - Pro Tournament +Region = NTSC-U --------------------------------------------- -Serial = SLES-51716 -Name = A-Train 6 -Region = PAL-Unk +Serial = SLUS-20287 +Name = Guilty Gear X +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51717 -Name = Boxing Champions -Region = PAL-Unk +Serial = SLUS-20288 +Name = Godai - Elemental Force +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51718 -Name = League Series Baseball 2 -Region = PAL-Unk +Serial = SLUS-20291 +Name = Big Mutha Truckers +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51720 -Name = Disney's Extreme Skate Adventure -Region = PAL-Unk -vuRoundMode = 0 +Serial = SLUS-20292 +Name = Tsugunai - Atonement +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51723 -Name = Hobbit, The -Region = PAL-Unk +Serial = SLUS-20293 +Name = Star Wars - Jedi Starfighter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51731 -Name = Bust-A-Block -Region = PAL-Unk +Serial = SLUS-20294 +Name = Gitaroo Man +Region = NTSC-U +Compat = 5 +eeRoundMode = 1 +vuRoundMode = 3 --------------------------------------------- -Serial = SLES-51732 -Name = EA Sports Rugby 2004 -Region = PAL-E +Serial = SLUS-20296 +Name = Kao the Kangaroo - Round 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51733 -Name = EA SPORTS RUGBY 2004 -Region = PAL-Unk +Serial = SLUS-20297 +Name = Return to Castle Wolfenstein - Operation Resurrection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51735 -Name = Perfect Ace - Pro Tournament Tennis -Region = PAL-M5 +Serial = SLUS-20298 +Name = High Heat - Major League Baseball 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51741 -Name = 1945 I & II - The Arcade Games -Region = PAL-Unk +Serial = SLUS-20299 +Name = Street Hoops - King of the Court +Region = NTSC-U --------------------------------------------- -Serial = SLES-51746 -Name = Space Invaders - Invasion Day -Region = PAL-Unk +Serial = SLUS-20300 +Name = Dark Summit +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51749 -Name = Mark Davis Pro Bass Challenge -Region = PAL-Unk +Serial = SLUS-20301 +Name = Hidden Invasion +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51750 -Name = Charlie's Angels -Region = PAL-M3 +Serial = SLUS-20302 +Name = Extreme-G Racing - XG3 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51752 -Name = Tony Hawks Underground -Region = PAL-Unk -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20303 +Name = NBA Live 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51753 -Name = True Crime - Streets of L.A. -Region = PAL-Unk +Serial = SLUS-20305 +Name = Simpsons, The - Road Rage +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51754 -Name = True Crime - Streets of L.A. -Region = PAL-Unk +Serial = SLUS-20306 +Name = Contra - Shattered Soldier +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51755 -Name = Disney-Pixar's Finding Nemo -Region = PAL-Unk +Serial = SLUS-20307 +Name = Burnout +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51756 -Name = Batman 2 - The Rise of Sin Tsu -Region = PAL-Unk +Serial = SLUS-20308 +Name = ESPN - NFL Prime Time 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51757 -Name = Dancing Stage Fever -Region = PAL-Unk +Serial = SLUS-20309 +Name = Jade Cocoon 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51758 -Name = Metal Arms - Glitch in the System -Region = PAL-Unk +Serial = SLUS-20310 +Name = Gravity Games Bike - Street Vert. Dirt +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51759 -Name = Maximo vs. Army of Zin -Region = PAL-Unk +Serial = SLUS-20311 +Name = All-Star Baseball 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51761 -Name = Italian Job, The - L.A. Heist -Region = PAL-Unk +Serial = SLUS-20312 +Name = Final Fantasy X +Region = NTSC-U +Compat = 5 +IPUWaitHack = 1 --------------------------------------------- -Serial = SLES-51765 -Name = Volleyball Xciting -Region = PAL-Unk +Serial = SLUS-20313 +Name = Wave Rally +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51766 -Name = Gladiator - Sword of Vengeance -Region = PAL-Unk +Serial = SLUS-20314 +Name = TimeSplitters 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51772 -Name = Bad Boys II -Region = PAL-E +Serial = SLUS-20315 +Name = Spyro the Dragon - Enter the Dragonfly +Region = NTSC-U +Compat = 5 +[patches = 4B8E0DE8] + comment=Spyro NTSC startup fix + patch=1,EE,001e71dc,word,24020001 +[/patches] --------------------------------------------- -Serial = SLES-51778 -Name = Summer Heat Beach Volleyball -Region = PAL-M5 +Serial = SLUS-20316 +Name = WWF SmackDown! - Just Bring It! +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51782 -Name = Fire Warrior -Region = PAL-Unk +Serial = SLUS-20318 +Name = King's Field IV +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51783 -Name = Starsky & Hutch -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20319 +Name = Romance of the Three Kingdoms VII +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51785 -Name = Cool Shot -Region = PAL-Unk +Serial = SLUS-20320 +Name = ESPN - International Winter Sports 2002 +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20321 +Name = ESPN - Winter X Games - Snowboarding 2002 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51787 -Name = Harry Potter - Quidditch World Cup -Region = PAL-Unk +Serial = SLUS-20322 +Name = NFL 2K2 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-51792 -Name = Aliens vs. Predator - Extinction -Region = PAL-Unk +Serial = SLUS-20323 +Name = Virtua Fighter 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51794 -Name = Looney Toons - Back in Action -Region = PAL-M5 +Serial = SLUS-20324 +Name = Paris Dakar Rally +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51797 -Name = Madden NFL 2004 -Region = PAL-Unk +Serial = SLUS-20325 +Name = Bass Strike +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51798 -Name = NHL 2004 -Region = PAL-Unk +Serial = SLUS-20326 +Name = SSX Tricky +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51799 -Name = Soul Calibur II -Region = PAL-M5 -Compat = 3 +Serial = SLUS-20327 +Name = Aggressive Inline +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51800 -Name = Smash Cars Racing -Region = PAL-Unk +Serial = SLUS-20328 +Name = Tekken 4 +Region = NTSC-U +Compat = 5 +[patches = 833FE0A4] + + comment=patches by Shadow Lady + //IPU BUSY! fix... + patch=0,EE,002917e4,word,24200001 + patch=0,EE,002919e4,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLES-51806 -Name = Evil Dead - A Fistful of Boomstick -Region = PAL-Unk +Serial = SLUS-20329 +Name = Pro Race Driver +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51812 -Name = Homerun -Region = PAL-Unk +Serial = SLUS-20330 +Name = NBA 2K2 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-51813 -Name = European Tennis Pro -Region = PAL-Unk +Serial = SLUS-20331 +Name = Minority Report - Everybody Runs +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51814 -Name = ATV Off-Road Fury 2 -Region = PAL-Unk +Serial = SLUS-20332 +Name = NCAA March Madness 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51815 -Name = Final Fantasy X-2 -Region = PAL-E +Serial = SLUS-20333 +Name = Turok - Evolution +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51816 -Name = Final Fantasy X-2 -Region = PAL-F ---------------------------------------------- -Serial = SLES-51817 -Name = Final Fantasy X-2 -Region = PAL-G +Serial = SLUS-20334 +Name = Kelly Slater's Pro Surfer +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51818 -Name = Final Fantasy X-2 -Region = PAL-I +Serial = SLUS-20335 +Name = Matt Hoffman's Pro BMX 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51819 -Name = Final Fantasy X-2 -Region = PAL-S +Serial = SLUS-20336 +Name = Spider-Man - The Movie +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51821 -Name = Alias -Region = PAL-Unk +Serial = SLUS-20337 +Name = X-Men - Wolverines Revenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51822 -Name = Alias -Region = PAL-Unk +Serial = SLUS-20339 +Name = Bass Fishing Duel - Sega Sports +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51823 -Name = Hunter - The Reckoning Wayward -Region = PAL-Unk +Serial = SLUS-20340 +Name = RPG Maker 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51824 -Name = Colin McRae Rally '04 -Region = PAL-M5 +Serial = SLUS-20341 +Name = Woody Woodpecker - Escape from Buzz Buzzard Park +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51825 -Name = Pop Idol -Region = PAL-Unk +Serial = SLUS-20342 +Name = Top Angler - Real Bass Fishing +Region = NTSC-U --------------------------------------------- -Serial = SLES-51826 -Name = AFL Live 2004 -Region = PAL-E +Serial = SLUS-20343 +Name = Forever Kingdom +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51828 -Name = Gladiator - Sword of Vengeance -Region = PAL-Unk +Serial = SLUS-20344 +Name = Rez +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51831 -Name = Sphinx and The Cursed Mummy -Region = PAL-Unk -OPHFLagHack = 1 +Serial = SLUS-20345 +Name = Mike Tyson - Heavyweight Boxing +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51833 -Name = Premier Manager 2003-2004 -Region = PAL-Unk +Serial = SLUS-20346 +Name = AirBlade +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51834 -Name = Premier Manager 2003-2004 -Region = PAL-Unk +Serial = SLUS-20347 +Name = Shadow Hearts +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51838 -Name = Asterix & Obelix XXL2 -Region = PAL-Unk +Serial = SLUS-20348 +Name = Monopoly Party +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51839 -Name = DragonBall Z - Budokai 2 -Region = PAL-Unk +Serial = SLUS-20349 +Name = Scooby Doo! Night of 100 Frights +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51840 -Name = NHL Hitz Pro -Region = PAL-Unk +Serial = SLUS-20352 +Name = Looney Tunes Space Race +Region = NTSC-U --------------------------------------------- -Serial = SLES-51841 -Name = SpyHunter 2 -Region = PAL-Unk +Serial = SLUS-20353 +Name = King's Field IV - The Ancient City +Region = NTSC-U --------------------------------------------- -Serial = SLES-51842 -Name = Road Kill -Region = PAL-Unk +Serial = SLUS-20354 +Name = Red Card Soccer 2003 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51843 -Name = Worms 3D -Region = PAL-Unk +Serial = SLUS-20355 +Name = Tom & Jerry - War of the Whiskers +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51845 -Name = Barbie - Horse Adventure -Region = PAL-Unk +Serial = SLUS-20356 +Name = Transworld Surf +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51846 -Name = Deutschland sucht den Superstar -Region = PAL-G +Serial = SLUS-20357 +Name = WTA Tour Tennis +Region = NTSC-U --------------------------------------------- -Serial = SLES-51848 -Name = Tony Hawk's Underground -Region = PAL-E +Serial = SLUS-20358 +Name = Malice +Region = NTSC-U Compat = 5 -vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLES-51850 -Name = Basketball Xciting -Region = PAL-Unk +Serial = SLUS-20360 +Name = Blade 2 +Region = NTSC-U +Compat = 5 +EETimingHack = 1 // Only is needed from r4821 and later versions. --------------------------------------------- -Serial = SLES-51851 -Name = Tony Hawk's Underground -Region = PAL-F -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20361 +Name = Rally Fusion - Race of Champions +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51852 -Name = Thug MOTX [Demo] -Region = PAL-Unk -Compat = 2 +Serial = SLUS-20362 +Name = Need for Speed - Hot Pursuit 2 +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //white textures --------------------------------------------- -Serial = SLES-51853 -Name = Tony Hawk's Underground -Region = PAL-F -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20363 +Name = Sled Storm +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51854 -Name = Tony Hawk Underground -Region = PAL-Unk -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20364 +Name = Tiger Woods PGA Tour 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51855 -Name = Tank Elite -Region = PAL-Unk +Serial = SLUS-20365 +Name = Pirates - Legend of Black Kat +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51856 -Name = Monster Attack -Region = PAL-Unk +Serial = SLUS-20366 +Name = Triple Play 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51859 -Name = Billiards Xciting -Region = PAL-Unk +Serial = SLUS-20367 +Name = Freekstyle +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51860 -Name = Tennis Court Smash -Region = PAL-Unk -Compat = 3 +Serial = SLUS-20368 +Name = Medal of Honor - Frontline +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51861 -Name = Bowling Xciting -Region = PAL-Unk +Serial = SLUS-20369 +Name = Knockout Kings 2002 +Region = NTSC-U +Compat = 5 +[patches = 36FEEE3A] + + comment=patches by Nachbrenner + + //fix DMA loop + patch=0,EE,001d8020,word,1000000f + +[/patches] --------------------------------------------- -Serial = SLES-51862 -Name = Bass Master Fishing -Region = PAL-Unk +Serial = SLUS-20370 +Name = Kingdom Hearts +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51863 -Name = Maze Action -Region = PAL-Unk +Serial = SLUS-20371 +Name = Thing, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51864 -Name = Police Chase Down -Region = PAL-Unk +Serial = SLUS-20373 +Name = Men in Black 2 - Alien Escape +Region = NTSC-U +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-51865 -Name = Heartbeat Boxing -Region = PAL-Unk +Serial = SLUS-20374 +Name = Hitman 2 - Silent Assassin +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51867 -Name = Dynasty Tactics 2 -Region = PAL-Unk +Serial = SLUS-20375 +Name = Mister Mosquito +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51868 -Name = Dynasty Tactics 2 -Region = PAL-Unk +Serial = SLUS-20376 +Name = Mad Maestro +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51869 -Name = Dynasty Tactics 2 -Region = PAL-Unk +Serial = SLUS-20377 +Name = Metropolismania +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51870 -Name = Disney-Pixar's Finding Nemo -Region = PAL- +Serial = SLUS-20378 +Name = Salt Lake 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51871 -Name = Disney-Pixar's Finding Nemo -Region = PAL-Unk +Serial = SLUS-20379 +Name = Dark Angel - James Cameron's +Region = NTSC-U --------------------------------------------- -Serial = SLES-51872 -Name = Disney-Pixar's Finding Nemo -Region = PAL-unk +Serial = SLUS-20380 +Name = Jurassic Park - Operation Genesis +Region = NTSC-U --------------------------------------------- -Serial = SLES-51873 -Name = Medal of Honor - Rising Sun -Region = PAL-Unk +Serial = SLUS-20381 +Name = MX Superfly +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51874 -Name = Medal of Honor - Rising Sun -Region = PAL-F +Serial = SLUS-20382 +Name = Mobile Suit Gundam - Federation vs. Zeon +Region = NTSC-U --------------------------------------------- -Serial = SLES-51875 -Name = Medal of Honor - Rising Sun -Region = PAL-Unk +Serial = SLUS-20383 +Name = Vexx +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51876 -Name = Medal of Honor - Rising Sun -Region = PAL-F +Serial = SLUS-20384 +Name = Skygunner +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51877 -Name = Bloody Roar 4 -Region = PAL-Unk +Serial = SLUS-20385 +Name = WWE Crush Hour +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51879 -Name = Hot Wheels World Race -Region = PAL-Unk +Serial = SLUS-20386 +Name = Lethal Skies - Elite Pilot - Team SW +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51881 -Name = Mercedes Bens World Racing -Region = PAL-Unk +Serial = SLUS-20387 +Name = Suikoden III +Region = NTSC-U +Compat = 5 +// allows import of Suikoden II clear data +MemCardFilter = SLUS-20387/SLUS-00958 --------------------------------------------- -Serial = SLES-51883 -Name = Scooby Doo! Mystery Mayhem -Region = PAL-Unk +Serial = SLUS-20388 +Name = Fatal Frame +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51885 -Name = MegaMan X7 -Region = PAL-M5 +Serial = SLUS-20389 +Name = Endgame +Region = NTSC-U Compat = 5 -eeClampMode = 3 //For camera issues in some scenes. --------------------------------------------- -Serial = SLES-51886 -Name = Lethal Skies 2 -Region = PAL-Unk +Serial = SLUS-20390 +Name = Risk - Global Domination +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51887 -Name = Tiger Woods PGA Tour 2004 -Region = PAL-Unk +Serial = SLUS-20391 +Name = Terminator, The - Dawn of Fate +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51888 -Name = RTL Skiijumping 2004 -Region = PAL-M2 +Serial = SLUS-20392 +Name = Antz Extreme Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51890 -Name = Buffy the Vampire Slayer - Chaos Bleeds -Region = PAL-Unk +Serial = SLUS-20393 +Name = Onimusha 2 - Samurai's Destiny +Region = NTSC-U Compat = 5 -OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-51893 -Name = Naval Ops - Warship Gunner -Region = PAL-Unk +Serial = SLUS-20394 +Name = Ecco the Dolphin - Defender of the Future +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-51896 -Name = Gallop Racer -Region = PAL-Unk +Serial = SLUS-20395 +Name = GTC Africa +Region = NTSC-U --------------------------------------------- -Serial = SLES-51897 -Name = Simpsons, The - Hit & Run -Region = PAL-Unk +Serial = SLUS-20397 +Name = Tenchu 3 - Wrath of Heaven +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51903 -Name = AFL Live 2004 - Aussie Rules Football -Region = PAL-Unk +Serial = SLUS-20398 +Name = Road Trip +Region = NTSC-U --------------------------------------------- -Serial = SLES-51906 -Name = Rolling -Region = PAL-Unk +Serial = SLUS-20399 +Name = MTX Mototrax +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51908 -Name = Van Helsing -Region = PAL-Unk +Serial = SLUS-20400 +Name = Mission Impossible - Operation Surma +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51911 -Name = Gadget Racers -Region = PAL-Unk +Serial = SLUS-20402 +Name = Britney's Dance Beat +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51912 -Name = Pro Evolution Soccer 3 -Region = PAL-M4 +Serial = SLUS-20403 +Name = Evil Dead - A Fistful of Boomstick +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51913 -Name = Onimusha Blade Warrior -Region = PAL-Unk +Serial = SLUS-20404 +Name = FIFA World Cup 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51914 -Name = Onimusha 3 - Demon Siege -Region = PAL-Unk +Serial = SLUS-20405 +Name = Downforce +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51915 -Name = Pro Evolution Soccer 3 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51916 -Name = Crouching Tiger, Hidden Dragon -Region = PAL-Unk +Serial = SLUS-20406 +Name = Pride FC - Fighting Championships +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51917 -Name = Beyond Good and Evil -Region = PAL-M6 +Serial = SLUS-20407 +Name = Way of the Samurai +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51918 -Name = Prince of Persia - The Sands of Time -Region = PAL-M5 +Serial = SLUS-20408 +Name = Pitfall - The Lost Expedition +Region = NTSC-U Compat = 4 --------------------------------------------- -Serial = SLES-51924 -Name = World War Zero - Ironstorm -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51925 -Name = Splashdown 2 - Rides Gone Wild -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51926 -Name = Outlaw Golf -Region = PAL-Unk +Serial = SLUS-20409 +Name = Total Immersion Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51927 -Name = Midway Arcade Treasures -Region = PAL-Unk +Serial = SLUS-20412 +Name = Hot Wheels - Velocity X +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51930 -Name = Road Rage 3 -Region = PAL-Unk +Serial = SLUS-20413 +Name = Shadow Man - 2econd Coming +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-51931 -Name = Teenage Mutant Ninja Turtles -Region = PAL-Unk +Serial = SLUS-20414 +Name = Legaia 2 - Duel Saga +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51932 -Name = Jimmy Neutron - Jet Fusion -Region = PAL-Unk +Serial = SLUS-20415 +Name = BMX XXX +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51933 -Name = Gregory Horror Show -Region = PAL-Unk -Compat = 1 +Serial = SLUS-20416 +Name = Headhunter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51934 -Name = Curse - The Eye of Isis -Region = PAL-Unk +Serial = SLUS-20417 +Name = Grandia Xtreme +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51946 -Name = Robin Hood - Defender of the Crown -Region = PAL-Unk +Serial = SLUS-20418 +Name = Wakeboarding Unleashed featuring Shaun Murray +Region = NTSC-U Compat = 2 --------------------------------------------- -Serial = SLES-51947 -Name = ESPN NFL 2K4 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51948 -Name = ESPN NHL Hockey 2K4 -Region = PAL-Unk +Serial = SLUS-20419 +Name = WRC - World Rally Championship +Region = NTSC-U --------------------------------------------- -Serial = SLES-51949 -Name = NBA 2K4 -Region = PAL-Unk +Serial = SLUS-20420 +Name = Star Wars - Bounty Hunter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51950 -Name = Sonic Heroes -Region = PAL-Unk +Serial = SLUS-20421 +Name = Battlestar Galactica +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51951 -Name = Puyo Pop Fever -Region = PAL-Unk +Serial = SLUS-20422 +Name = Hulk, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51952 -Name = R-Type Final -Region = PAL-E +Serial = SLUS-20423 +Name = Mortal Kombat - Deadly Alliance +Region = NTSC-U Compat = 5 -EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLES-51953 -Name = FIFA 2004 -Region = PAL-E-Sw +Serial = SLUS-20424 +Name = Scorpion King, The - Rise of the Akkadian +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51954 -Name = Max Payne 2 - The Fall of Max Payne -Region = PAL-Unk -vuClampMode = 2 +Serial = SLUS-20425 +Name = Spongebob Squarepants - Revenge of the Flying Dutchman +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51956 -Name = Bionicle - The Game -Region = PAL-Unk +Serial = SLUS-20428 +Name = Fisherman's Bass Club +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51957 -Name = Terminator 3 - Rise of the Machines -Region = PAL-Unk +Serial = SLUS-20429 +Name = Riding Spirits +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51958 -Name = Whiplash -Region = PAL-Unk +Serial = SLUS-20430 +Name = Savage Skies +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51959 -Name = Football Generation -Region = PAL-Unk +Serial = SLUS-20431 +Name = Wreckless - The Yakuza Missions +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51963 -Name = FIFA 2004 -Region = PAL-Unk +Serial = SLUS-20433 +Name = SWAT - Global Strike Team +Region = NTSC-U +Compat = 5 +eeClampMode = 3 //For grey screen ingame. --------------------------------------------- -Serial = SLES-51964 -Name = FIFA 2004 -Region = PAL-Unk +Serial = SLUS-20434 +Name = Myst III - Exile +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51966 -Name = Bombastic -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20435 +Name = Armored Core 3 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51967 -Name = Need for Speed - Underground -Region = PAL-M4 +Serial = SLUS-20436 +Name = Guilty Gear X2 +Region = NTSC-U Compat = 5 -EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SLES-51968 -Name = Spongebob Squarepants - Battle for Bikini Bottom -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-51970 -Name = Spongebob Schwammkopf - Schlacht um Bikini Bottom -Region = PAL-G +Serial = SLUS-20437 +Name = Dance Dance Revolution MAX +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51972 -Name = NBA Jam 2004 -Region = PAL-Unk +Serial = SLUS-20438 +Name = NHL Hitz 2003 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51973 -Name = War Chess -Region = PAL-Unk +Serial = SLUS-20439 +Name = Futurama +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51974 -Name = XS Junior League Soccer -Region = PAL-E +Serial = SLUS-20440 +Name = Kya - Dark Lineage +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51976 -Name = Tom Clancy's Ghost Recon - Jungle Storm -Region = PAL-M5 +Serial = SLUS-20441 +Name = NASCAR - Dirt to Daytona +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51978 -Name = Baphomets Fluch - Der Schlafende Drache -Region = PAL-G +Serial = SLUS-20442 +Name = Red Faction 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-51980 -Name = TT Superbikes -Region = PAL-Unk +Serial = SLUS-20443 +Name = Rugrats - Royal Ransom +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51981 -Name = ShellShock - Nam '67 -Region = PAL-Unk +Serial = SLUS-20444 +Name = Tankers +Region = NTSC-U --------------------------------------------- -Serial = SLES-51982 -Name = ShellShock - Nam '67 -Region = PAL-Unk +Serial = SLUS-20445 +Name = Robot Alchemic Drive - RAD +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51986 -Name = Backyard Wrestling - Don't Try This At Home -Region = PAL-Unk +Serial = SLUS-20446 +Name = Agassi Tennis Generation +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51989 -Name = Wallace & Gromit in Project Zoo -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20448 +Name = Summoner 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51991 -Name = Dance UK -Region = PAL-Unk +Serial = SLUS-20452 +Name = Egg Mania - Eggstreme Madness +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-51996 -Name = International Snooker Championship -Region = PAL-M5 +Serial = SLUS-20453 +Name = NCAA Football 2K3 +Region = NTSC-U --------------------------------------------- -Serial = SLES-51997 -Name = SWAT - Global Strike Team -Region = PAL-Unk +Serial = SLUS-20454 +Name = Enter the Matrix +Region = NTSC-U Compat = 5 -eeClampMode = 3 //For grey screen ingame. ---------------------------------------------- -Serial = SLES-51998 -Name = Kao the Kangaroo - Round 2 -Region = PAL-Unk +EETimingHack = 1 --------------------------------------------- -Serial = SLES-51999 -Name = GrooveRider Slot Car Thunder -Region = PAL-Unk +Serial = SLUS-20455 +Name = F1 2002 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52001 -Name = Mission Impossible - Operation Surma -Region = PAL-Unk +Serial = SLUS-20456 +Name = Soccer Mania +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52002 -Name = Rogue Ops -Region = PAL-Unk +Serial = SLUS-20457 +Name = NFL 2K3 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-52005 -Name = James Bond 007 - Everything or Nothing -Region = PAL-Unk -Compat = 2 +Serial = SLUS-20458 +Name = Dr. Muto +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52008 -Name = NBA Live 2004 -Region = PAL-Unk +Serial = SLUS-20459 +Name = Shinobi +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52011 -Name = Tak and The Power of Juju -Region = PAL-Unk +Serial = SLUS-20460 +Name = Super Bust-A-Move 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52015 -Name = Les Chevaliers de Baphomet -Region = PAL-Unk +Serial = SLUS-20461 +Name = BloodRayne +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52017 -Name = Lord of the Rings, The - Return of the King -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20462 +Name = Wipeout Fusion +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52018 -Name = Lord of the Rings, The - Return of the King (Der Herr der Ringe, Die Ruckkehr des Konigs) -Region = PAL-G +Serial = SLUS-20463 +Name = Dropship - United Peace Force +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-52019 -Name = Lord of the Rings, The - Return of the King -Region = PAL-Unk +Serial = SLUS-20464 +Name = Fugitive Hunter - War on Terror +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52020 -Name = Lord of the Rings, The - The Return of the King -Region = PAL-Unk +Serial = SLUS-20465 +Name = Alter Echo +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52021 -Name = Lord of the Rings, The - The Return of the King -Region = PAL-Unk +Serial = SLUS-20466 +Name = Gravenville - Ghost Master +Region = NTSC-U --------------------------------------------- -Serial = SLES-52022 -Name = Total Club Manager 2004 -Region = PAL-E +Serial = SLUS-20467 +Name = Tomb Raider - The Angel of Darkness // aka "TRAOD" +Region = NTSC-U +Compat = 5 +//OPHFlagHack = 1 // 08.09.2014 not needed anymore and actually causes a hang --------------------------------------------- -Serial = SLES-52023 -Name = Manhunt -Region = PAL-Unk +Serial = SLUS-20468 +Name = Dynasty Tactics +Region = NTSC-U --------------------------------------------- -Serial = SLES-52025 -Name = NFL Street -Region = PAL-Unk +Serial = SLUS-20469 +Name = Xenosaga - Episode I - Der Wille zur Macht +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52026 -Name = Wallace & Gromit in Project Zoo -Region = PAL-G -Compat = 1 -[patches = C502AD6E] - - comment=patches by Nachbrenner - - //skip sceIpuSync - patch=0,EE,00472c78,word,03e00008 - -[/patches] +Serial = SLUS-20470 +Name = EverQuest - Online Adventures +Region = NTSC-U --------------------------------------------- -Serial = SLES-52028 -Name = Junior Sports Basketball -Region = PAL-Unk +Serial = SLUS-20471 +Name = Rygar - The Legendary Adventure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52034 -Name = Dr. Seuss' Cat in the Hat -Region = PAL-Unk +Serial = SLUS-20472 +Name = Micro Machines +Region = NTSC-U --------------------------------------------- -Serial = SLES-52036 -Name = WWE SmackDown! - Here Comes the Pain! -Region = PAL-Unk +Serial = SLUS-20473 +Name = Rocket Power - Beach Bandits +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52038 -Name = Terminator 3 - Rise of the Machines -Region = PAL-Unk +Serial = SLUS-20474 +Name = NFL Blitz 2003 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52041 -Name = Detonator -Region = PAL-E +Serial = SLUS-20475 +Name = Dual Hearts +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52043 -Name = MX Unleashed Migrated -Region = PAL-Unk +Serial = SLUS-20476 +Name = NBA 2K3 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-52044 -Name = Crescent Suzuki Racing - Superbikes and Super Sidecars -Region = PAL-E +Serial = SLUS-20477 +Name = NHL 2K3 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-52045 -Name = GTR 400 -Region = PAL-Unk +Serial = SLUS-20478 +Name = Disney's PK - Out of the Shadows +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52046 -Name = James Bond 007 - Everything or Nothing (Alles oder Nichts) -Region = PAL-G +Serial = SLUS-20480 +Name = Tennis - Sega Sports +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52047 -Name = Sims, The - Bustin' Out -Region = PAL-Unk +Serial = SLUS-20482 +Name = Sphinx and the Cursed Mummy +Region = NTSC-U Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-52048 -Name = Sims, The - Bustin' Out -Region = PAL-Unk +Serial = SLUS-20483 +Name = WWE Smackdown - Shut Your Mouth +Region = NTSC-U +Compat = 5 +[patches = B0AE1898] + + comment=patched by prafull + + //skip sceipusync + patch=0,EE,0010b880,word,00000000 + patch=0,EE,0010b798,word,00000000 + patch=0,EE,0010b7c8,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLES-52055 -Name = Harry Potter and the Philosopher's Stone -Region = PAL-Unk +Serial = SLUS-20484 +Name = Devil May Cry 2 [Disc1of2] +Region = NTSC-U Compat = 5 -EETimingHack = 1 +[patches] + comment=Note that this disc has the same CRC as SLPM-65232, the NTSC-J disc. +[/patches] --------------------------------------------- -Serial = SLES-52056 -Name = Harry Potter and The Philosopher's Stone -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-20485 +Name = Dino Stalker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52058 -Name = Groove Rider - Slot Car Racing -Region = PAL-Unk +Serial = SLUS-20486 +Name = Marvel vs. Capcom 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52060 -Name = Fame Academy -Region = PAL-Unk +Serial = SLUS-20487 +Name = MegaMan X7 +Region = NTSC-U +Compat = 5 +eeClampMode = 3 //For camera issues in some scenes. --------------------------------------------- -Serial = SLES-52061 -Name = Star Academy -Region = PAL-Unk +Serial = SLUS-20488 +Name = Star Ocean 3 - Till the End of Time [Disc1of2] +Region = NTSC-U +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-52062 -Name = Pop Star Academy -Region = PAL-Unk +Serial = SLUS-20489 +Name = Whirl Tour +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52063 -Name = Alarm for Cobra 11 Autobahn -Region = PAL-Unk +Serial = SLUS-20490 +Name = Gladius +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52065 -Name = Flipnic -Region = PAL-Unk +Serial = SLUS-20491 +Name = RTX Red Rock +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52095 -Name = Gradius V -Region = PAL-Unk +Serial = SLUS-20492 +Name = Ninja Assault +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52096 -Name = Firefighter F.D. 18 -Region = PAL-Unk +Serial = SLUS-20493 +Name = Gungrave +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52097 -Name = SWAT - Global Strike Force -Region = PAL-Unk +Serial = SLUS-20494 +Name = Freestyle Metal X +Region = NTSC-U Compat = 5 -eeClampMode = 3 //For grey screen ingame. --------------------------------------------- -Serial = SLES-52100 -Name = NRL Rugby League -Region = PAL-E +Serial = SLUS-20495 +Name = Battle Engine Aquila +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52101 -Name = Wrath Unleashed -Region = PAL-Unk +Serial = SLUS-20496 +Name = V-Rally 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52102 -Name = Hugo Bukkazoom! -Region = PAL-Unk +Serial = SLUS-20497 +Name = Burnout 2 - Point of Impact +Region = NTSC-U +Compat = 5 +vuRoundMode = 1 //bright lights in cars --------------------------------------------- -Serial = SLES-52103 -Name = Tak & Le Pouvoir de Juju -Region = PAL-F +Serial = SLUS-20498 +Name = Auto Modellista +Region = NTSC-U --------------------------------------------- -Serial = SLES-52104 -Name = Tak and the Power of JuJu -Region = PAL-Unk +Serial = SLUS-20499 +Name = Breath of Fire: Dragon Quarter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52106 -Name = Cabela's Dangerous Hunts -Region = PAL-Unk +Serial = SLUS-20500 +Name = Red Dead Revolver +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52107 -Name = Dance Europe -Region = PAL-Unk +Serial = SLUS-20502 +Name = Colin McRae Rally 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52108 -Name = Underworld - The Eternal War -Region = PAL-Unk +Serial = SLUS-20504 +Name = Tony Hawk's Pro Skater 4 +Region = NTSC-U +Compat = 5 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLES-52109 -Name = Underworld - The Eternal War -Region = PAL-Unk +Serial = SLUS-20505 +Name = Mace Griffin - Bounty Hunter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52111 -Name = Mojo! -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20506 +Name = Black & Bruised +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52116 -Name = Sitting Duck -Region = PAL-Unk +Serial = SLUS-20507 +Name = Legends of Wrestling 2 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52117 -Name = Go Go Copter -Region = PAL-Unk +Serial = SLUS-20508 +Name = Indiana Jones and the Emperor's Tomb +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52118 -Name = Castlevania - Lament of Innocence -Region = PAL-M5 +Serial = SLUS-20509 +Name = Soccer Slam - Sega Sports +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52122 -Name = Crime Life - Gang Wars -Region = PAL-Unk +Serial = SLUS-20510 +Name = Star Wars - Clone Wars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52123 -Name = EA Sports Cricket 2004 -Region = PAL-Unk +Serial = SLUS-20511 +Name = Hunter the Reckoning - Wayward +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52124 -Name = Kill Switch -Region = PAL-Unk +Serial = SLUS-20513 +Name = NBA Starting Five +Region = NTSC-U --------------------------------------------- -Serial = SLES-52125 -Name = Agassi Tennis Generation -Region = PAL-Unk +Serial = SLUS-20514 +Name = Silent Scope 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52132 -Name = Hitman - Contracts -Region = PAL-Unk +Serial = SLUS-20515 +Name = Yu-Gi-Oh! The Duelists of the Roses +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52133 -Name = Hitman - Contracts -Region = PAL-Unk +Serial = SLUS-20516 +Name = Shrek - Super Party +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52135 -Name = Hitman - Contracts -Region = PAL-Unk +Serial = SLUS-20517 +Name = Haven - Call of the King +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52136 -Name = Hitman - Contracts -Region = PAL-Unk +Serial = SLUS-20519 +Name = Tak and The Power of Juju +Region = NTSC-U --------------------------------------------- -Serial = SLES-52143 -Name = Carmen Sandiego - The Secret of the Stolen Drums -Region = PAL-Unk -Compat = 3 +Serial = SLUS-20520 +Name = Lord of the Rings, The - The Fellowship of the Ring +Region = NTSC-U --------------------------------------------- -Serial = SLES-52149 -Name = Tom Clancy's Splinter Cell - Pandora Tomorrow -Region = PAL-M5 +Serial = SLUS-20521 +Name = Mystic Heroes +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] --------------------------------------------- -Serial = SLES-52150 -Name = Legacy of Kain - Defiance -Region = PAL-Unk +Serial = SLUS-20522 +Name = King of Route 66 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52151 -Name = Terminator 3 - Le Macchine Ribelli -Region = PAL-Unk +Serial = SLUS-20523 +Name = Crouching Tiger Hidden Dragon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52152 -Name = Terminator 3 - Rise of the Machines -Region = PAL-Unk +Serial = SLUS-20524 +Name = Fighter Maker 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52153 -Name = Driver 3 -Region = PAL-Unk +Serial = SLUS-20525 +Name = Ejay Club World +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52159 -Name = Myth Makers Super Kart GP -Region = PAL-Unk +Serial = SLUS-20526 +Name = RockSteady ~~UNRELEASED~~ +Region = NTSC-U --------------------------------------------- -Serial = SLES-52171 -Name = Dynasty Warriors 4 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20527 +Name = Butt Ugly Martians - Zoom or Doom! +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52172 -Name = Dynasty Warriors 4 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20528 +Name = Zapper - One Wicked Cricket +Region = NTSC-U --------------------------------------------- -Serial = SLES-52173 -Name = Dynasty Warriors 4 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20529 +Name = Madden NFL 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52174 -Name = Dynasty Warriors 4 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20530 +Name = NCAA Football 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52175 -Name = Dynasty Warriors 4 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20531 +Name = NHL 2003 +Region = NTSC-U +Compat = 5 +vuClampMode = 2 --------------------------------------------- -Serial = SLES-52178 -Name = Casino Challenge -Region = PAL-Unk +Serial = SLUS-20532 +Name = Disney's Golf +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52179 -Name = Kaan Barbarian Blade -Region = PAL-Unk +Serial = SLUS-20533 +Name = Shox +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLUS-20675 -Name = Baldur's Gate: Dark Alliance II +Serial = SLUS-20534 +Name = Cabela's Big Game Hunter Region = NTSC-U -Compat = 4 +Compat = 5 --------------------------------------------- -Serial = SLES-52187 -Name = Baldur's Gate: Dark Alliance II -Region = PAL-M3 -Compat = 4 +Serial = SLUS-20535 +Name = NASCAR Thunder 2003 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52188 -Name = Baldur's Gate: Dark Alliance II -Region = PAL-M3 -Compat = 4 +Serial = SLUS-20536 +Name = NBA Live 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLPM-65845 -Name = Baldur's Gate: Dark Alliance II -Region = NTSC-J -Compat = 4 +Serial = SLUS-20537 +Name = Jimmy Neutron - Boy Genius +Region = NTSC-U --------------------------------------------- -Serial = SLES-52190 -Name = RPM Tuning -Region = PAL-Unk -Compat = 2 +Serial = SLUS-20538 +Name = NCAA Basketball 2K3 - Sega Sports +Region = NTSC-U --------------------------------------------- -Serial = SLES-52202 -Name = Downhill Domination -Region = PAL-M5 +Serial = SLUS-20539 +Name = Fallout - Brotherhood of Steel +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52203 -Name = Armored Core - Silent Line -Region = PAL-Unk +Serial = SLUS-20540 +Name = Evolution Skateboarding +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52204 -Name = UFC Sudden Impact -Region = PAL-Unk +Serial = SLUS-20541 +Name = NBA Ballers +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //Fixes transparency issues --------------------------------------------- -Serial = SLES-52209 -Name = Star Trek - Shattered Universe -Region = PAL-Unk +Serial = SLUS-20543 +Name = Metal Gear Solid 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52214 -Name = Disney's The Haunted Mansion -Region = PAL-Unk +Serial = SLUS-20544 +Name = Malice +Region = NTSC-U --------------------------------------------- -Serial = SLES-52216 -Name = Disney's The Haunted Mansion -Region = PAL-Unk +Serial = SLUS-20545 +Name = Zone of the Enders: The 2nd Runner +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52219 -Name = Corvette -Region = PAL-Unk +Serial = SLUS-20546 +Name = Evolution Snowboarding +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52230 -Name = Muppets Party Cruise -Region = PAL-Unk -EETimingHack = 1 //Path 3 masking errors +Serial = SLUS-20547 +Name = Cubix Showdown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52237 -Name = dot Hack - Part 1 - Infection -Region = PAL-M5 +Serial = SLUS-20548 +Name = Sub Rebellion +Region = NTSC-U --------------------------------------------- -Serial = SLES-52238 -Name = Nightshade -Region = PAL-M5 +Serial = SLUS-20549 +Name = Conflict - Desert Storm +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52240 -Name = International Pool Championship -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52241 -Name = Myth Makers - Orbs of Doom -Region = PAL-Unk +Serial = SLUS-20550 +Name = True Crime - Streets of L.A. +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52242 -Name = Dalmatians 3 -Region = PAL-Unk +Serial = SLUS-20552 +Name = Grand Theft Auto - Vice City +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52243 -Name = Dinosaur Adventure -Region = PAL-Unk +Serial = SLUS-20553 +Name = Fisherman's Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52244 -Name = Legend of Herkules -Region = PAL-Unk +Serial = SLUS-20554 +Name = Metal Gear Solid 2 - Substance +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52246 -Name = Pool Paradise -Region = PAL-M5 +Serial = SLUS-20555 +Name = Reel Fishing 3 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52247 -Name = Hobbit, The -Region = PAL-Unk +Serial = SLUS-20556 +Name = Reign of Fire +Region = NTSC-U --------------------------------------------- -Serial = SLES-52249 -Name = Premier Manager 2003-2004 -Region = PAL-Unk +Serial = SLUS-20558 +Name = Ferrari F355 Challenge +Region = NTSC-U --------------------------------------------- -Serial = SLES-52256 -Name = Max Payne 2 - The Fall of Max Payne -Region = PAL-Unk -vuClampMode = 2 +Serial = SLUS-20559 +Name = Rocky +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52257 -Name = P.T.O. IV - Pacific Theater of Operations IV -Region = PAL-Unk +Serial = SLUS-20560 +Name = Galerians - Ash +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52258 -Name = Romance of the Three Kingdoms VIII -Region = PAL-Unk +Serial = SLUS-20561 +Name = Disaster Report +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52259 -Name = Outlaw Volleyball -Region = PAL-Unk +Serial = SLUS-20562 +Name = dot Hack - Part 2 - Mutation +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564 --------------------------------------------- -Serial = SLES-52265 -Name = Energy Airforce - Aim Strike! -Region = PAL-Unk +Serial = SLUS-20563 +Name = dot Hack - Part 3 - Outbreak +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564 --------------------------------------------- -Serial = SLES-52266 -Name = Energy Airforce - Aim Strike! -Region = PAL-Unk +Serial = SLUS-20564 +Name = dot Hack - Part 4 - Quarantine +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564 --------------------------------------------- -Serial = SLES-52267 -Name = Energy Airforce - Aim Strike! -Region = PAL-Unk +Serial = SLUS-20565 +Name = Champions of Norrath +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52275 -Name = Way of the Samurai 2 -Region = PAL-Unk +Serial = SLUS-20566 +Name = Buffy the Vampire Slayer - Chaos Bleeds +Region = NTSC-U Compat = 5 +EETimingHack = 1 //garbage in HUD +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-52276 -Name = 187 - Ride or Die -Region = PAL-Unk +Serial = SLUS-20567 +Name = P.T.O. IV - Pacific Theater of Operations +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52277 -Name = Riding Spirits 2 -Region = PAL-M5 -Compat = 4 +Serial = SLUS-20568 +Name = Hardhitter Tennis +Region = NTSC-U --------------------------------------------- -Serial = SLES-52278 -Name = Mafia -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-20569 +Name = All-Star Baseball 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52279 -Name = Mafia -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-20570 +Name = ATV Quad Power Racing 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52280 -Name = Mafia -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-20571 +Name = Ty the Tasmanian Tiger +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52282 -Name = Mafia -Region = PAL-Unk +Serial = SLUS-20572 +Name = Tiger Woods PGA Tour 2003 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52283 -Name = Terminator 3 - The Redemption -Region = PAL-Unk +Serial = SLUS-20573 +Name = Sims, The +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52284 -Name = Deadly Skies II -Region = PAL-Unk +Serial = SLUS-20574 +Name = NCAA March Madness 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52286 -Name = Tak and The Poer of JuJu -Region = PAL-Unk +Serial = SLUS-20575 +Name = Island Xtreme Stunts +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52287 -Name = Tak and The Poer of JuJu -Region = PAL-Unk +Serial = SLUS-20576 +Name = Harry Potter and The Chamber of Secrets +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-52288 -Name = Tom Clancy's Rainbow Six 3 -Region = PAL-E +Serial = SLUS-20577 +Name = Drome Racers +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52289 -Name = MTX Mototrax -Region = PAL-Unk +Serial = SLUS-20578 +Name = Lord of the Rings, The - The Two Towers +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52290 -Name = MTX Mototrax -Region = PAL-Unk +Serial = SLUS-20579 +Name = James Bond 007 - Nightfire +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52291 -Name = Countryside Bears -Region = PAL-Unk +Serial = SLUS-20580 +Name = FIFA Soccer 2003 +Region = NTSC-U +vuClampMode = 2 //missing geometry with microVU --------------------------------------------- -Serial = SLES-52292 -Name = Disney's Mighty Mulan -Region = PAL-Unk +Serial = SLUS-20582 +Name = Street Racing Syndicate +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52293 -Name = Disney's Son of the Lion King -Region = PAL-Unk +Serial = SLUS-20584 +Name = Speed Kings +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52294 -Name = Toys Room, The -Region = PAL-Unk +Serial = SLUS-20585 +Name = Powerpuff Girls, The - Relish Rampage +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52295 -Name = Master Chess -Region = PAL-Unk +Serial = SLUS-20586 +Name = IHRA Drag Racing 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52298 -Name = IndyCar Series 2005 -Region = PAL-Unk +Serial = SLUS-20587 +Name = Driver 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52308 -Name = Karaoke Stage -Region = PAL-Unk +Serial = SLUS-20588 +Name = Activision Anthology +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52309 -Name = R - Racing -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20590 +Name = Spy Hunter 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52312 -Name = World Championship Rugby -Region = PAL-Unk +Serial = SLUS-20591 +Name = DragonBall Z - Budokai +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52313 -Name = Space Invaders Anniversary -Region = PAL-Unk +Serial = SLUS-20592 +Name = HyperSonic Xtreme - HSX +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52314 -Name = Hugo - Bukkazoom -Region = PAL-Unk +Serial = SLUS-20593 +Name = Magic Pengel - The Quest for Color +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52322 -Name = Drakengard -Region = PAL-Unk +Serial = SLUS-20595 +Name = Area 51 +Region = NTSC-U Compat = 5 -eeClampMode = 3 //characters are visible in-game. --------------------------------------------- -Serial = SLES-52323 -Name = Richard Burns Rally -Region = PAL-Unk +Serial = SLUS-20596 +Name = UFC - Ultimate Fighting Championship - Sudden Impact +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52325 -Name = Champions of Norrath - Realms of EverQuest -Region = PAL-Unk // Multiple languages +Serial = SLUS-20597 +Name = Warhammer 40K - Fire Warrior +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52326 -Name = Spawn - Armageddon -Region = PAL-Unk +Serial = SLUS-20598 +Name = Everblue 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52336 -Name = Max Payne 2 - The Fall of Max Payne -Region = PAL-Unk +Serial = SLUS-20599 +Name = Whiteout +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20601 +Name = Rayman 3 - Hoodlum Havoc +Region = NTSC-U Compat = 5 -vuClampMode = 2 --------------------------------------------- -Serial = SLES-52337 -Name = Max Payne 2 - The Fall of Max Payne -Region = PAL-Unk -vuClampMode = 2 +Serial = SLUS-20602 +Name = High Heat - Major League Baseball 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52338 -Name = Max Payne 2 - The Fall of Max Payne -Region = PAL-Unk -vuClampMode = 2 +Serial = SLUS-20603 +Name = Mary-Kate & Ashley - Sweet Sixteen - Licensed to Drive +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52339 -Name = Crash 'n Burn -Region = PAL-M5 +Serial = SLUS-20604 +Name = MTV's Celebrity Deathmatch +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52340 -Name = Rollercoaster World -Region = PAL-Unk +Serial = SLUS-20605 +Name = Big Mutha Truckers +Region = NTSC-U --------------------------------------------- -Serial = SLES-52341 -Name = X-Files - Resist or Serve -Region = PAL-Unk +Serial = SLUS-20606 +Name = Bounty Hunter - Seek & Destroy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52342 -Name = Worms - Forts Under Seige -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20607 +Name = Disney's Extreme Skate Adventure +Region = NTSC-U +Compat = 5 +vuRoundMode = 0 --------------------------------------------- -Serial = SLES-52343 -Name = Midway Arcade Treasures -Region = PAL-Unk +Serial = SLUS-20608 +Name = Mobile Light Force 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52348 -Name = Seven Samurai 20XX -Region = PAL-Unk +Serial = SLUS-20609 +Name = Magix Music Maker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52349 -Name = International Golf Pro -Region = PAL-Unk +Serial = SLUS-20611 +Name = World Series Baseball 2K3 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52350 -Name = International Golf Pro -Region = PAL-Unk +Serial = SLUS-20613 +Name = Tom Clancy's Ghost Recon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52358 -Name = Glass Rose -Region = PAL-E +Serial = SLUS-20614 +Name = Aero Elite - Combat Academy +Region = NTSC-U +Compat = 5 +--------------------------------------------- +Serial = SLUS-20615 +Name = Fantastic 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52362 -Name = Bad Boys II -Region = PAL-M3 +Serial = SLUS-20616 +Name = Virtua Fighter 4 - Evolution +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52363 -Name = Bad Boys II -Region = PAL-G +Serial = SLUS-20617 +Name = Dynasty Warriors 3 - Xtreme Legends +Region = NTSC-U --------------------------------------------- -Serial = SLES-52366 -Name = America's 10 Most Wanted -Region = PAL-Unk +Serial = SLUS-20618 +Name = MLB Slugfest 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52367 -Name = America's 10 Most Wanted -Region = PAL-Unk +Serial = SLUS-20619 +Name = Starsky & Hutch +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52368 -Name = AFL Live - Premiership Edition -Region = PAL-E +Serial = SLUS-20620 +Name = Smash Cars +Region = NTSC-U --------------------------------------------- -Serial = SLES-52369 -Name = Empires of Atlantis -Region = PAL-Unk +Serial = SLUS-20621 +Name = Seven Samurai 20XX +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52370 -Name = Mouse Police, The -Region = PAL-Unk +Serial = SLUS-20622 +Name = Silent Hill 3 +Region = NTSC-U Compat = 5 +// reads Silent Hill 2 for easter egg +MemCardFilter = SLUS-20622/SLUS-20228 --------------------------------------------- -Serial = SLES-52371 -Name = Animal Soccer World -Region = PAL-Unk +Serial = SLUS-20623 +Name = Winning Eleven 6 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52372 -Name = Spider-Man 2 -Region = PAL-Unk +Serial = SLUS-20624 +Name = Simpsons, The - Hit & Run +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52374 -Name = Fight Night 2004 -Region = PAL-Unk +Serial = SLUS-20625 +Name = Moto GP 3 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52378 -Name = Euro Rally Champion -Region = PAL-Unk -Compat = 5 -EETimingHack = 1 //For dmac errors and so 3d is visible and steady. +Serial = SLUS-20626 +Name = Deer Hunter +Region = NTSC-U --------------------------------------------- -Serial = SLES-52379 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20627 +Name = Devil May Cry 2 [Disc2of2] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20484 --------------------------------------------- -Serial = SLES-52380 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20628 +Name = Disney's Finding Nemo +Region = NTSC-U --------------------------------------------- -Serial = SLES-52381 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20630 +Name = Grand Prix Challenge +Region = NTSC-U +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-52382 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20631 +Name = NFL Blitz Pro +Region = NTSC-U --------------------------------------------- -Serial = SLES-52383 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20632 +Name = Extreme-G Racing Association - XGRA +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52384 -Name = Project Zero 2 - Crimson Butterfly -Region = PAL-Unk +Serial = SLUS-20633 +Name = Clock Tower 3 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52385 -Name = England International Football -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20634 +Name = Summer Heat Beach Volleyball +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52386 -Name = World Championship Snooker 2004 -Region = PAL-Unk +Serial = SLUS-20635 +Name = Muppets Party Cruise, Jim Henson's +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //Path 3 masking errors --------------------------------------------- -Serial = SLES-52387 -Name = SpyHunter 2 -Region = PAL-Unk +Serial = SLUS-20636 +Name = Suffering, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52388 -Name = Transformers Armada - Prelude to Energon [Special Edition] -Region = PAL-Unk +Serial = SLUS-20637 +Name = Chessmaster (Online) +Region = NTSC-U Compat = 5 -VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-52393 -Name = Pinball Fun -Region = PAL-Unk +Serial = SLUS-20638 +Name = Backyard Wrestling - Don't Try This At Home +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52394 -Name = UFEA Euro 2004 -Region = PAL-Unk +Serial = SLUS-20639 +Name = Def Jam - Vendetta +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52395 -Name = UFEA Euro 2004 -Region = PAL-Unk +Serial = SLUS-20640 +Name = Saturday Night Speedway +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52396 -Name = Euro 2004 -Region = PAL-Unk +Serial = SLUS-20641 +Name = IndyCar Series +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52397 -Name = Euro 2004 -Region = PAL-Unk +Serial = SLUS-20642 +Name = Auto Modellista +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52398 -Name = Euro 2004 -Region = PAL-Unk +Serial = SLUS-20643 +Name = Soul Calibur 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52402 -Name = Perfect Ace 2 - The Championships -Region = PAL-Unk +Serial = SLUS-20643BD +Name = Namco Transmission Demo Disc v1.03 [Soul Calibur II Pack-In] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52403 -Name = Formula Challenge -Region = PAL-Unk +Serial = SLUS-20644 +Name = Armored Core - Silent Line +Region = NTSC-U +// can import data from AC3 +MemCardFilter = SLUS-20435/SLUS-20644 --------------------------------------------- -Serial = SLES-52404 -Name = MTV Music Generator 3 -Region = PAL-Unk +Serial = SLUS-20645 +Name = Time Crisis 3 [with Guncon] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52413 -Name = Malice -Region = PAL-M5 +Serial = SLUS-20646 +Name = Mark Davis Pro Bass Challenge +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52418 -Name = Powerdrome -Region = PAL-Unk +Serial = SLUS-20647 +Name = Wallace & Gromit in Project Zoo +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52423 -Name = Smash Court Tennis - Pro Tournament 2 -Region = PAL-Unk +Serial = SLUS-20648 +Name = NBA Jam 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52433 -Name = Goblin Commander - Unleash The Horde -Region = PAL-Unk +Serial = SLUS-20649 +Name = Crash Bandicoot - Nitro Kart +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52439 -Name = Suffering, The -Region = PAL-E +Serial = SLUS-20650 +Name = MVP Baseball 2003 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52440 -Name = Harry Potter and the Prisoner of Azkaban -Region = PAL-Unk +Serial = SLUS-20651 +Name = NBA Street 2 +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //missing environment with microVU --------------------------------------------- -Serial = SLES-52444 -Name = Hyper Street Fighter II - The Anniversary Edition -Region = PAL-Unk +Serial = SLUS-20652 +Name = Tom Clancy's Splinter Cell +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52445 -Name = Silent Hill 4 - The Room -Region = PAL-M5 +Serial = SLUS-20653 +Name = Dynasty Warriors 4 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52446 -Name = Mashed -Region = PAL-Unk +Serial = SLUS-20655 +Name = Hobbit, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52448 -Name = Knights of the Temple -Region = PAL-Unk +Serial = SLUS-20656 +Name = X-Men Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52449 -Name = Kidz Sports Basketball -Region = PAL-Unk +Serial = SLUS-20657 +Name = McFarlane Evil Prophecy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52450 -Name = Serious Sam - Next Encounter -Region = PAL-Unk +Serial = SLUS-20658 +Name = Freedom Fighters - The Battle for Liberty Island +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52451 -Name = Conan - The Dark Axe -Region = PAL-Unk +Serial = SLUS-20659 +Name = Piglet's Big Game +Region = NTSC-U --------------------------------------------- -Serial = SLES-52457 -Name = Shrek 2 -Region = PAL-Unk +Serial = SLUS-20661 +Name = Fairly Odd Parents, The - Breakin' Da Rules +Region = NTSC-U --------------------------------------------- -Serial = SLES-52458 -Name = Disgaea: Hour of Darkness -Region = PAL-E +Serial = SLUS-20662 +Name = Gallop Racer 2003 - A New Breed +Region = NTSC-U --------------------------------------------- -Serial = SLES-52459 -Name = Autobahn Raser - Das Spiel zum Film -Region = PAL-G +Serial = SLUS-20663 +Name = Naval Ops - Warship Gunner +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52466 -Name = Ribbit King -Region = PAL-Unk +Serial = SLUS-20664 +Name = Barbie Horse Adventures - Wild Horse Rescue +Region = NTSC-U --------------------------------------------- -Serial = SLES-52467 -Name = dot Hack - Part 2 - Mutation -Region = PAL-M5 -Compat = 5 +Serial = SLUS-20665 +Name = Cabela's Deer Hunt - 2004 Season +Region = NTSC-U --------------------------------------------- -Serial = SLES-52468 -Name = dot Hack - Part 4 - Quarantine -Region = PAL-M5 +Serial = SLUS-20666 +Name = Disgaea: Hour of Darkness +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52469 -Name = dot Hack - Part 3 - Outbreak -Region = PAL-M5 +Serial = SLUS-20668 +Name = Transformers +Region = NTSC-U Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-52471 -Name = Naval Ops - Commander -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52472 -Name = Project Minerva -Region = PAL-Unk +Serial = SLUS-20669 +Name = Resident Evil - Dead Aim +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52477 -Name = Vegas Casino II -Region = PAL-Unk +Serial = SLUS-20670 +Name = Great Escape, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52478 -Name = Red Dead Revolver -Region = PAL-M5 +Serial = SLUS-20671 +Name = Mafia +Region = NTSC-U Compat = 4 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52479 -Name = Samurai Jack - The Shadow of Aku -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52480 -Name = Yu-Gi-Oh! - The Duelists of the Roses -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52481 -Name = Hot Wheels - Stunt Track Challenge -Region = PAL-Unk +Serial = SLUS-20672 +Name = Final Fantasy X-2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52482 -Name = Steel Dragon EX -Region = PAL-E +Serial = SLUS-20673 +Name = Alias +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52483 -Name = World Championship Pool 2004 -Region = PAL-Unk +Serial = SLUS-20674 +Name = Virtual On Marz +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52486 -Name = Astroboy -Region = PAL-Unk +Serial = SLUS-20675 +Name = Baldur's Gate: Dark Alliance II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52490 -Name = Dance UK - Extra Trax -Region = PAL-Unk +Serial = SLUS-20676 +Name = Lowrider +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52493 -Name = Spider-Man 2 -Region = PAL-Unk +Serial = SLUS-20677 +Name = XIII +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52495 -Name = Bujingai - Swordmaster -Region = PAL-Unk +Serial = SLUS-20678 +Name = Unlimited SaGa +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52504 -Name = Trivial Pursuit Unhinged -Region = PAL-Unk +Serial = SLUS-20680 +Name = SpongeBob SquarePants - The Battle for Bikini Bottoms +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52505 -Name = Spy Fiction -Region = PAL-Unk +Serial = SLUS-20681 +Name = Disney's The Haunted Mansion +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52507 -Name = Def Jam - Fight for New York -Region = PAL-Unk +Serial = SLUS-20682 +Name = K1 World Grand Prix +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52508 -Name = Obscure -Region = PAL-G +Serial = SLUS-20683 +Name = Lupin the 3rd - Treasure of the Sorcerer King +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52509 -Name = Tiger Woods PGA Tour Golf 2005 -Region = PAL-Unk +Serial = SLUS-20684 +Name = Whiplash +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52510 -Name = Neo Contra -Region = PAL-Unk -Compat = 4 -[patches = EEE2F6A3] - //comment=Patches By Nachbrenner - - //fix IPU busy! ingame - patch=0,EE,003a9a88,word,03e00008 - patch=0,EE,003a9a8c,word,00000000 - patch=0,EE,003a9b60,word,03e00008 - patch=0,EE,003a9b64,word,00000000 - -[/patches] +Serial = SLUS-20685 +Name = Ape Escape 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52511 -Name = Headhunter - Redemption (EX) -Region = PAL-Unk +Serial = SLUS-20686 +Name = Splashdown - Rides Gone Wild +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52512 -Name = Headhunter - Redemption -Region = PAL-Unk +Serial = SLUS-20687 +Name = RoadKill +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52515 -Name = Ultimate Casino -Region = PAL-Unk +Serial = SLUS-20688 +Name = Psi-Ops - The Mindgate Conspiracy +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52516 -Name = World Fighting -Region = PAL-Unk +Serial = SLUS-20689 +Name = Conflict - Desert Storm 2 - Back to Baghdad +Region = NTSC-U --------------------------------------------- -Serial = SLES-52517 -Name = Radio Helicopter -Region = PAL-Unk +Serial = SLUS-20690 +Name = G1 Jockey 3 +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20691 +Name = NHL Hitz Pro +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52518 -Name = Motorbike King -Region = PAL-Unk +Serial = SLUS-20693 +Name = F1 Career Challenge +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20694 +Name = Onimusha 3 - Demon Siege +Region = NTSC-U Compat = 5 -eeClampMode = 3 +MemCardFilter = SLUS-20694/SLUS-20710 --------------------------------------------- -Serial = SLES-52519 -Name = Pink Pong -Region = PAL-Unk +Serial = SLUS-20695 +Name = Chaos Legion +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52520 -Name = Volleyball Challenge -Region = PAL-Unk +Serial = SLUS-20696 +Name = Jimmy Neutron - Boy Genius - Jet Fusion +Region = NTSC-U --------------------------------------------- -Serial = SLES-52521 -Name = Adibou & Les Voleurs d'Energie -Region = PAL-Unk +Serial = SLUS-20697 +Name = Cy Girls [Disc1of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52523 -Name = Cocoto - Platform Jumper -Region = PAL-Unk +Serial = SLUS-20698 +Name = SD Gundam Force Showdown +Region = NTSC-U +Compat = 5 +eeClampMode = 2 //Needed for SPS on some characters --------------------------------------------- -Serial = SLES-52525 -Name = Mouse Trophy -Region = PAL-Unk +Serial = SLUS-20699 +Name = Cowboy Bebop +Region = NTSC-U --------------------------------------------- -Serial = SLES-52527 -Name = Harry Potter og Fangen fra Azkaban -Region = PAL-Unk +Serial = SLUS-20701 +Name = Scooby-Doo! Mystery Mayhem +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52531 -Name = Suffering, The -Region = PAL-Unk +Serial = SLUS-20702 +Name = Monster Rancher 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52532 -Name = Aces of War -Region = PAL-Unk +Serial = SLUS-20703 +Name = Air Force - Delta Strike +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52533 -Name = Zoo Puzzle -Region = PAL-Unk +Serial = SLUS-20704 +Name = Backyard Basketball +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52534 -Name = Crimson Tears -Region = PAL-M3 +Serial = SLUS-20705 +Name = I-Ninja +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52535 -Name = Rumble Roses -Region = PAL-M5 +Serial = SLUS-20706 +Name = Kill Switch +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52536 -Name = Shark Tale -Region = PAL-Unk +Serial = SLUS-20707 +Name = Spawn - Armageddon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52537 -Name = Shark Tale -Region = PAL-Unk +Serial = SLUS-20709 +Name = Batman - Rise of Sin-Tzu +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52539 -Name = Shark Tale -Region = PAL-Unk +Serial = SLUS-20710 +Name = Onimusha - Blade Warriors +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20694/SLUS-20710 --------------------------------------------- -Serial = SLES-52541 -Name = Grand Theft Auto - San Andreas -Region = PAL-M5 -Compat = 4 +Serial = SLUS-20711 +Name = Dance Dance Revolution MAX 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52544 -Name = Trivial Pursuit Unhinged -Region = PAL-Unk +Serial = SLUS-20712 +Name = Gradius V +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52545 -Name = Star Wars Battlefront -Region = PAL-Unk +Serial = SLUS-20714 +Name = Red Ninja - End of Honor +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52546 -Name = Star Wars Battlefront -Region = PAL-Unk +Serial = SLUS-20715 +Name = WWII Paratroopers +Region = NTSC-U --------------------------------------------- -Serial = SLES-52547 -Name = Star Wars Battlefront -Region = PAL-Unk +Serial = SLUS-20716 +Name = Teenage Mutant Ninja Turtles +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52551 -Name = Samurai Warriors -Region = PAL-Unk +Serial = SLUS-20718 +Name = Sonic Heroes +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52553 -Name = Samurai Warriors -Region = PAL-Unk +Serial = SLUS-20719 +Name = NCAA Football 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52555 -Name = Samurai Warriors -Region = PAL-Unk +Serial = SLUS-20720 +Name = Romance of the Three Kingdoms VIII +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52556 -Name = Crimson Sea 2 -Region = PAL-Unk +Serial = SLUS-20721 +Name = R Racing Evolution +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52557 -Name = Crimson Sea 2 -Region = PAL-Unk +Serial = SLUS-20722 +Name = Maximo vs. Army of Zin +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52558 -Name = Crimson Sea 2 -Region = PAL-Unk +Serial = SLUS-20723 +Name = Robin Hood - Defender of the Crown +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52559 -Name = FIFA 2005 -Region = PAL-E +Serial = SLUS-20724 +Name = Firefighter FD 18 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52560 -Name = FIFA 2005 -Region = PAL-G +Serial = SLUS-20725 +Name = Call of Duty - Finest Hour +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52561 -Name = FIFA 2005 -Region = PAL-Unk +Serial = SLUS-20726 +Name = ESPN - NBA Basketball +Region = NTSC-U +[patches = A13E5DD5] + //Patched by Prafull + //Avoid hang at start + patch=0,EE,003161c0,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-52562 -Name = FIFA 2005 -Region = PAL-Unk +Serial = SLUS-20727 +Name = ESPN - NFL Football +Region = NTSC-U --------------------------------------------- -Serial = SLES-52563 -Name = FIFA Football 2005 -Region = PAL-Unk +Serial = SLUS-20728 +Name = ESPN - NHL Hockey +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52567 -Name = Catwoman -Region = PAL-Unk +Serial = SLUS-20729 +Name = ESPN - College Hoops +Region = NTSC-U --------------------------------------------- -Serial = SLES-52568 -Name = Crash Twinsanity -Region = PAL-Unk +Serial = SLUS-20730 +Name = NARC +Region = NTSC-U Compat = 5 -XgKickHack = 1 //Fixes bad Geometry --------------------------------------------- -Serial = SLES-52569 -Name = Spyro - A Hero's Tail -Region = PAL-Unk +Serial = SLUS-20731 +Name = Tony Hawk's Underground +Region = NTSC-U Compat = 5 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLES-52570 -Name = Area 51 -Region = PAL-R +Serial = SLUS-20732 +Name = Drakengard +Region = NTSC-U Compat = 5 +eeClampMode = 3 //characters are visible in-game. --------------------------------------------- -Serial = SLES-52571 -Name = Pacific Air Warriors 2 - Dogfight -Region = PAL-Unk +Serial = SLUS-20733 +Name = Castlevania - Lament of Innocence +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52572 -Name = Operation Air Assault -Region = PAL-Unk +Serial = SLUS-20734 +Name = Frogger's Adventures - The Rescue +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52573 -Name = Conflict - Global Storm -Region = PAL-Unk +Serial = SLUS-20735 +Name = Lethal Skies 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52576 -Name = Yu-Gi-Oh! - Capsule Monster Colisee -Region = PAL-Unk +Serial = SLUS-20736 +Name = Cabela's Dangerous Hunts +Region = NTSC-U --------------------------------------------- -Serial = SLES-52579 -Name = Legends of Wrestling - Showdown -Region = PAL-Unk +Serial = SLUS-20737 +Name = Hot Wheels - World Race +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52581 -Name = Madden NFL 2005 -Region = PAL-Unk +Serial = SLUS-20738 +Name = Van Helsing +Region = NTSC-U +Compat = 5 +EETimingHack = 1 // To enter the main menu. --------------------------------------------- -Serial = SLES-52584 -Name = Burnout 3 - Takedown -Region = PAL-M4 +Serial = SLUS-20740 +Name = Mobile Suit Gundam - Encounters in Space +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52585 -Name = Burnout 3 - Takedown -Region = PAL-F-G-I +Serial = SLUS-20741 +Name = Mojo! +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52587 -Name = Army Men - Sarge's War -Region = PAL-Unk +Serial = SLUS-20742 +Name = Chulip +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52588 -Name = Mercenaries -Region = PAL-Unk +Serial = SLUS-20743 +Name = Prince of Persia - Sands of Time +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52590 -Name = Mercenaries -Region = PAL-Unk +Serial = SLUS-20744 +Name = EverQuest - Online Adventures - Frontiers +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52591 -Name = Dynasty Warriors 4 - Empires -Region = PAL-Unk +Serial = SLUS-20745 +Name = Shrek 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52592 -Name = Dynasty Warriors 4 - Empires -Region = PAL-Unk +Serial = SLUS-20746 +Name = Rogue Ops +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52593 -Name = Dynasty Warriors 4 - Empires -Region = PAL-Unk +Serial = SLUS-20748 +Name = Super Trucks Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52594 -Name = U-Move SuperSports -Region = PAL-Unk +Serial = SLUS-20749 +Name = Rugby 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52598 -Name = Dancing Stage Fusion -Region = PAL-Unk +Serial = SLUS-20750 +Name = FIFA Soccer 2004 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52599 -Name = Metal Slug 3 -Region = PAL-M5 ---------------------------------------------- -Serial = SLES-52600 -Name = Harry Potter and The Prisoner of Azkaban -Region = PAL-Unk +Serial = SLUS-20751 +Name = James Bond 007 - Everything or Nothing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52601 -Name = Ex Zeus -Region = PAL-Unk +Serial = SLUS-20752 +Name = Madden NFL 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52602 -Name = GT Racers -Region = PAL-M5 +Serial = SLUS-20753 +Name = Medal of Honor - Rising Sun +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52603 -Name = Room Zoom - Race for Impact -Region = PAL-Unk +Serial = SLUS-20754 +Name = NASCAR Thunder 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52605 -Name = Polar Express, The -Region = PAL-Unk +Serial = SLUS-20755 +Name = NBA Live 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52616 -Name = Video Poker & Blackjack -Region = PAL-Unk +Serial = SLUS-20756 +Name = NHL 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52617 -Name = Stock Car Speedway -Region = PAL-Unk +Serial = SLUS-20757 +Name = Tiger Woods PGA Tour 2004 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52620 -Name = Guncom 2 -Region = PAL-Unk +Serial = SLUS-20758 +Name = Growlanser Generations [Disc1of2] +Region = NTSC-U +Compat = 5 +[patches = 03F9C6D1] + comment=IPU freeze fix + patch=0,EE,00109d04,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-52621 -Name = Tony Hawk's Underground 2 -Region = PAL-Unk -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20759 +Name = Growlanser Generations [Disc2of2] +Region = NTSC-U +Compat = 5 +[patches = 4AD529BB] + comment=IPU freeze fix + patch=0,EE,00109d04,word,00000000 +[/patches] +[patches = 4CD3663F] + comment=IPU freeze fix + patch=0,EE,00109d04,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-52622 -Name = Tony Hawk's Underground 2 -Region = PAL-Unk -vuRoundMode = 0 //Crashes without. +Serial = SLUS-20760 +Name = World Championship Pool 2004 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52624 -Name = X-Men Legends -Region = PAL-Unk +Serial = SLUS-20761 +Name = Dynasty Tactics 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52625 -Name = X-Men Legends -Region = PAL-Unk +Serial = SLUS-20762 +Name = Secret Weapons Over Normandy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52628 -Name = NBA Ballers -Region = PAL-Unk +Serial = SLUS-20763 +Name = Beyond Good and Evil +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52630 -Name = Conflict - Vietnam -Region = PAL-Unk +Serial = SLUS-20764 +Name = Bombastic +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52631 -Name = Digimon Rumble Arena 2 -Region = PAL-Unk +Serial = SLUS-20765 +Name = Resident Evil - Outbreak +Region = NTSC-U Compat = 5 -FpuCompareHack = 1 --------------------------------------------- -Serial = SLES-52636 -Name = Colin McRae Rally 2005 -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20766 +Name = Fatal Frame 2 - Crimson Butterfly +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52637 -Name = TOCA Racer Driver 2 -Region = PAL-Unk +Serial = SLUS-20767 +Name = MX Unleashed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52638 -Name = DTM Race Driver 2 -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20769 +Name = Harry Potter - Quidditch World Cup +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52639 -Name = V8 Supercars 2 -Region = PAL-Unk +Serial = SLUS-20770 +Name = Lord of the Rings, The - The Return of the King +Region = NTSC-U --------------------------------------------- -Serial = SLES-52641 -Name = Leisure Suit Larry: Magna Cum Laude (Uncut) -Region = PAL-E +Serial = SLUS-20771 +Name = NCAA March Madness 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52642 -Name = Leisure Suit Larry: Magna cum Laude -Region = PAL-F +Serial = SLUS-20772 +Name = SSX 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52643 -Name = Leisure Suit Larry: Magna Cum Laude -Region = PAL-G +Serial = SLUS-20773 +Name = Legacy of Kain - Defiance +Region = NTSC-U +Compat = 5 +--------------------------------------------- +Serial = SLUS-20774 +Name = Culdcept +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52644 -Name = Leisure Suit Larry: Magna Cum Laude -Region = PAL-S +Serial = SLUS-20776 +Name = Spider-Man 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52645 -Name = Leisure Suit Larry: Magna cum Laude -Region = PAL-I +Serial = SLUS-20777 +Name = Obscure +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //For hangs/crashes changing scenes. --------------------------------------------- -Serial = SLES-52646 -Name = Tom Clancy's Ghost Recon 2 -Region = PAL-Unk +Serial = SLUS-20779 +Name = DragonBall Z - Budokai 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52647 -Name = Club Football - Manchester United 2005 -Region = PAL-Unk +Serial = SLUS-20780 +Name = R-Type Final +Region = NTSC-U +Compat = 5 +EETimingHack = 1 // Else serious slowdown due to VIF timing. Can be disabled once timing voodoo is fixed ;) --------------------------------------------- -Serial = SLES-52648 -Name = BVB 09 - Club Football 2005 - Borussia Dortmund -Region = PAL-Unk +Serial = SLUS-20781 +Name = Karaoke Revolution +Region = NTSC-U --------------------------------------------- -Serial = SLES-52649 -Name = Om Droit au Bit - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20782 +Name = Blood Will Tell +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52650 -Name = Juventus - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20784 +Name = Italian Job, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52651 -Name = FC Barcelona - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20785 +Name = Funkmaster Flex - Digital Hitz Factory +Region = NTSC-U --------------------------------------------- -Serial = SLES-52652 -Name = Liverpool FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20786 +Name = Metal Arms - Glitch in the System +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //text flicker --------------------------------------------- -Serial = SLES-52653 -Name = Liverpool FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20787 +Name = WWE SmackDown! Here Comes the Pain +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52654 -Name = Club Football - Real Madri 2005 -Region = PAL-Unk +Serial = SLUS-20788 +Name = Ford Racing 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52655 -Name = FC Bayern Munich - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20789 +Name = Jeopardy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52656 -Name = AC Milan Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20790 +Name = Wheel of Fortune +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52657 -Name = Arsenal FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20791 +Name = Trivial Pursuit - Unhinged +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52658 -Name = Hamburg SV - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20792 +Name = Goblin Commander - Unleash the Horde +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52659 -Name = Paris Saint-Germain Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20793 +Name = Gladiator - Sword of Vengeance +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52660 -Name = Inter - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20794 +Name = ESPN - Major League Baseball +Region = NTSC-U --------------------------------------------- -Serial = SLES-52661 -Name = Ajax Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20795 +Name = Bloody Roar 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52662 -Name = Newcastle United - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20796 +Name = Monster 4x4 - Masters of Metal +Region = NTSC-U --------------------------------------------- -Serial = SLES-52663 -Name = Chelsea FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20797 +Name = Dr. Seuss' The Cat in the Hat +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52664 -Name = Rangers FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20798 +Name = Starcraft - Ghost +Region = NTSC-U --------------------------------------------- -Serial = SLES-52665 -Name = Celtic FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20799 +Name = Terminator, The - Rise of the Machines +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52666 -Name = Tottenham Hotspur - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20800 +Name = Taiko Drum Master +Region = NTSC-U --------------------------------------------- -Serial = SLES-52667 -Name = Birmingham City - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20801 +Name = Midway Arcade Treasures +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52668 -Name = Aston Villa FC - Club Football 2005 -Region = PAL-Unk +Serial = SLUS-20803 +Name = The Bard's Tale +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52669 +Serial = SLUS-20804 Name = Forgotten Realms - Demon Stone -Region = PAL-M5 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52670 -Name = Second Sight -Region = PAL-M5 +Serial = SLUS-20805 +Name = Yu Yu Hakusho - Dark Tournament +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20806 +Name = Space Channel 5 - Special Edition [Disc 1 of 2] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52671 -Name = Ghostmaster -Region = PAL-Unk +Serial = SLUS-20807 +Name = Space Channel 5 - Special Edition [Disc 2 of 2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52673 -Name = NHL 2005 -Region = PAL-Unk +Serial = SLUS-20809 +Name = Godzilla - Save the Earth +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52674 -Name = Fussball Manager 2005 -Region = PAL-Unk +Serial = SLUS-20810 +Name = Nightshade +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52675 -Name = Hugo Cannon Cruise -Region = PAL-Unk +Serial = SLUS-20811 +Name = Need for Speed - Underground +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SLES-52678 -Name = Viewtiful Joe -Region = PAL-M5 +Serial = SLUS-20812 +Name = Dynasty Warriors 4 - Extreme Edition +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52680 -Name = Intellivision Lives - The History of Video Gaming -Region = PAL-Unk +Serial = SLUS-20813 +Name = Plague of Darkness +Region = NTSC-U --------------------------------------------- -Serial = SLES-52684 -Name = Cyclone Circus - Power Sail Racing -Region = PAL-M4 +Serial = SLUS-20814 +Name = Max Payne 2 - Fall of Max Payne +Region = NTSC-U Compat = 5 +vuClampMode = 2 --------------------------------------------- -Serial = SLES-52685 -Name = Polar Express, The -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52686 -Name = Backyard Wrestling - There Goes the Neighborhood -Region = PAL-Unk +Serial = SLUS-20816 +Name = American Idol +Region = NTSC-U --------------------------------------------- -Serial = SLES-52693 -Name = LMA Manager 2005 -Region = PAL-Unk +Serial = SLUS-20817 +Name = Headhunter - Redemption +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52694 -Name = BDFL Manager 2005 -Region = PAL-G +Serial = SLUS-20818 +Name = Bionicle +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52695 -Name = Roger Lemerre - La Selection des Champions -Region = PAL-F +Serial = SLUS-20820 +Name = Tom Clancy's Ghost Recon - Jungle Storm +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52697 -Name = Manager de la Liga 2005 -Region = PAL-S +Serial = SLUS-20821 +Name = Mobile Suit Gundam - Gundam vs. Zeta Gundam +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52700 -Name = Jimmy Neutron - Attack of the Twonkies -Region = PAL-Unk +Serial = SLUS-20822 +Name = Galactic Wrestling +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52701 -Name = Future Tactics - The Uprising -Region = PAL-Unk +Serial = SLUS-20823 +Name = Robotech - Invasion +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52702 -Name = Psi-Ops - The Mindgate Conspiracy -Region = PAL-Unk +Serial = SLUS-20824 +Name = NASCAR Thunder 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52703 -Name = Psi-Ops - The Mindgate Conspiracy -Region = PAL-Unk +Serial = SLUS-20826 +Name = Harry Potter and The Sorceror's Stone +Region = NTSC-U +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52705 -Name = Mortal Kombat - Deception -Region = PAL-Unk +Serial = SLUS-20827 +Name = Manhunt +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52706 -Name = Mortal Kombat - Deception -Region = PAL-Unk +Serial = SLUS-20828 +Name = ShellShock - Nam '67 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52707 -Name = Monster Hunter -Region = PAL-Unk +Serial = SLUS-20830 +Name = Intellivision Lives! +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52709 -Name = Ty the Tazmanian Tiger 2 - Bush Rescue -Region = PAL-Unk +Serial = SLUS-20831 +Name = Tokyo Xtreme Racer 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52710 -Name = McFarlane's Evil Prophecy -Region = PAL-Unk +Serial = SLUS-20833 +Name = MegaMan Anniversary Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52711 -Name = Titeuf Mega Compet -Region = PAL-Unk +Serial = SLUS-20834 +Name = King of Fighters 2000 & 2001 [Disc1of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52713 -Name = NBA Live 2005 -Region = PAL-Unk +Serial = SLUS-20836 +Name = Digimon World 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52714 -Name = Board Games Gallery -Region = PAL-E +Serial = SLUS-20837 +Name = Ribbit King +Region = NTSC-U --------------------------------------------- -Serial = SLES-52716 -Name = Energy Thieves, The -Region = PAL-Unk +Serial = SLUS-20838 +Name = All-Star Baseball 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52717 -Name = Brian Lara Cricket 2005 -Region = PAL-Unk +Serial = SLUS-20839 +Name = King of Fighters 2000 & 2001 [Disc2of2] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52718 -Name = Fight Club -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52719 -Name = Under the Skin -Region = PAL-Unk +Serial = SLUS-20840 +Name = Wrath Unleashed +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52720 -Name = Ford Racing 3 -Region = PAL-Unk +Serial = SLUS-20841 +Name = NFL Street +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52725 -Name = Need for Speed - Underground 2 -Region = PAL-E -Compat = 4 +Serial = SLUS-20842 +Name = Sims, The - Bustin' Out +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52726 -Name = NBA Live 2005 -Region = PAL-Unk +Serial = SLUS-20843 +Name = Dead to Rights II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52727 -Name = NBA Live 2005 -Region = PAL-Unk +Serial = SLUS-20845 +Name = Cold Winter +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //fixes rainbow graphics --------------------------------------------- -Serial = SLES-52729 -Name = Animaniacs - The Great Edgar Hunt -Region = PAL-E -Compat = 4 +Serial = SLUS-20846 +Name = Strike Force Bowling +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52730 -Name = DragonBall Z - Budokai 3 -Region = PAL-Unk +Serial = SLUS-20847 +Name = La Pucelle - Tactics +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52731 -Name = One Piece - Round the Land! -Region = PAL-M3 +Serial = SLUS-20848 +Name = LifeLine - Voice Action Adventure +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52733 -Name = Driven to Destruction -Region = PAL-Unk +Serial = SLUS-20849 +Name = Carmen Sandiego - The Secret of The Stolen Drums +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52734 -Name = Worms Forts - Under Siege -Region = PAL-Unk +Serial = SLUS-20850 +Name = Blowout +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52737 -Name = Obscure -Region = PAL-Unk +Serial = SLUS-20851 +Name = Ace Combat 5 - The Unsung War +Region = NTSC-U +Compat = 5 +[patches = 39B574F0] + comment=Rearranging COP2 instructions that use old results + + patch=0,EE,001A3B94,word,48498800 + patch=0,EE,001A3B98,word,4B00682C + patch=0,EE,001A3BA4,word,484A8800 + patch=0,EE,001A3BA8,word,4B0C682C +[/patches] --------------------------------------------- -Serial = SLES-52738 -Name = Obscure -Region = PAL-Unk +Serial = SLUS-20852 +Name = Terminator 3, The - The Redemption +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52745 -Name = Hugo - CannonCruise -Region = PAL-M4 +Serial = SLUS-20853 +Name = Looney Tunes - Back in Action +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52747 -Name = Dukes of Hazzard, The - The Return of General Lee -Region = PAL-Unk +Serial = SLUS-20854 +Name = Cy Girls [Disc2of2] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20697 --------------------------------------------- -Serial = SLES-52749 -Name = Habitrail - Hamster Ball -Region = PAL-Unk +Serial = SLUS-20855 +Name = Destruction Derby Arenas +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52750 -Name = Monster Trux Extreme -Region = PAL-Unk +Serial = SLUS-20856 +Name = Spy Fiction +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52751 -Name = Offroad Extreme! -Region = PAL-E +Serial = SLUS-20857 +Name = Fight Club +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52752 -Name = Playboy - The Mansion -Region = PAL-Unk +Serial = SLUS-20858 +Name = Corvette 50th Anniversary +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52753 -Name = Flatout -Region = PAL-Unk +Serial = SLUS-20859 +Name = Future Tactics - The Uprising +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52754 -Name = FlatOut -Region = PAL-Unk +Serial = SLUS-20860 +Name = Nightmare Before Christmas, Tim Burton's The - Oogie's Revenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52755 -Name = Blood Will Tell -Region = PAL-Unk +Serial = SLUS-20861 +Name = MTV Music Generator 3 - This is the Remix +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52760 -Name = Pro Evolution Soccer 4 -Region = PAL-Unk +Serial = SLUS-20862 +Name = Bloodrayne 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52761 -Name = Rocky - Legends -Region = PAL-Unk +Serial = SLUS-20863 +Name = Winning Eleven 7 World Soccer - International +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20864 +Name = Punisher, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52766 -Name = Godzilla - Save The Earth -Region = PAL-Unk +Serial = SLUS-20865 +Name = Backyard Baseball +Region = NTSC-U +// reads Backyard Basketball for bonus unlockable +MemCardFilter = SLUS-20865/SLUS-20704 +--------------------------------------------- +Serial = SLUS-20866 +Name = Asterix & Obelix XXL - Kick Buttix +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52767 -Name = Hugo - CannonCruise -Region = PAL-M4 +Serial = SLUS-20867 +Name = Astro Boy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52768 -Name = Commandos - Strike Force -Region = PAL-Unk +Serial = SLUS-20868 +Name = MVP Baseball 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52773 -Name = Pool Shark 2 -Region = PAL-Unk +Serial = SLUS-20869 +Name = Judge Dredd - Dredd vs. Death +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52774 -Name = Sprint Car Challenge -Region = PAL-E +Serial = SLUS-20870 +Name = Ultimate Spider-Man +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52776 -Name = Junior Board Games -Region = PAL-M5 +Serial = SLUS-20871 +Name = Naval Ops - Commander +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52778 -Name = Arcade, The -Region = PAL-Unk +Serial = SLUS-20872 +Name = Juiced +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52779 -Name = Poker Masters -Region = PAL-M6 +Serial = SLUS-20873 +Name = Silent Hill 4 - The Room +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52781 -Name = WWE SmackDown! vs. RAW -Region = PAL-Unk +Serial = SLUS-20874 +Name = DragonBall Z - Sagas +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52782 -Name = Call of Duty - Finest Hour -Region = PAL-Unk +Serial = SLUS-20875 +Name = Predator - Concrete Jungle +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52783 -Name = Call of Duty - Le Jour de Glorie -Region = PAL-F +Serial = SLUS-20876 +Name = Backyard Football 2006 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52784 -Name = Call of Duty - Finest Hour -Region = PAL-G +Serial = SLUS-20877 +Name = Crimson Sea 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52798 -Name = Vietcong - Purple Haze -Region = PAL-Unk +Serial = SLUS-20878 +Name = Samurai Warriors +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52799 -Name = Vietcong - Purple Haze -Region = PAL-Unk +Serial = SLUS-20879 +Name = Romance of the Three Kingdoms IX +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52800 -Name = Pro Evolution Soccer 4 -Region = PAL-I +Serial = SLUS-20880 +Name = Fairly Odd Parents, The - Shadow Showdown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52801 -Name = Lord of the Rings, The - The Third Age -Region = PAL-M5 +Serial = SLUS-20881 +Name = Mortal Kombat - Deception +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52802 -Name = Lord of the Rings, The - The Third Age -Region = PAL-F +Serial = SLUS-20882 +Name = Hitman - Contracts +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-52803 -Name = Lord of the Rings, The - The Third Age (Der Herr der Ringe - Das dritte Zeitalter) -Region = PAL-G +Serial = SLUS-20883 +Name = Tom Clancy's Rainbow Six 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52804 -Name = Lord of the Rings, The - The Third Age -Region = PAL-Unk +Serial = SLUS-20884 +Name = Spyro - A Hero's Tail +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52805 -Name = Lord of the Rings, The - The Third Age -Region = PAL-S +Serial = SLUS-20885 +Name = Red Star, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52807 -Name = Lemony Snicket's A Series of Unfortunate Events -Region = PAL-Unk +Serial = SLUS-20886 +Name = Sitting Ducks +Region = NTSC-U --------------------------------------------- -Serial = SLES-52808 -Name = Lemony Snicket's A Series of Unfortunate Events -Region = PAL-Unk +Serial = SLUS-20887 +Name = Adventures of Jimmy Neutron, The - Attack of the Twonkies +Region = NTSC-U --------------------------------------------- -Serial = SLES-52809 -Name = Lemony Snicket - Schauriger Schlamassel -Region = PAL-Unk +Serial = SLUS-20888 +Name = Front Mission 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52810 -Name = Lemony Snicket's Una Serie Disfortunati Eventi -Region = PAL-Unk +Serial = SLUS-20889 +Name = MLB Slugfest - Loaded +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52811 -Name = Get on da Mic -Region = PAL-Unk +Serial = SLUS-20890 +Name = Rocky - Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52812 -Name = Disney-Pixar's The Incredibles -Region = PAL-Unk +Serial = SLUS-20891 +Name = Star Ocean 3 - Till the End of Time [Disc2of2] +Region = NTSC-U +Compat = 5 +VuAddSubHack = 1 +MemCardFilter = SLUS-20488 --------------------------------------------- -Serial = SLES-52813 -Name = Incredibles, The -Region = PAL-Unk +Serial = SLUS-20892 +Name = Xenosaga - Episode II - Jenseits von Gut und Bose [Disc1of2] +Region = NTSC-U +Compat = 5 +// allows import of Xenosaga I data +MemCardFilter = SLUS-20469/SLUS-20892 --------------------------------------------- -Serial = SLES-52814 -Name = Incredibles, The -Region = PAL-Unk +Serial = SLUS-20893 +Name = Way of the Samurai 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52815 -Name = Disney-Pixar's The Incredibles -Region = PAL-Unk +Serial = SLUS-20894 +Name = Worms 3D +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52816 -Name = Incredibles, The -Region = PAL-Unk +Serial = SLUS-20895 +Name = Bujingai - The Forsaken City +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52820 -Name = Incredibles, The -Region = PAL-Unk +Serial = SLUS-20896 +Name = Monster Hunter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52821 -Name = Incredibles, The -Region = PAL-Unk +Serial = SLUS-20897 +Name = Swords of Yi +Region = NTSC-U --------------------------------------------- -Serial = SLES-52822 -Name = Prince of Persia - Warrior Within -Region = PAL-M6 +Serial = SLUS-20898 +Name = Star Wars Battlefront +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52824 -Name = Furry Tales -Region = PAL-Unk +Serial = SLUS-20899 +Name = Samurai Jack - The Shadow of Aku +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52825 -Name = Lemony Snicket's A Series of Unfortunate Events -Region = PAL-Unk +Serial = SLUS-20901 +Name = FlatOut +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52831 -Name = Syberia 2 -Region = PAL-M5 +Serial = SLUS-20902 +Name = Shadow of Rome +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52832 +Serial = SLUS-20903 Name = MegaMan X - Command Mission -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52834 -Name = Sega Superstars Eyetoy Bundle -Region = PAL-Unk -Compat = 1 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52835 -Name = Mummy, The -Region = PAL-Unk +Serial = SLUS-20904 +Name = SpongeBob Squarepants - The Movie +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52836 -Name = Knight Rider 2 -Region = PAL-Unk +Serial = SLUS-20905 +Name = Incredibles, The +Region = NTSC-U Compat = 5 +[patches = EBDB6E4B] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,0010ec20,word,00000000 + comment=- This disc has the same CRC as SLES-52812, the PAL-E disc. +[/patches] --------------------------------------------- -Serial = SLES-52843 -Name = Garfield -Region = PAL-Unk +Serial = SLUS-20906 +Name = Fight Night 2004 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52844 -Name = Midway Arcade Treasures 2 -Region = PAL-Unk +Serial = SLUS-20907 +Name = Serious Sam - Next Encounter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52845 -Name = Gadget and the Gadgetinis -Region = PAL-Unk +Serial = SLUS-20908 +Name = Guilty Gear Isuka +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52852 -Name = Capcom Fighting Jam -Region = PAL-Unk +Serial = SLUS-20909 +Name = Crash Bandicoot Twinsanity +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52853 -Name = Miami Vice -Region = PAL-Unk +Serial = SLUS-20910 +Name = Test Drive - Eve of Destruction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52854 -Name = Capcom Fighting Jam -Region = PAL-Unk +Serial = SLUS-20911 +Name = Shin Megami Tensei: Nocturne +Region = NTSC-U Compat = 5 +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLES-52857 -Name = Fairly Odd Parents, The - Shadow Showdown -Region = PAL-Unk +Serial = SLUS-20912 +Name = Superbikes TT +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52858 -Name = Cocoto Kart Racer -Region = PAL-Unk +Serial = SLUS-20913 +Name = Inuyasha - The Secret of The Cursed Mask +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52859 -Name = Project - Snowblind -Region = PAL-E +Serial = SLUS-20915 +Name = Metal Gear Solid 3 - Snake Eater +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52861 -Name = King Arthur -Region = PAL-Unk +Serial = SLUS-20916 +Name = Dance Dance Revolution Extreme +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52863 -Name = Pinball Hall of Fame -Region = PAL-Unk +Serial = SLUS-20917 +Name = Sonic Mega Collection Plus +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-20917/SLUS-20718 --------------------------------------------- -Serial = SLES-52864 -Name = MX World Tour -Region = PAL-Unk +Serial = SLUS-20918 +Name = Super Monkey Ball Deluxe +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52867 -Name = Spindrive Ping Pong -Region = PAL-Unk +Serial = SLUS-20919 +Name = ESPN - NFL 2K5 +Region = NTSC-U +Compat = 5 +[patches = 42F9D5AF] + //Patched by Prafull + //Fixes random hangs + patch=0,EE,0041c680,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-52868 -Name = Viewtiful Joe 2 -Region = PAL-Unk +Serial = SLUS-20920 +Name = ESPN - NBA 2K5 +Region = NTSC-U +[patches = 903C7BC5] + //Patched by Prafull + //avoid hanging at loading screen + patch=0,EE,003bc800,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-52872 -Name = Constantine -Region = PAL-Unk +Serial = SLUS-20921 +Name = ESPN - NHL 2K5 +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-52874 -Name = Dark Wind (with Gametrak) -Region = PAL-Unk +Serial = SLUS-20922 +Name = ESPN - College Hoops 2K5 +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-52876 -Name = King of Fighters 2000-2001 -Region = PAL-Unk +Serial = SLUS-20923 +Name = King of Fighters - Maximum Impact +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52877 -Name = Haunting Ground -Region = PAL-M5 +Serial = SLUS-20924 +Name = Duel Masters +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52882 -Name = Stolen -Region = PAL-M5 -Compat = 3 +Serial = SLUS-20925 +Name = Shark Tale +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-52884 -Name = Duel Masters -Region = PAL-Unk +Serial = SLUS-20926 +Name = Harry Potter and The Prisoner of Azkaban +Region = NTSC-U --------------------------------------------- -Serial = SLES-52885 -Name = Sega Superstars -Region = PAL-Unk +Serial = SLUS-20927 +Name = Time Crisis - Crisis Zone +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52886 -Name = Power Rangers Dino Thunder -Region = PAL-Unk +Serial = SLUS-20928 +Name = Echo Night - Beyond +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52887 -Name = Power Rangers Dino Thunder -Region = PAL-Unk +Serial = SLUS-20929 +Name = Gundam Battle Assault 3 featuring Gundam Seed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52888 -Name = Brothers in Arms: Road to Hill 30 -Region = PAL-M5 +Serial = SLUS-20930 +Name = Choro Q +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52889 -Name = Disney's Winnie the Pooh Rumbly Tumbly Adventure -Region = PAL-Unk +Serial = SLUS-20931 +Name = Trigger Man +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52895 -Name = Spongebob Squarepants - The Movie -Region = PAL-Unk +Serial = SLUS-20932 +Name = Mercenaries - Playground of Destruction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52896 -Name = Spongebob Squarepants - The Movie -Region = PAL-Unk +Serial = SLUS-20933 +Name = Smash Court Pro Tournament Tennis 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52898 -Name = King of Fighters - Maximum Impact -Region = PAL-Unk +Serial = SLUS-20934 +Name = Death by Degrees +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52900 -Name = Rapala Pro Fishing -Region = PAL-Unk +Serial = SLUS-20935 +Name = IHRA Professional Drag Racing 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52902 -Name = Arcade Classics Vol.1 -Region = PAL-Unk +Serial = SLUS-20936 +Name = UEFA Euro 2004 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52906 -Name = Spongebob and Friends - Movin' -Region = PAL-Unk +Serial = SLUS-20937 +Name = Wild ARMs - Alter Code F +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52908 -Name = Urbz, The - Sims in the City -Region = PAL-Unk +Serial = SLUS-20938 +Name = Dynasty Warriors 4 - Empires +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52909 -Name = UEFA Champions League 2004-2005 -Region = PAL-E-G +Serial = SLUS-20939 +Name = Viewtiful Joe 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52910 -Name = UEFA Champions League 2005 -Region = PAL-Unk +Serial = SLUS-20940 +Name = Yu-Gi-Oh! Capsule Monster Coliseum +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52911 -Name = UEFA Champions League 2005 -Region = PAL-Unk +Serial = SLUS-20941 +Name = Incredible Hulk, The - Ultimate Destruction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52912 -Name = UEFA Champions League 2005 -Region = PAL-Unk +Serial = SLUS-20942 +Name = Robots +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52913 -Name = Suikoden IV -Region = PAL-Unk +Serial = SLUS-20943 +Name = Heroes of the Pacific +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52915 -Name = Shark Tale -Region = PAL-Unk +Serial = SLUS-20944 +Name = Power Rangers - Dino Thunder +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52917 -Name = Scaler -Region = PAL-Unk -Compat = 4 +Serial = SLUS-20945 +Name = Destroy All Humans! +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52918 -Name = Scaler -Region = PAL-Unk +Serial = SLUS-20946 +Name = Grand Theft Auto - San Andreas +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52919 -Name = NRL Rugby League 2 -Region = PAL-E +Serial = SLUS-20947 +Name = Winback 2nd Operation +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52921 -Name = Rogue Trooper -Region = PAL-Unk +Serial = SLUS-20948 +Name = Crimson Tears +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52922 -Name = EyeToy - Disney Move -Region = PAL-Unk +Serial = SLUS-20949 +Name = Street Fighter Anniversary Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52927 -Name = Grand Theft Auto - San Andreas -Region = PAL-G +Serial = SLUS-20950 +Name = Capcom Fighting Evolution +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52931 -Name = Legend of Kay -Region = PAL-M5 +Serial = SLUS-20951 +Name = Viewtiful Joe +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52939 -Name = Airborne Troops - Countdown to D-Day -Region = PAL-Unk +Serial = SLUS-20952 +Name = Tak 2 - The Staff of Dreams +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52940 -Name = S.L.A.I. Steel Lancer Arena International -Region = PAL-Unk +Serial = SLUS-20953 +Name = Shaman King - Power of Spirit +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52941 -Name = Gungrave - Overdose -Region = PAL-Unk +Serial = SLUS-20954 +Name = Hot Wheels - Stunt Track Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52942 -Name = Midnight Club 3 - DUB Edition -Region = PAL-Unk +Serial = SLUS-20955 +Name = Phantom Brave +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52943 -Name = ESPN NFL 2K5 -Region = PAL-Unk +Serial = SLUS-20956 +Name = Leisure Suit Larry: Magna Cum Laude +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52944 -Name = Robotech - Invasion -Region = PAL-Unk +Serial = SLUS-20957 +Name = Scaler +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52949 -Name = Arcade Action - 30 Games -Region = PAL-Unk +Serial = SLUS-20958 +Name = Tom Clancy's Splinter Cell - Pandora Tomorrow +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52950 -Name = Shadow of Rome -Region = PAL-M5 +Serial = SLUS-20959 +Name = Dukes of Hazzard, The - Return of the General Lee +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52951 -Name = Phantom Brave -Region = PAL-Unk +Serial = SLUS-20960 +Name = MegaMan X8 +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-20960/SLUS-20903 --------------------------------------------- -Serial = SLES-52954 -Name = WWII - Tank Battles -Region = PAL-Unk +Serial = SLUS-20961 +Name = Neo Contra +Region = NTSC-U +Compat = 4 +[patches = 08901101] + + comment=Patches By Nachbrenner + + //fix IPU busy! ingame + patch=0,EE,003a9538,word,03e00008 + patch=0,EE,003a953c,word,00000000 + + patch=0,EE,003a9460,word,03e00008 + patch=0,EE,003a9464,word,00000000 + patch=1,EE,00100530,word,00000000 + +[/patches] --------------------------------------------- -Serial = SLES-52955 -Name = Deadly Strike -Region = PAL-Unk +Serial = SLUS-20962 +Name = Castle of Shikigami 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52956 -Name = Action Girlz Racing -Region = PAL-Unk +Serial = SLUS-20963 +Name = Final Fantasy XII +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52957 -Name = Urban Extreme -Region = PAL-Unk +Serial = SLUS-20964 +Name = Devil May Cry 3 +Region = NTSC-U +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLES-52958 -Name = Premier Manager 2004-2005 -Region = PAL-Unk +Serial = SLUS-20965 +Name = Tony Hawk's Underground 2 +Region = NTSC-U +Compat = 5 +vuRoundMode = 0 //Crashes without. --------------------------------------------- -Serial = SLES-52960 -Name = Premier Manager 2004-2005 -Region = PAL-Unk +Serial = SLUS-20966 +Name = State of Emergency 2 +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52961 -Name = Premier Manager 2004-2005 -Region = PAL-Unk +Serial = SLUS-20967 +Name = Enthusia Professional Racing +Region = NTSC-U +Compat = 5 +eeClampMode = 3 --------------------------------------------- -Serial = SLES-52963 -Name = Cold Winter -Region = PAL-Unk +Serial = SLUS-20968 +Name = Karaoke Revolution 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-52964 -Name = NanoBreaker -Region = PAL-M5 +Serial = SLUS-20969 +Name = S.L.A.I. - Steel Lancer Arena International - Phantom Crash +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52965 -Name = Outlaw Golf 2 -Region = PAL-Unk +Serial = SLUS-20970 +Name = Rumble Roses +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52966 -Name = ESPN NHL 2K5 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-52967 -Name = Guilty Gear X2 Reloaded -Region = PAL-Unk +Serial = SLUS-20971 +Name = Metal Slug 4 & 5 [Disc1of2] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52968 -Name = Burnout 2 - Point of Impact -Region = PAL-Unk +Serial = SLUS-20972 +Name = Samurai Showdown V +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-20973 +Name = Champions - Return to Arms // aka "Champions of Norrath 2" +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-20973/SLUS-20565 --------------------------------------------- -Serial = SLES-52973 -Name = Ski Racing 2005 -Region = PAL-Unk +Serial = SLUS-20974 +Name = Shin Megami Tensei: Digital Devil Saga +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52974 -Name = GoldenEye - Rogue Agent -Region = PAL-Unk +Serial = SLUS-20975 +Name = One Piece - Grand Battle +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52975 -Name = GoldenEye - Au Service du Mal -Region = PAL-Unk +Serial = SLUS-20976 +Name = Ford Racing 3 +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52976 -Name = GoldenEye - Rogue Agent -Region = PAL-Unk +Serial = SLUS-20977 +Name = Virtua Fighter Cyber Generation +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52977 -Name = GoldenEye - Rogue Agent -Region = PAL-Unk +Serial = SLUS-20978 +Name = Power Drome +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-52978 -Name = La Pucelle Tactics -Region = PAL-Unk +Serial = SLUS-20979 +Name = Suikoden IV +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52980 -Name = Big Mutha Truckers 2 -Region = PAL-Unk +Serial = SLUS-20980 +Name = Ys - The Ark of Napishtim +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-52982 -Name = NFL Street 2 -Region = PAL-Unk +Serial = SLUS-20981 +Name = Teenage Mutant Ninja Turtles 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52983 -Name = Fitness Fun -Region = PAL-Unk +Serial = SLUS-20982 +Name = Bad Boys: Miami Takedown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52984 -Name = Panzer Front Ausf B -Region = PAL-Unk +Serial = SLUS-20983 +Name = Musashi Samurai Legend +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52985 -Name = Spongebob Squarepants - The Movie -Region = PAL-Unk +Serial = SLUS-20984 +Name = Resident Evil Outbreak - File #2 +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20984/SLUS-20765 --------------------------------------------- -Serial = SLES-52986 -Name = Spongebob Squarepants - The Movie -Region = PAL-Unk +Serial = SLUS-20985 +Name = Under the Skin +Region = NTSC-U --------------------------------------------- -Serial = SLES-52988 -Name = MegaMan X8 -Region = PAL-Unk +Serial = SLUS-20986 +Name = Armored Core Nexus [Evolution Disc] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20986/SLUS-21079 --------------------------------------------- -Serial = SLES-52989 -Name = Blowout -Region = PAL-Unk +Serial = SLUS-20987 +Name = Pool Paradise +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52993 -Name = TimeSplitters - Future Perfect -Region = PAL-Unk +Serial = SLUS-20988 +Name = Playboy - The Mansion +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-52998 -Name = Sonic Mega Collection Plus -Region = PAL-Unk +Serial = SLUS-20989 +Name = Polar Express, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-52999 -Name = RC Toy Machines -Region = PAL-Unk +Serial = SLUS-20990 +Name = Metal Slug 4 & 5 [Disc2of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53000 -Name = Crazy Golf -Region = PAL-Unk +Serial = SLUS-20991 +Name = NCAA Football 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53001 -Name = NBA Street 3 -Region = PAL-Unk +Serial = SLUS-20992 +Name = Catwoman +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53002 -Name = Samurai Warriors Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20993 +Name = Ghosthunter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53003 -Name = Samurai Warriors Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20994 +Name = Full Metal Alchemist and The Broken Angel +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53004 -Name = Samurai Warriors Xtreme Legends -Region = PAL-Unk +Serial = SLUS-20995 +Name = King of Fighters 2002 & 2003 [Disc1of2] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53005 -Name = Monster Trux - Off-Road Edition -Region = PAL-Unk +Serial = SLUS-20996 +Name = King of Fighters 2002 & 2003 [Disc2of2] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53006 -Name = Hamster Heroes -Region = PAL-Unk +Serial = SLUS-20997 +Name = Midway Arcade Treasures 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53007 -Name = Tom Clancy's Splinter Cell - Chaos Theory -Region = PAL-M5 +Serial = SLUS-20998 +Name = DragonBall Z - Budokai 3 +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] --------------------------------------------- -Serial = SLES-53011 -Name = Gallop Racer 2 -Region = PAL-Unk +Serial = SLUS-20999 +Name = Sega Superstars +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-53012 -Name = Tenchu - Fatal Shadows -Region = PAL-Unk +Serial = SLUS-21000 +Name = Madden NFL 2005 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53013 -Name = Tenchu - Fatal Shadows -Region = PAL-Unk +Serial = SLUS-21001 +Name = NHL 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53014 -Name = Tenchu - Fatal Shadows -Region = PAL-Unk +Serial = SLUS-21002 +Name = Tiger Woods PGA Tour 2005 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53015 -Name = Tenchu - Fatal Shadows -Region = PAL-Unk +Serial = SLUS-21003 +Name = NASCAR 2005 - Chase for the Cup +Region = NTSC-U --------------------------------------------- -Serial = SLES-53016 -Name = Tenchu - Fatal Shadows -Region = PAL-Unk +Serial = SLUS-21004 +Name = Def Jam - Fight for NY +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53017 -Name = Teenage Mutant Ninja Turtles 2 - Battle Nexus -Region = PAL-Unk +Serial = SLUS-21005 +Name = Kingdom Hearts II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53020 -Name = Ghost in the Shell - Stand Alone Complex -Region = PAL-M5 -[patches = BF6F101F] +Serial = SLUS-21006 +Name = Ghost in the Shell - Stane Alone Complex +Region = NTSC-U +Compat = 5 +[patches = 95CC86EF] comment=Rearranging COP2 ops to avoid macflag bad stuff // Solves door problems, possibly other issues later on (nobody ever got that far :P) - patch=0,EE,0010BC88,word,48468800 - patch=0,EE,0010BC8C,word,4bec682c - patch=0,EE,0010BC90,word,4b8d617d + patch=0,EE,0010BC88,word,48468800 + patch=0,EE,0010BC8C,word,4bec682c + patch=0,EE,0010BC90,word,4b8d617d patch=0,EE,0010BC98,word,4a6d617c - patch=0,EE,0012B2CC,word,48468800 - patch=0,EE,0012B2D0,word,4bec682c - patch=0,EE,0012B2D4,word,4b8d617d - patch=0,EE,0012B2DC,word,4a6d617c - patch=0,EE,0012B5F4,word,48468800 - patch=0,EE,0012B5F8,word,4bec682c - patch=0,EE,0012B5FC,word,4b8d617d - patch=0,EE,0012B604,word,4a6d617c - patch=0,EE,001B0B58,word,48468800 - patch=0,EE,001B0B5C,word,4bec682c - patch=0,EE,001B0B68,word,4b8d617d - patch=0,EE,001BF5FC,word,48588800 - patch=0,EE,001BF60C,word,4a0002ff - patch=0,EE,001BFBB8,word,48588800 - patch=0,EE,001BFBC8,word,4a0002ff - patch=0,EE,001BF818,word,48588800 - patch=0,EE,001BF828,word,4a0002ff - patch=0,EE,001C017C,word,48588800 - patch=0,EE,001C018C,word,4a0002ff + patch=0,EE,0012B200,word,48468800 + patch=0,EE,0012B204,word,4bec682c + patch=0,EE,0012B208,word,4b8d617d + patch=0,EE,0012B210,word,4a6d617c + patch=0,EE,0012B528,word,48468800 + patch=0,EE,0012B52C,word,4bec682c + patch=0,EE,0012B530,word,4b8d617d + patch=0,EE,0012B538,word,4a6d617c + patch=0,EE,00165BB0,word,48468800 + patch=0,EE,00165BB4,word,4bec682c + patch=0,EE,00165BB8,word,4b8d617d + patch=0,EE,00165BC0,word,4a6d617c + patch=0,EE,001B0A3C,word,48468800 + patch=0,EE,001B0A40,word,4bec682c + patch=0,EE,001B0A4C,word,4b8d617d + patch=0,EE,001BF4C0,word,48588800 + patch=0,EE,001BF4D0,word,4a0002ff + patch=0,EE,001BFA7C,word,48588800 + patch=0,EE,001BFA8C,word,4a0002ff + patch=0,EE,001BF6DC,word,48588800 + patch=0,EE,001BF6EC,word,4a0002ff + patch=0,EE,001C0040,word,48588800 + patch=0,EE,001C0050,word,4a0002ff [/patches] --------------------------------------------- -Serial = SLES-53021 -Name = Gunbird - Special Edition -Region = PAL-M3 +Serial = SLUS-21007 +Name = Kuon +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53022 -Name = ESPN NBA 2K5 -Region = PAL-Unk +Serial = SLUS-21008 +Name = Katamari Damacy +Region = NTSC-U +Compat = 5 +mvuFlagSpeedHack = 0 --------------------------------------------- -Serial = SLES-53023 -Name = RTL Ski Jump 2005 -Region = PAL-Unk +Serial = SLUS-21009 +Name = Sega Classics Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53024 -Name = Altered Beast -Region = PAL-Unk -Compat = 2 +Serial = SLUS-21010 +Name = NanoBreaker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53025 -Name = Red Ninja - End of Honor -Region = PAL-Unk +Serial = SLUS-21011 +Name = Cabela's Big Game Hunter - 2005 Adventures +Region = NTSC-U --------------------------------------------- -Serial = SLES-53026 -Name = Red Ninja - End of Honor -Region = PAL-Unk +Serial = SLUS-21012 +Name = Rapala Pro Fishing +Region = NTSC-U --------------------------------------------- -Serial = SLES-53027 -Name = Championship Manager 5 -Region = PAL-Unk +Serial = SLUS-21013 +Name = Crash 'N' Burn +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53028 -Name = Hitman - Blood Money -Region = PAL-E +Serial = SLUS-21014 +Name = High Roller Casino +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53029 -Name = Hitman - Blood Money -Region = PAL-Unk +Serial = SLUS-21015 +Name = Madagascar +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53030 -Name = Hitman - Blood Money -Region = PAL-G +Serial = SLUS-21016 +Name = 25 to Life +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53031 -Name = Hitman - Blood Money -Region = PAL-Unk +Serial = SLUS-21017 +Name = Showdown - Legends of Wrestling +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53032 -Name = Hitman - Blood Money -Region = PAL-S +Serial = SLUS-21018 +Name = Dog's Life +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53035 -Name = Masters of the Universe - He-Man - Defender of Greyskull -Region = PAL-Unk +Serial = SLUS-21019 +Name = Technic Beat +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53036 -Name = Tak 2 - The Stuff of Dreams -Region = PAL-Unk +Serial = SLUS-21020 +Name = GunGrave - OverDose +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53037 -Name = Super Monkey Ball Deluxe -Region = PAL-M5 -Compat = 3 +Serial = SLUS-21021 +Name = Cabela's Deer Hunt - 2005 Season +Region = NTSC-U --------------------------------------------- -Serial = SLES-53038 -Name = Devil May Cry 3 - Dante's Awakening -Region = PAL-E +Serial = SLUS-21022 +Name = Prince of Persia - Warrior Within +Region = NTSC-U Compat = 5 -eeRoundMode = 0 ---------------------------------------------- -Serial = SLES-53039 -Name = Champions - Return to Arms // aka "Champions of Norrath 2" -Region = PAL-Unk -Compat = 4 --------------------------------------------- -Serial = SLES-53041 -Name = RTL Ski Alpine 2005 -Region = PAL-Unk +Serial = SLUS-21025 +Name = Madden NFL 2005 [Special Collectors Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53044 -Name = Juiced -Region = PAL-R +Serial = SLUS-21026 +Name = Battlefield 2 - Mordern Combat +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53045 -Name = Street Racing Syndicate -Region = PAL-Unk -Compat = 3 +Serial = SLUS-21027 +Name = Lord of the Rings, The - The Third Age +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53046 -Name = CT Special Forces - Fire for Effect -Region = PAL-Unk +Serial = SLUS-21028 +Name = World Championship Poker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53047 -Name = Punisher, The -Region = PAL-M2 +Serial = SLUS-21029 +Name = Midnight Club 3 - DUB Edition +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53049 -Name = Punisher, The -Region = PAL-Unk +Serial = SLUS-21030 +Name = Outlaw Golf 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53052 -Name = Robots -Region = PAL-Unk +Serial = SLUS-21031 +Name = Gallop Racer 2004 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53058 -Name = Ricky Ponting International Cricket -Region = PAL-Unk +Serial = SLUS-21032 +Name = Marc Ecko's Getting Up - Contents Under Pressure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53059 -Name = Samurai Showdown V -Region = PAL-Unk +Serial = SLUS-21033 +Name = Second Sight +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53060 -Name = Asterix & Obelix XXL 2 - Mission Las Vegum -Region = PAL-Unk +Serial = SLUS-21034 +Name = Magix Music Maker [Deluxe Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53061 -Name = Atari Anthology -Region = PAL-Unk +Serial = SLUS-21035 +Name = Major League Baseball 2K5 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53062 -Name = Yu Yu Hakuhso - Dark Tournament -Region = PAL-Unk +Serial = SLUS-21036 +Name = Get On Da Mic +Region = NTSC-U --------------------------------------------- -Serial = SLES-53073 -Name = Michigan : Report from Hell -Region = PAL-E +Serial = SLUS-21037 +Name = Project - Snowblind +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53064 -Name = FIFA Street -Region = PAL-Unk +Serial = SLUS-21038 +Name = Pinball Hall of Fame - The Gottlieb Collection +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53065 -Name = SNK vs. Capcom - SVC Chaos -Region = PAL-Unk +Serial = SLUS-21039 +Name = TOCA Race Driver 2 - The Ultimate Racing Simulator +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53074 -Name = Soccer Life -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53075 -Name = Area 51 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53076 -Name = Triggerman -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53078 -Name = Spy vs. Spy -Region = PAL-Unk +Serial = SLUS-21040 +Name = Shield, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53079 -Name = Ys - The Ark of Napishtim -Region = PAL-Unk -EETimingHack = 1 ---------------------------------------------- -Serial = SLES-53080 -Name = Extreme Sprint 3010 -Region = PAL-Unk +Serial = SLUS-21041 +Name = Shadow Hearts - Covenant [Disc1of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53082 -Name = World Championship Snooker 2005 -Region = PAL-Unk +Serial = SLUS-21042 +Name = Darkwatch +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53084 -Name = Fight Night Round 2 -Region = PAL-Unk +Serial = SLUS-21043 +Name = Backyard Wrestling 2 - There Goes the Neighborhood +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53087 -Name = TOCA Race Driver 3 -Region = PAL-Unk +Serial = SLUS-21044 +Name = Shadow Hearts - Covenant [Disc2of2] +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-21041 --------------------------------------------- -Serial = SLES-53088 -Name = DTM Race Driver 3 -Region = PAL-Unk +Serial = SLUS-21045 +Name = Conflict Vietnam +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53089 -Name = V8 Supercars 3 -Region = PAL-Unk +Serial = SLUS-21046 +Name = King Arthur +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53090 -Name = Circuit Blasters -Region = PAL-M5 +Serial = SLUS-21047 +Name = Cold Fear +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53091 -Name = Predator - Concrete Jungle -Region = PAL-Unk +Serial = SLUS-21048 +Name = Evil Dead - Regeneration +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53092 -Name = Motocross Mania 3 -Region = PAL-Unk +Serial = SLUS-21049 +Name = Outlaw Volleyball Remixed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53093 -Name = Cold Winter -Region = PAL-Unk +Serial = SLUS-21050 +Name = Burnout 3 - Takedown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53094 -Name = Rugby 2005 -Region = PAL-Unk +Serial = SLUS-21051 +Name = FIFA 2005 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53095 -Name = Rugby 2005 -Region = PAL-Unk +Serial = SLUS-21052 +Name = Disney's Monsters Inc. +Region = NTSC-U --------------------------------------------- -Serial = SLES-53096 -Name = Worms 4 - Mayhem -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21053 +Name = Disney's Stitch 926 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53098 -Name = Conspiracy - Weapons of Mass Destruction -Region = PAL-Unk +Serial = SLUS-21054 +Name = Disney's Classics - Treasure Planet +Region = NTSC-U --------------------------------------------- -Serial = SLES-53099 -Name = Pilot Down - Behind Enemy Lines -Region = PAL-Unk +Serial = SLUS-21056 +Name = Cabal, The ~~CANCELLED~~ +Region = NTSC-U --------------------------------------------- -Serial = SLES-53100 -Name = Scooby Doo! Unmasked -Region = PAL-Unk +Serial = SLUS-21057 +Name = Ty the Tasmanian Tiger 2 - Bush Rescue +Region = NTSC-U --------------------------------------------- -Serial = SLES-53104 -Name = Tom Clancy's Rainbow Six - Lockdown -Region = PAL-Unk +Serial = SLUS-21058 +Name = NBA Live 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53106 -Name = MX vs. ATV Unleashed -Region = PAL-Unk +Serial = SLUS-21059 +Name = Tekken 5 +Region = NTSC-U +Compat = 5 +eeClampMode = 1 --------------------------------------------- -Serial = SLES-53107 -Name = Cabela's Big Game Hunter 2005 Adventures -Region = PAL-E +Serial = SLUS-21060 +Name = WWE SmackDown! vs. RAW +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53108 -Name = American Chopper -Region = PAL-Unk +Serial = SLUS-21062 +Name = Jaws Unleashed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53114 -Name = Full Spectrum Warrior -Region = PAL-Unk -EETimingHack = 1 //flickery textures +Serial = SLUS-21063 +Name = Shining Tears +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53119 -Name = Kessen III -Region = PAL-Unk +Serial = SLUS-21064 +Name = GoldenEye - Rogue Agent +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53120 -Name = Kessen III -Region = PAL-Unk +Serial = SLUS-21065 +Name = Need for Speed - Underground 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53121 -Name = Kessen III -Region = PAL-Unk +Serial = SLUS-21066 +Name = Urbz, The - Sims in the City +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53124 -Name = Project Snowblind -Region = PAL-Unk +Serial = SLUS-21067 +Name = Digimon Rumble Arena 2 +Region = NTSC-U +Compat = 5 +FpuCompareHack = 1 --------------------------------------------- -Serial = SLES-53125 -Name = Enthusia - Professional Racing -Region = PAL-Unk -eeClampMode = 3 +Serial = SLUS-21068 +Name = Vietcong - Purple Haze +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53127 -Name = Teenage Mutant Ninja Turtles - Mutant Melee -Region = PAL-Unk +Serial = SLUS-21069 +Name = American Chopper +Region = NTSC-U --------------------------------------------- -Serial = SLES-53129 -Name = Tak 2 - The Staff of Dreams -Region = PAL-Unk +Serial = SLUS-21070 +Name = Final Fantasy XI - Chains of Promathia +Region = NTSC-U --------------------------------------------- -Serial = SLES-53130 -Name = World Championship Poker -Region = PAL-Unk +Serial = SLUS-21071 +Name = Nightmare of Druaga +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53131 -Name = Full Spectrum Warrior -Region = PAL-R -EETimingHack = 1 //flickery textures +Serial = SLUS-21072 +Name = Finny the Fish & The Seven Waters +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53138 -Name = Outlaw Volleyball - Remixed -Region = PAL-Unk +Serial = SLUS-21073 +Name = Nicktoons Movin' +Region = NTSC-U --------------------------------------------- -Serial = SLES-53139 -Name = Alien Humanoid -Region = PAL-Unk +Serial = SLUS-21074 +Name = Guy Game, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53140 -Name = Choro Q -Region = PAL-E +Serial = SLUS-21075 +Name = Haunting Ground +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53141 -Name = X-Treme Quads -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21076 +Name = Atari Anthology +Region = NTSC-U --------------------------------------------- -Serial = SLES-53142 -Name = Doomsday Racers -Region = PAL-Unk +Serial = SLUS-21077 +Name = Gauntlet - Seven Sorrows +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53143 -Name = Fantastic Four -Region = PAL-Unk +Serial = SLUS-21078 +Name = Lemony Snicket's A Series of Unfortunate Events +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53144 -Name = Four Fantastiques, Les -Region = PAL-Unk +Serial = SLUS-21079 +Name = Armored Core Nexus [Revolution Disc] +Region = NTSC-U +MemCardFilter = SLUS-20986/SLUS-21079 --------------------------------------------- -Serial = SLES-53145 -Name = Fantastic Four -Region = PAL-Unk +Serial = SLUS-21080 +Name = Samurai Warriors - Xtreme Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53146 -Name = I Fantastici Quattro -Region = PAL-Unk +Serial = SLUS-21081 +Name = Mortal Kombat - Deception [Premium Pack] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53147 -Name = Four Fantasticos, Los -Region = PAL-Unk +Serial = SLUS-21082 +Name = Chronicles of Narnia, The - The Lion, The Witch and The Wardrobe +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53148 -Name = Fruitfall -Region = PAL-Unk +Serial = SLUS-21083 +Name = LEGO Star Wars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53150 -Name = 10 Pin - Champions' Alley -Region = PAL-Unk +Serial = SLUS-21084 +Name = Winnie the Pooh's Rumbly Tumbly Adventure +Region = NTSC-U --------------------------------------------- -Serial = SLES-53151 -Name = Juiced -Region = PAL-Unk +Serial = SLUS-21086 +Name = Big Mutha Truckers 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53152 -Name = Mashed Fully Loaded -Region = PAL-Unk +Serial = SLUS-21087 +Name = Mortal Kombat - Shaolin Monks +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53154 -Name = The Bard's Tale -Region = PAL-M4 // Multiple languages -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] +Serial = SLUS-21088 +Name = Disney's Chicken Little +Region = NTSC-U --------------------------------------------- -Serial = SLES-53155 -Name = Star Wars - Episode III - Revenge of the Sith -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21089 +Name = Karaoke Revolution Volume 3 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53156 -Name = Star Wars - Episode III - La Revanche des Sith -Region = PAL-Unk +Serial = SLUS-21090 +Name = Alien Homind +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53157 -Name = Star Wars - Episode III - Die Rache der Sith -Region = PAL-Unk +Serial = SLUS-21091 +Name = Scooby-Doo! Unmasked +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53158 -Name = Cold Fear -Region = PAL-Unk -Compat = 2 +Serial = SLUS-21093 +Name = Worms Forts - Under Siege! +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53172 -Name = Strike Force Bowling -Region = PAL-M5 +Serial = SLUS-21094 +Name = Midway Arcade Treasures 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53174 -Name = Golden Age of Racing -Region = PAL-Unk +Serial = SLUS-21095 +Name = DT Racer +Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLES-53175 -Name = Top Spin -Region = PAL-Unk +Serial = SLUS-21096 +Name = Ape Escape - Pumped & Primed +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53186 -Name = International Super Karts -Region = PAL-Unk +Serial = SLUS-21097 +Name = MX World Tour featuring Jamie Little +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53190 -Name = Girl Zone -Region = PAL-Unk +Serial = SLUS-21098 +Name = Frogger - Ancient Shadow +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53191 -Name = Kaido Racer -Region = PAL-Unk +Serial = SLUS-21099 +Name = Stolen +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53192 -Name = Nightmare Before Christmas, The - Tim Burton's -Region = PAL-Unk +Serial = SLUS-21100 +Name = NCAA March Madness 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53194 -Name = LEGO Star Wars -Region = PAL-Unk +Serial = SLUS-21101 +Name = Mortal Kombat - Deception [Premium Pack] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53195 -Name = Punisher, The -Region = PAL-Unk +Serial = SLUS-21102 +Name = Hard Rock Casino +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53196 -Name = Destroy All Humans! -Region = PAL-Unk +Serial = SLUS-21103 +Name = Commandos Strike Force +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53197 -Name = Destroy All Humans! -Region = PAL-Unk +Serial = SLUS-21104 +Name = MX vs. ATV Unleashed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53199 -Name = 25 to Life -Region = PAL-Unk +Serial = SLUS-21105 +Name = Tom Clancy's Ghost Recon 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53200 -Name = DragonBall Z - Budokai Tenkaichi -Region = PAL-Unk +Serial = SLUS-21106 +Name = True Crime - New York City +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53201 -Name = Saint Seiya Chapter Sanctuary -Region = PAL-M5 +Serial = SLUS-21107 +Name = X-Men - The Official Game +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53203 -Name = Punisher, The -Region = PAL-Unk +Serial = SLUS-21108 +Name = Hitman - Blood Money +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53218 -Name = Dancing Stage MAX -Region = PAL-Unk +Serial = SLUS-21109 +Name = Drive to Survive +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53219 -Name = Winx Club -Region = PAL-Unk +Serial = SLUS-21110 +Name = Pirates of the Caribbean - The Legend of Jack Sparrow +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53221 -Name = l'Entraineur 5 -Region = PAL-Unk +Serial = SLUS-21111 +Name = Scarface - The World is Yours +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53222 -Name = Scudetto 5 -Region = PAL-Unk +Serial = SLUS-21112 +Name = L.A. Rush +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53223 -Name = Championship Manager 5 -Region = PAL-Unk +Serial = SLUS-21113 +Name = Atelier Iris: Eternal Mana +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53224 -Name = Championship Manager 5 -Region = PAL-Unk +Serial = SLUS-21114 +Name = NHRA Championship Drag Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53225 -Name = Dreamworks' Madagascar -Region = PAL-Unk +Serial = SLUS-21115 +Name = Okami +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53226 -Name = Dreamworks' Madagascar -Region = PAL-Unk +Serial = SLUS-21116 +Name = 187 - Ride or Die +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53227 -Name = Madagascar -Region = PAL-Unk +Serial = SLUS-21117 +Name = World Soccer - Winning Eleven 8 - International +Region = NTSC-U --------------------------------------------- -Serial = SLES-53233 -Name = Assault Suits Valken -Region = PAL-E +Serial = SLUS-21118 +Name = NFL Street 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53234 -Name = Samurai Western -Region = PAL-M5 +Serial = SLUS-21119 +Name = Kessen 3 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53235 -Name = Syberia II -Region = PAL-Unk +Serial = SLUS-21120 +Name = Psychonauts +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53236 -Name = Buzzrod Fishing Fantasy -Region = PAL-E +Serial = SLUS-21122 +Name = Taito Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53237 -Name = Fire Heroes -Region = PAL-Unk +Serial = SLUS-21123 +Name = DragonBall Z - Budokai 3 [Limited Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53238 -Name = Premier Manager 2005-2006 -Region = PAL-Unk +Serial = SLUS-21124 +Name = Delta Force - Black Hawk Down +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53242 -Name = Madagascar -Region = PAL-Unk +Serial = SLUS-21125 +Name = Airboure Troops - Countdown to D-Day +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53246 -Name = Madagascar -Region = PAL-Unk +Serial = SLUS-21126 +Name = NBA Street v3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53280 -Name = 7 Sins -Region = PAL-M3 +Serial = SLUS-21127 +Name = Brave - The Search for Spirit Dancer +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53281 -Name = Fantastic Four -Region = PAL-Unk +Serial = SLUS-21128 +Name = Blitz - The League +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53282 -Name = Harvest Fishing -Region = PAL-Unk +Serial = SLUS-21129 +Name = Tenchu 4 - Fatal Shadows +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53284 -Name = Guilty Gear Isuka -Region = PAL-Unk +Serial = SLUS-21130 +Name = SnoCross 2 featuring Blair Morgan +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53287 -Name = Tom Clancy's Splinter Cell - Chaos Theory -Region = PAL-M3 +Serial = SLUS-21131 +Name = Pump It Up - Exceed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53296 -Name = Ford Mustang - The Legend Lives -Region = PAL-E +Serial = SLUS-21132 +Name = Stella Deus: The Gate of Eternity +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53297 -Name = 7 Sins -Region = PAL-Unk +Serial = SLUS-21133 +Name = Xenosaga - Episode II - Jenseits von Gut und Bose [Disc2of2] +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-20469/SLUS-20892 --------------------------------------------- -Serial = SLES-53299 -Name = Delta Force - Black Hawk Down -Region = PAL-Unk +Serial = SLUS-21134 +Name = Resident Evil 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53300 -Name = SOCOM 3 - U.S. Navy SEALs -Region = PAL-Unk +Serial = SLUS-21135 +Name = MVP Baseball 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53301 -Name = Bomberman Hardball -Region = PAL-Unk +Serial = SLUS-21136 +Name = Graffiti Kingdom +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53303 -Name = Skijumping 2006 -Region = PAL-Unk +Serial = SLUS-21137 +Name = Tom Clancy's Splinter Cell - Chaos Theory +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53309 -Name = Transformers -Region = PAL-Unk -VIFFIFOHack = 1 +Serial = SLUS-21138 +Name = X-Men Legends II - Rise of Apocalypse +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53311 -Name = Graffiti Kingdom -Region = PAL-Unk +Serial = SLUS-21139 +Name = Gun +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53317 -Name = Black Market Bowling -Region = PAL-Unk +Serial = SLUS-21140 +Name = Mobile Suit Gundam Seed - Never Ending Tomorrow +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53318 -Name = Crazy Golf - World Tour -Region = PAL-M6 +Serial = SLUS-21142 +Name = Constantine +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53319 -Name = Resident Evil Outbreak - File #2 -Region = PAL-Unk +Serial = SLUS-21143 +Name = Star Wars - Episode III - Revenge of the Sith +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53320 -Name = S.C.A.R. - Squadra Corse Alfa Romeo -Region = PAL-Unk +Serial = SLUS-21144 +Name = Tom Clancy's Rainbow Six - Lockdown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53322 -Name = Obscure -Region = PAL-Unk +Serial = SLUS-21145 +Name = Full Spectrum Warrior +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLES-53332 -Name = Medal of Honor - European Assault -Region = PAL-Unk +Serial = SLUS-21146 +Name = Far East of Eden +Region = NTSC-U --------------------------------------------- -Serial = SLES-53333 -Name = Medal of Honor - Les Faucons de Guerre -Region = PAL-Unk +Serial = SLUS-21147 +Name = FIFA Street +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53334 -Name = Medal of Honor - European Assault -Region = PAL-Unk +Serial = SLUS-21148 +Name = TimeSplitters - Future Perfect +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53335 -Name = Medal of Honor - European Assault -Region = PAL-Unk +Serial = SLUS-21149 +Name = Yourself Fitness +Region = NTSC-U --------------------------------------------- -Serial = SLES-53336 -Name = Medal of Honor - European Assault -Region = PAL-Unk +Serial = SLUS-21150 +Name = Beat Down - Fists of Vengeance +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53338 -Name = Victorious Boxers 2 - Fighting Spirit -Region = PAL-Unk +Serial = SLUS-21151 +Name = Disney-Pixar's Cars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53339 -Name = Dynasty Warriors 5 -Region = PAL-E +Serial = SLUS-21152 +Name = Shin Megami Tensei: Digital Devil Saga 2 +Region = NTSC-U +Compat = 5 +EETimingHack = 1 +MemCardFilter = SLUS-21152/SLUS-20974 --------------------------------------------- -Serial = SLES-53341 +Serial = SLUS-21153 Name = Dynasty Warriors 5 -Region = PAL-G +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53342 -Name = EA Sports Cricket 2005 -Region = PAL-Unk +Serial = SLUS-21154 +Name = Killer 7 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53344 -Name = Gerrilla Strike -Region = PAL-E +Serial = SLUS-21155 +Name = Codename - Kids Next Door - Operation V.I.D.E.O.G.A.M.E. +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53346 -Name = DragonBall Z - Budokai 3 [Collector's Edition] -Region = PAL-Unk +Serial = SLUS-21156 +Name = Without Warning +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53350 -Name = Sonic Gems Collection -Region = PAL-E +Serial = SLUS-21157 +Name = Flipnic - Ultimate Pinball +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53351 -Name = SSX On Tour -Region = PAL-E +Serial = SLUS-21158 +Name = Rugby 2005 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53354 -Name = Superbike GP -Region = PAL-Unk +Serial = SLUS-21159 +Name = Moto GP 4 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53356 -Name = Colosseum - Road to Freedom -Region = PAL-Unk +Serial = SLUS-21160 +Name = Tekken 5 [Demo] +Region = NTSC-U +eeClampMode = 1 --------------------------------------------- -Serial = SLES-53357 -Name = Colosseum - Road to Freedom -Region = PAL-Unk +Serial = SLUS-21161 +Name = Fight Night - Round 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53360 -Name = Alarm for Cobra 11 Vol.2 - Hot Pursuit -Region = PAL-Unk +Serial = SLUS-21162 +Name = Ford Mustang - The Legend Lives +Region = NTSC-U --------------------------------------------- -Serial = SLES-53361 -Name = Stealth Force - The War on Terror -Region = PAL-E +Serial = SLUS-21163 +Name = Brothers in Arms: Road to Hill 30 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53362 -Name = Alpine Skiing 2005 -Region = PAL-E +Serial = SLUS-21164 +Name = Namco Museum - 50th Anniversary +Region = NTSC-U --------------------------------------------- -Serial = SLES-53363 -Name = Shin Megami Tensei: Lucifer's Call -Region = PAL-M3 +Serial = SLUS-21165 +Name = Arc the Lad - End of Darkness +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53366 -Name = Killer 7 -Region = PAL-M3 +Serial = SLUS-21166 +Name = Full Metal Alchemist 2 - Curse of the Crimson Elixir +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53367 -Name = Dodgeball -Region = PAL-Unk +Serial = SLUS-21168 +Name = Castlevania - Curse of Darkness +Region = NTSC-U Compat = 5 +vuClampMode = 0 //SPS with microVU +MemCardFilter = SLUS-21168/SLUS-20733 --------------------------------------------- -Serial = SLES-53368 -Name = Splatter Master -Region = PAL-E +Serial = SLUS-21169 +Name = Rollercoaster Tycoon - The Peeps +Region = NTSC-U --------------------------------------------- -Serial = SLES-53369 -Name = Twenty-2 Party -Region = PAL-Unk +Serial = SLUS-21170 +Name = Makai Kingdom - Chronicles of the Sacred Tome +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53370 -Name = Real World Golf [with Gametrak] -Region = PAL-Unk +Serial = SLUS-21171 +Name = Harvest Moon - A Wonderful Life [Special Edition] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53371 -Name = Real World Golf [with Gametrak] -Region = PAL-Unk +Serial = SLUS-21172 +Name = Conflict - Global Terror +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53373 -Name = Madagascar -Region = PAL-Unk +Serial = SLUS-21173 +Name = Dora the Explorer - To the Purple Planet +Region = NTSC-U --------------------------------------------- -Serial = SLES-53374 -Name = X-Men Legends II - Rise of Apocalypse -Region = PAL-M3 +Serial = SLUS-21174 +Name = Dance Dance Revolution Extreme 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53377 -Name = X-Men Legends II - Rise of Apocalypse -Region = PAL-Unk +Serial = SLUS-21175 +Name = Bible Game, The +Region = NTSC-U --------------------------------------------- -Serial = SLES-53380 -Name = Metal Slug 4 -Region = PAL-E +Serial = SLUS-21176 +Name = World Championship Poker 2 featuring Howard Lederer +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53381 -Name = King of Fighters 2002 -Region = PAL-E +Serial = SLUS-21177 +Name = In the Groove +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53382 -Name = King of Fighters 2003 -Region = PAL-E +Serial = SLUS-21178 +Name = RPG Maker 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53383 -Name = Metal Slug 5 -Region = PAL-E +Serial = SLUS-21179 +Name = Colloseum - Road to Freedom +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53386 -Name = Charlie and the Chocolate Factory -Region = PAL-Unk +Serial = SLUS-21180 +Name = Onimusha - Dawn of Dreams [Disc1] +Region = NTSC-U Compat = 5 +[patches = FE44479E] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53387 -Name = Batman Begins -Region = PAL-Unk +Serial = SLUS-21181 +Name = D.I.C.E. +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53390 -Name = Ultimate Spider-Man -Region = PAL-Unk +Serial = SLUS-21182 +Name = TOCA Race Driver 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53391 -Name = Ultimate Spider-Man -Region = PAL-Unk +Serial = SLUS-21183 +Name = Teen Titans +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53393 -Name = Spartan Total Warrior -Region = PAL-Unk +Serial = SLUS-21184 +Name = Teenage Mutant Ninja Turtles 3 - Mutant Nightmare +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53398 -Name = Zombie Zone -Region = PAL-E +Serial = SLUS-21186 +Name = NBA Ballers - Phenom +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53399 -Name = Yakuza Fury -Region = PAL-Unk +Serial = SLUS-21187 +Name = Samurai Western +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53402 -Name = Taxi Rider -Region = PAL-E +Serial = SLUS-21188 +Name = America's Army - Rise of a Soldier +Region = NTSC-U --------------------------------------------- -Serial = SLES-53403 -Name = Demolition Girl -Region = PAL-E +Serial = SLUS-21189 +Name = Suffering, The - Ties That Bind +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-21189/SLUS-20636 --------------------------------------------- -Serial = SLES-53405 -Name = Digimon World 4 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53406 -Name = Party Girls -Region = PAL-Unk +Serial = SLUS-21190 +Name = Outlaw Tennis +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53407 -Name = Street Boyz -Region = PAL-E +Serial = SLUS-21191 +Name = Crash Tag Team Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53408 -Name = Fighting Angels -Region = PAL-Unk +Serial = SLUS-21192 +Name = Cabela's Outdoor Adventures 2006 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53411 -Name = Kuon -Region = PAL-Unk +Serial = SLUS-21193 +Name = Inuyasha - Feudal Combat +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53414 -Name = Echo Night - Beyond -Region = PAL-Unk +Serial = SLUS-21194 +Name = Phantasy Star Universe +Region = NTSC-U +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLES-53415 -Name = Call of Duty 2 - Big Red One -Region = PAL-Unk +Serial = SLUS-21195 +Name = Breeders' Cup - World Thoroughbred Championships +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53416 -Name = Call of Duty 2 - Big Red One -Region = PAL-Unk +Serial = SLUS-21196 +Name = Indigo Prophecy +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53417 -Name = Call of Duty 2 - Big Red One -Region = PAL-Unk +Serial = SLUS-21197 +Name = Shrek Superslam +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53418 -Name = Tak - The Great JuJu Challenge -Region = PAL-Unk +Serial = SLUS-21198 +Name = Batman Begins +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53419 -Name = LA Rush -Region = PAL-Unk +Serial = SLUS-21199 +Name = Medal of Honor - European Assault +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53424 -Name = Dead to Rights 2 -Region = PAL-Unk +Serial = SLUS-21200 +Name = Armored Core - Nine Breaker +Region = NTSC-U +Compat = 5 +// can import data from AC:Nexus +MemCardFilter = SLUS-21200/SLUS-20986/SLUS-21079 --------------------------------------------- -Serial = SLES-53430 -Name = Incredible Hulk 2, The - Ultimate Destruction -Region = PAL-Unk +Serial = SLUS-21201 +Name = Tales of Legendia +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53433 -Name = NHL '06 -Region = PAL-Unk +Serial = SLUS-21202 +Name = Romance of the Three Kingdoms X +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53434 -Name = WWI - Red Baron -Region = PAL-Unk +Serial = SLUS-21203 +Name = Tomb Raider - Legend +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53435 -Name = SAS Anti-Terror Force -Region = PAL-Unk +Serial = SLUS-21204 +Name = Victorious Boxers 2 - Fighting Spirit +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53436 -Name = YetiSports Arctic Adventures -Region = PAL-E +Serial = SLUS-21205 +Name = Aeon Flux +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53438 -Name = Taito Legends -Region = PAL-M5 +Serial = SLUS-21206 +Name = Shining Force Neo +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53439 -Name = Crash Tag Team Racing -Region = PAL-Unk +Serial = SLUS-21207 +Name = Dragon Quest VIII - Journey of the Cursed King +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53441 -Name = Heroes of the Pacific -Region = PAL-Unk +Serial = SLUS-21208 +Name = Tony Hawk's American Wasteland +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53443 -Name = Warriors, The -Region = PAL-Unk +Serial = SLUS-21209 +Name = Urban Reign +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53444 -Name = Pro Evolution Soccer 5 -Region = PAL-Unk +Serial = SLUS-21212 +Name = Spartan - Total Warrior +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53446 -Name = Arcade USA -Region = PAL-E +Serial = SLUS-21213 +Name = Madden NFL '06 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53452 -Name = Trixie in Toyland -Region = PAL-Unk +Serial = SLUS-21214 +Name = NCAA Football 2006 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53457 -Name = Evil Dead - Regeneration -Region = PAL-Unk +Serial = SLUS-21215 +Name = Warriors, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53458 -Name = Shin Megami Tensei: Digital Devil Saga -Region = PAL-E +Serial = SLUS-21216 +Name = Soul Calibur III +Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLES-53459 -Name = Marc Ecko's Getting Up - Contents Under Pressure -Region = PAL-Unk +Serial = SLUS-21217 +Name = Incredibles, The - Rise of the Underminers +Region = NTSC-U +Compat = 5 +[patches = 6DFE8ED7] +comment= Patch By Prafull +// fix hang at loading screen +patch=1,EE,001110e0,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53461 -Name = Sega Classics Collection -Region = PAL-Unk +Serial = SLUS-21218 +Name = Tak - The Great Juju Challenge +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53462 -Name = Matrix, The - Path of Neo -Region = PAL-M5 +Serial = SLUS-21219 +Name = Pac-Man World 3 +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-53463 -Name = NHL '06 -Region = PAL-Unk +Serial = SLUS-21220 +Name = World Soccer - Winning Eleven 9 International +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53466 -Name = Il Grande Quiz sul Calcio Italiano -Region = PAL-I +Serial = SLUS-21221 +Name = Magna Carta: Tears of Blood +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53468 -Name = Family Boardgames -Region = PAL-M6 +Serial = SLUS-21222 +Name = Top Spin +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53471 -Name = LMA Manager 2006 -Region = PAL-M5 +Serial = SLUS-21223 +Name = Karaoke Revolution Party +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-53473 -Name = Incredibles, The - Rise of the Underminer -Region = PAL-Unk +Serial = SLUS-21224 +Name = Guitar Hero +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53474 -Name = Incredibles, The - Rise of the Underminer -Region = PAL-Unk +Serial = SLUS-21225 +Name = Bratz - Rock Angels +Region = NTSC-U --------------------------------------------- -Serial = SLES-53480 -Name = Harvest Moon - A Wonderful Life [Special Edition] -Region = PAL-Unk +Serial = SLUS-21226 +Name = Velocity +Region = NTSC-U --------------------------------------------- -Serial = SLES-53481 -Name = 10,000 Bullets -Region = PAL-E +Serial = SLUS-21227 +Name = DragonBall Z - Budokai Tenkaichi +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53483 -Name = Magna Carta: Tears of Blood -Region = PAL-E +Serial = SLUS-21228 +Name = Call of Duty 2 - Big Red One +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53484 -Name = Eagle Eye Golf -Region = PAL-Unk +Serial = SLUS-21229 +Name = Motocross Mania 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53487 -Name = Forty 4 Party -Region = PAL-Unk +Serial = SLUS-21230 +Name = We Love Katamari +Region = NTSC-U +Compat = 5 +vuClampMode = 3 +mvuFlagSpeedHack = 0 +// allows import of constellations from Katamari Damacy +MemCardFilter = SLUS-21230/SLUS-21008 --------------------------------------------- -Serial = SLES-53488 -Name = Puzzlemaniacs -Region = PAL-Unk +Serial = SLUS-21231 +Name = Sniper Elite +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53489 -Name = Paparazzi -Region = PAL-Unk +Serial = SLUS-21232 +Name = College Hoops 2K6 +Region = NTSC-U Compat = 5 +[patches = A60E027C] + //Patched by Prafull + //This fixes random hangs and makes the game playable + patch=0,EE,0045f410,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53490 -Name = Outlaw Tennis -Region = PAL-Unk +Serial = SLUS-21233 +Name = NBA 2K6 +Region = NTSC-U +[patches = E5C65369] + //Patched by Prafull + //Avoid hang at start + patch=0,EE,004413a8,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53492 -Name = Total Overdose -Region = PAL-Unk +Serial = SLUS-21234 +Name = NHL 2K6 +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-53494 -Name = Spongebob Squarepants - Lights, Camera, PANTS! -Region = PAL-Unk +Serial = SLUS-21235 +Name = MLB 2k6 +Region = NTSC-U +Compat = 5 +[patches = 88BB9A5C] + //Patched by Prafull + //Avoid hang at start + patch=0,EE,003c4280,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53496 -Name = Spongebob Squarepants - Lights, Camera, PANTS! -Region = PAL-Unk +Serial = SLUS-21236 +Name = Tokyo Xtreme Racer Drift +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53501 -Name = Star Wars - Battlefront II -Region = PAL-Unk +Serial = SLUS-21237 +Name = AND 1 Streetball +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53502 -Name = Star Wars - Battlefront II -Region = PAL-Unk +Serial = SLUS-21238 +Name = Final Fight - Streetwise +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53504 -Name = Agent Hugo -Region = PAL-Unk +Serial = SLUS-21239 +Name = Beatmania +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53505 -Name = Beat Down - Fists of Vengeance -Region = PAL-Unk +Serial = SLUS-21240 +Name = Star Wars Battlefront II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53506 -Name = Burnout Revenge -Region = PAL-M5 +Serial = SLUS-21241 +Name = NHL '06 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53507 +Serial = SLUS-21242 Name = Burnout Revenge -Region = PAL-Unk +Region = NTSC-U Compat = 5 +// reads Burnout 3 and NFL 06 saves for unlockables +MemCardFilter = SLUS-21242/SLUS-21050/SLUS-21213 --------------------------------------------- -Serial = SLES-53508 -Name = Ultimate Pro-Pinball -Region = PAL-Unk -Compat = 4 ---------------------------------------------- -Serial = SLES-53509 -Name = Hello Kitty - Roller Rescue -Region = PAL-Unk +Serial = SLUS-21243 +Name = Metal Gear Solid 3 - Subsistence [Disc2of3] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21359 --------------------------------------------- -Serial = SLES-53510 -Name = Madden NFL 2006 -Region = PAL-Unk +Serial = SLUS-21244 +Name = Fatal Frame 3 - The Tormented +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53518 -Name = Castle Shikigami II -Region = PAL-Unk +Serial = SLUS-21245 +Name = Suikoden Tactics +Region = NTSC-U +Compat = 5 +// allows import of Suikoden 4 clear data +MemCardFilter = SLUS-21245/SLUS-20979 --------------------------------------------- -Serial = SLES-53521 -Name = Musashi - Samurai Legend -Region = PAL-M4 +Serial = SLUS-21246 +Name = Charlie and the Chocolate Factory +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53523 -Name = Gun -Region = PAL-Unk +Serial = SLUS-21247 +Name = Jackie Chan Adventures +Region = NTSC-U --------------------------------------------- -Serial = SLES-53524 -Name = Mortal Kombat - Shaolin Monks -Region = PAL-Unk +Serial = SLUS-21248 +Name = Legend of Kay +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //For freezes in some scene transitions. --------------------------------------------- -Serial = SLES-53525 -Name = Mortal Kombat - Shaolin Monks -Region = PAL-G +Serial = SLUS-21249 +Name = Yourself Fitness - Lifestyle +Region = NTSC-U --------------------------------------------- -Serial = SLES-53527 -Name = Suffering, The - Ties that Bind -Region = PAL-Unk +Serial = SLUS-21250 +Name = Full Spectrum Warrior - Ten Hammers +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLES-53528 -Name = Suffering, The - Ties that Bind -Region = PAL-G +Serial = SLUS-21251 +Name = FlatOut 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53529 -Name = FIFA '06 -Region = PAL-Unk +Serial = SLUS-21252 +Name = SpongeBob Squarepants - Lights, Camera, PANTS! +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53530 -Name = FIFA '06 -Region = PAL-Unk +Serial = SLUS-21253 +Name = Ty the Tasmanian Tiger 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53531 -Name = FIFA '06 -Region = PAL-Unk +Serial = SLUS-21254 +Name = Zach Bell! Mamodo Battles +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53532 -Name = FIFA '06 -Region = PAL-Unk +Serial = SLUS-21255 +Name = Trapt +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53533 -Name = FIFA '06 -Region = PAL-Unk +Serial = SLUS-21256 +Name = IHRA Drag Racing - Sportsman Edition +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53534 -Name = Tony Hawk's American Wasteland -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21258 +Name = dot Hack - G.U. Vol.1 - Rebirth +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564/SLUS-21258/SLUS-21488/SLUS-21489/SLUS-21480 --------------------------------------------- -Serial = SLES-53535 -Name = Tony Hawk's American Wasteland -Region = PAL-Unk +Serial = SLUS-21259 +Name = Stacked with Daniel Negreanu +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53536 -Name = London Racer - Police Madness -Region = PAL-Unk +Serial = SLUS-21260 +Name = Ed, Edd, 'n Eddy - The Mis-Edventures +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53539 -Name = Fahrenheit -Region = PAL-M4 +Serial = SLUS-21261 +Name = Shadow the Hedgehog +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53540 -Name = Fahrenheit -Region = PAL-M4 +Serial = SLUS-21262 +Name = Radiata Stories +Region = NTSC-U Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-53541 -Name = Tiger Woods PGA Tour '06 -Region = PAL-Unk +Serial = SLUS-21263 +Name = Romancing SaGa +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53542 -Name = Shadow the Hedgehog -Region = PAL-Unk +Serial = SLUS-21264 +Name = Tiger Woods PGA Tour 2006 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53544 -Name = Pro Evolution Soccer 5 -Region = PAL-Unk +Serial = SLUS-21265 +Name = Sims 2, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53545 -Name = Pro Evolution Soccer 5 -Region = PAL-Unk +Serial = SLUS-21266 +Name = NASCAR '06 - Total Team Control +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53546 -Name = NBA Live 2006 -Region = PAL-Unk +Serial = SLUS-21267 +Name = Need for Speed - Most Wanted +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21267/SLUS-21351/SLUS-21065 --------------------------------------------- -Serial = SLES-53547 -Name = NBA Live '06 -Region = PAL-Unk +Serial = SLUS-21268 +Name = 24 - The Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53548 -Name = Yokushin - Giga Wing Generations -Region = PAL-Unk +Serial = SLUS-21269 +Name = Bully +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53551 -Name = SSX On Tour -Region = PAL-Unk +Serial = SLUS-21270 +Name = MS Saga - A New Dawn +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53552 -Name = SSX On Tour -Region = PAL-Unk +Serial = SLUS-21271 +Name = Driver - Parallel Lines +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53553 -Name = James Bond 007 - From Russia with Love -Region = PAL-Unk +Serial = SLUS-21272 +Name = Super Monkey Ball Adventure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53557 -Name = Need for Speed - Most Wanted -Region = PAL-E +Serial = SLUS-21273 +Name = Matrix, The - Path of Neo +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53558 -Name = Need for Speed - Most Wanted -Region = PAL-Unk +Serial = SLUS-21274 +Name = Outrun 2006 - Coast 2 Coast +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53559 -Name = Need for Speed - Most Wanted -Region = PAL-Unk +Serial = SLUS-21275 +Name = River King - A Wonderful Journey +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53560 -Name = Sonic Riders -Region = PAL-Unk +Serial = SLUS-21276 +Name = Ford vs. Chevy +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53561 -Name = Canis Canem Edit -Region = PAL-E +Serial = SLUS-21277 +Name = Barnyard +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53563 -Name = Spongebob Squarepants and Friends - Untie! -Region = PAL-Unk +Serial = SLUS-21278 +Name = SSX on Tour +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53564 -Name = Darkwatch -Region = PAL-Unk +Serial = SLUS-21279 +Name = NBA Live '06 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53566 -Name = London Taxi - Rushour -Region = PAL-Unk +Serial = SLUS-21280 +Name = FIFA '06 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53569 -Name = Mini Mini Desktop Racing -Region = PAL-Unk +Serial = SLUS-21281 +Name = Marvel Nemesis - Rise of the Imperfects +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-53570 -Name = Ninjabread Man -Region = PAL-Unk +Serial = SLUS-21282 +Name = James Bond 007 - From Russia with Love +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53571 -Name = Anubis II -Region = PAL-Unk +Serial = SLUS-21283 +Name = Total Overdose - A Gunslinger's Tale in Mexico +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53572 -Name = Rig Racer 2 -Region = PAL-Unk -Compat = 4 ---------------------------------------------- -Serial = SLES-53574 -Name = Bratz - Rock Angelz -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53575 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21284 +Name = Nicktoons Unite! +Region = NTSC-U --------------------------------------------- -Serial = SLES-53576 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21285 +Name = Ultimate Spider-Man [Limited Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53577 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21286 +Name = WWE SmackDown! vs. RAW 2006 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53578 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21287 +Name = Prince of Persia - The Two Thrones +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53579 -Name = One Piece - Grand Battle -Region = PAL-Unk +Serial = SLUS-21288 +Name = American Chopper 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53580 -Name = NBA Live '06 -Region = PAL-Unk +Serial = SLUS-21289 +Name = Sea World - Shamu's Big Adventure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53581 -Name = NBA Live '06 -Region = PAL-Unk +Serial = SLUS-21290 +Name = Ford Street Racing +Region = NTSC-U --------------------------------------------- -Serial = SLES-53582 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21291 +Name = Suikoden V +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53583 -Name = Bratz - Rock Angelz -Region = PAL-Unk +Serial = SLUS-21292 +Name = Wild ARMs 4 +Region = NTSC-U +Compat = 5 +// allows import of Alter Code F clear data +MemCardFilter = SLUS-21292/SLUS-20937 --------------------------------------------- -Serial = SLES-53585 -Name = Marvel Nemesis - Rise of the Imperfects -Region = PAL-Unk -Compat = 3 +Serial = SLUS-21293 +Name = Metal Saga +Region = NTSC-U +Compat = 5 +DMABusyHack = 1 //intro fmv --------------------------------------------- -Serial = SLES-53587 -Name = Garfield - Saving Arlene -Region = PAL-Unk +Serial = SLUS-21294 +Name = Mark Ecko's Getting Up - Contents Under Pressure [Special Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53592 -Name = Zombie Attack -Region = PAL-E +Serial = SLUS-21295 +Name = Tony Hawk's American Wasteland [Collector's Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53594 -Name = Living World Racing -Region = PAL-Unk +Serial = SLUS-21296 +Name = Dance Factory +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53595 -Name = Wild Water Adrenaline featuring Salomon -Region = PAL-M5 +Serial = SLUS-21297 +Name = Devil Kings +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53596 -Name = The Ultimate Film Quiz -Region = PAL-M6 +Serial = SLUS-21298 +Name = NCAA March Madness '06 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53599 -Name = The Ultimate Music Quiz -Region = PAL-M6 +Serial = SLUS-21299 +Name = Dynasty Warriors 5 - Xtreme Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53614 -Name = Classic British Motor Racing -Region = PAL-Unk +Serial = SLUS-21300 +Name = Over the Hedge +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53616 -Name = True Crime - New York City -Region = PAL-Unk +Serial = SLUS-21301 +Name = World Series of Poker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53618 -Name = True Crime - New York City -Region = PAL-Unk +Serial = SLUS-21303 +Name = Rebel Raiders - Operation Nighthawk +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53621 -Name = Wallace & Grommit - The Curse of the Were Rabbit -Region = PAL-Unk +Serial = SLUS-21304 +Name = Justice League Heroes +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //Ingame capes become SPS mess with lower than extra VU clamp. --------------------------------------------- -Serial = SLES-53623 -Name = Spongebob Squarepants - Battle for Bikini Bottom -Region = PAL-Unk +Serial = SLUS-21305 +Name = Arthur and the Invisibles: The Game +Region = NTSC-U --------------------------------------------- -Serial = SLES-53624 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21306 +Name = Ghost Rider +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53626 -Name = Suffering, The - Ties that Bind -Region = PAL-M2 +Serial = SLUS-21307 +Name = Ice Age 2 - The Meltdown +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-53635 -Name = NASCAR '06 - Total Team Control -Region = PAL-Unk +Serial = SLUS-21309 +Name = Let's Ride - Silver Buckle Stables +Region = NTSC-U --------------------------------------------- -Serial = SLES-53639 -Name = Ford Street Racing -Region = PAL-M5 +Serial = SLUS-21310 +Name = Brothers in Arms: Earned in Blood +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53641 -Name = Destroy All Humans! -Region = PAL-Unk +Serial = SLUS-21311 +Name = King Kong, Peter Jackson's - The Official Game of the Movie +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53645 -Name = Knights of the Temple II -Region = PAL-Unk +Serial = SLUS-21312 +Name = Wallace & Gromit - The Curse of the Were-Rabbit +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53646 -Name = World Racing 2 -Region = PAL-Unk +Serial = SLUS-21313 +Name = Friends - The One with all the Trivia +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53647 -Name = Gun -Region = PAL-Unk +Serial = SLUS-21314 +Name = Ruff Trigger - Vancore Conspiracy +Region = NTSC-U +Compat = 4 +--------------------------------------------- +Serial = SLUS-21315 +Name = 50cent - Bulletproof +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-21316 +Name = Capcom Classics Collection Vol.1 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53651 -Name = WWII - Soldier -Region = PAL-Unk +Serial = SLUS-21317 +Name = Street Fighter Alpha Anthology +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53652 -Name = Daemon Summoner -Region = PAL-E +Serial = SLUS-21318 +Name = Call of Duty 2 - Big Red One [Collector's Edition] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53654 -Name = London Racer - Destruction Madness -Region = PAL-Unk +Serial = SLUS-21319 +Name = Flow - Urban Dance Uprising +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53656 -Name = Full Spectrum Warrior - Ten Hammers -Region = PAL-Unk -EETimingHack = 1 //flickery textures +Serial = SLUS-21320 +Name = Rogue Trooper +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53657 -Name = Shrek - Super Slam -Region = PAL-Unk +Serial = SLUS-21321 +Name = Squadra Course Alfa Romeo +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53658 -Name = Disney-Pixar's The Incredibles - Rise of the Underminer -Region = PAL-Unk +Serial = SLUS-21322 +Name = Eragon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53659 -Name = Brothers in Arms: Earned in Blood -Region = PAL-M5 +Serial = SLUS-21323 +Name = Rampage - Total Destruction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53661 -Name = Capcom Classics Collection -Region = PAL-Unk +Serial = SLUS-21324 +Name = Major League Baseball 2K5 [World Series Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53666 -Name = Midway Arcade Treasures 3 -Region = PAL-E +Serial = SLUS-21325 +Name = Harry Potter and The Goblet of Fire +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53667 -Name = Gauntlet - Seven Sorrows -Region = PAL-M5 +Serial = SLUS-21326 +Name = Shadow Hearts - From the New World +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] --------------------------------------------- -Serial = SLES-53668 -Name = Micro Machines v4 -Region = PAL-Unk +Serial = SLUS-21327 +Name = Atelier Iris 2: The Azoth of Destiny +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53676 -Name = WWE SmackDown! vs. RAW 2006 -Region = PAL-Unk +Serial = SLUS-21328 +Name = Pac-Man World Rally +Region = NTSC-U Compat = 5 +eeClampMode = 3 --------------------------------------------- -Serial = SLES-53677 -Name = WWE SmackDown! vs. RAW 2006 -Region = PAL-Unk +Serial = SLUS-21329 +Name = Karaoke Revolution Country - CMT Presents +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-53682 -Name = James Pond - Codename Robocod -Region = PAL-Unk +Serial = SLUS-21330 +Name = Monster Rancher 5 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53685 -Name = Codename: Kids Next Door - Operation V.I.D.E.O.G.A.M.E -Region = PAL-E +Serial = SLUS-21331 +Name = Sonic Riders +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53686 -Name = NHL Hockey 2K6 -Region = PAL-Unk +Serial = SLUS-21332 +Name = Real World Golf +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-53689 +Serial = SLUS-21333 Name = World Poker Tour 2K6 -Region = PAL-Unk +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53690 -Name = Makai Kingdon - Chronicle of the Sacred Stone -Region = PAL-Unk +Serial = SLUS-21334 +Name = Grandia III [Disc1of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53695 -Name = Tak - The Great Juju Challenge -Region = PAL-Unk +Serial = SLUS-21335 +Name = Hustle, The - Detroit Streets - Kat's Story +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21334 --------------------------------------------- -Serial = SLES-53696 +Serial = SLUS-21336 Name = Zathura -Region = PAL-Unk +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53697 -Name = Dora the Explorer -Region = PAL-Unk +Serial = SLUS-21337 +Name = Arena Football - EA Sports +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53699 -Name = Swords of Destiny -Region = PAL-Unk +Serial = SLUS-21338 +Name = Armored Core - Last Raven +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53701 -Name = Super Monkey Ball Adventure -Region = PAL-Unk +Serial = SLUS-21339 +Name = Puzzle Collection - Crosswords & More! +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53702 -Name = Resident Evil 4 -Region = PAL-Unk +Serial = SLUS-21340 +Name = World Championship Cards +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53703 -Name = King Kong, Peter Jackson's - The Official Game of the Movie -Region = PAL-Unk -Compat = 2 +Serial = SLUS-21341 +Name = Stuart Little 3 - Big Photo Adventure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53704 -Name = King Kong, Peter Jackson's - The Official Game of the Movie -Region = PAL-R +Serial = SLUS-21342 +Name = MLB Slugfest 2006 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53705 -Name = King Kong, Peter Jackson's - The Official Game of the Movie -Region = PAL-Unk +Serial = SLUS-21343 +Name = Samurai Champloo - Sidetracked +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53706 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21344 +Name = Steambot Chronicles +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53707 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21345 +Name = Grandia III [Disc2of2] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53708 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21346 +Name = Ace Combat Zero - The Belkan War +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21346/SLUS-20152/SLUS-20851 +[patches = 65729657] + patch=0,EE,00131EBC,word,48498800 + patch=0,EE,00131EC0,word,4B00682C + patch=0,EE,00131ECC,word,484A8800 + patch=0,EE,00131ED0,word,4B0C682C +[/patches] --------------------------------------------- -Serial = SLES-53709 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21347 +Name = AMF Xtreme Bowling +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53710 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21348 +Name = Yakuza +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53712 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21349 +Name = Taito Legends 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53713 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21350 +Name = Cabela's Dangerous Hunts 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53715 -Name = Disney's The Chronicles of Narnia - The Lion, The Witch, and The Wardrobe -Region = PAL-Unk +Serial = SLUS-21351 +Name = Need for Speed - Most Wanted [Black Edition] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21267/SLUS-21351/SLUS-21065 --------------------------------------------- -Serial = SLES-53716 -Name = Without Warning -Region = PAL-Unk +Serial = SLUS-21352 +Name = Dai Senryaku VII Exceed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53717 +Serial = SLUS-21353 +Name = Eureka Seven - Vol.1 - The New Wave +Region = NTSC-U +Compat = 5 +--------------------------------------------- +Serial = SLUS-21354 +Name = Curious George +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-21355 Name = Midnight Club 3 - DUB Edition Remix -Region = PAL-Unk +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53718 -Name = Sims 2, The -Region = PAL-Unk +Serial = SLUS-21356 +Name = Tom Clancy's Splinter Cell - Double Agent +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53722 -Name = Call of Duty 2 - Big Red One [Collector's Edition] -Region = PAL-Unk +Serial = SLUS-21357 +Name = Hummer Badlands +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53724 -Name = World Series of Poker -Region = PAL-Unk +Serial = SLUS-21358 +Name = Naruto - Ultimate Ninja +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53725 -Name = Asterix & Obelix XXL2 -Region = PAL-Unk +Serial = SLUS-21359 +Name = Metal Gear Solid 3 - Subsistence [Disc1of3] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53726 -Name = Harry Potter and The Goblet of Fire -Region = PAL-Unk +Serial = SLUS-21360 +Name = Metal Gear Solid 3 - Subsistence [Disc3of3] +Region = NTSC-U +MemCardFilter = SLUS-21359 --------------------------------------------- -Serial = SLES-53727 -Name = Harry Potter and The Goblet of Fire -Region = PAL-Unk +Serial = SLUS-21361 +Name = Devil May Cry 3 - Dante's Awakening [Special Edition] +Region = NTSC-U +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLES-53728 -Name = Harry Potter and The Goblet of Fire -Region = PAL-Unk +Serial = SLUS-21362 +Name = Onimusha - Dawn of Dreams [Disc2] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21180 +[patches = FFDE85E9] + comment= patch by Shadow Lady + patch=0,EE,00104170,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53729 -Name = Battlefield 2 - Modern Combat -Region = PAL-Unk +Serial = SLUS-21363 +Name = Zatch Bell! Mamodo Fury +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53730 -Name = Battlefield 2 - Modern Combat -Region = PAL-Unk +Serial = SLUS-21364 +Name = One Piece - Pirates Carnival +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53734 -Name = 50cent - Bulletproof -Region = PAL-Unk +Serial = SLUS-21365 +Name = King of Fighters 2006, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53736 -Name = Billy the Wizard - Rocket Broomstick Racing -Region = PAL-Unk +Serial = SLUS-21366 +Name = Ultimate Board Game Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53738 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21367 +Name = MVP '06 - NCAA Baseball +Region = NTSC-U --------------------------------------------- -Serial = SLES-53739 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21368 +Name = Rugby '06 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53740 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21369 +Name = FIFA Street 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53741 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21370 +Name = MegaMan X Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53743 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21371 +Name = Rapala Pro Tournament Fishing +Region = NTSC-U --------------------------------------------- -Serial = SLES-53744 -Name = Disney's Chicken Little -Region = PAL-Unk +Serial = SLUS-21372 +Name = Legend of Spyro, The - A New Beginning +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53746 -Name = Superman Returns -Region = PAL-E +Serial = SLUS-21373 +Name = Drakengard 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53747 -Name = Ed, Edd, 'n Eddy - The Misadventure -Region = PAL-Unk +Serial = SLUS-21374 +Name = Marvel - Ultimate Alliance +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53748 -Name = Quest for Sleeping Beauty -Region = PAL-Unk +Serial = SLUS-21375 +Name = Torino 2006 - The Official Game of the XX Olympic Winter Games +Region = NTSC-U +Compat = 5 +vuClampMode = 2 //for SPS with microVU. --------------------------------------------- -Serial = SLES-53751 -Name = Shrek Superslam -Region = PAL-Unk +Serial = SLUS-21376 +Name = Black +Region = NTSC-U +Compat = 5 +vuClampMode = 0 --------------------------------------------- -Serial = SLES-53754 -Name = ATV Off-Road Fury 3 -Region = PAL-Unk +Serial = SLUS-21377 +Name = Dance Dance Revolution SuperNOVA +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53755 -Name = Castlevania - Curse of Darkness -Region = PAL-Unk +Serial = SLUS-21379 +Name = Cabela's African Safari +Region = NTSC-U Compat = 5 -vuClampMode = 0 //SPS with microVU --------------------------------------------- -Serial = SLES-53756 -Name = Resident Evil 4 -Region = PAL-M5 +Serial = SLUS-21380 +Name = Snoopy vs. The Red Baron +Region = NTSC-U +Compat = 5 +vuClampMode = 3 --------------------------------------------- -Serial = SLES-53759 -Name = Matrix, The - Path of Neo -Region = PAL-M5 +Serial = SLUS-21381 +Name = Bode Miller Alpine Skiing +Region = NTSC-U +Compat = 5 +vuClampMode = 2 --------------------------------------------- -Serial = SLES-53760 -Name = Rugby Challenge 2006 -Region = PAL-Unk +Serial = SLUS-21382 +Name = Franklin - A Birthday Surprise +Region = NTSC-U --------------------------------------------- -Serial = SLES-53761 -Name = Friends - The One with All the Trivia -Region = PAL-Unk +Serial = SLUS-21383 +Name = Fight Night - Round 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53763 -Name = Tom Clancy's Ghost Recon - Advanced Warfighter -Region = PAL-Unk +Serial = SLUS-21384 +Name = Cabela's Alaskan Adventures +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53764 -Name = Atelier Iris: Eternal Mana -Region = PAL-Unk +Serial = SLUS-21385 +Name = Godfather, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53765 -Name = Stella Deus: The Gate of Eternity -Region = PAL-Unk +Serial = SLUS-21386 +Name = Tales of the Abyss +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53767 -Name = Magna Carta: Les Larmes de Sang -Region = PAL-F +Serial = SLUS-21387 +Name = Warship Gunner 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53768 -Name = Sword of Etheria, The -Region = PAL-M5 -Compat = 4 +Serial = SLUS-21388 +Name = Sopranos, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53769 -Name = Suikoden Tactics -Region = PAL-Unk +Serial = SLUS-21389 +Name = Xenosaga - Episode III - Also Sprach Zarathustra [Disc1of2] +Region = NTSC-U +Compat = 5 +// allows import of Xenosaga II save data +MemCardFilter = SLUS-21389/SLUS-20892 --------------------------------------------- -Serial = SLES-53772 -Name = Air Raid 3 -Region = PAL-Unk +Serial = SLUS-21390 +Name = Urban Chaos - Riot Response +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53775 -Name = Reservoir Dogs -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-21391 +Name = SpongeBob SquarePants - Creature from the Krusty Krab +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53777 -Name = Prince of Persia - The Two Thrones -Region = PAL-M5 +Serial = SLUS-21392 +Name = Shrek Smash and Crash +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53778 -Name = Jacked -Region = PAL-Unk +Serial = SLUS-21393 +Name = Gallop Racer 2006 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53779 -Name = American Chopper 2 - Full Throttle -Region = PAL-E +Serial = SLUS-21394 +Name = TXR Drift 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53794 -Name = Drakengard 2 -Region = PAL-Unk +Serial = SLUS-21395 +Name = Avatar - The Last Airbender +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53796 -Name = FIFA Street 2 -Region = PAL-Unk +Serial = SLUS-21396 +Name = Star Trek - Encounters +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53797 -Name = FIFA Street 2 -Region = PAL-Unk +Serial = SLUS-21397 +Name = Disgaea 2: Cursed Memories +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53799 -Name = Matrix, The - Path of Neo -Region = PAL-Unk -Compat = 2 +Serial = SLUS-21398 +Name = Dynasty Warriors 5 - Empires +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53800 -Name = Rampage - Total Destruction -Region = PAL-Unk +Serial = SLUS-21399 +Name = Driver - Parallel Lines [Limited Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53803 -Name = Friends - Das Trivia Game -Region = PAL-Unk +Serial = SLUS-21400 +Name = Monster House +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53804 -Name = Shamu's Deep Sea Adventures -Region = PAL-Unk +Serial = SLUS-21401 +Name = Equestriad +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53810 -Name = Sensible Soccer 2006 -Region = PAL-Unk +Serial = SLUS-21402 +Name = Micro Machines v4 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53813 -Name = Friends - Celui qui Repond a Toutes les Questions -Region = PAL-Unk +Serial = SLUS-21403 +Name = Backyard Baseball '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53819 -Name = Armored Core - Nine Breaker -Region = PAL-Unk +Serial = SLUS-21404 +Name = Final Fantasy XI - Treasures of Aht Urhgan +Region = NTSC-U --------------------------------------------- -Serial = SLES-53820 -Name = Armored Core - Last Raven -Region = PAL-Unk +Serial = SLUS-21405 +Name = Xiaolin Showdown +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53824 -Name = Trapt -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21406 +Name = Godfather, The - Collector's Edition +Region = NTSC-U --------------------------------------------- -Serial = SLES-53825 -Name = Project Zero 3 - The Tormented -Region = PAL-Unk +Serial = SLUS-21407 +Name = NFL Head Coach +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53826 -Name = Tom Clancy's Splinter Cell - Double Agent -Region = PAL-M5 +Serial = SLUS-21408 +Name = FIFA World Cup '06 +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] ---------------------------------------------- -Serial = SLES-53827 -Name = Tom Clancy's Splinter Cell - Double Agent -Region = PAL-Unk --------------------------------------------- -Serial = SLES-53828 -Name = We Love Katamari -Region = PAL-Unk -vuClampMode = 3 -mvuFlagSpeedHack = 0 +Serial = SLUS-21409 +Name = LEGO Star Wars II - The Original Trilogy +Region = NTSC-U +MemCardFilter = SLUS-21409/SLUS-21083 --------------------------------------------- -Serial = SLES-53829 -Name = Raiden III -Region = PAL-Unk +Serial = SLUS-21410 +Name = Mortal Kombat - Armageddon +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53830 -Name = Psychonauts -Region = PAL-Unk +Serial = SLUS-21411 +Name = M2 Rock +Region = NTSC-U --------------------------------------------- -Serial = SLES-53831 -Name = BloodRayne 2 -Region = PAL-Unk +Serial = SLUS-21412 +Name = World Championship Poker featuring Howard Lederer - All-In +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53832 -Name = BloodRayne 2 -Region = PAL-Unk +Serial = SLUS-21413 +Name = Thrillville +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53846 -Name = Soccer Life II -Region = PAL-Unk +Serial = SLUS-21414 +Name = Delta Force - Team Sabre +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53847 -Name = Street Golfer -Region = PAL-Unk +Serial = SLUS-21415 +Name = Ant Bully, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53848 -Name = Flow - Urban Dance Uprising -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21416 +Name = D1 Grand Prix +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53849 -Name = Asterix & Obelix XXL2 -Region = PAL-Unk +Serial = SLUS-21417 +Name = Xenosaga - Episode III - Also Sprach Zarathustra [Disc2of2] +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-21389/SLUS-20892 --------------------------------------------- -Serial = SLES-53850 -Name = Teenage Mutant Ninja Turtles 3 - Mutant Nightmare -Region = PAL-Unk +Serial = SLUS-21418 +Name = Sprint Cars - Road to Knoxville +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53852 -Name = Taito Legends 2 -Region = PAL-M5 +Serial = SLUS-21419 +Name = Dirge of Cerberus - Final Fantasy VII +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53855 -Name = Heracles - Battle with the Gods -Region = PAL-Unk +Serial = SLUS-21420 +Name = Disney's Chicken Little - Ace in Action +Region = NTSC-U --------------------------------------------- -Serial = SLES-53857 -Name = Need for Speed - Most Wanted [Black Edition] -Region = PAL-E +Serial = SLUS-21421 +Name = Spy Hunter - Nowhere to Run +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53860 -Name = Dynasty Warriors 5 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-21422 +Name = Tom Clancy's Ghost Recon - Advenced Warfighter +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53861 -Name = Dynasty Warriors 5 - Xtreme Legends -Region = PAL-Unk +Serial = SLUS-21423 +Name = Grand Theft Auto - Liberty City Stories +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53862 -Name = Dynasty Warriors 5 - Xtreme Legends -Region = PAL-G +Serial = SLUS-21424 +Name = NBA 2K7 +Region = NTSC-U +[patches = F5AEDCC3] + //Patched by Prafull + //Avoid hang at start + patch=0,EE,0044ef60,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53863 -Name = Pool Paradise - International Edition -Region = PAL-M5 +Serial = SLUS-21425 +Name = NHL 2K7 +Region = NTSC-U Compat = 5 +[patches = 478EFBDB] + //Patched by Prafull + //Avoid hang at start + patch=0,EE,004409d8,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-53866 -Name = Over the Hedge -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53867 -Name = Ski Alpin 2006 -Region = PAL-Unk -vuClampMode = 2 +Serial = SLUS-21426 +Name = Call of Duty 3 +Region = NTSC-U +Compat = 5 +eeClampMode = 3 --------------------------------------------- -Serial = SLES-53869 -Name = Crazy Frog Racer -Region = PAL-Unk +Serial = SLUS-21427 +Name = WWE SmackDown! vs. RAW 2007 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53870 -Name = Devil Kings -Region = PAL-Unk +Serial = SLUS-21428 +Name = Bionicle Heroes +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53871 -Name = Tengai -Region = PAL-Unk +Serial = SLUS-21430 +Name = IGPX - Immortal Grand Prix +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53872 -Name = Samurai Aces -Region = PAL-Unk +Serial = SLUS-21431 +Name = Shin Megami Tensei - Devil Summoner - Raidou Kuzunoha vs. The Soulless Army +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53873 -Name = Sol Divide -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21432 +Name = NRA Gun Club +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53874 -Name = Dragon Blaze -Region = PAL-Unk +Serial = SLUS-21433 +Name = FIFA Soccer '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53877 -Name = Premier Manager 2006-2007 -Region = PAL-Unk +Serial = SLUS-21434 +Name = Superman Returns - The Video Game +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-53886 -Name = Black -Region = PAL-Unk +Serial = SLUS-21435 +Name = One Piece - Grand Adventure +Region = NTSC-U Compat = 5 -vuClampMode = 0 ---------------------------------------------- -Serial = SLES-53897 -Name = Dreamworks Vecinos Invasores -Region = PAL-S --------------------------------------------- -Serial = SLES-53899 -Name = Pro Evolution Soccer Management -Region = PAL-Unk +Serial = SLUS-21436 +Name = Just Cause +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53900 -Name = Kaido Racer -Region = PAL-Unk +Serial = SLUS-21437 +Name = Disney's Kim Possible - What's the Switch +Region = NTSC-U --------------------------------------------- -Serial = SLES-53901 -Name = Torino 2006 -Region = PAL-E +Serial = SLUS-21438 +Name = Cartoon Network Racing +Region = NTSC-U Compat = 5 -vuClampMode = 2 //for SPS with microVU. ---------------------------------------------- -Serial = SLES-53902 -Name = Leaderboard Golf -Region = PAL-Unk --------------------------------------------- -Serial = SLES-53903 -Name = Franklin the Turtle -Region = PAL-Unk +Serial = SLUS-21439 +Name = Destroy All Humans! 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53904 -Name = DT Racer -Region = PAL-Unk +Serial = SLUS-21440 +Name = LarryBoy and the Bad Apple +Region = NTSC-U --------------------------------------------- -Serial = SLES-53906 -Name = 50cent - Bulletproof -Region = PAL-Unk +Serial = SLUS-21441 +Name = DragonBall Z - Budokai Tenkaichi 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53908 -Name = Tomb Raider - Legend -Region = PAL-Unk // Multiple languages +Serial = SLUS-21442 +Name = Super DragonBall Z +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] --------------------------------------------- -Serial = SLES-53909 -Name = Full Spectrum Warrior - Ten Hammers -Region = PAL-Unk -EETimingHack = 1 //flickery textures +Serial = SLUS-21443 +Name = DaVinci Code, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53910 -Name = Agent Hugo -Region = PAL-R +Serial = SLUS-21444 +Name = Tony Hawk's Project 8 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53913 -Name = Plan, The -Region = PAL-Unk +Serial = SLUS-21445 +Name = Ar tonelico: Melody of Elemia +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53914 -Name = Plan, The -Region = PAL-Unk +Serial = SLUS-21446 +Name = Family Feud +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53915 -Name = Space War Attack -Region = PAL-Unk +Serial = SLUS-21447 +Name = Guitar Hero II +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53917 -Name = G1 Jockey 4 -Region = PAL-Unk +Serial = SLUS-21448 +Name = Rule of Rose +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53920 -Name = Speed Machines 3 -Region = PAL-Unk +Serial = SLUS-21449 +Name = Fast and the Furious, The - Tokyo Drift +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53921 -Name = Sim Chemist -Region = PAL-Unk +Serial = SLUS-21450 +Name = Super Trucks Racing 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53922 -Name = Car Wash Tycoon -Region = PAL-Unk +Serial = SLUS-21451 +Name = Grim Adventures of Billy & Mandy, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53924 -Name = Combat Ace -Region = PAL-Unk +Serial = SLUS-21452 +Name = Valkyrie Profile 2 - Silmeria +Region = NTSC-U +Compat = 5 +VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-53934 -Name = G-Force -Region = PAL-Unk +Serial = SLUS-21453 +Name = Disney's Meet the Robinsons +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53935 -Name = Dynamite -Region = PAL-Unk +Serial = SLUS-21454 +Name = Shrek the Third +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53936 -Name = Snow Rider -Region = PAL-Unk +Serial = SLUS-21455 +Name = Happy Feet +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53940 -Name = Smarties Meltdown -Region = PAL-Unk +Serial = SLUS-21456 +Name = Tony Hawk's Downhill Jam +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53945 -Name = Championship Manager 2006 -Region = PAL-Unk +Serial = SLUS-21457 +Name = World Championship Paintball +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53948 -Name = Winter Sports -Region = PAL-Unk +Serial = SLUS-21458 +Name = NHL '07 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53949 -Name = Magna Carta: Lacrime di Sangue -Region = PAL-I +Serial = SLUS-21459 +Name = NCAA Football '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53952 -Name = Cue Academy, The (Snooker-Pool-Billiards) -Region = PAL-M5 +Serial = SLUS-21460 +Name = NBA Live '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53955 -Name = Friends - The One with All the Trivia -Region = PAL-Unk +Serial = SLUS-21461 +Name = NASCAR '07 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53956 -Name = Aeon Flux -Region = PAL-Unk +Serial = SLUS-21462 +Name = Samurai Warriors 2 +Region = NTSC-U Compat = 5 +MemCardFilter = SLUS-21462/SLUS-20878/SLUS-21080 --------------------------------------------- -Serial = SLES-53959 -Name = Pac-Man World 3 -Region = PAL-Unk -EETimingHack = 1 +Serial = SLUS-21463 +Name = Tom Clancy's Ghost Recon 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53963 -Name = Downhill Slalom -Region = PAL-Unk +Serial = SLUS-21464 +Name = Winning Eleven - Pro Evolution Soccer 2007 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53964 -Name = Homura -Region = PAL-Unk +Serial = SLUS-21465 +Name = Raiden III +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53965 +Serial = SLUS-21466 Name = Plan, The -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-53966 -Name = Taito Legends -Region = PAL-Unk +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53967 -Name = Godfather, The -Region = PAL-Unk +Serial = SLUS-21467 +Name = Open Season +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53968 -Name = Godfather, The (Le Parrain) -Region = PAL-Unk +Serial = SLUS-21468 +Name = Peanuts All-Star +Region = NTSC-U --------------------------------------------- -Serial = SLES-53970 -Name = Godfather, The -Region = PAL-Unk +Serial = SLUS-21469 +Name = Nicktoons - Battle for Volcano Island +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53971 -Name = Godfather, The -Region = PAL-Unk +Serial = SLUS-21470 +Name = Bratz - Forever Diamondz +Region = NTSC-U --------------------------------------------- -Serial = SLES-53972 -Name = Stock Car Crash -Region = PAL-Unk +Serial = SLUS-21471 +Name = Tokobot Plus - Mysteries of the Karakuri +Region = NTSC-U Compat = 5 -EETimingHack = 1 --------------------------------------------- -Serial = SLES-53974 -Name = Dragon Quest VIII - Journey of the Cursed King -Region = PAL-Unk +Serial = SLUS-21472 +Name = World Pool Challenge '06 +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-21473 +Name = Capcom Classics Collection Vol. 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53976 -Name = Evolution GT -Region = PAL-Unk +Serial = SLUS-21474 +Name = History Channel - Civil War - A Nation Divided +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53979 -Name = Torrente 3 - El Protector -Region = PAL-Unk +Serial = SLUS-21475 +Name = Final Fantasy XII [Collector's Edition] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53982 -Name = Fight Night Round 3 -Region = PAL-Unk +Serial = SLUS-21476 +Name = Madden NFL '07 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53984 -Name = Ice Age 2 - The Meltdown -Region = PAL-Unk +Serial = SLUS-21477 +Name = Madden NFL '07 [Hall of Fame Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-53987 -Name = Over the Hedge -Region = PAL-Unk +Serial = SLUS-21478 +Name = Pirates - Legend of the Black Buccaneer +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53988 -Name = Over the Hedge -Region = PAL-Unk +Serial = SLUS-21479 +Name = Reservoir Dogs +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-53989 -Name = Over the Hedge -Region = PAL-Unk +Serial = SLUS-21480 +Name = Dot Hack GU Volume 1 - Rebirth - Terminal Disc +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564/SLUS-21258/SLUS-21488/SLUS-21489/SLUS-21480 --------------------------------------------- -Serial = SLES-53991 -Name = Urban Chaos - Riot Response -Region = PAL-Unk +Serial = SLUS-21481 +Name = NCAA March Madness '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-53994 -Name = 50cent - Bulletproof -Region = PAL-Unk +Serial = SLUS-21482 +Name = NFL Street 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53996 -Name = Army Men - Major Malfunction -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21483 +Name = Tiger Woods PGA Tour '07 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-53998 -Name = OutRun 2006 - Coast 2 Coast -Region = PAL-M5 +Serial = SLUS-21484 +Name = Flushed Away +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-53999 -Name = King of Fighters, The - Neo Wave -Region = PAL-E +Serial = SLUS-21485 +Name = Backyard Basketball '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54002 -Name = FlatOut 2 -Region = PAL-M5 +Serial = SLUS-21486 +Name = Eagle Eye Golf +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54003 -Name = Flatout 2 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-54004 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21487 +Name = Art of Fighting Anthology +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54006 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21488 +Name = dot Hack - G.U. Vol.2 - Reminisce +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564/SLUS-21258/SLUS-21488/SLUS-21489/SLUS-21480 --------------------------------------------- -Serial = SLES-54007 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21489 +Name = dot Hack - G.U. Vol.3 - Redemption +Region = NTSC-U +Compat = 5 +MemCardFilter = SLUS-20267/SLUS-20562/SLUS-20563/SLUS-20564/SLUS-21258/SLUS-21488/SLUS-21489/SLUS-21480 --------------------------------------------- -Serial = SLES-54010 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21490 +Name = Test Drive Unlimited +Region = NTSC-U +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-54011 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21491 +Name = World Series of Poker - Tournament of Champions +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54012 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21492 +Name = Scarface [Collector's Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54013 -Name = World Snooker Championship 2007 -Region = PAL-Unk +Serial = SLUS-21493 +Name = Need for Speed - Carbon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54015 -Name = Disney-Pixar's Cars -Region = PAL-Unk +Serial = SLUS-21494 +Name = Need for Speed - Carbon [Collector's Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54016 -Name = AND 1 Streetball -Region = PAL-Unk +Serial = SLUS-21495 +Name = Sudoku, Carol Vorderman's +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54021 -Name = Ruff Trigger -Region = PAL-Unk +Serial = SLUS-21496 +Name = ProStroke Golf - World Tour 2007 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54023 -Name = Bible Game, The -Region = PAL-Unk +Serial = SLUS-21497 +Name = Strawberry Shortcake - Adventures in the Land of Dreams +Region = NTSC-U --------------------------------------------- -Serial = SLES-54027 -Name = Driver - Parallel Lines -Region = PAL-Unk +Serial = SLUS-21498 +Name = Naruto - Uzumaki Chronicles +Region = NTSC-U +Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-54030 -Name = Black -Region = PAL-Unk +Serial = SLUS-21499 +Name = Evolution GT +Region = NTSC-U Compat = 5 -vuClampMode = 0 --------------------------------------------- -Serial = SLES-54031 -Name = Da Vinci Code, The -Region = PAL-Unk +Serial = SLUS-21500 +Name = Superbikes - Riding Challenge +Region = NTSC-U --------------------------------------------- -Serial = SLES-54033 -Name = Search and Destroy -Region = PAL-Unk +Serial = SLUS-21501 +Name = Raw Danger +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54060 -Name = Fruit Machine Mania -Region = PAL-Unk +Serial = SLUS-21503 +Name = God Hand +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54061 -Name = FIFA World Cup - Germany '06 -Region = PAL-Unk +Serial = SLUS-21536 +Name = Sims 2, The - Pets +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54062 -Name = FIFA World Cup - Germany '06 -Region = PAL-Unk +Serial = SLUS-21537 +Name = NeoGeo Fatal Fury Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54063 -Name = FIFA World Cup 2006 -Region = PAL-Unk +Serial = SLUS-21538 +Name = Eureka Seven - Vol.2 - The New Vision +Region = NTSC-U --------------------------------------------- -Serial = SLES-54064 -Name = FIFA World Cup 2006 -Region = PAL-Unk +Serial = SLUS-21539 +Name = Greg Hastings Tournament Paintball Max'd +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54066 -Name = X-Men - The Official Game -Region = PAL-Unk +Serial = SLUS-21540 +Name = Karaoke Revolution Presents - American Idol +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54068 -Name = AFL Premiership 2006 -Region = PAL-E +Serial = SLUS-21541 +Name = Ratatouille +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54074 -Name = Speedboat GP -Region = PAL-Unk +Serial = SLUS-21542 +Name = Sega Genesis Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54075 -Name = ProStroke Golf - World Tour 2007 -Region = PAL-Unk +Serial = SLUS-21543 +Name = Mortal Kombat - Armageddon [Kollector's Edition] +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54080 -Name = World Super Police -Region = PAL-Unk +Serial = SLUS-21544 +Name = Fantastic 4 - Rise of Silver Surfer +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54081 -Name = FIFA World Cup 2006 -Region = PAL-Unk +Serial = SLUS-21545 +Name = Pirates of the Caribbean - At World's End +Region = NTSC-U --------------------------------------------- -Serial = SLES-54083 -Name = Pirates of the Caribbean - The Legend of Jack Sparrow -Region = PAL-Unk +Serial = SLUS-21547 +Name = NHRA - Countdown to the Championship 2007 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54084 -Name = PowerShot Pinball -Region = PAL-M6 +Serial = SLUS-21548 +Name = Mercury Meltdown - Remix +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54085 -Name = Street Fighter Alpha Anthology -Region = PAL-Unk +Serial = SLUS-21549 +Name = Sopranos, The [Collector's Edition] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54087 -Name = Suikoden V -Region = PAL-M5 +Serial = SLUS-21550 +Name = Metal Slug Anthology +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54089 -Name = State of Emergency 2 -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-54093 -Name = Guitar Hero -Region = PAL-Unk +Serial = SLUS-21551 +Name = Dog Island, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54095 -Name = Dynasty Warriors 5 - Empires -Region = PAL-Unk +Serial = SLUS-21552 +Name = Spider-Man 3 +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-54096 -Name = Dynasty Warriors 5 - Empires -Region = PAL-Unk +Serial = SLUS-21553 +Name = Lumines Plus +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54097 -Name = Dynasty Warriors 5 - Empires -Region = PAL-Unk +Serial = SLUS-21554 +Name = King of Fighters Collection, The - The Orochi Saga +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54106 -Name = Kidz Sports - Ice Hockey -Region = PAL-Unk +Serial = SLUS-21555 +Name = Tomb Raider - Anniversary +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54107 -Name = Kidz Sports - Basketball -Region = PAL-Unk +Serial = SLUS-21556 +Name = Konami Kids Playground - Dinosaur Shapes & Colors +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54108 -Name = Habitrail - Hamster Ball -Region = PAL-Unk +Serial = SLUS-21557 +Name = Konami Kids Playground - Frogger Hop, Skip & Jumpin' Fun +Region = NTSC-U --------------------------------------------- -Serial = SLES-54109 -Name = Off-Road Extreme! [Special Edition] -Region = PAL-Unk +Serial = SLUS-21558 +Name = Konami Kids Playground - Toy Pals Fun with Numbers +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54110 -Name = Monster Trux Arenas [Special Edition] -Region = PAL-Unk +Serial = SLUS-21559 +Name = Konami Kids Playground - Alphabet Circus +Region = NTSC-U --------------------------------------------- -Serial = SLES-54111 -Name = PDC World Championship Darts -Region = PAL-M6 +Serial = SLUS-21560 +Name = Family Guy - The Video Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54112 -Name = Myth Makers - Orbs of Doom -Region = PAL-Unk +Serial = SLUS-21561 +Name = Major League Baseball 2K7 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54113 -Name = Myth Makers - Super Kart GP -Region = PAL-Unk +Serial = SLUS-21563 +Name = Horsez +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54114 -Name = Kingdom Hearts II -Region = PAL-Unk +Serial = SLUS-21564 +Name = Atelier Iris 3: Grand Phantasm +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54115 -Name = Delta Force - Black Hawk Down - Team Sabre -Region = PAL-Unk +Serial = SLUS-21565 +Name = Pirates of the Caribbean - At World's End +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-21566 +Name = Brunswick Pro Bowling +Region = NTSC-U Compat = 5 -EETimingHack = 1 //missing text --------------------------------------------- -Serial = SLES-54116 -Name = Operation Winback 2 - Project Poseidon -Region = PAL-E +Serial = SLUS-21567 +Name = Shining Force EXA +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54117 -Name = Torrente 3 - El Protector -Region = PAL-E +Serial = SLUS-21568 +Name = Arena Football - Road to Glory +Region = NTSC-U --------------------------------------------- -Serial = SLES-54118 -Name = Da Vinci Code, The -Region = PAL-Unk +Serial = SLUS-21569 +Name = Shin Megami Tensei: Persona 3 +Region = NTSC-U +Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLES-54120 -Name = The Snow Queen Quest -Region = PAL-M6 +Serial = SLUS-21570 +Name = Heatseeker +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54123 -Name = Marvel - Ultimate Alliance -Region = PAL-Unk +Serial = SLUS-21571 +Name = Growlanser - Heritage of War +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54126 -Name = Family Guy - The Video Game -Region = PAL-Unk +Serial = SLUS-21572 +Name = Surf's Up +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54130 -Name = Spy Hunter - Nowhere to Run -Region = PAL-Unk +Serial = SLUS-21573 +Name = Harley-Davidson - Race to the Rally +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54132 -Name = Guitar Hero -Region = PAL-E +Serial = SLUS-21574 +Name = Dawn of Mana +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54135 -Name = Grand Theft Auto - Liberty City Stories -Region = PAL-M5 -Compat = 4 +Serial = SLUS-21575 +Name = Naruto - Ultimate Ninja 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54136 -Name = Grand Theft Auto - Liberty City Stories -Region = PAL-Unk +Serial = SLUS-21576 +Name = Rayman - Raving Rabbids +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54137 -Name = Just Cause -Region = PAL-Unk +Serial = SLUS-21577 +Name = Odin Sphere +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54138 -Name = Steambot Chronicles -Region = PAL-Unk +Serial = SLUS-21578 +Name = Biker Mice from Mars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54139 -Name = Earache - Extreme Metal Racing -Region = PAL-Unk +Serial = SLUS-21579 +Name = Barbie in The 12 Dancing Princesses +Region = NTSC-U --------------------------------------------- -Serial = SLES-54140 -Name = Playwize Poker & Casino -Region = PAL-Unk +Serial = SLUS-21580 +Name = Pimp my Ride +Region = NTSC-U --------------------------------------------- -Serial = SLES-54143 -Name = Hard Rock Casino -Region = PAL-M5 +Serial = SLUS-21581 +Name = UEFA Champions League 2006-2007 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54146 -Name = Crusty Demons -Region = PAL-M5 +Serial = SLUS-21582 +Name = MVP '07 - NCAA Baseball +Region = NTSC-U --------------------------------------------- -Serial = SLES-54150 -Name = Bionicle Heroes -Region = PAL-Unk +Serial = SLUS-21583 +Name = Crash of the Titans +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54151 -Name = Let's Make a Soccer Team! -Region = PAL-Unk +Serial = SLUS-21584 +Name = Romance of the Three Kingdoms XI +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54152 -Name = Ant Bully, The -Region = PAL-Unk +Serial = SLUS-21585 +Name = Samurai Warriors 2 - Empires +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54153 -Name = Virtua Pro Football -Region = PAL-Unk +Serial = SLUS-21586 +Name = Guitar Hero Encore - Rocks the '80s +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54154 -Name = D-Unit Drift Racing -Region = PAL-E +Serial = SLUS-21587 +Name = Made Man +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54155 -Name = Drag Racer USA -Region = PAL-E +Serial = SLUS-21588 +Name = Avatar - The Last Airbender - The Burning Earth +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54156 -Name = Mortal Kombat - Armageddon -Region = PAL-Unk +Serial = SLUS-21589 +Name = Pinball Hall of Fame - The Williams Collection +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54158 -Name = Hummer Badlands -Region = PAL-Unk +Serial = SLUS-21590 +Name = Grand Theft Auto - Vice City Stories +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54159 -Name = Eragon -Region = PAL-Unk +Serial = SLUS-21591 +Name = Ski-Doo Snow X Racing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54160 -Name = Eragon -Region = PAL-Unk +Serial = SLUS-21592 +Name = Adventures of Darwin, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54161 -Name = Super DragonBall Z -Region = PAL-Unk +Serial = SLUS-21593 +Name = Juiced 2 - Hot Import Nights +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54162 -Name = Saint Seiya - The Hades -Region = PAL-M4 +Serial = SLUS-21594 +Name = Naruto - Uzumaki Chronicles 2 +Region = NTSC-U Compat = 5 +OPHFLagHack = 1 --------------------------------------------- -Serial = SLES-54163 -Name = Naruto - Ultimate Ninja -Region = PAL-F +Serial = SLUS-21595 +Name = T.M.N.T. - Teenage Mutant Ninja Turtles +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54164 -Name = DragonBall Z Budokai - Tenkaichi 2 -Region = PAL-Unk +Serial = SLUS-21596 +Name = Burnout - Dominator +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54165 -Name = One Piece - Grand Adventure -Region = PAL-Unk +Serial = SLUS-21597 +Name = Medal of Honor - Vanguard +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54166 -Name = Call of Duty 3 -Region = PAL-Unk -eeClampMode = 3 +Serial = SLUS-21598 +Name = Digimon World - Data Squad +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54167 -Name = Call of Duty 3 -Region = PAL-S -eeClampMode = 3 +Serial = SLUS-21599 +Name = High School Musical - Sing It! +Region = NTSC-U --------------------------------------------- -Serial = SLES-54168 -Name = Call of Duty 3 -Region = PAL-Unk -eeClampMode = 3 +Serial = SLUS-21600 +Name = Spider-Man - Friend or Foe +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54169 -Name = Aeon Flux -Region = PAL-Unk +Serial = SLUS-21601 +Name = Sprint Cars 2 - Showdown at Eldora +Region = NTSC-U --------------------------------------------- -Serial = SLES-54170 -Name = Jaws Unleashed -Region = PAL-Unk +Serial = SLUS-21602 +Name = Transformers - The Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54171 -Name = Yakuza -Region = PAL-Unk +Serial = SLUS-21603 +Name = Soul Nomad & The World Eaters +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54172 -Name = Garfield 2 - Tale of Two Kitties -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21604 +Name = GrimGrimoire +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54174 -Name = Zoocube -Region = PAL-Unk +Serial = SLUS-21605 +Name = Nicktoons - Attack of the Toybots +Region = NTSC-U --------------------------------------------- -Serial = SLES-54178 -Name = Ant Bully, The -Region = PAL-Unk +Serial = SLUS-21606 +Name = Metropolismania 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54179 -Name = Pirates of the Caribbean - At World's End -Region = PAL-M6 +Serial = SLUS-21607 +Name = Legend of Spyro, The - The Eternal Night +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54181 -Name = Gottlieb Pinball Classics -Region = PAL-M5 +Serial = SLUS-21608 +Name = Dance Dance Revolution - SuperNOVA 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54182 -Name = Scarface - The World is Yours -Region = PAL-F +Serial = SLUS-21609 +Name = Dance Dance Revolution - Disney Channel +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54183 -Name = Scarface - The World is Yours -Region = PAL-G +Serial = SLUS-21611 +Name = Thrillville - Off the Rails +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54184 -Name = Scarface - The World is Yours -Region = PAL-R +Serial = SLUS-21612 +Name = Legend of the Dragon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54185 -Name = Dirge of Cerberus - Final Fantasy VII -Region = PAL-Unk +Serial = SLUS-21613 +Name = Manhunt 2 +Region = NTSC-U Compat = 5 -[patches = 33F7D21A] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". - // - // Override sceScfGetLanguage patches by nachbrenner: - // patch=0,EE,002486d8,word,24020000 // japanese - // patch=0,EE,002486d8,word,24020001 // english - // patch=0,EE,002486d8,word,24020004 // german -[/patches] --------------------------------------------- -Serial = SLES-54186 -Name = Devil May Cry 3 - Dante's Awakening [Special Edition] -Region = PAL-E -eeRoundMode = 0 +Serial = SLUS-21614 +Name = Star Wars - The Force Unleashed +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-54187 -Name = Real World Golf 2007 -Region = PAL-Unk +Serial = SLUS-21615 +Name = Wild Arms 5 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54188 -Name = Nickelodeon Avatar - The Legend of Aang -Region = PAL-M4 +Serial = SLUS-21616 +Name = Tony Hawk's Proving Ground +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54193 -Name = Sudoku, Carol Vonderman's -Region = PAL-Unk +Serial = SLUS-21618 +Name = Plan, The +Region = NTSC-U --------------------------------------------- -Serial = SLES-54194 -Name = Sudoku, Carol Vonderman's -Region = PAL-Unk +Serial = SLUS-21619 +Name = Harry Potter and The Order of the Phoenix +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54195 -Name = Turbo Trucks -Region = PAL-E +Serial = SLUS-21620 +Name = NCAA Football '08 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54199 -Name = Who Wants to be a Millionaire - Party Edition -Region = PAL-Unk +Serial = SLUS-21621 +Name = Shin Megami Tensei: Persona 3 FES +Region = NTSC-U +Compat = 5 +VuClipFlagHack = 1 +MemCardFilter = SLUS-21621/SLUS-21569 --------------------------------------------- -Serial = SLES-54200 -Name = Just Cause -Region = PAL-F-G +Serial = SLUS-21622 +Name = Bee Movie Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54203 -Name = Pro Evolution Soccer 6 -Region = PAL-Unk +Serial = SLUS-21623 +Name = BIGS, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54204 -Name = Pro Evolution Soccer 6 -Region = PAL-Unk +Serial = SLUS-21624 +Name = Cabela's Trophy Bucks +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54205 -Name = WWI - Aces of the Sky -Region = PAL-Unk +Serial = SLUS-21625 +Name = Cabela's Big Game Hunter III +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54209 -Name = Sopranos, The - Road to Respect -Region = PAL-Unk +Serial = SLUS-21626 +Name = Stuntman - Ignition +Region = NTSC-U +Compat = 5 +VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-54210 -Name = NBA 2K7 -Region = PAL-Unk +Serial = SLUS-21627 +Name = Jackass - The Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54211 -Name = NHL 2K7 -Region = PAL-Unk +Serial = SLUS-21628 +Name = Hot Wheels - Beat That +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54212 -Name = Agent Hugo - RoboRumble -Region = PAL-M11 +Serial = SLUS-21629 +Name = Samurai Showdown Anthology +Region = NTSC-U --------------------------------------------- -Serial = SLES-54213 -Name = Black Buccaneer -Region = PAL-M5 +Serial = SLUS-21630 +Name = Star Trek - Conquest +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54215 -Name = Monster House -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21631 +Name = Phantasy Star Universe - Ambition of the Illuminus +Region = NTSC-U +Compat = 5 +eeRoundMode = 0 --------------------------------------------- -Serial = SLES-54216 -Name = Monster House -Region = PAL-Unk +Serial = SLUS-21632 +Name = NHL 2K8 +Region = NTSC-U +Compat = 5 +[patches = 77B49EF8] +//Patched by Prafull-thanks to harsh +//Avoid hang at start +patch=0,EE,00432310,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-54217 -Name = Monster House -Region = PAL-Unk +Serial = SLUS-21633 +Name = Aqua Teen Hunger Force - Zombie Ninja Pro-Am +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54218 -Name = Rule of Rose -Region = PAL-F +Serial = SLUS-21634 +Name = Crazy Frog Racer +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54221 -Name = LEGO Star Wars II - The Original Trilogy -Region = PAL-Unk +Serial = SLUS-21635 +Name = Monster Jam +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54222 -Name = SuperBikes Riding Challenge -Region = PAL-Unk +Serial = SLUS-21636 +Name = Looney Tunes - Acme Arsenal +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54223 -Name = NASCAR '07 -Region = PAL-Unk +Serial = SLUS-21637 +Name = Disney-Pixar's Cars - Mater-National +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54224 -Name = Australian Idol Sing -Region = PAL-E +Serial = SLUS-21638 +Name = Madden NFL '08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54225 -Name = LMA Manager 2007 -Region = PAL-Unk +Serial = SLUS-21639 +Name = NASCAR '08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54230 -Name = Brian Lara International Cricket 2007 -Region = PAL-E +Serial = SLUS-21640 +Name = Rugby '08 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54232 -Name = Kingdom Hearts II -Region = PAL-F +Serial = SLUS-21641 +Name = Innocent Life - Harvest Moon - Pure +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54233 -Name = Kingdom Hearts II -Region = PAL-G +Serial = SLUS-21642 +Name = Sonic Riders - Zero Gravity +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54234 -Name = Kingdom Hearts II -Region = PAL-Unk +Serial = SLUS-21643 +Name = Bratz - The Movie +Region = NTSC-U --------------------------------------------- -Serial = SLES-54235 -Name = Kingdom Hearts II -Region = PAL-S +Serial = SLUS-21644 +Name = SpongeBob's Atlantis SquarePantis +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54237 -Name = Pirates of the Caribbean - The Legend of Jack Sparrow -Region = PAL-Unk +Serial = SLUS-21645 +Name = WWE SmackDown! vs. Raw 2008 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54239 -Name = Wild ARMs 4 -Region = PAL-Unk +Serial = SLUS-21646 +Name = Tiger Woods PGA Tour '08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54240 -Name = FIFA '07 -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21647 +Name = NHL '08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54241 -Name = FIFA '07 -Region = PAL-F-G-I +Serial = SLUS-21648 +Name = FIFA Soccer '08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54243 -Name = FIFA '07 -Region = PAL-Unk +Serial = SLUS-21649 +Name = NBA Live '08 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54244 -Name = FIFA '07 -Region = PAL-Unk +Serial = SLUS-21650 +Name = Mercenaries 2 - World in Flames +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //flickery textures --------------------------------------------- -Serial = SLES-54245 -Name = NHL '07 -Region = PAL-Unk +Serial = SLUS-21651 +Name = Noddy and the Magic Book +Region = NTSC-U --------------------------------------------- -Serial = SLES-54246 -Name = FIFA '07 -Region = PAL-Unk +Serial = SLUS-21652 +Name = Guilty Gear XX - Accent Core +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54248 -Name = Madden NFL '07 -Region = PAL-Unk +Serial = SLUS-21653 +Name = Kiki Kai Kai +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54250 -Name = NBA Live '07 -Region = PAL-Unk +Serial = SLUS-21654 +Name = Kane & Lynch - Dead Men Sneak Preview +Region = NTSC-U --------------------------------------------- -Serial = SLES-54251 -Name = NBA Live '07 -Region = PAL-Unk +Serial = SLUS-21655 +Name = CSI 3 - Dimensions of Murder +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54252 -Name = NBA Live '07 -Region = PAL-E-G-I +Serial = SLUS-21656 +Name = World Superbikes '07 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54253 -Name = Tiger Woods PGA Tour '07 -Region = PAL-Unk +Serial = SLUS-21658 +Name = Need for Speed - ProStreet +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54254 -Name = Evolution GT -Region = PAL-Unk +Serial = SLUS-21660 +Name = Disney Princess - Enchanted Journey +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54255 -Name = King of Fighters, The - Maximum Impact 2 -Region = PAL-M5 +Serial = SLUS-21661 +Name = Ben 10: Protector of Earth +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54256 -Name = WWII - Battle Over the Pacific -Region = PAL-Unk +Serial = SLUS-21662 +Name = Warriors Orochi +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54271 -Name = Scarface - The World is Yours -Region = PAL-Unk +Serial = SLUS-21663 +Name = Cocoto - Fishing Master +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54305 -Name = Demon Chaos -Region = PAL-M5 +Serial = SLUS-21664 +Name = Sims 2, The - Castaway +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54306 -Name = Cartoon Network Racing -Region = PAL-Unk +Serial = SLUS-21665 +Name = Simpsons Game, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54307 -Name = Rayman - Raving Rabbids -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21666 +Name = Mountain Bike Adrenaline +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54308 -Name = Phantasy Star Universe -Region = PAL-Unk +Serial = SLUS-21668 +Name = George of the Jungle +Region = NTSC-U Compat = 5 -eeRoundMode = 0 --------------------------------------------- -Serial = SLES-54309 -Name = Strawberry Shortcake - The Sweet Dreams Game -Region = PAL-Unk +Serial = SLUS-21669 +Name = NBA 2K8 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54310 -Name = Open Season -Region = PAL-Unk +Serial = SLUS-21670 +Name = Backyard Football 2008 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54311 -Name = Noddy and The Magic Book -Region = PAL-Unk +Serial = SLUS-21671 +Name = MLB Power Pros +Region = NTSC-U --------------------------------------------- -Serial = SLES-54316 -Name = Open Season - Rebelles de la Foret -Region = PAL-F +Serial = SLUS-21672 +Name = Guitar Hero III - Legends of Rock +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54317 -Name = Ghost Rider -Region = PAL-Unk +Serial = SLUS-21673 +Name = College Hoops 2K8 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54319 -Name = Biker Mice from Mars -Region = PAL-M5 +Serial = SLUS-21674 +Name = Petz - Dogz 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54320 -Name = Championship Manager 2007 -Region = PAL-E +Serial = SLUS-21675 +Name = Petz - Catz 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54321 -Name = Need for Speed - Carbon -Region = PAL-Unk +Serial = SLUS-21676 +Name = Dancing with the Stars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54322 -Name = Need for Speed - Carbon -Region = PAL-Unk +Serial = SLUS-21677 +Name = Golden Compass, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54323 -Name = Need for Speed - Carbon -Region = PAL-Unk +Serial = SLUS-21678 +Name = DragonBall Z - Budokai Tenkaichi 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54324 -Name = Need for Speed - Carbon -Region = PAL-Unk +Serial = SLUS-21679 +Name = Power Rangers - Super Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54331 -Name = Street Dance -Region = PAL-Unk +Serial = SLUS-21680 +Name = Harvey Birdman - Attorney at Law +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54332 -Name = Dance Fest -Region = PAL-Unk +Serial = SLUS-21681 +Name = Boogie +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-54333 -Name = Sega MegaDrive Collection -Region = PAL-Unk +Serial = SLUS-21682 +Name = Rock Band +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54336 -Name = Lumines Plus -Region = PAL-E +Serial = SLUS-21683 +Name = Yu-Gi-Oh! The Beginning of Destiny +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54339 -Name = Realm of the Dead -Region = PAL-E +Serial = SLUS-21684 +Name = Barbie as The Island Princess +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54340 -Name = Samurai Warriors 2 -Region = PAL-Unk +Serial = SLUS-21685 +Name = Pro Evolution Soccer 2008 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54341 -Name = Dancing Stage SuperNOVA -Region = PAL-M5 +Serial = SLUS-21686 +Name = World Series of Poker 2008 - Battle for the Bracelets +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54342 -Name = Bratz - Forever Diamondz -Region = PAL-Unk +Serial = SLUS-21687 +Name = King of Fighters XI, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54343 -Name = Bratz - Forever Diamondz -Region = PAL-Unk +Serial = SLUS-21688 +Name = MotoGP '07 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54344 -Name = Bratz - Forever Diamondz -Region = PAL-Unk +Serial = SLUS-21689 +Name = Petz - Horsez 2 +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-54346 -Name = Heatseeker -Region = PAL-M3 +Serial = SLUS-21690 +Name = Alone in the Dark +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-54347 -Name = Sims 2, The - Pets -Region = PAL-Unk +Serial = SLUS-21691 +Name = Swashbucklers - Blue vs. Grey +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54350 -Name = Superman Returns -Region = PAL-G +Serial = SLUS-21692 +Name = Puzzle Quest - Challenge of the Warlords +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54354 -Name = Final Fantasy XII -Region = PAL-E +Serial = SLUS-21693 +Name = 7 Wonders of the Ancient World +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54355 -Name = Final Fantasy XII -Region = PAL-Unk +Serial = SLUS-21694 +Name = Final Fantasy XI - Wings of the Goddess +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54356 -Name = Final Fantasy XII -Region = PAL-G +Serial = SLUS-21697 +Name = Iridium Runners +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54357 -Name = Final Fantasy XII -Region = PAL-I +Serial = SLUS-21698 +Name = NCAA March Madness '08 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54358 -Name = Final Fantasy XII -Region = PAL-S +Serial = SLUS-21699 +Name = UEFA Euro 2008 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54359 -Name = Legend of Spyro, The - A New Beginning -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-54360 -Name = Pro Evolution Soccer 6 -Region = PAL-Unk +Serial = SLUS-21701 +Name = MX vs. ATV - Untamed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54361 -Name = Pro Evolution Soccer 6 -Region = PAL-Unk +Serial = SLUS-21702 +Name = Fire Pro Wrestling - Returns +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54362 -Name = Pro Evolution Soccer 6 -Region = PAL-Unk +Serial = SLUS-21703 +Name = Luxor - Pharaoh's Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54364 -Name = Curious George -Region = PAL-Unk +Serial = SLUS-21704 +Name = Final Fantasy XI - Vana'diel Collection 2008 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54365 -Name = AMF Xtreme bowling 2006 -Region = PAL-M6 +Serial = SLUS-21706 +Name = Alvin and the Chipmunks +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54366 -Name = David Douillet Judo -Region = PAL-Unk +Serial = SLUS-21707 +Name = Godzilla Unleashed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54368 -Name = RTL Ski Jumping 2007 -Region = PAL-Unk +Serial = SLUS-21708 +Name = NeoGeo Battle Coliseum +Region = NTSC-U --------------------------------------------- -Serial = SLES-54370 -Name = Alpine Ski Racing -Region = PAL-Unk +Serial = SLUS-21709 +Name = Obscure - The Aftermath +Region = NTSC-U +Compat = 5 +EETimingHack = 1 //For stripes on FMVs and crashes on scenes. --------------------------------------------- -Serial = SLES-54374 -Name = RTL Wintergames 2007 -Region = PAL-Unk +Serial = SLUS-21710 +Name = PopCap Hits Volume 1 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54376 -Name = Barnyard -Region = PAL-Unk +Serial = SLUS-21711 +Name = Biathlon 2008 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54379 -Name = NFL Street 3 -Region = PAL-E +Serial = SLUS-21712 +Name = History Channel - Battle for the Pacific +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54380 -Name = Babe -Region = PAL-M6 +Serial = SLUS-21714 +Name = Baroque +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54381 -Name = Dr. Dolittle -Region = PAL-Unk +Serial = SLUS-21715 +Name = Cabela's Moster Bass +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54382 -Name = Jumanji -Region = PAL-Unk +Serial = SLUS-21716 +Name = Spiderwick Chronicles, The +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54383 -Name = Casper and The Ghostly Trio -Region = PAL-Unk +Serial = SLUS-21717 +Name = Dora the Explorer - Dora Saves the Mermaids +Region = NTSC-U --------------------------------------------- -Serial = SLES-54384 -Name = Destroy All Humans 2 - Make War not Love -Region = PAL-Unk +Serial = SLUS-21718 +Name = Go Diego Go - Safari Rescue +Region = NTSC-U --------------------------------------------- -Serial = SLES-54385 -Name = Atelier Iris 2: The Azoth of Destiny -Region = PAL-Unk +Serial = SLUS-21719 +Name = Karaoke Revolution Presents - American Idol Encore +Region = NTSC-U --------------------------------------------- -Serial = SLES-54388 -Name = Kim Possible - What's the Switch -Region = PAL-Unk +Serial = SLUS-21720 +Name = Arcana Heart +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54389 -Name = Tony Hawk's Project 8 -Region = PAL-Unk -Compat = 2 +Serial = SLUS-21721 +Name = Nobunaga's Ambition - Rise to Power +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54393 -Name = Pippa Funnell - Take the Reins -Region = PAL-Unk +Serial = SLUS-21722 +Name = Chaos Wars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54394 -Name = Family Guy - The Video Game -Region = PAL-Unk +Serial = SLUS-21723 +Name = Fatal Fury Battle Archives Vol.2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54395 -Name = NeoGeo Battle Coliseum -Region = PAL-Unk +Serial = SLUS-21724 +Name = SNK Arcade Classics Volume 1 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54396 -Name = Cricket 07 -Region = PAL-E +Serial = SLUS-21725 +Name = World Heroes Anthology +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54400 -Name = SpongeBob Squarepants - Creature from the Krusty Krab -Region = PAL-Unk +Serial = SLUS-21726 +Name = Samurai Warriors 2 - Xtreme Legends +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54402 -Name = Need for Speed - Carbon [Collector's Edition] -Region = PAL-Unk +Serial = SLUS-21727 +Name = Naruto - Ultimate Ninja 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54418 -Name = Powerdrome -Region = PAL-Unk +Serial = SLUS-21728 +Name = Crash - Mind Over Mutant +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54420 -Name = Arthus & The Minimoys -Region = PAL-Unk +Serial = SLUS-21729 +Name = Major League Baseball 2K8 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54421 -Name = Happy Feet -Region = PAL-Unk -Compat = 4 +Serial = SLUS-21730 +Name = Jumper +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54423 -Name = Justice League Heroes -Region = PAL-M5 +Serial = SLUS-21731 +Name = Silent Hill - Origins +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54424 -Name = Dr. Dolittle -Region = PAL-Unk +Serial = SLUS-21732 +Name = El Tigre - The Adventures of Manny Rivera +Region = NTSC-U --------------------------------------------- -Serial = SLES-54426 -Name = Casper and The Ghostly Trio -Region = PAL-Unk +Serial = SLUS-21733 +Name = Sega Superstars Tennis +Region = NTSC-U --------------------------------------------- -Serial = SLES-54427 -Name = Jumanji -Region = PAL-Unk +Serial = SLUS-21734 +Name = Falling Stars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54430 -Name = Teen Titans -Region = PAL-Unk +Serial = SLUS-21735 +Name = Mana Khemia - Alchemists of Al-Revis +Region = NTSC-U +Compat = 5 +DMABusyHack = 1 --------------------------------------------- -Serial = SLES-54431 -Name = Teen Titans -Region = PAL-Unk +Serial = SLUS-21736 +Name = Wall-E +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54432 -Name = Mercury Meltdown Remix -Region = PAL-Unk +Serial = SLUS-21737 +Name = Riding Star +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54437 -Name = King of Fighters XI -Region = PAL-E +Serial = SLUS-21738 +Name = Nitro Bike +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54439 -Name = Okami -Region = PAL-Unk +Serial = SLUS-21739 +Name = Iron Man +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54440 -Name = GT-R Touring -Region = PAL-E +Serial = SLUS-21740 +Name = Guitar Hero - Aerosmith +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54441 -Name = Hawk Kawasaki Racing -Region = PAL-Unk +Serial = SLUS-21741 +Name = Sea Monsters - A Prehistoric Adventure +Region = NTSC-U --------------------------------------------- -Serial = SLES-54442 -Name = Guitar Hero II -Region = PAL-Unk -Compat = 3 +Serial = SLUS-21742 +Name = Women's Volleyball Championship +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54444 -Name = Made Man -Region = PAL-Unk +Serial = SLUS-21743 +Name = Code Lyoko - Quest for Infinity +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54448 -Name = World Series of Poker - Tournament of Champions -Region = PAL-Unk +Serial = SLUS-21744 +Name = NASCAR '09 +Region = NTSC-U +Compat = 1 --------------------------------------------- -Serial = SLES-54449 -Name = Chicken Little - Ace in Action -Region = PAL-Unk +Serial = SLUS-21746 +Name = Call Of Duty - World At War - Final Fronts +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54450 -Name = Chicken Little - Aventures Intergalactiques -Region = PAL-Unk +Serial = SLUS-21748 +Name = MLB Power Pros 2008 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54451 -Name = Himmel und Huhn - Ace in Action -Region = PAL-Unk +Serial = SLUS-21750 +Name = Hannah Montana - Spotlight World Tour +Region = NTSC-U --------------------------------------------- -Serial = SLES-54452 -Name = Chicken Little - 'As' en Accion -Region = PAL-Unk +Serial = SLUS-21751 +Name = Backyard Football 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54453 -Name = Chicken Little - Ace in Action -Region = PAL-Unk +Serial = SLUS-21752 +Name = NCAA Football '09 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54454 -Name = Disgaea 2: Cursed Memories -Region = PAL-Unk +Serial = SLUS-21753 +Name = Monopoly +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54456 -Name = Beverly Hills Cop -Region = PAL-E +Serial = SLUS-21754 +Name = CID the Dummy +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54459 -Name = All Star Fighters -Region = PAL-E +Serial = SLUS-21755 +Name = Are You Smarter Than A 5th Grader - Make The Grade +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54460 -Name = Dragon Sisters -Region = PAL-E +Serial = SLUS-21756 +Name = Chronicles of Narnia, The - Prince Caspian +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54461 -Name = Zombie Hunters -Region = PAL-E +Serial = SLUS-21757 +Name = Kung Fu Panda +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54462 -Name = Zombie Virus -Region = PAL-E +Serial = SLUS-21758 +Name = Rock Band - Track Pack Vol.1 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54464 -Name = Global Defence Force -Region = PAL-E +Serial = SLUS-21759 +Name = LEGO Indiana Jones - The Original Adventures +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54465 -Name = CSI 3 - Dimensions of Murder -Region = PAL-Unk +Serial = SLUS-21760 +Name = Jeep Thrills +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54466 -Name = Test Drive Unlimited -Region = PAL-E +Serial = SLUS-21761 +Name = B-Boy +Region = NTSC-U Compat = 5 -VIFFIFOHack = 1 --------------------------------------------- -Serial = SLES-54467 -Name = Final Armada -Region = PAL-Unk +Serial = SLUS-21763 +Name = NHL 2K9 +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-54468 -Name = Crazy Chicken X -Region = PAL-Unk +Serial = SLUS-21764 +Name = Cake Mania - Baker's Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54469 -Name = Home Alone -Region = PAL-Unk +Serial = SLUS-21765 +Name = Incredible Hulk, The +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54471 -Name = Captain Scarlet -Region = PAL-M6 +Serial = SLUS-21766 +Name = Pipemania +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54473 -Name = Flintstones, The - Bedrock Racing -Region = PAL-Unk +Serial = SLUS-21767 +Name = Dance Dance Revolution X +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54474 -Name = Curious George -Region = PAL-Unk +Serial = SLUS-21768 +Name = PopCap Hits Vol.2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54476 -Name = Buccaneer -Region = PAL-E +Serial = SLUS-21769 +Name = Yakuza 2 +Region = NTSC-U +Compat = 5 +// allows import of Yakuza 1 data +MemCardFilter = SLUS-21769/SLUS-21348 --------------------------------------------- -Serial = SLES-54478 -Name = TMNT -Region = PAL-M5 -Compat = 4 +Serial = SLUS-21770 +Name = Madden NFL '09 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54483 -Name = The Fast and the Furious -Region = PAL-E +Serial = SLUS-21771 +Name = NHL 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54486 -Name = Xiaolin Showdown -Region = PAL-M5 +Serial = SLUS-21772 +Name = Tiger Woods PGA Tour '09 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54487 -Name = Tokobot Plus - Mysteries of the Karakuri -Region = PAL-M5 +Serial = SLUS-21773 +Name = PDC World Championship Darts 2008 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54488 -Name = WWE SmackDown! vs. RAW 2007 -Region = PAL-Unk +Serial = SLUS-21774 +Name = Dynasty Warriors 6 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54489 -Name = WWE SmackDown! vs. RAW 2007 -Region = PAL-Unk +Serial = SLUS-21775 +Name = Mummy, The - Tomb of the Dragon Emperor +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54490 -Name = God Hand -Region = PAL-Unk +Serial = SLUS-21776 +Name = Fifa 2009 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54492 -Name = Need for Speed - Carbon [Collector's Edition] -Region = PAL-Unk +Serial = SLUS-21778 +Name = Dokapon Kingdom +Region = NTSC-U --------------------------------------------- -Serial = SLES-54493 -Name = Need for Speed - Carbon [Collector's Edition] -Region = PAL-G +Serial = SLUS-21779 +Name = Eternal Poison +Region = NTSC-U +Compat = 5 +eeClampMode = 0 //in-game background visible --------------------------------------------- -Serial = SLES-54494 -Name = Little Britain - The Video Game -Region = PAL-E +Serial = SLUS-21780 +Name = Ferrari Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54510 -Name = Disney's Meet the Robinsons -Region = PAL-M3 +Serial = SLUS-21781 +Name = Guitar Hero - World Tour +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54511 -Name = UEFA Champions League -Region = PAL-Unk +Serial = SLUS-21782 +Name = Shin Megami Tensei: Persona 4 +Region = NTSC-U +Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLES-54512 -Name = UEFA Champions League -Region = PAL-Unk +Serial = SLUS-21782B +Name = Shin Megami Tensei: Persona 4 +Region = NTSC-U +Compat = 5 +VuClipFlagHack = 1 --------------------------------------------- -Serial = SLES-54513 -Name = UEFA Champions League -Region = PAL-Unk +Serial = SLUS-21783 +Name = Space Chimps +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54518 -Name = Clumsy Shumsy -Region = PAL-Unk +Serial = SLUS-21785 +Name = LEGO Batman +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54521 -Name = Nickelodeon SpongeBob and Friends - Battle for Volcano Island -Region = PAL-M5 +Serial = SLUS-21787 +Name = TNA iMPACT! +Region = NTSC-U +Compat = 5 +EETimingHack = 1 --------------------------------------------- -Serial = SLES-54527 -Name = Flushed Away -Region = PAL-Unk +Serial = SLUS-21788 +Name = Ar tonelico II: Melody Of Metafalica +Region = NTSC-U +Compat = 5 +eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests --------------------------------------------- -Serial = SLES-54541 -Name = Xena - Warrior Princess -Region = PAL-Unk +Serial = SLUS-21789 +Name = Cabela's Legendary Adventures +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54542 -Name = Xena - Warrior Princess -Region = PAL-Unk +Serial = SLUS-21790 +Name = Shrek's Carnival Craze +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54544 -Name = Gun Club -Region = PAL-Unk +Serial = SLUS-21793 +Name = DT Carnage +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54545 -Name = Maxxed Out Racing Nitro -Region = PAL-E +Serial = SLUS-21794 +Name = Go, Diego, Go!: Great Dinosaur Rescue +Region = NTSC-U --------------------------------------------- -Serial = SLES-54546 -Name = Horsez -Region = PAL-Unk +Serial = SLUS-21795 +Name = Totally Spies! Totally Party +Region = NTSC-U --------------------------------------------- -Serial = SLES-54548 -Name = Cocoto Fishing Master -Region = PAL-Unk +Serial = SLUS-21797 +Name = Tak - Guardians Of Gross +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54549 -Name = Crazy Frog Racer 2 -Region = PAL-Unk +Serial = SLUS-21798 +Name = Shepherd's Crossing +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54551 -Name = Premier Manager 2006-2007 -Region = PAL-Unk +Serial = SLUS-21799 +Name = Kingdom Hearts Re: Chain of Memories +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54553 -Name = Shrek - Smash 'n Crash Racing -Region = PAL-Unk +Serial = SLUS-21800 +Name = Rock Band 2 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54554 -Name = Star Trek - Encounters -Region = PAL-Unk +Serial = SLUS-21801 +Name = Need For Speed - Undercover +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54555 -Name = Shin Megami Tensei: Digital Devil Saga 2 -Region = PAL-E -EETimingHack = 1 +Serial = SLUS-21802 +Name = Naked Brothers Band - The Video Game +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54560 -Name = Alpine Ski Racing 2007 -Region = PAL-Unk +Serial = SLUS-21804 +Name = Avatar - The Last Airbender - Into The Inferno +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54561 -Name = Capcom Classics Collection Vol. 2 -Region = PAL-E +Serial = SLUS-21805 +Name = Hasbro Family Game Night +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54566 -Name = Barbie in The 12 Dancing Princesses -Region = PAL-Unk +Serial = SLUS-21806 +Name = Barbie Horse Adventures - Riding Camp +Region = NTSC-U --------------------------------------------- -Serial = SLES-54569 -Name = Zombie Hunters 2 -Region = PAL-E +Serial = SLUS-21807 +Name = Monster Jam - Urban Assault +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54579 -Name = Flintstones, The - Bedrock Racing -Region = PAL-Unk +Serial = SLUS-21808 +Name = Harry Potter and the Half-Blood Prince +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54581 -Name = The Red Star -Region = PAL-M5 +Serial = SLUS-21809 +Name = Backyard Football 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54582 -Name = International Tennis Pro -Region = PAL-E +Serial = SLUS-21810 +Name = WWE SmackDown vs. Raw 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54583 -Name = Surf's Up -Region = PAL-M5 +Serial = SLUS-21811 +Name = MotoGP 08 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54584 -Name = Pac-Man Rally -Region = PAL-Unk +Serial = SLUS-21812 +Name = Speed Racer +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54586 -Name = Ar tonelico: Melody of Elemia -Region = PAL-Unk +Serial = SLUS-21813 +Name = James Bond 007 - Quantum Of Solace +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54588 -Name = Brunswick Pro Bowling -Region = PAL-E +Serial = SLUS-21814 +Name = Disney - Think Fast +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54589 -Name = Global Defense Force Tactics -Region = PAL-E +Serial = SLUS-21815 +Name = Ben 10: Alien Force +Region = NTSC-U +Compat = 5 +--------------------------------------------- +Serial = SLUS-21816 +Name = King Of Fighters 98 - Ultimate Match +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54604 -Name = 'Que pasa Neng! El Videojuego -Region = PAL-S +Serial = SLUS-21817 +Name = SBK Superbike World Chamipionship +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54606 -Name = Harley-Davidson - Race to the Rally -Region = PAL-Unk +Serial = SLUS-21818 +Name = Spongebob Squarepants Featuring Nicktoons - Globs Of Doom +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54608 -Name = Barbie in The 12 Dancing Princesses -Region = PAL-Unk +Serial = SLUS-21819 +Name = High School Musical 3 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54611 -Name = TT Superbikes - Real Road Racing Championship -Region = PAL-M5 +Serial = SLUS-21820 +Name = Legend Of Spyro - Dawn Of The Dragon +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54615 -Name = Code of the Samurai -Region = PAL-Unk +Serial = SLUS-21821 +Name = Pro Evolution Soccer 2009 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54617 -Name = Action Man A.T.O.M. - Alpha Teens on Machines -Region = PAL-M9 +Serial = SLUS-21822 +Name = Spiderman - Web Of Shadows +Region = NTSC-U +Compat = 5 +eeClampMode = 3 //connect hits, able to summon... etc... --------------------------------------------- -Serial = SLES-54622 -Name = Grand Theft Auto - Vice City Stories -Region = PAL-M5 +Serial = SLUS-21825 +Name = Pro Bull - Riding Out Of The Chute +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54623 -Name = Grand Theft Auto - Vice City Stories -Region = PAL-G +Serial = SLUS-21826 +Name = Disney - Sing It +Region = NTSC-U +Compat = 2 --------------------------------------------- -Serial = SLES-54624 -Name = Samurai Warriors 2 - Empires -Region = PAL-E +Serial = SLUS-21827 +Name = PopStar Guitar +Region = NTSC-U --------------------------------------------- -Serial = SLES-54626 -Name = An American Tail -Region = PAL-M11 +Serial = SLUS-21830 +Name = Rock Band Track Pack - Volume 2 +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54627 -Name = Burnout Dominator -Region = PAL-E +Serial = SLUS-21831 +Name = Army Men - Soldiers Of Misfortune +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54629 -Name = Shin Megami Tensei - Devil Summoner -Region = PAL-E +Serial = SLUS-21834 +Name = Goosebumps Horrorland - Happy Halloween +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54631 -Name = Harley-Davidson - Race to the Rally -Region = PAL-Unk +Serial = SLUS-21835 +Name = History Channel - Civil War Secret Mission +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54633 -Name = Premier Manager 08 -Region = PAL-M4 +Serial = SLUS-21836 +Name = Secret Service - Ultimate Sacrifice +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54634 -Name = Top Trumps Adventures Vol. 1 - Horror & Predators -Region = PAL-M5 +Serial = SLUS-21838 +Name = Monster Lab +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54635 -Name = Top Trumps Adventures Vol. 2 - Dogs & Dinosaurs -Region = PAL-M5 +Serial = SLUS-21839 +Name = Ski and Shoot +Region = NTSC-U --------------------------------------------- -Serial = SLES-54639 -Name = AFL Premiership 2007 -Region = PAL-E +Serial = SLUS-21840 +Name = Madagascar - Escape 2 Africa +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54641 -Name = International Cricket Captain III -Region = PAL-E +Serial = SLUS-21841 +Name = Cabelas - Dangerous Hunts 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54644 -Name = Valkyrie Profile 2 - Silmeria -Region = PAL-E +Serial = SLUS-21842 +Name = Dragonball Z Infinite World +Region = NTSC-U Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-54645 -Name = Valkyrie Profile 2 - Silmeria -Region = PAL-F -VuAddSubHack = 1 +Serial = SLUS-21843 +Name = Guitar Hero - Metallica +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54646 -Name = Valkyrie Profile 2 - Silmeria -Region = PAL-G +Serial = SLUS-21844 +Name = Bolt +Region = NTSC-U Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-54647 -Name = Valkyrie Profile 2 - Silmeria -Region = PAL-I +Serial = SLUS-21845 +Name = Shin Megami Tensei: Devil Summoner 2: Raidou Kuzunoha vs. King Abaddon +Region = NTSC-U Compat = 5 -VuAddSubHack = 1 +// allows import of save from Devil Summoner 1 +MemCardFilter = SLUS-21845/SLUS-21431 --------------------------------------------- -Serial = SLES-54648 -Name = Valkyrie Profile 2 - Silmeria -Region = PAL-S -VuAddSubHack = 1 +Serial = SLUS-21846 +Name = Sonic Unleashed +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54657 -Name = Charlotte's Web -Region = PAL-E +Serial = SLUS-21847 +Name = Guilty Gear XX - Accent Core Plus +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54659 -Name = Star Wars - The Force Unleashed -Region = PAL-M4 +Serial = SLUS-21848 +Name = Rock Band Track Pack - AC/DC Live +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54663 -Name = Jackass - The Game -Region = PAL-M5 +Serial = SLUS-21849 +Name = Winter Sports 2: The Next Challenge +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54666 -Name = Mr. Bean -Region = PAL-E +Serial = SLUS-21850 +Name = Baja 1000 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54670 -Name = Wacky Races - Mad Motors -Region = PAL-M11 +Serial = SLUS-21851 +Name = NCAA Basketball '09 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54674 -Name = Lara Croft Tomb Raider - Anniversary -Region = PAL-Unk // Multiple languages +Serial = SLUS-21852 +Name = Tale Of Despereaux, The +Region = NTSC-U Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] --------------------------------------------- -Serial = SLES-54675 -Name = Street Warrior -Region = PAL-E +Serial = SLUS-21853 +Name = Shaun White Snowboarding +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54677 -Name = Metal Slug - Anthology -Region = PAL-E +Serial = SLUS-21854 +Name = Coraline +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54681 -Name = Burnout Dominator -Region = PAL-E +Serial = SLUS-21855 +Name = NPPL Championship Paintball 2009 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54683 -Name = Medal of Honor - Vanguard -Region = PAL-M9 +Serial = SLUS-21857 +Name = Short Track Racing: Trading Paint +Region = NTSC-U --------------------------------------------- -Serial = SLES-54686 -Name = Impossible Mission -Region = PAL-E -Compat = 1 +Serial = SLUS-21858 +Name = Tomb Raider Underworld +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-54687 -Name = Spectral vs. Generation -Region = PAL-E +Serial = SLUS-21860 +Name = The Bigs 2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54695 -Name = Azur & Asmar -Region = PAL-E +Serial = SLUS-21861 +Name = Disney Sing It! High School Musical 3: Senior Year +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-21862 +Name = Naruto Shippuden - Ultimate Ninja 4 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54705 -Name = SBK-07 - Superbike World Championship -Region = PAL-M5 +Serial = SLUS-21863 +Name = Suzuki TT Superbikes: Real Road Racing Championship +Region = NTSC-U --------------------------------------------- -Serial = SLES-54711 -Name = Shadow Hearts - From the New World -Region = PAL-E +Serial = SLUS-21864 +Name = Disney Pixar - Up +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54717 -Name = Power Volleyball -Region = PAL-E +Serial = SLUS-21865 +Name = Guitar Hero 5 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54719 -Name = Charlotte's Web -Region = PAL-11 +Serial = SLUS-21866 +Name = Guitar Hero - Smash Hits +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54723 -Name = Spiderman 3 -Region = PAL-E -Compat = 4 +Serial = SLUS-21867 +Name = Guitar Hero: Van Halen +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54727 -Name = Naruto - Uzumaki Chronicles -Region = PAL-M5 -OPHFLagHack = 1 +Serial = SLUS-21868 +Name = Nobunagas Ambition - Iron Triangle +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54731 -Name = King of Clubs -Region = PAL-M5 +Serial = SLUS-21869 +Name = Trivial Pursuit +Region = NTSC-U --------------------------------------------- -Serial = SLES-54733 -Name = Disney-Pixar Ratatouille -Region = PAL-E +Serial = SLUS-21870 +Name = Monsters VS Aliens +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54735 -Name = Disney-Pixar Ratatouille -Region = PAL-G +Serial = SLUS-21871 +Name = Major League Baseball 2K9 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54747 -Name = Disney-Pixar Ratatouille -Region = PAL-M2 +Serial = SLUS-21872 +Name = Pimp my Ride - Street Racing +Region = NTSC-U --------------------------------------------- -Serial = SLES-54755 -Name = Transformers - The Game -Region = PAL-E +Serial = SLUS-21873 +Name = Dynasty Warriors - Gundam 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54756 -Name = Transformers - The Game -Region = PAL-M2 +Serial = SLUS-21874 +Name = Jelly Belly: Ballistic Beans +Region = NTSC-U --------------------------------------------- -Serial = SLES-54770 -Name = DreamWorks Shrek the Third -Region = PAL-E +Serial = SLUS-21875 +Name = M&Ms Adventure +Region = NTSC-U --------------------------------------------- -Serial = SLES-54771 -Name = DreamWorks Shrek the Third -Region = PAL-M5 +Serial = SLUS-21876 +Name = Rock Band Track Pack: Classic Rock +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54776 -Name = Fantastic Four - Rise of the Silver Surfer -Region = PAL-I +Serial = SLUS-21877 +Name = Tiger Woods PGA Tour 10 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54779 -Name = Harry Potter and the Order of the Phoenix -Region = PAL-M5 +Serial = SLUS-21878 +Name = Ice Age 3 - Dawn of the Dinosaurs +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54782 -Name = Obscure 2 -Region = PAL-E +Serial = SLUS-21879 +Name = Marvel - Ultimate Alliance 2 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54784 -Name = Xyanide - Resurrection -Region = PAL-M5 +Serial = SLUS-21880 +Name = X-Men Origins - Wolverine +Region = NTSC-U +Compat = 5 +FpuCompareHack = 1 //flickering objects, sound loop --------------------------------------------- -Serial = SLES-54788 -Name = Aqua Teen Hunger Force - Zombie Ninja Pro-Am -Region = PAL-E +Serial = SLUS-21881 +Name = Transformers: Revenge of the Fallen +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54790 -Name = Art of Fighting Anthology -Region = PAL-E +Serial = SLUS-21882 +Name = Ghostbusters +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54793 -Name = WWE SmackDown vs. Raw 2008 -Region = PAL-E +Serial = SLUS-21883 +Name = Cars Race-O-Rama +Region = NTSC-U --------------------------------------------- -Serial = SLES-54804 -Name = Operation Air Assault 2 -Region = PAL-E +Serial = SLUS-21884 +Name = Backyard Baseball '10 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54805 -Name = Wer Wird Millionar - Party Edition -Region = PAL-G +Serial = SLUS-21885 +Name = Indiana Jones and the Staff of Kings +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54810 -Name = Rugby 08 -Region = PAL-E +Serial = SLUS-21886 +Name = G.I. Joe: The Rise of Cobra +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54811 -Name = Rugby 08 -Region = PAL-I +Serial = SLUS-21888 +Name = Rock Band Country Track Pack +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54812 -Name = Madden NFL 08 -Region = PAL-E +Serial = SLUS-21889 +Name = Rock Band Metal Track Pack +Region = NTSC-U +Compat = 3 --------------------------------------------- -Serial = SLES-54815 -Name = Spyro - The Eternal Night -Region = PAL-M6 +Serial = SLUS-21890 +Name = Mana Khemia 2 : Fall Of Alchemy +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54819 -Name = Manhunt 2 -Region = PAL-M5 ---------------------------------------------- -Serial = SLES-54820 -Name = Stuntman Ignition -Region = PAL-E +Serial = SLUS-21891 +Name = G-Force +Region = NTSC-U Compat = 5 -VIFFIFOHack = 1 ---------------------------------------------- -Serial = SLES-54822 -Name = Atelier Iris 3: Grand Phantasm -Region = PAL-Unk --------------------------------------------- -Serial = SLES-54825 -Name = Bob the Builder -Region = PAL-M3 +Serial = SLUS-21892 +Name = NCAA Football 10 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54834 -Name = Juiced 2 -Region = PAL-Unk +Serial = SLUS-21893 +Name = Madden NFL 10 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54836 -Name = Disney High School Musical - Sing It! -Region = PAL-M5 +Serial = SLUS-21895 +Name = Astro Boy: The Video Game +Region = NTSC-U --------------------------------------------- -Serial = SLES-54837 -Name = Disney Princess - Enchanted Journey -Region = PAL-M3 +Serial = SLUS-21896 +Name = The Secret Saturdays: Beasts of the 5th Sun +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54840 -Name = Nickelodeon Avatar - The Legend of Aang - The Burning Earth -Region = PAL-M4 +Serial = SLUS-21898 +Name = Band Hero +Region = NTSC-U --------------------------------------------- -Serial = SLES-54841 -Name = Crash of the Titans -Region = PAL-M6 +Serial = SLUS-21899 +Name = Silent Hill - Shattered Memories +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54842 -Name = Crash of the Titans -Region = PAL-M5 +Serial = SLUS-21900 +Name = Scooby-Doo! First Frights +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54845 -Name = Warriors Orochi -Region = PAL-Unk +Serial = SLUS-21901 +Name = WWE SmackDown vs. Raw 2010 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54859 -Name = Guitar Hero - Rocks The 80's -Region = PAL-E -Compat = 4 +Serial = SLUS-21902 +Name = Bakugan: Battle Brawlers +Region = NTSC-U +Compat = 5 +--------------------------------------------- +Serial = SLUS-21904 +Name = Teenage Mutant Ninja Turtles: Smash-Up +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54861 -Name = Thomas & Friends - A Day at the Races -Region = PAL-M5 +Serial = SLUS-21905 +Name = FIFA Soccer 10 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54870 -Name = FIFA 08 -Region = PAL-E +Serial = SLUS-21906 +Name = Cabela's Outdoor - Adventures 2010 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54871 -Name = FIFA 2008 -Region = PAL-F-G-I +Serial = SLUS-21907 +Name = Jurassic - The Hunted +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54872 -Name = FIFA 08 -Region = PAL-P-S +Serial = SLUS-21908 +Name = NBA 2K10 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54873 -Name = FIFA 2008 -Region = PAL-E-N-Sw +Serial = SLUS-21909 +Name = DJ Hero +Region = NTSC-U --------------------------------------------- -Serial = SLES-54875 -Name = Warriors Orochi -Region = PAL-E +Serial = SLUS-21910 +Name = Marvel Super Hero Squad +Region = NTSC-U --------------------------------------------- -Serial = SLES-54877 -Name = Warriors Orochi -Region = PAL-G +Serial = SLUS-21913 +Name = Star Wars The Clone Wars: Republic Heroes +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54878 -Name = Naruto - Ultimate Ninja 2 -Region = PAL-M5 +Serial = SLUS-21914 +Name = NHL 2K10 +Region = NTSC-U +Compat = 5 +[patches = 82CA153C] + //Patched by Prafull + //Fix hanging problem + patch=0,EE,00431b70,word,00000000 +[/patches] --------------------------------------------- -Serial = SLES-54879 -Name = WWE SmackDown vs. Raw 2008 -Region = PAL-M5 +Serial = SLUS-21915 +Name = The Lord of the Rings: Aragorn's Quest +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54880 -Name = NBA 2K8 -Region = PAL-M5 +Serial = SLUS-21917 +Name = Dance Dance Revolution X2 (Bundle) +Region = NTSC-U --------------------------------------------- -Serial = SLES-54884 -Name = Alone in the Dark -Region = PAL-E -Compat = 3 +Serial = SLUS-21918 +Name = Pro Evolution Soccer 2010 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54885 -Name = Moto X Maniac -Region = PAL-E +Serial = SLUS-21919 +Name = Backyard Football 2010 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54891 -Name = Clever Kids - Pony World -Region = PAL-M6 +Serial = SLUS-21921 +Name = Ben 10: Alien Force - Vilgax Attacks +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54892 -Name = Phantasy Star Universe - Ambition of the Illuminus -Region = PAL-M3 +Serial = SLUS-21923 +Name = Dora the Explorer: Dora Saves the Crystal Kingdom +Region = NTSC-U --------------------------------------------- -Serial = SLES-54895 -Name = NBA Live 08 -Region = PAL-M3 +Serial = SLUS-21926 +Name = Ni Hao, Kai-Lan: Super Game Day +Region = NTSC-U --------------------------------------------- -Serial = SLES-54897 -Name = GrimGrimoire -Region = PAL-E +Serial = SLUS-21927 +Name = Sakura Wars: So Long, My Love [English - Disc 1] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54898 -Name = Metropolismania 2 -Region = PAL-E ---------------------------------------------- -Serial = SLES-54899 -Name = Bob the Builder -Region = PAL-M5 +Serial = SLUS-21928 +Name = Scooby-Doo! and the Spooky Swamp +Region = NTSC-U --------------------------------------------- -Serial = SLES-54903 -Name = The Sims 2 - Castaway -Region = PAL-M13 +Serial = SLUS-21929 +Name = Major League Baseball 2K10 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54904 -Name = The Simpsons Game -Region = PAL-M4 +Serial = SLUS-21930 +Name = Sakura Wars: So Long, My Love [Japanese - Disc 2] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54906 -Name = The Simpsons Game -Region = PAL-I-S +Serial = SLUS-21931 +Name = Toy Story 3 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54913 -Name = Pro Evolution Soccer 2008 -Region = PAL-E -Compat = 5 +Serial = SLUS-21932 +Name = NCAA Football 11 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54914 -Name = Pro Evolution Soccer 2008 -Region = PAL-I-P +Serial = SLUS-21933 +Name = Despicable Me +Region = NTSC-U --------------------------------------------- -Serial = SLES-54915 -Name = Sonic Riders - Zero Gravity -Region = PAL-M5 +Serial = SLUS-21934 +Name = Rapala Pro Bass Fishing 2010 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54918 -Name = Agent Hugo - Lemoon Twist -Region = PAL-M7 +Serial = SLUS-21935 +Name = Cabela's North American Adventures +Region = NTSC-U --------------------------------------------- -Serial = SLES-54929 -Name = Realplay Racing -Region = PAL-M5 +Serial = SLUS-21936 +Name = NBA 2K11 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54931 -Name = Looney Tunes - ACME Arsenal -Region = PAL-M5 +Serial = SLUS-21937 +Name = Madden NFL 11 +Region = NTSC-U +Compat = 5 +vuClampMode = 3 //shows the crowd in the back --------------------------------------------- -Serial = SLES-54937 -Name = RTL Biathon 2008 -Region = PAL-G +Serial = SLUS-21938 +Name = Ben 10 Ultimate Alien: Cosmic Destruction +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54939 -Name = RTL Winter Sports 2008 - The Ultimate Challenge -Region = PAL-G +Serial = SLUS-21939 +Name = WWE SmackDown vs. Raw 2011 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54942 -Name = Disney Princess - Enchanted Journey -Region = PAL-D-F-I +Serial = SLUS-21940 +Name = WWE All-Stars +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54945 -Name = Dragonball Z Budokai Tenkaichi 3 -Region = PAL-E +Serial = SLUS-21941 +Name = FIFA Soccer 11 +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-54946 -Name = Sega Superstars Tennis -Region = PAL-M5 +Serial = SLUS-21942 +Name = Pro Evolution Soccer 2011 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54949 -Name = Catz -Region = PAL-M6 +Serial = SLUS-21944 +Name = Dora's Big Birthday Adventure +Region = NTSC-U --------------------------------------------- -Serial = SLES-54952 -Name = Ben 10: Protector of Earth -Region = PAL-M5 +Serial = SLUS-21946 +Name = Madden NFL 12 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54953 -Name = Totally Spies! Totally Party -Region = PAL-Unk +Serial = SLUS-21948 +Name = Pro Evolution Soccer 2012 +Region = NTSC-U +Compat = 5 --------------------------------------------- -Serial = SLES-54955 -Name = Finkles World -Region = PAL-E +Serial = SLUS-21955 +Name = Pro Evolution Soccer 2013 +Region = NTSC-U --------------------------------------------- -Serial = SLES-54957 -Name = Cheggers Party Quiz -Region = PAL-M5 +Serial = SLUS-27029 +Name = Disney Sing It [Bundle] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54958 -Name = Alan Hansen's Sports Challenge -Region = PAL-M5 +Serial = SLUS-27030 +Name = High School Musical 3: Senior Year DANCE! [w/Mat] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54962 -Name = Guitar Hero III - Legends of Rock -Region = PAL-E +Serial = SLUS-27034 +Name = Disney Sing It! High School Musical 3: Senior Year +Region = NTSC-U --------------------------------------------- -Serial = SLES-54964 -Name = Tony Hawk's Proving Ground -Region = PAL-M4 +Serial = SLUS-28002 +Name = Red Faction [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54975 -Name = George Of The Jungle -Region = PAL-E -Compat = 4 +Serial = SLUS-28004 +Name = Klonoa 2 - Lunatea's Veil [Trade Demo] +Region = NTSC-U +eeClampMode = 3 //Objects needed appear in wrong places without it --------------------------------------------- -Serial = SLES-54981 -Name = Bob the Builder - Festival of Fun -Region = PAL-I-F-G +Serial = SLUS-28006 +Name = Burnout [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54986 -Name = Bratz - The Movie -Region = PAL-E-I +Serial = SLUS-28007 +Name = All-Star Baseball 2003 [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54988 -Name = Bratz - The Movie -Region = PAL-G +Serial = SLUS-28008 +Name = Sky Gunner [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54992 -Name = PDC World Championship Darts 2008 -Region = PAL-M6 +Serial = SLUS-28009 +Name = UFC - Throwdown [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54994 -Name = Pippa Funnell - Ranch Rescue -Region = PAL-M11 +Serial = SLUS-28010 +Name = Star Wars - Jedi Starfighter [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54995 -Name = Puzzle Quest - Challenge of the Warlords -Region = PAL-M5 +Serial = SLUS-28012 +Name = Tekken 4 [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54996 -Name = The Golden Compass -Region = PAL-M5 +Serial = SLUS-28013 +Name = Dual Hearts [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54997 -Name = Mercenaries 2 - World in Flames -Region = PAL-Unk -Compat = 5 -EETimingHack = 1 //flickery textures +Serial = SLUS-28014 +Name = Matt Hoffman's Pro BMX 2 [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-54998 -Name = Bratz - The Movie -Region = PAL-M5 +Serial = SLUS-28015 +Name = Gun Grave [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55000 -Name = Mercenaries 2 - World in Flames -Region = PAL-G -EETimingHack = 1 //flickery textures +Serial = SLUS-28016 +Name = Shinobi [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55001 -Name = Mercenaries 2 - World in Flames -Region = PAL-S -EETimingHack = 1 //flickery textures +Serial = SLUS-28019 +Name = Haven - Call of the King [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55002 -Name = Need for Speed - ProStreet -Region = PAL-E +Serial = SLUS-28020 +Name = Everquest Online Adventures [Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55003 -Name = Need for Speed - ProStreet -Region = PAL-F-G +Serial = SLUS-28021 +Name = Everquest Online Adventures [Beta Vol.2.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55005 -Name = Need for Speed - ProStreet -Region = PAL-M8 +Serial = SLUS-28023 +Name = dot Hack - Part 1 - Infection [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55007 -Name = Boogie -Region = PAL-E -Compat = 4 +Serial = SLUS-28025 +Name = Disaster Report [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55013 -Name = Iridium Runners -Region = PAL-M5 +Serial = SLUS-28026 +Name = Everquest Online Adventures [Beta Vol.3.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55016 -Name = DreamWorks Bee Movie Game -Region = PAL-M6 +Serial = SLUS-28027 +Name = Black & Bruised [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55017 -Name = Yu-Gi-Oh! GX - Tag Force Evolution -Region = PAL-M5 +Serial = SLUS-28029 +Name = High Heat - Major League Baseball 2004 [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55018 -Name = Shin Megami Tensei: Persona 3 -Region = PAL-E -Compat = 5 -VuClipFlagHack = 1 +Serial = SLUS-28031 +Name = Auto Modellista - Public Beta Volume 2.0 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55019 -Name = Ratchet & Clank - Size Matters -Region = PAL-M13 +Serial = SLUS-28032 +Name = dot Hack - Part 2 - Mutation [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55020 -Name = Die Simpsons - Das Spiel -Region = PAL-G +Serial = SLUS-28037 +Name = Kya - Dark Lineage [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55021 -Name = Pro Evolution Soccer 2008 -Region = PAL-F-G +Serial = SLUS-28039 +Name = Rogue Ops [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55024 -Name = Nickelodeon SpongeBob's Atlantis SquarePantis -Region = PAL-M4 +Serial = SLUS-28040 +Name = Transformers [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55032 -Name = Off Road -Region = PAL-M5 +Serial = SLUS-28043 +Name = Test Drive - Eve of Destruction [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55034 -Name = Asterix at the Olympic Games -Region = PAL-M5 +Serial = SLUS-28044 +Name = ChoroQ [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55039 -Name = Rock Band -Region = PAL-M5 +Serial = SLUS-28045 +Name = Shin Megami Tensei: Nocturne [Trade Demo] +Region = NTSC-U +eeRoundMode = 0 // Ladder glitch in "Assembly of Nihilo B11" level --------------------------------------------- -Serial = SLES-55050 -Name = MX vs. ATV - Untamed -Region = PAL-E +Serial = SLUS-28046 +Name = Guilty Gear Isuka [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55052 -Name = Alvin and the Chipmunks -Region = PAL-M5 +Serial = SLUS-28049 +Name = Shin Megami Tensei: Digital Devil Saga [Trade Demo] +Region = NTSC-U +EETimingHack = 1 --------------------------------------------- -Serial = SLES-55053 -Name = Jetix - Puzzle Buzzle -Region = PAL-M10 +Serial = SLUS-28050 +Name = Stella Deus: The Gate of Eternity [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55064 -Name = Luxor - Pharaoh's Challenge -Region = PAL-M5 +Serial = SLUS-28051 +Name = Samurai Western [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55069 -Name = 7 Wonders of the Ancient World -Region = PAL-M5 +Serial = SLUS-28053 +Name = Magna Carta [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55075 -Name = Speed racer -Region = PAL-M6 -Compat = 5 +Serial = SLUS-28054 +Name = Combat Elite - WWII Paratroopers [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55079 -Name = CID the Dummy -Region = PAL-M5 +Serial = SLUS-28056 +Name = State of Emergency 2 [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55081 -Name = Jackass - The Game -Region = PAL-E +Serial = SLUS-28061 +Name = Steambot Chronicles [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55090 -Name = Naruto - Uzumaki Chronicles 2 -Region = PAL-M5 -OPHFLagHack = 1 +Serial = SLUS-28062 +Name = Shin Megami Tensei: Digital Devil Saga 2 [Trade Demo] +Region = NTSC-U +EETimingHack = 1 --------------------------------------------- -Serial = SLES-55105 -Name = UEFA Euro 2008 - Austria-Switzerland -Region = PAL-M5 +Serial = SLUS-28063 +Name = Rule of Rose [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55108 -Name = Samurai Warriors 2 - Xtreme Legends -Region = PAL-E +Serial = SLUS-28064 +Name = Shin Megami Tensei - Devil Summoner [Trade Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55110 -Name = Odin Sphere -Region = PAL-M5 +Serial = SLUS-29001 +Name = ESPN Winter Games Snowboarding [Demo] +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-29003 +Name = Metal Gear Solid 2 - Sons of Liberty [Demo] +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-55123 -Name = Legend of Sayuki -Region = PAL-M4 +Serial = SLUS-29004 +Name = Unison & Dead or Alive 2 Hardcore [Demo] +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-29005 +Name = Red Faction [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55126 -Name = Artlist Collection - The Dog Island -Region = PAL-M6 +Serial = SLUS-29006 +Name = MX 2002 - featuring Ricky Carmichael [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55129 -Name = Jumper - Griffin's Story -Region = PAL-M5 +Serial = SLUS-29008 +Name = ESPN X Games Skateboarding [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55133 -Name = LEGO Indiana Jones - The Original Adventure -Region = PAL-M6 +Serial = SLUS-29009 +Name = Devil May Cry [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55135 -Name = LEGO Batman - The VideoGame -Region = PAL-M6 +Serial = SLUS-29010 +Name = Crash Bandicoot - The Wrath of Cortex [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55136 -Name = Let's Ride! Silver Buckle Stables -Region = PAL-M4 +Serial = SLUS-29011 +Name = WWF SmackDown! - Just Bring It [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55147 -Name = Silent Hill Origins -Region = PAL-M5 +Serial = SLUS-29012 +Name = Top Gun - Combat Zones [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55150 -Name = TNA Impact -Region = PAL-Unk -Compat = 5 -EETimingHack = 1 +Serial = SLUS-29013 +Name = Victorious Boxers - Ippo's Road to Glory [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55163 -Name = The Legend of Spyro - Dawn of the Dragon -Region = PAL-M6 +Serial = SLUS-29015 +Name = Dark Summit [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55169 -Name = Monster Lab -Region = PAL-M5 +Serial = SLUS-29016 +Name = ESPN International Winter Sports [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55174 -Name = NHL 08 -Region = PAL-R +Serial = SLUS-29017 +Name = Airblade [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55187 -Name = Disney-Pixar WALL-E -Region = PAL-D-F +Serial = SLUS-29019 +Name = High Heat - Major League Baseball 2003 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55191 -Name = Guitar Hero - Aerosmith -Region = PAL-E +Serial = SLUS-29020 +Name = Sky Gunner [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55197 -Name = Dancing Stage SuperNOVA 2 -Region = PAL-M5 +Serial = SLUS-29021 +Name = Aggressive Inline [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55198 -Name = Iron Man -Region = PAL-Unk -Compat = 5 +Serial = SLUS-29022 +Name = UFC - Throwdown [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55204 -Name = Crash - Mind Over Mutant -Region = PAL-M6 +Serial = SLUS-29025 +Name = R.A.D. - Robot Alchemic Drive [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55207 -Name = Alone in the Dark -Region = PAL-M4 +Serial = SLUS-29026 +Name = MX Superfly [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55208 -Name = The Incredible Hulk -Region = PAL-E-F-G +Serial = SLUS-29027 +Name = Red Faction II [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55215 -Name = Growlanser - Heritage of War -Region = PAL-E +Serial = SLUS-29029 +Name = Summoner 2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55216 -Name = Baroque -Region = PAL-E +Serial = SLUS-29030 +Name = Fire Blade [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55220 -Name = Summer Athletics -Region = PAL-M5 +Serial = SLUS-29032 +Name = Egg Mania - Eggstreme Madness [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55231 -Name = Fatal Fury - Battle Archives Volume 1 -Region = PAL-E +Serial = SLUS-29033 +Name = Dual Hearts [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55232 -Name = SNK Arcade Classics Vol. 1 -Region = PAL-E +Serial = SLUS-29034 +Name = Tekken 4 [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55233 -Name = World Heroes Anthology -Region = PAL-E +Serial = SLUS-29035 +Name = Eidos Demo Disc +Region = NTSC-U --------------------------------------------- -Serial = SLES-55237 -Name = Naruto - Ultimate Ninja 3 -Region = PAL-M5 +Serial = SLUS-29036 +Name = Scorpion King, The - Rise of the Akkadian [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55240 -Name = Pipe Mania -Region = PAL-M5 +Serial = SLUS-29037 +Name = Dance Dance Revolution Max [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55242 -Name = Yakuza 2 -Region = PAL-E +Serial = SLUS-29038 +Name = Haven - Call of the King [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55243 -Name = FIFA 09 -Region = PAL-E +Serial = SLUS-29040 +Name = Dr. Muto [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55244 -Name = FIFA 09 -Region = PAL-F-G +Serial = SLUS-29042 +Name = dot Hack - Part 1 - Infection [Ragular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55245 -Name = FIFA 09 -Region = PAL-M5 +Serial = SLUS-29044 +Name = Pride FC - Fighting Championships [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55247 -Name = FIFA 09 -Region = PAL-M5 +Serial = SLUS-29045 +Name = Black & Bruised [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55248 -Name = Harry Potter and the Half-Blood Prince -Region = PAL-M6 +Serial = SLUS-29047 +Name = Def Jam - Vendetta [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55249 -Name = Harry Potter and the Half-Blood Prince -Region = PAL-Unk +Serial = SLUS-29048 +Name = Splinter Cell [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55251 -Name = WWE SmackDown vs. Raw 2009 -Region = PAL-M5 +Serial = SLUS-29049 +Name = Warhammer 40,000 - Fire Warrior [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55253 -Name = NBA 2K5 -Region = PAL-M5 +Serial = SLUS-29050 +Name = Everquest Online Adventures [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55263 -Name = Nickelodeon Avatar - The Legend of Aang - Into the Inferno -Region = PAL-M7 +Serial = SLUS-29053 +Name = NBA Street Vol.2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55266 -Name = MotoGP 08 -Region = PAL-Unk -Compat = 5 +Serial = SLUS-29054 +Name = Splashdown - Rides Gone Wild [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55274 -Name = Diabolik - The Original Sin -Region = PAL-M6 +Serial = SLUS-29055 +Name = dot Hack - Part 2 - Mutation [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55280 -Name = King of Fighters '98 - Ultimate Match -Region = PAL-E +Serial = SLUS-29056 +Name = Alter Echo [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55292 -Name = Samurai Shodown Anthology -Region = PAL-E +Serial = SLUS-29057 +Name = Sphinx and the Shadow of Set [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55328 -Name = The Millenium European Paintball Series - Championship Paintball 2009 -Region = PAL-E +Serial = SLUS-29058 +Name = Soul Calibur II [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55329 -Name = Shrek's Carnival Craze -Region = PAL-Unk +Serial = SLUS-29059 +Name = Hunter the Reckoning - Wayward [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55331 -Name = Cabela's Dangerous Adventures -Region = PAL-E +Serial = SLUS-29060 +Name = Gladius [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55341 -Name = Hasbro Family Game Night -Region = PAL-G +Serial = SLUS-29061 +Name = Freaky Flyers [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55342 -Name = Hasbro Family Game Night -Region = PAL-Unk +Serial = SLUS-29063 +Name = Everquest Online Adventures - Frontiers [Public Beta Ver.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55344 -Name = Rock Band - Song Back 1 -Region = PAL-M5 +Serial = SLUS-29065 +Name = dot Hack - Part 3 - Outbreak [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55345 -Name = James Bond: Quantum of Solace -Region = PAL-Unk +Serial = SLUS-29067 +Name = Tak and the Power of Juju [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55347 -Name = Dragonball Z Infinite World -Region = PAL-E -Compat = 5 +Serial = SLUS-29068 +Name = Crash Nitro Kart [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55349 -Name = Need For Speed - Undercover -Region = PAL-Unk +Serial = SLUS-29069 +Name = Prince of Persia - The Sands of Time [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55350 -Name = Need for Speed - Undercover -Region = PAL-F-G +Serial = SLUS-29070 +Name = XIII [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55352 -Name = Need For Speed - Undercover -Region = PAL-Unk -Compat = 5 +Serial = SLUS-29071 +Name = Namco Transmission Demo Disc v1.03 [Regular Release] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55354 -Name = Shin Megami Tensei: Persona 3 FES -Region = PAL-E -VuClipFlagHack = 1 +Serial = SLUS-29073 +Name = Need for Speed - Underground [Demo] +Region = NTSC-U +EETimingHack = 1 //broken textures --------------------------------------------- -Serial = SLES-55355 -Name = Guitar Hero - World Tour -Region = PAL-M5 +Serial = SLUS-29074 +Name = Dance Dance Revolution Max 2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55365 -Name = Agent Hugo - Hula Holiday -Region = PAL-M7 +Serial = SLUS-29077 +Name = I-Ninja [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55367 -Name = Call of Duty - World at War - Final Fronts -Region = PAL-M4 +Serial = SLUS-29079 +Name = NCAA March Madness 2004 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55369 -Name = Call of Duty - World at War - Final Fronts -Region = PAL-G +Serial = SLUS-29080 +Name = Whiplash [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55371 -Name = Barbie Horse Adventures - Riding Camp -Region = PAL-M6 +Serial = SLUS-29081 +Name = Metal Arms - Glitch in the System [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55373 -Name = The King of Fighters Collection: The Orochi Saga -Region = PAL-Unk +Serial = SLUS-29082 +Name = Beyond Good and Evil [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55374 -Name = DreamWorks Madagascar 2 - Escape 2 Africa -Region = PAL-M6 +Serial = SLUS-29083 +Name = Maximo vs. The Army of Zin [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55376 -Name = Nickelodeon Tak and the Guardians of Gross -Region = PAL-E-G +Serial = SLUS-29084 +Name = dot Hack - Part 4 - Quarantine [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55380 -Name = Sonic Unleashed -Region = PAL-M5 -Compat = 5 +Serial = SLUS-29086 +Name = FIFA Soccer 2004 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55382 -Name = Warriors Orochi 2 -Region = PAL-E -Compat = 5 +Serial = SLUS-29087 +Name = Square Enix Sampler Disc Vol.1 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55384 -Name = Warriors Orochi 2 -Region = PAL-G +Serial = SLUS-29088 +Name = Champions of Norrath - Realms of EverQuest [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55392 -Name = Disne Sing It! -Region = PAL-M6 +Serial = SLUS-29089 +Name = Resident Evil Outbreak [Public Beta 1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55394 -Name = Disney TH!NK Fast -Region = PAL-E +Serial = SLUS-29091 +Name = MX Unleashed [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55395 -Name = Disney TH!NK Fast -Region = PAL-D-F-G +Serial = SLUS-29093 +Name = NFL Street [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55398 -Name = Disney High School Musical 3 - Senior Year Dance! -Region = PAL-M6 +Serial = SLUS-29095 +Name = James Bond 007 - Everything or Nothing [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55405 -Name = Pro Evolution Soccer 2009 -Region = PAL-F-G +Serial = SLUS-29096 +Name = Final Night 2004 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55406 -Name = Pro Evolution Soccer 2009 -Region = PAL-Unk +Serial = SLUS-29098 +Name = Square Enix Sampler Disc Vol.2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55409 -Name = TT SuperBikes - Legends -Region = PAL-M5 +Serial = SLUS-29100 +Name = Ribbit King [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55430 -Name = Disney Bolt -Region = PAL-D-F-G +Serial = SLUS-29101 +Name = Crash Twinsanity & Spyro - A Hero's Tail [Demo] +Region = NTSC-U +XgKickHack = 1 //Fixes bad Geometry --------------------------------------------- -Serial = SLES-55431 -Name = Disney Vol't -Region = PAL-Unk +Serial = SLUS-29104 +Name = Galactic Wrestling - Featuring Ultimate Muscle [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55440 -Name = Ben 10: Alien Force -Region = PAL-M5 +Serial = SLUS-29107 +Name = Transformers [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55442 -Name = Tomb Raider Underworld -Region = PAL-Unk // Multiple languages -Compat = 5 -[patches] - comment=- This gamedisc supports multiple languages. - comment=- Language selection is done through the BIOS configuration. - comment=- Implementation requires Full boot - "Boot CDVD (full)". -[/patches] +Serial = SLUS-29108 +Name = Def Jam - Fight For NY [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55443 -Name = Mana Khemia - Alchemists of Al-Revis -Region = PAL-E -Compat = 5 -DMABusyHack = 1 +Serial = SLUS-29110 +Name = Monster Hunter [Public Beta Vol.1 - Ver.1.01] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55444 -Name = Ar tonelico II: Melody of Metafalica -Region = PAL-Unk -Compat = 5 -eeRoundMode = 0 // Fixes "Fall through floor" bug when aproaching chests +Serial = SLUS-29111 +Name = Asterix & Obilex XXL - Kick Buttix [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55448 -Name = Indiana Jones and the Staff of Kings -Region = PAL-M5 +Serial = SLUS-29113 +Name = Burnout 3 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55453 -Name = Singstar Queen -Region = PAL-E +Serial = SLUS-29116 +Name = WWE SmackDown! vs. RAW [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55457 -Name = AC/DC LIVE: Rock Band Track Pack -Region = PAL-Unk +Serial = SLUS-29117 +Name = Battlefield 2 - Modern Combat [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55459 -Name = Jelly Belly: Ballistic Beans -Region = PAL-Unk +Serial = SLUS-29118 +Name = Need for Speed - Underground 2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55467 -Name = Trivial Pursuit -Region = PAL-M5 +Serial = SLUS-29123 +Name = Ghost in the Shell - Stand Alone Complex [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55470 -Name = Coraline -Region = PAL-E -Compat = 3 +Serial = SLUS-29124 +Name = Fight Club [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55472 -Name = Guitar Hero - Metalica -Region = PAL-M5 +Serial = SLUS-29125 +Name = Konami Preview Disc +Region = NTSC-U +--------------------------------------------- +Serial = SLUS-29126 +Name = Champions - Return to Arms [Demo] // aka "Champions of Norrath 2 [Demo]" +Region = NTSC-U +Compat = 4 --------------------------------------------- -Serial = SLES-55474 -Name = Shin Megami Tensei: Persona 4 -Region = PAL-E -VuClipFlagHack = 1 +Serial = SLUS-29129 +Name = 25 to Life [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55476 -Name = Scooby-Doo! First Frights -Region = PAL-M5 +Serial = SLUS-29130 +Name = Crash 'N' Burn [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55482 -Name = Naruto Shipuuden - Ultimate Ninja 4 -Region = PAL-G-I-S +Serial = SLUS-29131 +Name = Project Snowblind [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55486 -Name = DreamWorks Monsters vs. Aliens -Region = PAL-M7 +Serial = SLUS-29132 +Name = S.L.A.I. - Steel Lancer Arena International - Phantom Crash [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55487 -Name = Ice Age 3 - Dawn of the Dinosaurs -Region = PAL-M6 +Serial = SLUS-29134 +Name = Namco Transmission Demo Disc Vol.2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55492 -Name = SBK 09 - Superbike World Championship -Region = PAL-M5 +Serial = SLUS-29137 +Name = Mercenaries [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55494 -Name = X-Men Origins - Wolverine -Region = PAL-Unk -FpuCompareHack = 1 //flickering objects, sound loop +Serial = SLUS-29138 +Name = Punisher [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55495 -Name = X-Men Origins - Wolverine -Region = PAL-G-F-S -FpuCompareHack = 1 //flickering objects, sound loop +Serial = SLUS-29139 +Name = Shadow of Rome [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55496 -Name = Secret Agent Clank -Region = PAL-Unk +Serial = SLUS-29140 +Name = MX vs. ATV Unleashed [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55500 -Name = Disney G-Force -Region = PAL-G-I +Serial = SLUS-29141 +Name = NBA Street v3 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55509 -Name = Music Maker - Rockstar -Region = PAL-E -Compat = 5 +Serial = SLUS-29145 +Name = Final Night - Round 2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55511 -Name = MTV Pimp My Ride - Street Racing -Region = PAL-M5 +Serial = SLUS-29148 +Name = Incredible Hulk, The - Ultimate Destruction [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55520 -Name = Transformers - Revenge of the Fallen -Region = PAL-M5 +Serial = SLUS-29149 +Name = Flipnic - Ultimate Pinball [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55525 -Name = Disney-Pixar Oben -Region = PAL-G +Serial = SLUS-29150 +Name = Destroy All Humans! [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55533 -Name = Guitar Hero 5 -Region = PAL-M5 +Serial = SLUS-29152 +Name = Battlefield 2 - Modern Combat [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55537 -Name = G.I. Joe - The Rise of Cobra -Region = PAL-M8 +Serial = SLUS-29153 +Name = Burnout Revenge [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55542 -Name = Disney Sing It - Pop Hits -Region = PAL-M6 +Serial = SLUS-29154 +Name = NHL '06 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55545 -Name = WWE SmackDown vs. Raw 2010 -Region = PAL-M5 +Serial = SLUS-29155 +Name = Need for Speed - Most Wanted [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55546 -Name = The Secret Saturdays - Beasts of the 5th Sun -Region = PAL-M5 +Serial = SLUS-29156 +Name = Marvel Nemesis - Rise of the Imperfects [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55565 -Name = Teenage Mutant Ninja Turtles - Smash-Up -Region = PAL-M5 +Serial = SLUS-29157 +Name = Dragon Quest VIII - Journey of the Cursed King [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55569 -Name = Silent Hill - Shattered Memories -Region = PAL-M5 +Serial = SLUS-29159 +Name = One Piece - Grand Battle [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55571 -Name = Ghostbusters -Region = PAL-E -Compat = 4 +Serial = SLUS-29160 +Name = FIFA '06 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55572 -Name = Marvel Super Hero Squad -Region = PAL-M6 +Serial = SLUS-29161 +Name = SSX On Tour [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55573 -Name = MotorStorm Arctic Edge -Region = PAL-Unk -OPHFLagHack = 1 +Serial = SLUS-29162 +Name = NBA Live '06 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55574 -Name = the Lord of the Rings - Aragorn's Quest -Region = PAL-M6 +Serial = SLUS-29163 +Name = NCAA March Madness '06 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55578 -Name = Band Hero -Region = PAL-M5 +Serial = SLUS-29164 +Name = Star Wars Battlefront II [Online Public Beta] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55579 -Name = Bakugan: Battle Brawlers -Region = PAL-M7 +Serial = SLUS-29167 +Name = James Bond 007 - From Russia with Love, Need for Speed - Most Wanted, SSX World Tour [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55582 -Name = FIFA 10 -Region = PAL-F-G +Serial = SLUS-29168 +Name = James Bond 007 - From Russia with Love [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55584 -Name = FIFA 10 -Region = PAL-M5 +Serial = SLUS-29169 +Name = Resident Evil 4 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55585 -Name = FIFA 10 -Region = PAL-E +Serial = SLUS-29170 +Name = Total Overdose - A Gunslinger's Tale in Mexico [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55588 -Name = Pro Evolution Soccer 2010 -Region = PAL-F-G +Serial = SLUS-29171 +Name = Final Fantasy XII [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55589 -Name = Pro Evolution Soccer 2010 -Region = PAL-I-P-S +Serial = SLUS-29173 +Name = Sims 2, The [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55592 -Name = Ben 10: Alien Force - Vilgax Attacks -Region = PAL-M5 +Serial = SLUS-29174 +Name = Namco Transmission Demo Disc Vol.3.1 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55593 -Name = Astro Boy - The Video Game -Region = PAL-M5 +Serial = SLUS-29175 +Name = Namco Transmission Demo Disc Vol.3.2 +Region = NTSC-U --------------------------------------------- -Serial = SLES-55605 -Name = Naruto Shipuuden - Ultimate Ninja 5 -Region = PAL-M5 +Serial = SLUS-29178 +Name = TOCA Race Driver 3 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55609 -Name = Scooby-Doo! and the Spooky Swamp -Region = PAL-M5 +Serial = SLUS-29179 +Name = Sonic Riders [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55622 -Name = Disney-Pixar Toy Story 3 -Region = PAL-M6 +Serial = SLUS-29180 +Name = Black [Demo] +Region = NTSC-U +vuClampMode = 0 --------------------------------------------- -Serial = SLES-55635 -Name = WWE SmackDown vs. Raw 2011 -Region = PAL-M4 +Serial = SLUS-29185 +Name = Driver - Parallel Lines [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55636 -Name = Pro Evolution Soccer 2011 -Region = PAL-Unk +Serial = SLUS-29188 +Name = Steambot Chronicles [Regular Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55637 -Name = Pro Evolution Soccer 2011 -Region = PAL-F-G +Serial = SLUS-29189 +Name = FIFA World Cup - Germany 2006 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55638 -Name = Pro Evolution Soccer 2011 -Region = PAL-M4 +Serial = SLUS-29191 +Name = Hitman - Blood Money & Urban Chaos [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55644 -Name = FIFA 11 -Region = PAL-M5 +Serial = SLUS-29192 +Name = Test Drive Unlimited [Public Beta Vol.1.0] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55648 -Name = WWE All-Stars -Region = PAL-M5 -Compat = 5 +Serial = SLUS-29193 +Name = Need for Speed - Carbon [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-55665 -Name = FIFA 13 -Region = PAL-Unk +Serial = SLUS-29194 +Name = FIFA '07 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-82001 -Name = Summoner -Region = PAL-E +Serial = SLUS-29195 +Name = Yakuza [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-82005 -Name = Summoner -Region = PAL-Unk -Compat = 4 +Serial = SLUS-29196 +Name = Destroy All Humans! 2 [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-82009 -Name = Metal Gear Solid 2 - Substance -Region = PAL-M5 -Compat = 1 +Serial = SLUS-29197 +Name = Flushed Away [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-82010 -Name = Metal Gear Solid 2, Document of -Region = PAL-Unk -Compat = 4 +Serial = SLUS-29198 +Name = Guitar Hero II [Demo] +Region = NTSC-U --------------------------------------------- -Serial = SLES-82011 -Name = Devil May Cry 2 [Dante Disc] -Region = PAL-E +Serial = SLUS-97657 +Name = MLB 11: The Show +Region = NTSC-U Compat = 5 --------------------------------------------- -Serial = SLES-82012 -Name = Devil May Cry 2 [Lucia Disc] -Region = PAL-E -Compat = 5 +Serial = TCES-51613 +Name = This Is Football 2004 [Beta] +Region = PAL-E-S --------------------------------------------- -Serial = SLES-82013 -Name = Metal Gear Solid 3 - Snake Eater -Region = PAL-E-F +Serial = TCES-51904 +Name = SOCOM II - U.S. Navy SEALs [Beta] +Region = PAL-M5 Compat = 5 +EETimingHack = 1 +VIF1StallHack = 1 //HUD --------------------------------------------- -Serial = SLES-82018 -Name = Cy Girls -Region = PAL-Unk ---------------------------------------------- -Serial = SLES-82020 -Name = Cy Girls [Disc 1] -Region = PAL-E-G-I +Serial = TCPS-10058 +Name = Densha de Go! Shinkansen [with Controller] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82021 -Name = Cy Girls [Disc 2] -Region = PAL-E-G-I +Serial = TCPS-10068 +Name = Densha de Go! Ryojo-hen [with Controller] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82024 -Name = Metal Gear Solid 3 - Snake Eater -Region = PAL-I +Serial = TCPS-10074 +Name = Space Invaders 25th Anniversary Bundle +Region = NTSC-J --------------------------------------------- -Serial = SLES-82026 -Name = Metal Gear Solid 3 - Snake Eater -Region = PAL-Unk +Serial = TCPS-10084 +Name = Zero Shinkikan Josentoki +Region = NTSC-J --------------------------------------------- -Serial = SLES-82028 -Name = Star Ocean 3 - Till the End of Time [Disc1of2] -Region = PAL-E +Serial = TCPS-10085 +Name = Densha de Go! Final [Limited Edition] +Region = NTSC-J Compat = 5 -VuAddSubHack = 1 --------------------------------------------- -Serial = SLES-82029 -Name = Star Ocean 3 - Till the End of Time [Disc2of2] -Region = PAL-E -Compat = 5 -VuAddSubHack = 1 +Serial = TCPS-10094 +Name = Ys III - Wanderer from Ys +Region = NTSC-J --------------------------------------------- -Serial = SLES-82030 -Name = Shadow Hearts - Covenant [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10106 +Name = Ys IV - Mask of the Sun - A New Theory +Region = NTSC-J --------------------------------------------- -Serial = SLES-82031 -Name = Shadow Hearts - Covenant [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10107 +Name = Giga Wing Generations +Region = NTSC-J --------------------------------------------- -Serial = SLES-82032 -Name = Metal Gear Solid 3 - Snake Eater -Region = PAL-G +Serial = TCPS-10109 +Name = Ys III - Wanderer from Ys [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82034 -Name = Xenosaga Episode II [Disc1of2] -Region = PAL-E +Serial = TCPS-10111 +Name = Eremental Gerad +Region = NTSC-J +XgKickHack = 1 //Fixes chocolate coloured characters --------------------------------------------- -Serial = SLES-82035 -Name = Xenosaga Episode II [Disc2of2] -Region = PAL-E +Serial = TCPS-10113 +Name = Mushihime-sama +Region = NTSC-J --------------------------------------------- -Serial = SLES-82036 -Name = Armored Core - Nexus [Evolution Disc] -Region = PAL-M5 +Serial = TCPS-10114 +Name = Matantei Loki Ragnarok Mayoukaku +Region = NTSC-J --------------------------------------------- -Serial = SLES-82037 -Name = Armored Core - Nexus [Revolution Disc] -Region = PAL-M5 +Serial = TCPS-10117 +Name = Mushihime-sama [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82038 -Name = Onimusha - Dawn of Dreams [Disc1] -Region = PAL-Unk -Compat = 5 -[patches = 812C5A96] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 -[/patches] +Serial = TCPS-10123 +Name = Langrisser III +Region = NTSC-J --------------------------------------------- -Serial = SLES-82039 -Name = Onimusha - Dawn of Dreams [Disc2] -Region = PAL-Unk -Compat = 5 -[patches = 812C5A96] - comment= patch by Shadow Lady - patch=0,EE,00104170,word,00000000 -[/patches] +Serial = TCPS-10125 +Name = Raiden III +Region = NTSC-J --------------------------------------------- -Serial = SLES-82042 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10128 +Name = Ultimate Pro Pinball +Region = NTSC-J --------------------------------------------- -Serial = SLES-82043 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10130 +Name = Homura +Region = NTSC-J --------------------------------------------- -Serial = SLES-82044 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10131 +Name = Ibara +Region = NTSC-J --------------------------------------------- -Serial = SLES-82045 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10132 +Name = Psychic Force Complete +Region = NTSC-J --------------------------------------------- -Serial = SLES-82046 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10133 +Name = Psychic Force Complete [with Wong Figure] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82047 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10134 +Name = Psychic Force Complete [with Emilio Figure] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82048 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10135 +Name = Psychic Force Complete [with Wendy Figure] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82049 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10136 +Name = Psychic Force Complete [with 3 Figures] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82050 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10147 +Name = Zero Shikikan Josentoki Ni +Region = NTSC-J --------------------------------------------- -Serial = SLES-82051 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10148 +Name = Zero Shikikan Josentoki Ni [Limited Edition] +Region = NTSC-J --------------------------------------------- -Serial = SLES-82052 -Name = Metal Gear Solid 3 - Subsistance [Disc1of2] -Region = PAL-Unk +Serial = TCPS-10152 +Name = Rozen Maiden - Duel Valzer +Region = NTSC-J --------------------------------------------- -Serial = SLES-82053 -Name = Metal Gear Solid 3 - Subsistance [Disc2of2] -Region = PAL-Unk +Serial = TCPS-10154 +Name = Ys V - Lost Kefin - Kingdom of Sand +Region = NTSC-J --------------------------------------------- -Serial = TCES-51613 -Name = This Is Football 2004 [Beta] -Region = PAL-E-S +Serial = TCPS-10159 +Name = Suzuki TT Super Bikes - Real Road Racing +Region = NTSC-J --------------------------------------------- -Serial = TCES-51904 -Name = SOCOM II - U.S. Navy SEALs [Beta] -Region = PAL-M5 -Compat = 5 -EETimingHack = 1 -VIF1StallHack = 1 //HUD +Serial = TCPS-10166 +Name = Wizardry Gaiden +Region = NTSC-J +--------------------------------------------- +Serial = TCPS-10168 +Name = Mushihime-sama [Taito The Best] +Region = NTSC-J +--------------------------------------------- +Serial = TCPS-10172 +Name = Homura [Taito the Best] +Region = NTSC-J --------------------------------------------- Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ar_SA/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ar_SA/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ar_SA/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ar_SA/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ca_ES/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ca_ES/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ca_ES/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ca_ES/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/cs_CZ/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/cs_CZ/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/cs_CZ/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/cs_CZ/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/de_DE/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/de_DE/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/de_DE/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/de_DE/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/es_ES/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/es_ES/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/es_ES/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/es_ES/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/fi_FI/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/fi_FI/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/fi_FI/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/fi_FI/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/fr_FR/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/fr_FR/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/fr_FR/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/fr_FR/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/hr_HR/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/hr_HR/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/hr_HR/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/hr_HR/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/hu_HU/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/hu_HU/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/hu_HU/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/hu_HU/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/id_ID/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/id_ID/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/id_ID/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/id_ID/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/it_IT/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/it_IT/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/it_IT/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/it_IT/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ja_JP/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ja_JP/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ja_JP/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ja_JP/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ko_KR/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ko_KR/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ko_KR/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ko_KR/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ms_MY/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ms_MY/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ms_MY/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ms_MY/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/nb_NO/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/nb_NO/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/nb_NO/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/nb_NO/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/pl_PL/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/pl_PL/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/pl_PL/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/pl_PL/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/pt_BR/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/pt_BR/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/pt_BR/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/pt_BR/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ru_RU/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ru_RU/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/ru_RU/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/ru_RU/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/sv_SE/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/sv_SE/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/sv_SE/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/sv_SE/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/th_TH/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/th_TH/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/th_TH/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/th_TH/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/tr_TR/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/tr_TR/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/tr_TR/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/tr_TR/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/zh_CN/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/zh_CN/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/zh_CN/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/zh_CN/pcsx2_Main.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/zh_TW/pcsx2_Iconized.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/zh_TW/pcsx2_Iconized.mo differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/bin/Langs/zh_TW/pcsx2_Main.mo and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/bin/Langs/zh_TW/pcsx2_Main.mo differ diff -Nru pcsx2-1.3.1+dfsg/bin/launch_pcsx2_linux.sh pcsx2-1.4.0/bin/launch_pcsx2_linux.sh --- pcsx2-1.3.1+dfsg/bin/launch_pcsx2_linux.sh 2014-09-27 09:49:13.000000000 +0000 +++ pcsx2-1.4.0/bin/launch_pcsx2_linux.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -#!/bin/sh -e - -# PCSX2 - PS2 Emulator for PCs -# Copyright (C) 2002-2011 PCSX2 Dev Team -# -# PCSX2 is free software: you can redistribute it and/or modify it under the terms -# of the GNU Lesser General Public License as published by the Free Software Found- -# ation, either version 3 of the License, or (at your option) any later version. -# -# PCSX2 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 PCSX2. -# If not, see . - -# This script is a small wrapper to the PCSX2 exectuable. The purpose is to -# 1/ launch PCSX2 from the same repository every times. -# Rationale: There is no guarantee on the directory when PCSX2 is launched from a shortcut. -# This behavior trigger the first time wizards everytime... -# 2/ Change LD_LIBRARY_PATH to uses 3rdparty library -# Rationale: It is nearly impossible to have the same library version on all systems. So the -# easiest solution it to ship library used during the build. - -current_script=$0 - -# We are already in the good directory. Allow to use "bash launch_pcsx2_linux.sh" -if [ $current_script = "launch_pcsx2_linux.sh" ] -then - if [ -e "./launch_pcsx2_linux.sh" ] - then - current_script="./launch_pcsx2_linux.sh" - fi -fi - -[ $current_script = "launch_pcsx2_linux.sh" ] && \ - echo "Error the script was either directly 'called' (ie launch_pcsx2_linux.sh)" && \ - echo "Use either /absolute_path/launch_pcsx2_linux.sh or ./relative_path/launch_pcsx2_linux.sh" && exit 1; - -# Note: sh (dash on debian) does not support pushd, popd... -# Save current directory -PWD_old=$PWD - -# Go to the script directory -cd `dirname $current_script` - -# Allow to ship .so library with the build to avoid version issue -if [ -e 3rdPartyLibs ] -then - if [ -z $LD_LIBRARY_PATH ] - then - OLD_LD_LIBRARY_PATH="" - export LD_LIBRARY_PATH="./3rdPartyLibs" - else - OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" - export LD_LIBRARY_PATH="./3rdPartyLibs:$LD_LIBRARY_PATH" - fi -fi -# openSUSE don't follow FHS !!!! -bad_wx_path="/usr/lib/wx-2.8-stl" -if [ -e "$bad_wx_path" ] -then - if [ -z $LD_LIBRARY_PATH ] - then - OLD_LD_LIBRARY_PATH="" - export LD_LIBRARY_PATH="$bad_wx_path" - else - OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" - export LD_LIBRARY_PATH="$bad_wx_path:$LD_LIBRARY_PATH" - fi -fi - -# Test plugin depencencies -if [ -x `which ldd` ] -then - for plugin in `find plugins -iname "lib*.so"` - do - if [ `ldd $plugin | grep -c found` != 0 ] - then - echo "ERROR the plugin ($plugin) miss some dependencies" - echo " `ldd $plugin | grep found`" - echo "" - fi - done -fi - -# Launch PCSX2 -if [ -x "pcsx2" ] -then - ./pcsx2 $@ -elif [ -x "pcsx2-dev" ] -then - ./pcsx2-dev $@ -elif [ -x "pcsx2-dbg" ] -then - ./pcsx2-dbg $@ -else - echo "Error PCSX2 not found" - echo "Maybe the script was directly 'called'" - echo "Use either /absolute_path/launch_pcsx2_linux.sh or ./relative_path/launch_pcsx2_linux.sh" - exit 1 -fi - -# Be a good citizen. Restore the shell context -cd $PWD_old -if [ -z $OLD_LD_LIBRARY_PATH ] -then - unset LD_LIBRARY_PATH -else - export LD_LIBRARY_PATH="$OLD_LD_LIBRARY_PATH" -fi - diff -Nru pcsx2-1.3.1+dfsg/bin/PCSX2_keys.ini.default pcsx2-1.4.0/bin/PCSX2_keys.ini.default --- pcsx2-1.3.1+dfsg/bin/PCSX2_keys.ini.default 2014-12-30 20:22:17.000000000 +0000 +++ pcsx2-1.4.0/bin/PCSX2_keys.ini.default 2016-01-05 17:28:08.000000000 +0000 @@ -1,80 +1,80 @@ -# IMPORTANT: PCSX2 only looks for PCSX2_keys.ini at the inis folder. -# You should first copy PCSX2_keys.ini.default to the inis folder, then -# rename it to PCSX2_keys.ini, and then edit it. - -# Important: keys which are defined at the input plugin (LilyPad) will override -# shortcuts at this file. - -# IMPORTANT: GSdx has fixed shortcuts. Make sure your shortcuts don't conflict. -# Also, they will affect GSdx also when alt/ctrl/shift are pressed, so it's -# best to completely avoid them at this file. GSdx uses: -# F5 - Deinterlace modes -# F7 - Internal "TV-like" shaders -# PAGE_UP - FXAA antialiasing (HW and SW) -# DELETE - Software Antialiasing (AA1) -# HOME - FX shader -# INSERT - Software mipmapping - -# Note: some "normal" keys may not display correctly at the log console message -# but still work correctly (e.g. ']'). - -# ----------------------------------------------------------------------------- -# The KB shortcuts can be a normal key (e.g. f or ] etc) or a combination of -# ALT/SHIFT/CTRL and a key, separated with a - (e.g. m or alt-m or alt-ctrl-m). -# Number (key) pad names start with KP_ (e.g. KP_0 to KP_9, KP_ADD, etc) - -# List of special key names (beyond KP_0 to KP_9 and normal keys): -# DEL DELETE BACK INS INSERT ENTER RETURN PGUP PGDN LEFT RIGHT UP DOWN HOME END -# SPACE TAB ESC ESCAPE CANCEL CLEAR MENU PAUSE CAPITAL SELECT PRINT EXECUTE -# SNAPSHOT HELP ADD SEPARATOR SUBTRACT DECIMAL DIVIDE NUM_LOCK SCROLL_LOCK -# PAGEUP PAGEDOWN KP_SPACE KP_TAB KP_ENTER KP_HOME KP_LEFT KP_UP KP_RIGHT -# KP_DOWN KP_PRIOR KP_PAGEUP KP_NEXT KP_PAGEDOWN KP_END KP_BEGIN KP_INSERT -# KP_DELETE KP_EQUAL KP_MULTIPLY KP_ADD KP_SEPARATOR KP_SUBTRACT KP_DECIMAL -# KP_DIVIDE WINDOWS_LEFT WINDOWS_RIGHT WINDOWS_MENU COMMAND - -# save state: freeze is save state, defrost is load state. -States_FreezeCurrentSlot = F1 -States_DefrostCurrentSlot = F3 -States_DefrostCurrentSlotBackup = Shift-F3 -States_CycleSlotForward = F2 -States_CycleSlotBackward = Shift-F2 - -Frameskip_Toggle = Shift-F4 -Framelimiter_TurboToggle = TAB -Framelimiter_SlomoToggle = Shift-TAB -Framelimiter_MasterToggle = F4 - -FullscreenToggle = Alt-ENTER - -Sys_Suspend = ESC - -# PCSX2 binds F8, shift-F8 and ctrl-shift-f8 to Sys_TakeSnapshot. -# This ini file supports only one key per function, so if you override -# it then it will override all 3 original bindings (and show some warnings). -# Sys_TakeSnapshot = F8 - -# Hardware/software rendering toggle -Sys_RenderswitchToggle = F9 - -Sys_LoggingToggle = F10 -Sys_FreezeGS = F11 -Sys_RecordingToggle = F12 - -GSwindow_CycleAspectRatio = F6 - -# Whole picture zoom in/out -GSwindow_ZoomIn = Ctrl-KP_ADD -GSwindow_ZoomOut = Ctrl-KP_SUBTRACT -GSwindow_ZoomToggle = Ctrl-KP_MULTIPLY - -# Vertical stretch/squash -GSwindow_ZoomInY = Alt-Ctrl-KP_ADD -GSwindow_ZoomOutY = Alt-Ctrl-KP_SUBTRACT -GSwindow_ZoomResetY = Alt-Ctrl-KP_MULTIPLY - -# Move the whole image -GSwindow_OffsetYminus = Alt-Ctrl-UP -GSwindow_OffsetYplus = Alt-Ctrl-DOWN -GSwindow_OffsetXminus = Alt-Ctrl-LEFT -GSwindow_OffsetXplus = Alt-Ctrl-RIGHT -GSwindow_OffsetReset = Alt-Ctrl-KP_DIVIDE +# IMPORTANT: PCSX2 only looks for PCSX2_keys.ini at the inis folder. +# You should first copy PCSX2_keys.ini.default to the inis folder, then +# rename it to PCSX2_keys.ini, and then edit it. + +# Important: keys which are defined at the input plugin (LilyPad) will override +# shortcuts at this file. + +# IMPORTANT: GSdx has fixed shortcuts. Make sure your shortcuts don't conflict. +# Also, they will affect GSdx also when alt/ctrl/shift are pressed, so it's +# best to completely avoid them at this file. GSdx uses: +# F5 - Deinterlace modes +# F7 - Internal "TV-like" shaders +# PAGE_UP - FXAA antialiasing (HW and SW) +# DELETE - Software Antialiasing (AA1) +# HOME - FX shader +# INSERT - Software mipmapping + +# ----------------------------------------------------------------------------- +# The KB shortcuts can be a normal key (e.g. f or ] etc) or a combination of +# ALT/SHIFT/CTRL and a key, separated with a - or + (e.g. m or alt+ctrl+m or +# alt-F12). Number (key) pad names start with KP_ (e.g. KP_0 to KP_9, KP_ADD). + +# Note: If the Dev console source is enabled, keypresses (including with Alt +# etc) will be printed to the console and could be copied to PCSX2_keys.ini . + +# List of special key names (beyond KP_0 to KP_9 and normal keys): +# DEL DELETE BACK INS INSERT ENTER RETURN PGUP PGDN LEFT RIGHT UP DOWN HOME END +# SPACE TAB ESC ESCAPE CANCEL CLEAR MENU PAUSE CAPITAL SELECT PRINT EXECUTE +# SNAPSHOT HELP ADD SEPARATOR SUBTRACT DECIMAL DIVIDE NUM_LOCK SCROLL_LOCK +# PAGEUP PAGEDOWN KP_SPACE KP_TAB KP_ENTER KP_HOME KP_LEFT KP_UP KP_RIGHT +# KP_DOWN KP_PRIOR KP_PAGEUP KP_NEXT KP_PAGEDOWN KP_END KP_BEGIN KP_INSERT +# KP_DELETE KP_EQUAL KP_MULTIPLY KP_ADD KP_SEPARATOR KP_SUBTRACT KP_DECIMAL +# KP_DIVIDE WINDOWS_LEFT WINDOWS_RIGHT WINDOWS_MENU COMMAND + +# save state: freeze is save state, defrost is load state. +States_FreezeCurrentSlot = F1 +States_DefrostCurrentSlot = F3 +States_DefrostCurrentSlotBackup = Shift-F3 +States_CycleSlotForward = F2 +States_CycleSlotBackward = Shift-F2 + +Frameskip_Toggle = Shift-F4 +Framelimiter_TurboToggle = TAB +Framelimiter_SlomoToggle = Shift-TAB +Framelimiter_MasterToggle = F4 + +FullscreenToggle = Alt-ENTER + +Sys_Suspend = ESC + +# Screenshot. Note: must not include shift or ctrl. With these held - it will +# create debug GS dump. The two other shortcuts will be added automatically. +Sys_TakeSnapshot = F8 + +# Hardware/software rendering toggle +Sys_RenderswitchToggle = F9 + +Sys_LoggingToggle = F10 +# The FreezeGS function is currently disabled internally. +Sys_FreezeGS = F11 +Sys_RecordingToggle = F12 + +GSwindow_CycleAspectRatio = F6 + +# Whole picture zoom in/out +GSwindow_ZoomIn = Ctrl-KP_ADD +GSwindow_ZoomOut = Ctrl-KP_SUBTRACT +GSwindow_ZoomToggle = Ctrl-KP_MULTIPLY + +# Vertical stretch/squash +GSwindow_ZoomInY = Alt-Ctrl-KP_ADD +GSwindow_ZoomOutY = Alt-Ctrl-KP_SUBTRACT +GSwindow_ZoomResetY = Alt-Ctrl-KP_MULTIPLY + +# Move the whole image +GSwindow_OffsetYminus = Alt-Ctrl-UP +GSwindow_OffsetYplus = Alt-Ctrl-DOWN +GSwindow_OffsetXminus = Alt-Ctrl-LEFT +GSwindow_OffsetXplus = Alt-Ctrl-RIGHT +GSwindow_OffsetReset = Alt-Ctrl-KP_DIVIDE diff -Nru pcsx2-1.3.1+dfsg/bin/PCSX2-linux.sh pcsx2-1.4.0/bin/PCSX2-linux.sh --- pcsx2-1.3.1+dfsg/bin/PCSX2-linux.sh 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/bin/PCSX2-linux.sh 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,75 @@ +#!/bin/sh + +# PCSX2 - PS2 Emulator for PCs +# Copyright (C) 2002-2011 PCSX2 Dev Team +# +# PCSX2 is free software: you can redistribute it and/or modify it under the terms +# of the GNU Lesser General Public License as published by the Free Software Found- +# ation, either version 3 of the License, or (at your option) any later version. +# +# PCSX2 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 PCSX2. +# If not, see . + +# This script is a small wrapper to the PCSX2 exectuable. The purpose is to +# 1/ launch PCSX2 from the same repository every times. +# Rationale: There is no guarantee on the directory when PCSX2 is launched from a shortcut. +# This behavior trigger the first time wizards everytime... +# 2/ Change LD_LIBRARY_PATH to uses 3rdparty library +# Rationale: It is nearly impossible to have the same library version on all systems. So the +# easiest solution it to ship library used during the build. +# 3/ Set __GL_THREADED_OPTIMIZATIONS variable for Nvidia Drivers (major speed boost) + +set -e + +current_script=$0 +me=PCSX2-linux.sh + +# We are already in the good directory. Allow to use "bash PCSX2-linux.sh" +if [ $current_script = $me ] +then + if [ -e "./$me" ] + then + current_script="./$me" + else + current_script=`which $me` + fi +fi + +# Avoid to screw up the shell context +DIR=`dirname $current_script` +MY_LD_LIBRARY_PATH=$LD_LIBRARY_PATH + +if [ ! -x "$DIR/PCSX2" ] +then + echo "Error PCSX2 not found in $DIR" + echo "Maybe the script was directly 'called'" + echo "Use either /absolute_path/$me or ./relative_path/$me" + return 1 # warning exit will kill current terminal +fi + +# Allow to ship .so library with the build to avoid version issue +MY_LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH:+$MY_LD_LIBRARY_PATH:}$DIR/3rdPartyLibs + +# openSUSE don't follow FHS !!!! +MY_LD_LIBRARY_PATH=${MY_LD_LIBRARY_PATH:+$MY_LD_LIBRARY_PATH:}/usr/lib/wx-2.8-stl + +# Test plugin depencencies (help users to detect missing depencencies) +if [ -x `which ldd` ] +then + for plugin in `find $DIR/plugins -iname "lib*.so"` + do + if [ `ldd $plugin | grep -c found` != 0 ] + then + echo "ERROR the plugin ($plugin) miss some dependencies" + echo " `ldd $plugin | grep found`" + echo "" + fi + done +fi + +# And finally launch me +LD_LIBRARY_PATH="$MY_LD_LIBRARY_PATH" __GL_THREADED_OPTIMIZATIONS=1 $DIR/PCSX2 "$@" diff -Nru pcsx2-1.3.1+dfsg/bin/portable.ini pcsx2-1.4.0/bin/portable.ini --- pcsx2-1.3.1+dfsg/bin/portable.ini 2014-02-07 20:34:36.000000000 +0000 +++ pcsx2-1.4.0/bin/portable.ini 2016-01-05 17:28:08.000000000 +0000 @@ -1 +1,2 @@ -RunWizard=0 +RunWizard=1 +Version=140 diff -Nru pcsx2-1.3.1+dfsg/bin/run_spu2_replay.cmd pcsx2-1.4.0/bin/run_spu2_replay.cmd --- pcsx2-1.3.1+dfsg/bin/run_spu2_replay.cmd 2011-06-25 23:45:58.000000000 +0000 +++ pcsx2-1.4.0/bin/run_spu2_replay.cmd 2016-01-05 17:28:08.000000000 +0000 @@ -1 +1 @@ -%systemroot%\syswow64\rundll32 plugins\SPU2-X-dev.dll,_s2r_replay@16 replay_dump.s2r +%systemroot%\syswow64\rundll32 plugins\SPU2-X-dev.dll,_s2r_replay@16 replay_dump.s2r diff -Nru pcsx2-1.3.1+dfsg/bin/shaders/GSdx.fx pcsx2-1.4.0/bin/shaders/GSdx.fx --- pcsx2-1.3.1+dfsg/bin/shaders/GSdx.fx 2014-11-20 21:07:44.000000000 +0000 +++ pcsx2-1.4.0/bin/shaders/GSdx.fx 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ /*===============================================================================*\ -|######################## [GSdx FX Suite v2.20] ########################| +|######################## [GSdx FX Suite v2.30] ########################| |########################## By Asmodean ##########################| || || || This program is free software; you can redistribute it and/or || @@ -10,7 +10,7 @@ || 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. (c)2014 || +|| GNU General Public License for more details. (c)2015 || || || |#################################################################################| \*===============================================================================*/ @@ -23,22 +23,19 @@ #endif #if defined(SHADER_MODEL) && (SHADER_MODEL <= 0x300) -#error GSdx FX requires shader model 4.0(Direct3D10) or higher. Use GSdx DX10/11. -#endif - -#ifdef SHADER_MODEL -#include "GSdx_FX_Settings.ini" +#error GSdx FX is not compatible with GSdx9. Use GSdx OGL or DX10/11. #endif /*------------------------------------------------------------------------------ [GLOBALS|FUNCTIONS] ------------------------------------------------------------------------------*/ -#if (GLSL == 1) - +#if GLSL == 1 #define int2 ivec2 #define float2 vec2 #define float3 vec3 #define float4 vec4 +#define float4x4 mat4 +#define float3x3 mat3 #define float4x3 mat4x3 #define static #define frac fract @@ -53,11 +50,7 @@ vec2 t; }; -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else layout(binding = 0) uniform sampler2D TextureSampler; -#endif in SHADER { @@ -102,19 +95,107 @@ }; #endif -static float2 screenSize = _xyFrame; +static float Epsilon = 1e-10; static float2 pixelSize = _rcpFrame.xy; -static float2 invDefocus = float2(1.0 / 3840.0, 1.0 / 2160.0); +static float2 screenSize = _xyFrame; static const float3 lumCoeff = float3(0.2126729, 0.7151522, 0.0721750); -float RGBLuminance(float3 color) +//Conversion matrices +float3 RGBtoXYZ(float3 rgb) +{ + const float3x3 m = float3x3( + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041); + + return mul(m, rgb); +} + +float3 XYZtoRGB(float3 xyz) +{ + const float3x3 m = float3x3( + 3.2404542,-1.5371385,-0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434,-0.2040259, 1.0572252); + + return mul(m, xyz); +} + +float3 RGBtoYUV(float3 RGB) +{ + const float3x3 m = float3x3( + 0.2126, 0.7152, 0.0722, + -0.09991,-0.33609, 0.436, + 0.615, -0.55861, -0.05639); + + return mul(m, RGB); +} + +float3 YUVtoRGB(float3 YUV) +{ + const float3x3 m = float3x3( + 1.000, 0.000, 1.28033, + 1.000,-0.21482,-0.38059, + 1.000, 2.12798, 0.000); + + return mul(m, YUV); +} + +//Converting XYZ to Yxy +float3 XYZtoYxy(float3 xyz) +{ + float w = (xyz.r + xyz.g + xyz.b); + float3 Yxy; + + Yxy.r = xyz.g; + Yxy.g = xyz.r / w; + Yxy.b = xyz.g / w; + + return Yxy; +} + +//Converting Yxy to XYZ +float3 YxytoXYZ(float3 Yxy) +{ + float3 xyz; + xyz.g = Yxy.r; + xyz.r = Yxy.r * Yxy.g / Yxy.b; + xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b; + + return xyz; +} + +//Average relative luminance +float AvgLuminance(float3 color) +{ + return sqrt( + (color.x * color.x * lumCoeff.x) + + (color.y * color.y * lumCoeff.y) + + (color.z * color.z * lumCoeff.z)); +} + +float smootherstep(float a, float b, float x) { - return dot(color.rgb, lumCoeff); + x = saturate((x - a) / (b - a)); + return x*x*x*(x*(x * 6 - 15) + 10); } +/* +float4 DebugClipping(float4 color) +{ + if (color.x >= 0.99999 && color.y >= 0.99999 && + color.z >= 0.99999) color.xyz = float3(1.0f, 0.0f, 0.0f); + + if (color.x <= 0.00001 && color.y <= 0.00001 && + color.z <= 0.00001) color.xyz = float3(0.0f, 0.0f, 1.0f); + + return color; +} +*/ + float4 sample_tex(SamplerState texSample, float2 t) { -#if (GLSL == 1) +#if GLSL == 1 return texture(texSample, t); #else return Texture.Sample(texSample, t); @@ -123,7 +204,7 @@ float4 sample_texLevel(SamplerState texSample, float2 t, float lod) { -#if (GLSL == 1) +#if GLSL == 1 return textureLod(texSample, t, lod); #else return Texture.SampleLevel(texSample, t, lod); @@ -134,32 +215,32 @@ [FXAA CODE SECTION] ------------------------------------------------------------------------------*/ -#if (UHQ_FXAA == 1) -#if (SHADER_MODEL >= 0x500) +#if UHQ_FXAA == 1 +#if SHADER_MODEL >= 0x500 #define FXAA_HLSL_5 1 #define FXAA_GATHER4_ALPHA 1 -#elif (GLSL == 1) +#elif GLSL == 1 #define FXAA_GATHER4_ALPHA 1 #else #define FXAA_HLSL_4 1 #define FXAA_GATHER4_ALPHA 0 #endif -#if (FxaaQuality == 4) +#if FxaaQuality == 4 #define FxaaEdgeThreshold 0.063 #define FxaaEdgeThresholdMin 0.000 -#elif (FxaaQuality == 3) +#elif FxaaQuality == 3 #define FxaaEdgeThreshold 0.125 #define FxaaEdgeThresholdMin 0.0312 -#elif (FxaaQuality == 2) +#elif FxaaQuality == 2 #define FxaaEdgeThreshold 0.166 #define FxaaEdgeThresholdMin 0.0625 -#elif (FxaaQuality == 1) +#elif FxaaQuality == 1 #define FxaaEdgeThreshold 0.250 #define FxaaEdgeThresholdMin 0.0833 #endif -#if (FXAA_HLSL_5 == 1) +#if FXAA_HLSL_5 == 1 struct FxaaTex { SamplerState smpl; Texture2D tex; }; #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) @@ -168,7 +249,7 @@ #define FxaaDiscard clip(-1) #define FxaaSat(x) saturate(x) -#elif (FXAA_HLSL_4 == 1) +#elif FXAA_HLSL_4 == 1 struct FxaaTex { SamplerState smpl; Texture2D tex; }; #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) @@ -176,14 +257,14 @@ #define FxaaSat(x) saturate(x) #endif -#if (GLSL == 1) +#if GLSL == 1 #define FxaaBool bool #define FxaaDiscard discard #define FxaaSat(x) clamp(x, 0.0, 1.0) #define FxaaTex sampler2D #define FxaaTexTop(t, p) textureLod(t, p, 0.0) #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) -#if (FXAA_GATHER4_ALPHA == 1) +#if FXAA_GATHER4_ALPHA == 1 // use #extension GL_ARB_gpu_shader5 : enable #define FxaaTexAlpha4(t, p) textureGather(t, p, 3) #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) @@ -208,7 +289,7 @@ float FxaaLuma(float4 rgba) { - rgba.w = RGBLuminance(rgba.xyz); + rgba.w = AvgLuminance(rgba.xyz); return rgba.w; } @@ -218,11 +299,11 @@ posM.x = pos.x; posM.y = pos.y; - #if (FXAA_GATHER4_ALPHA == 1) + #if FXAA_GATHER4_ALPHA == 1 float4 rgbyM = FxaaTexTop(tex, posM); float4 luma4A = FxaaTexAlpha4(tex, posM); float4 luma4B = FxaaTexOffAlpha4(tex, posM, int2(-1, -1)); - rgbyM.w = RGBLuminance(rgbyM.xyz); + rgbyM.w = AvgLuminance(rgbyM.xyz); #define lumaM rgbyM.w #define lumaE luma4A.z @@ -234,7 +315,7 @@ #else float4 rgbyM = FxaaTexTop(tex, posM); - rgbyM.w = RGBLuminance(rgbyM.xyz); + rgbyM.w = AvgLuminance(rgbyM.xyz); #define lumaM rgbyM.w float lumaS = FxaaLuma(FxaaTexOff(tex, posM, int2( 0, 1), fxaaRcpFrame.xy)); @@ -257,11 +338,11 @@ float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled); bool earlyExit = range < rangeMaxClamped; - #if (FxaaEarlyExit == 1) + #if FxaaEarlyExit == 1 if(earlyExit) { return rgbyM; } #endif - #if (FXAA_GATHER4_ALPHA == 0) + #if FXAA_GATHER4_ALPHA == 0 float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy)); float lumaSE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1, 1), fxaaRcpFrame.xy)); float lumaNE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1,-1), fxaaRcpFrame.xy)); @@ -515,8 +596,7 @@ float4 FxaaPass(float4 FxaaColor, float2 texcoord) { - #if(GLSL == 1) - tex = TextureSampler; + #if GLSL == 1 FxaaColor = FxaaPixelShader(texcoord, TextureSampler, pixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin); #else FxaaTex tex; @@ -633,7 +713,7 @@ [BILINEAR FILTERING CODE SECTION] ------------------------------------------------------------------------------*/ -#if (BILINEAR_FILTERING == 1) +#if BILINEAR_FILTERING == 1 float4 SampleBiLinear(SamplerState texSample, float2 texcoord) { float texelSizeX = pixelSize.x; @@ -676,7 +756,7 @@ [BICUBIC FILTERING CODE SECTION] ------------------------------------------------------------------------------*/ -#if (BICUBIC_FILTERING == 1) +#if BICUBIC_FILTERING == 1 float4 BicubicFilter(SamplerState texSample, float2 texcoord) { float texelSizeX = pixelSize.x; @@ -694,23 +774,20 @@ float2 uvCoord = float2(float(nX) / screenSize.x + PixelOffset / screenSize.x, float(nY) / screenSize.y + PixelOffset / screenSize.y); - for (int m = -1; m <= 2; m++) - { - for (int n = -1; n <= 2; n++) - { - float4 Samples = sample_tex(texSample, uvCoord + - float2(texelSizeX * float(m), texelSizeY * float(n))); - - float vc1 = Interpolation(float(m) - a); - float4 vecCoeff1 = float4(vc1, vc1, vc1, vc1); - - float vc2 = Interpolation(-(float(n) - b)); - float4 vecCoeff2 = float4(vc2, vc2, vc2, vc2); - - nSum = nSum + (Samples * vecCoeff2 * vecCoeff1); - nDenom = nDenom + (vecCoeff2 * vecCoeff1); - } - } + for (int m = -1; m <= 2; m++) { + for (int n = -1; n <= 2; n++) { + + float4 Samples = sample_tex(texSample, uvCoord + + float2(texelSizeX * float(m), texelSizeY * float(n))); + + float vc1 = Interpolation(float(m) - a); + float4 vecCoeff1 = float4(vc1, vc1, vc1, vc1); + + float vc2 = Interpolation(-(float(n) - b)); + float4 vecCoeff2 = float4(vc2, vc2, vc2, vc2); + + nSum = nSum + (Samples * vecCoeff2 * vecCoeff1); + nDenom = nDenom + (vecCoeff2 * vecCoeff1); }} return nSum / nDenom; } @@ -781,11 +858,11 @@ #endif /*------------------------------------------------------------------------------ - [BICUBIC SCALAR CODE SECTION] + [BICUBIC SCALER CODE SECTION] ------------------------------------------------------------------------------*/ -#if (BICUBLIC_SCALAR == 1) -float4 BicubicScalar(in SamplerState tex, in float2 uv, in float2 texSize) +#if BICUBLIC_SCALER == 1 +float4 BicubicScaler(SamplerState tex, float2 uv, float2 texSize) { float2 inputSize = float2(1.0/texSize.x, 1.0/texSize.y); @@ -793,7 +870,7 @@ float2 index = floor(coord_hg); float2 f = coord_hg - index; - #if (GLSL == 1) + #if GLSL == 1 mat4 M = mat4( -1.0, 3.0,-3.0, 1.0, 3.0,-6.0, 3.0, 0.0, -3.0, 0.0, 3.0, 0.0, 1.0, 4.0, 1.0, 0.0 ); #else @@ -837,18 +914,18 @@ return res; } -float4 BiCubicScalarPass(float4 color, float2 texcoord) +float4 BiCubicScalerPass(float4 color, float2 texcoord) { - color = BicubicScalar(TextureSampler, texcoord, screenSize); + color = BicubicScaler(TextureSampler, texcoord, screenSize); return color; } #endif /*------------------------------------------------------------------------------ - [LANCZOS SCALAR CODE SECTION] + [LANCZOS SCALER CODE SECTION] ------------------------------------------------------------------------------*/ -#if (LANCZOS_SCALAR == 1) +#if (LANCZOS_SCALER == 1) float3 PixelPos(float xpos, float ypos) { return sample_tex(TextureSampler, float2(xpos, ypos)).rgb; @@ -874,7 +951,7 @@ PixelPos(xpos.w, ypos))); } -float4 LanczosScalar(float2 texcoord, float2 inputSize) +float4 LanczosScaler(float2 texcoord, float2 inputSize) { float2 stepxy = float2(1.0/inputSize.x, 1.0/inputSize.y); float2 pos = texcoord + stepxy; @@ -897,9 +974,9 @@ LineRun(xystart.y + stepxy.y * 3.0, xpos, linetaps))), 1.0); } -float4 LanczosScalarPass(float4 color, float2 texcoord) +float4 LanczosScalerPass(float4 color, float2 texcoord) { - color = LanczosScalar(texcoord, screenSize); + color = LanczosScaler(texcoord, screenSize); return color; } #endif @@ -908,8 +985,7 @@ [GAMMA CORRECTION CODE SECTION] ------------------------------------------------------------------------------*/ -#if (GAMMA_CORRECTION == 1) -float3 RGBGammaToLinear(float3 color, float gamma) +float3 EncodeGamma(float3 color, float gamma) { color = saturate(color); color.r = (color.r <= 0.0404482362771082) ? @@ -922,7 +998,7 @@ return color; } -float3 LinearToRGBGamma(float3 color, float gamma) +float3 DecodeGamma(float3 color, float gamma) { color = saturate(color); color.r = (color.r <= 0.00313066844250063) ? @@ -935,23 +1011,23 @@ return color; } +#if GAMMA_CORRECTION == 1 float4 GammaPass(float4 color, float2 texcoord) { - const float GammaConst = 2.233; - color.rgb = RGBGammaToLinear(color.rgb, GammaConst); - color.rgb = LinearToRGBGamma(color.rgb, float(Gamma)); - color.a = RGBLuminance(color.rgb); + static const float GammaConst = 2.233333; + color.rgb = EncodeGamma(color.rgb, GammaConst); + color.rgb = DecodeGamma(color.rgb, float(Gamma)); + color.a = AvgLuminance(color.rgb); return color; } #endif - /*------------------------------------------------------------------------------ [TEXTURE SHARPEN CODE SECTION] ------------------------------------------------------------------------------*/ -#if (TEXTURE_SHARPEN == 1) -float4 SampleBicubic(in SamplerState texSample, in float2 texcoord) +#if TEXTURE_SHARPEN == 1 +float4 SampleBicubic(SamplerState texSample, float2 texcoord) { float texelSizeX = pixelSize.x * float(SharpenBias); float texelSizeY = pixelSize.y * float(SharpenBias); @@ -967,23 +1043,20 @@ float2 uvCoord = float2(float(nX) / screenSize.x, float(nY) / screenSize.y); - for (int m = -1; m <= 2; m++) - { - for (int n = -1; n <= 2; n++) - { - float4 Samples = sample_tex(texSample, uvCoord + - float2(texelSizeX * float(m), texelSizeY * float(n))); - - float vc1 = Cubic(float(m) - a); - float4 vecCoeff1 = float4(vc1, vc1, vc1, vc1); - - float vc2 = Cubic(-(float(n) - b)); - float4 vecCoeff2 = float4(vc2, vc2, vc2, vc2); - - nSum = nSum + (Samples * vecCoeff2 * vecCoeff1); - nDenom = nDenom + (vecCoeff2 * vecCoeff1); - } - } + for (int m = -1; m <= 2; m++) { + for (int n = -1; n <= 2; n++) { + + float4 Samples = sample_tex(texSample, uvCoord + + float2(texelSizeX * float(m), texelSizeY * float(n))); + + float vc1 = Cubic(float(m) - a); + float4 vecCoeff1 = float4(vc1, vc1, vc1, vc1); + + float vc2 = Cubic(-(float(n) - b)); + float4 vecCoeff2 = float4(vc2, vc2, vc2, vc2); + + nSum = nSum + (Samples * vecCoeff2 * vecCoeff1); + nDenom = nDenom + (vecCoeff2 * vecCoeff1); }} return nSum / nDenom; } @@ -998,10 +1071,10 @@ sharpenLuma = clamp(sharpenLuma, -float(SharpenClamp), float(SharpenClamp)); color.rgb = color.rgb + sharpenLuma; - color.a = RGBLuminance(color.rgb); + color.a = AvgLuminance(color.rgb); - #if (DebugSharpen == 1) - color = saturate(0.5f + (sharpenLuma * 4)).rrrr; + #if DebugSharpen == 1 + color = saturate(0.5f + (sharpenLuma * 4)).xxxx; #endif return saturate(color); @@ -1009,25 +1082,28 @@ #endif /*------------------------------------------------------------------------------ - [VIBRANCE CODE SECTION] + [PIXEL VIBRANCE CODE SECTION] ------------------------------------------------------------------------------*/ -#if (PIXEL_VIBRANCE == 1) +#if PIXEL_VIBRANCE == 1 float4 VibrancePass(float4 color, float2 texcoord) { - #if (GLSL == 1) - float3 luma = float3(RGBLuminance(color.rgb)); + float vib = Vibrance; + + #if GLSL == 1 + float3 luma = float3(AvgLuminance(color.rgb)); #else - float luma = RGBLuminance(color.rgb); + float luma = AvgLuminance(color.rgb); #endif float colorMax = max(color.r, max(color.g, color.b)); float colorMin = min(color.r, min(color.g, color.b)); float colorSaturation = colorMax - colorMin; + float3 colorCoeff = float3(RedVibrance * vib, GreenVibrance * vib, BlueVibrance * vib); - color.rgb = lerp(luma, color.rgb, (1.0 + (Vibrance * (1.0 - (sign(Vibrance) * colorSaturation))))); - color.a = RGBLuminance(color.rgb); + color.rgb = lerp(luma, color.rgb, (1.0 + (colorCoeff * (1.0 - (sign(colorCoeff) * colorSaturation))))); + color.a = AvgLuminance(color.rgb); return saturate(color); //Debug: return colorSaturation.xxxx; } @@ -1037,272 +1113,480 @@ [BLENDED BLOOM CODE SECTION] ------------------------------------------------------------------------------*/ -#if (BLENDED_BLOOM == 1) -float3 BlendAddLight(float3 color, float3 bloom) +#if BLENDED_BLOOM == 1 +float3 BlendAddLight(float3 bloom, float3 blend) { - return saturate(color + bloom); + return saturate(bloom + blend); } -float3 BlendScreen(float3 color, float3 bloom) +float3 BlendScreen(float3 bloom, float3 blend) { - return (color + bloom) - (color * bloom); + return (bloom + blend) - (bloom * blend); } -float3 BlendLuma(float3 color, float3 bloom) +float3 BlendGlow(float3 bloom, float3 blend) { - return lerp((color * bloom), (1.0 - ((1.0 - color) * (1.0 - bloom))), RGBLuminance(color + bloom)); + float glow = AvgLuminance(bloom); + return lerp((bloom + blend) - (bloom * blend), + (blend + blend) - (blend * blend), glow); } -float3 BlendGlow(float3 color, float3 bloom) +float3 BlendAddGlow(float3 bloom, float3 blend) { - float3 glow = step(0.5, color); - glow = lerp((color + bloom) - (color * bloom), (bloom + bloom) - (bloom * bloom), glow); - - return glow; + float addglow = smootherstep(0.0, 1.0, AvgLuminance(bloom)); + return lerp(saturate(bloom + blend), + (blend + blend) - (blend * blend), addglow); } -float3 BlendOverlay(float3 color, float3 bloom) +float3 BlendLuma(float3 bloom, float3 blend) { - float3 overlay = step(0.5, color); - overlay = lerp((color * bloom * 2.0), (1.0 - (2.0 * (1.0 - color) * (1.0 - bloom))), overlay); - - return overlay; + float lumavg = smootherstep(0.0, 1.0, AvgLuminance(bloom + blend)); + return lerp((bloom * blend), (1.0 - + ((1.0 - bloom) * (1.0 - blend))), lumavg); } -float4 PyramidFilter(SamplerState tex, float2 texcoord, float2 width) +float3 BlendOverlay(float3 bloom, float3 blend) { - float4 color = sample_tex(tex, texcoord + float2(0.5, 0.5) * width); - color += sample_tex(tex, texcoord + float2(-0.5, 0.5) * width); - color += sample_tex(tex, texcoord + float2(0.5, -0.5) * width); - color += sample_tex(tex, texcoord + float2(-0.5, -0.5) * width); - color *= 0.25; - - return color; + float3 overlay = step(0.5, bloom); + return lerp((bloom * blend * 2.0), (1.0 - (2.0 * + (1.0 - bloom) * (1.0 - blend))), overlay); } float3 BloomCorrection(float3 color) { - float X = 1.0 / (1.0 + exp(float(BloomReds) / 2.0)); - float Y = 1.0 / (1.0 + exp(float(BloomGreens) / 2.0)); - float Z = 1.0 / (1.0 + exp(float(BloomBlues) / 2.0)); - - color.r = (1.0 / (1.0 + exp(float(-BloomReds) * (color.r - 0.5))) - X) / (1.0 - 2.0 * X); - color.g = (1.0 / (1.0 + exp(float(-BloomGreens) * (color.g - 0.5))) - Y) / (1.0 - 2.0 * Y); - color.b = (1.0 / (1.0 + exp(float(-BloomBlues) * (color.b - 0.5))) - Z) / (1.0 - 2.0 * Z); + float3 bloom = color; + + bloom.r = 2.0 / 3.0 * (1.0 - (bloom.r * bloom.r)); + bloom.g = 2.0 / 3.0 * (1.0 - (bloom.g * bloom.g)); + bloom.b = 2.0 / 3.0 * (1.0 - (bloom.b * bloom.b)); + + bloom.r = saturate(color.r + float(BloomReds) * bloom.r); + bloom.g = saturate(color.g + float(BloomGreens) * bloom.g); + bloom.b = saturate(color.b + float(BloomBlues) * bloom.b); + + color = bloom; return color; } -float4 BloomPass(float4 color, float2 texcoord) +float4 DefocusFilter(SamplerState tex, float2 texcoord, float2 defocus) { - const float defocus = 1.25; - float4 bloom = PyramidFilter(TextureSampler, texcoord, pixelSize * defocus); + float2 texel = pixelSize * defocus; - float2 dx = float2(invDefocus.x * float(BloomWidth), 0.0); - float2 dy = float2(0.0, invDefocus.y * float(BloomWidth)); + float4 sampleA = sample_tex(tex, texcoord + float2(0.5, 0.5) * texel); + float4 sampleB = sample_tex(tex, texcoord + float2(-0.5, 0.5) * texel); + float4 sampleC = sample_tex(tex, texcoord + float2(0.5, -0.5) * texel); + float4 sampleD = sample_tex(tex, texcoord + float2(-0.5, -0.5) * texel); - float2 mdx = mul(2.0, dx); - float2 mdy = mul(2.0, dy); + float fx = frac(texcoord.x * screenSize.x); + float fy = frac(texcoord.y * screenSize.y); - float4 bloomBlend = bloom * 0.22520613262190495; - - bloomBlend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord - mdx + mdy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - dx + mdy); - bloomBlend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord + mdy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + dx + mdy); - bloomBlend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord + mdx + mdy); - - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - mdx + dy); - bloomBlend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord - dx + dy); - bloomBlend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord + dy); - bloomBlend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord + dx + dy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + mdx + dy); - - bloomBlend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord - mdx); - bloomBlend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord - dx); - bloomBlend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord + dx); - bloomBlend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord + mdx); - - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - mdx - dy); - bloomBlend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord - dx - dy); - bloomBlend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord - dy); - bloomBlend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord + dx - dy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + mdx - dy); - - bloomBlend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord - mdx - mdy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - dx - mdy); - bloomBlend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord - mdy); - bloomBlend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + dx - mdy); - bloomBlend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord + mdx - mdy); - bloomBlend = lerp(color, bloomBlend, float(BlendStrength)); + float4 interpolateA = lerp(sampleA, sampleB, fx); + float4 interpolateB = lerp(sampleC, sampleD, fx); - bloom.rgb = BloomType(bloom.rgb, bloomBlend.rgb); - bloom.rgb = BloomCorrection(bloom.rgb); + return lerp(interpolateA, interpolateB, fy); +} + +float4 BloomPass(float4 color, float2 texcoord) +{ + float anflare = 4.0; - color.a = RGBLuminance(color.rgb); - bloom.a = RGBLuminance(bloom.rgb); + float2 defocus = float2(BloomDefocus, BloomDefocus); + float4 bloom = DefocusFilter(TextureSampler, texcoord, defocus); + + float2 dx = float2(pixelSize.x * float(BloomWidth), 0.0); + float2 dy = float2(0.0, pixelSize.y * float(BloomWidth)); + + float2 mdx = float2(dx.x * defocus.x, 0.0); + float2 mdy = float2(0.0, dy.y * defocus.y); + + float4 blend = bloom * 0.22520613262190495; + + blend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord - mdx + mdy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - dx + mdy); + blend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord + mdy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + dx + mdy); + blend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord + mdx + mdy); + + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - mdx + dy); + blend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord - dx + dy); + blend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord + dy); + blend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord + dx + dy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + mdx + dy); + + blend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord - mdx); + blend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord - dx); + blend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord + dx); + blend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord + mdx); + + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - mdx - dy); + blend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord - dx - dy); + blend += 0.100529757860782610 * sample_tex(TextureSampler, texcoord - dy); + blend += 0.044875475183061630 * sample_tex(TextureSampler, texcoord + dx - dy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + mdx - dy); + + blend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord - mdx - mdy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord - dx - mdy); + blend += 0.024146616900339800 * sample_tex(TextureSampler, texcoord - mdy); + blend += 0.010778807494659370 * sample_tex(TextureSampler, texcoord + dx - mdy); + blend += 0.002589001911021066 * sample_tex(TextureSampler, texcoord + mdx - mdy); + blend = lerp(color, blend, float(BlendStrength)); + + bloom.xyz = BloomType(bloom.xyz, blend.xyz); + bloom.xyz = BloomCorrection(bloom.xyz); + + color.w = AvgLuminance(color.xyz); + bloom.w = AvgLuminance(bloom.xyz); + bloom.w *= anflare; color = lerp(color, bloom, float(BloomStrength)); return color; } #endif + /*------------------------------------------------------------------------------ - [COLOR CORRECTION/TONE MAPPING CODE SECTION] + [SCENE TONE MAPPING CODE SECTION] ------------------------------------------------------------------------------*/ -float3 FilmicTonemap(float3 color) +#if SCENE_TONEMAPPING == 1 +float3 ScaleLuminance(float3 x) { - float3 Q = color.xyz; + float W = 1.02; + float L = 0.06; + float C = 1.02; - float A = 0.10; - float B = float(BlackLevels); - float C = 0.10; - float D = float(ToneAmount); - float E = 0.02; - float F = 0.30; - float W = float(WhitePoint); + float N = clamp(0.76 + ToneAmount, 1.0, 2.0); + float K = (N - L * C) / C; - float3 numerator = ((Q*(A*Q + C*B) + D*E) / (Q*(A*Q + B) + D*F)) - E / F; - float denominator = ((W*(A*W + C*B) + D*E) / (W*(A*W + B) + D*F)) - E / F; + float3 tone = L * C + (1.0 - L * C) * (1.0 + K * (x - L) / + ((W - L) * (W - L))) * (x - L) / (x - L + K); - color.xyz = numerator / denominator; - - return saturate(color); + return tone; } -float3 ColorShift(float3 color) +float3 TmMask(float3 color) { - float3 colMood; + float3 tone = color; - colMood.r = float(RedShift); - colMood.g = float(GreenShift); - colMood.b = float(BlueShift); - - float fLum = RGBLuminance(color.rgb); - #if (GLSL == 1) - // Is HLSL float3(x) equivalent to float3(x,x,x) ? - colMood = lerp(float3(0.0), colMood, saturate(fLum * 2.0)); - colMood = lerp(colMood, float3(1.0), saturate(fLum - 0.5) * 2.0); - #else - colMood = lerp(0.0, colMood, saturate(fLum * 2.0)); - colMood = lerp(colMood, 1.0, saturate(fLum - 0.5) * 2.0); - #endif - float3 colOutput = lerp(color, colMood, saturate(fLum * float(ShiftRatio))); + float highTone = 6.2; float greyTone = 0.4; + float midTone = 1.620; float lowTone = 0.06; + + tone.r = (tone.r * (highTone * tone.r + greyTone))/( + tone.r * (highTone * tone.r + midTone) + lowTone); + tone.g = (tone.g * (highTone * tone.g + greyTone))/( + tone.g * (highTone * tone.g + midTone) + lowTone); + tone.b = (tone.b * (highTone * tone.b + greyTone))/( + tone.b * (highTone * tone.b + midTone) + lowTone); + + static const float gamma = 2.42; + tone = EncodeGamma(tone, gamma); - return colOutput; + color = lerp(color, tone, float(MaskStrength)); + + return color; } -float3 ColorCorrection(float3 color) +float3 TmCurve(float3 color) { - float X = 1.0 / (1.0 + exp(float(RedCurve) / 2.0)); - float Y = 1.0 / (1.0 + exp(float(GreenCurve) / 2.0)); - float Z = 1.0 / (1.0 + exp(float(BlueCurve) / 2.0)); - - color.r = (1.0 / (1.0 + exp(float(-RedCurve) * (color.r - 0.5))) - X) / (1.0 - 2.0 * X); - color.g = (1.0 / (1.0 + exp(float(-GreenCurve) * (color.g - 0.5))) - Y) / (1.0 - 2.0 * Y); - color.b = (1.0 / (1.0 + exp(float(-BlueCurve) * (color.b - 0.5))) - Z) / (1.0 - 2.0 * Z); + float3 T = color; - return saturate(color); + float tnamn = ToneAmount; + float blevel = length(T); + float bmask = pow(blevel, 0.02); + + float A = 0.100; float B = 0.300; + float C = 0.100; float D = tnamn; + float E = 0.020; float F = 0.300; + + float W = 1.000; + + T.r = ((T.r*(A*T.r + C*B) + D*E) / (T.r*(A*T.r + B) + D*F)) - E / F; + T.g = ((T.g*(A*T.g + C*B) + D*E) / (T.g*(A*T.g + B) + D*F)) - E / F; + T.b = ((T.b*(A*T.b + C*B) + D*E) / (T.b*(A*T.b + B) + D*F)) - E / F; + + float denom = ((W*(A*W + C*B) + D*E) / (W*(A*W + B) + D*F)) - E / F; + + float3 black = float3(bmask, bmask, bmask); + float3 white = float3(denom, denom, denom); + + T = T / white; + T = T * black; + + color = saturate(T); + + return color; } float4 TonemapPass(float4 color, float2 texcoord) { - const float delta = 0.001f; - const float wpoint = pow(1.002f, 2.0f); + float3 tonemap = color.rgb; - if (CorrectionPalette == 1) { color.rgb = ColorCorrection(color.rgb); } - if (FilmicProcess == 1) { color.rgb = ColorShift(color.rgb); } - if (FilmicProcess == 0) { color.rgb = FilmicTonemap(color.rgb); } + float blackLevel = length(tonemap); + tonemap = ScaleLuminance(tonemap); - // RGB -> XYZ conversion - #if (GLSL == 1) - // GLSL is column major whereas HLSL is row major ... - const mat3 RGB2XYZ = mat3 ( 0.4124564, 0.2126729, 0.0193339, // first column (not row) - 0.3575761, 0.7151522, 0.1191920, // 2nd column - 0.1804375, 0.0721750, 0.9503041 ); // 3rd column + #if GLSL == 1 + float luminanceAverage = AvgLuminance(float3(Luminance)); #else - const float3x3 RGB2XYZ = { 0.4124564, 0.3575761, 0.1804375, - 0.2126729, 0.7151522, 0.0721750, - 0.0193339, 0.1191920, 0.9503041 }; + float luminanceAverage = AvgLuminance(Luminance); #endif - #if (GLSL == 1) - float3 XYZ = RGB2XYZ * color.rgb; - #else - float3 XYZ = mul(RGB2XYZ, color.rgb); - #endif + if (TonemapMask == 1) { tonemap = TmMask(tonemap); } + if (TonemapType == 1) { tonemap = TmCurve(tonemap); } + + // RGB -> XYZ conversion + const float3x3 RGB2XYZ = float3x3(0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041); + + float3 XYZ = mul(RGB2XYZ, tonemap); // XYZ -> Yxy conversion float3 Yxy; - Yxy.r = XYZ.g; // copy luminance Y - Yxy.g = XYZ.r / (XYZ.r + XYZ.g + XYZ.b); // x = X / (X + Y + Z) - Yxy.b = XYZ.g / (XYZ.r + XYZ.g + XYZ.b); // y = Y / (X + Y + Z) + Yxy.r = XYZ.g; // copy luminance Y + Yxy.g = XYZ.r / (XYZ.r + XYZ.g + XYZ.b); // x = X / (X + Y + Z) + Yxy.b = XYZ.g / (XYZ.r + XYZ.g + XYZ.b); // y = Y / (X + Y + Z) - if (CorrectionPalette == 2) { Yxy.rgb = ColorCorrection(Yxy.rgb); } + // (Wt) Tone mapped scaling of the initial wp before input modifiers + float Wt = saturate(Yxy.r / AvgLuminance(XYZ)); + + if (TonemapType == 2) { Yxy.r = TmCurve(Yxy).r; } // (Lp) Map average luminance to the middlegrey zone by scaling pixel luminance - #if (TonemapType == 1) - float Lp = Yxy.r * float(Exposure) / (float(Luminance) + delta); - #elif (TonemapType == 2) - float Lp = Yxy.r * FilmicTonemap(Yxy.rrr).r / RGBLuminance(Yxy.rrr) * - float(Exposure) / (float(Luminance) + delta); - #endif + float Lp = Yxy.r * float(Exposure) / (luminanceAverage + Epsilon); - // (Ld) Scale all luminance within a displayable range of 0 to 1 - Yxy.r = (Lp * (1.0 + Lp / wpoint)) / (1.0 + Lp); + // (Wp) White point calculated, based on the toned white, and input modifier + float Wp = dot(abs(Wt), float(WhitePoint)); - if (FilmicProcess == 1) { Yxy.r = FilmicTonemap(Yxy.rgb).r; } + // (Ld) Scale all luminance within a displayable range of 0 to 1 + Yxy.r = (Lp * (1.0 + Lp / (Wp * Wp))) / (1.0 + Lp); // Yxy -> XYZ conversion XYZ.r = Yxy.r * Yxy.g / Yxy.b; // X = Y * x / y XYZ.g = Yxy.r; // copy luminance Y XYZ.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b; // Z = Y * (1-x-y) / y - if (CorrectionPalette == 3) { XYZ.rgb = ColorCorrection(XYZ.rgb); } + if (TonemapType == 3) { XYZ = TmCurve(XYZ); } // XYZ -> RGB conversion - #if (GLSL == 1) - // GLSL is column major whereas HLSL is row major ... - const mat3 XYZ2RGB = mat3 ( 3.2404542, -0.9692660, 0.0556434, // first column (not row) - -1.5371385, 1.8760108, -0.2040259, // 2nd column - -0.4985314, 0.0415560, 1.0572252 ); // 3rd column - #else - const float3x3 XYZ2RGB = { 3.2404542,-1.5371385,-0.4985314, - -0.9692660, 1.8760108, 0.0415560, - 0.0556434,-0.2040259, 1.0572252 }; - #endif + const float3x3 XYZ2RGB = float3x3(3.2404542,-1.5371385,-0.4985314, + -0.9692660, 1.8760108, 0.0415560, + 0.0556434,-0.2040259, 1.0572252); - #if (GLSL == 1) - color.rgb = XYZ2RGB * XYZ; - #else - color.rgb = mul(XYZ2RGB, XYZ); + tonemap = mul(XYZ2RGB, XYZ); + + float shadowmask = pow(saturate(blackLevel), float(BlackLevels)); + tonemap = tonemap * float3(shadowmask, shadowmask, shadowmask); + + color.rgb = tonemap; + color.a = AvgLuminance(color.rgb); + + return color; +} +#endif + +/*------------------------------------------------------------------------------ + [CROSS PROCESSING CODE SECTION] +------------------------------------------------------------------------------*/ + +#if CROSS_PROCESSING == 1 +float3 CrossShift(float3 color) +{ + float3 cross; + + float2 CrossMatrix[3] = { + float2 (0.960, 0.040 * color.x), + float2 (0.980, 0.020 * color.y), + float2 (0.970, 0.030 * color.z), }; + + cross.x = float(RedShift) * CrossMatrix[0].x + CrossMatrix[0].y; + cross.y = float(GreenShift) * CrossMatrix[1].x + CrossMatrix[1].y; + cross.z = float(BlueShift) * CrossMatrix[2].x + CrossMatrix[2].y; + + float lum = AvgLuminance(color); + float3 black = float3(0.0, 0.0, 0.0); + float3 white = float3(1.0, 1.0, 1.0); + + cross = lerp(black, cross, saturate(lum * 2.0)); + cross = lerp(cross, white, saturate(lum - 0.5) * 2.0); + color = lerp(color, cross, saturate(lum * float(ShiftRatio))); + + return color; +} + +float4 CrossPass(float4 color, float2 texcoord) +{ + #if FilmicProcess == 1 + color.rgb = CrossShift(color.rgb); + + #elif FilmicProcess == 2 + float3 XYZ = RGBtoXYZ(color.rgb); + float3 Yxy = XYZtoYxy(XYZ); + + Yxy = CrossShift(Yxy); + XYZ = YxytoXYZ(Yxy); + + color.rgb = XYZtoRGB(XYZ); + + #elif FilmicProcess == 3 + float3 XYZ = RGBtoXYZ(color.rgb); + float3 Yxy = XYZtoYxy(XYZ); + + XYZ = YxytoXYZ(Yxy); + XYZ = CrossShift(XYZ); + + color.rgb = XYZtoRGB(XYZ); #endif - color.a = RGBLuminance(color.rgb); + + color.a = AvgLuminance(color.rgb); + + return saturate(color); +} +#endif + +/*------------------------------------------------------------------------------ + [COLOR CORRECTION CODE SECTION] +------------------------------------------------------------------------------*/ + +// Converting pure hue to RGB +float3 HUEtoRGB(float H) +{ + float R = abs(H * 6.0 - 3.0) - 1.0; + float G = 2.0 - abs(H * 6.0 - 2.0); + float B = 2.0 - abs(H * 6.0 - 4.0); + + return saturate(float3(R, G, B)); +} + +// Converting RGB to hue/chroma/value +float3 RGBtoHCV(float3 RGB) +{ + float4 BG = float4(RGB.bg,-1.0, 2.0 / 3.0); + float4 GB = float4(RGB.gb, 0.0,-1.0 / 3.0); + + float4 P = (RGB.g < RGB.b) ? BG : GB; + + float4 XY = float4(P.xyw, RGB.r); + float4 YZ = float4(RGB.r, P.yzx); + + float4 Q = (RGB.r < P.x) ? XY : YZ; + + float C = Q.x - min(Q.w, Q.y); + float H = abs((Q.w - Q.y) / (6.0 * C + Epsilon) + Q.z); + + return float3(H, C, Q.x); +} + +// Converting RGB to HSV +float3 RGBtoHSV(float3 RGB) +{ + float3 HCV = RGBtoHCV(RGB); + float S = HCV.y / (HCV.z + Epsilon); + + return float3(HCV.x, S, HCV.z); +} + +// Converting HSV to RGB +float3 HSVtoRGB(float3 HSV) +{ + float3 RGB = HUEtoRGB(HSV.x); + return ((RGB - 1.0) * HSV.y + 1.0) * HSV.z; +} + +#if COLOR_CORRECTION == 1 +// Pre correction color mask +float3 PreCorrection(float3 color) +{ + float3 RGB = color; + + RGB.r = 2.0 / 3.0 * (1.0 - (RGB.r * RGB.r)); + RGB.g = 2.0 / 3.0 * (1.0 - (RGB.g * RGB.g)); + RGB.b = 2.0 / 3.0 * (1.0 - (RGB.b * RGB.b)); + + RGB.r = saturate(color.r + (float(ChannelR) / 200.0) * RGB.r); + RGB.g = saturate(color.g + (float(ChannelG) / 200.0) * RGB.g); + RGB.b = saturate(color.b + (float(ChannelB) / 200.0) * RGB.b); + + color = saturate(RGB); + + return color; +} + +float3 ColorCorrection(float3 color) +{ + float X = 1.0 / (1.0 + exp(float(ChannelR) / 2.0)); + float Y = 1.0 / (1.0 + exp(float(ChannelG) / 2.0)); + float Z = 1.0 / (1.0 + exp(float(ChannelB) / 2.0)); + + color.r = (1.0 / (1.0 + exp(float(-ChannelR) * (color.r - 0.5))) - X) / (1.0 - 2.0 * X); + color.g = (1.0 / (1.0 + exp(float(-ChannelG) * (color.g - 0.5))) - Y) / (1.0 - 2.0 * Y); + color.b = (1.0 / (1.0 + exp(float(-ChannelB) * (color.b - 0.5))) - Z) / (1.0 - 2.0 * Z); return saturate(color); } +float4 CorrectionPass(float4 color, float2 texcoord) +{ + float3 colorspace = PreCorrection(color.rgb); + + #if CorrectionPalette == 1 + colorspace = ColorCorrection(colorspace); + + #elif CorrectionPalette == 2 + float3 XYZ = RGBtoXYZ(colorspace); + float3 Yxy = XYZtoYxy(XYZ); + + Yxy = ColorCorrection(Yxy); + XYZ = YxytoXYZ(Yxy); + colorspace = XYZtoRGB(XYZ); + + #elif CorrectionPalette == 3 + float3 XYZ = RGBtoXYZ(colorspace); + float3 Yxy = XYZtoYxy(XYZ); + + XYZ = YxytoXYZ(Yxy); + XYZ = ColorCorrection(XYZ); + colorspace = XYZtoRGB(XYZ); + + #elif CorrectionPalette == 4 + float3 hsv = RGBtoHSV(colorspace); + hsv = ColorCorrection(hsv); + colorspace = HSVtoRGB(hsv); + + #elif CorrectionPalette == 5 + float3 yuv = RGBtoYUV(colorspace); + yuv = ColorCorrection(yuv); + colorspace = YUVtoRGB(yuv); + #endif + + color.rgb = lerp(color.rgb, colorspace, float(PaletteStrength)); + color.a = AvgLuminance(color.rgb); + + return color; +} +#endif + + /*------------------------------------------------------------------------------ [S-CURVE CONTRAST CODE SECTION] ------------------------------------------------------------------------------*/ -#if (S_CURVE_CONTRAST == 1) +#if CURVE_CONTRAST == 1 float4 ContrastPass(float4 color, float2 texcoord) { float CurveBlend = CurvesContrast; - #if (CurveType != 2) - #if (GLSL == 1) - float3 luma = float3(RGBLuminance(color.rgb)); + #if CurveType != 2 + #if GLSL == 1 + float3 luma = float3(AvgLuminance(color.rgb)); #else - float3 luma = (float3)RGBLuminance(color.rgb); + float3 luma = (float3)AvgLuminance(color.rgb); #endif float3 chroma = color.rgb - luma; #endif - #if (CurveType == 2) + #if CurveType == 2 float3 x = color.rgb; #elif (CurveType == 1) float3 x = chroma; @@ -1314,7 +1598,7 @@ //S-Curve - Cubic Bezier spline float3 a = float3(0.00, 0.00, 0.00); //start point float3 b = float3(0.25, 0.25, 0.25); //control point 1 - float3 c = float3(0.80, 0.80, 0.80); //control point 2 + float3 c = float3(0.85, 0.85, 0.85); //control point 2 float3 d = float3(1.00, 1.00, 1.00); //endpoint float3 ab = lerp(a, b, x); //point between a and b (green) @@ -1326,7 +1610,7 @@ x = dest; - #if (CurveType == 0) //Only Luma + #if CurveType == 0 //Only Luma x = lerp(luma, x, CurveBlend); color.rgb = x + chroma; #elif (CurveType == 1) //Only Chroma @@ -1338,54 +1622,18 @@ color.rgb = lerp(color.rgb, LColor, CurveBlend); #endif - color.a = RGBLuminance(color.rgb); + color.a = AvgLuminance(color.rgb); return saturate(color); } #endif /*------------------------------------------------------------------------------ - [CEL SHADING CODE SECTION] + [CEL SHADING CODE SECTION] ------------------------------------------------------------------------------*/ -#if (CEL_SHADING == 1) -float3 GetYUV(float3 RGB) -{ - #if (GLSL == 1) - const mat3 RGB2YUV = mat3(0.2126, 0.7152, 0.0722, - -0.09991,-0.33609, 0.436, - 0.615, -0.55861, -0.05639); - - return (RGB * RGB2YUV); - #else - const float3x3 RGB2YUV = { 0.2126, 0.7152, 0.0722, - -0.09991,-0.33609, 0.436, - 0.615, -0.55861, -0.05639 }; - - return mul(RGB2YUV, RGB); - - #endif -} - -float3 GetRGB(float3 YUV) -{ - #if (GLSL == 1) - const mat3 YUV2RGB = mat3(1.000, 0.000, 1.28033, - 1.000,-0.21482,-0.38059, - 1.000, 2.12798, 0.000); - - return (YUV * YUV2RGB); - #else - const float3x3 YUV2RGB = { 1.000, 0.000, 1.28033, - 1.000,-0.21482,-0.38059, - 1.000, 2.12798, 0.000 }; - - return mul(YUV2RGB, YUV); - - #endif -} - -float4 CelPass(float4 color, float2 texcoord) +#if CEL_SHADING == 1 +float4 CelPass(float4 color, float2 uv0) { float3 yuv; float3 sum = color.rgb; @@ -1409,99 +1657,184 @@ for (int i = 0; i < NUM; i++) { - col[i] = sample_tex(TextureSampler, texcoord + set[i] * RoundingOffset).rgb; + col[i] = sample_tex(TextureSampler, uv0 + set[i] * RoundingOffset).rgb; - #if (ColorRounding == 1) + #if ColorRounding == 1 col[i].r = round(col[i].r * thresholds.r) / thresholds.r; col[i].g = round(col[i].g * thresholds.g) / thresholds.g; col[i].b = round(col[i].b * thresholds.b) / thresholds.b; #endif - lum[i] = RGBLuminance(col[i].xyz); - yuv = GetYUV(col[i]); + lum[i] = AvgLuminance(col[i].xyz); + yuv = RGBtoYUV(col[i]); - #if (UseYuvLuma == 0) + #if UseYuvLuma == 0 yuv.r = round(yuv.r * thresholds.r) / thresholds.r; #else yuv.r = saturate(round(yuv.r * lum[i]) / thresholds.r + lum[i]); #endif - yuv = GetRGB(yuv); + yuv = YUVtoRGB(yuv); sum += yuv; } float3 shadedColor = (sum / NUM); float2 pixel = float2(pixelSize.x * EdgeThickness, pixelSize.y * EdgeThickness); - float edgeX = dot(sample_tex(TextureSampler, texcoord + pixel).rgb, lumCoeff); - edgeX = dot(float4(sample_tex(TextureSampler, texcoord - pixel).rgb, edgeX), float4(lumCoeff, -1.0)); + float edgeX = dot(sample_tex(TextureSampler, uv0 + pixel).rgb, lumCoeff); + edgeX = dot(float4(sample_tex(TextureSampler, uv0 - pixel).rgb, edgeX), float4(lumCoeff, -1.0)); - float edgeY = dot(sample_tex(TextureSampler, texcoord + float2(pixel.x, -pixel.y)).rgb, lumCoeff); - edgeY = dot(float4(sample_tex(TextureSampler, texcoord + float2(-pixel.x, pixel.y)).rgb, edgeY), float4(lumCoeff, -1.0)); + float edgeY = dot(sample_tex(TextureSampler, uv0 + float2(pixel.x, -pixel.y)).rgb, lumCoeff); + edgeY = dot(float4(sample_tex(TextureSampler, uv0 + float2(-pixel.x, pixel.y)).rgb, edgeY), float4(lumCoeff, -1.0)); float edge = dot(float2(edgeX, edgeY), float2(edgeX, edgeY)); - #if (PaletteType == 1) - color.rgb = lerp(color.rgb, color.rgb + pow(edge, EdgeFilter) * -EdgeStrength, EdgeStrength); + #if PaletteType == 1 + color.rgb = lerp(color.rgb, color.rgb + pow(edge, EdgeFilter) * -EdgeStrength, EdgeStrength); #elif (PaletteType == 2) - color.rgb = lerp(color.rgb + pow(edge, EdgeFilter) * -EdgeStrength, shadedColor, 0.30); + color.rgb = lerp(color.rgb + pow(edge, EdgeFilter) * -EdgeStrength, shadedColor, 0.25); #elif (PaletteType == 3) - color.rgb = lerp(shadedColor + edge * -EdgeStrength, pow(edge, EdgeFilter) * -EdgeStrength + color.rgb, 0.5); + color.rgb = lerp(shadedColor + edge * -EdgeStrength, pow(edge, EdgeFilter) * -EdgeStrength + color.rgb, 0.5); #endif - color.a = RGBLuminance(color.rgb); + color.a = AvgLuminance(color.rgb); return saturate(color); } #endif /*------------------------------------------------------------------------------ - [COLOR GRADING CODE SECTION] + [PAINT SHADING CODE SECTION] ------------------------------------------------------------------------------*/ -#if (COLOR_GRADING == 1) -float RGBCVtoHUE(float3 RGB, float C, float V) +#if PAINT_SHADING == 1 +float3 PaintShading(float3 color, float2 texcoord) { - float3 Delta = (V - RGB) / C; + #if PaintMethod == 1 + float2 tex; + int k, j, lum, cmax = 0; + + float C0, C1, C2, C3, C4, C5, C6, C7, C8, C9; + float3 A, B, C, D, E, F, G, H, I, J, shade; + + for (k = int(-PaintRadius); k < (int(PaintRadius) + 1); k++){ + for (j = int(-PaintRadius); j < (int(PaintRadius) + 1); j++){ + + tex.x = texcoord.x + pixelSize.x * k; + tex.y = texcoord.y + pixelSize.y * j; + + shade = sample_tex(TextureSampler, tex).xyz; + + lum = AvgLuminance(shade) * 9.0; + + C0 = (lum == 0) ? C0 + 1 : C0; + C1 = (lum == 1) ? C1 + 1 : C1; + C2 = (lum == 2) ? C2 + 1 : C2; + C3 = (lum == 3) ? C3 + 1 : C3; + C4 = (lum == 4) ? C4 + 1 : C4; + C5 = (lum == 5) ? C5 + 1 : C5; + C6 = (lum == 6) ? C6 + 1 : C6; + C7 = (lum == 7) ? C7 + 1 : C7; + C8 = (lum == 8) ? C8 + 1 : C8; + C9 = (lum == 9) ? C9 + 1 : C9; + + A = (lum == 0) ? A + shade : A; + B = (lum == 1) ? B + shade : B; + C = (lum == 2) ? C + shade : C; + D = (lum == 3) ? D + shade : D; + E = (lum == 4) ? E + shade : E; + F = (lum == 5) ? F + shade : F; + G = (lum == 6) ? G + shade : G; + H = (lum == 7) ? H + shade : H; + I = (lum == 8) ? I + shade : I; + J = (lum == 9) ? J + shade : J; + }} + + if (C0 > cmax){ cmax = C0; color.xyz = A / cmax; } + if (C1 > cmax){ cmax = C1; color.xyz = B / cmax; } + if (C2 > cmax){ cmax = C2; color.xyz = C / cmax; } + if (C3 > cmax){ cmax = C3; color.xyz = D / cmax; } + if (C4 > cmax){ cmax = C4; color.xyz = E / cmax; } + if (C5 > cmax){ cmax = C5; color.xyz = F / cmax; } + if (C6 > cmax){ cmax = C6; color.xyz = G / cmax; } + if (C7 > cmax){ cmax = C7; color.xyz = H / cmax; } + if (C8 > cmax){ cmax = C8; color.xyz = I / cmax; } + if (C9 > cmax){ cmax = C9; color.xyz = J / cmax; } - Delta.rgb -= Delta.brg; - Delta.rgb += float3(2.0, 4.0, 6.0); - Delta.brg = step(V, RGB) * Delta.brg; + #else + int j, i; - float H; - H = max(Delta.r, max(Delta.g, Delta.b)); - return frac(H / 6); -} + float3 m0, m1, m2, m3, k0, k1, k2, k3, shade; + float n = float((PaintRadius + 1.0) * (PaintRadius + 1.0)); -float3 RGBtoHSV(float3 RGB) -{ - float3 HSV = float3(0.0, 0.0, 0.0); - HSV.z = max(RGB.r, max(RGB.g, RGB.b)); - float M = min(RGB.r, min(RGB.g, RGB.b)); - float C = HSV.z - M; + for (j = int(-PaintRadius); j <= 0; ++j) { + for (i = int(-PaintRadius); i <= 0; ++i) { - if (C != 0) - { - HSV.x = RGBCVtoHUE(RGB, C, HSV.z); - HSV.y = C / HSV.z; - } + shade = sample_tex(TextureSampler, texcoord + float2(i, j) / screenSize).rgb; + m0 += shade; k0 += shade * shade; }} + + for (j = int(-PaintRadius); j <= 0; ++j) { + for (i = 0; i <= int(PaintRadius); ++i) { + shade = sample_tex(TextureSampler, texcoord + float2(i, j) / screenSize).rgb; + m1 += shade; k1 += shade * shade; }} - return HSV; + for (j = 0; j <= int(PaintRadius); ++j) { + for (i = 0; i <= int(PaintRadius); ++i) { + shade = sample_tex(TextureSampler, texcoord + float2(i, j) / screenSize).rgb; + m2 += shade; k2 += shade * shade; }} + + float min_sigma2 = 1e+2; + m0 /= n; k0 = abs(k0 / n - m0 * m0); + + float sigma2 = k0.r + k0.g + k0.b; + if (sigma2 < min_sigma2) { + min_sigma2 = sigma2; color = m0; } + + m1 /= n; k1 = abs(k1 / n - m1 * m1); + sigma2 = k1.r + k1.g + k1.b; + + if (sigma2 < min_sigma2) { + min_sigma2 = sigma2; + color = m1; } + + m2 /= n; k2 = abs(k2 / n - m2 * m2); + sigma2 = k2.r + k2.g + k2.b; + + if (sigma2 < min_sigma2) { + min_sigma2 = sigma2; + color = m2; } + #endif + + return color; } -float3 HUEtoRGB(float H) +float4 PaintPass(float4 color, float2 texcoord) { - float R = abs(H * 6 - 3) - 1; - float G = 2 - abs(H * 6 - 2); - float B = 2 - abs(H * 6 - 4); + float3 paint = PaintShading(color.rgb, texcoord); + color.rgb = lerp(color.rgb, paint, float(PaintStrength)); + color.a = AvgLuminance(color.rgb); - return saturate(float3(R, G, B)); + return color; } +#endif -float3 HSVtoRGB(float3 HSV) + +/*------------------------------------------------------------------------------ + [COLOR GRADING CODE SECTION] +------------------------------------------------------------------------------*/ + +#if COLOR_GRADING == 1 +float RGBCVtoHUE(float3 RGB, float C, float V) { - float3 RGB = HUEtoRGB(HSV.x); - return ((RGB - 1) * HSV.y + 1) * HSV.z; + float3 Delta = (V - RGB) / C; + + Delta.rgb -= Delta.brg; + Delta.rgb += float3(2.0, 4.0, 6.0); + Delta.brg = step(V, RGB) * Delta.brg; + + float H; + H = max(Delta.r, max(Delta.g, Delta.b)); + return frac(H / 6); } float3 HSVComplement(float3 HSV) @@ -1557,7 +1890,7 @@ } color.rgb = HSVtoRGB(HSVColor); - color.a = RGBLuminance(color.rgb); + color.a = AvgLuminance(color.rgb); return saturate(color); } @@ -1567,16 +1900,16 @@ [SCANLINES CODE SECTION] ------------------------------------------------------------------------------*/ -#if (SCANLINES == 1) +#if SCANLINES == 1 float4 ScanlinesPass(float4 color, float2 texcoord, float4 fragcoord) { float4 intensity; - #if (GLSL == 1) + #if GLSL == 1 fragcoord = gl_FragCoord; #endif - #if (ScanlineType == 0) + #if ScanlineType == 0 if (frac(fragcoord.y * 0.25) > ScanlineScale) #elif (ScanlineType == 1) if (frac(fragcoord.x * 0.25) > ScanlineScale) @@ -1588,7 +1921,7 @@ } else { - intensity = smoothstep(0.2, ScanlineBrightness, color) + normalize(float4(color.xyz, RGBLuminance(color.xyz))); + intensity = smoothstep(0.2, ScanlineBrightness, color) + normalize(float4(color.xyz, AvgLuminance(color.xyz))); } float level = (4.0 - texcoord.x) * ScanlineIntensity; @@ -1603,7 +1936,7 @@ [VIGNETTE CODE SECTION] ------------------------------------------------------------------------------*/ -#if (VIGNETTE == 1) +#if VIGNETTE == 1 float4 VignettePass(float4 color, float2 texcoord) { const float2 VignetteCenter = float2(0.500, 0.500); @@ -1624,36 +1957,51 @@ [SUBPIXEL DITHERING CODE SECTION] ------------------------------------------------------------------------------*/ -#if (DITHERING == 1) +#if SP_DITHERING == 1 +float Randomize(float2 texcoord) +{ + float seed = dot(texcoord, float2(12.9898, 78.233)); + float sine = sin(seed); + float noise = frac(sine * 43758.5453); + + return noise; +} + float4 DitherPass(float4 color, float2 texcoord) { - float ditherSize = 2.0; float ditherBits = 8.0; - #if DitherMethod == 2 //random subpixel dithering - - float seed = dot(texcoord, float2(12.9898, 78.233)); - float sine = sin(seed); - float noise = frac(sine * 43758.5453 + texcoord.x); + #if DitherMethod == 2 //random dithering + float noise = Randomize(texcoord); float ditherShift = (1.0 / (pow(2.0, ditherBits) - 1.0)); float ditherHalfShift = (ditherShift * 0.5); ditherShift = ditherShift * noise - ditherHalfShift; color.rgb += float3(-ditherShift, ditherShift, -ditherShift); - #else //Ordered dithering + #if ShowMethod == 1 + color.rgb = noise; + #endif + + #elif DitherMethod == 1 //ordered dithering - float gridPosition = frac(dot(texcoord, (screenSize / ditherSize)) + (0.5 / ditherSize)); - float ditherShift = (0.75) * (1.0 / (pow(2, ditherBits) - 1.0)); + float2 ditherSize = float2(1.0 / 16.0, 10.0 / 36.0); + float gridPosition = frac(dot(texcoord, (screenSize * ditherSize)) + 0.25); + float ditherShift = (0.25) * (1.0 / (pow(2.0, ditherBits) - 1.0)); float3 RGBShift = float3(ditherShift, -ditherShift, ditherShift); RGBShift = lerp(2.0 * RGBShift, -2.0 * RGBShift, gridPosition); color.rgb += RGBShift; + + #if ShowMethod == 1 + color.rgb = gridPosition; #endif - color.a = RGBLuminance(color.rgb); + #endif + + color.a = AvgLuminance(color.rgb); return color; } @@ -1670,7 +2018,7 @@ float2 border = (_rcpFrame.xy * BorderWidth); float2 within_border = saturate((-tex * tex + tex) - (-border * border + border)); - #if (GLSL == 1) + #if GLSL == 1 // FIXME GLSL any only support bvec so try to mix it with notEqual bvec2 cond = notEqual( within_border, vec2(0.0f) ); colorInput.rgb = all(cond) ? colorInput.rgb : border_color_float; @@ -1686,13 +2034,13 @@ [MAIN() & COMBINE PASS CODE SECTION] ------------------------------------------------------------------------------*/ -#if (GLSL == 1) +#if GLSL == 1 void ps_main() #else PS_OUTPUT ps_main(VS_OUTPUT input) #endif { - #if (GLSL == 1) + #if GLSL == 1 float2 texcoord = PSin.t; float4 position = PSin.p; float4 color = texture(TextureSampler, texcoord); @@ -1704,79 +2052,91 @@ float4 color = sample_tex(TextureSampler, texcoord); #endif - #if (BILINEAR_FILTERING == 1) - color = BiLinearPass(color, texcoord); + #if BILINEAR_FILTERING == 1 + color = BiLinearPass(color, texcoord); + #endif + + #if GAUSSIAN_FILTERING == 1 + color = GaussianPass(color, texcoord); #endif - #if (GAUSSIAN_FILTERING == 1) - color = GaussianPass(color, texcoord); + #if BICUBIC_FILTERING == 1 + color = BiCubicPass(color, texcoord); #endif - #if (BICUBIC_FILTERING == 1) - color = BiCubicPass(color, texcoord); + #if BICUBLIC_SCALER == 1 + color = BiCubicScalerPass(color, texcoord); #endif - #if (BICUBLIC_SCALAR == 1) - color = BiCubicScalarPass(color, texcoord); + #if LANCZOS_SCALER == 1 + color = LanczosScalerPass(color, texcoord); #endif - #if (LANCZOS_SCALAR == 1) - color = LanczosScalarPass(color, texcoord); + #if UHQ_FXAA == 1 + color = FxaaPass(color, texcoord); #endif - #if (UHQ_FXAA == 1) - color = FxaaPass(color, texcoord); + #if TEXTURE_SHARPEN == 1 + color = TexSharpenPass(color, texcoord); #endif - #if (TEXTURE_SHARPEN == 1) - color = TexSharpenPass(color, texcoord); + #if PAINT_SHADING == 1 + color = PaintPass(color, texcoord); #endif - #if (CEL_SHADING == 1) - color = CelPass(color, texcoord); + #if CEL_SHADING == 1 + color = CelPass(color, texcoord); #endif - #if (SCANLINES == 1) - color = ScanlinesPass(color, texcoord, position); + #if GAMMA_CORRECTION == 1 + color = GammaPass(color, texcoord); #endif - #if (BLENDED_BLOOM == 1) - color = BloomPass(color, texcoord); + #if PIXEL_VIBRANCE == 1 + color = VibrancePass(color, texcoord); #endif - #if (SCENE_TONEMAPPING == 1) - color = TonemapPass(color, texcoord); + #if COLOR_GRADING == 1 + color = ColorGrading(color, texcoord); #endif - #if (PIXEL_VIBRANCE == 1) - color = VibrancePass(color, texcoord); + #if COLOR_CORRECTION == 1 + color = CorrectionPass(color, texcoord); #endif - #if (COLOR_GRADING == 1) - color = ColorGrading(color, texcoord); + #if CROSS_PROCESSING == 1 + color = CrossPass(color, texcoord); #endif - #if (S_CURVE_CONTRAST == 1) - color = ContrastPass(color, texcoord); + #if SCENE_TONEMAPPING == 1 + color = TonemapPass(color, texcoord); #endif - #if (GAMMA_CORRECTION == 1) - color = GammaPass(color, texcoord); + #if BLENDED_BLOOM == 1 + color = BloomPass(color, texcoord); #endif - #if (VIGNETTE == 1) - color = VignettePass(color, texcoord); + #if CURVE_CONTRAST == 1 + color = ContrastPass(color, texcoord); #endif - #if (PX_BORDER == 1) - color = BorderPass(color, texcoord); + #if VIGNETTE == 1 + color = VignettePass(color, texcoord); + #endif + + #if SCANLINES == 1 + color = ScanlinesPass(color, texcoord, position); #endif - #if (DITHERING == 1) - color = DitherPass(color, texcoord); + #if SP_DITHERING == 1 + color = DitherPass(color, texcoord); + #endif + + #if PX_BORDER == 1 + color = BorderPass(color, texcoord); #endif - #if (GLSL == 1) + #if GLSL == 1 SV_Target0 = color; #else output.c = color; diff -Nru pcsx2-1.3.1+dfsg/bin/shaders/GSdx_FX_Settings.ini pcsx2-1.4.0/bin/shaders/GSdx_FX_Settings.ini --- pcsx2-1.3.1+dfsg/bin/shaders/GSdx_FX_Settings.ini 2014-11-15 21:37:05.000000000 +0000 +++ pcsx2-1.4.0/bin/shaders/GSdx_FX_Settings.ini 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ /*===============================================================================*\ -|######################## [GSdx FX Suite v2.20] ########################| +|######################## [GSdx FX Suite v2.30] ########################| |########################## By Asmodean ##########################| || || || This program is free software; you can redistribute it and/or || @@ -10,146 +10,161 @@ || 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. (c)2014 || +|| GNU General Public License for more details. (c)2015 || || || |#################################################################################| \*===============================================================================*/ -//#NOTICE: This post-processing suite requires Direct3D10(Shader Model 4.0), or higher. +//#NOTICE: GSdx FX is not compatible with GSdx9. Use GSdx OGL or DX10/11. /*------------------------------------------------------------------------------ - [DEFINITIONS & ON/OFF OPTIONS] + [DEFINITIONS & ON/OFF OPTIONS] ------------------------------------------------------------------------------*/ -//---------------------------#[CHOOSE EFFECTS]#--------------------------------\\ +//--------------------------#[CHOOSE EFFECTS]#--------------------------------\\ -//-#[ANTIALIASING TECHNIQUES] [1=ON|0=OFF] #READ: For best results: Use gsdx fx antialiasing OR FS filtering. Not both. -#define UHQ_FXAA 0 //#High Quality Fast Approximate Anti Aliasing. Adapted for GSdx from Timothy Lottes FXAA 3.11. If using GSdx's internal FXAA, this equals FXAA2x. [3D] +//#[ANTIALIASING TECHNIQUES] [1=ON|0=OFF] #READ: For best results: Use gsdx fx antialiasing OR filtering. Not both together. +#define UHQ_FXAA 0 //# High Quality Fast Approximate Anti Aliasing. If GSdx's internal FXAA is also enabled, this equals FXAA2x.[3D] -//-#[FS SCALING TECHNIQUES] [1=ON|0=OFF] #READ: For best results: Only enable one type of filtering at one time. Use post antialiasing OR FS filtering, not both. -#define BILINEAR_FILTERING 0 //#BiLinear Fullscreen Texture Filtering. BiLinear filtering - light to medium filtering of textures. [2D] -#define BICUBIC_FILTERING 0 //#Bicubic Fullscreen Texture Filtering. BiCubic filtering - medium to strong filtering of textures. [2D] -#define GAUSSIAN_FILTERING 0 //#Gaussian Fullscreen Texture Filtering. Gaussian filtering - strong to extra strong filtering of textures. [2D] -#define BICUBLIC_SCALAR 0 //#Bicubic Interpolation Scaling. Uses BCS on up scaling, and downsampling of games, for smoother scaling. -#define LANCZOS_SCALAR 0 //#Lanczos Interpolation Scaling. Uses Lanczos on up scaling, and downsampling of games for smoother scaling. - -//-#[LIGHTING & COLOUR] [1=ON|0=OFF] #READ: These can all be turned on & off independently of each other. [For High Dynamic Range(HDR) use Bloom & Tonemapping together] -#define BLENDED_BLOOM 1 //#High Quality Bloom, using blend techniques. Blooms naturally, per environment. -#define SCENE_TONEMAPPING 1 //#Scene Tonemapping & RGB Colour Correction. Corrects colour, and tone maps the scene. -#define GAMMA_CORRECTION 1 //#RGB Gamma Correction. sRGB->Linear->sRGB correction curve. Enable for games with incorrect gamma. -#define TEXTURE_SHARPEN 0 //#Bicubic Texture Unsharpen Mask. Looks similar to a negative LOD bias. Enhances texture fidelity. -#define PIXEL_VIBRANCE 0 //#Pixel Vibrance. Intelligently adjusts pixel vibrance depending on original saturation. -#define S_CURVE_CONTRAST 0 //#S-Curve Scene Contrast Enhancement. Locally adjusts contrast using S-curves. -#define COLOR_GRADING 0 //#Post-Complement Colour Grading. Alters individual colour components on a scene, to enhance selected colour tones. -#define CEL_SHADING 0 //#PX Cel Shading. Simulates the look of animation/toon. Typically best suited for animated style games. - -//-#[TV EMU TECHNIQUES] [1=ON|0=OFF] #READ: These can all be turned on & off independently of each other. These effects are typically used to simulated older TVs/CRT etc. -#define SCANLINES 0 //#Scanlines to simulate the look of a CRT TV. Typically suited to sprite games. Note: Works best at Native Res. -#define VIGNETTE 0 //#Darkens the edges of the screen, to make it look more like it was shot with a camera lens. -#define DITHERING 0 //#Subpixel Dithering to simulate more colors than your monitor can display. Smoothes gradiants, this can reduce color banding. -#define PX_BORDER 0 //#Creates a pixel border, as a workaround for the bright edge that using hardware antialiasing(MSAA) can cause. (Ported by request from SFX). +//#[FS SCALING TECHNIQUES] [1=ON|0=OFF] #READ: For best results: Only enable one type of filtering at one time. Use post antialiasing OR FS filtering, not both. +#define BILINEAR_FILTERING 0 //# Bilinear Fullscreen Texture Filtering. BiLinear filtering - light to medium filtering of textures.[2D] +#define BICUBIC_FILTERING 0 //# Bicubic Fullscreen Texture Filtering. BiCubic filtering - medium to strong filtering of textures.[2D] +#define GAUSSIAN_FILTERING 0 //# Gaussian Fullscreen Texture Filtering. Gaussian filtering - strong to extra strong filtering of textures.[2D] +#define BICUBLIC_SCALER 0 //# Bicubic Interpolation Scaling. Uses BCS on up scaling, and downsampling of games, for smoother scaling. +#define LANCZOS_SCALER 0 //# Lanczos Interpolation Scaling. Uses Lanczos on up scaling, and downsampling of games for smoother scaling. + +//#[LIGHTING & COLOUR] [1=ON|0=OFF] #READ: These can all be turned on & off independently of each other. [For High Dynamic Range(HDR) use Bloom & Tonemapping together] +#define BLENDED_BLOOM 1 //# High Quality SP Bloom. Soft lighting with blending techniques, for a natural looking bloom. +#define SCENE_TONEMAPPING 1 //# HDR Scene Tonemapping. Layered component conversion, and applies scene tone mapping. +#define COLOR_CORRECTION 0 //# Component Color Correction. Colorspace conversion, with correction curves, and multiple palette types. +#define CROSS_PROCESSING 0 //# Filmic Cross Processing. Alters the tone of the scene, crossing the game's color set, with another. +#define GAMMA_CORRECTION 0 //# RGB Gamma Correction. Fixed expansion to variable compression gamma correction curve. +#define PIXEL_VIBRANCE 1 //# Pixel Vibrance. Intelligently adjusts pixel vibrance depending on original color saturation. +#define COLOR_GRADING 0 //# Post-Complement Colour Grading. Alters individual colour components on a scene, to enhance selected colour tones. +#define TEXTURE_SHARPEN 0 //# Bicubic Texture Unsharpen Mask. Looks similar to a negative texture LOD bias. Enhances texture fidelity. +#define CURVE_CONTRAST 0 //# S-Curve Scene Contrast Enhancement. Locally adjusts contrast using a four-point cubic bezier spline. +#define CEL_SHADING 0 //# PX Cel Shading. Simulates the look of animation/toon. Typically best suited for animated style games. +#define PAINT_SHADING 0 //# Paint Shading. Creates the effect of a painted scene. Adapted from ENB series, it's pretty performance heavy. + +//#[TV EMU TECHNIQUES] [1=ON|0=OFF] #READ: These can all be turned on & off independently of each other. These effects are typically used to simulated older TVs/CRT etc. +#define SCANLINES 0 //# Scanlines to simulate the look of a CRT TV. Typically suited to sprite games. Note: Works best at Native Res. +#define VIGNETTE 0 //# Darkens the edges of the screen, to make it look more like it was shot with a camera lens. +#define SP_DITHERING 0 //# Subpixel Dithering to simulate more colors than your monitor can display. Smoothes gradiants, this can reduce color banding. +#define PX_BORDER 0 //# Creates a pixel border, as a workaround for the bright edge that using hardware antialiasing(MSAA) can cause. (Ported by request from SFX). /*------------------------------------------------------------------------------ [EFFECT CONFIG OPTIONS] ------------------------------------------------------------------------------*/ -//##[FXAA OPTIONS]## -#define FxaaSubpixMax 0.25 //[0.00 to 1.00] Amount of subpixel aliasing removal. Higher values: softer. Lower values: sharper. 0.00: Edge only. -#define FxaaQuality 4 //[1|2|3|4] Overall Fxaa quality preset (pixel coverage). 1: Low, 2: Medium, 3: High, 4: Ultra. -#define FxaaEarlyExit 1 //[0 or 1] Use Fxaa early exit pathing. When enabled: Only luma edge pixels are antialiased. When disabled: the entire scene is antialiased(FSAA). - -//##[BILINEAR OPTIONS]## -#define FilterStrength 1.00 //[0.10 to 1.50] Bilinear filtering strength. Controls the overall strength of the filtering. -#define OffsetAmount 0.0 //[0.0 to 1.5] Pixel offset amount. If you want to use an st offset, 0.5 is generally recommended. 0.0 is off. - -//##[BICUBIC OPTIONS]## -#define Interpolation Triangular //[CatMullRom, Bell, BSpline, Triangular, Cubic] Type of interpolation to use. From left to right is lighter<-->stronger filtering. -#define BicubicStrength 0.75 //[0.10 to 1.50] Bicubic filtering strength. Controls the overall strength of the filtering. -#define PixelOffset 0.0 //[0.0 to 1.5] Pixel offset amount. If you want to use an st offset, 0.5 is generally recommended. 0.0 is off. - -//##[GAUSSIAN OPTIONS]## -#define FilterAmount 1.00 //[0.10 to 1.50] Gaussian filtering strength. Controls the overall strength of the filtering. -#define GaussianSpread 0.75 //[0.50 to 4.00] The filtering spread & offset levels. Controls the sampling spread of the filtering. - -//##[BLOOM OPTIONS]## -#define BloomType BlendGlow //[BlendGlow, BlendLuma, BlendAddLight, BlendScreen, BlendOverlay] The type of blending for the bloom. -#define BloomStrength 0.250 //[0.100 to 1.000] Overall strength of the bloom. You may want to readjust for each blend type. -#define BlendStrength 1.000 //[0.100 to 1.000] Strength of the bloom blend. Lower for less blending, higher for more. (Default: 1.000). -#define BloomWidth 4.000 //[1.000 to 8.000] Width of the bloom 'glow' spread. 0.000 = off. Scales with BloomStrength. (Default: 4.000). -#define BloomReds 1.00 //[0.00 to 8.00] Red channel component of the RGB correction curve. Higher values equals red reduction. 1.00 is default. -#define BloomGreens 1.00 //[0.00 to 8.00] Green channel component of the RGB correction curve. Higher values equals green reduction. 1.00 is default. -#define BloomBlues 1.00 //[0.00 to 8.00] Blue channel component of the RGB correction curve. Higher values equals blue reduction. 1.00 is default. - -//##[TONEMAP OPTIONS]## -#define TonemapType 1 //[1 or 2] Type of tone mapping operator. 1 is natural map, 2 is cinematic(darker) map. (Default: 1) -#define ToneAmount 0.30 //[0.10 to 1.00] Tonemap strength (scene correction) higher for stronger tone mapping, lower for lighter. (Default: ~ 0.25) -#define BlackLevels 0.30 //[0.10 to 1.00] Black level balance (shadow correction). Increase to lighten blacks, lower to deepen them. (Default: ~ 0.30) -#define Exposure 1.00 //[0.10 to 2.00] White correction (brightness) Higher values for more Exposure, lower for less. -#define Luminance 1.00 //[0.10 to 2.00] Luminance average (luminance correction) Higher values to decrease luminance average, lower values to increase luminance. -#define WhitePoint 1.02 //[0.10 to 2.00] Whitepoint avg (lum correction) Use to alter the scene whitepoint average. Raising can give a cinema look. - -//##[CORRECTION OPTIONS]## -#define CorrectionPalette 1 //[0|1|2|3] The colour correction palette type. 1: RGB, 2: YUV, 3: XYZ, 0: off. 1 is default. This requires tone mapping enabled. -#define RedCurve 1.00 //[1.00 to 8.00] Red channel component of the RGB correction curve. Higher values equals red reduction. 1.00 is default. -#define GreenCurve 1.00 //[1.00 to 8.00] Green channel component of the RGB correction curve. Higher values equals green reduction. 1.00 is default. -#define BlueCurve 1.00 //[1.00 to 8.00] Blue channel component of the RGB correction curve. Higher values equals blue reduction. 1.00 is default. - -//##[FILMIC OPTIONS]## -#define FilmicProcess 0 //[0 or 1] Filmic cross processing. Alters the mood of the scene, for more of a filmic look. Typically best suited to realistic style games. -#define RedShift 0.50 //[0.10 to 1.00] Red colour component shift of the filmic tone shift. Alters the red balance of the shift. Requires FilmicProcess. -#define GreenShift 0.45 //[0.10 to 1.00] Green colour component shift of the filmic tone shift. Alters the green balance of the shift. Requires FilmicProcess. -#define BlueShift 0.45 //[0.10 to 1.00] Blue colour component shift of the filmic tone shift. Alters the blue balance of the shift. Requires FilmicProcess. -#define ShiftRatio 0.25 //[0.10 to 1.00] The blending ratio for the base colour and the colour shift. Higher for a stronger effect. Requires FilmicProcess. - -//##[SHARPEN OPTIONS]## -#define SharpeningType 2 //[1 or 2] The type of sharpening to use. Type 1 is a High Pass Gaussian. Type 2 is a higher quality(slightly slower) Bicubic Sampling type. -#define SharpenStrength 0.75 //[0.10 to 1.00] Strength of the texture luma sharpening effect. This is the maximum strength that will be used. -#define SharpenClamp 0.015 //[0.005 to 0.500] Reduces the clamping/limiting on the maximum amount of sharpening each pixel recieves. Raise this to reduce the clamping. -#define SharpenBias 1.00 //[1.00 to 4.00] Sharpening edge bias. Lower values for clean subtle sharpen, and higher values for a deeper textured sharpen. -#define DebugSharpen 0 //[0 or 1] Visualize the sharpening effect. Useful for fine-tuning. Best to disable other effects, to see edge detection clearly. - -//##[GRADING OPTIONS]## -#define RedGrading 1.00 //[0.0 to 3.0] Red colour grading coefficient. Adjust to influence the red channel coefficients of the grading, and highlight tones. -#define GreenGrading 1.00 //[0.0 to 3.0] Green colour grading coefficient. Adjust to influence the Green channel coefficients of the grading, and highlight tones. -#define BlueGrading 1.00 //[0.0 to 3.0] Blue colour grading coefficient. Adjust to influence the Blue channel coefficients of the grading, and highlight tones. -#define GradingStrength 0.25 //[0.00 to 1.00] The overall max strength of the colour grading effect. Raise to increase, lower to decrease the amount. -#define Correlation 1.00 //[0.10 to 1.00] Correlation between the base colour, and the grading influence. Lower = more of the scene is graded, Higher = less of the scene is graded. - -//##[CSHADE OPTIONS]## -#define EdgeStrength 1.50 //[0.00 to 4.00] Overall strength of the cel edge outline effect. 0.00 = no outlines. -#define EdgeFilter 0.60 //[0.10 to 2.00] Filters out fainter cel edges. Use it for balancing the cel edge density. EG: for faces, foliage, etc. Raise to filter out more edges. -#define EdgeThickness 1.00 //[0.50 to 4.00] Thickness of the cel edges. Increase for thicker outlining. Note: when downsampling, raise this further to keep the edges as noticeable. -#define PaletteType 2 //[1|2|3] The colour palette to use. 1 is Game Original, 2 is Animated Shading, 3 is Water Painting (Default is 2: Animated Shading). #!Options below don't affect palette 1. -#define UseYuvLuma 0 //[0 or 1] Uses YUV luma calculations, or base colour luma calculations. Yuv luma can produce a better shaded look, but if it looks odd, disable it for that game. -#define LumaConversion 1 //[0 or 1] Uses BT.601, or BT.709, RGB<-YUV->RGB conversions. Some games prefer 601, but most prefer 709. BT.709 is typically recommended. -#define ColorRounding 1 //[0 or 1] Uses rounding methods on colors. This can emphasise shaded toon colors. Looks good in some games, and odd in others. Try it in-game and see. - -//##[SCANLINE OPTIONS]## -#define ScanlineType 0 //[0|1|2] The type & orientation of the scanlines. 0 is x(horizontal), 1 is y(vertical), 2 is both(xy) -#define ScanlineScale 0.50 //[0.20 to 2.00] The scaling & thickness of the scanlines. Changing this can help with PCSX2 IR scaling problems. -#define ScanlineIntensity 0.18 //[0.10 to 1.00] The intensity of the scanlines. Defaults: 0.18 for ScanlineType 0|1|2, 0.50 for ScanlineType 3. -#define ScanlineBrightness 1.00 //[0.50 to 2.00] The brightness of the scanlines. Defaults: 2.00 for ScanlineType 0|1|2, 1.50 for ScanlineType 3. - -//##[VIGNETTE OPTIONS]## -#define VignetteRatio 1.77 //[0.15 to 6.00] Sets the espect ratio of the vignette. 1.77 for 16:9, 1.60 for 16:10, 1.33 for 4:3, 1.00 for 1:1. -#define VignetteRadius 1.10 //[0.50 to 3.00] Radius of the vignette effect. Lower values for stronger radial effect from center -#define VignetteAmount 0.25 //[0.00 to 1.00] Strength of black edge occlusion. Increase for higher strength, decrease for lower. -#define VignetteSlope 12 //[2|4|8|10|12|16] How far away from the center the vignetting will start. - -//##[CONTRAST OPTIONS]## -#define CurveType 0 //[0|1|2] Choose what to apply contrast to. 0 = Luma, 1 = Chroma, 2 = both Luma and Chroma. Default is 0 (Luma) -#define CurvesContrast 0.35 //[0.00 to 2.00] The amount of contrast you want. Controls the overall strength of the texture sharpening. - -//##[VIBRANCE OPTIONS]## -#define Vibrance 0.20 //[-1.00 to 1.00] Adjust the vibrance of pixels depending on their original saturation. 0.00 is original vibrance. - -//##[GAMMA OPTIONS]## -#define Gamma 2.20 //[1.5 to 4.0] Gamma correction. Decrease for lower gamma(darker). Increase for higher gamma(brighter). (Default: 2.2) - -//##[DITHERING OPTIONS]## -#define DitherMethod 2 //[1 or 2] 1 is Ordering dithering(faster, lower quality), 2 is Random dithering (better dithering, but not as fast) - -//##[BORDER OPTIONS]## -#define BorderWidth float2(2, 2) //[0 to 2048, 0 to 2048] (X,Y)-width of the border. Measured in pixels. -#define BorderColor float3(0, 0, 0) //[0 to 255, 0 to 255, 0 to 255] What color the border should be. In integer RGB colors, meaning 0,0,0 is black and 255,255,255 is full white. +//##[UHQ_FXAA] +#define FxaaSubpixMax 0.00 //[0.00 to 1.00] Amount of subpixel aliasing removal. Higher values: softer. Lower values: sharper. 0.00: Edge only. +#define FxaaQuality 4 //[1|2|3|4] Overall Fxaa quality preset (pixel coverage). 1: Low, 2: Medium, 3: High, 4: Ultra. +#define FxaaEarlyExit 1 //[0 or 1] Use Fxaa early exit pathing. When enabled: Only luma edge pixels are antialiased. When disabled: the entire scene is antialiased(FSAA). + +//##[BILINEAR_FILTERING] +#define FilterStrength 1.00 //[0.10 to 1.50] Bilinear filtering strength. Controls the overall strength of the filtering. +#define OffsetAmount 0.0 //[0.0 to 1.5] Pixel offset amount. If you want to use an st offset, 0.5 is generally recommended. 0.0 is off. + +//##[BICUBIC_FILTERING] +#define Interpolation Triangular //[CatMullRom, Bell, BSpline, Triangular, Cubic] Type of interpolation to use. From left to right is lighter<-->stronger filtering. +#define BicubicStrength 0.75 //[0.10 to 1.50] Bicubic filtering strength. Controls the overall strength of the filtering. +#define PixelOffset 0.0 //[0.0 to 1.5] Pixel offset amount. If you want to use an st offset, 0.5 is generally recommended. 0.0 is off. + +//##[GAUSSIAN_FILTERING] +#define FilterAmount 1.00 //[0.10 to 1.50] Gaussian filtering strength. Controls the overall strength of the filtering. +#define GaussianSpread 0.75 //[0.50 to 4.00] The filtering spread & offset levels. Controls the sampling spread of the filtering. + +//##[BLENDED BLOOM] +#define BloomType BlendGlow //[BlendGlow, BlendAddGlow, BlendAddLight, BlendScreen, BlendLuma, BlendOverlay] The type of blended bloom. Light<->Dark. +#define BloomStrength 0.220 //[0.000 to 1.000] Overall strength of the bloom. You may want to readjust for each blend type. +#define BlendStrength 1.000 //[0.000 to 1.000] Strength of the blending. This is a modifier based on bloom. 1.0 equates to 100% strength. +#define BloomDefocus 2.000 //[1.000 to 4.000] The initial bloom defocus value. Increases the softness of light, bright objects, etc. +#define BloomWidth 3.200 //[1.000 to 8.000] Width of the bloom. Adjusts the width of the spread and soft glow. Scales with BloomStrength. +#define BloomReds 0.040 //[0.000 to 1.000] Red channel correction of the bloom. Raising will increase the bloom of reds. +#define BloomGreens 0.030 //[0.000 to 1.000] Green channel correction of the bloom. Raising will increase the bloom of greens. +#define BloomBlues 0.020 //[0.000 to 1.000] Blue channel correction of the bloom. Raising will increase the bloom of blues. + +//##[SCENE TONEMAPPING] +#define TonemapType 1 //[0|1|2|3] The base tone mapping operator. 0 is LDR, 1 is HDR(original), 2 & 3 are Filmic HDR(slight grading). +#define TonemapMask 0 //[0 or 1] Enables an ALU tone masking curve. Produces a nice cinematic look. Suits some games more than others. +#define MaskStrength 0.30 //[0.000 to 1.000] Strength of the tone masking. Higher for a stronger effect. This is a dependency of TonemapMask. +#define ToneAmount 0.300 //[0.050 to 1.000] Tonemap strength (tone correction). Higher for stronger tone mapping, lower for lighter. +#define BlackLevels 0.060 //[0.000 to 1.000] Black level balance (shadow correction). Increase to deepen blacks, lower to lighten them. +#define Exposure 1.000 //[0.100 to 2.000] White correction (brightness). Higher values for more scene exposure, lower for less. +#define Luminance 1.000 //[0.100 to 2.000] Luminance average (luminance correction). Higher values will lower scene luminance average. +#define WhitePoint 1.000 //[0.100 to 2.000] Whitepoint average (wp lum correction). Higher values will lower the maximum scene white point. + +//##[COLOR CORRECTION] +#define CorrectionPalette 1 //[1|2|3|4|5] The colorspace palette type. 1: RGB, 2: YXY, 3: XYZ, 4: HSV, 5: YUV. Each one will produce a different combination of shades & hues. +#define ChannelR 1.20 //[0.00 to 8.00] R(1), Y(2), X(3), H(4), Y(5) component channel varies with the colorspace used. Higher values increase correction strength. +#define ChannelG 1.60 //[0.00 to 8.00] G(1), X(2), Y(3), S(4), U(5) component channel varies with the colorspace used. Higher values increase correction strength. +#define ChannelB 1.80 //[0.00 to 8.00] B(1), Y(2), Z(3), V(4), V(5) component channel varies with the colorspace used. Higher values increase correction strength. +#define PaletteStrength 1.00 //[0.00 to 2.00] The interpolated strength ratio between the base color, and the corrected color. Raise to increase saturation. + +//##[CROSS PROCESSING] +#define FilmicProcess 1 //[1|2|3] The color conversion type for the cross process. 1: cool, 2: warm, 3: dusk. You can achieve different results with each. +#define RedShift 0.50 //[0.10 to 1.00] Red color component shift of the filmic processing. Alters the red balance of the shift. +#define GreenShift 0.50 //[0.10 to 1.00] Green color component shift of the filmic processing. Alters the green balance of the shift. +#define BlueShift 0.50 //[0.10 to 1.00] Blue color component shift of the filmic processing. Alters the blue balance of the shift. +#define ShiftRatio 0.50 //[0.10 to 2.00] The blending ratio for the base color and the color shift. Higher for a stronger effect. + +//##[TEXTURE SHARPEN] +#define SharpenStrength 0.75 //[0.10 to 2.00] Strength of the texture sharpening effect. This is the maximum strength that will be used. +#define SharpenClamp 0.015 //[0.005 to 0.500] Reduces the clamping/limiting on the maximum amount of sharpening each pixel recieves. Raise this to reduce the clamping. +#define SharpenBias 1.20 //[0.50 to 4.00] Sharpening edge bias. Lower values for clean subtle sharpen, and higher values for a deeper textured sharpen. +#define DebugSharpen 0 //[0 or 1] Visualize the sharpening effect. Useful for fine-tuning. Best to disable other effects, to see edge detection clearly. + +//##[PIXEL VIBRANCE] +#define Vibrance 0.10 //[-1.00 to 1.00] Overall vibrance strength. Locally adjusts the vibrance of pixels depending on their original saturation. +#define RedVibrance 1.00 //[-8.00 to 8.00] Red channel coefficient of the vibrance strength. Adjusting the vibrance of the red channel independently. +#define GreenVibrance 1.00 //[-8.00 to 8.00] Green channel coefficient of the vibrance strength. Adjusting the vibrance of the green channel independently. +#define BlueVibrance 1.00 //[-8.00 to 8.00] Blue channel coefficient of the vibrance strength. Adjusting the vibrance of the blue channel independently. + +//##[COLOR_GRADING] +#define RedGrading 1.20 //[0.00 to 3.00] Red colour grading coefficient. Adjust to influence the red channel coefficients of the grading, and highlight tones. +#define GreenGrading 1.10 //[0.00 to 3.00] Green colour grading coefficient. Adjust to influence the Green channel coefficients of the grading, and highlight tones. +#define BlueGrading 1.10 //[0.00 to 3.00] Blue colour grading coefficient. Adjust to influence the Blue channel coefficients of the grading, and highlight tones. +#define GradingStrength 0.25 //[0.00 to 1.00] The overall max strength of the colour grading effect. Raise to increase, lower to decrease the amount. +#define Correlation 1.00 //[0.10 to 1.00] Correlation between the base colour, and the grading influence. Lower = more of the scene is graded, Higher = less of the scene is graded. + +//##[CEL SHADING] +#define EdgeStrength 1.00 //[0.00 to 4.00] Overall strength of the cel edge outline effect. Affects the overall density. 0.00: no outlines. +#define EdgeFilter 0.60 //[0.10 to 2.00] Filters out fainter cel edges. Use it for balancing the cel edge density. EG: for faces, foliage, etc. +#define EdgeThickness 1.00 //[0.50 to 4.00] Thickness of the cel edges. Increase for thicker outlining. Note: when downsampling, raise this to keep the same thickness. +#define PaletteType 2 //[1|2|3] The color palette to use. 1 is Game Original, 2 is Animated Shading, 3 is Water Painting (Default is 2: Animated Shading). +#define UseYuvLuma 0 //[0 or 1] Uses YUV luma calculations, or base color luma calculations. Yuv luma can produce a better shaded look. +#define LumaConversion 1 //[0 or 1] Uses BT.601, or BT.709, RGB<-YUV->RGB conversions. Some games prefer 601, but most prefer 709. BT.709 is typically recommended. +#define ColorRounding 1 //[0 or 1] Uses rounding methods on colors. This can emphasise shaded toon colors. Looks good in some games, and odd in others. + +//##[PAINT SHADING] +#define PaintMethod 2 //[1 or 2] The algorithm used for paint effect. 1: water painting, 2: oil painting. You may want to readjust the radius between the two. +#define PaintRadius 4 //[2 to 8] Radius of the painted effect, increasing the radius also requires longer loops, so higher values require more performance. +#define PaintStrength 1.00 //[0.00 to 1.00] The overall interpolated strength of the paint effect. Where 1.0 equates to 100% strength. + +//##[CURVE_CONTRAST] +#define CurveType 0 //[0|1|2] Choose what to apply contrast to. 0 = Luma, 1 = Chroma, 2 = both Luma and Chroma. Default is 0 (Luma) +#define CurvesContrast 0.35 //[0.00 to 2.00] The amount of contrast you want. Controls the overall strength of the texture sharpening. + +//##[GAMMA_CORRECTION] +#define Gamma 2.20 //[1.5 to 4.0] Gamma correction. Decrease for lower gamma(darker). Increase for higher gamma(brighter). (Default: 2.2) + +//##[SCANLINES] +#define ScanlineType 0 //[0|1|2] The type & orientation of the scanlines. 0 is x(horizontal), 1 is y(vertical), 2 is both(xy) +#define ScanlineScale 0.50 //[0.20 to 2.00] The scaling & thickness of the scanlines. Changing this can help with PCSX2 IR scaling problems. +#define ScanlineIntensity 0.18 //[0.10 to 1.00] The intensity of the scanlines. Defaults: 0.18 for ScanlineType 0|1|2, 0.50 for ScanlineType 3. +#define ScanlineBrightness 1.02 //[0.50 to 2.00] The brightness of the scanlines. Defaults: 2.00 for ScanlineType 0|1|2, 1.50 for ScanlineType 3. + +//##[VIGNETTE] +#define VignetteRatio 1.77 //[0.15 to 6.00] Sets the espect ratio of the vignette. 1.77 for 16:9, 1.60 for 16:10, 1.33 for 4:3, 1.00 for 1:1. +#define VignetteRadius 1.10 //[0.50 to 3.00] Radius of the vignette effect. Lower values for stronger radial effect from center +#define VignetteAmount 0.25 //[0.00 to 1.00] Strength of black edge occlusion. Increase for higher strength, decrease for lower. +#define VignetteSlope 12 //[2|4|8|10|12|16] How far away from the center the vignetting will start. + +//##[SUBPIXEL DITHERING] +#define DitherMethod 2 //[1 or 2] 1: Ordered grid dithering(faster), 2: random dithering(higher quality). Hardware dithering is also enabled by default. +#define ShowMethod 0 //[0 or 1] Shows the dithering method, based of the type of dithering selected. Useful for debugging, and confirmation of working order. + +//##[PX_BORDER] +#define BorderWidth float2(2, 2) //[0 to 2048, 0 to 2048] (X,Y)-width of the border. Measured in pixels. +#define BorderColor float3(0, 0, 0) //[0 to 255, 0 to 255, 0 to 255] What color the border should be. In integer RGB colors, meaning 0,0,0 is black and 255,255,255 is full white. //[END OF USER OPTIONS] diff -Nru pcsx2-1.3.1+dfsg/buildbot.xml pcsx2-1.4.0/buildbot.xml --- pcsx2-1.3.1+dfsg/buildbot.xml 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/buildbot.xml 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + true + BuildInParallel=True; + CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=$(CreateHardLinksIfPossible); + CreateHardLinksForCopyAdditionalFilesIfPossible=$(CreateHardLinksIfPossible); + CreateHardLinksForCopyLocalIfPossible=$(CreateHardLinksIfPossible); + CreateHardLinksForPublishFilesIfPossible=$(CreateHardLinksIfPossible); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Debug + + + + + + + + + Devel + + + + + + + + + Release + + + + + + diff -Nru pcsx2-1.3.1+dfsg/build.cmd pcsx2-1.4.0/build.cmd --- pcsx2-1.3.1+dfsg/build.cmd 2014-08-04 16:14:32.000000000 +0000 +++ pcsx2-1.4.0/build.cmd 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -REM PCSX2 - PS2 Emulator for PCs -REM Copyright (C) 2002-2011 PCSX2 Dev Team -REM -REM PCSX2 is free software: you can redistribute it and/or modify it under the terms -REM of the GNU Lesser General Public License as published by the Free Software Found- -REM ation, either version 3 of the License, or (at your option) any later version. -REM -REM PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -REM without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -REM PURPOSE. See the GNU General Public License for more details. -REM -REM You should have received a copy of the GNU General Public License along with PCSX2. -REM If not, see . -REM -REM Ensure use Visual Studio Developer Command Prompt -REM Example, into Solution Folder (pcsx2\) -REM build.cmd "Debug" or -REM build.cmd "Release" or -REM build.cmd "Release AVX" - -@echo off -SET Configuration=%1 -call clean_msvc.cmd -MSBuild.exe pcsx2_suite_2013.sln /m /p:BuildInParallel=true /p:CreateHardLinksForCopyLocalIfPossible=true /t:Clean,Rebuild /p:Configuration=%Configuration% diff -Nru pcsx2-1.3.1+dfsg/build.sh pcsx2-1.4.0/build.sh --- pcsx2-1.3.1+dfsg/build.sh 2015-01-06 20:54:55.000000000 +0000 +++ pcsx2-1.4.0/build.sh 2016-01-05 17:28:08.000000000 +0000 @@ -22,19 +22,23 @@ useClang=0 # 0 => no, 1 => yes, 2 => force yes useCross=2 +CoverityBuild=0 +cppcheck=0 +clangTidy=0 for ARG in "$@"; do case "$ARG" in --clean ) cleanBuild=1 ;; - --clang ) useClang=1; ;; + --clang-tidy ) flags+=(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON); clangTidy=1 ;; + --clang ) useClang=1 ;; + --cppcheck ) cppcheck=1 ;; --dev|--devel ) flags+=(-DCMAKE_BUILD_TYPE=Devel) ;; --dbg|--debug ) flags+=(-DCMAKE_BUILD_TYPE=Debug) ;; --strip ) flags+=(-DCMAKE_BUILD_STRIP=TRUE) ;; --release ) flags+=(-DCMAKE_BUILD_TYPE=Release) ;; --glsl ) flags+=(-DGLSL_API=TRUE) ;; --egl ) flags+=(-DEGL_API=TRUE) ;; - --gles ) flags+=(-DGLES_API=TRUE) ;; - --sdl2 ) flags+=(-DSDL2_API=TRUE) ;; + --sdl12 ) flags+=(-DSDL2_API=FALSE) ;; --extra ) flags+=(-DEXTRA_PLUGINS=TRUE) ;; --asan ) flags+=(-DUSE_ASAN=TRUE) ;; --wx28 ) flags+=(-DWX28_API=TRUE) ;; @@ -42,6 +46,7 @@ --no-simd ) flags+=(-DDISABLE_ADVANCE_SIMD=TRUE) ;; --cross-multilib ) flags+=(-DCMAKE_TOOLCHAIN_FILE=cmake/linux-compiler-i386-multilib.cmake); useCross=1; ;; --no-cross-multilib ) useCross=0; ;; + --coverity ) CoverityBuild=1; cleanBuild=1; ;; -D* ) flags+=($ARG) ;; *) @@ -56,18 +61,24 @@ echo "--no-simd : Only allow sse2" echo echo "** Developer option **" - echo "--wx28 : Force wxWidget 2.8" echo "--glsl : Replace CG backend of ZZogl by GLSL" - echo "--egl : Replace GLX by EGL (ZZogl plugins only)" - echo "--sdl2 : Build with SDL2 (crashes if wx is linked to SDL1.2)" - echo "--gles : Replace openGL backend of GSdx by openGLES3.1" + echo "--egl : Replace GLX by EGL (ZZogl/GSdx plugins)" echo "--cross-multilib: Build a 32bit PCSX2 on a 64bit machine using multilib." echo + echo "** Distribution Compatibilities **" + echo "--sdl12 : Build with SDL1.2 (requires if wx is linked against SDL1.2)" + echo "--wx28 : Force wxWidget 2.8" + echo echo "** Expert Developer option **" echo "--gtk3 : replace GTK2 by GTK3" echo "--no-cross-multilib: Build a native PCSX2" echo "--clang : Build with Clang/llvm" + echo + echo "** Quality & Assurance (Please install the external tool) **" echo "--asan : Enable Address sanitizer" + echo "--clang-tidy : Do a clang-tidy analysis. Results can be found in build directory" + echo "--cppcheck : Do a cppcheck analysis. Results can be found in build directory" + echo "--coverity : Do a build for coverity" exit 1 esac @@ -76,6 +87,8 @@ root=$PWD/$(dirname "$0") log=$root/install_log.txt build=$root/build +coverity_dir=cov-int +coverity_result=pcsx2-coverity.xz if [[ "$cleanBuild" -eq 1 ]]; then echo "Doing a clean build." @@ -118,6 +131,71 @@ ncpu=$(grep -w -c processor /proc/cpuinfo) fi +############################################################ +# CPP check build +############################################################ +if [[ "$cppcheck" -eq 1 ]] && [[ -x `which cppcheck` ]]; then + summary=cpp_check_summary.log + rm -f $summary + touch $summary + + for undef in _WINDOWS _M_AMD64 _MSC_VER WIN32 __INTEL_COMPILER __x86_64__ \ + __SSE4_1__ __SSSE3__ __SSE__ __AVX2__ __USE_ISOC11 ASAN_WORKAROUND ENABLE_OPENCL ENABLE_OGL_DEBUG + do + define="$define -U$undef" + done + check="--enable=warning,style,missingInclude" + for d in pcsx2 common plugins/GSdx plugins/spu2\-x plugins/onepad + do + flat_d=`echo $d | sed -e 's@/@_@'` + log=cpp_check__${flat_d}.log + rm -f $log + + cppcheck $check -j $ncpu --platform=unix32 $define $root/$d |& tee $log + # Create a small summary (warning it might miss some issues) + fgrep -e "(warning)" -e "(error)" -e "(style)" -e "(performance)" -e "(portability)" $log >> $summary + done + exit 0 +fi + +############################################################ +# Clang tidy build +############################################################ +if [[ "$clangTidy" -eq 1 ]] && [[ -x `which clang-tidy` ]]; then + compile_json=compile_commands.json + cpp_list=cpp_file.txt + summary=clang_tidy_summary.txt + rm -f $summary + touch $summary + + grep '"file"' $compile_json | sed -e 's/"//g' | sed -e 's/^\s*file\s*:\s*//' > $cpp_list + + for cpp in `cat $cpp_list` + do + # Check all, likely severals millions of log... + #clang-tidy -p $compile_json $cpp -checks='*' -header-filter='.*' + + # Don't check header, don't check google/llvm coding conventions + echo "$count/$total" + clang-tidy -p $compile_json $cpp -checks='*,-llvm-*,-google-*' >> $summary + done + + exit 0 +fi + +############################################################ +# Coverity build +############################################################ +if [[ "$CoverityBuild" -eq 1 ]] && [[ -x `which cov-build` ]]; then + cov-build --dir $coverity_dir make -j"$ncpu" 2>&1 | tee -a $log + # Warning: $coverity_dir must be the root directory + (cd $build; tar caf $coverity_result $coverity_dir) + exit 0 +fi + +############################################################ +# Real build +############################################################ make -j"$ncpu" 2>&1 | tee -a $log make install 2>&1 | tee -a $log diff -Nru pcsx2-1.3.1+dfsg/clean_msvc.cmd pcsx2-1.4.0/clean_msvc.cmd --- pcsx2-1.3.1+dfsg/clean_msvc.cmd 2010-04-27 16:20:49.000000000 +0000 +++ pcsx2-1.4.0/clean_msvc.cmd 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -:: clean_msvc.cmd -:: -:: This batch file cleans up some files that MSVC's Clean/Rebuild commands tend to miss. In -:: particular the .ilk and .pdb files are known to get corrupted and cause all sorts of odd linker -:: linker errors, and the .ncb files can also get corrupted and cause intellisense breakges. -:: -:: Safety: This tool should be pretty safe. It uses the command path to perform the deletion, -:: instead of relying on the CWD (which can sometimes fail to be set when working with UNCs across -:: network shares). Furthermore, none of the files it deletes are important. That is, they're -:: all files MSVC just rebuilds automatically next time you run/recompile. The one minor -:: exception is *.pdb, since windows and a lot of developer tools include PDB sets to assist in -:: application debugging (however these files are by no means required by any software). - -del /s "%~dp0\*.ncb" -del /s "%~dp0\*.obj" -del /s "%~dp0\bin\*.ilk" -del /s "%~dp0\*.idb" -del /s "%~dp0\*.bsc" -del /s "%~dp0\*.sbr" -del /s "%~dp0\*.pch" -del /s "%~dp0\*.pdb" - -del /s /q "%~dp0\deps" - -:: These two can't be used currently because they match unwanted 4+ letter extensions, such -:: as *.resx and *.tmpl ... wow, stupid. >_< - -:: del /s "%~dp0\*.tmp" -:: del /s "%~dp0\*.res" diff -Nru pcsx2-1.3.1+dfsg/cmake/BuildParameters.cmake pcsx2-1.4.0/cmake/BuildParameters.cmake --- pcsx2-1.3.1+dfsg/cmake/BuildParameters.cmake 2015-01-17 11:08:24.000000000 +0000 +++ pcsx2-1.4.0/cmake/BuildParameters.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -21,33 +21,40 @@ # Misc option #------------------------------------------------------------------------------- option(DISABLE_SVU "Disable superVU (don't use it)") +option(DISABLE_BUILD_DATE "Disable including the binary compile date") + +if(DISABLE_BUILD_DATE OR openSUSE) + message(STATUS "Disabling the inclusion of the binary compile date.") + add_definitions(-DDISABLE_BUILD_DATE) +endif() #------------------------------------------------------------------------------- # Graphical option #------------------------------------------------------------------------------- -option(GLSL_API "Replace zzogl CG backend by GLSL (experimental option)") -option(EGL_API "Use EGL on zzogl (experimental/developer option)") -option(GLES_API "Use GLES on GSdx (experimental/developer option)") -option(REBUILD_SHADER "Rebuild glsl/cg shader (developer option)") +option(GLSL_API "Replace ZZogl CG backend by GLSL (experimental option)") +option(EGL_API "Use EGL on ZZogl/GSdx (experimental/developer option)") +option(REBUILD_SHADER "Rebuild GLSL/CG shader (developer option)") option(BUILD_REPLAY_LOADERS "Build GS replayer to ease testing (developer option)") #------------------------------------------------------------------------------- # Path and lib option #------------------------------------------------------------------------------- option(PACKAGE_MODE "Use this option to ease packaging of PCSX2 (developer/distribution option)") +option(DISABLE_CHEATS_ZIP "Disable including the cheats_ws.zip file") +option(DISABLE_PCSX2_WRAPPER "Disable including the PCSX2-linux.sh file") option(XDG_STD "Use XDG standard path instead of the standard PCSX2 path") option(EXTRA_PLUGINS "Build various 'extra' plugins") -option(SDL2_API "Use SDL2 on spu2x and onepad (experimental/wxWidget mustn't be built with SDL1.2 support") +option(SDL2_API "Use SDL2 on spu2x and onepad (wxWidget mustn't be built with SDL1.2 support" ON) option(WX28_API "Force wxWidget 2.8 lib (deprecated)") option(GTK3_API "Use GTK3 api (experimental/wxWidget must be built with GTK3 support)") if(PACKAGE_MODE) if(NOT DEFINED PLUGIN_DIR) - set(PLUGIN_DIR "${CMAKE_INSTALL_PREFIX}/lib/games/pcsx2") + set(PLUGIN_DIR "${CMAKE_INSTALL_PREFIX}/lib/games/PCSX2") endif() if(NOT DEFINED GAMEINDEX_DIR) - set(GAMEINDEX_DIR "${CMAKE_INSTALL_PREFIX}/share/games/pcsx2") + set(GAMEINDEX_DIR "${CMAKE_INSTALL_PREFIX}/share/games/PCSX2") endif() if(NOT DEFINED BIN_DIR) @@ -55,7 +62,7 @@ endif() if(NOT DEFINED DOC_DIR) - set(DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/pcsx2") + set(DOC_DIR "${CMAKE_INSTALL_PREFIX}/share/doc/PCSX2") endif() # Compile all source codes with those defines @@ -117,14 +124,17 @@ # - Only plugins. No package will link to them. set(CMAKE_POSITION_INDEPENDENT_CODE OFF) - if (DISABLE_ADVANCE_SIMD) - set(ARCH_FLAG "-msse -msse2 -march=i686") - else() - # AVX requires some fix of the ABI (mangling) (default 2) - # Note: V6 requires GCC 4.7 - #set(ARCH_FLAG "-march=native -fabi-version=6") - set(ARCH_FLAG "-march=native") + if(NOT DEFINED ARCH_FLAG) + if (DISABLE_ADVANCE_SIMD) + set(ARCH_FLAG "-msse -msse2 -mfxsr -march=i686") + else() + # AVX requires some fix of the ABI (mangling) (default 2) + # Note: V6 requires GCC 4.7 + #set(ARCH_FLAG "-march=native -fabi-version=6") + set(ARCH_FLAG "-march=native") + endif() endif() + add_definitions(-D_ARCH_32=1 -D_M_X86=1 -D_M_X86_32=1) set(_ARCH_32 1) set(_M_X86 1) @@ -136,11 +146,13 @@ # SuperVU will not be ported set(DISABLE_SVU TRUE) - if (DISABLE_ADVANCE_SIMD) - set(ARCH_FLAG "-msse -msse2") - else() - #set(ARCH_FLAG "-march=native -fabi-version=6") - set(ARCH_FLAG "-march=native") + if(NOT DEFINED ARCH_FLAG) + if (DISABLE_ADVANCE_SIMD) + set(ARCH_FLAG "-msse -msse2 -mfxsr") + else() + #set(ARCH_FLAG "-march=native -fabi-version=6") + set(ARCH_FLAG "-march=native") + endif() endif() add_definitions(-D_ARCH_64=1 -D_M_X86=1 -D_M_X86_64=1) set(_ARCH_64 1) @@ -219,7 +231,9 @@ #------------------------------------------------------------------------------- # Set some default compiler flags #------------------------------------------------------------------------------- -set(COMMON_FLAG "-pipe -std=c++0x -fvisibility=hidden -pthread") +option(USE_LTO "Enable LTO optimization (will likely break the build)") + +set(COMMON_FLAG "-pipe -fvisibility=hidden -pthread -fno-builtin-strcmp -fno-builtin-memcmp") if (DISABLE_SVU) set(COMMON_FLAG "${COMMON_FLAG} -DDISABLE_SVU") endif() @@ -231,35 +245,62 @@ # -Wno-unused-value: lots of warning for this kind of statements "0 && ...". There are used to disable some parts of code in release/dev build. set(DEFAULT_WARNINGS "-Wall -Wno-attributes -Wno-missing-field-initializers -Wno-unused-function -Wno-unused-parameter -Wno-unused-variable -Wno-unused-value ") # -Wstrict-aliasing=n: to fix one day aliasing issue. n=1/2/3 -set(AGGRESSIVE_WARNING "-Wstrict-aliasing -Wstrict-overflow=4 ") +set(AGGRESSIVE_WARNING "-Wstrict-aliasing -Wstrict-overflow=2 ") if (USE_CLANG) # -Wno-deprecated-register: glib issue... set(DEFAULT_WARNINGS "${DEFAULT_WARNINGS} -Wno-deprecated-register") set(COMMON_FLAG "${COMMON_FLAG} -no-integrated-as") + set(DBG "-g") +else() + set(DBG "-ggdb") +endif() + +if (USE_LTO) + #gcc --print-file-name=liblto_plugin.so + #set(LTO_FLAGS "-fuse-linker-plugin -flto=4 --plugin=/usr/lib/gcc/x86_64-linux-gnu/4.9/liblto_plugin.so") + #set(LTO_FLAGS "-fuse-linker-plugin -fuse-ld=gold -flto=4 --plugin=/usr/lib/gcc/x86_64-linux-gnu/4.9/liblto_plugin.so") + set(LTO_FLAGS "-fuse-linker-plugin -fuse-ld=gold -flto=4") + #set(LINK_FLAGS "--plugin=/usr/lib/gcc/x86_64-linux-gnu/4.9/liblto_plugin.so") + set(USER_CMAKE_LD_FLAGS "--plugin /usr/lib/gcc/x86_64-linux-gnu/4.9/liblto_plugin.so") + set(DBG "") # not supported with LTO +else() + set(LTO_FLAGS "") endif() if(CMAKE_BUILD_TYPE MATCHES "Debug") - set(DEBUG_FLAG "-g") + set(DEBUG_FLAG "${DBG}") elseif(CMAKE_BUILD_TYPE MATCHES "Devel") - set(DEBUG_FLAG "-g -DNDEBUG") + set(DEBUG_FLAG "${DBG} -DNDEBUG") elseif(CMAKE_BUILD_TYPE MATCHES "Release") set(DEBUG_FLAG "-DNDEBUG") endif() if (USE_ASAN) - set(ASAN_FLAG "-fsanitize=address -fno-omit-frame-pointer -g -DASAN_WORKAROUND") - if(${PCSX2_TARGET_ARCHITECTURES} MATCHES "i386") - set(ASAN_FLAG "${ASAN_FLAG} -mpreferred-stack-boundary=4 -mincoming-stack-boundary=2") - endif() + set(ASAN_FLAG "-fsanitize=address -fno-omit-frame-pointer ${DBG} -DASAN_WORKAROUND") else() set(ASAN_FLAG "") endif() +if(NOT DEFINED OPTIMIZATION_FLAG) + if (CMAKE_BUILD_TYPE STREQUAL Debug) + set(OPTIMIZATION_FLAG -O0) + else() + set(OPTIMIZATION_FLAG -O2) + endif() +endif() + +if (NOT DEFINED PGO) + set(PGO "none") + set(GCOV_LIBRARIES "") +else() + set(GCOV_LIBRARIES "-lgcov") +endif() + # Note: -DGTK_DISABLE_DEPRECATED can be used to test a build without gtk deprecated feature. It could be useful to port to a newer API -set(DEFAULT_GCC_FLAG "${ARCH_FLAG} ${COMMON_FLAG} ${DEFAULT_WARNINGS} ${AGGRESSIVE_WARNING} ${HARDENING_FLAG} ${DEBUG_FLAG} ${ASAN_FLAG}") +set(DEFAULT_GCC_FLAG "${ARCH_FLAG} ${COMMON_FLAG} ${DEFAULT_WARNINGS} ${AGGRESSIVE_WARNING} ${HARDENING_FLAG} ${DEBUG_FLAG} ${ASAN_FLAG} ${OPTIMIZATION_FLAG} ${LTO_FLAGS}") # c++ only flags -set(DEFAULT_CPP_FLAG "${DEFAULT_GCC_FLAG} -Wno-invalid-offsetof") +set(DEFAULT_CPP_FLAG "${DEFAULT_GCC_FLAG} -std=c++11 -Wno-invalid-offsetof") #------------------------------------------------------------------------------- # Allow user to set some default flags diff -Nru pcsx2-1.3.1+dfsg/cmake/CheckLib.cmake pcsx2-1.4.0/cmake/CheckLib.cmake --- pcsx2-1.3.1+dfsg/cmake/CheckLib.cmake 2014-12-28 03:15:08.000000000 +0000 +++ pcsx2-1.4.0/cmake/CheckLib.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -17,7 +17,7 @@ # Make sure include directories for headers found using find_path below # are re-added when reconfiguring include_directories(${${var}_INCLUDE}) - _internal_message("-- ${lib} found") + _internal_message("-- ${var} found") else() find_library(${var}_LIBRARIES ${lib}) if(_arg_list) @@ -25,16 +25,26 @@ else() set(${var}_INCLUDE FALSE) endif() - if(${var}_LIBRARIES AND ${var}_INCLUDE) - include_directories(${${var}_INCLUDE}) - _internal_message("-- ${lib} found") - set(${var}_FOUND 1 CACHE INTERNAL "") - elseif(${var}_LIBRARIES) - _internal_message("-- ${lib} not found (miss include)") - elseif(${var}_INCLUDE) - _internal_message("-- ${lib} not found (miss lib)") + if (${lib}) + if(${var}_LIBRARIES AND ${var}_INCLUDE) + include_directories(${${var}_INCLUDE}) + _internal_message("-- ${var} found") + set(${var}_FOUND 1 CACHE INTERNAL "") + elseif(${var}_LIBRARIES) + _internal_message("-- ${var} not found (miss include)") + elseif(${var}_INCLUDE) + _internal_message("-- ${var} not found (miss lib)") + else() + _internal_message("-- ${var} not found") + endif() else() - _internal_message("-- ${lib} not found") - endif() + if(${var}_INCLUDE) + include_directories(${${var}_INCLUDE}) + _internal_message("-- ${var} found") + set(${var}_FOUND 1 CACHE INTERNAL "") + else() + _internal_message("-- ${var} not found") + endif() + endif() endif() endmacro() diff -Nru pcsx2-1.3.1+dfsg/cmake/linux-compiler-i386-multilib.cmake pcsx2-1.4.0/cmake/linux-compiler-i386-multilib.cmake --- pcsx2-1.3.1+dfsg/cmake/linux-compiler-i386-multilib.cmake 2015-01-04 05:56:47.000000000 +0000 +++ pcsx2-1.4.0/cmake/linux-compiler-i386-multilib.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -4,9 +4,15 @@ # It could be i?86-*linux-gnu, x86_64-*linux-gnu, x86_64-*linux-gnux32, etc. # Leave it generic to only support amd64 or x32 to i386 with any compiler. -if("$ENV{CC}" STREQUAL "" OR "$ENV{CXX}" STREQUAL "") +if ("$ENV{CC}" STREQUAL "") set(CMAKE_C_COMPILER cc -m32) +elseif(NOT "$ENV{CC}" MATCHES "-m32") + set(CMAKE_C_COMPILER $ENV{CC} -m32) +endif() +if ("$ENV{CXX}" STREQUAL "") set(CMAKE_CXX_COMPILER c++ -m32) +elseif(NOT "$ENV{CXX}" MATCHES "-m32") + set(CMAKE_CXX_COMPILER $ENV{CXX} -m32) endif() # cmake 2.8.5 correctly sets CMAKE_LIBRARY_ARCHITECTURE for Debian multiarch. diff -Nru pcsx2-1.3.1+dfsg/cmake/Pcsx2Utils.cmake pcsx2-1.4.0/cmake/Pcsx2Utils.cmake --- pcsx2-1.3.1+dfsg/cmake/Pcsx2Utils.cmake 2015-01-07 02:14:10.000000000 +0000 +++ pcsx2-1.4.0/cmake/Pcsx2Utils.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -24,7 +24,6 @@ message(STATUS "Build Fedora specific") elseif("${OS_RELEASE}" MATCHES "^.*ID=.*suse.*$") set(openSUSE TRUE PARENT_SCOPE) - add_definitions(-DopenSUSE) message(STATUS "Build openSUSE specific") endif() endif() @@ -127,7 +126,7 @@ target_link_libraries(${exe} ${libs}) append_flags(${exe} "${flags}") if(NOT USER_CMAKE_LD_FLAGS STREQUAL "") - target_link_libraries(${lib} "${USER_CMAKE_LD_FLAGS}") + target_link_libraries(${exe} "${USER_CMAKE_LD_FLAGS}") endif(NOT USER_CMAKE_LD_FLAGS STREQUAL "") if(PACKAGE_MODE) install(TARGETS ${exe} DESTINATION ${BIN_DIR}) diff -Nru pcsx2-1.3.1+dfsg/cmake/SearchForStuff.cmake pcsx2-1.4.0/cmake/SearchForStuff.cmake --- pcsx2-1.3.1+dfsg/cmake/SearchForStuff.cmake 2015-01-09 12:44:26.000000000 +0000 +++ pcsx2-1.4.0/cmake/SearchForStuff.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -3,11 +3,13 @@ #------------------------------------------------------------------------------- ## Use cmake package to find module find_package(ALSA) -find_package(BZip2) find_package(Gettext) # translation tool -find_package(Git) -find_package(JPEG) +if(EXISTS ${PROJECT_SOURCE_DIR}/.git) + find_package(Git) +endif() +find_package(LibLZMA) find_package(OpenGL) +find_package(PNG) # The requirement of wxWidgets is checked in SelectPcsx2Plugins module # Does not require the module (allow to compile non-wx plugins) # Force the unicode build (the variable is only supported on cmake 2.8.3 and above) @@ -60,19 +62,27 @@ find_package(ZLIB) ## Use pcsx2 package to find module -include(FindCg) -include(FindGlew) include(FindLibc) +## Only needed by the extra plugins +if(EXTRA_PLUGINS) + find_package(BZip2) + include(FindCg) + include(FindGlew) + find_package(JPEG) +endif() + ## Use CheckLib package to find module include(CheckLib) if(Linux) check_lib(AIO aio libaio.h) endif() -check_lib(EGL EGL EGL/egl.h) -check_lib(GLESV2 GLESv2 GLES3/gl3ext.h) # NOTE: looking for GLESv3, not GLESv2 +if(EGL_API) + check_lib(EGL EGL EGL/egl.h) +endif() check_lib(PORTAUDIO portaudio portaudio.h pa_linux_alsa.h) check_lib(SOUNDTOUCH SoundTouch soundtouch/SoundTouch.h) +check_lib(PNGPP FALSE png++/png.hpp) if(SDL2_API) check_lib(SDL2 SDL2 SDL.h PATH_SUFFIXES SDL2) diff -Nru pcsx2-1.3.1+dfsg/cmake/SelectPcsx2Plugins.cmake pcsx2-1.4.0/cmake/SelectPcsx2Plugins.cmake --- pcsx2-1.3.1+dfsg/cmake/SelectPcsx2Plugins.cmake 2015-01-04 18:54:05.000000000 +0000 +++ pcsx2-1.4.0/cmake/SelectPcsx2Plugins.cmake 2016-01-05 17:28:08.000000000 +0000 @@ -5,8 +5,8 @@ set(msg_dep_pcsx2 "check these libraries -> wxWidgets (>=2.8.10), gtk2 (>=2.16), zlib (>=1.2.4), pcsx2 common libs") set(msg_dep_cdvdiso "check these libraries -> bzip2 (>=1.0.5), gtk2 (>=2.16)") set(msg_dep_zerogs "check these libraries -> glew (>=1.6), opengl, X11, nvidia-cg-toolkit (>=2.1)") -set(msg_dep_gsdx "check these libraries -> opengl, egl, X11") -set(msg_dep_onepad "check these libraries -> sdl (>=1.2)") +set(msg_dep_gsdx "check these libraries -> opengl, png++, X11") +set(msg_dep_onepad "check these libraries -> sdl (>=1.2), X11") set(msg_dep_spu2x "check these libraries -> soundtouch (>=1.5), alsa, portaudio (>=1.9), sdl (>=1.2) pcsx2 common libs") set(msg_dep_zerospu2 "check these libraries -> soundtouch (>=1.5), alsa") if(GLSL_API) @@ -15,6 +15,14 @@ set(msg_dep_zzogl "check these libraries -> glew (>=1.6), jpeg (>=6.2), opengl, X11, nvidia-cg-toolkit (>=2.1), pcsx2 common libs") endif() +macro(print_dep str dep) + if (PACKAGE_MODE) + message(FATAL_ERROR "${str}:${dep}") + else() + message(STATUS "${str}:${dep}") + endif() +endmacro(print_dep) + #------------------------------------------------------------------------------- # Pcsx2 core & common libs #------------------------------------------------------------------------------- @@ -43,8 +51,7 @@ set(common_libs FALSE) else() set(common_libs FALSE) - message(STATUS "Skip build of common libraries: miss some dependencies") - message(STATUS "${msg_dep_common_libs}") + print_dep("Skip build of common libraries: miss some dependencies" "${msg_dep_common_libs}") endif() #--------------------------------------- @@ -62,14 +69,12 @@ set(pcsx2_core FALSE) else() set(pcsx2_core FALSE) - message(STATUS "Skip build of pcsx2 core: miss some dependencies") - message(STATUS "${msg_dep_pcsx2}") + print_dep("Skip build of pcsx2 core: miss some dependencies" "${msg_dep_pcsx2}") endif() # Linux need also gtk2 if(UNIX AND pcsx2_core AND NOT GTKn_FOUND) set(pcsx2_core FALSE) - message(STATUS "Skip build of pcsx2 core: miss some dependencies") - message(STATUS "${msg_dep_pcsx2}") + print_dep("Skip build of pcsx2 core: miss some dependencies" "${msg_dep_pcsx2}") endif() @@ -102,8 +107,7 @@ set(CDVDiso FALSE) else() set(CDVDiso FALSE) - message(STATUS "Skip build of CDVDiso: miss some dependencies") - message(STATUS "${msg_dep_cdvdiso}") + print_dep("Skip build of CDVDiso: miss some dependencies" "${msg_dep_cdvdiso}") endif() endif() @@ -144,14 +148,13 @@ # requires: -OpenGL # -X11 #--------------------------------------- -if(OPENGL_FOUND AND X11_FOUND AND EGL_FOUND AND GTKn_FOUND) +if(OPENGL_FOUND AND X11_FOUND AND GTKn_FOUND AND PNG_FOUND AND (EGL_FOUND OR NOT EGL_API)) set(GSdx TRUE) elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSdx") - set(GSdx FALSE) + set(GSdx FALSE) else() - set(GSdx FALSE) - message(STATUS "Skip build of GSdx: miss some dependencies") - message(STATUS "${msg_dep_gsdx}") + set(GSdx FALSE) + print_dep("Skip build of GSdx: miss some dependencies" "${msg_dep_gsdx}") endif() #--------------------------------------- @@ -170,8 +173,7 @@ set(zerogs FALSE) else() set(zerogs FALSE) - message(STATUS "Skip build of zerogs: miss some dependencies") - message(STATUS "${msg_dep_zerogs}") + print_dep("Skip build of zerogs: miss some dependencies" "${msg_dep_zerogs}") endif() endif() #--------------------------------------- @@ -186,14 +188,15 @@ # -JPEG # -common_libs #--------------------------------------- -if((GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND JPEG_FOUND AND common_libs AND GTKn_FOUND) AND (CG_FOUND OR GLSL_API)) - set(zzogl TRUE) -elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg") - set(zzogl FALSE) -else() - set(zzogl FALSE) - message(STATUS "Skip build of zzogl: miss some dependencies") - message(STATUS "${msg_dep_zzogl}") +if(EXTRA_PLUGINS) + if((GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND JPEG_FOUND AND common_libs AND GTKn_FOUND) AND (CG_FOUND OR GLSL_API)) + set(zzogl TRUE) + elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg") + set(zzogl FALSE) + else() + set(zzogl FALSE) + print_dep("Skip build of zzogl: miss some dependencies" "${msg_dep_zzogl}") + endif() endif() #--------------------------------------- @@ -206,18 +209,30 @@ #--------------------------------------- #--------------------------------------- +# LilyPad +# requires: -X11 +#--------------------------------------- +# Not ready to be packaged +if(EXTRA_PLUGINS OR NOT PACKAGE_MODE) + if(GTKn_FOUND AND X11_FOUND) + set(LilyPad TRUE) + endif() +endif() +#--------------------------------------- + +#--------------------------------------- # onepad #--------------------------------------- # requires: -SDL +# -X11 #--------------------------------------- -if(SDLn_FOUND) +if(SDLn_FOUND AND X11_FOUND) set(onepad TRUE) elseif(NOT EXISTS "${CMAKE_SOURCE_DIR}/plugins/onepad") set(onepad FALSE) else() set(onepad FALSE) - message(STATUS "Skip build of onepad: miss some dependencies") - message(STATUS "${msg_dep_onepad}") + print_dep("Skip build of onepad: miss some dependencies" "${msg_dep_onepad}") endif() #--------------------------------------- @@ -244,8 +259,7 @@ set(spu2-x FALSE) else() set(spu2-x FALSE) - message(STATUS "Skip build of spu2-x: miss some dependencies") - message(STATUS "${msg_dep_spu2x}") + print_dep("Skip build of spu2-x: miss some dependencies" "${msg_dep_spu2x}") endif() #--------------------------------------- @@ -266,8 +280,7 @@ set(zerospu2 FALSE) else() set(zerospu2 FALSE) - message(STATUS "Skip build of zerospu2: miss some dependencies") - message(STATUS "${msg_dep_zerospu2}") + print_dep("Skip build of zerospu2: miss some dependencies" "${msg_dep_zerospu2}") endif() endif() #--------------------------------------- @@ -286,7 +299,6 @@ set(CDVDisoEFP FALSE) set(CDVDolio FALSE) set(CDVDpeops FALSE) -set(LilyPad FALSE) set(PeopsSPU2 FALSE) set(SSSPSXPAD FALSE) set(xpad FALSE) diff -Nru pcsx2-1.3.1+dfsg/CMakeLists.txt pcsx2-1.4.0/CMakeLists.txt --- pcsx2-1.3.1+dfsg/CMakeLists.txt 2014-12-22 20:02:44.000000000 +0000 +++ pcsx2-1.4.0/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -51,7 +51,7 @@ check_no_parenthesis_in_path() detectOperatingSystem() -check_compiler_version("4.7" "4.5") +check_compiler_version("4.8" "4.8") #------------------------------------------------------------------------------- # Include specific module @@ -88,7 +88,9 @@ #------------------------------------------------------------------------------- # Install some files to ease package creation if(PACKAGE_MODE) - INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/cheats_ws.zip" DESTINATION "${GAMEINDEX_DIR}") + if(NOT DISABLE_CHEATS_ZIP) + INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/cheats_ws.zip" DESTINATION "${GAMEINDEX_DIR}") + endif() INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/GameIndex.dbf" DESTINATION "${GAMEINDEX_DIR}") # set categories depending on system/distribution in pcsx2.desktop @@ -97,11 +99,14 @@ else() set(PCSX2_MENU_CATEGORIES "Game;Emulator;") endif() - configure_file("${CMAKE_SOURCE_DIR}/linux_various/pcsx2.desktop.in" "${CMAKE_BINARY_DIR}/linux_various/pcsx2.desktop" @ONLY) + configure_file("${CMAKE_SOURCE_DIR}/linux_various/PCSX2.desktop.in" "${CMAKE_BINARY_DIR}/linux_various/PCSX2.desktop" @ONLY) - INSTALL(FILES "${CMAKE_BINARY_DIR}/linux_various/pcsx2.desktop" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/linux_various/pcsx2.xpm" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/PCSX2_FAQ.pdf" DESTINATION "${DOC_DIR}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/PCSX2_Readme.pdf" DESTINATION "${DOC_DIR}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/pcsx2.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/") + INSTALL(FILES "${CMAKE_BINARY_DIR}/linux_various/PCSX2.desktop" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/linux_various/PCSX2.xpm" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/PCSX2_FAQ.pdf" DESTINATION "${DOC_DIR}") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/PCSX2_Readme.pdf" DESTINATION "${DOC_DIR}") + INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/docs/PCSX2.1" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/") + if(NOT DISABLE_PCSX2_WRAPPER) + INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/PCSX2-linux.sh" DESTINATION "${BIN_DIR}") + endif() endif() diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities.vcxproj pcsx2-1.4.0/common/build/Utilities/utilities.vcxproj --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities.vcxproj 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -18,21 +18,25 @@ {4639972E-424E-4E13-8B07-CA403C481346} x86emitter Win32Proj + utilities StaticLibrary Unicode true + $(DefaultPlatformToolset)_xp StaticLibrary Unicode true + $(DefaultPlatformToolset)_xp StaticLibrary Unicode + $(DefaultPlatformToolset)_xp @@ -95,7 +99,11 @@ - + + true + true + true + @@ -150,6 +158,7 @@ + @@ -162,6 +171,7 @@ + @@ -182,12 +192,14 @@ - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false + + {3fcc50c2-81e9-5db2-b8d8-2129427568b1} + + + {6744dad8-9c70-574a-bff2-9f8dddb24a75} - + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities.vcxproj.filters pcsx2-1.4.0/common/build/Utilities/utilities.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities.vcxproj.filters 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -23,9 +23,6 @@ - - Source Files - Source Files @@ -122,6 +119,9 @@ Source Files + + Source Files\Linux + @@ -168,6 +168,9 @@ Header Files + + Header Files + Header Files @@ -222,5 +225,8 @@ Header Files + + Header Files + - + diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2012.vcxproj pcsx2-1.4.0/common/build/Utilities/utilities_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2012.vcxproj 2014-09-20 07:59:23.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,197 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - {4639972E-424E-4E13-8B07-CA403C481346} - x86emitter - Win32Proj - utilities - - - - StaticLibrary - Unicode - true - v110_xp - - - StaticLibrary - Unicode - true - v110_xp - - - StaticLibrary - Unicode - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - - - - - - - - - - - - - - - Create - Create - Create - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2012.vcxproj.filters pcsx2-1.4.0/common/build/Utilities/utilities_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2012.vcxproj.filters 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {54fbf775-c53a-4e27-8903-2f68688d7764} - - - {903e4e1a-fc21-4f41-83c6-fb70d90cbb58} - - - {b7963f4a-9718-4852-bb0a-62dc0931f98e} - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {a3d21581-efe9-4749-a801-0ae50cbed855} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Linux - - - Source Files\Linux - - - Source Files\Linux - - - Source Files\Windows - - - Source Files\Windows - - - Source Files\Windows - - - Source Files\Threading - - - Source Files\Threading - - - Source Files\Threading - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files\Threading - - - - - Source Files\Threading - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\Threading - - - Header Files - - - Header Files - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2013.vcxproj pcsx2-1.4.0/common/build/Utilities/utilities_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2013.vcxproj 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,197 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - {4639972E-424E-4E13-8B07-CA403C481346} - x86emitter - Win32Proj - utilities - - - - StaticLibrary - Unicode - true - v120_xp - - - StaticLibrary - Unicode - true - v120_xp - - - StaticLibrary - Unicode - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - _LIB;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - - - - - - - - - - - - - - - - - - - Create - Create - Create - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2013.vcxproj.filters pcsx2-1.4.0/common/build/Utilities/utilities_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/Utilities/utilities_vs2013.vcxproj.filters 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/common/build/Utilities/utilities_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,226 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {54fbf775-c53a-4e27-8903-2f68688d7764} - - - {903e4e1a-fc21-4f41-83c6-fb70d90cbb58} - - - {b7963f4a-9718-4852-bb0a-62dc0931f98e} - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {a3d21581-efe9-4749-a801-0ae50cbed855} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Linux - - - Source Files\Linux - - - Source Files\Linux - - - Source Files\Windows - - - Source Files\Windows - - - Source Files\Windows - - - Source Files\Threading - - - Source Files\Threading - - - Source Files\Threading - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files\Threading - - - - - Source Files\Threading - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\Threading - - - Header Files - - - Header Files - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter.vcxproj pcsx2-1.4.0/common/build/x86emitter/x86emitter.vcxproj --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter.vcxproj 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -18,21 +18,25 @@ {A51123F5-9505-4EAE-85E7-D320290A272C} x86emitter Win32Proj + x86emitter StaticLibrary Unicode true + $(DefaultPlatformToolset)_xp StaticLibrary Unicode true + $(DefaultPlatformToolset)_xp StaticLibrary Unicode + $(DefaultPlatformToolset)_xp @@ -97,7 +101,6 @@ - @@ -147,7 +150,13 @@ + + + {01f4ce10-2cfb-41a8-b41f-e54337868a1d} + false + + - + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter.vcxproj.filters pcsx2-1.4.0/common/build/x86emitter/x86emitter.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter.vcxproj.filters 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -27,9 +27,6 @@ - - Source Files - Source Files @@ -147,4 +144,4 @@ Header Files\Implement_Simd - + diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2012.vcxproj pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2012.vcxproj 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - {A51123F5-9505-4EAE-85E7-D320290A272C} - x86emitter - Win32Proj - x86emitter - - - - StaticLibrary - Unicode - true - v110_xp - - - StaticLibrary - Unicode - true - v110_xp - - - StaticLibrary - Unicode - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - MaxSpeed - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - MaxSpeed - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - - - - - - - - - Create - Create - Create - - - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {349ada14-68b6-4be5-8232-b162efb0a5aa} - - - {12d7c7d4-d7f1-43cb-86c3-585dad794bf6} - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {66921012-17b3-45f6-aa8c-82e845c489f8} - - - {ae9884f6-cbd3-4fb6-a011-c776dce9b6ee} - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Linux - - - Source Files\Windows - - - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2013.vcxproj pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2013.vcxproj 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,157 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - {A51123F5-9505-4EAE-85E7-D320290A272C} - x86emitter - Win32Proj - x86emitter - - - - StaticLibrary - Unicode - true - v120_xp - - - StaticLibrary - Unicode - true - v120_xp - - - StaticLibrary - Unicode - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - MaxSpeed - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - MaxSpeed - true - WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - Use - PrecompiledHeader.h - - - - - - - - - - - - - Create - Create - Create - - - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters 2014-08-27 12:40:26.000000000 +0000 +++ pcsx2-1.4.0/common/build/x86emitter/x86emitter_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {349ada14-68b6-4be5-8232-b162efb0a5aa} - - - {12d7c7d4-d7f1-43cb-86c3-585dad794bf6} - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {66921012-17b3-45f6-aa8c-82e845c489f8} - - - {ae9884f6-cbd3-4fb6-a011-c776dce9b6ee} - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Linux - - - Source Files\Windows - - - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - Header Files\Implement_Simd - - - diff -Nru pcsx2-1.3.1+dfsg/common/include/intrin_x86.h pcsx2-1.4.0/common/include/intrin_x86.h --- pcsx2-1.3.1+dfsg/common/include/intrin_x86.h 2015-01-04 23:25:37.000000000 +0000 +++ pcsx2-1.4.0/common/include/intrin_x86.h 2016-01-05 17:28:08.000000000 +0000 @@ -96,10 +96,15 @@ /*** System information ***/ static __inline__ __attribute__((always_inline)) void __cpuid(int CPUInfo[], const int InfoType) { - __asm__ __volatile__("cpuid" : "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType)); + __asm__ __volatile__("cpuid": "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (InfoType)); } -static __inline__ __attribute__((always_inline)) unsigned long long __xgetbv(unsigned int index) +static __inline__ __attribute__((always_inline)) void __cpuidex(int CPUInfo[], const int level, const int count) +{ + __asm__ __volatile__("cpuid": "=a" (CPUInfo[0]), "=b" (CPUInfo[1]), "=c" (CPUInfo[2]), "=d" (CPUInfo[3]) : "a" (level), "c" (count)); +} + +static __inline__ __attribute__((always_inline)) unsigned long long _xgetbv(unsigned int index) { unsigned int eax, edx; __asm__ __volatile__("xgetbv" : "=a"(eax), "=d"(edx) : "c"(index)); diff -Nru pcsx2-1.3.1+dfsg/common/include/Pcsx2Defs.h pcsx2-1.4.0/common/include/Pcsx2Defs.h --- pcsx2-1.3.1+dfsg/common/include/Pcsx2Defs.h 2014-08-15 04:43:52.000000000 +0000 +++ pcsx2-1.4.0/common/include/Pcsx2Defs.h 2016-01-05 17:28:08.000000000 +0000 @@ -27,7 +27,6 @@ #ifdef _MSC_VER # include -extern "C" unsigned __int64 __xgetbv(int); #else # include #endif @@ -114,10 +113,12 @@ # define pxDevelCode(code) #endif -#if !defined(PCSX2_DEBUG) && !defined(PCSX2_DEVEL) +#if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD) # define pxReleaseCode(code) +# define pxNonReleaseCode(code) code #else # define pxReleaseCode(code) code +# define pxNonReleaseCode(code) #endif // -------------------------------------------------------------------------------------- diff -Nru pcsx2-1.3.1+dfsg/common/include/Pcsx2Types.h pcsx2-1.4.0/common/include/Pcsx2Types.h --- pcsx2-1.3.1+dfsg/common/include/Pcsx2Types.h 2015-01-18 18:25:46.000000000 +0000 +++ pcsx2-1.4.0/common/include/Pcsx2Types.h 2016-01-05 17:28:08.000000000 +0000 @@ -34,6 +34,8 @@ // Basic Atomic Types // -------------------------------------------------------------------------------------- +#include "stdint.h" + #if defined(_MSC_VER) // In doubt, we keep this define for VS2010 @@ -50,7 +52,6 @@ #else // _MSC_VER*/ -#include "stdint.h" // Note: char does not have a default sign, unlike other types. As we actually want // char and not signed char in pcsx2, we define s8 to char diff -Nru pcsx2-1.3.1+dfsg/common/include/PluginCallbacks.h pcsx2-1.4.0/common/include/PluginCallbacks.h --- pcsx2-1.3.1+dfsg/common/include/PluginCallbacks.h 2014-08-13 03:55:32.000000000 +0000 +++ pcsx2-1.4.0/common/include/PluginCallbacks.h 2016-01-05 17:28:08.000000000 +0000 @@ -1104,7 +1104,14 @@ u64 (PS2E_CALLBACK* McdGetCRC)( PS2E_THISPTR thisptr, uint port, uint slot ); - void* reserved[8]; + // McdNextFrame + // Inform the memory card that a frame of emulation time has passed. + // Used by the FolderMemoryCard to find a good time to flush written data to the host file system. + void (PS2E_CALLBACK* McdNextFrame)( PS2E_THISPTR thisptr, uint port, uint slot ); + + void (PS2E_CALLBACK* McdReIndex)( PS2E_THISPTR thisptr, uint port, uint slot, const wxString& filter ); + + void* reserved[6]; } PS2E_ComponentAPI_Mcd; diff -Nru pcsx2-1.3.1+dfsg/common/include/PS2Edefs.h pcsx2-1.4.0/common/include/PS2Edefs.h --- pcsx2-1.3.1+dfsg/common/include/PS2Edefs.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/common/include/PS2Edefs.h 2016-01-05 17:28:08.000000000 +0000 @@ -241,7 +241,7 @@ // basic funcs s32 CALLBACK GSinit(); -s32 CALLBACK GSopen(void *pDsp, char *Title, int multithread); +s32 CALLBACK GSopen(void *pDsp, const char *Title, int multithread); void CALLBACK GSclose(); void CALLBACK GSshutdown(); void CALLBACK GSsetSettingsDir( const char* dir ); @@ -572,7 +572,7 @@ // GS // NOTE: GSreadFIFOX/GSwriteCSR functions CANNOT use XMM/MMX regs // If you want to use them, need to save and restore current ones -typedef s32 (CALLBACK* _GSopen)(void *pDsp, char *Title, int multithread); +typedef s32 (CALLBACK* _GSopen)(void *pDsp, const char *Title, int multithread); typedef s32 (CALLBACK* _GSopen2)( void *pDsp, u32 flags ); typedef void (CALLBACK* _GSvsync)(int field); typedef void (CALLBACK* _GSgifTransfer)(const u32 *pMem, u32 size); @@ -702,6 +702,7 @@ #endif typedef void (CALLBACK* _DEV9irqCallback)(DEV9callback callback); typedef DEV9handler (CALLBACK* _DEV9irqHandler)(void); +typedef void (CALLBACK* _DEV9async)(u32 cycles); // USB // NOTE: The read/write functions CANNOT use XMM/MMX regs @@ -820,6 +821,7 @@ #endif extern _DEV9irqCallback DEV9irqCallback; extern _DEV9irqHandler DEV9irqHandler; +extern _DEV9async DEV9async; // USB extern _USBopen USBopen; diff -Nru pcsx2-1.3.1+dfsg/common/include/PS2Eext.h pcsx2-1.4.0/common/include/PS2Eext.h --- pcsx2-1.3.1+dfsg/common/include/PS2Eext.h 2014-12-07 21:07:55.000000000 +0000 +++ pcsx2-1.4.0/common/include/PS2Eext.h 2016-01-05 17:28:08.000000000 +0000 @@ -30,14 +30,20 @@ #include #include -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif //#include "PS2Edefs.h" +#if !defined(_MSC_VER) || !defined(UNICODE) static void SysMessage(const char *fmt, ...); static void __forceinline PluginNullConfigure(std::string desc, s32 &log); static void __forceinline PluginNullAbout(const char *aboutText); +#else +static void SysMessage(const wchar_t *fmt, ...); +static void __forceinline PluginNullConfigure(std::wstring desc, s32 &log); +static void __forceinline PluginNullAbout(const wchar_t *aboutText); +#endif enum FileMode { @@ -97,6 +103,7 @@ if (WriteToConsole) fprintf(stdout, "\n"); } +#if !defined(_MSC_VER) || !defined(UNICODE) void Message(const char *fmt, ...) { va_list list; @@ -110,6 +117,21 @@ SysMessage(buf); } +#else + void Message(const wchar_t *fmt, ...) + { + va_list list; + wchar_t buf[256]; + + if (LogFile == NULL) return; + + va_start(list, fmt); + vswprintf(buf, 256, fmt, list); + va_end(list); + + SysMessage(buf); + } +#endif }; struct PluginConf @@ -148,7 +170,7 @@ if (ConfFile) if (fscanf(ConfFile, buf.c_str(), &value) < 0) - SysMessage("Somethings got wrong when option was read\n"); + fprintf(stderr, "Error reading %s\n", item.c_str()); return value; } @@ -225,6 +247,8 @@ #define usleep(x) Sleep(x / 1000) +#ifndef UNICODE + static void __forceinline SysMessage(const char *fmt, ...) { va_list list; @@ -247,6 +271,32 @@ { SysMessage(aboutText); } +#else + +static void __forceinline SysMessage(const wchar_t *fmt, ...) +{ + va_list list; + wchar_t tmp[512]; + va_start(list, fmt); + vswprintf(tmp, 512, fmt, list); + va_end(list); + MessageBox(GetActiveWindow(), tmp, L"Message", MB_SETFOREGROUND | MB_OK); +} + +static void __forceinline PluginNullConfigure(std::string desc, s32 &log) +{ + /* To do: Write a dialog box that displays a dialog box with the text in desc, + and a check box that says "Logging", checked if log !=0, and set log to + 1 if it is checked on return, and 0 if it isn't. */ + SysMessage(L"This space intentionally left blank."); +} + +static void __forceinline PluginNullAbout(const wchar_t *aboutText) +{ + SysMessage(aboutText); +} + +#endif #define ENTRY_POINT \ HINSTANCE hInst; \ diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/Console.h pcsx2-1.4.0/common/include/Utilities/Console.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/Console.h 2014-08-01 20:42:00.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/Console.h 2016-01-05 17:28:08.000000000 +0000 @@ -236,8 +236,11 @@ virtual ~ConsoleAttrScope() throw(); }; -extern const IConsoleWriter Console; +extern IConsoleWriter Console; +#ifdef __linux__ +extern void Console_SetStdout(FILE *fp); +#endif extern void Console_SetActiveHandler( const IConsoleWriter& writer, FILE* flushfp=NULL ); extern const wxString& ConsoleBuffer_Get(); extern void ConsoleBuffer_Clear(); @@ -249,9 +252,9 @@ extern const IConsoleWriter ConsoleWriter_Buffered; extern const IConsoleWriter ConsoleWriter_wxError; -extern const NullConsoleWriter NullCon; +extern NullConsoleWriter NullCon; -extern const IConsoleWriter DevConWriter; +extern IConsoleWriter DevConWriter; extern bool DevConWriterEnabled; #ifdef PCSX2_DEVBUILD @@ -261,7 +264,7 @@ #endif #ifdef PCSX2_DEBUG -extern const IConsoleWriter DbgConWriter; +extern IConsoleWriter DbgConWriter; # define DbgCon DbgConWriter #else # define DbgCon 0&&NullCon diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/Dependencies.h pcsx2-1.4.0/common/include/Utilities/Dependencies.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/Dependencies.h 2012-08-10 10:10:55.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/Dependencies.h 2016-01-05 17:28:08.000000000 +0000 @@ -73,8 +73,8 @@ \ static __fi bool EnumIsValid( enumName id ) { \ return ((int)id >= enumName##_FIRST) && ((int)id < enumName##_COUNT); } \ - static __fi bool EnumAssert( enumName id ) { \ - return pxAssert( EnumIsValid(id) ); } \ + static __fi void EnumAssert( enumName id ) { \ + pxAssert( EnumIsValid(id) ); } \ \ extern const wxChar* EnumToString( enumName id ) @@ -183,12 +183,22 @@ #include #include +#if defined(_WIN32) && wxMAJOR_VERSION >= 3 +#include +// This deals with a mode_t redefinition conflict. The mode_t doesn't seem to be +// used anywhere in w32pthreads, so I've chosen to use the wxWidgets mode_t +// (I think it's unsigned int vs signed int) +#include +#define HAVE_MODE_T +#endif + #include #include // string.h under c++ #include // stdio.h under c++ #include #include #include +#include #include "Pcsx2Defs.h" diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/Exceptions.h pcsx2-1.4.0/common/include/Utilities/Exceptions.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/Exceptions.h 2014-12-12 20:46:52.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/Exceptions.h 2016-01-05 17:28:08.000000000 +0000 @@ -29,16 +29,28 @@ // exception. Use this macro to dispose of these dangerous exceptions, and generate a // friendly error log in their wake. // +// Note: Console can also fire an Exception::OutOfMemory #define __DESTRUCTOR_CATCHALL( funcname ) \ catch( BaseException& ex ) \ { \ - Console.Error( "Unhandled BaseException in %s (ignored!):", funcname ); \ - Console.Error( ex.FormatDiagnosticMessage() ); \ + try { \ + Console.Error( "Unhandled BaseException in %s (ignored!):", funcname ); \ + Console.Error( ex.FormatDiagnosticMessage() ); \ + } catch (...) { \ + fprintf(stderr, "ERROR: (out of memory?)\n"); \ + } \ } \ catch( std::exception& ex ) \ { \ - Console.Error( "Unhandled std::exception in %s (ignored!):", funcname ); \ - Console.Error( ex.what() ); \ + try { \ + Console.Error( "Unhandled std::exception in %s (ignored!):", funcname ); \ + Console.Error( ex.what() ); \ + } catch (...) { \ + fprintf(stderr, "ERROR: (out of memory?)\n"); \ + } \ + } \ + catch(...) { \ + /* Unreachable code */ \ } #define DESTRUCTOR_CATCHALL __DESTRUCTOR_CATCHALL( __pxFUNCTION__ ) diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/FixedPointTypes.inl pcsx2-1.4.0/common/include/Utilities/FixedPointTypes.inl --- pcsx2-1.3.1+dfsg/common/include/Utilities/FixedPointTypes.inl 2012-08-14 07:15:27.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/FixedPointTypes.inl 2016-01-05 17:28:08.000000000 +0000 @@ -33,13 +33,13 @@ template< int Precision > FixedInt::FixedInt( double doubval ) { - Raw = (int)(doubval * (double)Precision); + Raw = lround(doubval * (double)Precision); } template< int Precision > FixedInt::FixedInt( float floval ) { - Raw = (int)(floval * (float)Precision); + Raw = lroundf(floval * (float)Precision); } template< int Precision > diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/General.h pcsx2-1.4.0/common/include/Utilities/General.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/General.h 2015-01-18 18:25:46.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/General.h 2016-01-05 17:28:08.000000000 +0000 @@ -254,3 +254,5 @@ extern u64 GetPhysicalMemory(); extern wxString GetOSVersionString(); + +void ScreensaverAllow(bool allow); diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/HashMap.h pcsx2-1.4.0/common/include/Utilities/HashMap.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/HashMap.h 2014-07-20 15:00:58.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/HashMap.h 2016-01-05 17:28:08.000000000 +0000 @@ -15,8 +15,6 @@ #pragma once -#include - namespace HashTools { /// diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/lnx_memzero.h pcsx2-1.4.0/common/include/Utilities/lnx_memzero.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/lnx_memzero.h 2014-08-17 13:23:21.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/lnx_memzero.h 2016-01-05 17:28:08.000000000 +0000 @@ -16,8 +16,7 @@ #ifndef _LNX_MEMZERO_H_ #define _LNX_MEMZERO_H_ -// This header contains non-optimized implementation of memzero_ptr and memset8, -// memset16, etc. +// This header contains non-optimized implementation of memzero_ptr and memset8, etc template< u32 data, typename T > static __fi void memset32( T& obj ) @@ -51,129 +50,11 @@ } } -template< u16 data, typename T > -static __fi void memset16( T& obj ) -{ - if( (sizeof(T) & 0x3) != 0 ) - _memset16_unaligned( &obj, data, sizeof( T ) ); - else { - const u32 data32 = data + (data<<16); - memset32( obj ); - } -} - - -// An optimized memset for 8 bit destination data. +// Code is only called in the init so no need to bother with ASM template< u8 data, size_t bytes > static __fi void memset_8( void *dest ) { - if( bytes == 0 ) return; - - if( (bytes & 0x3) != 0 ) - { - // unaligned data length. No point in doing an optimized inline version (too complicated!) - // So fall back on the compiler implementation: - - memset( dest, data, bytes ); - return; - } - - // This function only works on 32-bit alignments of data copied. - jASSUME( (bytes & 0x3) == 0 ); - - enum - { - remdat = bytes>>2, - data32 = data + (data<<8) + (data<<16) + (data<<24) - }; - - // macro to execute the x86/32 "stosd" copies. - switch( remdat ) - { -#if 0 - case 1: - *(u32*)dest = data32; - return; - - case 2: - ((u32*)dest)[0] = data32; - ((u32*)dest)[1] = data32; - return; - - case 3: - __asm__ volatile - ( - ".intel_syntax noprefix\n" - "cld\n" -// "mov edi, %[dest]\n" -// "mov eax, %[data32]\n" - "stosd\n" - "stosd\n" - "stosd\n" - ".att_syntax\n" - : "=D"(dest) - // Input specifiers: D - edi, a -- eax, c ecx - : [dest]"D"(dest), [data32]"a"(data32) - : "memory" - ); - return; - - case 4: - __asm__ volatile - ( - ".intel_syntax noprefix\n" - "cld\n" -// "mov edi, %[dest]\n" -// "mov eax, %[data32]\n" - "stosd\n" - "stosd\n" - "stosd\n" - "stosd\n" - ".att_syntax\n" - : "=D"(dest) - : [dest]"D"(dest), [data32]"a"(data32) - : "memory" - - ); - return; - - case 5: - __asm__ volatile - ( - ".intel_syntax noprefix\n" - "cld\n" -// "mov edi, %[dest]\n" -// "mov eax, %[data32]\n" - "stosd\n" - "stosd\n" - "stosd\n" - "stosd\n" - "stosd\n" - ".att_syntax\n" - : "=D"(dest) - : [dest]"D"(dest), [data32]"a"(data32) - : "memory" - - ); - return; -#endif - - default: - __asm__ volatile - ( - ".intel_syntax noprefix\n" - "cld\n" -// "mov ecx, %[remdat]\n" -// "mov edi, %[dest]\n" -// "mov eax, %\[data32]n" - "rep stosd\n" - ".att_syntax\n" - : "=D"(dest) - : [remdat]"c"(remdat), [dest]"D"(dest), [data32]"a"(data32) - : "memory" - ); - return; - } + memset(dest, data, bytes); } #endif diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/MathUtils.h pcsx2-1.4.0/common/include/Utilities/MathUtils.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/MathUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/MathUtils.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,41 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2014- PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once +// Hopefully this file will be used for cross-source math utilities. +// Currently these are strewn across the code base. Please collect them all! + +#include "Pcsx2Defs.h" + +// On GCC >= 4.7, this is equivalent to __builtin_clrsb(n); +inline u32 count_leading_sign_bits(s32 n) { + // If the sign bit is 1, we invert the bits to 0 for count-leading-zero. + if (n < 0) + n = ~n; + + // If BSR is used directly, it would have an undefined value for 0. + if (n == 0) + return 32; + + // Perform our count leading zero. +#ifdef _MSC_VER + unsigned long ret; + _BitScanReverse(&ret, n); + return 31 - (u32)ret; +#else + return __builtin_clz(n); +#endif +} + diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/MemcpyFast.h pcsx2-1.4.0/common/include/Utilities/MemcpyFast.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/MemcpyFast.h 2014-10-26 21:33:42.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/MemcpyFast.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,13 +28,3 @@ #else #define memcmp_mmx memcmp #endif - -// Only used in the Windows version of memzero.h. But it's in Misc.cpp for some reason. -void _memset16_unaligned( void* dest, u16 data, size_t size ); - -#define memcpy_fast memcpy -#define memcpy_aligned(d,s,c) memcpy(d,s,c) -#define memcpy_const memcpy -#define memcpy_constA memcpy -#define memcpy_qwc_ memcpy -#define memcpy_qwc(d,s,c) memcpy(d,s,c*16) diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/PageFaultSource.h pcsx2-1.4.0/common/include/Utilities/PageFaultSource.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/PageFaultSource.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/PageFaultSource.h 2016-01-05 17:28:08.000000000 +0000 @@ -109,7 +109,7 @@ bool m_handled; public: - SrcType_PageFault() {} + SrcType_PageFault() : m_handled(false) {} virtual ~SrcType_PageFault() throw() { } bool WasHandled() const { return m_handled; } @@ -247,6 +247,11 @@ m_blocksize = (bytes + __pagesize - 1) / __pagesize; return m_blocksize * __pagesize; } + + virtual void Reset() + { + _parent::Reset(); + } protected: @@ -266,72 +271,6 @@ virtual void CommitBlocks( uptr page, uint blocks ); }; -// -------------------------------------------------------------------------------------- -// SpatialArrayReserve -// -------------------------------------------------------------------------------------- -// A spatial array is one where large areas of the memory reserve will remain unused during -// process execution. Only areas put to use will be committed to virtual memory. -// -// Spatial array efficiency depends heavily on selecting the right parameters for the array's -// primary intended use. Memory in a spatial array is arranged by blocks, with each block -// containing some number of pages (pages are 4096 bytes each on most platforms). When the -// array is accessed, the entire block containing the addressed memory will be committed at -// once. Blocks can be a single page in size (4096 bytes), though this is highly discouraged -// due to overhead and fragmentation penalties. -// -// Balancing block sizes: -// Larger blocks are good for reducing memory fragmentation and block-tracking overhead, but -// can also result in a lot of otherwise unused memory being committed to memory. Smaller -// blocks are good for arrays that will tend toward more sequential behavior, as they reduce -// the amount of unused memory being committed. However, since every block requires a -// tracking entry, assigning small blocks to a very large array can result in quite a bit of -// unwanted overhead. Furthermore, if the array is accessed randomly, system physical memory -// will become very fragmented, which will also hurt performance. -// -// By default, the base block size is based on a heuristic that balances the size of the spatial -// array reserve against a best-guess performance profile for the target platform. -// -class SpatialArrayReserve : public BaseVmReserveListener -{ - typedef BaseVmReserveListener _parent; - -protected: - uint m_numblocks; - - // Array of block bits, each bit indicating if the block has been committed to memory - // or not. The array length is typically determined via ((numblocks+7) / 8), though the - // actual array size may be larger in order to accommodate 32-bit or 128-bit accelerated - // operations. - ScopedAlignedAlloc m_blockbits; - -public: - SpatialArrayReserve( const wxString& name ); - - virtual void* Reserve( size_t size = 0, uptr base = 0, uptr upper_bounds = 0 ); - virtual void Reset(); - virtual bool TryResize( uint newsize ); - - void OnCommittedBlock( void* block ); - - SpatialArrayReserve& SetBlockCount( uint blocks ); - SpatialArrayReserve& SetBlockSizeInPages( uint bytes ); - - uptr SetBlockSize( uptr bytes ); - - operator void*() { return m_baseptr; } - operator const void*() const { return m_baseptr; } - - operator u8*() { return (u8*)m_baseptr; } - operator const u8*() const { return (u8*)m_baseptr; } - - using _parent::operator[]; - -protected: - void ReprotectCommittedBlocks( const PageProtectionMode& newmode ); - void DoCommitAndProtect( uptr page ); - uint _calcBlockBitArrayLength() const; -}; - #ifdef __linux__ # define PCSX2_PAGEFAULT_PROTECT diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/RedtapeWindows.h pcsx2-1.4.0/common/include/Utilities/RedtapeWindows.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/RedtapeWindows.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/RedtapeWindows.h 2016-01-05 17:28:08.000000000 +0000 @@ -31,7 +31,7 @@ #ifdef _WIN32 -// Force availability of to WinNT APIs (change to 0x600 to enable XP-specific APIs) +// Force availability of to WinNT APIs (change to 0x600 to disable XP-specific APIs) #ifndef WINVER #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/SafeArray.inl pcsx2-1.4.0/common/include/Utilities/SafeArray.inl --- pcsx2-1.3.1+dfsg/common/include/Utilities/SafeArray.inl 2014-12-21 11:49:02.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/SafeArray.inl 2016-01-05 17:28:08.000000000 +0000 @@ -15,7 +15,6 @@ #pragma once -#include "MemcpyFast.h" #include "SafeArray.h" // Internal constructor for use by derived classes. This allows a derived class to @@ -132,7 +131,7 @@ { return (T*)( ( this->m_ptr == NULL ) ? _aligned_malloc( newsize * sizeof(T), Alignment ) : - _aligned_realloc( this->m_ptr, newsize * sizeof(T), Alignment ) + pcsx2_aligned_realloc( this->m_ptr, newsize * sizeof(T), Alignment, this->m_size * sizeof(T) ) ); } diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/ScopedAlloc.h pcsx2-1.4.0/common/include/Utilities/ScopedAlloc.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/ScopedAlloc.h 2011-07-24 13:02:50.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/ScopedAlloc.h 2016-01-05 17:28:08.000000000 +0000 @@ -48,16 +48,14 @@ #define safe_aligned_free( ptr ) \ ((void) ( _aligned_free( ptr ), (ptr) = NULL )) - -extern void* __fastcall pcsx2_aligned_malloc(size_t size, size_t align); -extern void* __fastcall pcsx2_aligned_realloc(void* handle, size_t size, size_t align); -extern void pcsx2_aligned_free(void* pmem); - // aligned_malloc: Implement/declare linux equivalents here! -#if !defined(_MSC_VER) && !defined(HAVE_ALIGNED_MALLOC) -# define _aligned_malloc pcsx2_aligned_malloc -# define _aligned_free pcsx2_aligned_free -# define _aligned_realloc pcsx2_aligned_realloc +#if !defined(_MSC_VER) +extern void* __fastcall _aligned_malloc(size_t size, size_t align); +extern void* __fastcall pcsx2_aligned_realloc(void* handle, size_t new_size, size_t align, size_t old_size); +extern void _aligned_free(void* pmem); +#else +#define pcsx2_aligned_realloc(handle, new_size, align, old_size) \ + _aligned_realloc(handle, new_size, align) #endif // -------------------------------------------------------------------------------------- @@ -250,8 +248,8 @@ virtual void Resize( size_t newsize ) { - this->m_size = newsize; - this->m_buffer = (T*)_aligned_realloc(this->m_buffer, newsize * sizeof(T), align); + this->m_buffer = (T*)pcsx2_aligned_realloc(this->m_buffer, newsize * sizeof(T), align, this->m_size * sizeof(T)); + this->m_size = newsize; if (!this->m_buffer) throw Exception::OutOfMemory(L"ScopedAlignedAlloc::Resize"); diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/StringHelpers.h pcsx2-1.4.0/common/include/Utilities/StringHelpers.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/StringHelpers.h 2014-08-01 20:42:00.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/StringHelpers.h 2016-01-05 17:28:08.000000000 +0000 @@ -21,12 +21,16 @@ #include +#if _WIN32 + #define WX_STR(str) (str.wc_str()) +#else // Stupid wx3.0 doesn't support c_str for vararg function #if wxMAJOR_VERSION >= 3 #define WX_STR(str) (static_cast(str.c_str())) #else #define WX_STR(str) (str.c_str()) #endif +#endif // -------------------------------------------------------------------------------------- // pxToUTF8 @@ -141,7 +145,6 @@ protected: ScopedAlignedAlloc* m_dest; bool m_deleteDest; - uint m_Length; public: FastFormatAscii(); @@ -151,7 +154,6 @@ void Clear(); bool IsEmpty() const; - uint Length() const { return m_Length; } const char* c_str() const { return m_dest->GetPtr(); } operator const char*() const { return m_dest->GetPtr(); } @@ -246,10 +248,4 @@ // These functions are useful since they are ASCII always, even under Unicode. Typically // even in a unicode app. -extern void ssprintf(std::string& dest, const char* fmt, ...); extern void ssappendf(std::string& dest, const char* format, ...); -extern void vssprintf(std::string& dest, const char* format, va_list args); -extern void vssappendf(std::string& dest, const char* format, va_list args); - -extern std::string fmt_string( const char* fmt, ... ); -extern std::string vfmt_string( const char* fmt, va_list args ); diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/Threading.h pcsx2-1.4.0/common/include/Utilities/Threading.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/Threading.h 2014-12-08 21:26:46.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/Threading.h 2016-01-05 17:28:08.000000000 +0000 @@ -160,8 +160,7 @@ // For use in spin/wait loops. extern void SpinWait(); - // Use prior to committing data to another thread (internal memcpy_qwc does not use fencing, - // so that many memcpys can be issued in a row more efficiently) + // Use prior to committing data to another thread extern void StoreFence(); // Optional implementation to enable hires thread/process scheduler for the operating system. diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/TraceLog.h pcsx2-1.4.0/common/include/Utilities/TraceLog.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/TraceLog.h 2014-08-01 20:42:00.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/TraceLog.h 2016-01-05 17:28:08.000000000 +0000 @@ -77,7 +77,7 @@ bool Enabled; protected: - BaseTraceLogSource() {} + BaseTraceLogSource() : m_Descriptor(NULL), Enabled(false) {} public: TraceLog_ImplementBaseAPI(BaseTraceLogSource) @@ -159,7 +159,7 @@ ConsoleColors DefaultColor; protected: - ConsoleLogSource() {} + ConsoleLogSource() : DefaultColor(Color_Gray) {} public: ConsoleLog_ImplementBaseAPI(ConsoleLogSource) diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/win_memzero.h pcsx2-1.4.0/common/include/Utilities/win_memzero.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/win_memzero.h 2014-08-17 13:23:21.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/win_memzero.h 2016-01-05 17:28:08.000000000 +0000 @@ -58,222 +58,14 @@ #define MZFbytes (_bytes) -// An optimized memset for 8 bit destination data. -template< u8 data, size_t _bytes > +// Code is only called in the init so no need to bother with ASM +template< u8 data, size_t bytes > static __fi void memset_8( void *dest ) { - if( MZFbytes == 0 ) return; - - if( (MZFbytes & 0x3) != 0 ) - { - // unaligned data length. No point in doing an optimized inline version (too complicated!) - // So fall back on the compiler implementation: - - memset( dest, data, MZFbytes ); - return; - } - - /*static const size_t remainder = MZFbytes & 127; - static const size_t bytes128 = MZFbytes / 128; - if( bytes128 > 32 ) - { - // This function only works on 128-bit alignments. - pxAssume( (MZFbytes & 0xf) == 0 ); - pxAssume( ((uptr)dest & 0xf) == 0 ); - - __asm - { - mov eax,bytes128 - mov ecx,dest - movss xmm0,data - - align 16 - - _loop_8: - movaps [ecx],xmm0; - movaps [ecx+0x10],xmm0; - movaps [ecx+0x20],xmm0; - movaps [ecx+0x30],xmm0; - movaps [ecx+0x40],xmm0; - movaps [ecx+0x50],xmm0; - movaps [ecx+0x60],xmm0; - movaps [ecx+0x70],xmm0; - sub ecx,-128 - dec eax; - jnz _loop_8; - } - if( remainder != 0 ) - { - // Copy the remainder in reverse (using the decrementing eax as our indexer) - __asm - { - mov eax, remainder - - _loop_10: - movaps [ecx+eax],xmm0; - sub eax,16; - jnz _loop_10; - } - } - }*/ - - // This function only works on 32-bit alignments of data copied. - pxAssume( (MZFbytes & 0x3) == 0 ); - - enum - { - remdat = MZFbytes >> 2, - data32 = data + (data<<8) + (data<<16) + (data<<24) - }; - - // macro to execute the x86/32 "stosd" copies. - switch( remdat ) - { - case 1: - *(u32*)dest = data32; - return; - - case 2: - ((u32*)dest)[0] = data32; - ((u32*)dest)[1] = data32; - return; - - case 3: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - } - return; - - case 4: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - stosd; - } - return; - - case 5: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - stosd; - stosd; - } - return; - - default: - __asm - { - mov ecx, remdat; - mov edi, dest; - mov eax, data32; - rep stosd; - } - return; - } -} - -template< u16 data, size_t _bytes > -static __fi void memset_16( void *dest ) -{ - if( MZFbytes == 0 ) return; - - // Assertion: data length must be a multiple of 16 or 32 bits - pxAssume( (MZFbytes & 0x1) == 0 ); - - if( (MZFbytes & 0x3) != 0 ) - { - // Unaligned data length. No point in doing an optimized inline version (too complicated with - // remainders and such). - - _memset16_unaligned( dest, data, MZFbytes ); - return; - } - - //u64 _xmm_backup[2]; - - // This function only works on 32-bit alignments of data copied. - pxAssume( (MZFbytes & 0x3) == 0 ); - - enum - { - remdat = MZFbytes >> 2, - data32 = data + (data<<16) - }; - - // macro to execute the x86/32 "stosd" copies. - switch( remdat ) - { - case 1: - *(u32*)dest = data32; - return; - - case 2: - ((u32*)dest)[0] = data32; - ((u32*)dest)[1] = data32; - return; - - case 3: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - } - return; - - case 4: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - stosd; - } - return; - - case 5: - __asm - { - mov edi, dest; - mov eax, data32; - stosd; - stosd; - stosd; - stosd; - stosd; - } - return; - - default: - __asm - { - mov ecx, remdat; - mov edi, dest; - mov eax, data32; - rep stosd; - } - return - } + memset(dest, data, bytes); } +// This is unused on Windows. template< u32 data, size_t MZFbytes > static __fi void memset_32( void *dest ) { @@ -372,14 +164,8 @@ memset_8( &object ); } -// This method clears an object with the given 16 bit value. -template< u16 data, typename T > -static __fi void memset16( T& object ) -{ - memset_16( &object ); -} - // This method clears an object with the given 32 bit value. +// This is also unused. template< u32 data, typename T > static __fi void memset32( T& object ) { diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/wxAppWithHelpers.h pcsx2-1.4.0/common/include/Utilities/wxAppWithHelpers.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/wxAppWithHelpers.h 2014-11-22 17:51:05.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/wxAppWithHelpers.h 2016-01-05 17:28:08.000000000 +0000 @@ -58,11 +58,7 @@ virtual void OnActionButtonClicked( wxCommandEvent& evt ); }; -#ifdef _MSC_VER - typedef std::list< wxEvent*, WXObjectAllocator(wxEvent*) > wxEventList; -#else - typedef std::list< wxEvent* > wxEventList; -#endif +typedef std::list< wxEvent* > wxEventList; // -------------------------------------------------------------------------------------- // wxAppWithHelpers diff -Nru pcsx2-1.3.1+dfsg/common/include/Utilities/wxGuiTools.h pcsx2-1.4.0/common/include/Utilities/wxGuiTools.h --- pcsx2-1.3.1+dfsg/common/include/Utilities/wxGuiTools.h 2014-08-02 11:34:44.000000000 +0000 +++ pcsx2-1.4.0/common/include/Utilities/wxGuiTools.h 2016-01-05 17:28:08.000000000 +0000 @@ -512,11 +512,11 @@ void Init( const pxDialogCreationFlags& cflags ); void AddOkCancel( wxSizer& sizer, bool hasApply=false ); void AddOkCancel( wxSizer* sizer=NULL, bool hasApply=false ); + void RememberPosition(); virtual void SmartCenterFit(); virtual int ShowModal(); virtual bool Show( bool show=true ); - virtual bool Destroy(); // Must return the same thing as GetNameStatic; a name ideal for use in uniquely // identifying dialogs. (this version is the 'instance' version, which is called @@ -536,7 +536,6 @@ protected: void OnDialogCreated( wxCommandEvent& evt ); void OnOkCancel(wxCommandEvent& evt); - void OnCloseWindow(wxCloseEvent& event); bool ShouldPreventAppExit() const { return false; } @@ -800,7 +799,6 @@ extern int pxGetCharHeight( const wxWindow* wind, int rows=1 ); extern int pxGetCharHeight( const wxWindow& wind, int rows=1 ); -extern wxString pxFormatToolTipText( wxWindow* wind, const wxString& src ); extern void pxSetToolTip( wxWindow* wind, const wxString& src ); extern void pxSetToolTip( wxWindow& wind, const wxString& src ); extern wxFont pxGetFixedFont( int ptsize=8, int weight=wxNORMAL ); diff -Nru pcsx2-1.3.1+dfsg/common/include/x86emitter/instructions.h pcsx2-1.4.0/common/include/x86emitter/instructions.h --- pcsx2-1.3.1+dfsg/common/include/x86emitter/instructions.h 2010-08-09 04:10:38.000000000 +0000 +++ pcsx2-1.4.0/common/include/x86emitter/instructions.h 2016-01-05 17:28:08.000000000 +0000 @@ -85,7 +85,14 @@ extern const xImpl_BitScan xBSF, xBSR; - extern const xImpl_JmpCall xJMP, xCALL; + extern const xImpl_JmpCall xJMP; +#ifdef __x86_64__ + // 32 bits Call won't be compatible in 64 bits (different ABI) + // Just a reminder to port the code + [[deprecated]] extern const xImpl_JmpCall xCALL; +#else + extern const xImpl_JmpCall xCALL; +#endif // ------------------------------------------------------------------------ extern const xImpl_CMov @@ -172,6 +179,23 @@ extern void xINTO(); ////////////////////////////////////////////////////////////////////////////////////////// + // Helper function to handle the various functions ABI + extern void xFastCall(void* func, const xRegister32& a1 = xEmptyReg, const xRegister32& a2 = xEmptyReg); + extern void xFastCall(void* func, const xRegisterSSE& a1, const xRegisterSSE& a2); + extern void xFastCall(void* func, u32 a1, u32 a2); + extern void xFastCall(void* func, u32 a1); + + extern void xStdCall(void* func, u32 a1); + + class xScopedStackFrame + { + bool m_base_frame; + + xScopedStackFrame(bool base_frame); + ~xScopedStackFrame(); + }; + + ////////////////////////////////////////////////////////////////////////////////////////// // JMP / Jcc Instructions! extern void xJcc( JccComparisonType comparison, const void* target ); diff -Nru pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_instructions.h pcsx2-1.4.0/common/include/x86emitter/legacy_instructions.h --- pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_instructions.h 2014-07-15 20:05:46.000000000 +0000 +++ pcsx2-1.4.0/common/include/x86emitter/legacy_instructions.h 2016-01-05 17:28:08.000000000 +0000 @@ -1361,31 +1361,3 @@ extern void SSE4_PMINUD_M128_to_XMM(x86SSERegType to, uptr from); extern void SSE4_PMULDQ_XMM_to_XMM(x86SSERegType to, x86SSERegType from); extern void SSE4_PTEST_XMM_to_XMM(x86SSERegType to, x86SSERegType from); - -//********************* -// 3DNOW instructions * -//********************* -extern void FEMMS( void ); -extern void PFCMPEQMtoR( x86IntRegType to, uptr from ); -extern void PFCMPGTMtoR( x86IntRegType to, uptr from ); -extern void PFCMPGEMtoR( x86IntRegType to, uptr from ); -extern void PFADDMtoR( x86IntRegType to, uptr from ); -extern void PFADDRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFSUBMtoR( x86IntRegType to, uptr from ); -extern void PFSUBRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMULMtoR( x86IntRegType to, uptr from ); -extern void PFMULRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPMtoR( x86IntRegType to, uptr from ); -extern void PFRCPRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ); -extern void PF2IDMtoR( x86IntRegType to, uptr from ); -extern void PI2FDMtoR( x86IntRegType to, uptr from ); -extern void PI2FDRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMAXMtoR( x86IntRegType to, uptr from ); -extern void PFMAXRtoR( x86IntRegType to, x86IntRegType from ); -extern void PFMINMtoR( x86IntRegType to, uptr from ); -extern void PFMINRtoR( x86IntRegType to, x86IntRegType from ); - diff -Nru pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_internal.h pcsx2-1.4.0/common/include/x86emitter/legacy_internal.h --- pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_internal.h 2010-08-09 04:10:38.000000000 +0000 +++ pcsx2-1.4.0/common/include/x86emitter/legacy_internal.h 2016-01-05 17:28:08.000000000 +0000 @@ -39,7 +39,10 @@ #define RexRB(w, reg, base) assert( !(w || (reg) >= 8 || (base)>=8) ) #define RexRXB(w, reg, index, base) assert( !(w || (reg) >= 8 || (index) >= 8 || (base) >= 8) ) +// Recent GCC define the macro in x86intrin.h +#ifndef _MM_MK_INSERTPS_NDX #define _MM_MK_INSERTPS_NDX(srcField, dstField, zeroMask) (((srcField)<<6) | ((dstField)<<4) | (zeroMask)) +#endif extern void ModRM( uint mod, uint reg, uint rm ); extern void SibSB( uint ss, uint index, uint base ); diff -Nru pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_types.h pcsx2-1.4.0/common/include/x86emitter/legacy_types.h --- pcsx2-1.3.1+dfsg/common/include/x86emitter/legacy_types.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/common/include/x86emitter/legacy_types.h 2016-01-05 17:28:08.000000000 +0000 @@ -15,74 +15,14 @@ #pragma once -#define SIB 4 // maps to ESP -#define SIBDISP 5 // maps to EBP +//#define SIB 4 // maps to ESP +//#define SIBDISP 5 // maps to EBP #define DISP32 5 // maps to EBP // general types typedef int x86IntRegType; - -#define EAX 0 -#define EBX 3 -#define ECX 1 -#define EDX 2 -#define ESI 6 -#define EDI 7 -#define EBP 5 -#define ESP 4 - -#define MM0 0 -#define MM1 1 -#define MM2 2 -#define MM3 3 -#define MM4 4 -#define MM5 5 -#define MM6 6 -#define MM7 7 - typedef int x86MMXRegType; - -#define XMM0 0 -#define XMM1 1 -#define XMM2 2 -#define XMM3 3 -#define XMM4 4 -#define XMM5 5 -#define XMM6 6 -#define XMM7 7 -#define XMM8 8 -#define XMM9 9 -#define XMM10 10 -#define XMM11 11 -#define XMM12 12 -#define XMM13 13 -#define XMM14 14 -#define XMM15 15 - typedef int x86SSERegType; -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#pragma once - -#define SIB 4 // maps to ESP -#define SIBDISP 5 // maps to EBP -#define DISP32 5 // maps to EBP - -// general types -typedef int x86IntRegType; #define EAX 0 #define EBX 3 @@ -92,38 +32,3 @@ #define EDI 7 #define EBP 5 #define ESP 4 - -#define X86ARG1 EAX -#define X86ARG2 ECX -#define X86ARG3 EDX -#define X86ARG4 EBX - -#define MM0 0 -#define MM1 1 -#define MM2 2 -#define MM3 3 -#define MM4 4 -#define MM5 5 -#define MM6 6 -#define MM7 7 - -typedef int x86MMXRegType; - -#define XMM0 0 -#define XMM1 1 -#define XMM2 2 -#define XMM3 3 -#define XMM4 4 -#define XMM5 5 -#define XMM6 6 -#define XMM7 7 -#define XMM8 8 -#define XMM9 9 -#define XMM10 10 -#define XMM11 11 -#define XMM12 12 -#define XMM13 13 -#define XMM14 14 -#define XMM15 15 - -typedef int x86SSERegType; diff -Nru pcsx2-1.3.1+dfsg/common/include/x86emitter/tools.h pcsx2-1.4.0/common/include/x86emitter/tools.h --- pcsx2-1.3.1+dfsg/common/include/x86emitter/tools.h 2011-02-12 21:45:16.000000000 +0000 +++ pcsx2-1.4.0/common/include/x86emitter/tools.h 2016-01-05 17:28:08.000000000 +0000 @@ -44,6 +44,7 @@ u32 Flags2; // More Feature Flags u32 EFlags; // Extended Feature Flags u32 EFlags2; // Extended Feature Flags pg2 + u32 SEFlag; // Structured Extended Feature Flags Enumeration char VendorName[16]; // Vendor/Creator ID char FamilyName[50]; // the original cpu name @@ -88,6 +89,7 @@ u32 hasStreamingSIMD4Extensions :1; u32 hasStreamingSIMD4Extensions2 :1; u32 hasAVX :1; + u32 hasAVX2 :1; u32 hasFMA :1; // AMD-specific CPU Features @@ -114,7 +116,6 @@ u32 CalculateMHz() const; - void SIMD_ExceptionTest(); void SIMD_EstablishMXCSRmask(); protected: diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/AlignedMalloc.cpp pcsx2-1.4.0/common/src/Utilities/AlignedMalloc.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/AlignedMalloc.cpp 2014-07-12 17:57:26.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/AlignedMalloc.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -18,84 +18,32 @@ #include "PrecompiledHeader.h" -struct AlignedMallocHeader -{ - u32 size; // size of the allocated buffer (minus alignment and header) - void* baseptr; // offset of the original allocated pointer -}; - -static const uint headsize = sizeof(AlignedMallocHeader); - -void* __fastcall pcsx2_aligned_malloc(size_t size, size_t align) +void* __fastcall _aligned_malloc(size_t size, size_t align) { pxAssert( align < 0x10000 ); - #if defined(__USE_ISOC11) && !defined(ASAN_WORKAROUND) // not supported yet on gcc 4.9 return aligned_alloc(align, size); #else - u8* p = (u8*)malloc(size+align+headsize); - - // start alignment calculations from past the header. - uptr pasthead = (uptr)(p+headsize); - uptr aligned = (pasthead + align-1) & ~(align-1); - - AlignedMallocHeader* header = (AlignedMallocHeader*)(aligned-headsize); - pxAssert( (uptr)header >= (uptr)p ); - - header->baseptr = p; - header->size = size; - - return (void*)aligned; + void *result = 0; + posix_memalign(&result, align, size); + return result; #endif } -void* __fastcall pcsx2_aligned_realloc(void* handle, size_t size, size_t align) +void* __fastcall pcsx2_aligned_realloc(void* handle, size_t new_size, size_t align, size_t old_size) { pxAssert( align < 0x10000 ); - void* newbuf = pcsx2_aligned_malloc( size, align ); + void* newbuf = _aligned_malloc(new_size, align); - if( handle != NULL ) - { -#if defined(__USE_ISOC11) && !defined(ASAN_WORKAROUND) // not supported yet on gcc 4.9 - memcpy_fast( newbuf, handle, size ); - free( handle ); -#else - AlignedMallocHeader* header = (AlignedMallocHeader*)((uptr)handle - headsize); - memcpy_fast( newbuf, handle, std::min( size, header->size ) ); - free( header->baseptr ); -#endif + if (newbuf != NULL && handle != NULL) { + memcpy(newbuf, handle, std::min(old_size, new_size)); + _aligned_free(handle); } return newbuf; } -__fi void pcsx2_aligned_free(void* pmem) +__fi void _aligned_free(void* pmem) { -#if defined(__USE_ISOC11) && !defined(ASAN_WORKAROUND) // not supported yet on gcc 4.9 free(pmem); -#else - if( pmem == NULL ) return; - AlignedMallocHeader* header = (AlignedMallocHeader*)((uptr)pmem - headsize); - free( header->baseptr ); -#endif -} - -// ---------------------------------------------------------------------------- -// And for lack of a better home ... - - -// Special unaligned memset used when all other optimized memsets fail (it's called from -// memzero_obj and stuff). -__fi void _memset16_unaligned( void* dest, u16 data, size_t size ) -{ - pxAssume( (size & 0x1) == 0 ); - - u16* dst = (u16*)dest; - for(int i=size; i; --i, ++dst ) - *dst = data; -} - -__fi void HostSys::Munmap( void* base, size_t size ) -{ - Munmap( (uptr)base, size ); } diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/CMakeLists.txt pcsx2-1.4.0/common/src/Utilities/CMakeLists.txt --- pcsx2-1.3.1+dfsg/common/src/Utilities/CMakeLists.txt 2014-12-08 21:26:46.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -6,55 +6,12 @@ endif(NOT TOP_CMAKE_WAS_SOURCED) -# library name set(Output Utilities) -# set common flags set(CommonFlags -fno-strict-aliasing ) -# set optimization flags -set(OptimizationFlags - -falign-functions - -falign-jumps - -falign-labels - -falign-loops - -fcaller-saves - -fcprop-registers - -fcrossjumping - -fcse-follow-jumps - -fcse-skip-blocks - -fdefer-pop - -fdelete-null-pointer-checks - -fgcse - -fgcse-lm - -fif-conversion - -fif-conversion2 - -fmerge-constants - -foptimize-sibling-calls - -fpeephole2 - -fregmove - -freorder-blocks - -freorder-functions - -frerun-cse-after-loop - -fsched-interblock - -fsched-spec - -fstrict-overflow - -fthread-jumps - -ftree-ccp - -ftree-ch - -ftree-copyrename - -ftree-dce - -ftree-dominator-opts - -ftree-fre - -ftree-lrs - -ftree-pre - -ftree-sra - -ftree-ter - -ftree-vrp - -funit-at-a-time) - #Clang doesn't support a few common flags that GCC does. if(NOT USE_CLANG) set(UtilitiesFinalFlags @@ -79,7 +36,7 @@ # add defines set(UtilitiesFinalFlags ${UtilitiesFinalFlags} - ${CommonFlags} ${OptimizationFlags} -DPCSX2_DEVBUILD + ${CommonFlags} -DPCSX2_DEVBUILD ) endif(CMAKE_BUILD_TYPE STREQUAL Devel) @@ -89,17 +46,17 @@ # add defines set(UtilitiesFinalFlags ${UtilitiesFinalFlags} - ${CommonFlags} ${OptimizationFlags} + ${CommonFlags} ) endif(CMAKE_BUILD_TYPE STREQUAL Release) # variable with all sources of this library set(UtilitiesSources + AlignedMalloc.cpp ../../include/Utilities/FixedPointTypes.inl ../../include/Utilities/EventSource.inl - ../../include/Utilities/SafeArray.inl - ../../include/Utilities/TlsVariable.inl - AlignedMalloc.cpp + ../../include/Utilities/SafeArray.inl + ../../include/Utilities/TlsVariable.inl CheckedStaticBox.cpp Console.cpp EventSource.cpp diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/Console.cpp pcsx2-1.4.0/common/src/Utilities/Console.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/Console.cpp 2014-12-21 11:41:01.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/Console.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -32,6 +32,15 @@ static wxString m_buffer; // used by ConsoleBuffer static Mutex m_bufferlock; // used by ConsoleBuffer +#ifdef __linux__ +static FILE *stdout_fp = stdout; + +void Console_SetStdout(FILE *fp) +{ + stdout_fp = fp; +} +#endif + // This function re-assigns the console log writer(s) to the specified target. It makes sure // to flush any contents from the buffered console log (which typically accumulates due to // log suspension during log file/window re-init operations) into the new log. @@ -55,11 +64,11 @@ writer.DoWriteLn( ConsoleBuffer_Get() ); } - const_cast(Console) = writer; - const_cast(DevConWriter) = writer; + Console = writer; + DevConWriter = writer; #ifdef PCSX2_DEBUG - const_cast(DbgCon) = writer; + DbgCon = writer; #endif } @@ -71,12 +80,12 @@ static bool hasDebugger = wxIsDebuggerRunning(); if( hasDebugger ) OutputDebugString( text ); #else - // send them to stderr - wxPrintf(L"%s", text.c_str()); - fflush(stderr); + fputs(text.utf8_str(), stdout_fp); + fflush(stdout_fp); #endif } + // -------------------------------------------------------------------------------------- // ConsoleNull // -------------------------------------------------------------------------------------- @@ -105,43 +114,43 @@ // -------------------------------------------------------------------------------------- #ifdef __linux__ -static __fi const wxChar* GetLinuxConsoleColor(ConsoleColors color) +static __fi const char* GetLinuxConsoleColor(ConsoleColors color) { switch(color) { case Color_Black: - case Color_StrongBlack: return L"\033[30m\033[1m"; + case Color_StrongBlack: return "\033[30m\033[1m"; - case Color_Red: return L"\033[31m"; - case Color_StrongRed: return L"\033[31m\033[1m"; + case Color_Red: return "\033[31m"; + case Color_StrongRed: return "\033[31m\033[1m"; - case Color_Green: return L"\033[32m"; - case Color_StrongGreen: return L"\033[32m\033[1m"; + case Color_Green: return "\033[32m"; + case Color_StrongGreen: return "\033[32m\033[1m"; - case Color_Yellow: return L"\033[33m"; - case Color_StrongYellow: return L"\033[33m\033[1m"; + case Color_Yellow: return "\033[33m"; + case Color_StrongYellow: return "\033[33m\033[1m"; - case Color_Blue: return L"\033[34m"; - case Color_StrongBlue: return L"\033[34m\033[1m"; + case Color_Blue: return "\033[34m"; + case Color_StrongBlue: return "\033[34m\033[1m"; // No orange, so use magenta. case Color_Orange: - case Color_Magenta: return L"\033[35m"; + case Color_Magenta: return "\033[35m"; case Color_StrongOrange: - case Color_StrongMagenta: return L"\033[35m\033[1m"; + case Color_StrongMagenta: return "\033[35m\033[1m"; - case Color_Cyan: return L"\033[36m"; - case Color_StrongCyan: return L"\033[36m\033[1m"; + case Color_Cyan: return "\033[36m"; + case Color_StrongCyan: return "\033[36m\033[1m"; // Use 'white' instead of grey. case Color_Gray: - case Color_White: return L"\033[37m"; + case Color_White: return "\033[37m"; case Color_StrongGray: - case Color_StrongWhite: return L"\033[37m\033[1m"; + case Color_StrongWhite: return "\033[37m\033[1m"; // On some other value being passed, clear any formatting. case Color_Default: - default: return L"\033[0m"; + default: return "\033[0m"; } } #endif @@ -166,16 +175,17 @@ static void __concall ConsoleStdout_DoSetColor( ConsoleColors color ) { #ifdef __linux__ - wxPrintf(L"\033[0m"); - wxPrintf(GetLinuxConsoleColor(color)); - fflush(stdout); + fprintf(stdout_fp, "\033[0m%s", GetLinuxConsoleColor(color)); + fflush(stdout_fp); #endif } static void __concall ConsoleStdout_SetTitle( const wxString& title ) { #ifdef __linux__ - wxPrintf(L"\033]0;%s\007", title.c_str()); + fputs("\033]0;", stdout_fp); + fputs(title.utf8_str(), stdout_fp); + fputs("\007", stdout_fp); #endif } @@ -558,7 +568,10 @@ ConsoleIndentScope::~ConsoleIndentScope() throw() { - LeaveScope(); + try { + LeaveScope(); + } + DESTRUCTOR_CATCHALL } void ConsoleIndentScope::EnterScope() @@ -581,8 +594,11 @@ ConsoleAttrScope::~ConsoleAttrScope() throw() { - Console.SetColor( m_old_color ); - Console.SetIndent( -m_tabsize ); + try { + Console.SetColor( m_old_color ); + Console.SetIndent( -m_tabsize ); + } + DESTRUCTOR_CATCHALL } @@ -597,15 +613,15 @@ // #define _DefaultWriter_ ConsoleWriter_Stdout -const IConsoleWriter Console = _DefaultWriter_; -const IConsoleWriter DevConWriter = _DefaultWriter_; +IConsoleWriter Console = _DefaultWriter_; +IConsoleWriter DevConWriter = _DefaultWriter_; bool DevConWriterEnabled = false; #ifdef PCSX2_DEBUG -const IConsoleWriter DbgConWriter = _DefaultWriter_; +IConsoleWriter DbgConWriter = _DefaultWriter_; #endif -const NullConsoleWriter NullCon = {}; +NullConsoleWriter NullCon = {}; // -------------------------------------------------------------------------------------- // ConsoleLogSource (implementations) diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/Exceptions.cpp pcsx2-1.4.0/common/src/Utilities/Exceptions.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/Exceptions.cpp 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/Exceptions.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -143,7 +143,7 @@ #if wxMAJOR_VERSION >= 3 __fi void pxOnAssert( const DiagnosticOrigin& origin, const wxString& msg) { - pxOnAssert( origin, WX_STR(msg) ); // wc_str ??? + pxOnAssert( origin, msg.wc_str() ); } __fi void pxOnAssert( const DiagnosticOrigin& origin, const FastFormatUnicode& msg) diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/FastFormatString.cpp pcsx2-1.4.0/common/src/Utilities/FastFormatString.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/FastFormatString.cpp 2015-01-16 19:57:09.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/FastFormatString.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -261,10 +261,13 @@ FastFormatUnicode::~FastFormatUnicode() throw() { - if (m_deleteDest) - delete m_dest; - else - m_buffer_tls.Get()->ReleaseBuffer(); + try { + if (m_deleteDest) + delete m_dest; + else + m_buffer_tls.Get()->ReleaseBuffer(); + } + DESTRUCTOR_CATCHALL } void FastFormatUnicode::Clear() @@ -396,10 +399,13 @@ FastFormatAscii::~FastFormatAscii() throw() { - if (m_deleteDest) - delete m_dest; - else - m_buffer_tls.Get()->ReleaseBuffer(); + try { + if (m_deleteDest) + delete m_dest; + else + m_buffer_tls.Get()->ReleaseBuffer(); + } + DESTRUCTOR_CATCHALL } void FastFormatAscii::Clear() diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/Linux/LnxMisc.cpp pcsx2-1.4.0/common/src/Utilities/Linux/LnxMisc.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/Linux/LnxMisc.cpp 2012-03-17 11:21:51.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/Linux/LnxMisc.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -55,3 +55,7 @@ return wxGetOsDescription(); } +void ScreensaverAllow(bool allow) +{ + // no-op +} diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/pxCheckBox.cpp pcsx2-1.4.0/common/src/Utilities/pxCheckBox.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/pxCheckBox.cpp 2011-07-24 13:02:50.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/pxCheckBox.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -75,9 +75,8 @@ // performs word wrapping on platforms that need it (eg mswindows). pxCheckBox& pxCheckBox::SetToolTip( const wxString& tip ) { - const wxString wrapped( pxFormatToolTipText(this, tip) ); - pxSetToolTip( m_checkbox, wrapped ); - pxSetToolTip( m_subtext, wrapped ); + pxSetToolTip( m_checkbox, tip ); + pxSetToolTip( m_subtext, tip ); return *this; } diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/pxRadioPanel.cpp pcsx2-1.4.0/common/src/Utilities/pxRadioPanel.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/pxRadioPanel.cpp 2010-08-05 01:39:31.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/pxRadioPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -107,12 +107,11 @@ void pxRadioPanel::_setToolTipImmediate( int idx, const wxString &tip ) { - const wxString wrapped( pxFormatToolTipText(this, tip) ); if( wxRadioButton* woot = m_objects[idx].LabelObj ) - woot->SetToolTip( wrapped ); + woot->SetToolTip(tip); if( pxStaticText* woot = m_objects[idx].SubTextObj ) - woot->SetToolTip( wrapped ); + woot->SetToolTip(tip); } // The SetToolTip API provided by this function applies the tooltip to both the radio @@ -149,6 +148,8 @@ } } +// Highlights (bold) the text of the default radio. +// Not intended for restoring default value at later time. pxRadioPanel& pxRadioPanel::SetDefaultItem( int idx ) { if( idx == m_DefaultIdx ) return *this; diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/pxStaticText.cpp pcsx2-1.4.0/common/src/Utilities/pxStaticText.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/pxStaticText.cpp 2011-07-24 13:02:50.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/pxStaticText.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,7 +23,12 @@ pxStaticText::pxStaticText( wxWindow* parent ) : _parent( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER ) { + m_align = wxALIGN_CENTRE_HORIZONTAL; + m_autowrap = true; + m_wrappedWidth = -1; m_heightInLines = 1; + + SetPaddingDefaults(); } pxStaticText::pxStaticText( wxWindow* parent, const wxString& label, wxAlignment align ) diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/pxTranslate.cpp pcsx2-1.4.0/common/src/Utilities/pxTranslate.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/pxTranslate.cpp 2014-08-02 11:34:44.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/pxTranslate.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,11 +26,10 @@ // -------------------------------------------------------------------------------------- const wxChar* __fastcall pxExpandMsg( const wxChar* englishContent ) { -#if wxMAJOR_VERSION >= 3 - wxString translation = wxGetTranslation( englishContent ); - return translation.wc_str(); +#if _WIN32 || wxMAJOR_VERSION < 3 + return wxGetTranslation(englishContent); #else - return wxGetTranslation( englishContent ); + return wxGetTranslation(englishContent).wc_str(); #endif } @@ -50,10 +49,9 @@ Console.WriteLn( Color_Green, L"Message: %s", message ); } } -#if wxMAJOR_VERSION >= 3 - wxString translation = wxGetTranslation( message ); - return translation.wc_str(); +#if _WIN32 || wxMAJOR_VERSION < 3 + return wxGetTranslation(message); #else - return wxGetTranslation( message ); + return wxGetTranslation( message ).wc_str(); #endif } diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/VirtualMemory.cpp pcsx2-1.4.0/common/src/Utilities/VirtualMemory.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/VirtualMemory.cpp 2014-12-12 20:46:52.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/VirtualMemory.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -336,154 +336,6 @@ #endif } - -// -------------------------------------------------------------------------------------- -// SpatialArrayReserve (implementations) -// -------------------------------------------------------------------------------------- - -SpatialArrayReserve::SpatialArrayReserve( const wxString& name ) : - _parent( name ) -{ - m_prot_mode = PageAccess_ReadWrite(); -} - -uint SpatialArrayReserve::_calcBlockBitArrayLength() const -{ - // divide by 8 (rounded up) to compress 8 bits into each byte. - // mask off lower bits (rounded up) to allow for 128-bit alignment and SSE operations. - return (((m_numblocks + 7) / 8) + 15) & ~15; -} - -void* SpatialArrayReserve::Reserve( size_t size, uptr base, uptr upper_bounds ) -{ - void* addr = _parent::Reserve( size, base, upper_bounds ); - if (!addr) return NULL; - - if (m_blocksize) SetBlockSizeInPages( m_blocksize ); - m_blockbits.Alloc( _calcBlockBitArrayLength() ); - - return addr; -} - -void SpatialArrayReserve::ReprotectCommittedBlocks( const PageProtectionMode& newmode ) -{ - if (!m_pages_commited) return; - - u8* curptr = GetPtr(); - const uint blockBytes = m_blocksize * __pagesize; - for (uint i=0; i #ifdef KERNEL @@ -528,7 +530,7 @@ /////////////////////////////////////////////////////////////////////////// // This is a "mostly" direct replacement for vsprintf, that is more secure and easier // to use than vsnprintf or vsprintf_s. See the docs for ssprintf for usage notes. -void vssappendf(std::string& dest, const char* format, va_list args) +static void vssappendf(std::string& dest, const char* format, va_list args) { int base; @@ -760,17 +762,54 @@ } } -void vssprintf( std::string& dest, const char* format, va_list args ) -{ - // Optimization: Memory is cheap. Allocating it on the fly is not. Allocate more room - // than we'll likely need right upfront! Also, strlen is slow, so better to just pick an - // arbitrarily generous value to reserve instead of basing it on string length. +#else +// To keep trace of license :) - dest.clear(); - dest.reserve( 96 ); - vssappendf( dest, format, args ); +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2015 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +// Note: std::vsnprintf requires C++11 (and the function must return the total +// number of characters which would have been written even if a truncation occured) +// Note2: Code is only used in debugger (perf is not important) +static void vssappendf(std::string& dest, const char* format, va_list args) +{ + char first_try[128]; // this function is called 99% (100%?) of the times for small string + va_list args_copy; + va_copy(args_copy, args); + + s32 size = std::vsnprintf(first_try, 128, format, args_copy) + 1; + + va_end(args_copy); + + if (size < 0) + return; + if (size < 128) { + dest += first_try; + return; + } + + // VLA extension. Not sure it is supported on windows. Maybe one days in C++ standard + // Performance is not important here + char output[size]; + std::vsnprintf(output, size, format, args); + dest += output; } + +#endif + void ssappendf( std::string& dest, const char* format, ...) { va_list args; @@ -778,59 +817,3 @@ vssappendf( dest, format, args ); va_end(args); } - -// This is a "mostly" direct replacement for sprintf, based on std::string. -// The most notable difference in use is the requirement of a "params" keyword delimiting -// the format string from the parameters used to fill the string's tokens. It looks -// like this in practice: -// -// ssprintf( dest, "Yo Joe, %d. In the Hizzou %s.", intval, strval ); -// -// In addition to all standard printf formatting tokens, ssprintf also supports a new token -// for std::string parameters as %hs (passed by reference/pointer). I opted for %hs (using 'h' -// as a qualifier) over %S because under MSVC %S acts as a char/widechar conversion. Note -// that these are passed by pointer so you *must* use the & operator most of the time. -// Example: -// -// ssprintf( dest, "Yo Joe, %hs.", &strval ); -// -// This can be a cavet of sorts since forgetting to use the & will always compile but -// will cause undefined behavior and odd crashes (much like how the same thing happens -// when exchanging an intvalu for a c-string normally -- it's just more tricky with -// strings since we're not used to prefixing sprintf parameters with &s). -// -// === 64-bit -- s64 / u64 -- Support === -// -// ssprintf supports u64/s64 via the L qualifier, which can be prefixed to any one of the -// integer tokens (d, i, x). This isn't standard, but it's easy and doesn't conflict with -// anything, and none of the other 64-bit qualifiers aren't really standard anyway. -// Example: -// -// ssprintf( dest, "Yo Joe, %Ld, %Lx.", int64, hex64 ); -// -void ssprintf(std::string& str, const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - vssprintf(str, fmt, args); - va_end(args); -} - -// See ssprintf for usage details and differences from sprintf formatting. -std::string fmt_string( const char* fmt, ... ) -{ - std::string retval; - va_list args; - va_start( args, fmt ); - vssprintf( retval, fmt, args ); - va_end( args ); - - return retval; -} - -std::string vfmt_string( const char* fmt, va_list args ) -{ - std::string retval; - vssprintf( retval, fmt, args ); - return retval; -} diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/Windows/WinMisc.cpp pcsx2-1.4.0/common/src/Utilities/Windows/WinMisc.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/Windows/WinMisc.cpp 2010-11-23 21:32:52.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/Windows/WinMisc.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -55,6 +55,29 @@ typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD); +// Win 10 SDK +#ifndef PRODUCT_CORE_N +# define PRODUCT_CORE_N 0x00000062 +#endif +#ifndef PRODUCT_CORE +# define PRODUCT_CORE 0x00000065 +#endif +#ifndef PRODUCT_PROFESSIONAL_WMC +# define PRODUCT_PROFESSIONAL_WMC 0x00000067 +#endif +#ifndef PRODUCT_EDUCATION +# define PRODUCT_EDUCATION 0x00000079 +#endif +#ifndef PRODUCT_EDUCATION_N +# define PRODUCT_EDUCATION_N 0x0000007A +#endif +#ifndef PRODUCT_ENTERPRISE_S +# define PRODUCT_ENTERPRISE_S 0x0000007D +#endif +#ifndef PRODUCT_ENTERPRISE_S_N +# define PRODUCT_ENTERPRISE_S_N 0x0000007E +#endif + // Calculates the Windows OS Version and install information, and returns it as a // human-readable string. :) // (Handy function borrowed from Microsoft's MSDN Online, and reformatted to use wxString.) @@ -92,7 +115,58 @@ // Test for the specific product. - if ( osvi.dwMajorVersion == 6 ) + if ( osvi.dwMajorVersion == 10 ) + { + if( osvi.dwMinorVersion == 0 ) + retval += ( osvi.wProductType == VER_NT_WORKSTATION ) ? L"Windows 10 " : L"Windows Server 2016 "; + + pGPI = (PGPI) GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo"); + + pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType); + + switch( dwType ) + { + case PRODUCT_CORE: retval += L"Home"; break; + case PRODUCT_CORE_N: retval += L"Home N"; break; + case PRODUCT_PROFESSIONAL: retval += L"Pro"; break; + case PRODUCT_PROFESSIONAL_N: retval += L"Pro N"; break; + case PRODUCT_ENTERPRISE: retval += L"Enterprise"; break; + case PRODUCT_ENTERPRISE_N: retval += L"Enterprise N"; break; + case PRODUCT_ENTERPRISE_S: retval += L"Enterprise 2015 LTSB"; break; + case PRODUCT_ENTERPRISE_S_N: retval += L"Enterprise 2015 LTSB N"; break; + case PRODUCT_EDUCATION: retval += L"Education"; break; + case PRODUCT_EDUCATION_N: retval += L"Education N"; break; + } + } + + if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion > 1 ) + { + if ( osvi.dwMinorVersion == 2 ) + retval += ( osvi.wProductType == VER_NT_WORKSTATION ) ? L"Windows 8 " : L"Windows Server 2012 "; + + if ( osvi.dwMinorVersion == 3 ) + retval += ( osvi.wProductType == VER_NT_WORKSTATION ) ? L"Windows 8.1 " : L"Windows Server 2012 R2 "; + + pGPI = (PGPI) GetProcAddress( GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo"); + + pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 0, 0, &dwType); + + switch( dwType ) + { + case PRODUCT_PROFESSIONAL: retval += L"Pro"; break; + case PRODUCT_PROFESSIONAL_N: retval += L"Pro N"; break; + case PRODUCT_PROFESSIONAL_WMC: retval += L"Pro with Media Center"; break; + case PRODUCT_ENTERPRISE: retval += L"Enterprise"; break; + case PRODUCT_ENTERPRISE_N: retval += L"Enterprise N"; break; + case PRODUCT_SERVER_FOUNDATION: retval += L"Foundation"; break; + case PRODUCT_STANDARD_SERVER: retval += L"Standard"; break; + case PRODUCT_STANDARD_SERVER_CORE: retval += L"Standard (core)"; break; + case PRODUCT_DATACENTER_SERVER: retval += L"Datacenter"; break; + case PRODUCT_DATACENTER_SERVER_CORE: retval += L"Datacenter (core)"; break; + } + } + + if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion <= 1 ) { if( osvi.dwMinorVersion == 0 ) retval += ( osvi.wProductType == VER_NT_WORKSTATION ) ? L"Windows Vista " : L"Windows Server 2008 "; @@ -170,7 +244,7 @@ if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) { retval += L"Windows XP "; - retval += ( osvi.wSuiteMask & VER_SUITE_PERSONAL ) ? L"Professional" : L"Home Edition"; + retval += ( osvi.wSuiteMask & VER_SUITE_PERSONAL ) ? L"Home Edition" : L"Professional"; } if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 ) @@ -241,3 +315,10 @@ return m_message_diag + L"\n\t" + GetMsgFromWindows(); } +void ScreensaverAllow(bool allow) +{ + EXECUTION_STATE flags = ES_CONTINUOUS; + if (!allow) + flags |= ES_DISPLAY_REQUIRED; + SetThreadExecutionState(flags); +} diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/wxGuiTools.cpp pcsx2-1.4.0/common/src/Utilities/wxGuiTools.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/wxGuiTools.cpp 2011-07-24 13:02:50.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/wxGuiTools.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -569,34 +569,24 @@ MoreStockCursors StockCursors; // -------------------------------------------------------------------------------------- -// pxFormatToolTipText / pxSetToolTip +// pxSetToolTip // -------------------------------------------------------------------------------------- -// This is the preferred way to assign tooltips to wxWindow-based objects, as it performs the -// necessary text wrapping on platforms that need it. On windows tooltips are wrapped at 600 -// pixels, or 66% of the screen width, whichever is smaller. GTK and MAC perform internal -// wrapping, so this function does a regular assignment there. +// This is the preferred way to assign tooltips to wxWidgets-based objects. On Windows it +// extends the tooltip time to the maximum possible. GTK seems to have indefinite +// tooltips, I don't know about OS X. -wxString pxFormatToolTipText( wxWindow* wind, const wxString& src ) +void pxSetToolTip( wxWindow* wind, const wxString& src ) { - // Windows needs manual tooltip word wrapping (sigh). - // GTK and Mac are a wee bit more clever (except in GTK tooltips don't show at all - // half the time because of some other bug .. sigh) + if( wind == NULL ) return; // Silently ignore nulls + wind->SetToolTip(src); + // Make tooltips show for as long as possible on Windows. Linux (GTK) can + // show tooltips indefinitely. #ifdef __WXMSW__ - if( wind == NULL ) return src; // Silently ignore nulls - int whee = wxGetDisplaySize().GetWidth() * 0.75; - return pxTextWrapper().Wrap( *wind, src, std::min( whee, 600 ) ).GetResult(); -#else - return src; + wind->GetToolTip()->SetAutoPop(32767); #endif } -void pxSetToolTip( wxWindow* wind, const wxString& src ) -{ - if( wind == NULL ) return; // Silently ignore nulls - wind->SetToolTip( pxFormatToolTipText(wind, src) ); -} - void pxSetToolTip( wxWindow& wind, const wxString& src ) { pxSetToolTip( &wind, src ); diff -Nru pcsx2-1.3.1+dfsg/common/src/Utilities/wxHelpers.cpp pcsx2-1.4.0/common/src/Utilities/wxHelpers.cpp --- pcsx2-1.3.1+dfsg/common/src/Utilities/wxHelpers.cpp 2015-01-18 18:25:46.000000000 +0000 +++ pcsx2-1.4.0/common/src/Utilities/wxHelpers.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -149,10 +149,16 @@ void wxDialogWithHelpers::Init( const pxDialogCreationFlags& cflags ) { + // Note to self: if any comments indicate platform specific behaviour then + // ifdef them out to see if they fix the issue. I wasted too much time + // figuring out why the close box wouldn't work on wxGTK modal dialogs that + // had a minimise button. +#if _WIN32 // This fixes it so that the dialogs show up in the task bar in Vista: // (otherwise they go stupid iconized mode if the user minimizes them) if( cflags.hasMinimizeBox ) SetExtraStyle(GetExtraStyle() & ~wxTOPLEVEL_EX_DIALOG); +#endif m_extraButtonSizer = NULL; @@ -161,16 +167,10 @@ delete wxHelpProvider::Set( new wxSimpleHelpProvider() ); #endif - // GTK/Linux Note: currently the Close (X) button doesn't appear to work in dialogs. Docs - // indicate that it should, so I presume the problem is in wxWidgets and that (hopefully!) - // an updated version will fix it later. I tried to fix it using a manual Connect but it - // didn't do any good. (problem could also be my Co-Linux / x-window manager) - Connect( pxEvt_OnDialogCreated, wxCommandEventHandler (wxDialogWithHelpers::OnDialogCreated) ); Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (wxDialogWithHelpers::OnOkCancel) ); Connect( wxID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (wxDialogWithHelpers::OnOkCancel) ); - Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler (wxDialogWithHelpers::OnCloseWindow) ); wxCommandEvent createEvent( pxEvt_OnDialogCreated ); createEvent.SetId( GetId() ); @@ -286,7 +286,7 @@ return *new pxStaticHeading( this, label ); } -bool wxDialogWithHelpers::Destroy() +void wxDialogWithHelpers::RememberPosition() { // Save the dialog position if the dialog is named... // FIXME : This doesn't get called if the app is exited by alt-f4'ing the main app window. @@ -311,20 +311,18 @@ saver.Entry( dlgName + L"_Pos", pos, screenRect.GetPosition() ); } } - - return _parent::Destroy(); -} - -void wxDialogWithHelpers::OnCloseWindow( wxCloseEvent& evt ) -{ - if( !IsModal() ) Destroy(); - evt.Skip(); } void wxDialogWithHelpers::OnOkCancel( wxCommandEvent& evt ) { - Close(); - evt.Skip(); + RememberPosition(); + + // Modal dialogs should be destroyed after ShowModal returns, otherwise there + // might be double delete problems if the dialog was declared on the stack. + if (!IsModal()) + Destroy(); + else + evt.Skip(); } void wxDialogWithHelpers::AddOkCancel( wxSizer &sizer, bool hasApply ) diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/3dnow.cpp pcsx2-1.4.0/common/src/x86emitter/3dnow.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/3dnow.cpp 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/3dnow.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "legacy_internal.h" - -//------------------------------------------------------------------ -// 3DNOW instructions [Anyone caught dead using these will be re-killed] -//------------------------------------------------------------------ - -/* femms */ -emitterT void FEMMS( void ) -{ - xWrite16( 0x0E0F ); -} - -emitterT void PFCMPEQMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xB0 ); -} - -emitterT void PFCMPGTMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xA0 ); -} - -emitterT void PFCMPGEMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x90 ); -} - -emitterT void PFADDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x9E ); -} - -emitterT void PFADDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x9E ); -} - -emitterT void PFSUBMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x9A ); -} - -emitterT void PFSUBRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x9A ); -} - -emitterT void PFMULMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xB4 ); -} - -emitterT void PFMULRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xB4 ); -} - -emitterT void PFRCPMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x96 ); -} - -emitterT void PFRCPRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x96 ); -} - -emitterT void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA6 ); -} - -emitterT void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xB6 ); -} - -emitterT void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x97 ); -} - -emitterT void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA7 ); -} - -emitterT void PF2IDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x1D ); -} - -emitterT void PF2IDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x1D ); -} - -emitterT void PI2FDMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x0D ); -} - -emitterT void PI2FDRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x0D ); -} - -emitterT void PFMAXMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0xA4 ); -} - -emitterT void PFMAXRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0xA4 ); -} - -emitterT void PFMINMtoR( x86IntRegType to, uptr from ) -{ - xWrite16( 0x0F0F ); - ModRM( 0, to, DISP32 ); - xWrite32( from ); - xWrite8( 0x94 ); -} - -emitterT void PFMINRtoR( x86IntRegType to, x86IntRegType from ) -{ - xWrite16( 0x0F0F ); - ModRM( 3, to, from ); - xWrite8( 0x94 ); -} diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/CMakeLists.txt pcsx2-1.4.0/common/src/x86emitter/CMakeLists.txt --- pcsx2-1.3.1+dfsg/common/src/x86emitter/CMakeLists.txt 2014-09-12 17:30:34.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -6,55 +6,12 @@ endif(NOT TOP_CMAKE_WAS_SOURCED) -# library name set(Output x86emitter) -# set common flags set(CommonFlags -fno-strict-aliasing ) -# set optimization flags -set(OptimizationFlags - -falign-functions - -falign-jumps - -falign-labels - -falign-loops - -fcaller-saves - -fcprop-registers - -fcrossjumping - -fcse-follow-jumps - -fcse-skip-blocks - -fdefer-pop - -fdelete-null-pointer-checks - -fgcse - -fgcse-lm - -fif-conversion - -fif-conversion2 - -fmerge-constants - -foptimize-sibling-calls - -fpeephole2 - -fregmove - -freorder-blocks - -freorder-functions - -frerun-cse-after-loop - -fsched-interblock - -fsched-spec - -fstrict-overflow - -fthread-jumps - -ftree-ccp - -ftree-ch - -ftree-copyrename - -ftree-dce - -ftree-dominator-opts - -ftree-fre - -ftree-lrs - -ftree-pre - -ftree-sra - -ftree-ter - -ftree-vrp - -funit-at-a-time) - #Clang doesn't support a few common flags that GCC does. if(NOT USE_CLANG) set(x86emitterFinalFlags @@ -77,7 +34,7 @@ # add defines set(x86emitterFinalFlags ${x86emitterFinalFlags} - ${CommonFlags} ${OptimizationFlags} -DPCSX2_DEVBUILD + ${CommonFlags} -DPCSX2_DEVBUILD ) endif(CMAKE_BUILD_TYPE STREQUAL Devel) @@ -87,13 +44,12 @@ # add defines set(x86emitterFinalFlags ${x86emitterFinalFlags} - ${CommonFlags} ${OptimizationFlags} + ${CommonFlags} ) endif(CMAKE_BUILD_TYPE STREQUAL Release) # variable with all sources of this library set(x86emitterSources - 3dnow.cpp cpudetect.cpp fpu.cpp groups.cpp diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/cpudetect.cpp pcsx2-1.4.0/common/src/x86emitter/cpudetect.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/cpudetect.cpp 2014-08-27 08:49:44.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/cpudetect.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,23 +22,13 @@ __aligned16 x86capabilities x86caps; // Recompiled code buffer for SSE and MXCSR feature testing. -static __pagealigned u8 recSSE[__pagesize]; static __pagealigned u8 targetFXSAVE[512]; -#ifdef __linux__ -# include -# include -#endif - -static const char* bool_to_char( bool testcond ) -{ - return testcond ? "true" : "false"; -} - // Warning! We've had problems with the MXCSR detection code causing stack corruption in // MSVC PGO builds. The problem was fixed when I moved the MXCSR code to this function, and // moved the recSSE[] array to a global static (it was local to cpudetectInit). Commented // here in case the nutty crash ever re-surfaces. >_< +// Note: recSSE was deleted void x86capabilities::SIMD_EstablishMXCSRmask() { if( !hasStreamingSIMDExtensions ) return; @@ -53,32 +43,9 @@ MXCSR_Mask.bitmask = 0xFFFF; // SSE2 features added } -#ifdef _M_X86_64 -#ifdef _MSC_VER - // Use the intrinsic that is provided with MSVC 2012 - _fxsave(&targetFXSAVE); -#else - // GCC path is supported since GCC 4.6.x - __asm __volatile ("fxsave %0" : "+m" (targetFXSAVE)); -#endif -#else - // Grab the MXCSR mask the x86_32 way. - // - // the fxsave buffer must be 16-byte aligned to avoid GPF. I just save it to an - // unused portion of recSSE, since it has plenty of room to spare. - - if( !CanEmitShit() ) return; - - HostSys::MemProtectStatic( recSSE, PageAccess_ReadWrite() ); - xSetPtr( recSSE ); - xFXSAVE( ptr[&targetFXSAVE] ); - xRET(); - - HostSys::MemProtectStatic( recSSE, PageAccess_ExecOnly() ); - - CallAddress( recSSE ); -#endif + // Work for recent enough GCC/CLANG/MSVC 2012 + _fxsave(&targetFXSAVE); u32 result = (u32&)targetFXSAVE[28]; // bytes 28->32 are the MXCSR_Mask. if( result != 0 ) @@ -182,7 +149,7 @@ static const char* tbl_x86vendors[] = { "GenuineIntel", - "AuthenticAMD" + "AuthenticAMD", "Unknown ", }; @@ -197,8 +164,10 @@ u32 cmds; //AMD 64 STUFF +#ifdef __x86_64__ u32 x86_64_8BITBRANDID; u32 x86_64_12BITBRANDID; +#endif memzero( VendorName ); __cpuid( regs, 0 ); @@ -227,18 +196,30 @@ Model = (regs[ 0 ] >> 4) & 0xf; FamilyID = (regs[ 0 ] >> 8) & 0xf; TypeID = (regs[ 0 ] >> 12) & 0x3; +#ifdef __x86_64__ x86_64_8BITBRANDID = regs[ 1 ] & 0xff; +#endif Flags = regs[ 3 ]; Flags2 = regs[ 2 ]; } + if ( cmds >= 0x00000007 ) + { + // Note: ECX must be 0 for AVX2 detection. + __cpuidex( regs, 0x00000007, 0 ); + + SEFlag = regs[ 1 ]; + } + __cpuid( regs, 0x80000000 ); cmds = regs[ 0 ]; if ( cmds >= 0x80000001 ) { __cpuid( regs, 0x80000001 ); +#ifdef __x86_64__ x86_64_12BITBRANDID = regs[1] & 0xfff; +#endif EFlags2 = regs[ 2 ]; EFlags = regs[ 3 ]; } @@ -289,10 +270,11 @@ if((Flags2 >> 27) & 1) // OSXSAVE { - if((__xgetbv(0) & 6) == 6) // XFEATURE_ENABLED_MASK[2:1] = '11b' (XMM state and YMM state are enabled by OS). + if((_xgetbv(0) & 6) == 6) // XFEATURE_ENABLED_MASK[2:1] = '11b' (XMM state and YMM state are enabled by OS). { hasAVX = ( Flags2 >> 28 ) & 1; //avx hasFMA = ( Flags2 >> 12 ) & 1; //fma + hasAVX2 = ( SEFlag >> 5 ) & 1; //avx2 } } @@ -316,77 +298,3 @@ else return (u32)( _CPUSpeedHz( span / 500 ) / 2000 ); } - -// Special extended version of SIMD testning, which uses exceptions to double-check the presence -// of SSE2/3/4 instructions. Useful if you don't trust cpuid (at least one report of an invalid -// cpuid has been reported on a Core2 Quad -- the user fixed it by clearing his CMOS). -// -// Results of CPU -void x86capabilities::SIMD_ExceptionTest() -{ - HostSys::MemProtectStatic( recSSE, PageAccess_ReadWrite() ); - - ////////////////////////////////////////////////////////////////////////////////////////// - // SIMD Instruction Support Detection (Second Pass) - // - - if( CanTestInstructionSets() ) - { - xSetPtr( recSSE ); - xMOVDQU( ptr[ecx], xmm1 ); - xMOVSLDUP( xmm1, xmm0 ); - xMOVDQU( xmm1, ptr[ecx] ); - xRET(); - - u8* funcSSSE3 = xGetPtr(); - xMOVDQU( ptr[ecx], xmm1 ); - xPABS.W( xmm1, xmm0 ); - xMOVDQU( xmm1, ptr[ecx] ); - xRET(); - - u8* funcSSE41 = xGetPtr(); - xMOVDQU( ptr[ecx], xmm1 ); - xBLEND.VPD( xmm1, xmm0 ); - xMOVDQU( xmm1, ptr[ecx] ); - xRET(); - - HostSys::MemProtectStatic( recSSE, PageAccess_ExecOnly() ); - - bool sse3_result = _test_instruction( recSSE ); // sse3 - bool ssse3_result = _test_instruction( funcSSSE3 ); - bool sse41_result = _test_instruction( funcSSE41 ); - - // Test for and log any irregularities here. - // We take the instruction test result over cpuid since (in theory) it should be a - // more reliable gauge of the cpu's actual ability. But since a difference in bit - // and actual ability may represent a cmos/bios problem, we report it to the user. - - if( sse3_result != !!hasStreamingSIMD3Extensions ) - { - Console.Warning( "SSE3 Detection Inconsistency: cpuid=%s, test_result=%s", - bool_to_char( !!hasStreamingSIMD3Extensions ), bool_to_char( sse3_result ) ); - - hasStreamingSIMD3Extensions = sse3_result; - } - - if( ssse3_result != !!hasSupplementalStreamingSIMD3Extensions ) - { - Console.Warning( "SSSE3 Detection Inconsistency: cpuid=%s, test_result=%s", - bool_to_char( !!hasSupplementalStreamingSIMD3Extensions ), bool_to_char( ssse3_result ) ); - - hasSupplementalStreamingSIMD3Extensions = ssse3_result; - } - - if( sse41_result != !!hasStreamingSIMD4Extensions ) - { - Console.Warning( "SSE4 Detection Inconsistency: cpuid=%s, test_result=%s", - bool_to_char( !!hasStreamingSIMD4Extensions ), bool_to_char( sse41_result ) ); - - hasStreamingSIMD4Extensions = sse41_result; - } - - } - - SIMD_EstablishMXCSRmask(); -} - diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/cpudetect_internal.h pcsx2-1.4.0/common/src/x86emitter/cpudetect_internal.h --- pcsx2-1.3.1+dfsg/common/src/x86emitter/cpudetect_internal.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/cpudetect_internal.h 2016-01-05 17:28:08.000000000 +0000 @@ -37,20 +37,3 @@ SingleCoreAffinity(); virtual ~SingleCoreAffinity() throw(); }; - -// -------------------------------------------------------------------------------------- -// SIMD "Manual" Detection, using Invalid Instruction Checks -// -------------------------------------------------------------------------------------- -// -// Note: This API doesn't support GCC/Linux. Looking online it seems the only -// way to simulate the Microsoft SEH model is to use unix signals, and the 'sigaction' -// function specifically. A linux coder could implement this using sigaction at a later -// date, however its not really a big deal: CPUID should be 99-100% accurate, as no modern -// software would work on the CPU if it mis-reported capabilities. However there are known -// cases of a CPU failing to report supporting instruction sets it does in fact support. -// This secondary test fixes such cases (although apparently a CMOS reset does as well). -// - -extern bool CanEmitShit(); -extern bool CanTestInstructionSets(); -extern bool _test_instruction( void* pfnCall ); diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/LnxCpuDetect.cpp pcsx2-1.4.0/common/src/x86emitter/LnxCpuDetect.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/LnxCpuDetect.cpp 2010-11-24 02:49:23.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/LnxCpuDetect.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -28,25 +28,6 @@ LogicalCores = wxThread::GetCPUCount(); } -bool CanEmitShit() -{ - // In Linux I'm pretty sure TLS always works, none of the funny business that Windows - // has involving DLLs. >_< - return true; -} - -bool CanTestInstructionSets() -{ - // Not implemented yet for linux. (see cpudetect_internal.h for details) - return false; -} - -bool _test_instruction( void* pfnCall ) -{ - // Not implemented yet for linux. (see cpudetect_internal.h for details) - return false; -} - // Not implemented yet for linux (see cpudetect_internal.h for details) SingleCoreAffinity::SingleCoreAffinity() {} SingleCoreAffinity::~SingleCoreAffinity() throw() {} diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/simd.cpp pcsx2-1.4.0/common/src/x86emitter/simd.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/simd.cpp 2014-07-12 10:47:35.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/simd.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -829,13 +829,6 @@ // the FPU results will be invalid. __fi void xEMMS() { xWrite16( 0x770F ); } -// [3DNow] Same as EMMS, but an AMD special version which may (or may not) leave MMX regs -// in an undefined state (which is fine, since presumably you're done using them anyway). -// This instruction is thus faster than EMMS on K8s, but all newer AMD cpus use the same -// logic for either EMMS or FEMMS. -// Conclusion: Obsolete. Just use EMMS instead. -__fi void xFEMMS() { xWrite16( 0x0E0F ); } - // Store Streaming SIMD Extension Control/Status to Mem32. __emitinline void xSTMXCSR( const xIndirect32& dest ) diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/WinCpuDetect.cpp pcsx2-1.4.0/common/src/x86emitter/WinCpuDetect.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/WinCpuDetect.cpp 2010-11-23 21:32:52.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/WinCpuDetect.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -39,37 +39,6 @@ LogicalCores = CPUs; } -bool _test_instruction( void* pfnCall ) -{ - __try { - u128 regsave; - ((void (__fastcall *)(void*))pfnCall)( ®save ); - } - __except(EXCEPTION_EXECUTE_HANDLER) { return false; } - - return true; -} - -bool CanEmitShit() -{ - // Under Windows, pre 0.9.6 versions of PCSX2 may not initialize the TLS - // register (FS register), so plugins (DLLs) using our x86emitter in multithreaded - // mode will just crash/fail if it tries to do the instruction set tests. - -#if x86EMIT_MULTITHREADED - static __threadlocal int tls_failcheck; - __try { tls_failcheck = 1; } - __except(EXCEPTION_EXECUTE_HANDLER) { return false; } -#endif - - return true; -} - -bool CanTestInstructionSets() -{ - return CanEmitShit(); -} - SingleCoreAffinity::SingleCoreAffinity() { s_threadId = NULL; diff -Nru pcsx2-1.3.1+dfsg/common/src/x86emitter/x86emitter.cpp pcsx2-1.4.0/common/src/x86emitter/x86emitter.cpp --- pcsx2-1.3.1+dfsg/common/src/x86emitter/x86emitter.cpp 2014-07-30 23:18:10.000000000 +0000 +++ pcsx2-1.4.0/common/src/x86emitter/x86emitter.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1022,4 +1022,135 @@ xMOVDQA( dest, ptr[&xmm_data[dest.Id*2]] ); } +////////////////////////////////////////////////////////////////////////////////////////// +// Helper function to handle the various functions ABI + +__emitinline void xFastCall(void *func, const xRegister32& a1, const xRegister32& a2) +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + if (!a1.IsEmpty()) + xMOV(ecx, a1); + + if (!a2.IsEmpty()) + xMOV(edx, a2); + + xCALL(func); +#endif +} + +__emitinline void xFastCall(void *func, const xRegisterSSE& a1, const xRegisterSSE& a2) +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + xMOVD(ecx, a1); + xMOVD(edx, a2); + + xCALL(func); +#endif } + +__emitinline void xFastCall(void *func, u32 a1, u32 a2) +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + xMOV(ecx, a1); + xMOV(edx, a2); + + xCALL(func); +#endif +} + +__emitinline void xFastCall(void *func, u32 a1) +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + xMOV(ecx, a1); + + xCALL(func); +#endif +} + +__emitinline void xStdCall(void *func, u32 a1) +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + // GCC note: unlike C call, GCC doesn't requires + // strict 16B alignment on std call + xPUSH(a1); + xCALL(func); +#endif +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Helper object to handle ABI frame + +xScopedStackFrame::xScopedStackFrame(bool base_frame) +{ + m_base_frame = base_frame; + +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + + // Create a new frame + if (m_base_frame) { + xPUSH( ebp ); + xMOV( ebp, esp ); + } + + // Save the register context + xPUSH( edi ); + xPUSH( esi ); + xPUSH( ebx ); + +#ifdef __GNUC__ + // Realign the stack to 16 byte + if (m_base_frame) { + xSUB( esp, 12); + } +#endif + +#endif +} + +xScopedStackFrame::~xScopedStackFrame() +{ +#ifdef __x86_64__ + // NEW ABI + pxAssert(0); +#else + +#ifdef __GNUC__ + // Restore the stack (due to the above alignment) + // Potentially it can be restored from ebp + if (m_base_frame) { + xADD( esp, 12); + } +#endif + + // Restore the register context + xPOP( ebx ); + xPOP( esi ); + xPOP( edi ); + + // Destroy the frame + if (m_base_frame) { + xLEAVE(); + } + +#endif +} + +} // End namespace x86Emitter diff -Nru pcsx2-1.3.1+dfsg/common/svn_readme.txt pcsx2-1.4.0/common/svn_readme.txt --- pcsx2-1.3.1+dfsg/common/svn_readme.txt 2009-02-24 02:08:37.000000000 +0000 +++ pcsx2-1.4.0/common/svn_readme.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,17 +1,17 @@ - -Folder: vsprops/ - - Contains Win32-specific build scripts and .vsprops files for use by Win32 projects - of our many (many!) plugins. - -Folder: include/ - - Houses the common include files for various shared portions of Pcsx2 code. The most - significant are the PS2Edefs / PS2Etypes files (plugin APIs). Other code snippets\ - and generic usefuls may be added at a later date. - -Folder: src/ - - Source code for snippets and libs maintained by the Pcsx2 Team. Code is compiled into - libs, which are found in /deps. (automatically included into your plugin linker + +Folder: vsprops/ + + Contains Win32-specific build scripts and .vsprops files for use by Win32 projects + of our many (many!) plugins. + +Folder: include/ + + Houses the common include files for various shared portions of Pcsx2 code. The most + significant are the PS2Edefs / PS2Etypes files (plugin APIs). Other code snippets\ + and generic usefuls may be added at a later date. + +Folder: src/ + + Source code for snippets and libs maintained by the Pcsx2 Team. Code is compiled into + libs, which are found in /deps. (automatically included into your plugin linker search path if you use the common/vsprops/) \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/3rdpartyDeps.props pcsx2-1.4.0/common/vsprops/3rdpartyDeps.props --- pcsx2-1.3.1+dfsg/common/vsprops/3rdpartyDeps.props 2010-04-14 19:47:29.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/3rdpartyDeps.props 2016-01-05 17:28:08.000000000 +0000 @@ -6,7 +6,7 @@ - $(SvnRootDir)\3rdparty\;%(AdditionalIncludeDirectories) + $(SvnRootDir)\3rdparty\;$(SvnRootDir)\3rdparty\soundtouch\;%(AdditionalIncludeDirectories) $(SvnRootDir)\deps\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/BaseProperties.props pcsx2-1.4.0/common/vsprops/BaseProperties.props --- pcsx2-1.3.1+dfsg/common/vsprops/BaseProperties.props 2010-04-15 22:18:32.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/BaseProperties.props 2016-01-05 17:28:08.000000000 +0000 @@ -10,7 +10,7 @@ true - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;%(AdditionalIncludeDirectories) + $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets3.0\include;%(AdditionalIncludeDirectories) __WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) 16Bytes true @@ -24,14 +24,11 @@ true Windows - - .\postBuild.cmd "$(TargetPath)" "$(TargetName)" $(TargetExt) $(PcsxSubsection) - "$(SvnCommonDir)\vsprops\preBuild.cmd" "$(ProjectRootDir)" - $(SvnRootDir)\common\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\common\include;$(SolutionDir)\3rdparty\wxwidgets3.0\include;%(AdditionalIncludeDirectories) \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/CommonLibrary.props pcsx2-1.4.0/common/vsprops/CommonLibrary.props --- pcsx2-1.3.1+dfsg/common/vsprops/CommonLibrary.props 2010-04-14 19:48:32.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/CommonLibrary.props 2016-01-05 17:28:08.000000000 +0000 @@ -11,7 +11,7 @@ - $(SvnRootDir)\common\include\$(ProjectName);$(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty;%(AdditionalIncludeDirectories) + $(SvnRootDir)\common\include\$(ProjectName);$(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxwidgets3.0\include;$(SvnRootDir)\3rdparty;%(AdditionalIncludeDirectories) __WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) 16Bytes true diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/postBuild.unknown pcsx2-1.4.0/common/vsprops/postBuild.unknown --- pcsx2-1.3.1+dfsg/common/vsprops/postBuild.unknown 2014-03-23 14:44:43.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/postBuild.unknown 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -::@echo off -:: -:: Usage: postBuild.cmd SourcePath DestFile DestExt {plugins} -:: -:: SourcePath - $(TargetPath) - Fully qualified path of the generated target file. -:: DestFile - Base filename of the target/dest, without extension! -:: DestExt - Extension of the target/dest! -:: plugins - optional parameter used to generate plugins into the /plugins folder -:: -:: The destination file is determined by the PCSX2_TARGET_DIR environment var. - -SETLOCAL ENABLEEXTENSIONS -if defined PCSX2_TARGET_COPY CALL :TestAndCopy "%PCSX2_TARGET_COPY%" %1 %2 %3 %4 -ENDLOCAL -exit 0 - -if exists postBuild.inc.cmd call postBuild.inc.cmd - -:TestAndCopy -:: Subroutine. First parameter is our Target Dir. Since it's a parameter into -:: the subroutine, we can use tilda expansion to handle quotes correctly. :) - -if NOT EXIST "%~1" ( - md "%~1" -) - -:: Error checking. Try to change to the dir. If it fails, it means the dir is -:: actually a file, and we should cancel the script. - -set mycwd="%CD%" -cd "%~1" -if %ERRORLEVEL% NEQ 0 goto :eof -cd %mycwd% - -set pcsxoutdir=%~1\%~5 -set pcsxoutname=%pcsxoutdir%\%~3%4 - -IF NOT EXIST "%pcsxoutdir%" ( - md "%pcsxoutdir%" -) - -copy /Y "%~2" "%pcsxoutname%" -if %ERRORLEVEL% EQU 0 ( - echo Target copied to %pcsxoutname% -) - -goto :eof - -:quit diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/preBuild.cmd pcsx2-1.4.0/common/vsprops/preBuild.cmd --- pcsx2-1.3.1+dfsg/common/vsprops/preBuild.cmd 2014-04-06 11:38:54.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/preBuild.cmd 2016-01-05 17:28:08.000000000 +0000 @@ -1,54 +1,47 @@ -::@echo off -:: This file GENERATES the automatic GIT revision/version tag. -:: It uses the git.exe program to create an "svnrev.h" file for whichever -:: project is being compiled, during the project's pre-build step. -:: -:: The git.exe program is part of the msysgit installation. -:: -:: MsysGit can be downloaded from http://msysgit.github.io/ -:: -:: Usage: preBuild.cmd ProjectSrcDir VspropsDir -:: -:: ProjectSrcDir - $(ProjectDir)\.. - Top-level Directory of project source code. - -SETLOCAL ENABLEEXTENSIONS - -set mydir=%~dp0 - -IF "%PROGRAMFILES(x86)%" == "" do ( - set PROGRAMFILES(x86)=%PROGRAMFILES% -) - -set PATH=%PATH%;"%PROGRAMFILES(x86)%\Git\bin" - -FOR /F "delims=+" %%i IN ('"git show -s --format=%%%ci HEAD"') do ( - set REV3=%%i -) - -set REV2=%REV3: =% -set REV1=%REV2:-=% -set REV=%REV1::=% - -git show -s -if %ERRORLEVEL% NEQ 0 ( - echo Automatic version detection unavailable. - echo If you want to have the version string print correctly, - echo make sure your Git.exe is in the default installation directory, - echo or in your PATH. - echo You can safely ignore this message - a dummy string will be printed. - - echo #define SVN_REV_UNKNOWN > "%CD%\svnrev.h" - echo #define SVN_REV 0ll >> "%CD%\svnrev.h" - echo #define SVN_MODS 0 >> "%CD%\svnrev.h" - echo set SVN_REV=0 > "%CD%\postBuild.inc.cmd" -) else ( - echo #define SVN_REV %REV%ll > "%CD%\svnrev.h" - echo #define SVN_MODS 0 /* Not implemented at the moment. */ >> "%CD%\svnrev.h" - echo set SVN_REV=%REV% > "%CD%\postBuild.inc.cmd" -) - -copy /Y "%mydir%\postBuild.unknown" "%CD%\postBuild.cmd" - -ENDLOCAL -:: Always return an errorlevel of 0 -- this allows compilation to continue if SubWCRev failed. -exit /B 0 +::@echo off +:: This file GENERATES the automatic GIT revision/version tag. +:: It uses the git.exe program to create an "svnrev.h" file for whichever +:: project is being compiled, during the project's pre-build step. +:: +:: The git.exe program is part of the msysgit installation. +:: +:: MsysGit can be downloaded from http://msysgit.github.io/ +:: +:: Usage: preBuild.cmd ProjectSrcDir VspropsDir +:: +:: ProjectSrcDir - $(ProjectDir)\.. - Top-level Directory of project source code. + +SETLOCAL ENABLEEXTENSIONS + +IF EXIST "%ProgramFiles(x86)%\Git\bin\git.exe" SET "GITPATH=%ProgramFiles(x86)%\Git\bin" +IF EXIST "%ProgramFiles%\Git\bin\git.exe" SET "GITPATH=%ProgramFiles%\Git\bin" +IF EXIST "%ProgramW6432%\Git\bin\git.exe" SET "GITPATH=%ProgramW6432%\Git\bin" +IF DEFINED GITPATH SET "PATH=%PATH%;%GITPATH%" + +FOR /F "tokens=1-2" %%i IN ('"git show -s --format=%%%ci HEAD 2> NUL"') do ( + set REV3=%%i%%j +) + +set REV2=%REV3: =% +set REV1=%REV2:-=% +set REV=%REV1::=% + +git show -s > NUL 2>&1 +if %ERRORLEVEL% NEQ 0 ( + echo Automatic version detection unavailable. + echo If you want to have the version string print correctly, + echo make sure your Git.exe is in the default installation directory, + echo or in your PATH. + echo You can safely ignore this message - a dummy string will be printed. + + echo #define SVN_REV_UNKNOWN > "%CD%\svnrev.h" + echo #define SVN_REV 0ll >> "%CD%\svnrev.h" + echo #define SVN_MODS 0 >> "%CD%\svnrev.h" +) else ( + echo #define SVN_REV %REV%ll > "%CD%\svnrev.h" + echo #define SVN_MODS 0 /* Not implemented at the moment. */ >> "%CD%\svnrev.h" +) + +ENDLOCAL +:: Always return an errorlevel of 0 -- this allows compilation to continue if SubWCRev failed. +exit /B 0 diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/pthreads.props pcsx2-1.4.0/common/vsprops/pthreads.props --- pcsx2-1.3.1+dfsg/common/vsprops/pthreads.props 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/pthreads.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,29 +1,13 @@  - - <_ProjectFileVersion>10.0.30128.1 - <_PropertySheetDisplayName>w32pthreads - - $(SvnRootDir)\3rdparty\w32pthreads\include;%(AdditionalIncludeDirectories) - WIN32_PTHREADS;__CLEANUP_SEH;%(PreprocessorDefinitions) + $(SolutionDir)3rdparty\pthreads4w\include;%(AdditionalIncludeDirectories) + PTW32_STATIC_LIB;__CLEANUP_SEH;%(PreprocessorDefinitions) Async - - w32pthreads_lib.lib;%(AdditionalDependencies) - - - w32pthreads_lib-dbg.lib;%(AdditionalDependencies) - - - w32pthreads_lib-dev.lib;%(AdditionalDependencies) - + + __CLEANUP_SEH;%(PreprocessorDefinitions) + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/readme.txt pcsx2-1.4.0/common/vsprops/readme.txt --- pcsx2-1.3.1+dfsg/common/vsprops/readme.txt 2009-03-21 04:01:44.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/readme.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,30 +1,30 @@ - -Decriptions of Provided .vsprops Sheets ---------------------------------------- - - * plugin_svnroot - Provides a set of semi-standard user macros for plugins that - conform to an expected folder layout. Each user macro can be optionally overridden - by the plugin using its own property sheet, if needed. - - See the contents of plugin_svnroot for explanations of the User Macros used by all - other properties sheets lested below. - - - * 3rdPartyDeps - Adds the /deps folder to the linker search path. Does not add - any actual dependencies. You must add those manually. - - * pthreads - Adds the w32pthreads library to your project, along with the expected - compiler defines for correctly compiling and linking pthreads. - - * BaseProperties - Sets up standard Output and Intermediate directories, warning levels, - struct alignment, and other settings required for Pcsx2 and its libs to link in - a workable fashion. Adds standard preprocessor defines for: - __WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE - - * IncrementalLinking - Enables incremental linking, for use in devel/debug modes only. - Incremental linking force-disables Whole Program Optimization, but builds the result - .exe/.dll much quicker usually. - - * GlobalLinking - Enables full support for Whole Program Optimization, and force- - disables any conflicting incremental link settings. + +Decriptions of Provided .vsprops Sheets +--------------------------------------- + + * plugin_svnroot - Provides a set of semi-standard user macros for plugins that + conform to an expected folder layout. Each user macro can be optionally overridden + by the plugin using its own property sheet, if needed. + + See the contents of plugin_svnroot for explanations of the User Macros used by all + other properties sheets lested below. + + + * 3rdPartyDeps - Adds the /deps folder to the linker search path. Does not add + any actual dependencies. You must add those manually. + + * pthreads - Adds the w32pthreads library to your project, along with the expected + compiler defines for correctly compiling and linking pthreads. + + * BaseProperties - Sets up standard Output and Intermediate directories, warning levels, + struct alignment, and other settings required for Pcsx2 and its libs to link in + a workable fashion. Adds standard preprocessor defines for: + __WIN32__;WIN32;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE + + * IncrementalLinking - Enables incremental linking, for use in devel/debug modes only. + Incremental linking force-disables Whole Program Optimization, but builds the result + .exe/.dll much quicker usually. + + * GlobalLinking - Enables full support for Whole Program Optimization, and force- + disables any conflicting incremental link settings. \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/common/vsprops/wxWidgetsGui.props pcsx2-1.4.0/common/vsprops/wxWidgetsGui.props --- pcsx2-1.3.1+dfsg/common/vsprops/wxWidgetsGui.props 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/common/vsprops/wxWidgetsGui.props 2016-01-05 17:28:08.000000000 +0000 @@ -10,22 +10,16 @@ wxUSE_UNICODE=1;%(PreprocessorDefinitions) Async - - wxAdv28.lib;wxBase28.lib;wxCore28.lib;zlib.lib;libjpeg7.lib;%(AdditionalDependencies) + + zlib.lib;libjpeg7.lib;%(AdditionalDependencies) $(SvnRootDir)\deps\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - - wxAdv28-dbg.lib;wxBase28-dbg.lib;wxCore28-dbg.lib;zlib-dbg.lib;libjpeg7-dbg.lib;%(AdditionalDependencies) + + zlib-dbg.lib;libjpeg7-dbg.lib;%(AdditionalDependencies) $(SvnRootDir)\deps\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) - wxAdv28-dev.lib;wxBase28-dev.lib;wxCore28-dev.lib;zlib-dev.lib;libjpeg7-dev.lib;%(AdditionalDependencies) + zlib-dev.lib;libjpeg7-dev.lib;%(AdditionalDependencies) $(SvnRootDir)\deps\$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) diff -Nru pcsx2-1.3.1+dfsg/debian/changelog pcsx2-1.4.0/debian/changelog --- pcsx2-1.3.1+dfsg/debian/changelog 2015-08-10 10:30:38.000000000 +0000 +++ pcsx2-1.4.0/debian/changelog 2016-01-05 17:44:23.000000000 +0000 @@ -1,17 +1,18 @@ -pcsx2 (1.3.1+dfsg-1build1) wily; urgency=medium +pcsx2 (1:1.4.0-3) wily; urgency=medium - * No-change rebuild against libwx*-0v5 + !!! 1.4.0 release !!! - -- Martin Pitt Mon, 10 Aug 2015 12:30:38 +0200 + -- Gregory Hainaut Tue, 05 Jan 2016 18:44:09 +0100 -pcsx2 (1.3.1+dfsg-1) unstable; urgency=medium +pcsx2 (1:1.4.0-2) vivid; urgency=medium - * New upstream release. + !!! 1.4.0 release !!! - -- Miguel A. Colón Vélez Wed, 01 Jul 2015 03:11:46 -0400 + -- Gregory Hainaut Tue, 05 Jan 2016 18:43:29 +0100 -pcsx2 (1.2.1-854-ga3cd81c+dfsg-1) unstable; urgency=low +pcsx2 (1:1.4.0-1) trusty; urgency=medium - * Initial release. (Closes: #464794) + !!! 1.4.0 release !!! + + -- Gregory Hainaut Tue, 05 Jan 2016 18:38:37 +0100 - -- Miguel A. Colón Vélez Wed, 07 Jan 2015 17:54:20 -0500 diff -Nru pcsx2-1.3.1+dfsg/debian/compat pcsx2-1.4.0/debian/compat --- pcsx2-1.3.1+dfsg/debian/compat 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/compat 2016-01-05 17:28:08.000000000 +0000 @@ -1 +1 @@ -9 +8 diff -Nru pcsx2-1.3.1+dfsg/debian/control pcsx2-1.4.0/debian/control --- pcsx2-1.3.1+dfsg/debian/control 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/control 2016-01-05 17:34:18.000000000 +0000 @@ -1,61 +1,58 @@ Source: pcsx2 Section: games Priority: optional -Maintainer: Debian Games Team -Uploaders: - Miguel A. Colón Vélez -Build-Depends: - cmake (>= 2.8.5~), - debhelper (>= 9.20120419~), - dpkg-dev (>= 1.16.2~), - libaio-dev [linux-any], - libasound2-dev [linux-any] | liboss4-salsa-dev [!linux-any], - libbz2-dev, - libegl1-mesa-dev, - libgl1-mesa-dev | libgl-dev, - libglew-dev, - libglu1-mesa-dev | libglu-dev, - libgtk2.0-dev, - libjpeg-dev, - libsdl1.2-dev, - libsoundtouch-dev, - libwxbase3.0-dev, - libwxgtk3.0-dev, - libx11-dev, - portaudio19-dev, - zlib1g-dev -Standards-Version: 3.9.6 +Maintainer: Gregory Hainaut +Build-Depends: cmake (>= 2.8.5), + debhelper (>= 8.9), + dpkg-dev (>= 1.15.7), + libaio-dev, + libasound2-dev, + libbz2-dev, + libgl1-mesa-dev, + libglu1-mesa-dev, + libgtk2.0-dev (>= 2.16), + libpng12-dev, + libpng++-dev, + libpulse-dev, + libsdl2-dev, + libsoundtouch-dev, + libwxbase3.0-dev, + libwxgtk3.0-dev, + libx11-dev, + locales | locales-all, + portaudio19-dev, + zlib1g-dev (>= 1:1.2.3.3) +Standards-Version: 3.9.3 Homepage: http://pcsx2.net/ -Vcs-Git: git://anonscm.debian.org/pkg-games/pcsx2.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-games/pcsx2.git Package: pcsx2 Architecture: i386 -Depends: - libc6-i686 [i386], - ${misc:Depends}, - ${shlibs:Depends} -Recommends: - libasound2-plugins [linux-any] +# -i686 allow to use SSE into libc6 +Depends: ${shlibs:Depends}, ${misc:Depends}, libc6-i686 +# libasound => alsa plugin for pulseaudio +# libusb => ps3 controller (and probably others) +Recommends: libasound2-plugins, + libusb-0.1-4 +Conflicts: pcsx2-unstable Description: Playstation 2 emulator PCSX2 is a PlayStation 2 emulator for Windows and Linux. . WARNING: It requires a CPU with SSE2 instructions. If your CPU does not support - this instruction set, it does not have enough horsepower to run this emulator. - . - This package includes the main binary, plug-ins and localization files. + this instruction set, it does not have enough horse power to run this emulator + anyway. Package: pcsx2-dbg Section: debug Priority: extra Architecture: i386 -Depends: - pcsx2 (= ${binary:Version}), - ${misc:Depends} +Depends: ${misc:Depends}, pcsx2 (= ${binary:Version}) +Conflicts: pcsx2-unstable-dbg Description: Debug symbols for PCSX2 PCSX2 is a PlayStation 2 emulator for Windows and Linux. . WARNING: It requires a CPU with SSE2 instructions. If your CPU does not support - this instruction set, it does not have enough horsepower to run this emulator. + this instruction set, it does not have enough horse power to run this emulator + anyway. . - This package contains the debug symbols for the PCSX2 binary and plug-ins. + This package contains the debug symbols for PCSX2. + diff -Nru pcsx2-1.3.1+dfsg/debian/copyright pcsx2-1.4.0/debian/copyright --- pcsx2-1.3.1+dfsg/debian/copyright 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/copyright 2016-01-05 17:28:08.000000000 +0000 @@ -2,365 +2,44 @@ Upstream-Name: PCSX2 Source: https://github.com/PCSX2/pcsx2 -Files: * -Copyright: - 2002-2014 PCSX2 Dev Team -License: GPL-3 - -Files: - debian/* -Copyright: - 2010-2015 Miguel A. Colón Vélez -License: GPL-3 - -Files: - debian-packager/* +Files: debian/* Copyright: 2010-2012 Gregory Hainaut 2010-2012 Miguel Colon License: LGPL-3 -Files: - bin/* - build.sh - common/* - linux_various/* - pcsx2/* - plugins/CDVDnull/* - plugins/dev9null/DEV9.cpp - plugins/FWnull/* - plugins/GSnull/* - plugins/LilyPad/* - plugins/PadNull/* - plugins/SPU2null/Windows/* - plugins/USBnull/* - plugins/zzogl-pg/opengl/shaders.sh - rebuild.sh -Copyright: - 2002-2014 PCSX2 Dev Team -License: LGPL-3+ - -Files: - debian-packager/create_built_tarball.sh - linux_various/validate_glsl.sh -Copyright: - 2011-2014 Gregory Hainaut -License: LGPL-3+ - -Files: - pcsx2/CDVD/CDVDisoReader.cpp -Copyright: - 2002-2012 PCSX2 Dev Team - 2002 Sjeep - 2002 Hiryu -License: LGPL-3+ - -Files: - plugins/spu2-x/src/* -Copyright: - 2002-2012 PCSX2 Dev Team - 2008 David Quintana -License: LGPL-3+ - -Files: - plugins/spu2-x/src/WavFile.cpp - plugins/spu2-x/src/WavFile.h -Copyright: - 2002-2012 PCSX2 Dev Team - 2001-2009 Olli Parviainen -License: LGPL-3+ - -Files: - plugins/cdvdGigaherz/* -Copyright: - 2002-2014 David Quintana -License: LGPL-3+ - -Files: - plugins/spu2-x/src/SndOut_SDL.cpp -Copyright: - 2013 Matt Scheirer -License: LGPL-3+ - -Files: - plugins/LilyPad/usb.h -Copyright: - 2002-2014 PCSX2 Dev Team - 2000-2003 Johannes Erdfelt +Files: pcsx2/* common/* plugins/spu2-x/* plugins/PadNull/Pad* plugins/USBnull/* plugins/FWnull/* plugins/CDVDnull/CDVD* plugins/GSnull/* plugins/dev9null/DEV9.cpp +Copyright: 2002-2012 PCSX2 Dev Team License: LGPL-3+ -Files: - common/include/api/* - pcsx2/cheatscpp.h - pcsx2/Mdec.cpp - pcsx2/Mdec.h - pcsx2/DebugTools/MipsStackWalk.cpp - pcsx2/DebugTools/MipsStackWalk.h - pcsx2/RDebug/deci2_drfp.cpp - pcsx2/windows/ini.cpp - plugins/dev9null/Config.cpp - plugins/dev9null/Config.h - plugins/dev9null/DEV9.h - plugins/FWnull/FW.cpp - plugins/GSnull/Registers.cpp - plugins/GSnull/Registers.h - plugins/GSnull/Linux/Config.cpp - plugins/GSnull/Linux/Config.h - plugins/GSnull/Linux/Linux.cpp - plugins/GSnull/Linux/Linux.h - plugins/PadNull/Linux/* -Copyright: - 2002-2014 PCSX2 Dev Team -License: GPL-2+ - -Files: - pcsx2/IPU/mpeg2lib/* -Copyright: - 2000-2002 Michel Lespinasse - 1999-2000 Aaron Holtzman +Files: pcsx2/Mdec.cpp pcsx2/Mdec.h pcsx2/RDebug/deci2_drfp.cpp pcsx2/IPU/mpeg2lib/* pcsx2/cheatscpp.h common/include/api/* plugins/onepad/* plugins/PadNull/Linux/* plugins/SPU2null/* plugins/FWnull/FW.cpp plugins/zerospu2/* plugins/zzogl-pg/* plugins/GSnull/Registers.h plugins/GSnull/Linux/Linux* plugins/GSnull/Linux/Config* plugins/dev9null/DEV9.h plugins/dev9null/Config.* +Copyright: 2002-2012 PCSX2 Dev Team License: GPL-2+ -Files: - plugins/GSdx/* - plugins/zzogl-pg/opengl/GSDump.cpp - plugins/zzogl-pg/opengl/GSDump.h -Copyright: - 2007-2012 Gabest -License: GPL-2+ - -Files: - plugins/GSdx/GSLocalMemory.cpp -Copyright: - 2007-2012 Gabest - 2002-2004 GSsoft Team -License: GPL-2+ - -Files: - plugins/GSdx/GLLoader.cpp - plugins/GSdx/GLLoader.h - plugins/GSdx/GLState.cpp - plugins/GSdx/GLState.h - plugins/GSdx/GSDeviceOGL.cpp - plugins/GSdx/GSDeviceOGL.h - plugins/GSdx/GSRendererOGL.cpp - plugins/GSdx/GSRendererOGL.h - plugins/GSdx/GSShaderOGL.cpp - plugins/GSdx/GSShaderOGL.h - plugins/GSdx/GSTextureCacheOGL.cpp - plugins/GSdx/GSTextureCacheOGL.h - plugins/GSdx/GSTextureFXOGL.cpp - plugins/GSdx/GSTextureOGL.cpp - plugins/GSdx/GSTextureOGL.h - plugins/GSdx/GSUniformBufferOGL.h - plugins/GSdx/GSVertexArrayOGL.h - plugins/zzogl-pg/opengl/GSUniformBufferOGL.h - plugins/zzogl-pg/opengl/GSVertexArrayOGL.h - plugins/zzogl-pg/opengl/ZZoglFlushHack.h - plugins/GSdx/GSWnd.cpp -Copyright: - 2010-2014 Gregory Hainaut - 2007-2009 Gabest -License: GPL-2+ - -Files: - plugins/GSdx/linux_replay.cpp - plugins/zzogl-pg/opengl/linux_replay.cpp -Copyright: - 2011-2012 Gregory Hainaut -License: GPL-2+ - -Files: - plugins/onepad/* -Copyright: - 2009-2011 arcum42 - 2006-2007 zerofrog -License: GPL-2+ - -Files: - plugins/SPU2null/* -Copyright: - 2002-2010 SPU2null Team -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/* -Copyright: - 2009-2010 arcum42 - 2009-2010 Zeydlitz - 2005-2008 zerofrog -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/ZZoglMem.cpp - plugins/zzogl-pg/opengl/ZZoglMem.h - plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.cpp - plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.h -Copyright: - 2005-2008 zerofrog -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/Profile_gl3.cpp - plugins/zzogl-pg/opengl/Profile_gl3.h - plugins/zzogl-pg/opengl/ps2hw_gl4.h -Copyright: - 2009-2012 Gregory Hainaut - 2009-2012 arcum42 - 2009-2012 Zeydlitz - 2005-2008 zerofrog -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/ZZoglFlushHack.cpp -Copyright: - 2010 Gregory Hainaut - 2010 Zeydlitz - 2007-2009 Gabest -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/ZZoglShaders.cpp - plugins/zzogl-pg/opengl/ZZoglShadersGLSL.cpp - plugins/zzogl-pg/opengl/ZZoglShadersGLSL4.cpp -Copyright: - 2009 Zeydlitz - 2005-2006 zerofrog -License: GPL-2+ - -Files: - plugins/zzogl-pg/opengl/Linux/* -Copyright: - 2002-2004 GSsoft Team -License: GPL-2+ - -Files: - pcsx2/DebugTools/Breakpoints.h -Copyright: - 2012 PPSSPP Project -License: GPL-2+ - -Files: - plugins/spu2-x/src/Debug.h - plugins/spu2-x/src/spdif.h - plugins/spu2-x/src/Spu2replay.cpp - plugins/spu2-x/src/Spu2replay.h - plugins/spu2-x/src/Windows/dsp.cpp - plugins/spu2-x/src/Windows/dsp.h -Copyright: - 2003-2008 David Quintana +Files: plugins/spu2-x/src/Spu2replay.* plugins/spu2-x/src/Decode* plugins/spu2-x/src/Linux/ConfigSoundTouch.cpp plugins/spu2-x/src/spdif.h plugins/spu2-x/src/Debug.h +Copyright: 2002-2012 PCSX2 Dev Team License: LGPL-2.1+ -Files: - plugins/spu2-x/src/DecodeDPLII.cpp - plugins/spu2-x/src/DplIIdecoder.cpp - plugins/spu2-x/src/Linux/ConfigSoundTouch.cpp -Copyright: - 2002-2012 PCSX2 Dev Team - 2003-2008 David Quintana -License: LGPL-2.1+ +Files: plugins/zzogl-pg/opengl/glprocs.* +Copyright: 1991-2000 Silicon Graphics, Inc +License: SGI FREE SOFTWARE LICENSE B 2.0 -Files: - plugins/zzogl-pg/opengl/common.h -Copyright: - 2005-2008 zerofrog - 2006 Michael Niedermayer -License: LGPL-2.1+ - -Files: - common/include/intrin_x86.h -Copyright: - 2006 KJK::Hyperion +Files: common/include/intrin_x86.h +Copyright: 2006 KJK::Hyperion License: Expat -Files: - plugins/zzogl-pg/opengl/Win32/wglext.h -Copyright: - 2007 The Khronos Group Inc. -License: Expat - -Files: - common/src/Utilities/vssprintf.cpp -Copyright: - 2002 Michael Ringgaard +Files: common/src/Utilities/vssprintf.cpp +Copyright: 2002 Michael Ringgaard License: BSD-3-Clause -Files: - plugins/GSdx/xbyak/* -Copyright: - 2007-2012 MITSUNARI Shigeo -License: BSD-3-Clause - -Files: - cmake/FindGTK3.cmake -Copyright: - 2009 Kitware, Inc. - 2008-2012 Philip Lowman -License: BSD-3-Clause - -Files: - cmake/TargetArch.cmake -Copyright: - 2014 PCSX2 Dev Team - 2012 Petroules Corporation -License: BSD-2-Clause - -Files: - plugins/zzogl-pg/opengl/glprocs.* -Copyright: - 1991-2000 Silicon Graphics, Inc -License: SGI-FSL-B-2.0 - -Files: - pcsx2/CDVD/zlib_indexed.h -Copyright: - 2005-2012 Mark Adler -License: Zlib - -Files: - plugins/zzogl-pg/opengl/zpipe.cpp - plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.cpp -Copyright: - 2005 Mark Adler -License: public-domain-adler +Files: plugins/zzogl-pg/opengl/zpipe.cpp +Copyright: not applicable +License: public-domain + Author's Note: zpipe.c: example of proper use of zlib's inflate() and deflate() Not copyrighted -- provided to the public domain Version 1.4 11 December 2005 Mark Adler -Files: - plugins/cdvdGigaherz/src/Windows/rosddk/ntddcdrm.h - plugins/cdvdGigaherz/src/Windows/rosddk/ntddcdvd.h - plugins/cdvdGigaherz/src/Windows/rosddk/ntddscsi.h - plugins/cdvdGigaherz/src/Windows/rosddk/ntddstor.h -Copyright: - 2002 Casper S. Hornstrup -License: public-domain-casper - Created by Casper S. Hornstrup - . - THIS SOFTWARE IS NOT COPYRIGHTED - . - This source code is offered for use in the public domain. You may - use, modify or distribute it freely. - . - This code is distributed in the hope that it will be useful but - WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY - DISCLAIMED. This includes but is not limited to warranties of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -License: GPL-3 - 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 3 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, see . -Comment: On Debian systems, the complete text of the GNU General Public License - version 3 can be found in "/usr/share/common-licenses/GPL-3". - License: LGPL-3 or LGPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free @@ -408,7 +87,7 @@ Comment: On Debian systems, the complete text of the GNU Lesser General Public License version 2.1 can be found in "/usr/share/common-licenses/LGPL-2.1". -License: SGI-FSL-B-2.0 +License: SGI FREE SOFTWARE LICENSE B 2.0 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to @@ -457,11 +136,9 @@ . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - . 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - . 3. Neither the name of the project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -476,53 +153,3 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: BSD-2-Clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - . - 1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - . - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - . - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -License: Zlib - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any - damages arising from the use of this software. - . - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute - it freely, subject to the following restrictions: - . - 1. The origin of this software must not be misrepresented; you must - not claim that you wrote the original software. If you use this - software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - . - 2. Altered source versions must be plainly marked as such, and must - not be misrepresented as being the original software. - . - 3. This notice may not be removed or altered from any source - distribution. - . - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - . - The data format used by the zlib library is described by RFCs - (Request for Comments) 1950 to 1952 in the files - ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt - (deflate format) and rfc1952.txt (gzip format). diff -Nru pcsx2-1.3.1+dfsg/debian/create_built_tarball.sh pcsx2-1.4.0/debian/create_built_tarball.sh --- pcsx2-1.3.1+dfsg/debian/create_built_tarball.sh 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/debian/create_built_tarball.sh 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,149 @@ +#!/bin/sh +# copyright (c) 2011-2014 Gregory Hainaut +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This package 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + + + +###################################################################### +# Global Parameters +###################################################################### +help() +{ + cat < : revision number + -branch : branch name, take trunk otherwise +EOF + + exit 0 +} + +# Default value +GIT_SHA1=0; +BRANCH="1.4.x" +while [ -n "$1" ]; do +case $1 in + -help|-h ) help;shift 1;; + -rev|-r ) GIT_SHA1=$2; shift 2;; + -branch|-b ) BRANCH=$2; shift 2;; + --) shift;break;; + -*) echo "ERROR: $1 option does not exists. Use -h for help";exit 1;; + *) break;; +esac +done + +# Directory +TMP_DIR=/tmp/pcsx2_git +mkdir -p $TMP_DIR + +REMOTE_REPO="https://github.com/PCSX2/pcsx2.git" +LOCAL_REPO="$TMP_DIR/pcsx2" + + +###################################################################### +# Basic functions +###################################################################### +date= +version= +release= +get_pcsx2_version() +{ + local major=`grep -o "VersionHi.*" $LOCAL_REPO/pcsx2/SysForwardDefs.h | grep -o "[0-9]*"` + local mid=`grep -o "VersionMid.*" $LOCAL_REPO/pcsx2/SysForwardDefs.h | grep -o "[0-9]*"` + local minor=`grep -o "VersionLo.*" $LOCAL_REPO/pcsx2/SysForwardDefs.h | grep -o "[0-9]*"` + release=`grep -o "isReleaseVersion.*" $LOCAL_REPO/pcsx2/SysForwardDefs.h | grep -o "[0-9]*"` + version="$major.$mid.$minor" +} + +get_git_version() +{ + date=`git -C $LOCAL_REPO show -s --format=%ci HEAD | sed -e 's/[\:\-]//g' -e 's/ /./' -e 's/ .*//'` +} + +download_orig() +{ + (cd $TMP_DIR && git clone --branch $1 $REMOTE_REPO pcsx2) + if [ "$SVN_CO_VERSION" = "1" ] ; then + (cd $TMP_DIR/pcsx2 && git checkout $GIT_SHA1) + fi +} + +remove_3rdparty() +{ + echo "Remove 3rdparty code" + rm -fr $LOCAL_REPO/3rdparty + rm -fr $LOCAL_REPO/fps2bios + rm -fr $LOCAL_REPO/tools +} + +remove_not_yet_free_plugin() +{ + echo "Remove non free plugins" + # remove also deprecated plugins + for plugin in CDVDiso CDVDisoEFP CDVDlinuz CDVDolio CDVDpeops dev9ghzdrk PeopsSPU2 SSSPSXPAD USBqemu xpad zerogs zerospu2 + do + rm -fr $LOCAL_REPO/plugins/$plugin + done +} + +remove_remaining_non_free_file() +{ + echo "Remove remaining non free file. TODO UPSTREAM" + rm -fr $LOCAL_REPO/unfree + rm -fr $LOCAL_REPO/plugins/GSdx/baseclasses + rm -f $LOCAL_REPO/plugins/zzogl-pg/opengl/Win32/aviUtil.h + rm -f $LOCAL_REPO/common/src/Utilities/x86/MemcpyFast.cpp +} +remove_dot_git() +{ + # To save 66% of the package size + rm -fr $LOCAL_REPO/.git +} + +###################################################################### +# Main script +###################################################################### +download_orig $BRANCH +remove_3rdparty +remove_not_yet_free_plugin +remove_remaining_non_free_file + +get_git_version +get_pcsx2_version + +# must be done after getting the git version +remove_dot_git + +# Debian name of package and tarball +if [ $release -eq 1 ] +then + PKG_NAME="pcsx2-${version}" + TAR_NAME="pcsx2_${version}.orig.tar" +else + PKG_NAME="pcsx2.snapshot-${version}~git${date}" + TAR_NAME="pcsx2.snapshot_${version}~git${date}.orig.tar" +fi + + +NEW_DIR=${TMP_DIR}/$PKG_NAME +rm -fr $NEW_DIR +mv $LOCAL_REPO $NEW_DIR + +echo "Build the tar.gz file" +tar -C $TMP_DIR -cJf ${TAR_NAME}.xz $PKG_NAME + +## Clean +rm -fr $TMP_DIR + +exit 0 diff -Nru pcsx2-1.3.1+dfsg/debian/doc-base.pcsx2-doc pcsx2-1.4.0/debian/doc-base.pcsx2-doc --- pcsx2-1.3.1+dfsg/debian/doc-base.pcsx2-doc 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/doc-base.pcsx2-doc 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -Document: pcsx2-doc -Title: PCSX2 Documentation File -Author: PCSX2 Dev Team -Abstract: This memorandum documents the Playstation 2 emulator. -Section: Emulators - -Format: PDF -Files: /usr/share/doc/pcsx2/PCSX2_Readme.pdf diff -Nru pcsx2-1.3.1+dfsg/debian/doc-base.pcsx2-faq pcsx2-1.4.0/debian/doc-base.pcsx2-faq --- pcsx2-1.3.1+dfsg/debian/doc-base.pcsx2-faq 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/doc-base.pcsx2-faq 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -Document: pcsx2-faq -Title: PCSX2 Frequently Asked Questions File -Author: PCSX2 Dev Team -Abstract: This memorandum contains answers to frequently asked questions about - the PCSX2 project. -Section: Emulators - -Format: PDF -Files: /usr/share/doc/pcsx2/PCSX2_FAQ.pdf diff -Nru pcsx2-1.3.1+dfsg/debian/docs pcsx2-1.4.0/debian/docs --- pcsx2-1.3.1+dfsg/debian/docs 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/debian/docs 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,2 @@ +debian/tmp/usr/share/doc/PCSX2 +bin/docs/*.pdf diff -Nru pcsx2-1.3.1+dfsg/debian/get-git-source.sh pcsx2-1.4.0/debian/get-git-source.sh --- pcsx2-1.3.1+dfsg/debian/get-git-source.sh 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/get-git-source.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -#!/bin/sh - -set -e - -PACKAGE=pcsx2 -giturl=https://github.com/PCSX2/pcsx2.git - -CWD_DIR=${PWD} -GOS_DIR=${CWD_DIR}/get-orig-source - -DEB_SOURCE=$(dpkg-parsechangelog 2>/dev/null | sed -n 's/^Source: //p') -DEB_VERSION=$(dpkg-parsechangelog 2>/dev/null | sed -n 's/^Version: //p') -UPSTREAM_VERSION=$(echo ${DEB_VERSION} | sed -r 's/^[0-9]*://;s/-[^-]*$$//;s/\+dfsg[0-9]*$//') - -if [ "${DEB_SOURCE}" != "${PACKAGE}" ]; then - echo 'Please run this script from the sources root directory.' - exit 1 -fi - -rm -rf ${GOS_DIR} -mkdir ${GOS_DIR} && cd ${GOS_DIR} - -# Function declarations -gos_verify_version () { - cd ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} - UPSTREAM_SHA1=$(git rev-parse --quiet --verify "${1}"^{commit} || true) - if [ -z "${UPSTREAM_SHA1}" ]; then - #Should only fail with stable releases. Retry with v${UPSTREAM_VERSION} - UPSTREAM_SHA1=$(git rev-parse --quiet --verify "v${1}"^{commit} || true) - if [ -z "${UPSTREAM_SHA1}" ]; then - echo "Could not find upstream version ${1}." - fi - fi -} - -gos_override_changelog_version () { - UPSTREAM_SHA1="${1}" - cd ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} - echo "Using git checkout ${UPSTREAM_SHA1}" - # Rename directory since UPSTREAM_VERSION is invalid. - git checkout ${UPSTREAM_SHA1} - UPSTREAM_SHA1=$(git describe --tags | sed -e 's/v\(.*\)/\1/') - if [ "${UPSTREAM_VERSION}" != "${UPSTREAM_SHA1}" ]; then - cd ${GOS_DIR} - mv ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_SHA1} - UPSTREAM_VERSION=${UPSTREAM_SHA1} - fi -} - -gos_use_changelog_version () { - cd ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} - echo "Using git checkout ${UPSTREAM_SHA1}" - git checkout ${UPSTREAM_SHA1} -} - -# Download sources -git clone --no-checkout ${giturl} ${DEB_SOURCE}-${UPSTREAM_VERSION} -if [ -z "${VER}" ]; then - gos_verify_version ${UPSTREAM_VERSION} - if [ -z "${UPSTREAM_SHA1}" ]; then - gos_override_changelog_version master - else - gos_use_changelog_version - fi -else - gos_verify_version ${VER} - if [ -z "${UPSTREAM_SHA1}" ]; then - gos_override_changelog_version master - else - gos_override_changelog_version ${VER} - fi -fi - -# Clean-up... -cd ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} -find . -depth -type f -name ".gitignore" -exec rm -f '{}' \; -while read line; do rm -rf "$line"; done < ${CWD_DIR}/debian/get-orig-source-remove - -# Setting times... (to make reproducible tarballs) -cd ${GOS_DIR}/${DEB_SOURCE}-${UPSTREAM_VERSION} -git ls-files -z | xargs -0 -n100 -P2 sh -c 'for F; do - if [ -e "$F" ]; then - touch -h -d "$(git log -1 --format="%ai" -- "$F")" "$F" - fi - done' fnord -rm -rf .git* - -# Packing... -cd ${GOS_DIR} -find -L ${DEB_SOURCE}-${UPSTREAM_VERSION} -xdev -type f -print | LC_ALL=C sort \ -| XZ_OPT="-6v" tar -caf "${CWD_DIR}/${DEB_SOURCE}_${UPSTREAM_VERSION}+dfsg.orig.tar.xz" -T- --owner=root --group=root --mode=a+rX - -cd ${CWD_DIR} && rm -rf ${GOS_DIR} diff -Nru pcsx2-1.3.1+dfsg/debian/get-orig-source-remove pcsx2-1.4.0/debian/get-orig-source-remove --- pcsx2-1.3.1+dfsg/debian/get-orig-source-remove 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/get-orig-source-remove 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -3rdparty -bin/Langs -bin/cheats_ws.zip -common/include/comptr.h -common/src/Utilities/x86/MemcpyFast.cpp -fps2bios -pcsx2/windows/resource.h -pcsx2/windows/wxResources.rc -plugins/CDVDiso -plugins/CDVDisoEFP -plugins/CDVDlinuz -plugins/CDVDolio -plugins/CDVDpeops -plugins/FWnull/Windows/FireWireNull.rc -plugins/FWnull/Windows/resource.h -plugins/GSdx/GSdx.rc -plugins/GSdx/baseclasses -plugins/GSdx/resource.h -plugins/GSnull/Windows/GS.rc -plugins/GSnull/Windows/resource.h -plugins/LilyPad/LilyPad.rc -plugins/LilyPad/resource.h -plugins/PadNull/Windows/PadNull.rc -plugins/PadNull/Windows/resource.h -plugins/PeopsSPU2 -plugins/SPU2null/Windows/SPU2null.rc -plugins/SPU2null/Windows/resource.h -plugins/SSSPSXPAD -plugins/USBnull/Windows/USBnull.rc -plugins/USBnull/Windows/resource.h -plugins/USBqemu -plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc -plugins/cdvdGigaherz/src/Windows/resource.h -plugins/dev9ghzdrk -plugins/spu2-x/src/Windows/Hyperlinks.cpp -plugins/spu2-x/src/Windows/Hyperlinks.h -plugins/spu2-x/src/Windows/Spu2-X.rc -plugins/spu2-x/src/Windows/resource.h -plugins/xpad -plugins/zerogs -plugins/zerospu2 -plugins/zzogl-pg/opengl/Win32/aviUtil.h -plugins/zzogl-pg/opengl/Win32/ps2hw.dat -plugins/zzogl-pg/opengl/Win32/resource.h -plugins/zzogl-pg/opengl/Win32/resrc1.h -plugins/zzogl-pg/opengl/Win32/zerogs.rc -plugins/zzogl-pg/opengl/ZeroGSShaders/zlib -plugins/zzogl-pg/opengl/ps2hw.dat -tools diff -Nru pcsx2-1.3.1+dfsg/debian/install pcsx2-1.4.0/debian/install --- pcsx2-1.3.1+dfsg/debian/install 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/debian/install 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,7 @@ +usr/bin/PCSX2 /usr/games/ +usr/bin/PCSX2-linux.sh /usr/games/ +usr/lib/games/PCSX2 +usr/share/applications/PCSX2.desktop +usr/share/pixmaps/PCSX2.xpm +usr/share/locale usr/share/ +usr/share/games/PCSX2 diff -Nru pcsx2-1.3.1+dfsg/debian/lintian-overrides pcsx2-1.4.0/debian/lintian-overrides --- pcsx2-1.3.1+dfsg/debian/lintian-overrides 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/lintian-overrides 2016-01-05 17:28:08.000000000 +0000 @@ -1,4 +1,6 @@ -# They are not shared libraries. Read the Readme.Debian file for more details. -shlib-with-non-pic-code -# Upstream does not provide a separate changelog. -no-upstream-changelog +#* -fPIC option was removed for multiple reason. +# - Code only support x86 architecture. +# - Upstream code uses the ebx register so it's not compliant with PIC. +# - Impacts the performance too much. +# - Only plugins. No package will link to them. +: shlib-with-non-pic-code diff -Nru pcsx2-1.3.1+dfsg/debian/manpages pcsx2-1.4.0/debian/manpages --- pcsx2-1.3.1+dfsg/debian/manpages 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/debian/manpages 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1 @@ +bin/docs/PCSX2.1 diff -Nru pcsx2-1.3.1+dfsg/debian/menu pcsx2-1.4.0/debian/menu --- pcsx2-1.3.1+dfsg/debian/menu 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/menu 2016-01-05 17:35:21.000000000 +0000 @@ -1,6 +1,6 @@ ?package(pcsx2): \ - needs="X11" \ - section="Applications/Emulators" \ - title="PCSX2" \ - longtitle="A Playstation 2 Emulator" \ - command="/usr/games/pcsx2" + needs="X11" \ + section="Applications/Emulators" \ + title="PCSX2" \ + longtitle="A playstation 2 emulator" \ + command="/usr/games/PCSX2-linux.sh" diff -Nru pcsx2-1.3.1+dfsg/debian/patches/0000_remove_cheats.patch pcsx2-1.4.0/debian/patches/0000_remove_cheats.patch --- pcsx2-1.3.1+dfsg/debian/patches/0000_remove_cheats.patch 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/patches/0000_remove_cheats.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Description: Remove community generated content. - Not sure if there is a DFSG license issue with it. The patches are trivial - enough that there is really only one way to do them and most likely - uncopyrightable. - . - Remove for now to be safe since the file is optional and needs manual - extraction to be used. -Author: Miguel A. Colón Vélez -Forwarded: not-needed -Last-Update: 2014-12-20 - ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -88,7 +88,6 @@ - #------------------------------------------------------------------------------- - # Install some files to ease package creation - if(PACKAGE_MODE) -- INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/cheats_ws.zip" DESTINATION "${GAMEINDEX_DIR}") - INSTALL(FILES "${CMAKE_SOURCE_DIR}/bin/GameIndex.dbf" DESTINATION "${GAMEINDEX_DIR}") - - # set categories depending on system/distribution in pcsx2.desktop diff -Nru pcsx2-1.3.1+dfsg/debian/patches/series pcsx2-1.4.0/debian/patches/series --- pcsx2-1.3.1+dfsg/debian/patches/series 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/patches/series 2016-01-05 17:28:08.000000000 +0000 @@ -1 +0,0 @@ -0000_remove_cheats.patch diff -Nru pcsx2-1.3.1+dfsg/debian/README.Debian pcsx2-1.4.0/debian/README.Debian --- pcsx2-1.3.1+dfsg/debian/README.Debian 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/README.Debian 2016-01-05 17:28:08.000000000 +0000 @@ -13,48 +13,37 @@ Information about the plug-ins for video ------------------------------------------ - * The GSdx plug-in currently only supports the OpenGL software renderer. - - * The GSdx and zzogl GLSL plug-ins currently require a video card that supports - at least OpenGL 3.0. A noninclusive list of cards that support OpenGL 3.0 is: + * GSdx plug-in currently require a video card that supports + at least OpenGL 3.3. A noninclusive list of cards that support OpenGL 3.0 is: - Radeon HD series (except HD2300) - GeForce 8, 9, 100-series, 200-series, 300-series, 400-series and 500-series - Intel Sandy Bridge HD Graphics 2000 and up * Currently the proprietary drivers for AMD and Nvidia have support for - OpenGL 3.0 and above. The GSdx and/or zzogl GLSL plug-ins use the following + OpenGL 3.0 and above. GSdx plug-in use the following extensions/commands that may or may not be completely implemented in the open source video stack: - - OpenGL 3.0 (supported on Mesa 9.2) - + glClearBuffer - + glGetStringi - + glVertexAttribI - + GLX_ARB_create_context - + GL_ARB_framebuffer_object - + GL_ARB_vertex_array_object - - OpenGL 3.1 (supported on Mesa 9.2) - + GL_ARB_texture_rectangle (zzogl) - + GL_ARB_uniform_buffer_object - - OpenGL 3.2 (supported on Mesa 10.0) - + GLSL 150 - + GLX_ARB_create_context_profile - + GL_ARB_draw_elements_base_vertex (GSdx) - + GL_ARB_geometry_shader4 - - OpenGL 3.3 (supported on Mesa 9.2) - + GL_ARB_blend_func_extended (GSdx) - + GL_ARB_explicit_attrib_location - + GL_ARB_sampler_objects (GSdx) + - OpenGL 3.x (supported on Mesa 10.x) - OpenGL 4.0 - + GL_ARB_GPU_shader5 (GSdx, improve FXAA, optional) + + GL_ARB_GPU_shader5 (improve FXAA, optional) - OpenGL 4.1 + GL_ARB_separate_shader_objects - OpenGL 4.2 + GL_ARB_map_buffer_alignment + + GL_ARB_shader_image_load_store + GL_ARB_shading_language_420pack + GL_ARB_texture_storage - OpenGL 4.3 - + GL_ARB_copy_image (GSdx, optional) + + GL_ARB_explicit_uniform_location + + GL_ARB_framebuffer_no_attachments + + GL_ARB_copy_image (optional) + - OpenGL 4.4 + + GL_ARB_buffer_storage + - OpenGL 4.5 + + GL_ARB_clip_control + + GL_ARB_direct_state_access + + GL_ARB_texture_barrier + The current status for the open source drivers can be found at: - http://cgit.freedesktop.org/mesa/mesa/tree/docs/GL3.txt - -- Miguel A. Colón Vélez Sun, 21 Dec 2014 00:37:30 -0500 diff -Nru pcsx2-1.3.1+dfsg/debian/README.source pcsx2-1.4.0/debian/README.source --- pcsx2-1.3.1+dfsg/debian/README.source 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/README.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ --------------------------------------- -Source package information for PCSX2 --------------------------------------- - - * Examples for how to download an upstream source. - - To download a specific version from git: - VER=master debian/rules get-orig-source - VER=v1.2 debian/rules get-orig-source - VER=f9dd6277e336e5808bde235c9fdc01905c1f59a4 debian/rules get-orig-source - - - To download the latest version in debian/changelog: - debian/rules get-orig-source - - - To download an old version in debian/changelog: - VER=1.2.1-728-g7328e55 debian/rules get-orig-source - * The source for the pdf documentation is in: - - pcsx2/Docs/PCSX2_FAQ.doc - - pcsx2/Docs/PCSX2_Readme.doc - * The upstream repository contains all sorts of cruft, files with proprietary - licenses and files without copyright information. To get around this the - following is done: - - The complete source code is initially downloaded from the git repository. - - The version control files get removed (.git gitignore). - - Files and directories included in get-orig-source-remove are removed from - the generated source. Most of these files have either proprietary licenses, - missing copyright information, non-DFSG-free material, and/or GPL - incompatible licenses. Here is a list of some of the files and directories - that get removed from the source and a short reason for their removal: - + 3rdparty => embedded code (libraries). - + bin/Langs => Remove the pre-generated language files. - + common/include/comptr.h => Missing copyright information. - + common/src/Utilities/x86/MemcpyFast.cpp => AMD copyright/license. - + fps2bios => Missing copyright information. Possibly non-DFSG-free. - + plugins/CDVDiso => Missing copyright information. - + plugins/CDVDisoEFP => Missing copyright information. - + plugins/CDVDlinuz => Missing copyright information. - + plugins/CDVDolio => Missing copyright information. - + plugins/CDVDpeops => Missing copyright information. - + plugins/GSdx/baseclasses => Microsoft copyright/license. - + plugins/PeopsSPU2 => Missing copyright information. - + plugins/SSSPSXPAD => Missing copyright information. - + plugins/USBqemu => Missing copyright information and not distributable. - + plugins/dev9ghzdrk => Missing copyright information and Microsoft copyright/license. - + plugins/spu2-x/src/Windows/Hyperlinks.cpp => codeguru license. - + plugins/spu2-x/src/Windows/Hyperlinks.h => codeguru license. - + plugins/xpad => Missing copyright information. - + plugins/zerogs => Missing copyright information. - + plugins/zerospu2 => Missing copyright information. - + plugins/zzogl-pg/opengl/Win32/aviUtil.h => Missing copyright information. - + plugins/zzogl-pg/opengl/Win32/ps2hw.dat => pre-built shader file. - + plugins/zzogl-pg/opengl/ZeroGSShaders/zlib => embedded code (library). - + plugins/zzogl-pg/opengl/ps2hw.dat => pre-built shader file. - + tools => Missing copyright information. - + Files autogenerated by Microsoft Visual C++ - > pcsx2/windows/resource.h - > pcsx2/windows/wxResources.rc - > plugins/FWnull/Windows/FireWireNull.rc - > plugins/FWnull/Windows/resource.h - > plugins/GSdx/GSdx.rc - > plugins/GSdx/resource.h - > plugins/GSnull/Windows/GS.rc - > plugins/GSnull/Windows/resource.h - > plugins/LilyPad/LilyPad.rc - > plugins/LilyPad/resource.h - > plugins/PadNull/Windows/PadNull.rc - > plugins/PadNull/Windows/resource.h - > plugins/SPU2null/Windows/SPU2null.rc - > plugins/SPU2null/Windows/resource.h - > plugins/USBnull/Windows/USBnull.rc - > plugins/USBnull/Windows/resource.h - > plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc - > plugins/cdvdGigaherz/src/Windows/resource.h - > plugins/spu2-x/src/Windows/Spu2-X.rc - > plugins/spu2-x/src/Windows/resource.h - > plugins/zzogl-pg/opengl/Win32/resource.h - > plugins/zzogl-pg/opengl/Win32/resrc1.h - > plugins/zzogl-pg/opengl/Win32/zerogs.rc - + bin/cheats_ws.zip => Data generated by the community. Unknown license. - - The amount of missing copyright information varies greatly and can range - from one or two file to most if not all of them. Also, most of the removed - plug-ins are also deprecated and no longer compiled by the build scripts. - The best and safest solution is to remove the deprecated plug-ins instead - of just removing each file that has missing copyright information. - - If additional files and/or directories need to be removed they can get - added to get-orig-source-remove. The copyright file might need an update to - reflect the removal of those files. - * The resulting package will have all the plug-ins and functionality needed to - be usable in a Linux environment after being given a proper configuration by - the user. - - -- Miguel A. Colón Vélez Wed, 07 Jan 2015 02:17:18 -0500 diff -Nru pcsx2-1.3.1+dfsg/debian/rules pcsx2-1.4.0/debian/rules --- pcsx2-1.3.1+dfsg/debian/rules 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/rules 2016-01-05 17:35:01.000000000 +0000 @@ -1,11 +1,7 @@ #!/usr/bin/make -f # Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -include /usr/share/dpkg/architecture.mk -LDFLAGS := $(shell dpkg-buildflags --get LDFLAGS) -LDFLAGS += -Wl,--as-needed +# export DH_VERBOSE=1 ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS))) CMAKE_BUILD_TYPE=Debug @@ -18,41 +14,19 @@ -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \ -DCMAKE_BUILD_STRIP=FALSE \ -DXDG_STD=TRUE \ - -DREBUILD_SHADER=TRUE \ - -DBUILD_REPLAY_LOADERS=FALSE \ - -DGLSL_API=TRUE \ -DDISABLE_ADVANCE_SIMD=TRUE \ - -DBIN_DIR="/usr/games" \ - -DDOC_DIR="/usr/share/doc/pcsx2" \ - -DGAMEINDEX_DIR="/usr/share/games/pcsx2" \ - -DPLUGIN_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/pcsx2" \ -DPACKAGE_MODE=TRUE -override_dh_auto_install: - dh_auto_install --destdir="$(CURDIR)/debian/pcsx2" - -override_dh_compress: - dh_compress -X.pdf - -override_dh_installdocs: - dh_installdocs --link-doc=pcsx2 +override_dh_strip: + dh_strip --package=pcsx2 --dbg-package=pcsx2-dbg -# Silence lintian warnings about *-has-useless-call-to-ldconfig override_dh_makeshlibs: -override_dh_shlibdeps: - # When doing dpkg-buildpackage -ai386 don't depend on lib32stdc++6, - # lib32gcc1, and libc6-i386 since they don't exist in i386. Correctly pick - # the multiarch variant instead of the multilib variant. - dh_shlibdeps -l/lib/$(DEB_HOST_MULTIARCH)/:/usr/lib/$(DEB_HOST_MULTIARCH)/ - -override_dh_strip: - dh_strip --dbg-package=pcsx2-dbg +override_dh_builddeb: + dh_builddeb -- -Zxz +clean: + dh_auto_clean + dh_clean %: - dh $@ --parallel - -get-orig-source: - sh debian/get-git-source.sh - -.PHONY: get-orig-source + dh $@ diff -Nru pcsx2-1.3.1+dfsg/debian/source/lintian-overrides pcsx2-1.4.0/debian/source/lintian-overrides --- pcsx2-1.3.1+dfsg/debian/source/lintian-overrides 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/source/lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# Upstream does not provide detached PGP signatures for their source tarballs. -debian-watch-may-check-gpg-signature diff -Nru pcsx2-1.3.1+dfsg/debian/source/options pcsx2-1.4.0/debian/source/options --- pcsx2-1.3.1+dfsg/debian/source/options 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/source/options 2016-01-05 17:28:08.000000000 +0000 @@ -1 +1,2 @@ -extend-diff-ignore = "(^|/)(pcsx2_(Iconized|Main)\.po)$" +# Don't store changes on locales files +extend-diff-ignore = "(^|/)(pcsx2_(Devel|Iconized|Main|Tertiary)\.po|Makefile)$" diff -Nru pcsx2-1.3.1+dfsg/debian/watch pcsx2-1.4.0/debian/watch --- pcsx2-1.3.1+dfsg/debian/watch 2015-07-02 06:29:32.000000000 +0000 +++ pcsx2-1.4.0/debian/watch 2016-01-05 17:28:08.000000000 +0000 @@ -1,3 +1,5 @@ version=3 -opts=filenamemangle=s/.+\/v?(\d\S*)\.tar\.gz/pcsx2-$1\.tar\.gz/,dversionmangle=s/\+dfsg\d*$// \ - https://github.com/PCSX2/pcsx2/tags .*/v?(\d\S*)\.tar\.gz + +# Note: Upstream does not release prepackaged source files. +# It's adviced to get them from their subversion repository. +# Source: https://github.com/PCSX2/pcsx2 diff -Nru pcsx2-1.3.1+dfsg/debian-packager/control pcsx2-1.4.0/debian-packager/control --- pcsx2-1.3.1+dfsg/debian-packager/control 2014-09-22 07:22:52.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/control 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ Source: pcsx2.snapshot -Section: contrib/games +Section: games Priority: optional Maintainer: Gregory Hainaut Build-Depends: cmake (>= 2.8.5), @@ -8,21 +8,18 @@ libaio-dev, libasound2-dev, libbz2-dev, - libegl1-mesa-dev, libgl1-mesa-dev, - libglew-dev, libglu1-mesa-dev, libgtk2.0-dev (>= 2.16), - libjpeg-dev, + libpng12-dev, + libpng++-dev, libpulse-dev, - libsdl1.2-dev, + libsdl2-dev, libsoundtouch-dev, - libwxbase2.8-dev, - libwxgtk2.8-dev, + libwxbase3.0-dev, + libwxgtk3.0-dev, libx11-dev, locales | locales-all, -# Future: depends on "nvidia-cg-dev" directly - libcg, nvidia-cg-toolkit (>= 3), portaudio19-dev, zlib1g-dev (>= 1:1.2.3.3) Standards-Version: 3.9.3 @@ -36,13 +33,7 @@ # libusb => ps3 controller (and probably others) Recommends: libasound2-plugins, libusb-0.1-4 -Conflicts: pcsx2, - pcsx2-data-unstable, - pcsx2-l10n-unstable, - pcsx2-plugins-unstable -Replaces: pcsx2-data-unstable, - pcsx2-l10n-unstable, - pcsx2-plugins-unstable +Conflicts: pcsx2 Description: Playstation 2 emulator PCSX2 is a PlayStation 2 emulator for Windows and Linux. . @@ -51,14 +42,12 @@ anyway. Package: pcsx2-unstable-dbg -Section: contrib/debug +Section: debug Priority: extra Architecture: i386 Depends: ${misc:Depends}, pcsx2-unstable (= ${binary:Version}) -Conflicts: pcsx2-dbg, - pcsx2-plugins-unstable-dbg -Replaces: pcsx2-plugins-unstable-dbg -Description: Debug symbols for pcsx2 +Conflicts: pcsx2-dbg +Description: Debug symbols for PCSX2 PCSX2 is a PlayStation 2 emulator for Windows and Linux. . WARNING: It requires a CPU with SSE2 instructions. If your CPU does not support diff -Nru pcsx2-1.3.1+dfsg/debian-packager/copyright pcsx2-1.4.0/debian-packager/copyright --- pcsx2-1.3.1+dfsg/debian-packager/copyright 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/copyright 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,6 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: PCSX2 -Source: http://code.google.com/p/pcsx2/source +Source: https://github.com/PCSX2/pcsx2 Files: debian/* Copyright: diff -Nru pcsx2-1.3.1+dfsg/debian-packager/create_built_tarball.sh pcsx2-1.4.0/debian-packager/create_built_tarball.sh --- pcsx2-1.3.1+dfsg/debian-packager/create_built_tarball.sh 2014-12-13 11:24:41.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/create_built_tarball.sh 2016-01-05 17:28:08.000000000 +0000 @@ -31,7 +31,7 @@ # Default value GIT_SHA1=0; -BRANCH="master" +BRANCH="1.4.x" while [ -n "$1" ]; do case $1 in -help|-h ) help;shift 1;; @@ -100,12 +100,10 @@ remove_remaining_non_free_file() { echo "Remove remaining non free file. TODO UPSTREAM" + rm -fr $LOCAL_REPO/unfree rm -fr $LOCAL_REPO/plugins/GSdx/baseclasses rm -f $LOCAL_REPO/plugins/zzogl-pg/opengl/Win32/aviUtil.h - rm -f $LOCAL_REPO/plugins/spu2-x/src/Windows/Hyperlinks.h - rm -f $LOCAL_REPO/plugins/spu2-x/src/Windows/Hyperlinks.cpp rm -f $LOCAL_REPO/common/src/Utilities/x86/MemcpyFast.cpp - rm -f $LOCAL_REPO/common/include/comptr.h } remove_dot_git() { diff -Nru pcsx2-1.3.1+dfsg/debian-packager/docs pcsx2-1.4.0/debian-packager/docs --- pcsx2-1.3.1+dfsg/debian-packager/docs 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/docs 2016-01-05 17:28:08.000000000 +0000 @@ -1,2 +1,2 @@ -debian/tmp/usr/share/doc/pcsx2 +debian/tmp/usr/share/doc/PCSX2 bin/docs/*.pdf diff -Nru pcsx2-1.3.1+dfsg/debian-packager/install pcsx2-1.4.0/debian-packager/install --- pcsx2-1.3.1+dfsg/debian-packager/install 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/install 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,7 @@ -usr/bin/pcsx2 /usr/games/ -usr/lib/games/pcsx2 -usr/share/applications/pcsx2.desktop -usr/share/pixmaps/pcsx2.xpm +usr/bin/PCSX2 /usr/games/ +usr/bin/PCSX2-linux.sh /usr/games/ +usr/lib/games/PCSX2 +usr/share/applications/PCSX2.desktop +usr/share/pixmaps/PCSX2.xpm usr/share/locale usr/share/ -usr/share/games/pcsx2 +usr/share/games/PCSX2 diff -Nru pcsx2-1.3.1+dfsg/debian-packager/manpages pcsx2-1.4.0/debian-packager/manpages --- pcsx2-1.3.1+dfsg/debian-packager/manpages 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/manpages 2016-01-05 17:28:08.000000000 +0000 @@ -1 +1 @@ -bin/docs/pcsx2.1 +bin/docs/PCSX2.1 diff -Nru pcsx2-1.3.1+dfsg/debian-packager/menu pcsx2-1.4.0/debian-packager/menu --- pcsx2-1.3.1+dfsg/debian-packager/menu 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/menu 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,6 @@ ?package(pcsx2-unstable): \ needs="X11" \ section="Applications/Emulators" \ - title="pcsx2" \ + title="PCSX2" \ longtitle="A playstation 2 emulator" \ - command="/usr/games/pcsx2" + command="/usr/games/PCSX2-linux.sh" diff -Nru pcsx2-1.3.1+dfsg/debian-packager/README.Debian pcsx2-1.4.0/debian-packager/README.Debian --- pcsx2-1.3.1+dfsg/debian-packager/README.Debian 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/README.Debian 2016-01-05 17:28:08.000000000 +0000 @@ -13,63 +13,37 @@ Information about the plug-ins for video ------------------------------------------ - * The zzogl plug-in comes in two flavors: - - The Nvidia Cg version which requires the non-free nvidia-cg-toolkit - package. Since this package contains GPL-2+ code this plug-in can't be - distributed without an GPL exception allowing linking with non-free - libraries. If the user desires to try this flavor of the plug-in he/she - must: - + Install the nvidia-cg-dev or nvidia-cg-toolkit package from non-free. - + Pass "-DGLSL_API=FALSE" to dh_auto_configure in the rules file. - + Add "usr/lib/*/games/pcsx2/*.dat /usr/share/games/pcsx2/" to the install - file. - + Compile the program using dpkg-buildpackage. - This plug-in currently provides the greatest compatibility with video cards - and drivers. It currently works with open source drivers like radeon R600. - - The OpenGL Shading Language (GLSL) version which currently only works with - AMD video cards but support for other cards is being worked on. - - * The GSdx plug-in currently only supports the OpenGL software renderer. - - * The GSdx and zzogl GLSL plug-ins currently require a video card that supports - at least OpenGL 3.0. A noninclusive list of cards that support OpenGL 3.0 is: + * GSdx plug-in currently require a video card that supports + at least OpenGL 3.3. A noninclusive list of cards that support OpenGL 3.0 is: - Radeon HD series (except HD2300) - GeForce 8, 9, 100-series, 200-series, 300-series, 400-series and 500-series - Intel Sandy Bridge HD Graphics 2000 and up * Currently the proprietary drivers for AMD and Nvidia have support for - OpenGL 3.0 and above. The GSdx and/or zzogl GLSL plug-ins use the following + OpenGL 3.0 and above. GSdx plug-in use the following extensions/commands that may or may not be completely implemented in the open source video stack: - - OpenGL 3.0 (supported on Mesa 9.2) - + glClearBuffer - + glGetStringi - + glVertexAttribI - + GLX_ARB_create_context - + GL_ARB_vertex_array_object - + GL_ARB_framebuffer_object - - OpenGL 3.1 (supported on Mesa 9.2) - + GL_ARB_texture_rectangle (zzogl) - + GL_ARB_uniform_buffer_object - - OpenGL 3.2 - + GL_ARB_geometry_shader4 - + GL_ARB_draw_elements_base_vertex (GSdx) - + GLX_ARB_create_context_profile - + GLSL 150 - - OpenGL 3.3 (supported on Mesa 9.2) - + GL_ARB_blend_func_extended (GSdx) - + GL_ARB_explicit_attrib_location - + GL_ARB_sampler_objects (GSdx) + - OpenGL 3.x (supported on Mesa 10.x) - OpenGL 4.0 - + GL_ARB_GPU_shader5 (GSdx, improve FXAA, optional) + + GL_ARB_GPU_shader5 (improve FXAA, optional) - OpenGL 4.1 + GL_ARB_separate_shader_objects - OpenGL 4.2 + GL_ARB_map_buffer_alignment + + GL_ARB_shader_image_load_store + GL_ARB_shading_language_420pack + GL_ARB_texture_storage - OpenGL 4.3 - + GL_ARB_copy_image (GSdx, optional) + + GL_ARB_explicit_uniform_location + + GL_ARB_framebuffer_no_attachments + + GL_ARB_copy_image (optional) + - OpenGL 4.4 + + GL_ARB_buffer_storage + - OpenGL 4.5 + + GL_ARB_clip_control + + GL_ARB_direct_state_access + + GL_ARB_texture_barrier + The current status for the open source drivers can be found at: - http://cgit.freedesktop.org/mesa/mesa/tree/docs/GL3.txt diff -Nru pcsx2-1.3.1+dfsg/debian-packager/watch pcsx2-1.4.0/debian-packager/watch --- pcsx2-1.3.1+dfsg/debian-packager/watch 2014-08-14 07:01:10.000000000 +0000 +++ pcsx2-1.4.0/debian-packager/watch 2016-01-05 17:28:08.000000000 +0000 @@ -2,4 +2,4 @@ # Note: Upstream does not release prepackaged source files. # It's adviced to get them from their subversion repository. -# http://pcsx2.googlecode.com/files/Pcsx2-linux-beta-(.*).tar.gz +# Source: https://github.com/PCSX2/pcsx2 diff -Nru pcsx2-1.3.1+dfsg/.gitattributes pcsx2-1.4.0/.gitattributes --- pcsx2-1.3.1+dfsg/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/.gitattributes 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,8 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf +*.props text eol=crlf +*.vcxproj text eol=crlf +*.vcxproj.filters text eol=crlf diff -Nru pcsx2-1.3.1+dfsg/.gitignore pcsx2-1.4.0/.gitignore --- pcsx2-1.3.1+dfsg/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/.gitignore 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,112 @@ +.*.swp +.*.swn +.*.swo + +*.suo +*.ncb +*.sdf +*.opensdf +*.user +*.log +*.dsp +*.dsw +*.bsc +*.aps +*.exe + +*.trace +*.dump + +*.asm +!/pcsx2/IPU/yuv2rgb.asm +!/pcsx2/x86/ix86-32/aVif_proc-32.asm +!/plugins/CDVDpeops/i386.asm +!/plugins/zerogs/dx/x86-32.asm +!/plugins/zerogs/dx/x86-64.asm +!/plugins/zerogs/opengl/x86-32.asm +!/plugins/zzogl-pg/opengl/x86-32.asm + +**/Win32/Release* +**/Win32/Debug* +**/Win32/Devel* +**/x64/Release* +**/x64/Debug* +**/x64/Devel* + +_ReSharper.* +pcsx2.snapshot_* +svnrev.h + +/build +/obj-* + +.DS_Store +Thumbs.db + +Debug.txt +install_log.txt + +Debug +Release +Devel + +oprofile_data/ + +# Visual Studio upgrades +/Backup* +/UpgradeLog*.htm + +/bin/**/*.dll +/bin/**/*.exp +/bin/**/*.ilk +/bin/**/*.lib +/bin/**/*.pdb +/bin/PCSX2 +/bin/*ReplayLoader +/bin/bios +/bin/dumps +/bin/help +/bin/inis +/bin/logs +/bin/memcards +/bin/plugins +/bin/snaps +/bin/sstates +/deps +/ipch +/nsis/output/ + +!/3rdparty/libjpeg/change.log +/3rdparty/portaudio/portaudio-2.0.pc +/3rdparty/portaudio/bin +/3rdparty/portaudio/bin-* +/3rdparty/portaudio/autom4te.cache +/3rdparty/portaudio/libtool +/3rdparty/portaudio/config.* +/3rdparty/portaudio/lib-stamp +/3rdparty/portaudio/Makefile +/3rdparty/portaudio/bindings +/3rdparty/portaudio/test +/3rdparty/portaudio/testcvs +/3rdparty/portaudio/src/hostapi/asio/ASIOSDK/common +/3rdparty/portaudio/src/hostapi/asio/ASIOSDK/host +/3rdparty/portaudio/src/hostapi/wasapi/mingw-include +/3rdparty/**/include/wx/setup.h +/3rdparty/**/wx/msw/rcdefs.h +/nsis/svnrev_cdvdiso.nsh +/nsis/svnrev_gsdx.nsh +/nsis/svnrev_lilypad.nsh +/nsis/svnrev_pcsx2.nsh +/nsis/svnrev_spu2x.nsh +/nsis/svnrev_zerogs.nsh +/nsis/svnrev_zerospu2.nsh +/pcsx2/gui/Resources/*.h +!/pcsx2/gui/Resources/EmbeddedImage.h +/plugins/CDVDolio/Template +/plugins/GSdx/Template +/plugins/USBqemu/Win32/bin +/plugins/xpad/Template +/plugins/zerospu2/Windows/dsound51.cpp +/tools/bin +/tools/GSDumpGUI/bin +/tools/GSDumpGUI/obj diff -Nru pcsx2-1.3.1+dfsg/linux_various/detect_missing_file_in_cmake.sh pcsx2-1.4.0/linux_various/detect_missing_file_in_cmake.sh --- pcsx2-1.3.1+dfsg/linux_various/detect_missing_file_in_cmake.sh 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/linux_various/detect_missing_file_in_cmake.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -#!/bin/sh - -# PCSX2 - PS2 Emulator for PCs -# Copyright (C) 2002-2011 PCSX2 Dev Team -# -# PCSX2 is free software: you can redistribute it and/or modify it under the terms -# of the GNU Lesser General Public License as published by the Free Software Found- -# ation, either version 3 of the License, or (at your option) any later version. -# -# PCSX2 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 PCSX2. -# If not, see . - -# Script default parameter -MAX_DEPTH=1 -DIR=$PWD -CMAKE_FILE=CMakeLists.txt -SKIP_H=FALSE - -## Help message -help() -{ - cat < : give the directory to check. Default '.' --help : print this help message and exit --max_depth : how many depth to check missing file. Default 1 --skip : skip the check of '.h' file. Disable by default -EOF - - exit 0 -} - -## Handle option -while [ -n "$1" ]; do -case $1 in - -help|-h) help;shift 1;; # appel de la fonction help - -skip|-s) SKIP_H=TRUE;shift 1;; - -dir|-d) DIR=$2;shift 2;; - -max_depth|-m) MAX_DEPTH=$2;shift 2;; - --) shift;break;; - -*) echo "ERROR: $1 option does not exists. Use -h for help";exit 1;; - *) break;; -esac -done - - -## Main sript -for file in `find $DIR -maxdepth $MAX_DEPTH -name "*.cpp"` ; do - PATTERN=`basename $file` - grep $PATTERN $DIR/$CMAKE_FILE > /dev/null || echo $file is missing in $CMAKE_FILE -done - -if [ "${SKIP_H}" = "FALSE" ] ; then - for file in `find $DIR -maxdepth $MAX_DEPTH -name "*.h"` ; do - PATTERN=`basename $file` - grep $PATTERN $DIR/$CMAKE_FILE > /dev/null || echo $file is missing in $CMAKE_FILE - done -fi -exit diff -Nru pcsx2-1.3.1+dfsg/linux_various/generate_pot.sh pcsx2-1.4.0/linux_various/generate_pot.sh --- pcsx2-1.3.1+dfsg/linux_various/generate_pot.sh 2014-07-30 07:18:15.000000000 +0000 +++ pcsx2-1.4.0/linux_various/generate_pot.sh 2016-01-05 17:28:08.000000000 +0000 @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/sh # PCSX2 - PS2 Emulator for PCs # Copyright (C) 2002-2014 PCSX2 Dev Team @@ -16,10 +16,12 @@ # This script call xgettext utility to generate some nice pot (translation template) files +set -e + ###################################################################### # Script configuration ###################################################################### -VERSION=1.3.0 +VERSION=1.4.0 COPYRIGHT="PCSX2 Dev Team" BUG_MAIL="https://github.com/PCSX2/pcsx2/issues" diff -Nru pcsx2-1.3.1+dfsg/linux_various/glsl2h.pl pcsx2-1.4.0/linux_various/glsl2h.pl --- pcsx2-1.3.1+dfsg/linux_various/glsl2h.pl 2014-11-09 16:23:17.000000000 +0000 +++ pcsx2-1.4.0/linux_various/glsl2h.pl 2016-01-05 17:28:08.000000000 +0000 @@ -34,16 +34,48 @@ print "Disable MD5\n"; }; -my @gsdx_res = qw/convert.glsl interlace.glsl merge.glsl shadeboost.glsl tfx.glsl fxaa.fx/; +######################## +# GSdx +######################## my $gsdx_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "GSdx", "res"); my $gsdx_out = File::Spec->catdir($gsdx_path, "glsl_source.h"); + +# Just a hack to reuse glsl2h function easily +$gsdx_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "GSdx", "res", "glsl"); +my @tfx_res = qw/tfx_fs.glsl/; +my $tfx_all = File::Spec->catdir($gsdx_path, "tfx_fs_all.glsl"); + +my @gsdx_res = qw/convert.glsl interlace.glsl merge.glsl shadeboost.glsl tfx_vgs.glsl tfx_fs_all.glsl fxaa.fx/; +concat($gsdx_path, $tfx_all, \@tfx_res); + glsl2h($gsdx_path, $gsdx_out, \@gsdx_res); +unlink $tfx_all; + +######################## +# ZZOGL +######################## my @zz_res = qw/ps2hw_gl4.glsl/; my $zz_path = File::Spec->catdir(dirname(abs_path($0)), "..", "plugins", "zzogl-pg", "opengl"); my $zz_out = File::Spec->catdir($zz_path, "ps2hw_gl4.h"); glsl2h($zz_path, $zz_out, \@zz_res); +sub concat { + my $in_dir = shift; + my $out_file = shift; + my $glsl_files = shift; + + my $line; + open(my $TMP, ">$out_file"); + foreach my $file (@{$glsl_files}) { + open(my $GLSL, File::Spec->catfile($in_dir, $file)) or die "$! : $file"; + while(defined($line = <$GLSL>)) { + print $TMP $line; + } + } + +} + sub glsl2h { my $in_dir = shift; my $out_file = shift; @@ -87,7 +119,7 @@ $name =~ s/\./_/; $data .= "\nstatic const char* $name =\n"; - open(my $GLSL, File::Spec->catfile($in_dir, $file)) or die; + open(my $GLSL, File::Spec->catfile($in_dir, $file)) or die "$! : $file"; my $line; while(defined($line = <$GLSL>)) { chomp $line; diff -Nru pcsx2-1.3.1+dfsg/linux_various/pcsx2.desktop.in pcsx2-1.4.0/linux_various/pcsx2.desktop.in --- pcsx2-1.3.1+dfsg/linux_various/pcsx2.desktop.in 2014-12-24 16:27:49.000000000 +0000 +++ pcsx2-1.4.0/linux_various/pcsx2.desktop.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[Desktop Entry] -Version=1.0 -Terminal=false -Type=Application -Name=PCSX2 -GenericName=Playstation 2 Emulator -Comment=Sony Playstation 2 emulator -Exec=pcsx2 -Icon=pcsx2 -Keywords=game;emulator; -Categories=@PCSX2_MENU_CATEGORIES@ diff -Nru pcsx2-1.3.1+dfsg/linux_various/PCSX2.desktop.in pcsx2-1.4.0/linux_various/PCSX2.desktop.in --- pcsx2-1.3.1+dfsg/linux_various/PCSX2.desktop.in 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/linux_various/PCSX2.desktop.in 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Terminal=false +Type=Application +Name=PCSX2 +GenericName=Playstation 2 Emulator +Comment=Sony Playstation 2 emulator +Exec=env __GL_THREADED_OPTIMIZATIONS=1 PCSX2 +Icon=PCSX2 +Keywords=game;emulator; +Categories=@PCSX2_MENU_CATEGORIES@ diff -Nru pcsx2-1.3.1+dfsg/linux_various/pcsx2.xpm pcsx2-1.4.0/linux_various/pcsx2.xpm --- pcsx2-1.3.1+dfsg/linux_various/pcsx2.xpm 2011-09-04 20:39:19.000000000 +0000 +++ pcsx2-1.4.0/linux_various/pcsx2.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,1971 +0,0 @@ -/* XPM */ -static char * AppIcon_xpm[] = { -"128 128 1840 2", -" c None", -". c #FAFAFA", -"+ c #FCFCFC", -"@ c #FDFDFD", -"# c #FBFBFB", -"$ c #FBFBFC", -"% c #F7F9FC", -"& c #F9F9FD", -"* c #FAFAFD", -"= c #FAFCFD", -"- c #F2F5FC", -"; c #F1F4FC", -"> c #F4F6FC", -", c #F7F8FC", -"' c #FAFAFC", -") c #F8F9FC", -"! c #F0F4FD", -"~ c #D3E0FD", -"{ c #B9CEFC", -"] c #A6C1FC", -"^ c #A0BDFC", -"/ c #ADC6FC", -"( c #C0D2FD", -"_ c #D4E0FD", -": c #E6EDFC", -"< c #F9FAFC", -"[ c #FCFDFD", -"} c #FCFCFD", -"| c #F1F5FC", -"1 c #DFE9FC", -"2 c #AEC6FD", -"3 c #83A9FD", -"4 c #6796FD", -"5 c #5F91FD", -"6 c #739EFD", -"7 c #8EB0FD", -"8 c #AFC7FC", -"9 c #D0DEFC", -"0 c #F2F5FD", -"a c #CDDCFD", -"b c #A8C1FC", -"c c #84A9FD", -"d c #6896FD", -"e c #5D8FFD", -"f c #5B8EFD", -"g c #6393FD", -"h c #729DFD", -"i c #87ABFD", -"j c #ACC5FD", -"k c #DAE4FC", -"l c #EDF3FC", -"m c #EDF3FD", -"n c #DDE7FD", -"o c #A9C3FD", -"p c #7AA2FD", -"q c #5488FD", -"r c #5689FD", -"s c #578AFD", -"t c #5C8FFD", -"u c #6695FD", -"v c #C4D7FD", -"w c #E2EBFD", -"x c #FAFBFD", -"y c #F6F9FD", -"z c #A5C0FD", -"A c #81A7FD", -"B c #6392FD", -"C c #5B8DFD", -"D c #558AFD", -"E c #568AFD", -"F c #568BFD", -"G c #598BFD", -"H c #5A8CFD", -"I c #7EA6FD", -"J c #B5CBFD", -"K c #D9E4FD", -"L c #FBFCFD", -"M c #EDF2FD", -"N c #DCE7FD", -"O c #A9C4FD", -"P c #78A2FD", -"Q c #6494FD", -"R c #578BFD", -"S c #598CFD", -"T c #7FA6FD", -"U c #B5CCFD", -"V c #DAE5FD", -"W c #F6F8FD", -"X c #D0DEFD", -"Y c #A3BFFD", -"Z c #80A8FD", -"` c #6091FD", -" . c #5A8EFD", -".. c #5C8EFD", -"+. c #6897FD", -"@. c #96B6FD", -"#. c #D2E0FD", -"$. c #EBF1FD", -"%. c #FAFBFC", -"&. c #ECF2FD", -"*. c #D8E4FD", -"=. c #ABC5FD", -"-. c #79A3FD", -";. c #6595FD", -">. c #578BFE", -",. c #588BFD", -"'. c #6E9AFD", -"). c #8CAFFE", -"!. c #B7CDFD", -"~. c #E8EEFD", -"{. c #A2BFFD", -"]. c #7FA7FD", -"^. c #5A8DFD", -"/. c #568AFE", -"(. c #5B8EFE", -"_. c #6A98FE", -":. c #8DB0FE", -"<. c #C0D3FD", -"[. c #E1E9FD", -"}. c #D6E2FD", -"|. c #ACC6FD", -"1. c #7BA5FD", -"2. c #6696FD", -"3. c #598CFE", -"4. c #5D90FE", -"5. c #6E9BFE", -"6. c #8EB2FE", -"7. c #B5CCFE", -"8. c #E1EAFD", -"9. c #F5F7FD", -"0. c #A4C0FD", -"a. c #7EA7FD", -"b. c #588CFE", -"c. c #8AAFFE", -"d. c #C1D5FE", -"e. c #E3ECFE", -"f. c #F4F7FD", -"g. c #ECF1FD", -"h. c #ADC6FD", -"i. c #5F90FE", -"j. c #6E9AFE", -"k. c #90B3FE", -"l. c #B6CDFE", -"m. c #DFE9FE", -"n. c #F5F8FE", -"o. c #FBFBFD", -"p. c #F8FAFD", -"q. c #F3F6FD", -"r. c #F7F9FD", -"s. c #7DA5FD", -"t. c #598DFE", -"u. c #6997FE", -"v. c #87ABFE", -"w. c #C0D4FE", -"x. c #E7EFFE", -"y. c #F6F9FE", -"z. c #FDFDFE", -"A. c #F2F6FD", -"B. c #E5ECFD", -"C. c #DEE7FD", -"D. c #E5EDFD", -"E. c #F8F9FD", -"F. c #EEF2FD", -"G. c #D1DFFD", -"H. c #5F91FE", -"I. c #6C9AFE", -"J. c #92B3FE", -"K. c #B7CDFE", -"L. c #DEE8FE", -"M. c #FCFDFE", -"N. c #FEFEFE", -"O. c #F9FAFD", -"P. c #F3F7FD", -"Q. c #D7E3FD", -"R. c #BCD0FD", -"S. c #9EBBFD", -"T. c #A9C2FD", -"U. c #B8CEFD", -"V. c #DFE8FD", -"W. c #A6C1FD", -"X. c #7BA4FD", -"Y. c #578CFE", -"Z. c #6998FE", -"`. c #83A9FE", -" + c #BFD3FE", -".+ c #EBF2FE", -"++ c #F7FAFE", -"@+ c #E7EEFD", -"#+ c #AFC8FD", -"$+ c #6594FD", -"%+ c #7CA4FD", -"&+ c #CADAFD", -"*+ c #EEF3FD", -"=+ c #EFF4FD", -"-+ c #92B4FE", -";+ c #B9CFFE", -">+ c #DCE7FE", -",+ c #FBFCFE", -"'+ c #87ACFD", -")+ c #6B99FD", -"!+ c #85AAFD", -"~+ c #A4BFFD", -"{+ c #C9D9FD", -"]+ c #E3EBFD", -"^+ c #E0EAFD", -"/+ c #A8C3FD", -"(+ c #6192FD", -"_+ c #80A7FE", -":+ c #BBD0FE", -"<+ c #ECF2FE", -"[+ c #F7F9FE", -"}+ c #F2F6FE", -"|+ c #E4EDFE", -"1+ c #ADC7FE", -"2+ c #749FFE", -"3+ c #5588FD", -"4+ c #578CFD", -"5+ c #6997FD", -"6+ c #80A7FD", -"7+ c #C8D8FD", -"8+ c #CFDEFD", -"9+ c #5E91FE", -"0+ c #6897FE", -"a+ c #91B3FE", -"b+ c #DBE6FE", -"c+ c #FAFBFE", -"d+ c #F3F7FE", -"e+ c #D2E0FE", -"f+ c #AAC4FE", -"g+ c #86ABFE", -"h+ c #6394FE", -"i+ c #5C8FFE", -"j+ c #578AFE", -"k+ c #598DFD", -"l+ c #6D9AFD", -"m+ c #E2EAFD", -"n+ c #F9FBFD", -"o+ c #F1F5FD", -"p+ c #E0E9FD", -"q+ c #AAC4FD", -"r+ c #6394FD", -"s+ c #6B9AFE", -"t+ c #81A8FE", -"u+ c #B8CEFE", -"v+ c #F1F5FE", -"w+ c #AFC8FE", -"x+ c #77A1FE", -"y+ c #6595FE", -"z+ c #568BFE", -"A+ c #5D90FD", -"B+ c #83A8FD", -"C+ c #83AAFD", -"D+ c #BED2FE", -"E+ c #FAFCFE", -"F+ c #D4E1FE", -"G+ c #A9C3FE", -"H+ c #85ABFE", -"I+ c #6495FE", -"J+ c #5F90FD", -"K+ c #6D9BFD", -"L+ c #C8D9FD", -"M+ c #E3EBFC", -"N+ c #E4EBFD", -"O+ c #AEC7FD", -"P+ c #7CA5FD", -"Q+ c #548AFD", -"R+ c #5B8FFE", -"S+ c #6D9BFE", -"T+ c #EBF1FE", -"U+ c #F6F8FE", -"V+ c #F0F5FE", -"W+ c #B2CAFE", -"X+ c #7CA5FE", -"Y+ c #6696FE", -"Z+ c #5E90FD", -"`+ c #84AAFD", -" @ c #EFF3FD", -".@ c #89ADFD", -"+@ c #588BFE", -"@@ c #6B99FE", -"#@ c #BFD2FE", -"$@ c #D6E3FE", -"%@ c #A8C3FE", -"&@ c #84ABFE", -"*@ c #6596FE", -"=@ c #82A8FD", -"-@ c #C6D7FD", -";@ c #8DB1FD", -">@ c #5388FD", -",@ c #88ADFE", -"'@ c #B4CBFE", -")@ c #E6EDFE", -"!@ c #EFF4FE", -"~@ c #D9E5FE", -"{@ c #7FA7FE", -"]@ c #588DFE", -"^@ c #A3C0FD", -"/@ c #5489FD", -"(@ c #558AFE", -"_@ c #7AA3FE", -":@ c #FCFCFE", -"<@ c #A7C3FE", -"[@ c #82A9FE", -"}@ c #A5C1FD", -"|@ c #CBDAFD", -"1@ c #E7EDFD", -"2@ c #B4CBFD", -"3@ c #7CA4FE", -"4@ c #E0E9FE", -"5@ c #B2CBFE", -"6@ c #82AAFE", -"7@ c #5A8DFE", -"8@ c #7BA4FE", -"9@ c #86ACFE", -"0@ c #7EA6FE", -"a@ c #5D8FFE", -"b@ c #CCDBFD", -"c@ c #739EFE", -"d@ c #A3BFFE", -"e@ c #CDDCFE", -"f@ c #FDFEFE", -"g@ c #F4F7FE", -"h@ c #DDE7FE", -"i@ c #A8C4FE", -"j@ c #7FA8FE", -"k@ c #C1D4FE", -"l@ c #A6C2FE", -"m@ c #6C9AFD", -"n@ c #EAF0FD", -"o@ c #5E8EFD", -"p@ c #6796FE", -"q@ c #D4E2FE", -"r@ c #EAF1FE", -"s@ c #8EB1FE", -"t@ c #B4CCFE", -"u@ c #DAE5FE", -"v@ c #E5EDFE", -"w@ c #CCDCFE", -"x@ c #A2BFFE", -"y@ c #81A9FE", -"z@ c #6A99FE", -"A@ c #5E90FE", -"B@ c #6998FD", -"C@ c #E8EFFD", -"D@ c #9BB9FD", -"E@ c #6A97FD", -"F@ c #6091FE", -"G@ c #7AA4FE", -"H@ c #A4C1FE", -"I@ c #CFDEFE", -"J@ c #E1EAFE", -"K@ c #A9C4FE", -"L@ c #7CA6FE", -"M@ c #E9F0FE", -"N@ c #CBDBFE", -"O@ c #A5C2FE", -"P@ c #6A98FD", -"Q@ c #B0C8FD", -"R@ c #BED1FD", -"S@ c #78A2FE", -"T@ c #6092FE", -"U@ c #558BFE", -"V@ c #D7E3FE", -"W@ c #D3E0FE", -"X@ c #B3CAFE", -"Y@ c #87ACFE", -"Z@ c #6898FE", -"`@ c #8DB1FE", -" # c #B5CDFE", -".# c #F9FBFE", -"+# c #F8FAFE", -"@# c #C8D9FE", -"## c #A0BEFE", -"$# c #588CFD", -"%# c #92B3FD", -"&# c #B9CEFD", -"*# c #E4ECFD", -"=# c #FBFDFD", -"-# c #E4ECFE", -";# c #C9DAFE", -"># c #94B6FE", -",# c #7DA6FE", -"'# c #ABC5FE", -")# c #7DA5FE", -"!# c #B7CEFE", -"~# c #9AB9FE", -"{# c #6393FE", -"]# c #749FFD", -"^# c #99B8FD", -"/# c #D8E3FD", -"(# c #EFF7FD", -"_# c #E2F2FD", -":# c #CEE9FC", -"<# c #C2E5FD", -"[# c #BEE4FD", -"}# c #C6E7FD", -"|# c #D8EEFD", -"1# c #E9F5FD", -"2# c #BCD1FE", -"3# c #97B8FE", -"4# c #77A2FE", -"5# c #6192FE", -"6# c #8FB2FE", -"7# c #9ABAFE", -"8# c #EDF2FE", -"9# c #6293FE", -"0# c #739FFD", -"a# c #99B9FD", -"b# c #F7FAFD", -"c# c #E0F2FD", -"d# c #C3E6FD", -"e# c #9DD6FD", -"f# c #84CCFD", -"g# c #7CC9FD", -"h# c #8DD0FD", -"i# c #AFDEFD", -"j# c #D2ECFD", -"k# c #F5FAFD", -"l# c #C6D8FE", -"m# c #91B4FE", -"n# c #6896FE", -"o# c #B5CBFE", -"p# c #C5D7FE", -"q# c #96B6FE", -"r# c #75A1FD", -"s# c #9CBBFD", -"t# c #D9E5FD", -"u# c #EBF6FD", -"v# c #D4ECFD", -"w# c #AFDDFD", -"x# c #8DCFFD", -"y# c #72C5FD", -"z# c #63BFFD", -"A# c #61BEFD", -"B# c #6DC3FD", -"C# c #85CCFD", -"D# c #A6D9FD", -"E# c #CCE9FD", -"F# c #E5F4FE", -"G# c #FBFDFE", -"H# c #F3F6FE", -"I# c #E1EBFE", -"J# c #99B8FE", -"K# c #76A1FE", -"L# c #5A8EFE", -"M# c #8CB0FE", -"N# c #E0EAFE", -"O# c #C3D6FE", -"P# c #9FBDFE", -"Q# c #8FB2FD", -"R# c #BED2FD", -"S# c #E6EEFD", -"T# c #B1DEFD", -"U# c #82CBFD", -"V# c #5CBCFD", -"W# c #4FB6FD", -"X# c #48B3FD", -"Y# c #49B4FD", -"Z# c #51B7FE", -"`# c #5FBCFD", -" $ c #7DC9FD", -".$ c #A4D9FE", -"+$ c #CCEAFE", -"@$ c #F4FBFE", -"#$ c #C3D5FE", -"$$ c #6F9CFE", -"%$ c #83AAFE", -"&$ c #B1CAFE", -"*$ c #E9EFFE", -"=$ c #F9FAFE", -"-$ c #C2D5FE", -";$ c #9EBCFE", -">$ c #5C8EFE", -",$ c #DDE8FD", -"'$ c #F6F6F9", -")$ c #F3F4F8", -"!$ c #F2F3F7", -"~$ c #F7F8FA", -"{$ c #FAFAFB", -"]$ c #D5EDFD", -"^$ c #ABDCFD", -"/$ c #67C0FD", -"($ c #52B8FD", -"_$ c #4CB5FD", -":$ c #4DB5FD", -"<$ c #54B8FD", -"[$ c #67C0FE", -"}$ c #7FCAFE", -"|$ c #A4DAFE", -"1$ c #E6F5FE", -"2$ c #BDD2FE", -"3$ c #99B9FE", -"4$ c #74A0FE", -"5$ c #6193FE", -"6$ c #8BAFFE", -"7$ c #B9CEFE", -"8$ c #80A8FE", -"9$ c #5489FE", -"0$ c #5388FE", -"a$ c #88ACFE", -"b$ c #C4D6FD", -"c$ c #EDF2FC", -"d$ c #EFF1F8", -"e$ c #E1E4EF", -"f$ c #C0C6DE", -"g$ c #AEB6D4", -"h$ c #A7B1D1", -"i$ c #B5BDD9", -"j$ c #CED3E5", -"k$ c #E5E7F1", -"l$ c #F5F9FD", -"m$ c #B2DEFD", -"n$ c #86CCFD", -"o$ c #5FBDFD", -"p$ c #4AB5FD", -"q$ c #4AB4FD", -"r$ c #4AB3FD", -"s$ c #4BB4FD", -"t$ c #4CB6FE", -"u$ c #55B9FE", -"v$ c #61BEFE", -"w$ c #80CBFE", -"x$ c #CDEAFE", -"y$ c #F4FAFE", -"z$ c #E3EBFE", -"A$ c #729EFE", -"B$ c #B0C9FE", -"C$ c #AFC7FE", -"D$ c #D6E1F9", -"E$ c #ECEDF4", -"F$ c #D7DBEA", -"G$ c #B7BED9", -"H$ c #8894C1", -"I$ c #6D7CB4", -"J$ c #6475AF", -"K$ c #7988BA", -"L$ c #9DA7CC", -"M$ c #C4CAE0", -"N$ c #EBEDF4", -"O$ c #F5F6F9", -"P$ c #ECF6FD", -"Q$ c #D6EDFD", -"R$ c #67C1FD", -"S$ c #4DB6FD", -"T$ c #4BB5FE", -"U$ c #4FB7FE", -"V$ c #54B9FE", -"W$ c #67C1FE", -"X$ c #7ECAFE", -"Y$ c #A5DAFE", -"Z$ c #E8F5FE", -"`$ c #89AEFE", -" % c #C7D8FE", -".% c #548AFE", -"+% c #5087FE", -"@% c #6797FE", -"#% c #DAE4FB", -"$% c #CFD6EB", -"%% c #B7BFD9", -"&% c #8390BF", -"*% c #5C6DAC", -"=% c #485BA1", -"-% c #3D529C", -";% c #3B4F9B", -">% c #4559A0", -",% c #5567A8", -"'% c #828FBE", -")% c #B5BCD9", -"!% c #DADEEC", -"~% c #F8FBFD", -"{% c #F2F8FD", -"]% c #D3ECFD", -"^% c #87CDFD", -"/% c #5EBDFD", -"(% c #53B8FD", -"_% c #82CBFE", -":% c #F1F9FE", -"<% c #F9FCFE", -"[% c #E2EBFE", -"}% c #CBDAFE", -"|% c #ACC6FE", -"1% c #D1DDF9", -"2% c #E4E6F0", -"3% c #B2BAD7", -"4% c #7E8CBC", -"5% c #45599F", -"6% c #243C90", -"7% c #21398E", -"8% c #21388D", -"9% c #22398E", -"0% c #253C90", -"a% c #283F91", -"b% c #4F61A5", -"c% c #7E8DBD", -"d% c #B3BBD8", -"e% c #E9EBF3", -"f% c #F4F5F9", -"g% c #EDF7FD", -"h% c #ADDCFD", -"i% c #7FCAFD", -"j% c #51B8FD", -"k% c #53B9FE", -"l% c #7CC9FE", -"m% c #E9F6FE", -"n% c #87ADFE", -"o% c #E6EEFE", -"p% c #AEC7FE", -"q% c #CFD7EC", -"r% c #B5BCD8", -"s% c #7381B7", -"t% c #41549D", -"u% c #2E4393", -"v% c #233A8F", -"w% c #243B8F", -"x% c #243C8F", -"y% c #263E90", -"z% c #354B98", -"A% c #7C8ABB", -"B% c #DCDFEC", -"C% c #F0F7FC", -"D% c #89CEFD", -"E% c #54B9FD", -"F% c #4AB4FE", -"G% c #4AB5FE", -"H% c #56BAFE", -"I% c #83CCFE", -"J% c #A6DAFE", -"K% c #EEF8FE", -"L% c #F8FCFE", -"M% c #BDD1FE", -"N% c #98B8FE", -"O% c #84AAFE", -"P% c #CDDAF9", -"Q% c #E4E7F1", -"R% c #B0B8D6", -"S% c #7C8ABC", -"T% c #465AA1", -"U% c #233A8E", -"V% c #243B8E", -"W% c #253C8F", -"X% c #263D8F", -"Y% c #263D90", -"Z% c #2B4192", -"`% c #5264A6", -" & c #7C8BBC", -".& c #E4E7F0", -"+& c #F2F3F8", -"@& c #80CBFD", -"#& c #66C0FD", -"$& c #50B7FD", -"%& c #4BB5FD", -"&& c #49B5FE", -"*& c #48B4FE", -"=& c #49B4FE", -"-& c #53B8FE", -";& c #66C0FE", -">& c #7DC9FE", -",& c #EBF7FE", -"'& c #9BBAFE", -")& c #719DFE", -"!& c #E8EFFE", -"~& c #8AAEFE", -"{& c #6494FE", -"]& c #E7EEFE", -"^& c #D3D9ED", -"/& c #B8BED9", -"(& c #7482B8", -"_& c #3B509B", -":& c #2C4394", -"<& c #263D91", -"[& c #273E91", -"}& c #344A97", -"|& c #44589F", -"1& c #DDE0ED", -"2& c #B0DDFD", -"3& c #8ACEFD", -"4& c #62BFFD", -"5& c #51B8FE", -"6& c #59BBFE", -"7& c #64C0FE", -"8& c #6BC3FE", -"9& c #6CC3FE", -"0& c #4BB6FE", -"a& c #63BFFE", -"b& c #CEEBFE", -"c& c #C4D6FE", -"d& c #A1BEFE", -"e& c #DDE8FE", -"f& c #D1DFFE", -"g& c #CBD8F8", -"h& c #E3E6F1", -"i& c #AFB7D5", -"j& c #7987BA", -"k& c #495CA2", -"l& c #223A8F", -"m& c #233B8F", -"n& c #243B90", -"o& c #263E91", -"p& c #2B4293", -"q& c #5365A7", -"r& c #B4BBD7", -"s& c #E1E3EE", -"t& c #80CAFD", -"u& c #65BFFD", -"v& c #4CB6FD", -"w& c #4EB7FE", -"x& c #5BBCFE", -"y& c #6FC4FE", -"z& c #90D2FE", -"A& c #A9DCFE", -"B& c #95D4FE", -"C& c #5ABCFE", -"D& c #65C0FE", -"E& c #7DCAFE", -"F& c #6999FE", -"G& c #4F86FE", -"H& c #B0C8FE", -"I& c #D6DDEE", -"J& c #BAC1DB", -"K& c #7382B7", -"L& c #304696", -"M& c #294092", -"N& c #324896", -"O& c #7D8CBC", -"P& c #B3BBD7", -"Q& c #F9FCFD", -"R& c #50B8FE", -"S& c #6EC4FE", -"T& c #B8E2FE", -"U& c #D0ECFE", -"V& c #D4EDFE", -"W& c #BEE4FE", -"X& c #95D3FE", -"Y& c #76C7FE", -"Z& c #4DB6FE", -"`& c #84CDFE", -" * c #CFEBFE", -".* c #EAF6FE", -"+* c #EEF3FE", -"@* c #6D9AFE", -"#* c #B1C9FE", -"$* c #C9D7F8", -"%* c #DBE0EF", -"&* c #AFB8D6", -"** c #4C5EA3", -"=* c #2F4695", -"-* c #5466A7", -";* c #7D8BBC", -">* c #B4BCD8", -",* c #DEE1ED", -"'* c #F2F9FD", -")* c #62BEFD", -"!* c #B5E1FE", -"~* c #E0F2FE", -"{* c #C1E5FE", -"]* c #98D5FE", -"^* c #59BCFE", -"/* c #4DB7FE", -"(* c #63C0FE", -"_* c #A8DBFE", -":* c #FBFBFE", -"<* c #AAC5FE", -"[* c #95B6FE", -"}* c #DCE0EF", -"|* c #B8BFDA", -"1* c #7684B8", -"2* c #2F4495", -"3* c #2C4293", -"4* c #2A4193", -"5* c #283E91", -"6* c #2F4595", -"7* c #7D8CBD", -"8* c #D5ECFD", -"9* c #AEDCFD", -"0* c #60BEFE", -"a* c #7CCAFE", -"b* c #AFDEFE", -"c* c #D8EFFE", -"d* c #F0F9FE", -"e* c #BFE4FE", -"f* c #96D4FE", -"g* c #78C8FE", -"h* c #5DBDFE", -"i* c #66C1FE", -"j* c #ACDDFE", -"k* c #DEF1FE", -"l* c #F5FBFE", -"m* c #ECEFFB", -"n* c #DADFF7", -"o* c #CCD4F4", -"p* c #C1CBF2", -"q* c #C9D2F3", -"r* c #D6DDF6", -"s* c #E8EBFA", -"t* c #FAFAFE", -"u* c #CFDBF8", -"v* c #D9DDEE", -"w* c #7684B9", -"x* c #4B5EA3", -"y* c #294093", -"z* c #5366A7", -"A* c #DCE0ED", -"B* c #F4F5F8", -"C* c #D9EEFD", -"D* c #B3DEFD", -"E* c #60BDFD", -"F* c #DCF1FE", -"G* c #C4E7FE", -"H* c #9AD6FE", -"I* c #5CBCFE", -"J* c #4CB5FE", -"K* c #61BFFE", -"L* c #88CFFE", -"M* c #C8E9FE", -"N* c #FAFDFE", -"O* c #F2F4FC", -"P* c #D8DEF7", -"Q* c #B0BDEE", -"R* c #96A7E9", -"S* c #8196E5", -"T* c #91A3E8", -"U* c #A9B7ED", -"V* c #CED6F5", -"W* c #F4F6FD", -"X* c #E4E6F1", -"Y* c #BCC1DB", -"Z* c #7A87BA", -"`* c #233B90", -" = c #45589F", -".= c #7F8DBD", -"+= c #B6BDD9", -"@= c #EAECF3", -"#= c #ACDCFD", -"$= c #88CCFD", -"%= c #7BC9FE", -"&= c #F3FAFE", -"*= c #E2F3FE", -"== c #B6E1FE", -"-= c #64BFFE", -";= c #77C8FE", -">= c #BBE3FE", -",= c #E3F3FE", -"'= c #E9EDFA", -")= c #CCD5F4", -"!= c #95A6E9", -"~= c #859AE6", -"{= c #7C92E4", -"]= c #8398E5", -"^= c #8EA1E8", -"/= c #AAB8ED", -"(= c #C8D1F3", -"_= c #E2E7F9", -":= c #7B88BB", -"<= c #4C5FA3", -"[= c #283F92", -"}= c #354A97", -"|= c #7E8BBC", -"1= c #B6BDD8", -"2= c #DADEEB", -"3= c #F5F6F8", -"4= c #D7EEFD", -"5= c #B4DFFD", -"6= c #5EBCFD", -"7= c #AEDEFE", -"8= c #DAEFFE", -"9= c #FBFEFE", -"0= c #92D2FE", -"a= c #6BC2FE", -"b= c #46B4FE", -"c= c #68C2FE", -"d= c #B0DFFE", -"e= c #F7FCFE", -"f= c #EFF2FB", -"g= c #D5DCF6", -"h= c #A8B6EC", -"i= c #8B9EE6", -"j= c #7C92E3", -"k= c #788EE3", -"l= c #798FE3", -"m= c #768DE2", -"n= c #889CE6", -"o= c #9DADEA", -"p= c #C9D2F4", -"q= c #F1F2FC", -"r= c #F8F8FB", -"s= c #EAEDF4", -"t= c #A6B0D1", -"u= c #40559E", -"v= c #495CA1", -"w= c #808EBD", -"x= c #EAF5FC", -"y= c #D8EDFD", -"z= c #ADDBFD", -"A= c #86CDFD", -"B= c #68C0FD", -"C= c #47B4FE", -"D= c #5FBEFE", -"E= c #B4E0FE", -"F= c #EBEEFB", -"G= c #AEBBEE", -"H= c #7A90E3", -"I= c #788FE3", -"J= c #7F94E4", -"K= c #899CE6", -"L= c #A8B6ED", -"M= c #C6CFF3", -"N= c #E3E7F9", -"O= c #F1F2F7", -"P= c #364C99", -"Q= c #364C98", -"R= c #5163A5", -"S= c #B5BDD8", -"T= c #D9DCEA", -"U= c #F8F8FA", -"V= c #F9FBFC", -"W= c #D6ECFC", -"X= c #B5DFFD", -"Y= c #52B7FD", -"Z= c #7AC9FE", -"`= c #ADDEFE", -" - c #D7EEFE", -".- c #C3E7FE", -"+- c #99D5FE", -"@- c #5ABBFE", -"#- c #77C7FE", -"$- c #EDF0FB", -"%- c #D6DCF6", -"&- c #8C9FE7", -"*- c #7E94E4", -"=- c #8B9EE7", -"-- c #A0B0EC", -";- c #CBD3F4", -">- c #ECF0FB", -",- c #F7F8FD", -"'- c #F7F7FA", -")- c #C8CEE3", -"!- c #818EBE", -"~- c #5264A7", -"{- c #2C4393", -"]- c #273E90", -"^- c #2C4192", -"/- c #B5BCD7", -"(- c #EAECF2", -"_- c #F7F7F9", -":- c #EEF7FC", -"<- c #DFF1FD", -"[- c #AFDCFC", -"}- c #83CCFD", -"|- c #67BFFD", -"1- c #53B7FD", -"2- c #ABDCFE", -"3- c #DCF0FE", -"4- c #BDE4FE", -"5- c #74C6FE", -"6- c #F6FBFE", -"7- c #CBD4F4", -"8- c #ACBAED", -"9- c #91A4E8", -"0- c #8095E4", -"a- c #7B91E4", -"b- c #7F95E4", -"c- c #899DE6", -"d- c #A6B5EC", -"e- c #C3CDF3", -"f- c #E3E8F9", -"g- c #E7EAF2", -"h- c #C8CDE3", -"i- c #919DC7", -"j- c #5265A7", -"k- c #374D99", -"l- c #283E90", -"m- c #374C98", -"n- c #4F61A3", -"o- c #7F8CBC", -"p- c #B9C1DA", -"q- c #FBFCFC", -"r- c #C1E5FC", -"s- c #8CCFFD", -"t- c #5DBCFD", -"u- c #79C9FE", -"v- c #D5EDFE", -"w- c #FCFEFE", -"x- c #F7FBFE", -"y- c #C0E5FE", -"z- c #97D4FE", -"A- c #6AC2FE", -"B- c #58BBFE", -"C- c #52B8FE", -"D- c #A0D8FE", -"E- c #A0AFEB", -"F- c #CAD2F3", -"G- c #E8ECFA", -"H- c #F6F7FD", -"I- c #F9F9FC", -"J- c #C6CDE2", -"K- c #8391C0", -"L- c #283F90", -"M- c #5263A4", -"N- c #8794C0", -"O- c #BBC3DA", -"P- c #F8FAFA", -"Q- c #CAE8FC", -"R- c #99D4FC", -"S- c #70C3FC", -"T- c #50B5FD", -"U- c #4DB4FD", -"V- c #DBF0FE", -"W- c #EFF8FE", -"X- c #91D2FE", -"Y- c #71C5FE", -"Z- c #4FB8FE", -"`- c #75C7FE", -" ; c #9ED7FE", -".; c #CEEAFE", -"+; c #ECF7FE", -"@; c #F0F3FC", -"#; c #7F95E5", -"$; c #A4B3EC", -"%; c #C2CBF2", -"&; c #E5E9F9", -"*; c #E8EAF3", -"=; c #CCD2E5", -"-; c #8592C1", -";; c #2A4093", -">; c #21388E", -",; c #273E8F", -"'; c #374B98", -"); c #4E60A3", -"!; c #909BC5", -"~; c #E2E6EF", -"{; c #EFF0F6", -"]; c #C0E4FC", -"^; c #84CCFC", -"/; c #63BEFD", -"(; c #48B2FD", -"_; c #49B3FD", -":; c #D3EDFE", -"<; c #97D5FE", -"[; c #6DC3FE", -"}; c #54BAFE", -"|; c #69C2FE", -"1; c #9DD7FE", -"2; c #CBE9FE", -"3; c #EDF7FE", -"4; c #EAEDFA", -"5; c #8095E5", -"6; c #7B91E3", -"7; c #899DE7", -"8; c #A1B0EC", -"9; c #CAD2F4", -"0; c #E6EAFA", -"a; c #F7F8FB", -"b; c #B2BAD8", -"c; c #6273AF", -"d; c #41569F", -"e; c #273D91", -"f; c #294090", -"g; c #7280B5", -"h; c #CDD3E5", -"i; c #E5E8F0", -"j; c #C4E6FD", -"k; c #8BCDFC", -"l; c #65BEFD", -"m; c #47B2FD", -"n; c #70C4FE", -"o; c #74C7FE", -"p; c #9ED8FE", -"q; c #EEF7FE", -"r; c #CDD5F4", -"s; c #778DE3", -"t; c #778EE3", -"u; c #7990E3", -"v; c #7D93E4", -"w; c #A2B1EC", -"x; c #E7EBFA", -"y; c #D8DCEB", -"z; c #7080B6", -"A; c #344A98", -"B; c #243B8D", -"C; c #20388C", -"D; c #6273AE", -"E; c #D8DDEA", -"F; c #D2EBFC", -"G; c #A8D9FC", -"H; c #79C6FC", -"I; c #4CB4FD", -"J; c #4EB6FD", -"K; c #D3ECFE", -"L; c #9CD7FE", -"M; c #CAEAFE", -"N; c #E9ECFA", -"O; c #D4DCF6", -"P; c #AFBCEE", -"Q; c #8196E4", -"R; c #8498E6", -"S; c #94A6E9", -"T; c #8FA1E8", -"U; c #A3B2EC", -"V; c #CAD3F4", -"W; c #E4E9F9", -"X; c #EEF0F6", -"Y; c #DDE1ED", -"Z; c #707FB6", -"`; c #4D60A4", -" > c #304695", -".> c #213A8D", -"+> c #6475AE", -"@> c #DADFEA", -"#> c #EAF4FC", -"$> c #D7EDFD", -"%> c #9AD3FC", -"&> c #49B2FD", -"*> c #57B9FD", -"=> c #6AC2FD", -"-> c #8BCFFD", -";> c #DBEFFD", -">> c #F1F8FD", -",> c #E1F2FE", -"'> c #6EC3FE", -")> c #72C6FE", -"!> c #CED7F5", -"~> c #90A3E7", -"{> c #7D93E3", -"]> c #8397E5", -"^> c #99A9E9", -"/> c #B1BEEE", -"(> c #B9C5F0", -"_> c #9DADEB", -":> c #EAEEFB", -"<> c #F8F9FB", -"[> c #F2F4F8", -"}> c #E2E6F0", -"|> c #8995C2", -"1> c #2A4292", -"2> c #D1D6E7", -"3> c #F6F9FC", -"4> c #C1E3FC", -"5> c #99D4FD", -"6> c #79C7FD", -"7> c #88CDFD", -"8> c #9CD5FD", -"9> c #BBE2FD", -"0> c #72C5FE", -"a> c #9CD6FE", -"b> c #CAE9FE", -"c> c #D2D9F5", -"d> c #8C9FE6", -"e> c #8297E5", -"f> c #98A9E9", -"g> c #D3DAF5", -"h> c #D9DFF7", -"i> c #C0CBF2", -"j> c #A2B2EC", -"k> c #8499E5", -"l> c #7E93E4", -"m> c #8A9DE7", -"n> c #C2CCF2", -"o> c #DDE3F8", -"p> c #BDC4DD", -"q> c #8894C2", -"r> c #5063A6", -"s> c #2A4192", -"t> c #3E529C", -"u> c #5E6FAC", -"v> c #9CA7CB", -"w> c #E5E8F1", -"x> c #F0F1F7", -"y> c #EDF6FD", -"z> c #DFF0FD", -"A> c #C0E5FD", -"B> c #CDE9FD", -"C> c #F7FBFD", -"D> c #C3E6FE", -"E> c #92D3FE", -"F> c #45B3FE", -"G> c #6FC5FE", -"H> c #9FD7FE", -"I> c #F3F4FC", -"J> c #D1D8F5", -"K> c #A5B5EC", -"L> c #8FA1E7", -"M> c #7C91E3", -"N> c #93A5E9", -"O> c #B4C1EF", -"P> c #E0E5F8", -"Q> c #97A8E9", -"R> c #869AE6", -"S> c #8B9FE7", -"T> c #B7C3F0", -"U> c #EDF1FB", -"V> c #7987BB", -"W> c #384E9A", -"X> c #263C90", -"Y> c #2B4392", -"Z> c #5F70AC", -"`> c #A7B0D0", -" , c #D1D6E6", -"., c #F7F9FA", -"+, c #F8FAFC", -"@, c #F3F9FC", -"#, c #E8F4FD", -"$, c #EAF5FD", -"%, c #E4F4FE", -"&, c #73C6FE", -"*, c #9BD6FE", -"=, c #E7F5FE", -"-, c #D0D8F5", -";, c #8EA1E7", -">, c #96A8E9", -",, c #B6C2F0", -"', c #D4DBF6", -"), c #F1F3FB", -"!, c #DDE2F8", -"~, c #BFCAF2", -"{, c #7F94E5", -"], c #7C91E4", -"^, c #A0B0EB", -"/, c #D1D9F5", -"(, c #EBEDF5", -"_, c #B2BBD8", -":, c #7E8CBD", -"<, c #253D90", -"[, c #3E539C", -"}, c #96A1C9", -"|, c #D3D6E7", -"1, c #E8EBF2", -"2, c #E3F3FD", -"3, c #C6E8FE", -"4, c #94D3FE", -"5, c #57BBFE", -"6, c #46B3FE", -"7, c #F3F5FC", -"8, c #8DA0E7", -"9, c #93A5E8", -"0, c #B2BFEF", -"a, c #DFE4F8", -"b, c #F6F7FC", -"c, c #C4CDF3", -"d, c #889CE7", -"e, c #768CE3", -"f, c #B0BEEE", -"g, c #D1D7E8", -"h, c #2E4494", -"i, c #223A8E", -"j, c #5B6CAB", -"k, c #D2D7E6", -"l, c #F3F5F8", -"m, c #E5F3FD", -"n, c #BDE3FD", -"o, c #58BAFE", -"p, c #CFD7F5", -"q, c #90A2E7", -"r, c #7A8FE3", -"s, c #8498E5", -"t, c #EFF1FB", -"u, c #90A2E8", -"v, c #8A9DE6", -"w, c #A3B2EB", -"x, c #CED6F4", -"y, c #8F9AC5", -"z, c #5668A9", -"A, c #3C529B", -"B, c #6676B0", -"C, c #E5F4FD", -"D, c #CAE8FD", -"E, c #96D3FD", -"F, c #65C1FE", -"G, c #56BBFE", -"H, c #4AB6FE", -"I, c #D7DDF6", -"J, c #8D9FE7", -"K, c #92A4E8", -"L, c #B0BDEF", -"M, c #C6D0F3", -"N, c #98A8E9", -"O, c #C7D0F3", -"P, c #D3D7E8", -"Q, c #828FBF", -"R, c #4C5FA4", -"S, c #273D90", -"T, c #2B4292", -"U, c #5768A7", -"V, c #A4ADCE", -"W, c #D5D9E7", -"X, c #F5F9FC", -"Y, c #C3E5FD", -"Z, c #95D2FD", -"`, c #74C6FD", -" ' c #8296E5", -".' c #EEF0FB", -"+' c #AAB8EE", -"@' c #E9EBF4", -"#' c #C0C7DF", -"$' c #8D9AC5", -"%' c #364B98", -"&' c #2B4193", -"*' c #6777B0", -"=' c #CCD1E3", -"-' c #F9FAFB", -";' c #EEF6FD", -">' c #A2D7FD", -",' c #81CBFE", -"'' c #F1F3FC", -")' c #ABB9ED", -"!' c #AFBDEE", -"~' c #DAE0F7", -"{' c #F8F8FD", -"]' c #B3BFEF", -"^' c #8398E6", -"/' c #798FE4", -"(' c #7A90E4", -"_' c #97A8EA", -":' c #BDC8F1", -"<' c #DEE4F8", -"[' c #F6F7FA", -"}' c #CAD0E4", -"|' c #7F8CBE", -"1' c #2B4294", -"2' c #263C8F", -"3' c #3A4F9B", -"4' c #5E6FAD", -"5' c #A1ABCE", -"6' c #E1F1FD", -"7' c #BAE1FD", -"8' c #89CDFD", -"9' c #4EB5FD", -"0' c #D8DFF7", -"a' c #D0D7F5", -"b' c #98A9EA", -"c' c #8397E6", -"d' c #96A8EA", -"e' c #B7C4F0", -"f' c #F0F2FB", -"g' c #E6E9F2", -"h' c #C3C9E0", -"i' c #8E9AC5", -"j' c #384D99", -"k' c #6C7BB4", -"l' c #9EA8CD", -"m' c #A4D9FD", -"n' c #75C5FD", -"o' c #5CBDFE", -"p' c #8DD0FE", -"q' c #7A91E3", -"r' c #95A7E9", -"s' c #B0BCEF", -"t' c #EBEEFA", -"u' c #B3C0EF", -"v' c #8EA0E8", -"w' c #7D92E5", -"x' c #92A5E9", -"y' c #B4C1F0", -"z' c #C5CBE1", -"A' c #5164A7", -"B' c #253D8F", -"C' c #273F91", -"D' c #374C99", -"E' c #9DA7CD", -"F' c #D4D8E9", -"G' c #EEF1F6", -"H' c #A8DBFC", -"I' c #77C6FD", -"J' c #46B3FD", -"K' c #47B3FD", -"L' c #88CEFE", -"M' c #B9E2FE", -"N' c #A5B4EC", -"O' c #DBE0F7", -"P' c #EEF1FB", -"Q' c #AEBCEE", -"R' c #8196E6", -"S' c #B5C2F0", -"T' c #DAE1F7", -"U' c #C8CDE2", -"V' c #334996", -"W' c #6878B1", -"X' c #9CA6CC", -"Y' c #CBD1E3", -"Z' c #EDEFF6", -"`' c #B9E2FD", -" ) c #57BAFE", -".) c #79C8FE", -"+) c #D6EEFE", -"@) c #D8DEF6", -"#) c #9BABEA", -"$) c #B5C1EF", -"%) c #93A4E9", -"&) c #C2C8DF", -"*) c #3C519B", -"=) c #99A4CA", -"-) c #EEF7FD", -";) c #A1D8FD", -">) c #61BDFD", -",) c #9FD8FE", -"') c #C9E9FE", -")) c #F2FAFE", -"!) c #D9E0F7", -"~) c #9BACEA", -"{) c #7D92E4", -"]) c #B4C0EF", -"^) c #E2E6F9", -"/) c #E5E8F9", -"() c #E6E8F2", -"_) c #CBD0E4", -":) c #8B97C3", -"<) c #7383B7", -"[) c #9FA9CD", -"}) c #CBD0E3", -"|) c #EEEFF6", -"1) c #C0E4FD", -"2) c #6CC2FD", -"3) c #51B7FD", -"4) c #A7B5EC", -"5) c #7B90E4", -"6) c #B2BEEF", -"7) c #D4DAF6", -"8) c #D4DBF5", -"9) c #BDC7F1", -"0) c #C0CAF2", -"a) c #DCE2F6", -"b) c #ECEFFA", -"c) c #8391BF", -"d) c #ABB4D4", -"e) c #E3F2FD", -"f) c #94D2FD", -"g) c #CBEAFE", -"h) c #BEC9F1", -"i) c #99AAE9", -"j) c #8195E5", -"k) c #758BE3", -"l) c #758CE3", -"m) c #8096E5", -"n) c #B5C1F0", -"o) c #7D93E5", -"p) c #BAC6F0", -"q) c #9CACEA", -"r) c #879BE6", -"s) c #AFBCED", -"t) c #EFF1FA", -"u) c #F1F3F7", -"v) c #F4F9FD", -"w) c #BBE1FD", -"x) c #A2D9FE", -"y) c #F5F7FC", -"z) c #D8DFF6", -"A) c #BCC7F1", -"B) c #8FA2E8", -"C) c #9DAEEB", -"D) c #D3DAF6", -"E) c #7990E4", -"F) c #8297E6", -"G) c #92A4E9", -"H) c #D4DAF5", -"I) c #BAC6F1", -"J) c #99AAEA", -"K) c #758CE2", -"L) c #7D92E3", -"M) c #90A2E6", -"N) c #B1BDEE", -"O) c #DAE0F6", -"P) c #C8E8FD", -"Q) c #91D1FD", -"R) c #E6EAF9", -"S) c #BFCAF1", -"T) c #BBC6F1", -"U) c #7A91E4", -"V) c #F4F5FC", -"W) c #97A9EA", -"X) c #7E93E5", -"Y) c #778DE2", -"Z) c #788DE2", -"`) c #7B8FE2", -" ! c #94A4E8", -".! c #BEC8F0", -"+! c #DEE3F7", -"@! c #F3F9FD", -"#! c #B9E1FD", -"$! c #8FD0FD", -"%! c #A3D9FE", -"&! c #DFE5F8", -"*! c #DCE2F7", -"=! c #B5C2EF", -"-! c #DEE3F8", -";! c #BAC5F1", -">! c #788EE2", -",! c #758BE2", -"'! c #8B9DE6", -")! c #B3BFEE", -"!! c #D6DCF5", -"~! c #E4F3FD", -"{! c #D0EBFE", -"]! c #D9DFF6", -"^! c #768EE4", -"/! c #B1BEEF", -"(! c #DCE1F7", -"_! c #B7C2F0", -":! c #788DE1", -"~ c #CCD4F3", -",~ c #E5E9F8", -"'~ c #BEE3FD", -")~ c #60BEFD", -"!~ c #71C4FD", -"~~ c #C5E6FD", -"{~ c #F8FCFD", -"]~ c #A1ABCF", -"^~ c #5567A9", -"/~ c #3D529D", -"(~ c #586BAB", -"_~ c #D1D6E8", -":~ c #A7B6ED", -"<~ c #DBE2F7", -"[~ c #E1E6F8", -"}~ c #BBC6F0", -"|~ c #7B90E3", -"1~ c #E9EDF9", -"2~ c #CEEAFD", -"3~ c #BFE4FD", -"4~ c #B2DFFD", -"5~ c #D1EBFD", -"6~ c #E8F5FD", -"7~ c #D3D7E7", -"8~ c #8F9BC5", -"9~ c #596BAA", -"0~ c #384D9A", -"a~ c #2C4294", -"b~ c #596AAA", -"c~ c #C1C8DF", -"d~ c #F3F5F9", -"e~ c #AEBCEF", -"f~ c #91A3E9", -"g~ c #D9E0F6", -"h~ c #BBC7F0", -"i~ c #E4E8F8", -"j~ c #E6F4FD", -"k~ c #F0F8FD", -"l~ c #D0D5E6", -"m~ c #A2ACCF", -"n~ c #5A6CAB", -"o~ c #2D4393", -"p~ c #364B99", -"q~ c #5769AA", -"r~ c #909CC6", -"s~ c #C2CCF3", -"t~ c #95A6EA", -"u~ c #DCE1F8", -"v~ c #E2E7F8", -"w~ c #BBC7F1", -"x~ c #9AACEA", -"y~ c #8298E6", -"z~ c #92A3E7", -"A~ c #CAD3F3", -"B~ c #F9F9FB", -"C~ c #EBECF3", -"D~ c #2A4092", -"E~ c #314796", -"F~ c #8C99C4", -"G~ c #BFC9F2", -"H~ c #9AABEA", -"I~ c #ADBBED", -"J~ c #CFD7F4", -"K~ c #F6F7FB", -"L~ c #7888BA", -"M~ c #22398F", -"N~ c #5769A9", -"O~ c #8C98C4", -"P~ c #C5CAE1", -"Q~ c #EDF0FA", -"R~ c #92A3E8", -"S~ c #ADBAEE", -"T~ c #9FAEEB", -"U~ c #A7B6EC", -"V~ c #ECEEF4", -"W~ c #6B7CB4", -"X~ c #6979B3", -"Y~ c #ACB4D4", -"Z~ c #F2F4F9", -"`~ c #BCC8F1", -" { c #899CE7", -".{ c #8599E6", -"+{ c #8295E5", -"@{ c #D1D9F4", -"#{ c #EFF1F6", -"${ c #D6DBE9", -"%{ c #7585B8", -"&{ c #2C4494", -"*{ c #2D4394", -"={ c #7584B8", -"-{ c #D6DAEA", -";{ c #F4F5FA", -">{ c #93A4E8", -",{ c #A9B7EC", -"'{ c #C8D1F2", -"){ c #F4F6FB", -"!{ c #F8F9FA", -"~{ c #8A97C2", -"{{ c #41569E", -"]{ c #2D4494", -"^{ c #5F70AD", -"/{ c #ABB3D4", -"({ c #FAFBFB", -"_{ c #F1F2F6", -":{ c #B6BED9", -"<{ c #7F8EBD", -"[{ c #4D61A4", -"}{ c #20388E", -"|{ c #394F9A", -"1{ c #7483B8", -"2{ c #F2F3F9", -"3{ c #E7EAF8", -"4{ c #F4F5FB", -"5{ c #ECEEF5", -"6{ c #7484B8", -"7{ c #3A4F9A", -"8{ c #294091", -"9{ c #1F388D", -"0{ c #6070AE", -"a{ c #B0B8D7", -"b{ c #EAECF4", -"c{ c #E8EBF8", -"d{ c #B1B9D6", -"e{ c #4A5DA2", -"f{ c #A8B2D3", -"g{ c #F1F3F9", -"h{ c #798EE3", -"i{ c #C6CCE1", -"j{ c #6E7DB4", -"k{ c #394E9A", -"l{ c #374D9A", -"m{ c #B5BDDA", -"n{ c #E9ECF4", -"o{ c #B8C4F0", -"p{ c #798EE2", -"q{ c #7E93E3", -"r{ c #D0D7F4", -"s{ c #E1E3EF", -"t{ c #B2B9D7", -"u{ c #475AA1", -"v{ c #40549E", -"w{ c #7382B8", -"x{ c #A7B0D2", -"y{ c #F0F2F9", -"z{ c #9CADEA", -"A{ c #768BE2", -"B{ c #778CE2", -"C{ c #8295E4", -"D{ c #ADBAED", -"E{ c #C9D1F3", -"F{ c #BFC6DD", -"G{ c #6C7BB3", -"H{ c #3F539D", -"I{ c #1F378D", -"J{ c #394E9B", -"K{ c #6878B3", -"L{ c #B7BFDB", -"M{ c #F7F7FB", -"N{ c #F3F5FB", -"O{ c #8497E4", -"P{ c #7A90E2", -"Q{ c #8EA0E6", -"R{ c #CED5F4", -"S{ c #42579F", -"T{ c #42569F", -"U{ c #7281B7", -"V{ c #A6B0D2", -"W{ c #DEE2EE", -"X{ c #F1F3F8", -"Y{ c #F1F3FA", -"Z{ c #E1E5F7", -"`{ c #B5C1EE", -" ] c #9FAEEA", -".] c #96A6E8", -"+] c #8EA0E7", -"@] c #98A9E8", -"#] c #B2BEEE", -"$] c #CCD3F3", -"%] c #EEEFF5", -"&] c #B8BFDB", -"*] c #6A7AB3", -"=] c #253C91", -"-] c #6E7DB5", -";] c #B9C1DB", -">] c #C4CEF1", -",] c #B6C2EE", -"'] c #D4DAF4", -")] c #DDE1EE", -"!] c #3E539D", -"~] c #7281B6", -"{] c #ACB5D3", -"]] c #EDEEF4", -"^] c #F2F4FB", -"/] c #DDE2F7", -"(] c #EDEFF9", -"_] c #EDEFF5", -":] c #B3BCD8", -"<] c #6A7BB3", -"[] c #465AA0", -"}] c #293F91", -"|] c #3E529B", -"1] c #CFD4E6", -"2] c #DEE1EE", -"3] c #BDC5DD", -"4] c #233B8E", -"5] c #929DC7", -"6] c #C6CBE1", -"7] c #EDEEF5", -"8] c #B1B8D5", -"9] c #485CA1", -"0] c #20378D", -"a] c #5C6CAB", -"b] c #96A0C8", -"c] c #D4D8E8", -"d] c #C3C9DF", -"e] c #7A89BA", -"f] c #22398D", -"g] c #253C8E", -"h] c #2E4594", -"i] c #5C6DAB", -"j] c #939EC8", -"k] c #C9CEE3", -"l] c #AEB6D5", -"m] c #6F7EB5", -"n] c #485BA0", -"o] c #273D8F", -"p] c #233A8D", -"q] c #C7CDE1", -"r] c #E1E5EF", -"s] c #7685B9", -"t] c #354B97", -"u] c #2B4393", -"v] c #6878B2", -"w] c #B4BCD9", -"x] c #AAB3D3", -"y] c #3F539C", -"z] c #6172AE", -"A] c #97A3CA", -"B] c #374C97", -"C] c #1F388C", -"D] c #AAB4D3", -"E] c #F4F4F8", -"F] c #E2E5EF", -"G] c #ABB4D3", -"H] c #7B89BB", -"I] c #5668A8", -"J] c #42569D", -"K] c #43579E", -"L] c #6C7CB4", -"M] c #9AA4CA", -"N] c #D2D6E7", -"O] c #EBEDF3", -"P] c #CED4E5", -"Q] c #8F9CC5", -"R] c #6F7EB4", -"S] c #717FB5", -"T] c #8D99C3", -"U] c #BFC5DD", -"V] c #DFE1ED", -"W] c #F5F5F9", -"X] c #E6E8F1", -"Y] c #C5CAE0", -"Z] c #EFEFF5", -"`] c #F9FBFB", -" ", -" . + . + + + ", -" @ . # # # # # # # # + @ ", -" + # # # # # + # # + # # # @ @ + ", -" + + @ # # # # # + + + + + + + + # # # @ + ", -" + . # # @ # + + + + + + + + + + + + + # # @ # + + ", -" + @ # + + # # + + + + + + @ @ + + + + + + + + # @ @ + ", -" @ # # @ + + + + + + + + + + $ % % & * $ + + + + + + # # # . ", -" @ # # + + + + + + + + @ + + = % - ; > , ' + @ + + + + + + # # + ", -" . @ + + + + + + @ @ + + # ) ! ~ { ] ^ / ( _ : < + + + + + # # # @ + ", -" + @ # + + + + + @ + + + [ } | 1 2 3 4 5 6 7 8 9 0 $ + + + + + + # @ @ + ", -" . @ # + + + + @ + + + @ + ) 0 a b c d e f g h i j k l = + + @ + + + # # @ + ", -" + # # + + + + + + + @ + } } m n o p g q r s s t u 7 v w ' @ @ + @ + + + + @ @ + ", -" + # @ + + + @ + + @ + + @ x y a z A B C D E F F G H I J K x + @ + @ + + + + @ + # @ + ", -" + # # + + + # @ @ @ + @ @ L M N O P Q D E R R R F R S T U V x @ + + + @ + + + + + + @ @ @ + ", -" + # @ + + + @ @ @ @ + @ @ x W X Y Z ` .F R R R F D ..+.@.#.$.L @ @ + + + + + + + + + # + @ # @ ", -" + # # + + + + @ @ + + @ } %.&.*.=.-.;.D E >.s s s ,...'.).!.~.W } @ @ @ + @ + + + + + + + # # + # . ", -" + # @ + + + @ @ @ @ + @ @ L W #.{.].5 ^.F R s R >./.(._.:.<.[.W L @ @ @ @ @ + @ + + + + + + + + + # # . ", -" + @ # + + # + @ + @ + @ } L $.}.|.1.2.D E R s R >.3.4.5.6.7.8.9.} @ @ @ @ @ @ @ + + @ + + @ + + + + + # # + ", -" + # # + + + @ + + + + @ @ %.W }.0.a.5 S F R s R b.>.(._.c.d.e.f.} @ @ @ @ @ @ @ @ @ @ + + @ + @ + + + + + + # @ ", -" + # @ + + + + + @ @ + @ } L g.~ h.a.4 R E R s R >.b.i.j.k.l.m.n.o.@ @ @ @ @ @ %.p.q.! q.W L + + + + + + + + + # # @ ", -" + # + + + + @ + @ @ + @ @ o.r.V 0.s.5 R R R R R b.>.t.u.v.w.x.y.z.@ @ @ @ @ @ @ p.A.B.C.D.M E.@ @ + @ + + + + + + # # @ ", -" . @ # + + + + + @ @ + @ } L F.G.h.Z 4 S E R s R >.b.H.I.J.K.L.y.M.N.@ @ @ @ @ O.P.Q.R.o S.T.U.X B.r.@ + @ + @ + + + + # # @ ", -" . # # + + + + + @ + @ @ L r.V.W.X.5 D F R R R b.>.Y.Z.`. +.+++N.N.N.@ @ @ @ @ P.@+#+X.$+,.$+%+Y &+*+@ @ + + + + + + + + # # @ ", -" + @ + # + + + + @ + @ } x =+X |.3 2.^.E R s R >.>.H._.-+;+>+y.,+N.N.N.N.N.@ O.q.G.j '+4 ..E e )+!+~+{+]+r.@ + @ + + + + + + # # @ ", -" @ @ # + + + @ @ @ + @ [ L f.^+/+X.(+D F R s R b.b.Y._._+:+<+[+N.N.N.N.N.N.N.N.}+|+1+2+g 3+E R 4+t 5+6+~+7+*+= @ + + + + + + + + # # @ ", -" + # @ + + + @ + + + + @ x q.8+=.3 ;.f E R s R >.>.9+0+a+:+b+y.,+N.N.N.N.N.N.c+d+e+f+g+h+i+j+s R R k+5 l+!+~+7+m+n+@ @ @ + + + + + + # # @ ", -" + @ # # + + + + @ @ @ @ } o+p+q+1.r+D F >.s R b.b.t.s+t+u+<+y.N.N.N.N.N.N.N.z.v+m.w+x+y+z+Y.b.R s s R 4+A+5+B+~+7+*+p.@ + + # + + + + + # # @ ", -" + @ @ # + + + + + @ + @ x W G.q+C+r+f E R s R >.>.9+0+k.D+>+[+,+N.N.N.N.N.N.E+d+F+G+H+I+i+Y.Y.b.b.>.s R R ^.J+K+c ~+L+M+[ @ + @ + + + + + . + @ + ", -" + @ @ # + + + + + + + @ + 0 N+O+P+;.Q+E s s R b.t.R+S+H+l.T+U+N.N.N.N.N.N.N.M.V+>+W+X+Y+Y.Y.b.b.b.b.b.R s >.R 4+Z+5+`+0.{+ @r.@ + + + + + + + + # @ . ", -" + @ # + + + + + @ + + @ @ } V U .@(+f F F s R +@+@H.@@k.#@>+[+,+N.N.N.N.N.N.,+d+$@%@&@*@i+b.b.b.b.b.Y.>.>.>.s R R ^.Z+K+=@0.L+N+@ @ + @ + + + + + + # @ + ", -" + @ # @ + + + + + + @ @ + @ } o.-@;@K+>@D s s R b.b.>.Z.,@'@)@n.N.N.N.N.N.N.N.,+!@~@W+{@Y+]@Y.b.b.b.b.Y.b.b.b.b.R s >.R 4+5 5+!+^@{+F.W @ + @ + + + + + + # @ + ", -" . # # + + + + + + @ @ @ + @ @ L n+U K+5 /@E s R b.b.>.(@_@7.~@n.:@N.N.N.N.N.N.M.d+~@<@[@Y+(.b.Y.b.b.b.Y.>.t.(.b.>.+@+@s R R ^.e l+a.}@|@1@@ @ + @ @ @ @ + + # + # . ", -" + @ + + + + + + + + + @ + @ @ @ L p.2@)+5 (@E R b.b.b.>.(@3@:+4@c+N.N.N.N.N.N.,+V+$@5@6@Y+7@z+b.b.b.Y.Y.9+0+8@9@0@2+Y+a@S R s R 4+5 +.'+W.b@&.W @ + @ @ + + + + + # @ + ", -" . # # # + + + + + + + + + @ @ @ @ L x <.Z 5+3+s b.b.b.b.>./.c@d@e@y.f@N.N.N.N.z.g@h@i@j@Y+7@b.Y.b.b.b.>.z+I.9@7.e+k@l@{@Y+i+b.s R R k+t m@I o X n@@ @ + @ + + + + + + @ @ + ", -" + # # + + + + @ + @ @ + + @ @ @ @ @ [ } #.}@T o@7@b.b.b.b.Y.>.p@t+%@q@r@z.N.N.E+v+q@W+&@Y+(.z+Y.b.b.Y.>.9+0+s@t@u@}+v@w@x@y@z@A@S s >.R 4+5 B@.@q+G.*+% @ + @ + + + + # # # @ ", -" + # # + + + + + + + + + @ @ @ @ @ @ @ @ @ C@G.D@E@F@b.b.b.b.b.b.t.R+G@H@I@,+f@N.g@J@K@L@*@b.b.b.b.b.b.>.(@z@6@;+M@n.M.c+<+N@O@X+Y+(.+@s R R S t P@6+Q@*.! @ @ @ + + + + + + # # @ + ", -" + # @ + + + @ + + + + @ } @ } } @ @ @ @ @ @ f.C@R@@.S@T@(.b.b.b.b.>.U@Y+X+%@V@v@!@W@X@Y@*@i+>.Y.b.b.Y.>.9+Z@`@ #~@.#M.N.N.+#v@@###0@i.>.R s R R $#Z+)+%#&#*#@ @ @ + + + + + + + @ # # + ", -" + # # + + + + + @ @ + @ @ } } L L =#@ @ @ @ @ @ L -#;#>#@@H.b.b.b.b.b.b.Y.Y.,#'#@#h@f+)#Y+>.Y.b.b.b.b.>.(@Z@y@!#!@[+N.N.N.N.N.M.T+;#~#{#/.Y.>.R R R R ..]#^#/#L } @ @ + + + + + + + + # # . ", -" + # @ + + + + + @ @ + @ L (#_#:#<#[#}#|#1#= @ @ @ @ }+-#2#3#4#5#(.b.b.b.b.>.U@Z._+6#7#_+0+A@>.Y.b.b.b.>.A@_.`@!#~@.#M.N.N.N.N.N.N.8#;#~#9#(@b.b.R s R E .0#a#*.L [ @ @ + @ @ + + + + + + # # . ", -" + # # + + + + + @ @ + @ [ b#c#d#e#f#g#h#i#j#k#@ @ @ N.N.,+v@l#m#I.H.b.b.b.b.b.b.>./.(@(@z+Y.Y.b.b.b.b.Y.>.n#t+o#!@.#N.N.N.N.N.N.N.N.r@p#q#9#(@b.b.b.R R E .r#s#t#} } @ @ @ + @ + + + + + + # # # . ", -" + # @ + + # @ @ + @ + @ L u#v#w#x#y#z#A#B#C#D#E#F#G#f@N.N.z.H#I#2#J#K#5#L#b.b.b.b.Y.>.>.z+Y.Y.b.b.b.b.>.A@z@M#u+~@[+M.N.N.N.N.N.N.y.N#O#P#0@i.>.b.b.b.Y.>.q t Q#R#S#@ @ @ @ @ @ + + # + @ + + + + @ # . ", -" + # # + + + + + + + + @ = k#v#T#U#V#W#X#Y#Z#`# $.$+$@$G#N.N.N.N..#-##$k.$$F@t.b.b.b.b.b.b.b.b.b.b.b.b.b.3.0+%$&$*$=$N.N.N.N.N.N.f@E+M@-$;$X+0+>$b.b.b.b.Y.z+r B G+,$o+' '$)$!$)$~${$@ + + + @ + + + + # @ @ ", -" + # @ + + + @ @ + @ + @ @ u#]$^$f#/$($_$Y#Y#:$<$[$}$|$+$1$N.N.N.N.M.d+N#2$3$4$5$7@b.b.b.b.b.b.b.b.b.b.>.a@@@6$7$u@n.M.N.N.N.N.N.N.+#N#O#;$8$@@H.7@b.b.b.Y.9$0$_.a$b$c$d$e$f$g$h$i$j$k$$ @ + + + + @ + + + + # @ ", -" + # # + + + + @ + + + @ n+l$v#m$n$o$($p$q$r$r$s$t$u$v$w$|$x$y$E+N.N.N.N.[+z$w.6#A$T@7@b.b.b.b.b.b.b.b.b.(.u.9@B$-#+#f@N.N.N.N.N.N.+#r@O#P#0@0+4.]@b.b.b.Y.U@z+7@H+C$D$E$F$G$H$I$J$K$L$M$N$O$@ + @ @ + + + + + # # @ ", -" . # @ + + + @ @ @ @ + @ @ P$Q$^$U#R$($S$q$q$q$q$T$T$U$V$W$X$Y$x$Z$N.N.N.N.:@g@m.D+3$A$5$t.b.b.b.b.b.b.>.>$@@`$;+b+d+M.N.N.N.N.N.N.,+z$ %P#{@@@9+L#b.b.b.Y..%+%@%t+'@#%$%%%&%*%=%-%;%>%,%'%)%!%@ @ + @ + @ + + + + # # @ ", -" . # # + + + + @ + @ + @ ~%{%]%T#^%/%(%p$q$r$r$q$T$T$T$T$t$u$v$_%Y$x$:%<%N.N.N.N.n.[%D+6#2+F@L#b.b.b.Y.b.i+Z.,@w+m.+#z.N.N.N.N.N.N.M.g@}%d@t+0+A@]@b.b.b.z+U@b.R+%$|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%@ + @ + + + + + + + @ + ", -" . @ # + + + @ @ @ @ + @ @ g%Q$h%i%/$j%S$q$q$r$q$T$T$T$T$T$T$U$k%[$l%Y$+$m%N.N.N.N.,+n.m. +3$$$5#Y.Y.b.>.t.@@n%;+L.}+M.N.N.N.N.N.N.N.U+o%p%{@I.A@L#b.b.b.Y..%+%Y+_+X@p+q%r%s%t%u%v%w%w%x%0%y%z%=%A%d%B%@ @ + # + + + + + + @ @ . ", -" + # # + + + + @ @ @ + @ ~%C%]%T#D%o$E%p$q$F%q$q$G%G%G%G%T$T$T$T$t$H%v$I%J%x$K%L%N.N.N.N.g@[%M%k.K#T@(.Y.A@z@6$w+>++#M.N.N.N.N.N.N.N.N.!@~@N%p@A@]@b.b.b.z+(@]@9+O%p%P%Q%R%S%T%9%U%V%W%X%Y%Y%Y%a%Z%`% &d%.&+&@ + + + + + + + + # @ + ", -" + # + + + + @ @ @ @ + @ @ (#Q$w#@&#&$&S$q$q$r$%&T$&&*&*&=&T$T$T$T$T$U$-&;&>&Y$+$,&N.N.N.N.,+[+N#O#'&)&9#>.5.c.:+I#}+z.N.N.N.N.N.N.N.N.N.!&w@~&3.b.b.b.b.Y..%+%{&8$W+]&^&/&(&_&:&v%0%Y%<&Y%X%Y%Y%Y%[&}&|&S%3%1&@ @ + @ + + + + + + # # + ", -" # # # + + + + @ @ + @ ~%(#v#2&3&4&E%p$q$q$q$_$5&6&7&8&9&;&6&5&t$T$T$0&t$H%a&I%Y$b&,&L%N.N.N.N.d+-#c&d&-+Y@;$!#e&+#M.N.N.N.N.N.N.N.N.N.N.T+f&s@i+3.>.>.z+.%]@5#%$w+g&h&i&j&k&l&m&n&<&[&[&o&Y%X%X%Y%Y%a%p&q& &r&s&!$@ + @ + @ @ + + + # # + ", -" @ # # # + + + + @ + @ @ C%Q$2&t&u&j%v&q$q$r$%&w&x&y&z&|$A&B&y&C&w&0&T$T$T$w&k%D&E&J%+$K%N.N.N.N.M..#!@-#>+$@[%8#y.f@N.N.N.N.N.N.N.N.N.N.N.d+N#;$F&i+(@/.9$G&T@{@H&o%I&J&K&L&M&m&0%<&o&[&[&[&[&Y%X%Y%Y%Y%[&N&|&O&P&s&@ @ + @ @ + + + + + # + ", -" @ # + + + + + @ + + Q&g%v#w#3&u&E%%&p$q$q$q$G%R&S&z&T&U&V&W&X&Y&x&5&t$T$T$0&Z&H%D&`&J% *.*<%N.N.N.N.M..#n.H#+#M.N.N.N.N.N.N.N.z.:@z.N.N.N..#+*w.N%0@5.j.@*I.9@#*$*%*&*j&**v%m&6%Y%[&[&[&[&[&[&o&Y%X%Y%Y%Y%a%=*-*;*>*,*!$@ + @ + + + + . @ # . ", -" + @ # + + @ + + + + @ '*|#m$t&)*j%%&q$q$q$q$G%*&5&`&!*~*L%<%F#{*]*9&^*/*0&T$T$T$Z&k%(*E&_* *:%N.N.N.N.N.N.f@z.N.N.N.N.N.N.N.N.z.:*E.* :@N.N.N.,+M@e+<*a+s@6#[*K.*$}*|*1*2*3*4*5*Y%<&[&[&[&[&[&[&[&[&Y%X%Y%Y%Y%[&6*|&7*>*k$@ @ + + + + + + + @ + ", -" + # + + + + + @ + = P$8*9*3&#&E%v&p$q$q$q$=&G%0*a*b*c*d*N.N.y$~*e*f*g*h*k%T$T$T$0&w&H%i*`&j*k*l*f@N.N.N.N.N.N.N.N.N.N.N.z.O.m*n*o*p*q*r*s*t*M.f@y.T+F+p##$c&@#u*v*R%w*x*v%<&y*[&Y%<&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%N&z*O&>*A*B*@ @ + + + + + # @ ", -" + @ # + + + @ + + @ k#C*D*t&E*$&p$q$q$q$q$T$*&&&E&b*F*M.f@N.N.N.N.1$G*H*y&I*J*T$T$T$T$t$k%K*L*M*,&N*N.N.N.N.N.N.N.N.N.N.N.:*O*P*Q*R*S*T*U*V*W*t*N.N.N.f@M.,+,+z.X*Y*Z*6*`*v%0%[&Y%Y%<&[&[&[&[&[&[&[&[&[&[&Y%Y%Y%Y%Y%[&3* =.=+=@=@ + + + + + + # # + ", -" @ @ # + + + @ + %.u#]$#=$=/$E%S$q$q$q$q$=&*&0*%=j*c*K%N.N.N.N.N.N.&=*===_%-=G%G%T$T$T$0&w&k%;=>=,=<%N.N.N.N.N.N.N.N.N.z.E.'=)=Q*!=~={=]=^=/=(=_==$:@N.N.N.N.x f%M$:=<=[=m&0%<&[&<&<&[&[&[&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%}=q&|=1=2=3=@ @ + + + # @ + ", -" @ # # + + + @ [ k#4=5=U#6=$&p$q$q$r$q$G%G%&&%=7=8=f@N.N.N.N.N.N.N.f@9=+$0=a=*&&&T$T$T$T$G%b=c=d=F*e=N.N.N.N.N.N.N.N.N.c+f=g=h=i=j=k=l=k=m=n=o=p=q=E.N.N.N.N.r=s=t=u=6%m&6%[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%Y%[&Z%v=w=+=@={$$ @ + + + @ @ + ", -" @ # @ + + # + + x=y=z=A=B=(%S$q$q$q$q$=&C=D=l%j*8=K%N.N.N.N.N.N.N.N.&=*=E=}$a&G%G%T$T$T$T$G%b=8&T&,=<%N.N.N.N.N.N.N.f@E.F=o*G=T*S*H=I=l=I=k=J=K=L=M=N=O.M.N.N.' O=+=*%P=w%m&[&[&[&[&[&[&[&<&<&o&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%Q=R=;*S=T=U=@ + + @ @ @ @ ", -"+ + # + + + + V=b#W=X=C#`#Y=q$q$F%r$q$G%t$w&Z=`= -f@N.N.N.N.N.N.N.f@<%,=.-+-9&@-J*T$T$T$T$G%0&U$#-.-,&N*N.N.N.N.N.N.f@c+$-%-/=&-*-I=l=l=l=l=l=l=l==---;->-,-f@N.} '-)-!-~-{-o&<&<&[&[&[&[&o&<&<&o&[&[&[&[&[&[&[&[&[&[&Y%X%X%Y%Y%]-^-<='%/-(-_-+ + + + # @ ", -"@ @ # + + + + :-<-[-}-|-1-:$q$q$q$q$=&C=h*E&2-3-K%N.N.N.N.N.N.N.N.y$~*4-0=5-6&5&T$T$T$T$G%*&V$Y&|$F*6-f@N.N.N.N.N.N.E.$-7-8-9-0-a-l=l=l=l=l=l=l=l=b-c-d-e-f-E.M.f@L g-h-i-j-k-7%w%[&[&[&[&[&<&<&[&o&<&<&[&[&[&[&[&[&[&o&Y%X%Y%Y%Y%l-m-n-o-p-B%# + + # # # + ", -"+ # # + + + q-c#r-s-t-Y=q$q$r$r$q$G%Z&k%u-j*v-M.N.N.N.N.N.N.N.w-x-*=y-z-A-B-t$0&T$T$T$G%0&C-a=D-x$d*N.N.N.N.N.N.z.c+F=%-8-&-b-I=l=l=l=l=l=l=l=l=l=I=H=c-E-F-G-H-z.N.[ I-J-K-j-6%n&0%<&[&[&[&[&[&[&<&Y%<&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%X%L-Z%M-N-O-f%P-+ + # # + ", -"@ @ # + + + @ Q-R-S-T-U-q$q$r$q$=&C=I*X$2-V-W-f@N.N.N.N.N.N.N.l*~*4-X-Y-B-Z-0&T$T$T$G%*&R&`- ;.;+;<%N.N.N.N.N.N.O.@;o*/=9-#;a-l=l=l=l=l=l=l=l=l=l=l=l=*-c-$;%;&;E.z.N.[ *;=;-;P=;;>;n&[&[&[&[&[&[&[&<&o&[&[&[&[&[&[&[&[&[&o&Y%X%Y%X%,;L-';);!;~;{;+ + # # + ", -"@ @ + + + q-q-];^;/;(;_;r$q$r$=&w&B-Z=j*:;L%N.N.N.N.N.N.N.w-l**=e*<;[;B-/*0&T$T$T$G%T$};|;1;2;3;N.N.N.N.N.N.z.:*4;r*G=&-5;I=l=l=l=l=l=l=k=I=l=l=l=l=l=I=6;7;8;9;0;H-z.N.L a;b;c;d;0%0%0%<&[&[&[&[&[&[&[&[&[&e;[&[&[&[&[&[&[&o&Y%Y%X%X%X%,;f;g;h;i;+ + # # + ", -"@ # # + + q-=#j;k;l;m;_;r$q$_;C=6&w$j*V-d*w-N.N.N.N.N.N.N.x-~*e*X-n;6&U$0&T$T$T$T$*&0&o;p;x$q;<%N.N.N.N.N.N.O.- r;h=T**-a-l=l=l=l=l=k=k=s;t;I=l=l=l=l=l=u;v;c-w;%;x;p.z.z.x y;R%z;A;M&7%0%[&[&[&[&[&[&[&[&<&<&<&[&[&[&[&[&[&o&Y%Y%X%X%X%B;C;D;%%E;+ + # # + ", -"+ @ # + + + q-F;G;H;Y=I;r$J;u$/%%=j*K;y$z.N.N.N.N.N.N.f@y$*=W&]*n;6&w&0&T$T$T$G%&&H%|;L;M;.*N.N.N.N.N.N.z.c+N;O;P;i=Q;I=l=l=l=l=I={=R;&-S;T;~=*-I=l=l=l=l=I={=7;U;V;W;W ,+M.X;Y;t=Z;`; >M&0%<&[&[&[&[&[&[&<&<&<&[&[&[&[&[&o&Y%X%Y%X%X%W%V%.>+>p-@>+ + # # + ", -"@ @ # + + + + #>$>%>l;Y=&>*>=>->2&;>>>= @ @ @ @ N.N.N.<%,>{*0='>6&w&t$T$T$T$T$*&C=)>1;+$d*<%N.N.N.N.N.N.O.- !>d-~>{>6;l=l=l=l=I=t;]>^>/>V;(>_>c-t;I=l=l=l=l=H={=c-w;e-:>E.f@<>[>}>h;|>`;N&7%0%[&[&[&[&[&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%X%X%x%]-1>(&2>g-+ # # @ + ", -"+ . # + + + + 3>:-4>5>C#6>7>8>9>4='*@ @ @ @ @ @ N.N.&=,=4-]*0>6&U$0&T$T$T$G%*&B-A-a>b>Z$f@N.N.N.N.N.z.t*G-c>Q*d>Q;I=l=l=l=l=I=a-e>f>(>g>G-h>i>j>k>l>l=l=l=l=l=I=l>m>w;n>o>,-o.o.< [>p>q>r>s>Y%0%<&[&[&o&<&[&5*[&[&[&[&o&Y%X%Y%Y%0%W%Y%]-t>u>v>w>x>+ # # # ", -" . # # + + + $ %.y>z>E#A>B>;>P$C>[ @ @ @ @ @ @ @ w-*=D>E>8&B-/*0&T$T$T$T$*&F>G>H>+$y$N*N.N.N.N.N.N.c+I>J>K>L>M>H=l=l=l=l=l=k=0-N>O>P>I>x > :>n>Q>R>k=l=l=l=l=l=l=H=S*S>T>U>O.N.f@} X;2>V>W>a%7%X>[&[&<&Y%e;5*[&[&[&[&Y%X%X%Y%Y%0%6%[&Y>Z>`> ,.,' + # # + ", -" @ # # + + + + +,@,#,_#$,>>Q&@ @ @ @ @ @ @ @ '*%,4-z-&,B-R&0&T$T$T$G%=&B-9&*,+$=,f@N.N.N.N.N.z.O.N;-,Q*;,Q;l=l=l=l=l=k=6;]=>,,,',),,+N.:@E.!,~,j>n={,l=l=l=l=I=k=l=],^,/,4;f@N.N.%.(,_,:,`%}&M&0%e;[&<&e;[&[&[&<&Y%X%Y%Y%Y%<,Y%[&[,c;},|,1,+ + + @ @ . ", -" + @ # + + + + @ [ %.L [ [ @ @ @ @ @ @ @ @ @ 2,3,4,c=5,t$0&T$T$T$T$=&6,9&p;+$<%M.N.N.N.N.N.N.:*7,',d-8,M>l=l=l=l=l=l=k=l>9,0,a,b,:@N.N.N.N.W $-c,_>d,I=l=l=l=l=l=k=e,;,f,r*M.N.N.z.' O=g,-;`;h,i,Y%[&[&[&[&[&[&Y%X%Y%Y%Y%Y%x%Y%3*j,t=k,l,$ + + + @ + ", -" + # # + + + + + + @ + + @ @ @ @ @ @ @ @ '*m,n,f*o;B-R&0&T$T$0&G%*&o,y&*,+$1$f@N.N.N.N.N.z.O.4;p,Q*q,Q;r,l=l=l=l=k=H=s,R*T>g=t,:@N.N.N.N.N.,+,-g=0,u,s;k=l=l=l=l=k=s;v,w,x,:*z.N.N.z.%.s=f$y,z,z%a%0%e;[&[&Y%Y%X%Y%Y%0%w%w%]-A,B,},j$e%{$@ + + # @ + ", -" + # + + + + + + + + + + @ @ @ @ @ @ @ C,D,E,F,G,0&0&T$T$T$t$H,C=|;1;2;<%f@N.N.N.N.N.N.:*O*I,L=J,j=k=l=l=l=l=l=k=],K,L,o>E.z.N.N.N.N.N.N.N.z.f-M,N,e,k=l=l=l=l=l=l=R>^>O,* z.N.N.N.N.z.I-P,Q,R,p&v%e;[&[&Y%W%X>S,Y%W%8%9%T,U,V,W,B*+ + + . + # @ + ", -" + @ # + + + + @ + + @ @ + @ @ @ @ X,P$Y,Z,`,5,R&0&T$T$T$U$5,D&#-L;+$1$M.N.N.N.N.N.f@O.F=V*Q*K, 'H=l=l=l=l=k=l=k>!=T>r*.':@N.N.N.N.N.N.N.,-.'7-+'8,t;I=l=l=l=l=I=k=J,/=c>:@N.N.N.N.N.N.} @'#'$'q&%'<&0%Y%X%0%Y%Y%0%Y%&'t>*'},='@=-'+ + + + + # + ", -" + @ # @ + + + + + @ + @ + @ @ @ ;'|#>'u&*>0&0&T$T$T$T$-&D&,'Y$+$y$f@N.N.N.N.N.N.,+''h>)'8,l>k=l=l=l=l=l=r,],S;!'~'{':@N.N.N.N.N.N.N.M.m*~']'u,^'u;l=l=l=l=l=/'('_':'<'N.N.N.N.N.N.N.N.} ['}'|'b%1'0%2'Y%Y%Y%<,0%M&3'4'5' ,x>+ + + + + + # # + ", -" + # + . + + + + @ + + @ + @ @ 6'7'8'<$9'q$T$T$T$G%&&B->&|$ *m%N*N.N.N.N.N.N.M.O*c>0,9,S*6;l=l=l=l=I=k=s,N>T>0'$-:@f@N.N.N.N.N.N.,-.'a'L,b'^'v;l=l=l=l=I=t;c'd'e'<'f'N.N.N.N.N.N.N.N.f@o.g'h'i'r>z%m&w%Y%<,0%a%j'k'l'='@=~$@ + @ + + + # # ", -" + @ # # + + + + @ @ @ + @ @ 4=m'n'X#X#r$q$T$T$G%C=o'p'4-K%N.N.N.N.N.N.N.N.=$N;T>K,0-k=l=l=l=l=l=q'v;r's'I,{':@N.N.N.N.N.N.z.,+t'P*u'v']>H=l=l=l=l=l=('w'x'y'r*r.f@N.N.N.N.N.N.N.N.N.N.L ['z'.=A'4*Y%B'<,C'D',%E'F'G'+ @ @ + + + + # # + ", -" @ # # # + + + + + + + + @ |#H'I'J'K'q$q$q$T$G%*&C&L'M'+;f@N.N.N.N.N.N.z.> <'N'5;a-I=l=l=l=I=k=s,K,T>O'$-:@f@N.N.N.N.N.N.E.P'J>Q'Q>S*v;l=l=l=l=l=t;R'd'S'T'P',+N.N.N.N.N.N.N.N.N.N.N.@ %.w>U'y,R,}&8%S,V'W'X'Y'Z'_-@ + @ @ + + + # @ ", -" + @ # # + + + @ @ + @ <-`'f#S$p$q$q$r$q$G%*& ).).$+)K%G#N.N.N.N.N.z.''@)#)e,k=l=l=l=l=a-J=R*L,g={',+N.N.N.N.N.N.z.x t'r*$)u,]=H=l=l=l=l=l=('{,%)y'O;> z.N.N.N.N.N.N.z.O.,-,-O.M.@ @ $ r=&):,~-Z%*),%=)P,E$+ @ + + + + + + # # + ", -" . # # + + + + @ @ + -);>;)>)<$Y#Y#F%q$q$G%w&o,5-,)')))w-N.N.N.N.z.O*!)~)e,k=l=l=I=k=]>K,,,o>.':@f@N.N.N.N.N.N.E.$-c>G=>,e>{)l=l=l=l=l=t;#;>,])~'f=:*N.N.N.N.N.N.f@O.t'^)/)t'b,q-@ @ } ()_):)k&<)[)})|)~$+ + + + + + + # # . ", -" . # # + + + @ + + ~%>>1)->2)3)S$q$q$r$q$F%*&o,5-D-V&,&M.N.N.N.f@9.P>4)S*5)k=k=a-5;R*6)7),-,+N.N.N.N.N.N.z.O.t'',$)K,s,('l=l=l=l=I=('S*N>])8)),z.N.N.N.N.N.N.M.),f-o*9)0)q*a)b)) @ @ < f%p>c)d)P,(,+ + + + + + + + @ @ . ", -" # # + + + + + + [ = e)D,f)>)<$Y#Y#r$r$q$F%Z&k%&,,)g)x-w-N.N.N.o.b)h)i)j)k)l)m)%)n)o>t,M.N.N.N.N.N.N.N.=$P'',G=r'e>{=l=l=l=l=l=t;o)R*])h>),x N.N.N.N.N.N.z.p.!)p)q)r)d,S;s)x,t)o.@ } ' e%E;w>u)~$+ + + + + + + + @ + ", -" + # + + + + + @ + @ v)$,w)x#2)($S$q$q$q$q$F%*&@-5-x)V&.*f@N.N.f@y)z)A)E-T*B)C),,D)7,,+N.N.N.N.N.N.z.E.t'D),,S;R;a-l=l=l=l=I=E)F)G)])H)t,z.N.N.N.N.N.N.z.f=a,I)J)R;l)K)L)M)N)O)f=o.@ } $ %.} + @ + + + + + + # # @ ", -" + @ + + + + + + + @ L n+_#P)Q)>)($Y#q$r$r$q$G%Z&Z#5-,)x$N*f@N.N.:@> R)x,S)T)q*N=; :@N.N.N.N.N.N.N.c+P'r*Q'N>]>],H=l=l=l=l=k=U)!=0,h>V):*N.N.N.N.N.N.z.,+!)T>W)X)('k=Y)Z)`) !.!+!) @ @ @ } + + + + + + + + # # @ ", -" + # # + + + + + + @ @ @!m,#!$!2)(%S$Y#q$q$q$F%=&I*5-%!:;.*f@N.N.M.W G-&!*!&;y),+N.N.N.N.N.N.f@E.b)c>=!R*R;{=l=l=l=l=I=I=^'G)O>',$-z.N.N.N.N.N.N.z.t,-!;!_'~=t;k=>!Z)Y),!'!)!!!b,@ @ @ @ + + + + + + + # # @ ", -" + @ # + + + @ + @ + @ L ~%~!P)h#E*3)Y#q$F%r$q$G%T$Z&5- ;{!G#f@N.N.f@:@:*c+,+z.N.N.N.N.N.N.N.:@t,]!P;T*e>a-H=l=l=l=l=t;^!N>/!h>,-,+N.N.N.N.N.N.z.:@(!_!_'U)E)l=>!:!>!Y)3!4!d*N.N.N.N.N.N.N.N.N.N.N.N.N.N.E.$-c>$)Q>s,{)l=l=l=l=I=k=^'5!O>g=m*z.N.N.N.N.N.N.z.t,*!T)_'R>t;k=>!Z)>!>!H=J=^>6!7!) @ @ + @ @ @ + + + # @ @ ", -" . @ # # + + @ + @ @ + @ @ ~%8!9!3&o$$&Y#q$q$q$q$T$*&0!_%M',>N.N.N.N.N.N.N.N.N.N.N.N.N.z.a!!,b!T; 'H=l=l=l=l=l=k=c!d!!'e!x M.N.N.N.N.N.N.z.:@a,T>_'f!k=l=>!>!>!>!g!h!i=i!j!f'$ @ + @ + + + + + # # # ", -" . @ # + + + @ + @ @ + @ L @!k!#!l!m!E%_$Y#q$q$q$*&*&%=n!3-N.N.N.N.N.N.N.N.N.N.N.N.,+o!p!$)b']={)l=l=l=l=k=k=]=G)])e!q!z.N.N.N.N.N.N.z.f'O'T)W)R>k=k=>!Z)>!>!H=r!s!t!u!v!, } + + @ + + + + + # @ + ", -" . # # + + + + + + + + @ @ b#w!x!7>/;$&p$q$q$q$Y#=&y!%!c*N.N.N.N.N.N.N.N.N.N.N.N.,-t'z!T;e>u;l=l=l=l=l=k=s;u,L,%-,+z.N.N.N.N.N.N.z.O.A!z!b'U)t;l=>!>!>!>!B!*-C!D!E!F!) @ @ + + + + + + + # @ + ", -" + # # + + + + @ + @ + @ = v)z>G!f)H!E%%&Y#q$m;I!>&J!k*N.N.} K!f%< [ N.N.N.N.N.P'~'U*5;{=l=l=l=l=l=k=H=*-d-I,q!z.N.N.N.N.N.N.z.),h>T)b'R>E)k=>!Z)>!>!H=L!M!s)N!O!1!L @ + + @ + + + + + # + ", -" + # # + + + @ + + + + @ @ P!Q!1)^%R!3)%&Y#X#X#7>S!T!N.} U!V!!%W!X!L N.N.N.N.Y!x,Z!`!t;l=l=l=l=k=s;{= ~T>o!:@N.N.N.N.N.N.:@b,P>(>J)X)t;l=>!>!>!>!H=*-L>.~x,+~a;@ @ + @ + + + + + + @ + ", -" + # # + + + + @ + @ + @ = k#<-G!f)/$<$K'Y=E*@~_#'*' X;#~$~%~&~*~=~M.N.N.N.4;-~_>;~s;l=l=l=l=l=k=a-m)0,P'O.N.N.N.N.N.f@7,O)T)b' ~a-k=>!Z)>!>!B!L!L>s)>~,~b,%.@ + @ # @ + + + # # + ", -" + # @ + + + @ @ + @ + @ @ k#m,'~s-y#)~!~7>~~{~+,{;#~]~^~/~(~$'_~Z'L N.N.P'T'w;l)s;k=l=l=l=l=k=('o):~<~P':@z.N.N.:@> [~}~#)5;s;k=>!:!>!>!|~*-q,.~>~1~, @ @ + @ + + + + + + # # . ", -" + # # + + + + @ @ @ + @ = v)~!2~3~4~1)5~6~x X;7~8~9~0~a~A;b~i'c~d~z.N.,-t'e~X)/'c!k=l=l=l=l=/'E)f~G=/,V)t*N.f@y)g~h~J)^'a-k=>!Z)>!>!B!L!d>t!r;i~, %.@ + @ @ + + + + # + # + ", -" + # @ + + + @ @ @ @ + @ @ = k#-)j~k~= L '$l~m~n~o~]-v%9%p~q~r~_~s=@ :@W s~t~F)c!t;k=l=l=l=I=k=S*v'])u~F=E.''v~w~x~y~t;k=>!Z)>!>!6;l>z~d-A~v!y)@ @ + @ @ @ @ + + + # @ + ", -" + # # + + + @ + + @ + @ [ =#~%P!n+[ B~C~=)-*P=6%W%W%X>D~E~9~F~h'B~} :*<'~,>,('t;c!k=l=l=l=l=a-{,R*s'a'N;r*G~H~S*a-k=>!Z):!>!B!r!'!I~J~i~K~%.@ + @ @ @ + + + + # @ + ", -" + # # + + + + + + + + @ @ @ @ @ @ B*,*L~{-<,i,x%X%S,0%M~0~N~O~P~V!['Q~<'y'N>m)s;t;k=l=l=l=l=k=R;R~S~n>6)T~R>s;k=>!Z)>!>!6;J=K,U~q*1~o!@ @ + @ @ @ @ + + + # @ . ", -" + @ # + + + + + @ + + + @ @ @ } V~2>W~i,w%0%0%Y%X%Y%Y%[={-k&X~Y~@=Z~7,T'`~x'E)s;s;k=l=l=l=l=],{, ~ {.{+{],k=>!Z):!>!B!0-i=8-@{,~) $ @ + @ + @ + + + + # # . ", -" + # # # + + + + + @ @ + @ @ @ #{${%{&{[&x%0%Y%Y%X%Y%x%7%*{;%={&*-{;{b)T'u'!=5;t;k=k=l=l=l=l=l=k=t;k=k=k=>!Z)>!>!6;0->{,{'{v!){@ @ + @ + @ @ + + + # # + ", -" + # + + + + + + @ + @ + @ @ !{w>~{{{]{i,x%Y%Y%X%X%Y%Y%w%>;-%^{/{@';{7,*!w~B)E)e,s;l=l=l=l=l=l=l=l=l=>!Z)>!>!B!b-i=/=J>O!< $ @ + + + @ + + + + # # + ", -" . # # + + + + + + @ + + @ ({_{:{<{[{{-y%w%0%Y%Y%X%Y%w%}{4*|{1{/{-{2{b)h>u'>,{,k=s;k=l=l=l=l=l=l=>!Z)>!>!6;0-K,)''{3{4{@ @ + @ + @ @ + + + @ # + ", -" @ # # # + + + + + @ + + + %.5{})6{7{8{i,W%Y%Y%Y%X%Y%<&7%9{3'0{a{b{K~7,<'p)=-/'e,s;l=l=l=l=l=>!:!>!>!B!J=i=h=J>c{I-} @ + + + + + + + + # # + ", -" + . # @ + + + + + + + + + ~$w>d{O&e{{-Y%w%0%Y%Y%X%Y%m&7%&'/~1{f{y;g{Q~e!O>W)l>k=s;k=l=h{>!Z)>!>!|~L!R~8-(=,~4{+ @ + @ + @ @ + + + @ # + ", -" + # # # + + + + + + + @ {${;i{j{k{a%U%0%Y%Y%Y%Y%Y%<&}{}{l{c;m{n{<>7,<'o{d,5)e,s;l=>!>!>!>!p{q{i=d-r{v!I-@ @ + + + + + + + + # # + ", -" + @ @ # + + + + + + @ $ ~$s{t{.=u{o~W%w%<,Y%Y%X%Y%m&v%4*v{w{x{!%y{Q~0'(>z{5;r,A{B{>!>!B!C{M!D{E{i~> $ @ + @ + # + + + + @ # + ", -" + @ @ + + + + + + + + + B~{;F{G{H{8{w%0%<,Y%Y%X%Y%<,I{v%J{K{L{Q%M{N{,~h)K,O{p{r,|~P{q{Q{.~R{Y!a;@ @ + + + + + + + + # # + ", -" + @ @ # + + + + + + @ # ~$V!>*.=S{{-w%w%Y%Y%Y%X%Y%m&n&y*T{U{V{W{X{Y{Z{>~`{ ].]+]q,@]#]$]&;o!%.@ + @ + @ + + + + # # + ", -" + @ # # + + + + # # + + U=%]&]*]S{8{W%0%0%Y%Y%X%Y%0%I{=]3'-];]e$~$o.& 7!>]$),{8-,]']F!, @ @ + + + + @ + + + @ # + ", -" @ # # + + + + + + + ({'-)]&]c%!]{-U%w%Y%Y%X%X%<,w%6%[=|&~]{]]]o.L ^]Y![~(!/]Z{(]K~o.@ + @ + @ + # + + # # + ", -" @ # # + + + + + + + + a;_]:]<][][&X>W%0%Y%Y%X%Y%w%I{}]|]S%1]5{+ @ @ } } o.} @ @ @ + @ @ @ @ + + + @ # + ", -" @ # # + + + + + + @ {$~$2]3]|=j'3*9%w%Y%Y%Y%X%W%4]W%a%q&5]6]'-} @ @ } } @ @ @ + @ + + @ + + + # # + ", -" @ # # + + + + + + @ + '-7]8]G{9]5*Y%x%W%Y%Y%Y%Y%w%0]D'a]b]c]@=} @ @ @ @ + + + + + + + + + # # + ", -" @ # # + + + + + + @ {$B~V!d]e]Q=T,f]V%X%X%X%X%W%g]L-h]i]j]k]} } @ @ + @ + @ + + + + + # @ + ", -" @ # # + + + + @ @ @ + B*5{l]m]n]f;o]g]X%X%X%X%X%g]p]j-!;q]} @ + + + + + + + + + # @ # + ", -" @ # + + + + @ + + + ({B~r]M$s]t]s>4]W%X%X%B'x%]-u]v]w]2=+ + @ + @ @ @ + + + + + # + ", -" @ @ @ + + + + + + + + B*e%x]~]9]Z%X%U%U%g],;y]z]A]c]N$+ + + + + + + + + + # # @ ", -" + @ # + + + + + + + $ U=w>z'K&B]l-C]C;4]1>^{D]c]E]{$+ + @ + + + + + + # # @ ", -" + # # + + + + + + @ # B*F]G]H]I]J]K]~-L]M]N]s={$@ + + + + + + + @ # # . ", -" + # # # + + + + + + # -'O]P]Q]R]S]T]U]V]_-# + + + + + + + # # # @ ", -" + @ @ # + + + + + + $ W]X]6]r&/-Y]Y;Z]`]+ + + + + + @ @ @ @ + ", -" + @ @ # # + + + + + + + + + + + + + + + + + + # @ @ @ + ", -" . @ # # # # + + + + + + + + + + + + # # # @ @ @ ", -" + @ @ # # # # + + + + + + # # # # @ @ + ", -" + + . @ @ # # + + + + # # @ @ . + + ", -" + + @ # @ # # @ # @ + + ", -" + + . . . . + + ", -" + + + + "}; diff -Nru pcsx2-1.3.1+dfsg/linux_various/PCSX2.xpm pcsx2-1.4.0/linux_various/PCSX2.xpm --- pcsx2-1.3.1+dfsg/linux_various/PCSX2.xpm 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/linux_various/PCSX2.xpm 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,1971 @@ +/* XPM */ +static char * AppIcon_xpm[] = { +"128 128 1840 2", +" c None", +". c #FAFAFA", +"+ c #FCFCFC", +"@ c #FDFDFD", +"# c #FBFBFB", +"$ c #FBFBFC", +"% c #F7F9FC", +"& c #F9F9FD", +"* c #FAFAFD", +"= c #FAFCFD", +"- c #F2F5FC", +"; c #F1F4FC", +"> c #F4F6FC", +", c #F7F8FC", +"' c #FAFAFC", +") c #F8F9FC", +"! c #F0F4FD", +"~ c #D3E0FD", +"{ c #B9CEFC", +"] c #A6C1FC", +"^ c #A0BDFC", +"/ c #ADC6FC", +"( c #C0D2FD", +"_ c #D4E0FD", +": c #E6EDFC", +"< c #F9FAFC", +"[ c #FCFDFD", +"} c #FCFCFD", +"| c #F1F5FC", +"1 c #DFE9FC", +"2 c #AEC6FD", +"3 c #83A9FD", +"4 c #6796FD", +"5 c #5F91FD", +"6 c #739EFD", +"7 c #8EB0FD", +"8 c #AFC7FC", +"9 c #D0DEFC", +"0 c #F2F5FD", +"a c #CDDCFD", +"b c #A8C1FC", +"c c #84A9FD", +"d c #6896FD", +"e c #5D8FFD", +"f c #5B8EFD", +"g c #6393FD", +"h c #729DFD", +"i c #87ABFD", +"j c #ACC5FD", +"k c #DAE4FC", +"l c #EDF3FC", +"m c #EDF3FD", +"n c #DDE7FD", +"o c #A9C3FD", +"p c #7AA2FD", +"q c #5488FD", +"r c #5689FD", +"s c #578AFD", +"t c #5C8FFD", +"u c #6695FD", +"v c #C4D7FD", +"w c #E2EBFD", +"x c #FAFBFD", +"y c #F6F9FD", +"z c #A5C0FD", +"A c #81A7FD", +"B c #6392FD", +"C c #5B8DFD", +"D c #558AFD", +"E c #568AFD", +"F c #568BFD", +"G c #598BFD", +"H c #5A8CFD", +"I c #7EA6FD", +"J c #B5CBFD", +"K c #D9E4FD", +"L c #FBFCFD", +"M c #EDF2FD", +"N c #DCE7FD", +"O c #A9C4FD", +"P c #78A2FD", +"Q c #6494FD", +"R c #578BFD", +"S c #598CFD", +"T c #7FA6FD", +"U c #B5CCFD", +"V c #DAE5FD", +"W c #F6F8FD", +"X c #D0DEFD", +"Y c #A3BFFD", +"Z c #80A8FD", +"` c #6091FD", +" . c #5A8EFD", +".. c #5C8EFD", +"+. c #6897FD", +"@. c #96B6FD", +"#. c #D2E0FD", +"$. c #EBF1FD", +"%. c #FAFBFC", +"&. c #ECF2FD", +"*. c #D8E4FD", +"=. c #ABC5FD", +"-. c #79A3FD", +";. c #6595FD", +">. c #578BFE", +",. c #588BFD", +"'. c #6E9AFD", +"). c #8CAFFE", +"!. c #B7CDFD", +"~. c #E8EEFD", +"{. c #A2BFFD", +"]. c #7FA7FD", +"^. c #5A8DFD", +"/. c #568AFE", +"(. c #5B8EFE", +"_. c #6A98FE", +":. c #8DB0FE", +"<. c #C0D3FD", +"[. c #E1E9FD", +"}. c #D6E2FD", +"|. c #ACC6FD", +"1. c #7BA5FD", +"2. c #6696FD", +"3. c #598CFE", +"4. c #5D90FE", +"5. c #6E9BFE", +"6. c #8EB2FE", +"7. c #B5CCFE", +"8. c #E1EAFD", +"9. c #F5F7FD", +"0. c #A4C0FD", +"a. c #7EA7FD", +"b. c #588CFE", +"c. c #8AAFFE", +"d. c #C1D5FE", +"e. c #E3ECFE", +"f. c #F4F7FD", +"g. c #ECF1FD", +"h. c #ADC6FD", +"i. c #5F90FE", +"j. c #6E9AFE", +"k. c #90B3FE", +"l. c #B6CDFE", +"m. c #DFE9FE", +"n. c #F5F8FE", +"o. c #FBFBFD", +"p. c #F8FAFD", +"q. c #F3F6FD", +"r. c #F7F9FD", +"s. c #7DA5FD", +"t. c #598DFE", +"u. c #6997FE", +"v. c #87ABFE", +"w. c #C0D4FE", +"x. c #E7EFFE", +"y. c #F6F9FE", +"z. c #FDFDFE", +"A. c #F2F6FD", +"B. c #E5ECFD", +"C. c #DEE7FD", +"D. c #E5EDFD", +"E. c #F8F9FD", +"F. c #EEF2FD", +"G. c #D1DFFD", +"H. c #5F91FE", +"I. c #6C9AFE", +"J. c #92B3FE", +"K. c #B7CDFE", +"L. c #DEE8FE", +"M. c #FCFDFE", +"N. c #FEFEFE", +"O. c #F9FAFD", +"P. c #F3F7FD", +"Q. c #D7E3FD", +"R. c #BCD0FD", +"S. c #9EBBFD", +"T. c #A9C2FD", +"U. c #B8CEFD", +"V. c #DFE8FD", +"W. c #A6C1FD", +"X. c #7BA4FD", +"Y. c #578CFE", +"Z. c #6998FE", +"`. c #83A9FE", +" + c #BFD3FE", +".+ c #EBF2FE", +"++ c #F7FAFE", +"@+ c #E7EEFD", +"#+ c #AFC8FD", +"$+ c #6594FD", +"%+ c #7CA4FD", +"&+ c #CADAFD", +"*+ c #EEF3FD", +"=+ c #EFF4FD", +"-+ c #92B4FE", +";+ c #B9CFFE", +">+ c #DCE7FE", +",+ c #FBFCFE", +"'+ c #87ACFD", +")+ c #6B99FD", +"!+ c #85AAFD", +"~+ c #A4BFFD", +"{+ c #C9D9FD", +"]+ c #E3EBFD", +"^+ c #E0EAFD", +"/+ c #A8C3FD", +"(+ c #6192FD", +"_+ c #80A7FE", +":+ c #BBD0FE", +"<+ c #ECF2FE", +"[+ c #F7F9FE", +"}+ c #F2F6FE", +"|+ c #E4EDFE", +"1+ c #ADC7FE", +"2+ c #749FFE", +"3+ c #5588FD", +"4+ c #578CFD", +"5+ c #6997FD", +"6+ c #80A7FD", +"7+ c #C8D8FD", +"8+ c #CFDEFD", +"9+ c #5E91FE", +"0+ c #6897FE", +"a+ c #91B3FE", +"b+ c #DBE6FE", +"c+ c #FAFBFE", +"d+ c #F3F7FE", +"e+ c #D2E0FE", +"f+ c #AAC4FE", +"g+ c #86ABFE", +"h+ c #6394FE", +"i+ c #5C8FFE", +"j+ c #578AFE", +"k+ c #598DFD", +"l+ c #6D9AFD", +"m+ c #E2EAFD", +"n+ c #F9FBFD", +"o+ c #F1F5FD", +"p+ c #E0E9FD", +"q+ c #AAC4FD", +"r+ c #6394FD", +"s+ c #6B9AFE", +"t+ c #81A8FE", +"u+ c #B8CEFE", +"v+ c #F1F5FE", +"w+ c #AFC8FE", +"x+ c #77A1FE", +"y+ c #6595FE", +"z+ c #568BFE", +"A+ c #5D90FD", +"B+ c #83A8FD", +"C+ c #83AAFD", +"D+ c #BED2FE", +"E+ c #FAFCFE", +"F+ c #D4E1FE", +"G+ c #A9C3FE", +"H+ c #85ABFE", +"I+ c #6495FE", +"J+ c #5F90FD", +"K+ c #6D9BFD", +"L+ c #C8D9FD", +"M+ c #E3EBFC", +"N+ c #E4EBFD", +"O+ c #AEC7FD", +"P+ c #7CA5FD", +"Q+ c #548AFD", +"R+ c #5B8FFE", +"S+ c #6D9BFE", +"T+ c #EBF1FE", +"U+ c #F6F8FE", +"V+ c #F0F5FE", +"W+ c #B2CAFE", +"X+ c #7CA5FE", +"Y+ c #6696FE", +"Z+ c #5E90FD", +"`+ c #84AAFD", +" @ c #EFF3FD", +".@ c #89ADFD", +"+@ c #588BFE", +"@@ c #6B99FE", +"#@ c #BFD2FE", +"$@ c #D6E3FE", +"%@ c #A8C3FE", +"&@ c #84ABFE", +"*@ c #6596FE", +"=@ c #82A8FD", +"-@ c #C6D7FD", +";@ c #8DB1FD", +">@ c #5388FD", +",@ c #88ADFE", +"'@ c #B4CBFE", +")@ c #E6EDFE", +"!@ c #EFF4FE", +"~@ c #D9E5FE", +"{@ c #7FA7FE", +"]@ c #588DFE", +"^@ c #A3C0FD", +"/@ c #5489FD", +"(@ c #558AFE", +"_@ c #7AA3FE", +":@ c #FCFCFE", +"<@ c #A7C3FE", +"[@ c #82A9FE", +"}@ c #A5C1FD", +"|@ c #CBDAFD", +"1@ c #E7EDFD", +"2@ c #B4CBFD", +"3@ c #7CA4FE", +"4@ c #E0E9FE", +"5@ c #B2CBFE", +"6@ c #82AAFE", +"7@ c #5A8DFE", +"8@ c #7BA4FE", +"9@ c #86ACFE", +"0@ c #7EA6FE", +"a@ c #5D8FFE", +"b@ c #CCDBFD", +"c@ c #739EFE", +"d@ c #A3BFFE", +"e@ c #CDDCFE", +"f@ c #FDFEFE", +"g@ c #F4F7FE", +"h@ c #DDE7FE", +"i@ c #A8C4FE", +"j@ c #7FA8FE", +"k@ c #C1D4FE", +"l@ c #A6C2FE", +"m@ c #6C9AFD", +"n@ c #EAF0FD", +"o@ c #5E8EFD", +"p@ c #6796FE", +"q@ c #D4E2FE", +"r@ c #EAF1FE", +"s@ c #8EB1FE", +"t@ c #B4CCFE", +"u@ c #DAE5FE", +"v@ c #E5EDFE", +"w@ c #CCDCFE", +"x@ c #A2BFFE", +"y@ c #81A9FE", +"z@ c #6A99FE", +"A@ c #5E90FE", +"B@ c #6998FD", +"C@ c #E8EFFD", +"D@ c #9BB9FD", +"E@ c #6A97FD", +"F@ c #6091FE", +"G@ c #7AA4FE", +"H@ c #A4C1FE", +"I@ c #CFDEFE", +"J@ c #E1EAFE", +"K@ c #A9C4FE", +"L@ c #7CA6FE", +"M@ c #E9F0FE", +"N@ c #CBDBFE", +"O@ c #A5C2FE", +"P@ c #6A98FD", +"Q@ c #B0C8FD", +"R@ c #BED1FD", +"S@ c #78A2FE", +"T@ c #6092FE", +"U@ c #558BFE", +"V@ c #D7E3FE", +"W@ c #D3E0FE", +"X@ c #B3CAFE", +"Y@ c #87ACFE", +"Z@ c #6898FE", +"`@ c #8DB1FE", +" # c #B5CDFE", +".# c #F9FBFE", +"+# c #F8FAFE", +"@# c #C8D9FE", +"## c #A0BEFE", +"$# c #588CFD", +"%# c #92B3FD", +"&# c #B9CEFD", +"*# c #E4ECFD", +"=# c #FBFDFD", +"-# c #E4ECFE", +";# c #C9DAFE", +"># c #94B6FE", +",# c #7DA6FE", +"'# c #ABC5FE", +")# c #7DA5FE", +"!# c #B7CEFE", +"~# c #9AB9FE", +"{# c #6393FE", +"]# c #749FFD", +"^# c #99B8FD", +"/# c #D8E3FD", +"(# c #EFF7FD", +"_# c #E2F2FD", +":# c #CEE9FC", +"<# c #C2E5FD", +"[# c #BEE4FD", +"}# c #C6E7FD", +"|# c #D8EEFD", +"1# c #E9F5FD", +"2# c #BCD1FE", +"3# c #97B8FE", +"4# c #77A2FE", +"5# c #6192FE", +"6# c #8FB2FE", +"7# c #9ABAFE", +"8# c #EDF2FE", +"9# c #6293FE", +"0# c #739FFD", +"a# c #99B9FD", +"b# c #F7FAFD", +"c# c #E0F2FD", +"d# c #C3E6FD", +"e# c #9DD6FD", +"f# c #84CCFD", +"g# c #7CC9FD", +"h# c #8DD0FD", +"i# c #AFDEFD", +"j# c #D2ECFD", +"k# c #F5FAFD", +"l# c #C6D8FE", +"m# c #91B4FE", +"n# c #6896FE", +"o# c #B5CBFE", +"p# c #C5D7FE", +"q# c #96B6FE", +"r# c #75A1FD", +"s# c #9CBBFD", +"t# c #D9E5FD", +"u# c #EBF6FD", +"v# c #D4ECFD", +"w# c #AFDDFD", +"x# c #8DCFFD", +"y# c #72C5FD", +"z# c #63BFFD", +"A# c #61BEFD", +"B# c #6DC3FD", +"C# c #85CCFD", +"D# c #A6D9FD", +"E# c #CCE9FD", +"F# c #E5F4FE", +"G# c #FBFDFE", +"H# c #F3F6FE", +"I# c #E1EBFE", +"J# c #99B8FE", +"K# c #76A1FE", +"L# c #5A8EFE", +"M# c #8CB0FE", +"N# c #E0EAFE", +"O# c #C3D6FE", +"P# c #9FBDFE", +"Q# c #8FB2FD", +"R# c #BED2FD", +"S# c #E6EEFD", +"T# c #B1DEFD", +"U# c #82CBFD", +"V# c #5CBCFD", +"W# c #4FB6FD", +"X# c #48B3FD", +"Y# c #49B4FD", +"Z# c #51B7FE", +"`# c #5FBCFD", +" $ c #7DC9FD", +".$ c #A4D9FE", +"+$ c #CCEAFE", +"@$ c #F4FBFE", +"#$ c #C3D5FE", +"$$ c #6F9CFE", +"%$ c #83AAFE", +"&$ c #B1CAFE", +"*$ c #E9EFFE", +"=$ c #F9FAFE", +"-$ c #C2D5FE", +";$ c #9EBCFE", +">$ c #5C8EFE", +",$ c #DDE8FD", +"'$ c #F6F6F9", +")$ c #F3F4F8", +"!$ c #F2F3F7", +"~$ c #F7F8FA", +"{$ c #FAFAFB", +"]$ c #D5EDFD", +"^$ c #ABDCFD", +"/$ c #67C0FD", +"($ c #52B8FD", +"_$ c #4CB5FD", +":$ c #4DB5FD", +"<$ c #54B8FD", +"[$ c #67C0FE", +"}$ c #7FCAFE", +"|$ c #A4DAFE", +"1$ c #E6F5FE", +"2$ c #BDD2FE", +"3$ c #99B9FE", +"4$ c #74A0FE", +"5$ c #6193FE", +"6$ c #8BAFFE", +"7$ c #B9CEFE", +"8$ c #80A8FE", +"9$ c #5489FE", +"0$ c #5388FE", +"a$ c #88ACFE", +"b$ c #C4D6FD", +"c$ c #EDF2FC", +"d$ c #EFF1F8", +"e$ c #E1E4EF", +"f$ c #C0C6DE", +"g$ c #AEB6D4", +"h$ c #A7B1D1", +"i$ c #B5BDD9", +"j$ c #CED3E5", +"k$ c #E5E7F1", +"l$ c #F5F9FD", +"m$ c #B2DEFD", +"n$ c #86CCFD", +"o$ c #5FBDFD", +"p$ c #4AB5FD", +"q$ c #4AB4FD", +"r$ c #4AB3FD", +"s$ c #4BB4FD", +"t$ c #4CB6FE", +"u$ c #55B9FE", +"v$ c #61BEFE", +"w$ c #80CBFE", +"x$ c #CDEAFE", +"y$ c #F4FAFE", +"z$ c #E3EBFE", +"A$ c #729EFE", +"B$ c #B0C9FE", +"C$ c #AFC7FE", +"D$ c #D6E1F9", +"E$ c #ECEDF4", +"F$ c #D7DBEA", +"G$ c #B7BED9", +"H$ c #8894C1", +"I$ c #6D7CB4", +"J$ c #6475AF", +"K$ c #7988BA", +"L$ c #9DA7CC", +"M$ c #C4CAE0", +"N$ c #EBEDF4", +"O$ c #F5F6F9", +"P$ c #ECF6FD", +"Q$ c #D6EDFD", +"R$ c #67C1FD", +"S$ c #4DB6FD", +"T$ c #4BB5FE", +"U$ c #4FB7FE", +"V$ c #54B9FE", +"W$ c #67C1FE", +"X$ c #7ECAFE", +"Y$ c #A5DAFE", +"Z$ c #E8F5FE", +"`$ c #89AEFE", +" % c #C7D8FE", +".% c #548AFE", +"+% c #5087FE", +"@% c #6797FE", +"#% c #DAE4FB", +"$% c #CFD6EB", +"%% c #B7BFD9", +"&% c #8390BF", +"*% c #5C6DAC", +"=% c #485BA1", +"-% c #3D529C", +";% c #3B4F9B", +">% c #4559A0", +",% c #5567A8", +"'% c #828FBE", +")% c #B5BCD9", +"!% c #DADEEC", +"~% c #F8FBFD", +"{% c #F2F8FD", +"]% c #D3ECFD", +"^% c #87CDFD", +"/% c #5EBDFD", +"(% c #53B8FD", +"_% c #82CBFE", +":% c #F1F9FE", +"<% c #F9FCFE", +"[% c #E2EBFE", +"}% c #CBDAFE", +"|% c #ACC6FE", +"1% c #D1DDF9", +"2% c #E4E6F0", +"3% c #B2BAD7", +"4% c #7E8CBC", +"5% c #45599F", +"6% c #243C90", +"7% c #21398E", +"8% c #21388D", +"9% c #22398E", +"0% c #253C90", +"a% c #283F91", +"b% c #4F61A5", +"c% c #7E8DBD", +"d% c #B3BBD8", +"e% c #E9EBF3", +"f% c #F4F5F9", +"g% c #EDF7FD", +"h% c #ADDCFD", +"i% c #7FCAFD", +"j% c #51B8FD", +"k% c #53B9FE", +"l% c #7CC9FE", +"m% c #E9F6FE", +"n% c #87ADFE", +"o% c #E6EEFE", +"p% c #AEC7FE", +"q% c #CFD7EC", +"r% c #B5BCD8", +"s% c #7381B7", +"t% c #41549D", +"u% c #2E4393", +"v% c #233A8F", +"w% c #243B8F", +"x% c #243C8F", +"y% c #263E90", +"z% c #354B98", +"A% c #7C8ABB", +"B% c #DCDFEC", +"C% c #F0F7FC", +"D% c #89CEFD", +"E% c #54B9FD", +"F% c #4AB4FE", +"G% c #4AB5FE", +"H% c #56BAFE", +"I% c #83CCFE", +"J% c #A6DAFE", +"K% c #EEF8FE", +"L% c #F8FCFE", +"M% c #BDD1FE", +"N% c #98B8FE", +"O% c #84AAFE", +"P% c #CDDAF9", +"Q% c #E4E7F1", +"R% c #B0B8D6", +"S% c #7C8ABC", +"T% c #465AA1", +"U% c #233A8E", +"V% c #243B8E", +"W% c #253C8F", +"X% c #263D8F", +"Y% c #263D90", +"Z% c #2B4192", +"`% c #5264A6", +" & c #7C8BBC", +".& c #E4E7F0", +"+& c #F2F3F8", +"@& c #80CBFD", +"#& c #66C0FD", +"$& c #50B7FD", +"%& c #4BB5FD", +"&& c #49B5FE", +"*& c #48B4FE", +"=& c #49B4FE", +"-& c #53B8FE", +";& c #66C0FE", +">& c #7DC9FE", +",& c #EBF7FE", +"'& c #9BBAFE", +")& c #719DFE", +"!& c #E8EFFE", +"~& c #8AAEFE", +"{& c #6494FE", +"]& c #E7EEFE", +"^& c #D3D9ED", +"/& c #B8BED9", +"(& c #7482B8", +"_& c #3B509B", +":& c #2C4394", +"<& c #263D91", +"[& c #273E91", +"}& c #344A97", +"|& c #44589F", +"1& c #DDE0ED", +"2& c #B0DDFD", +"3& c #8ACEFD", +"4& c #62BFFD", +"5& c #51B8FE", +"6& c #59BBFE", +"7& c #64C0FE", +"8& c #6BC3FE", +"9& c #6CC3FE", +"0& c #4BB6FE", +"a& c #63BFFE", +"b& c #CEEBFE", +"c& c #C4D6FE", +"d& c #A1BEFE", +"e& c #DDE8FE", +"f& c #D1DFFE", +"g& c #CBD8F8", +"h& c #E3E6F1", +"i& c #AFB7D5", +"j& c #7987BA", +"k& c #495CA2", +"l& c #223A8F", +"m& c #233B8F", +"n& c #243B90", +"o& c #263E91", +"p& c #2B4293", +"q& c #5365A7", +"r& c #B4BBD7", +"s& c #E1E3EE", +"t& c #80CAFD", +"u& c #65BFFD", +"v& c #4CB6FD", +"w& c #4EB7FE", +"x& c #5BBCFE", +"y& c #6FC4FE", +"z& c #90D2FE", +"A& c #A9DCFE", +"B& c #95D4FE", +"C& c #5ABCFE", +"D& c #65C0FE", +"E& c #7DCAFE", +"F& c #6999FE", +"G& c #4F86FE", +"H& c #B0C8FE", +"I& c #D6DDEE", +"J& c #BAC1DB", +"K& c #7382B7", +"L& c #304696", +"M& c #294092", +"N& c #324896", +"O& c #7D8CBC", +"P& c #B3BBD7", +"Q& c #F9FCFD", +"R& c #50B8FE", +"S& c #6EC4FE", +"T& c #B8E2FE", +"U& c #D0ECFE", +"V& c #D4EDFE", +"W& c #BEE4FE", +"X& c #95D3FE", +"Y& c #76C7FE", +"Z& c #4DB6FE", +"`& c #84CDFE", +" * c #CFEBFE", +".* c #EAF6FE", +"+* c #EEF3FE", +"@* c #6D9AFE", +"#* c #B1C9FE", +"$* c #C9D7F8", +"%* c #DBE0EF", +"&* c #AFB8D6", +"** c #4C5EA3", +"=* c #2F4695", +"-* c #5466A7", +";* c #7D8BBC", +">* c #B4BCD8", +",* c #DEE1ED", +"'* c #F2F9FD", +")* c #62BEFD", +"!* c #B5E1FE", +"~* c #E0F2FE", +"{* c #C1E5FE", +"]* c #98D5FE", +"^* c #59BCFE", +"/* c #4DB7FE", +"(* c #63C0FE", +"_* c #A8DBFE", +":* c #FBFBFE", +"<* c #AAC5FE", +"[* c #95B6FE", +"}* c #DCE0EF", +"|* c #B8BFDA", +"1* c #7684B8", +"2* c #2F4495", +"3* c #2C4293", +"4* c #2A4193", +"5* c #283E91", +"6* c #2F4595", +"7* c #7D8CBD", +"8* c #D5ECFD", +"9* c #AEDCFD", +"0* c #60BEFE", +"a* c #7CCAFE", +"b* c #AFDEFE", +"c* c #D8EFFE", +"d* c #F0F9FE", +"e* c #BFE4FE", +"f* c #96D4FE", +"g* c #78C8FE", +"h* c #5DBDFE", +"i* c #66C1FE", +"j* c #ACDDFE", +"k* c #DEF1FE", +"l* c #F5FBFE", +"m* c #ECEFFB", +"n* c #DADFF7", +"o* c #CCD4F4", +"p* c #C1CBF2", +"q* c #C9D2F3", +"r* c #D6DDF6", +"s* c #E8EBFA", +"t* c #FAFAFE", +"u* c #CFDBF8", +"v* c #D9DDEE", +"w* c #7684B9", +"x* c #4B5EA3", +"y* c #294093", +"z* c #5366A7", +"A* c #DCE0ED", +"B* c #F4F5F8", +"C* c #D9EEFD", +"D* c #B3DEFD", +"E* c #60BDFD", +"F* c #DCF1FE", +"G* c #C4E7FE", +"H* c #9AD6FE", +"I* c #5CBCFE", +"J* c #4CB5FE", +"K* c #61BFFE", +"L* c #88CFFE", +"M* c #C8E9FE", +"N* c #FAFDFE", +"O* c #F2F4FC", +"P* c #D8DEF7", +"Q* c #B0BDEE", +"R* c #96A7E9", +"S* c #8196E5", +"T* c #91A3E8", +"U* c #A9B7ED", +"V* c #CED6F5", +"W* c #F4F6FD", +"X* c #E4E6F1", +"Y* c #BCC1DB", +"Z* c #7A87BA", +"`* c #233B90", +" = c #45589F", +".= c #7F8DBD", +"+= c #B6BDD9", +"@= c #EAECF3", +"#= c #ACDCFD", +"$= c #88CCFD", +"%= c #7BC9FE", +"&= c #F3FAFE", +"*= c #E2F3FE", +"== c #B6E1FE", +"-= c #64BFFE", +";= c #77C8FE", +">= c #BBE3FE", +",= c #E3F3FE", +"'= c #E9EDFA", +")= c #CCD5F4", +"!= c #95A6E9", +"~= c #859AE6", +"{= c #7C92E4", +"]= c #8398E5", +"^= c #8EA1E8", +"/= c #AAB8ED", +"(= c #C8D1F3", +"_= c #E2E7F9", +":= c #7B88BB", +"<= c #4C5FA3", +"[= c #283F92", +"}= c #354A97", +"|= c #7E8BBC", +"1= c #B6BDD8", +"2= c #DADEEB", +"3= c #F5F6F8", +"4= c #D7EEFD", +"5= c #B4DFFD", +"6= c #5EBCFD", +"7= c #AEDEFE", +"8= c #DAEFFE", +"9= c #FBFEFE", +"0= c #92D2FE", +"a= c #6BC2FE", +"b= c #46B4FE", +"c= c #68C2FE", +"d= c #B0DFFE", +"e= c #F7FCFE", +"f= c #EFF2FB", +"g= c #D5DCF6", +"h= c #A8B6EC", +"i= c #8B9EE6", +"j= c #7C92E3", +"k= c #788EE3", +"l= c #798FE3", +"m= c #768DE2", +"n= c #889CE6", +"o= c #9DADEA", +"p= c #C9D2F4", +"q= c #F1F2FC", +"r= c #F8F8FB", +"s= c #EAEDF4", +"t= c #A6B0D1", +"u= c #40559E", +"v= c #495CA1", +"w= c #808EBD", +"x= c #EAF5FC", +"y= c #D8EDFD", +"z= c #ADDBFD", +"A= c #86CDFD", +"B= c #68C0FD", +"C= c #47B4FE", +"D= c #5FBEFE", +"E= c #B4E0FE", +"F= c #EBEEFB", +"G= c #AEBBEE", +"H= c #7A90E3", +"I= c #788FE3", +"J= c #7F94E4", +"K= c #899CE6", +"L= c #A8B6ED", +"M= c #C6CFF3", +"N= c #E3E7F9", +"O= c #F1F2F7", +"P= c #364C99", +"Q= c #364C98", +"R= c #5163A5", +"S= c #B5BDD8", +"T= c #D9DCEA", +"U= c #F8F8FA", +"V= c #F9FBFC", +"W= c #D6ECFC", +"X= c #B5DFFD", +"Y= c #52B7FD", +"Z= c #7AC9FE", +"`= c #ADDEFE", +" - c #D7EEFE", +".- c #C3E7FE", +"+- c #99D5FE", +"@- c #5ABBFE", +"#- c #77C7FE", +"$- c #EDF0FB", +"%- c #D6DCF6", +"&- c #8C9FE7", +"*- c #7E94E4", +"=- c #8B9EE7", +"-- c #A0B0EC", +";- c #CBD3F4", +">- c #ECF0FB", +",- c #F7F8FD", +"'- c #F7F7FA", +")- c #C8CEE3", +"!- c #818EBE", +"~- c #5264A7", +"{- c #2C4393", +"]- c #273E90", +"^- c #2C4192", +"/- c #B5BCD7", +"(- c #EAECF2", +"_- c #F7F7F9", +":- c #EEF7FC", +"<- c #DFF1FD", +"[- c #AFDCFC", +"}- c #83CCFD", +"|- c #67BFFD", +"1- c #53B7FD", +"2- c #ABDCFE", +"3- c #DCF0FE", +"4- c #BDE4FE", +"5- c #74C6FE", +"6- c #F6FBFE", +"7- c #CBD4F4", +"8- c #ACBAED", +"9- c #91A4E8", +"0- c #8095E4", +"a- c #7B91E4", +"b- c #7F95E4", +"c- c #899DE6", +"d- c #A6B5EC", +"e- c #C3CDF3", +"f- c #E3E8F9", +"g- c #E7EAF2", +"h- c #C8CDE3", +"i- c #919DC7", +"j- c #5265A7", +"k- c #374D99", +"l- c #283E90", +"m- c #374C98", +"n- c #4F61A3", +"o- c #7F8CBC", +"p- c #B9C1DA", +"q- c #FBFCFC", +"r- c #C1E5FC", +"s- c #8CCFFD", +"t- c #5DBCFD", +"u- c #79C9FE", +"v- c #D5EDFE", +"w- c #FCFEFE", +"x- c #F7FBFE", +"y- c #C0E5FE", +"z- c #97D4FE", +"A- c #6AC2FE", +"B- c #58BBFE", +"C- c #52B8FE", +"D- c #A0D8FE", +"E- c #A0AFEB", +"F- c #CAD2F3", +"G- c #E8ECFA", +"H- c #F6F7FD", +"I- c #F9F9FC", +"J- c #C6CDE2", +"K- c #8391C0", +"L- c #283F90", +"M- c #5263A4", +"N- c #8794C0", +"O- c #BBC3DA", +"P- c #F8FAFA", +"Q- c #CAE8FC", +"R- c #99D4FC", +"S- c #70C3FC", +"T- c #50B5FD", +"U- c #4DB4FD", +"V- c #DBF0FE", +"W- c #EFF8FE", +"X- c #91D2FE", +"Y- c #71C5FE", +"Z- c #4FB8FE", +"`- c #75C7FE", +" ; c #9ED7FE", +".; c #CEEAFE", +"+; c #ECF7FE", +"@; c #F0F3FC", +"#; c #7F95E5", +"$; c #A4B3EC", +"%; c #C2CBF2", +"&; c #E5E9F9", +"*; c #E8EAF3", +"=; c #CCD2E5", +"-; c #8592C1", +";; c #2A4093", +">; c #21388E", +",; c #273E8F", +"'; c #374B98", +"); c #4E60A3", +"!; c #909BC5", +"~; c #E2E6EF", +"{; c #EFF0F6", +"]; c #C0E4FC", +"^; c #84CCFC", +"/; c #63BEFD", +"(; c #48B2FD", +"_; c #49B3FD", +":; c #D3EDFE", +"<; c #97D5FE", +"[; c #6DC3FE", +"}; c #54BAFE", +"|; c #69C2FE", +"1; c #9DD7FE", +"2; c #CBE9FE", +"3; c #EDF7FE", +"4; c #EAEDFA", +"5; c #8095E5", +"6; c #7B91E3", +"7; c #899DE7", +"8; c #A1B0EC", +"9; c #CAD2F4", +"0; c #E6EAFA", +"a; c #F7F8FB", +"b; c #B2BAD8", +"c; c #6273AF", +"d; c #41569F", +"e; c #273D91", +"f; c #294090", +"g; c #7280B5", +"h; c #CDD3E5", +"i; c #E5E8F0", +"j; c #C4E6FD", +"k; c #8BCDFC", +"l; c #65BEFD", +"m; c #47B2FD", +"n; c #70C4FE", +"o; c #74C7FE", +"p; c #9ED8FE", +"q; c #EEF7FE", +"r; c #CDD5F4", +"s; c #778DE3", +"t; c #778EE3", +"u; c #7990E3", +"v; c #7D93E4", +"w; c #A2B1EC", +"x; c #E7EBFA", +"y; c #D8DCEB", +"z; c #7080B6", +"A; c #344A98", +"B; c #243B8D", +"C; c #20388C", +"D; c #6273AE", +"E; c #D8DDEA", +"F; c #D2EBFC", +"G; c #A8D9FC", +"H; c #79C6FC", +"I; c #4CB4FD", +"J; c #4EB6FD", +"K; c #D3ECFE", +"L; c #9CD7FE", +"M; c #CAEAFE", +"N; c #E9ECFA", +"O; c #D4DCF6", +"P; c #AFBCEE", +"Q; c #8196E4", +"R; c #8498E6", +"S; c #94A6E9", +"T; c #8FA1E8", +"U; c #A3B2EC", +"V; c #CAD3F4", +"W; c #E4E9F9", +"X; c #EEF0F6", +"Y; c #DDE1ED", +"Z; c #707FB6", +"`; c #4D60A4", +" > c #304695", +".> c #213A8D", +"+> c #6475AE", +"@> c #DADFEA", +"#> c #EAF4FC", +"$> c #D7EDFD", +"%> c #9AD3FC", +"&> c #49B2FD", +"*> c #57B9FD", +"=> c #6AC2FD", +"-> c #8BCFFD", +";> c #DBEFFD", +">> c #F1F8FD", +",> c #E1F2FE", +"'> c #6EC3FE", +")> c #72C6FE", +"!> c #CED7F5", +"~> c #90A3E7", +"{> c #7D93E3", +"]> c #8397E5", +"^> c #99A9E9", +"/> c #B1BEEE", +"(> c #B9C5F0", +"_> c #9DADEB", +":> c #EAEEFB", +"<> c #F8F9FB", +"[> c #F2F4F8", +"}> c #E2E6F0", +"|> c #8995C2", +"1> c #2A4292", +"2> c #D1D6E7", +"3> c #F6F9FC", +"4> c #C1E3FC", +"5> c #99D4FD", +"6> c #79C7FD", +"7> c #88CDFD", +"8> c #9CD5FD", +"9> c #BBE2FD", +"0> c #72C5FE", +"a> c #9CD6FE", +"b> c #CAE9FE", +"c> c #D2D9F5", +"d> c #8C9FE6", +"e> c #8297E5", +"f> c #98A9E9", +"g> c #D3DAF5", +"h> c #D9DFF7", +"i> c #C0CBF2", +"j> c #A2B2EC", +"k> c #8499E5", +"l> c #7E93E4", +"m> c #8A9DE7", +"n> c #C2CCF2", +"o> c #DDE3F8", +"p> c #BDC4DD", +"q> c #8894C2", +"r> c #5063A6", +"s> c #2A4192", +"t> c #3E529C", +"u> c #5E6FAC", +"v> c #9CA7CB", +"w> c #E5E8F1", +"x> c #F0F1F7", +"y> c #EDF6FD", +"z> c #DFF0FD", +"A> c #C0E5FD", +"B> c #CDE9FD", +"C> c #F7FBFD", +"D> c #C3E6FE", +"E> c #92D3FE", +"F> c #45B3FE", +"G> c #6FC5FE", +"H> c #9FD7FE", +"I> c #F3F4FC", +"J> c #D1D8F5", +"K> c #A5B5EC", +"L> c #8FA1E7", +"M> c #7C91E3", +"N> c #93A5E9", +"O> c #B4C1EF", +"P> c #E0E5F8", +"Q> c #97A8E9", +"R> c #869AE6", +"S> c #8B9FE7", +"T> c #B7C3F0", +"U> c #EDF1FB", +"V> c #7987BB", +"W> c #384E9A", +"X> c #263C90", +"Y> c #2B4392", +"Z> c #5F70AC", +"`> c #A7B0D0", +" , c #D1D6E6", +"., c #F7F9FA", +"+, c #F8FAFC", +"@, c #F3F9FC", +"#, c #E8F4FD", +"$, c #EAF5FD", +"%, c #E4F4FE", +"&, c #73C6FE", +"*, c #9BD6FE", +"=, c #E7F5FE", +"-, c #D0D8F5", +";, c #8EA1E7", +">, c #96A8E9", +",, c #B6C2F0", +"', c #D4DBF6", +"), c #F1F3FB", +"!, c #DDE2F8", +"~, c #BFCAF2", +"{, c #7F94E5", +"], c #7C91E4", +"^, c #A0B0EB", +"/, c #D1D9F5", +"(, c #EBEDF5", +"_, c #B2BBD8", +":, c #7E8CBD", +"<, c #253D90", +"[, c #3E539C", +"}, c #96A1C9", +"|, c #D3D6E7", +"1, c #E8EBF2", +"2, c #E3F3FD", +"3, c #C6E8FE", +"4, c #94D3FE", +"5, c #57BBFE", +"6, c #46B3FE", +"7, c #F3F5FC", +"8, c #8DA0E7", +"9, c #93A5E8", +"0, c #B2BFEF", +"a, c #DFE4F8", +"b, c #F6F7FC", +"c, c #C4CDF3", +"d, c #889CE7", +"e, c #768CE3", +"f, c #B0BEEE", +"g, c #D1D7E8", +"h, c #2E4494", +"i, c #223A8E", +"j, c #5B6CAB", +"k, c #D2D7E6", +"l, c #F3F5F8", +"m, c #E5F3FD", +"n, c #BDE3FD", +"o, c #58BAFE", +"p, c #CFD7F5", +"q, c #90A2E7", +"r, c #7A8FE3", +"s, c #8498E5", +"t, c #EFF1FB", +"u, c #90A2E8", +"v, c #8A9DE6", +"w, c #A3B2EB", +"x, c #CED6F4", +"y, c #8F9AC5", +"z, c #5668A9", +"A, c #3C529B", +"B, c #6676B0", +"C, c #E5F4FD", +"D, c #CAE8FD", +"E, c #96D3FD", +"F, c #65C1FE", +"G, c #56BBFE", +"H, c #4AB6FE", +"I, c #D7DDF6", +"J, c #8D9FE7", +"K, c #92A4E8", +"L, c #B0BDEF", +"M, c #C6D0F3", +"N, c #98A8E9", +"O, c #C7D0F3", +"P, c #D3D7E8", +"Q, c #828FBF", +"R, c #4C5FA4", +"S, c #273D90", +"T, c #2B4292", +"U, c #5768A7", +"V, c #A4ADCE", +"W, c #D5D9E7", +"X, c #F5F9FC", +"Y, c #C3E5FD", +"Z, c #95D2FD", +"`, c #74C6FD", +" ' c #8296E5", +".' c #EEF0FB", +"+' c #AAB8EE", +"@' c #E9EBF4", +"#' c #C0C7DF", +"$' c #8D9AC5", +"%' c #364B98", +"&' c #2B4193", +"*' c #6777B0", +"=' c #CCD1E3", +"-' c #F9FAFB", +";' c #EEF6FD", +">' c #A2D7FD", +",' c #81CBFE", +"'' c #F1F3FC", +")' c #ABB9ED", +"!' c #AFBDEE", +"~' c #DAE0F7", +"{' c #F8F8FD", +"]' c #B3BFEF", +"^' c #8398E6", +"/' c #798FE4", +"(' c #7A90E4", +"_' c #97A8EA", +":' c #BDC8F1", +"<' c #DEE4F8", +"[' c #F6F7FA", +"}' c #CAD0E4", +"|' c #7F8CBE", +"1' c #2B4294", +"2' c #263C8F", +"3' c #3A4F9B", +"4' c #5E6FAD", +"5' c #A1ABCE", +"6' c #E1F1FD", +"7' c #BAE1FD", +"8' c #89CDFD", +"9' c #4EB5FD", +"0' c #D8DFF7", +"a' c #D0D7F5", +"b' c #98A9EA", +"c' c #8397E6", +"d' c #96A8EA", +"e' c #B7C4F0", +"f' c #F0F2FB", +"g' c #E6E9F2", +"h' c #C3C9E0", +"i' c #8E9AC5", +"j' c #384D99", +"k' c #6C7BB4", +"l' c #9EA8CD", +"m' c #A4D9FD", +"n' c #75C5FD", +"o' c #5CBDFE", +"p' c #8DD0FE", +"q' c #7A91E3", +"r' c #95A7E9", +"s' c #B0BCEF", +"t' c #EBEEFA", +"u' c #B3C0EF", +"v' c #8EA0E8", +"w' c #7D92E5", +"x' c #92A5E9", +"y' c #B4C1F0", +"z' c #C5CBE1", +"A' c #5164A7", +"B' c #253D8F", +"C' c #273F91", +"D' c #374C99", +"E' c #9DA7CD", +"F' c #D4D8E9", +"G' c #EEF1F6", +"H' c #A8DBFC", +"I' c #77C6FD", +"J' c #46B3FD", +"K' c #47B3FD", +"L' c #88CEFE", +"M' c #B9E2FE", +"N' c #A5B4EC", +"O' c #DBE0F7", +"P' c #EEF1FB", +"Q' c #AEBCEE", +"R' c #8196E6", +"S' c #B5C2F0", +"T' c #DAE1F7", +"U' c #C8CDE2", +"V' c #334996", +"W' c #6878B1", +"X' c #9CA6CC", +"Y' c #CBD1E3", +"Z' c #EDEFF6", +"`' c #B9E2FD", +" ) c #57BAFE", +".) c #79C8FE", +"+) c #D6EEFE", +"@) c #D8DEF6", +"#) c #9BABEA", +"$) c #B5C1EF", +"%) c #93A4E9", +"&) c #C2C8DF", +"*) c #3C519B", +"=) c #99A4CA", +"-) c #EEF7FD", +";) c #A1D8FD", +">) c #61BDFD", +",) c #9FD8FE", +"') c #C9E9FE", +")) c #F2FAFE", +"!) c #D9E0F7", +"~) c #9BACEA", +"{) c #7D92E4", +"]) c #B4C0EF", +"^) c #E2E6F9", +"/) c #E5E8F9", +"() c #E6E8F2", +"_) c #CBD0E4", +":) c #8B97C3", +"<) c #7383B7", +"[) c #9FA9CD", +"}) c #CBD0E3", +"|) c #EEEFF6", +"1) c #C0E4FD", +"2) c #6CC2FD", +"3) c #51B7FD", +"4) c #A7B5EC", +"5) c #7B90E4", +"6) c #B2BEEF", +"7) c #D4DAF6", +"8) c #D4DBF5", +"9) c #BDC7F1", +"0) c #C0CAF2", +"a) c #DCE2F6", +"b) c #ECEFFA", +"c) c #8391BF", +"d) c #ABB4D4", +"e) c #E3F2FD", +"f) c #94D2FD", +"g) c #CBEAFE", +"h) c #BEC9F1", +"i) c #99AAE9", +"j) c #8195E5", +"k) c #758BE3", +"l) c #758CE3", +"m) c #8096E5", +"n) c #B5C1F0", +"o) c #7D93E5", +"p) c #BAC6F0", +"q) c #9CACEA", +"r) c #879BE6", +"s) c #AFBCED", +"t) c #EFF1FA", +"u) c #F1F3F7", +"v) c #F4F9FD", +"w) c #BBE1FD", +"x) c #A2D9FE", +"y) c #F5F7FC", +"z) c #D8DFF6", +"A) c #BCC7F1", +"B) c #8FA2E8", +"C) c #9DAEEB", +"D) c #D3DAF6", +"E) c #7990E4", +"F) c #8297E6", +"G) c #92A4E9", +"H) c #D4DAF5", +"I) c #BAC6F1", +"J) c #99AAEA", +"K) c #758CE2", +"L) c #7D92E3", +"M) c #90A2E6", +"N) c #B1BDEE", +"O) c #DAE0F6", +"P) c #C8E8FD", +"Q) c #91D1FD", +"R) c #E6EAF9", +"S) c #BFCAF1", +"T) c #BBC6F1", +"U) c #7A91E4", +"V) c #F4F5FC", +"W) c #97A9EA", +"X) c #7E93E5", +"Y) c #778DE2", +"Z) c #788DE2", +"`) c #7B8FE2", +" ! c #94A4E8", +".! c #BEC8F0", +"+! c #DEE3F7", +"@! c #F3F9FD", +"#! c #B9E1FD", +"$! c #8FD0FD", +"%! c #A3D9FE", +"&! c #DFE5F8", +"*! c #DCE2F7", +"=! c #B5C2EF", +"-! c #DEE3F8", +";! c #BAC5F1", +">! c #788EE2", +",! c #758BE2", +"'! c #8B9DE6", +")! c #B3BFEE", +"!! c #D6DCF5", +"~! c #E4F3FD", +"{! c #D0EBFE", +"]! c #D9DFF6", +"^! c #768EE4", +"/! c #B1BEEF", +"(! c #DCE1F7", +"_! c #B7C2F0", +":! c #788DE1", +"~ c #CCD4F3", +",~ c #E5E9F8", +"'~ c #BEE3FD", +")~ c #60BEFD", +"!~ c #71C4FD", +"~~ c #C5E6FD", +"{~ c #F8FCFD", +"]~ c #A1ABCF", +"^~ c #5567A9", +"/~ c #3D529D", +"(~ c #586BAB", +"_~ c #D1D6E8", +":~ c #A7B6ED", +"<~ c #DBE2F7", +"[~ c #E1E6F8", +"}~ c #BBC6F0", +"|~ c #7B90E3", +"1~ c #E9EDF9", +"2~ c #CEEAFD", +"3~ c #BFE4FD", +"4~ c #B2DFFD", +"5~ c #D1EBFD", +"6~ c #E8F5FD", +"7~ c #D3D7E7", +"8~ c #8F9BC5", +"9~ c #596BAA", +"0~ c #384D9A", +"a~ c #2C4294", +"b~ c #596AAA", +"c~ c #C1C8DF", +"d~ c #F3F5F9", +"e~ c #AEBCEF", +"f~ c #91A3E9", +"g~ c #D9E0F6", +"h~ c #BBC7F0", +"i~ c #E4E8F8", +"j~ c #E6F4FD", +"k~ c #F0F8FD", +"l~ c #D0D5E6", +"m~ c #A2ACCF", +"n~ c #5A6CAB", +"o~ c #2D4393", +"p~ c #364B99", +"q~ c #5769AA", +"r~ c #909CC6", +"s~ c #C2CCF3", +"t~ c #95A6EA", +"u~ c #DCE1F8", +"v~ c #E2E7F8", +"w~ c #BBC7F1", +"x~ c #9AACEA", +"y~ c #8298E6", +"z~ c #92A3E7", +"A~ c #CAD3F3", +"B~ c #F9F9FB", +"C~ c #EBECF3", +"D~ c #2A4092", +"E~ c #314796", +"F~ c #8C99C4", +"G~ c #BFC9F2", +"H~ c #9AABEA", +"I~ c #ADBBED", +"J~ c #CFD7F4", +"K~ c #F6F7FB", +"L~ c #7888BA", +"M~ c #22398F", +"N~ c #5769A9", +"O~ c #8C98C4", +"P~ c #C5CAE1", +"Q~ c #EDF0FA", +"R~ c #92A3E8", +"S~ c #ADBAEE", +"T~ c #9FAEEB", +"U~ c #A7B6EC", +"V~ c #ECEEF4", +"W~ c #6B7CB4", +"X~ c #6979B3", +"Y~ c #ACB4D4", +"Z~ c #F2F4F9", +"`~ c #BCC8F1", +" { c #899CE7", +".{ c #8599E6", +"+{ c #8295E5", +"@{ c #D1D9F4", +"#{ c #EFF1F6", +"${ c #D6DBE9", +"%{ c #7585B8", +"&{ c #2C4494", +"*{ c #2D4394", +"={ c #7584B8", +"-{ c #D6DAEA", +";{ c #F4F5FA", +">{ c #93A4E8", +",{ c #A9B7EC", +"'{ c #C8D1F2", +"){ c #F4F6FB", +"!{ c #F8F9FA", +"~{ c #8A97C2", +"{{ c #41569E", +"]{ c #2D4494", +"^{ c #5F70AD", +"/{ c #ABB3D4", +"({ c #FAFBFB", +"_{ c #F1F2F6", +":{ c #B6BED9", +"<{ c #7F8EBD", +"[{ c #4D61A4", +"}{ c #20388E", +"|{ c #394F9A", +"1{ c #7483B8", +"2{ c #F2F3F9", +"3{ c #E7EAF8", +"4{ c #F4F5FB", +"5{ c #ECEEF5", +"6{ c #7484B8", +"7{ c #3A4F9A", +"8{ c #294091", +"9{ c #1F388D", +"0{ c #6070AE", +"a{ c #B0B8D7", +"b{ c #EAECF4", +"c{ c #E8EBF8", +"d{ c #B1B9D6", +"e{ c #4A5DA2", +"f{ c #A8B2D3", +"g{ c #F1F3F9", +"h{ c #798EE3", +"i{ c #C6CCE1", +"j{ c #6E7DB4", +"k{ c #394E9A", +"l{ c #374D9A", +"m{ c #B5BDDA", +"n{ c #E9ECF4", +"o{ c #B8C4F0", +"p{ c #798EE2", +"q{ c #7E93E3", +"r{ c #D0D7F4", +"s{ c #E1E3EF", +"t{ c #B2B9D7", +"u{ c #475AA1", +"v{ c #40549E", +"w{ c #7382B8", +"x{ c #A7B0D2", +"y{ c #F0F2F9", +"z{ c #9CADEA", +"A{ c #768BE2", +"B{ c #778CE2", +"C{ c #8295E4", +"D{ c #ADBAED", +"E{ c #C9D1F3", +"F{ c #BFC6DD", +"G{ c #6C7BB3", +"H{ c #3F539D", +"I{ c #1F378D", +"J{ c #394E9B", +"K{ c #6878B3", +"L{ c #B7BFDB", +"M{ c #F7F7FB", +"N{ c #F3F5FB", +"O{ c #8497E4", +"P{ c #7A90E2", +"Q{ c #8EA0E6", +"R{ c #CED5F4", +"S{ c #42579F", +"T{ c #42569F", +"U{ c #7281B7", +"V{ c #A6B0D2", +"W{ c #DEE2EE", +"X{ c #F1F3F8", +"Y{ c #F1F3FA", +"Z{ c #E1E5F7", +"`{ c #B5C1EE", +" ] c #9FAEEA", +".] c #96A6E8", +"+] c #8EA0E7", +"@] c #98A9E8", +"#] c #B2BEEE", +"$] c #CCD3F3", +"%] c #EEEFF5", +"&] c #B8BFDB", +"*] c #6A7AB3", +"=] c #253C91", +"-] c #6E7DB5", +";] c #B9C1DB", +">] c #C4CEF1", +",] c #B6C2EE", +"'] c #D4DAF4", +")] c #DDE1EE", +"!] c #3E539D", +"~] c #7281B6", +"{] c #ACB5D3", +"]] c #EDEEF4", +"^] c #F2F4FB", +"/] c #DDE2F7", +"(] c #EDEFF9", +"_] c #EDEFF5", +":] c #B3BCD8", +"<] c #6A7BB3", +"[] c #465AA0", +"}] c #293F91", +"|] c #3E529B", +"1] c #CFD4E6", +"2] c #DEE1EE", +"3] c #BDC5DD", +"4] c #233B8E", +"5] c #929DC7", +"6] c #C6CBE1", +"7] c #EDEEF5", +"8] c #B1B8D5", +"9] c #485CA1", +"0] c #20378D", +"a] c #5C6CAB", +"b] c #96A0C8", +"c] c #D4D8E8", +"d] c #C3C9DF", +"e] c #7A89BA", +"f] c #22398D", +"g] c #253C8E", +"h] c #2E4594", +"i] c #5C6DAB", +"j] c #939EC8", +"k] c #C9CEE3", +"l] c #AEB6D5", +"m] c #6F7EB5", +"n] c #485BA0", +"o] c #273D8F", +"p] c #233A8D", +"q] c #C7CDE1", +"r] c #E1E5EF", +"s] c #7685B9", +"t] c #354B97", +"u] c #2B4393", +"v] c #6878B2", +"w] c #B4BCD9", +"x] c #AAB3D3", +"y] c #3F539C", +"z] c #6172AE", +"A] c #97A3CA", +"B] c #374C97", +"C] c #1F388C", +"D] c #AAB4D3", +"E] c #F4F4F8", +"F] c #E2E5EF", +"G] c #ABB4D3", +"H] c #7B89BB", +"I] c #5668A8", +"J] c #42569D", +"K] c #43579E", +"L] c #6C7CB4", +"M] c #9AA4CA", +"N] c #D2D6E7", +"O] c #EBEDF3", +"P] c #CED4E5", +"Q] c #8F9CC5", +"R] c #6F7EB4", +"S] c #717FB5", +"T] c #8D99C3", +"U] c #BFC5DD", +"V] c #DFE1ED", +"W] c #F5F5F9", +"X] c #E6E8F1", +"Y] c #C5CAE0", +"Z] c #EFEFF5", +"`] c #F9FBFB", +" ", +" . + . + + + ", +" @ . # # # # # # # # + @ ", +" + # # # # # + # # + # # # @ @ + ", +" + + @ # # # # # + + + + + + + + # # # @ + ", +" + . # # @ # + + + + + + + + + + + + + # # @ # + + ", +" + @ # + + # # + + + + + + @ @ + + + + + + + + # @ @ + ", +" @ # # @ + + + + + + + + + + $ % % & * $ + + + + + + # # # . ", +" @ # # + + + + + + + + @ + + = % - ; > , ' + @ + + + + + + # # + ", +" . @ + + + + + + @ @ + + # ) ! ~ { ] ^ / ( _ : < + + + + + # # # @ + ", +" + @ # + + + + + @ + + + [ } | 1 2 3 4 5 6 7 8 9 0 $ + + + + + + # @ @ + ", +" . @ # + + + + @ + + + @ + ) 0 a b c d e f g h i j k l = + + @ + + + # # @ + ", +" + # # + + + + + + + @ + } } m n o p g q r s s t u 7 v w ' @ @ + @ + + + + @ @ + ", +" + # @ + + + @ + + @ + + @ x y a z A B C D E F F G H I J K x + @ + @ + + + + @ + # @ + ", +" + # # + + + # @ @ @ + @ @ L M N O P Q D E R R R F R S T U V x @ + + + @ + + + + + + @ @ @ + ", +" + # @ + + + @ @ @ @ + @ @ x W X Y Z ` .F R R R F D ..+.@.#.$.L @ @ + + + + + + + + + # + @ # @ ", +" + # # + + + + @ @ + + @ } %.&.*.=.-.;.D E >.s s s ,...'.).!.~.W } @ @ @ + @ + + + + + + + # # + # . ", +" + # @ + + + @ @ @ @ + @ @ L W #.{.].5 ^.F R s R >./.(._.:.<.[.W L @ @ @ @ @ + @ + + + + + + + + + # # . ", +" + @ # + + # + @ + @ + @ } L $.}.|.1.2.D E R s R >.3.4.5.6.7.8.9.} @ @ @ @ @ @ @ + + @ + + @ + + + + + # # + ", +" + # # + + + @ + + + + @ @ %.W }.0.a.5 S F R s R b.>.(._.c.d.e.f.} @ @ @ @ @ @ @ @ @ @ + + @ + @ + + + + + + # @ ", +" + # @ + + + + + @ @ + @ } L g.~ h.a.4 R E R s R >.b.i.j.k.l.m.n.o.@ @ @ @ @ @ %.p.q.! q.W L + + + + + + + + + # # @ ", +" + # + + + + @ + @ @ + @ @ o.r.V 0.s.5 R R R R R b.>.t.u.v.w.x.y.z.@ @ @ @ @ @ @ p.A.B.C.D.M E.@ @ + @ + + + + + + # # @ ", +" . @ # + + + + + @ @ + @ } L F.G.h.Z 4 S E R s R >.b.H.I.J.K.L.y.M.N.@ @ @ @ @ O.P.Q.R.o S.T.U.X B.r.@ + @ + @ + + + + # # @ ", +" . # # + + + + + @ + @ @ L r.V.W.X.5 D F R R R b.>.Y.Z.`. +.+++N.N.N.@ @ @ @ @ P.@+#+X.$+,.$+%+Y &+*+@ @ + + + + + + + + # # @ ", +" + @ + # + + + + @ + @ } x =+X |.3 2.^.E R s R >.>.H._.-+;+>+y.,+N.N.N.N.N.@ O.q.G.j '+4 ..E e )+!+~+{+]+r.@ + @ + + + + + + # # @ ", +" @ @ # + + + @ @ @ + @ [ L f.^+/+X.(+D F R s R b.b.Y._._+:+<+[+N.N.N.N.N.N.N.N.}+|+1+2+g 3+E R 4+t 5+6+~+7+*+= @ + + + + + + + + # # @ ", +" + # @ + + + @ + + + + @ x q.8+=.3 ;.f E R s R >.>.9+0+a+:+b+y.,+N.N.N.N.N.N.c+d+e+f+g+h+i+j+s R R k+5 l+!+~+7+m+n+@ @ @ + + + + + + # # @ ", +" + @ # # + + + + @ @ @ @ } o+p+q+1.r+D F >.s R b.b.t.s+t+u+<+y.N.N.N.N.N.N.N.z.v+m.w+x+y+z+Y.b.R s s R 4+A+5+B+~+7+*+p.@ + + # + + + + + # # @ ", +" + @ @ # + + + + + @ + @ x W G.q+C+r+f E R s R >.>.9+0+k.D+>+[+,+N.N.N.N.N.N.E+d+F+G+H+I+i+Y.Y.b.b.>.s R R ^.J+K+c ~+L+M+[ @ + @ + + + + + . + @ + ", +" + @ @ # + + + + + + + @ + 0 N+O+P+;.Q+E s s R b.t.R+S+H+l.T+U+N.N.N.N.N.N.N.M.V+>+W+X+Y+Y.Y.b.b.b.b.b.R s >.R 4+Z+5+`+0.{+ @r.@ + + + + + + + + # @ . ", +" + @ # + + + + + @ + + @ @ } V U .@(+f F F s R +@+@H.@@k.#@>+[+,+N.N.N.N.N.N.,+d+$@%@&@*@i+b.b.b.b.b.Y.>.>.>.s R R ^.Z+K+=@0.L+N+@ @ + @ + + + + + + # @ + ", +" + @ # @ + + + + + + @ @ + @ } o.-@;@K+>@D s s R b.b.>.Z.,@'@)@n.N.N.N.N.N.N.N.,+!@~@W+{@Y+]@Y.b.b.b.b.Y.b.b.b.b.R s >.R 4+5 5+!+^@{+F.W @ + @ + + + + + + # @ + ", +" . # # + + + + + + @ @ @ + @ @ L n+U K+5 /@E s R b.b.>.(@_@7.~@n.:@N.N.N.N.N.N.M.d+~@<@[@Y+(.b.Y.b.b.b.Y.>.t.(.b.>.+@+@s R R ^.e l+a.}@|@1@@ @ + @ @ @ @ + + # + # . ", +" + @ + + + + + + + + + @ + @ @ @ L p.2@)+5 (@E R b.b.b.>.(@3@:+4@c+N.N.N.N.N.N.,+V+$@5@6@Y+7@z+b.b.b.Y.Y.9+0+8@9@0@2+Y+a@S R s R 4+5 +.'+W.b@&.W @ + @ @ + + + + + # @ + ", +" . # # # + + + + + + + + + @ @ @ @ L x <.Z 5+3+s b.b.b.b.>./.c@d@e@y.f@N.N.N.N.z.g@h@i@j@Y+7@b.Y.b.b.b.>.z+I.9@7.e+k@l@{@Y+i+b.s R R k+t m@I o X n@@ @ + @ + + + + + + @ @ + ", +" + # # + + + + @ + @ @ + + @ @ @ @ @ [ } #.}@T o@7@b.b.b.b.Y.>.p@t+%@q@r@z.N.N.E+v+q@W+&@Y+(.z+Y.b.b.Y.>.9+0+s@t@u@}+v@w@x@y@z@A@S s >.R 4+5 B@.@q+G.*+% @ + @ + + + + # # # @ ", +" + # # + + + + + + + + + @ @ @ @ @ @ @ @ @ C@G.D@E@F@b.b.b.b.b.b.t.R+G@H@I@,+f@N.g@J@K@L@*@b.b.b.b.b.b.>.(@z@6@;+M@n.M.c+<+N@O@X+Y+(.+@s R R S t P@6+Q@*.! @ @ @ + + + + + + # # @ + ", +" + # @ + + + @ + + + + @ } @ } } @ @ @ @ @ @ f.C@R@@.S@T@(.b.b.b.b.>.U@Y+X+%@V@v@!@W@X@Y@*@i+>.Y.b.b.Y.>.9+Z@`@ #~@.#M.N.N.+#v@@###0@i.>.R s R R $#Z+)+%#&#*#@ @ @ + + + + + + + @ # # + ", +" + # # + + + + + @ @ + @ @ } } L L =#@ @ @ @ @ @ L -#;#>#@@H.b.b.b.b.b.b.Y.Y.,#'#@#h@f+)#Y+>.Y.b.b.b.b.>.(@Z@y@!#!@[+N.N.N.N.N.M.T+;#~#{#/.Y.>.R R R R ..]#^#/#L } @ @ + + + + + + + + # # . ", +" + # @ + + + + + @ @ + @ L (#_#:#<#[#}#|#1#= @ @ @ @ }+-#2#3#4#5#(.b.b.b.b.>.U@Z._+6#7#_+0+A@>.Y.b.b.b.>.A@_.`@!#~@.#M.N.N.N.N.N.N.8#;#~#9#(@b.b.R s R E .0#a#*.L [ @ @ + @ @ + + + + + + # # . ", +" + # # + + + + + @ @ + @ [ b#c#d#e#f#g#h#i#j#k#@ @ @ N.N.,+v@l#m#I.H.b.b.b.b.b.b.>./.(@(@z+Y.Y.b.b.b.b.Y.>.n#t+o#!@.#N.N.N.N.N.N.N.N.r@p#q#9#(@b.b.b.R R E .r#s#t#} } @ @ @ + @ + + + + + + # # # . ", +" + # @ + + # @ @ + @ + @ L u#v#w#x#y#z#A#B#C#D#E#F#G#f@N.N.z.H#I#2#J#K#5#L#b.b.b.b.Y.>.>.z+Y.Y.b.b.b.b.>.A@z@M#u+~@[+M.N.N.N.N.N.N.y.N#O#P#0@i.>.b.b.b.Y.>.q t Q#R#S#@ @ @ @ @ @ + + # + @ + + + + @ # . ", +" + # # + + + + + + + + @ = k#v#T#U#V#W#X#Y#Z#`# $.$+$@$G#N.N.N.N..#-##$k.$$F@t.b.b.b.b.b.b.b.b.b.b.b.b.b.3.0+%$&$*$=$N.N.N.N.N.N.f@E+M@-$;$X+0+>$b.b.b.b.Y.z+r B G+,$o+' '$)$!$)$~${$@ + + + @ + + + + # @ @ ", +" + # @ + + + @ @ + @ + @ @ u#]$^$f#/$($_$Y#Y#:$<$[$}$|$+$1$N.N.N.N.M.d+N#2$3$4$5$7@b.b.b.b.b.b.b.b.b.b.>.a@@@6$7$u@n.M.N.N.N.N.N.N.+#N#O#;$8$@@H.7@b.b.b.Y.9$0$_.a$b$c$d$e$f$g$h$i$j$k$$ @ + + + + @ + + + + # @ ", +" + # # + + + + @ + + + @ n+l$v#m$n$o$($p$q$r$r$s$t$u$v$w$|$x$y$E+N.N.N.N.[+z$w.6#A$T@7@b.b.b.b.b.b.b.b.b.(.u.9@B$-#+#f@N.N.N.N.N.N.+#r@O#P#0@0+4.]@b.b.b.Y.U@z+7@H+C$D$E$F$G$H$I$J$K$L$M$N$O$@ + @ @ + + + + + # # @ ", +" . # @ + + + @ @ @ @ + @ @ P$Q$^$U#R$($S$q$q$q$q$T$T$U$V$W$X$Y$x$Z$N.N.N.N.:@g@m.D+3$A$5$t.b.b.b.b.b.b.>.>$@@`$;+b+d+M.N.N.N.N.N.N.,+z$ %P#{@@@9+L#b.b.b.Y..%+%@%t+'@#%$%%%&%*%=%-%;%>%,%'%)%!%@ @ + @ + @ + + + + # # @ ", +" . # # + + + + @ + @ + @ ~%{%]%T#^%/%(%p$q$r$r$q$T$T$T$T$t$u$v$_%Y$x$:%<%N.N.N.N.n.[%D+6#2+F@L#b.b.b.Y.b.i+Z.,@w+m.+#z.N.N.N.N.N.N.M.g@}%d@t+0+A@]@b.b.b.z+U@b.R+%$|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%@ + @ + + + + + + + @ + ", +" . @ # + + + @ @ @ @ + @ @ g%Q$h%i%/$j%S$q$q$r$q$T$T$T$T$T$T$U$k%[$l%Y$+$m%N.N.N.N.,+n.m. +3$$$5#Y.Y.b.>.t.@@n%;+L.}+M.N.N.N.N.N.N.N.U+o%p%{@I.A@L#b.b.b.Y..%+%Y+_+X@p+q%r%s%t%u%v%w%w%x%0%y%z%=%A%d%B%@ @ + # + + + + + + @ @ . ", +" + # # + + + + @ @ @ + @ ~%C%]%T#D%o$E%p$q$F%q$q$G%G%G%G%T$T$T$T$t$H%v$I%J%x$K%L%N.N.N.N.g@[%M%k.K#T@(.Y.A@z@6$w+>++#M.N.N.N.N.N.N.N.N.!@~@N%p@A@]@b.b.b.z+(@]@9+O%p%P%Q%R%S%T%9%U%V%W%X%Y%Y%Y%a%Z%`% &d%.&+&@ + + + + + + + + # @ + ", +" + # + + + + @ @ @ @ + @ @ (#Q$w#@&#&$&S$q$q$r$%&T$&&*&*&=&T$T$T$T$T$U$-&;&>&Y$+$,&N.N.N.N.,+[+N#O#'&)&9#>.5.c.:+I#}+z.N.N.N.N.N.N.N.N.N.!&w@~&3.b.b.b.b.Y..%+%{&8$W+]&^&/&(&_&:&v%0%Y%<&Y%X%Y%Y%Y%[&}&|&S%3%1&@ @ + @ + + + + + + # # + ", +" # # # + + + + @ @ + @ ~%(#v#2&3&4&E%p$q$q$q$_$5&6&7&8&9&;&6&5&t$T$T$0&t$H%a&I%Y$b&,&L%N.N.N.N.d+-#c&d&-+Y@;$!#e&+#M.N.N.N.N.N.N.N.N.N.N.T+f&s@i+3.>.>.z+.%]@5#%$w+g&h&i&j&k&l&m&n&<&[&[&o&Y%X%X%Y%Y%a%p&q& &r&s&!$@ + @ + @ @ + + + # # + ", +" @ # # # + + + + @ + @ @ C%Q$2&t&u&j%v&q$q$r$%&w&x&y&z&|$A&B&y&C&w&0&T$T$T$w&k%D&E&J%+$K%N.N.N.N.M..#!@-#>+$@[%8#y.f@N.N.N.N.N.N.N.N.N.N.N.d+N#;$F&i+(@/.9$G&T@{@H&o%I&J&K&L&M&m&0%<&o&[&[&[&[&Y%X%Y%Y%Y%[&N&|&O&P&s&@ @ + @ @ + + + + + # + ", +" @ # + + + + + @ + + Q&g%v#w#3&u&E%%&p$q$q$q$G%R&S&z&T&U&V&W&X&Y&x&5&t$T$T$0&Z&H%D&`&J% *.*<%N.N.N.N.M..#n.H#+#M.N.N.N.N.N.N.N.z.:@z.N.N.N..#+*w.N%0@5.j.@*I.9@#*$*%*&*j&**v%m&6%Y%[&[&[&[&[&[&o&Y%X%Y%Y%Y%a%=*-*;*>*,*!$@ + @ + + + + . @ # . ", +" + @ # + + @ + + + + @ '*|#m$t&)*j%%&q$q$q$q$G%*&5&`&!*~*L%<%F#{*]*9&^*/*0&T$T$T$Z&k%(*E&_* *:%N.N.N.N.N.N.f@z.N.N.N.N.N.N.N.N.z.:*E.* :@N.N.N.,+M@e+<*a+s@6#[*K.*$}*|*1*2*3*4*5*Y%<&[&[&[&[&[&[&[&[&Y%X%Y%Y%Y%[&6*|&7*>*k$@ @ + + + + + + + @ + ", +" + # + + + + + @ + = P$8*9*3&#&E%v&p$q$q$q$=&G%0*a*b*c*d*N.N.y$~*e*f*g*h*k%T$T$T$0&w&H%i*`&j*k*l*f@N.N.N.N.N.N.N.N.N.N.N.z.O.m*n*o*p*q*r*s*t*M.f@y.T+F+p##$c&@#u*v*R%w*x*v%<&y*[&Y%<&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%N&z*O&>*A*B*@ @ + + + + + # @ ", +" + @ # + + + @ + + @ k#C*D*t&E*$&p$q$q$q$q$T$*&&&E&b*F*M.f@N.N.N.N.1$G*H*y&I*J*T$T$T$T$t$k%K*L*M*,&N*N.N.N.N.N.N.N.N.N.N.N.:*O*P*Q*R*S*T*U*V*W*t*N.N.N.f@M.,+,+z.X*Y*Z*6*`*v%0%[&Y%Y%<&[&[&[&[&[&[&[&[&[&[&Y%Y%Y%Y%Y%[&3* =.=+=@=@ + + + + + + # # + ", +" @ @ # + + + @ + %.u#]$#=$=/$E%S$q$q$q$q$=&*&0*%=j*c*K%N.N.N.N.N.N.&=*===_%-=G%G%T$T$T$0&w&k%;=>=,=<%N.N.N.N.N.N.N.N.N.z.E.'=)=Q*!=~={=]=^=/=(=_==$:@N.N.N.N.x f%M$:=<=[=m&0%<&[&<&<&[&[&[&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%}=q&|=1=2=3=@ @ + + + # @ + ", +" @ # # + + + @ [ k#4=5=U#6=$&p$q$q$r$q$G%G%&&%=7=8=f@N.N.N.N.N.N.N.f@9=+$0=a=*&&&T$T$T$T$G%b=c=d=F*e=N.N.N.N.N.N.N.N.N.c+f=g=h=i=j=k=l=k=m=n=o=p=q=E.N.N.N.N.r=s=t=u=6%m&6%[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%Y%[&Z%v=w=+=@={$$ @ + + + @ @ + ", +" @ # @ + + # + + x=y=z=A=B=(%S$q$q$q$q$=&C=D=l%j*8=K%N.N.N.N.N.N.N.N.&=*=E=}$a&G%G%T$T$T$T$G%b=8&T&,=<%N.N.N.N.N.N.N.f@E.F=o*G=T*S*H=I=l=I=k=J=K=L=M=N=O.M.N.N.' O=+=*%P=w%m&[&[&[&[&[&[&[&<&<&o&[&[&[&[&[&[&[&[&<&Y%X%Y%Y%Y%a%Q=R=;*S=T=U=@ + + @ @ @ @ ", +"+ + # + + + + V=b#W=X=C#`#Y=q$q$F%r$q$G%t$w&Z=`= -f@N.N.N.N.N.N.N.f@<%,=.-+-9&@-J*T$T$T$T$G%0&U$#-.-,&N*N.N.N.N.N.N.f@c+$-%-/=&-*-I=l=l=l=l=l=l=l==---;->-,-f@N.} '-)-!-~-{-o&<&<&[&[&[&[&o&<&<&o&[&[&[&[&[&[&[&[&[&[&Y%X%X%Y%Y%]-^-<='%/-(-_-+ + + + # @ ", +"@ @ # + + + + :-<-[-}-|-1-:$q$q$q$q$=&C=h*E&2-3-K%N.N.N.N.N.N.N.N.y$~*4-0=5-6&5&T$T$T$T$G%*&V$Y&|$F*6-f@N.N.N.N.N.N.E.$-7-8-9-0-a-l=l=l=l=l=l=l=l=b-c-d-e-f-E.M.f@L g-h-i-j-k-7%w%[&[&[&[&[&<&<&[&o&<&<&[&[&[&[&[&[&[&o&Y%X%Y%Y%Y%l-m-n-o-p-B%# + + # # # + ", +"+ # # + + + q-c#r-s-t-Y=q$q$r$r$q$G%Z&k%u-j*v-M.N.N.N.N.N.N.N.w-x-*=y-z-A-B-t$0&T$T$T$G%0&C-a=D-x$d*N.N.N.N.N.N.z.c+F=%-8-&-b-I=l=l=l=l=l=l=l=l=l=I=H=c-E-F-G-H-z.N.[ I-J-K-j-6%n&0%<&[&[&[&[&[&[&<&Y%<&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%X%L-Z%M-N-O-f%P-+ + # # + ", +"@ @ # + + + @ Q-R-S-T-U-q$q$r$q$=&C=I*X$2-V-W-f@N.N.N.N.N.N.N.l*~*4-X-Y-B-Z-0&T$T$T$G%*&R&`- ;.;+;<%N.N.N.N.N.N.O.@;o*/=9-#;a-l=l=l=l=l=l=l=l=l=l=l=l=*-c-$;%;&;E.z.N.[ *;=;-;P=;;>;n&[&[&[&[&[&[&[&<&o&[&[&[&[&[&[&[&[&[&o&Y%X%Y%X%,;L-';);!;~;{;+ + # # + ", +"@ @ + + + q-q-];^;/;(;_;r$q$r$=&w&B-Z=j*:;L%N.N.N.N.N.N.N.w-l**=e*<;[;B-/*0&T$T$T$G%T$};|;1;2;3;N.N.N.N.N.N.z.:*4;r*G=&-5;I=l=l=l=l=l=l=k=I=l=l=l=l=l=I=6;7;8;9;0;H-z.N.L a;b;c;d;0%0%0%<&[&[&[&[&[&[&[&[&[&e;[&[&[&[&[&[&[&o&Y%Y%X%X%X%,;f;g;h;i;+ + # # + ", +"@ # # + + q-=#j;k;l;m;_;r$q$_;C=6&w$j*V-d*w-N.N.N.N.N.N.N.x-~*e*X-n;6&U$0&T$T$T$T$*&0&o;p;x$q;<%N.N.N.N.N.N.O.- r;h=T**-a-l=l=l=l=l=k=k=s;t;I=l=l=l=l=l=u;v;c-w;%;x;p.z.z.x y;R%z;A;M&7%0%[&[&[&[&[&[&[&[&<&<&<&[&[&[&[&[&[&o&Y%Y%X%X%X%B;C;D;%%E;+ + # # + ", +"+ @ # + + + q-F;G;H;Y=I;r$J;u$/%%=j*K;y$z.N.N.N.N.N.N.f@y$*=W&]*n;6&w&0&T$T$T$G%&&H%|;L;M;.*N.N.N.N.N.N.z.c+N;O;P;i=Q;I=l=l=l=l=I={=R;&-S;T;~=*-I=l=l=l=l=I={=7;U;V;W;W ,+M.X;Y;t=Z;`; >M&0%<&[&[&[&[&[&[&<&<&<&[&[&[&[&[&o&Y%X%Y%X%X%W%V%.>+>p-@>+ + # # + ", +"@ @ # + + + + #>$>%>l;Y=&>*>=>->2&;>>>= @ @ @ @ N.N.N.<%,>{*0='>6&w&t$T$T$T$T$*&C=)>1;+$d*<%N.N.N.N.N.N.O.- !>d-~>{>6;l=l=l=l=I=t;]>^>/>V;(>_>c-t;I=l=l=l=l=H={=c-w;e-:>E.f@<>[>}>h;|>`;N&7%0%[&[&[&[&[&[&[&[&[&[&[&[&[&[&Y%X%Y%Y%X%X%x%]-1>(&2>g-+ # # @ + ", +"+ . # + + + + 3>:-4>5>C#6>7>8>9>4='*@ @ @ @ @ @ N.N.&=,=4-]*0>6&U$0&T$T$T$G%*&B-A-a>b>Z$f@N.N.N.N.N.z.t*G-c>Q*d>Q;I=l=l=l=l=I=a-e>f>(>g>G-h>i>j>k>l>l=l=l=l=l=I=l>m>w;n>o>,-o.o.< [>p>q>r>s>Y%0%<&[&[&o&<&[&5*[&[&[&[&o&Y%X%Y%Y%0%W%Y%]-t>u>v>w>x>+ # # # ", +" . # # + + + $ %.y>z>E#A>B>;>P$C>[ @ @ @ @ @ @ @ w-*=D>E>8&B-/*0&T$T$T$T$*&F>G>H>+$y$N*N.N.N.N.N.N.c+I>J>K>L>M>H=l=l=l=l=l=k=0-N>O>P>I>x > :>n>Q>R>k=l=l=l=l=l=l=H=S*S>T>U>O.N.f@} X;2>V>W>a%7%X>[&[&<&Y%e;5*[&[&[&[&Y%X%X%Y%Y%0%6%[&Y>Z>`> ,.,' + # # + ", +" @ # # + + + + +,@,#,_#$,>>Q&@ @ @ @ @ @ @ @ '*%,4-z-&,B-R&0&T$T$T$G%=&B-9&*,+$=,f@N.N.N.N.N.z.O.N;-,Q*;,Q;l=l=l=l=l=k=6;]=>,,,',),,+N.:@E.!,~,j>n={,l=l=l=l=I=k=l=],^,/,4;f@N.N.%.(,_,:,`%}&M&0%e;[&<&e;[&[&[&<&Y%X%Y%Y%Y%<,Y%[&[,c;},|,1,+ + + @ @ . ", +" + @ # + + + + @ [ %.L [ [ @ @ @ @ @ @ @ @ @ 2,3,4,c=5,t$0&T$T$T$T$=&6,9&p;+$<%M.N.N.N.N.N.N.:*7,',d-8,M>l=l=l=l=l=l=k=l>9,0,a,b,:@N.N.N.N.W $-c,_>d,I=l=l=l=l=l=k=e,;,f,r*M.N.N.z.' O=g,-;`;h,i,Y%[&[&[&[&[&[&Y%X%Y%Y%Y%Y%x%Y%3*j,t=k,l,$ + + + @ + ", +" + # # + + + + + + @ + + @ @ @ @ @ @ @ @ '*m,n,f*o;B-R&0&T$T$0&G%*&o,y&*,+$1$f@N.N.N.N.N.z.O.4;p,Q*q,Q;r,l=l=l=l=k=H=s,R*T>g=t,:@N.N.N.N.N.,+,-g=0,u,s;k=l=l=l=l=k=s;v,w,x,:*z.N.N.z.%.s=f$y,z,z%a%0%e;[&[&Y%Y%X%Y%Y%0%w%w%]-A,B,},j$e%{$@ + + # @ + ", +" + # + + + + + + + + + + @ @ @ @ @ @ @ C,D,E,F,G,0&0&T$T$T$t$H,C=|;1;2;<%f@N.N.N.N.N.N.:*O*I,L=J,j=k=l=l=l=l=l=k=],K,L,o>E.z.N.N.N.N.N.N.N.z.f-M,N,e,k=l=l=l=l=l=l=R>^>O,* z.N.N.N.N.z.I-P,Q,R,p&v%e;[&[&Y%W%X>S,Y%W%8%9%T,U,V,W,B*+ + + . + # @ + ", +" + @ # + + + + @ + + @ @ + @ @ @ @ X,P$Y,Z,`,5,R&0&T$T$T$U$5,D&#-L;+$1$M.N.N.N.N.N.f@O.F=V*Q*K, 'H=l=l=l=l=k=l=k>!=T>r*.':@N.N.N.N.N.N.N.,-.'7-+'8,t;I=l=l=l=l=I=k=J,/=c>:@N.N.N.N.N.N.} @'#'$'q&%'<&0%Y%X%0%Y%Y%0%Y%&'t>*'},='@=-'+ + + + + # + ", +" + @ # @ + + + + + @ + @ + @ @ @ ;'|#>'u&*>0&0&T$T$T$T$-&D&,'Y$+$y$f@N.N.N.N.N.N.,+''h>)'8,l>k=l=l=l=l=l=r,],S;!'~'{':@N.N.N.N.N.N.N.M.m*~']'u,^'u;l=l=l=l=l=/'('_':'<'N.N.N.N.N.N.N.N.} ['}'|'b%1'0%2'Y%Y%Y%<,0%M&3'4'5' ,x>+ + + + + + # # + ", +" + # + . + + + + @ + + @ + @ @ 6'7'8'<$9'q$T$T$T$G%&&B->&|$ *m%N*N.N.N.N.N.N.M.O*c>0,9,S*6;l=l=l=l=I=k=s,N>T>0'$-:@f@N.N.N.N.N.N.,-.'a'L,b'^'v;l=l=l=l=I=t;c'd'e'<'f'N.N.N.N.N.N.N.N.f@o.g'h'i'r>z%m&w%Y%<,0%a%j'k'l'='@=~$@ + @ + + + # # ", +" + @ # # + + + + @ @ @ + @ @ 4=m'n'X#X#r$q$T$T$G%C=o'p'4-K%N.N.N.N.N.N.N.N.=$N;T>K,0-k=l=l=l=l=l=q'v;r's'I,{':@N.N.N.N.N.N.z.,+t'P*u'v']>H=l=l=l=l=l=('w'x'y'r*r.f@N.N.N.N.N.N.N.N.N.N.L ['z'.=A'4*Y%B'<,C'D',%E'F'G'+ @ @ + + + + # # + ", +" @ # # # + + + + + + + + @ |#H'I'J'K'q$q$q$T$G%*&C&L'M'+;f@N.N.N.N.N.N.z.> <'N'5;a-I=l=l=l=I=k=s,K,T>O'$-:@f@N.N.N.N.N.N.E.P'J>Q'Q>S*v;l=l=l=l=l=t;R'd'S'T'P',+N.N.N.N.N.N.N.N.N.N.N.@ %.w>U'y,R,}&8%S,V'W'X'Y'Z'_-@ + @ @ + + + # @ ", +" + @ # # + + + @ @ + @ <-`'f#S$p$q$q$r$q$G%*& ).).$+)K%G#N.N.N.N.N.z.''@)#)e,k=l=l=l=l=a-J=R*L,g={',+N.N.N.N.N.N.z.x t'r*$)u,]=H=l=l=l=l=l=('{,%)y'O;> z.N.N.N.N.N.N.z.O.,-,-O.M.@ @ $ r=&):,~-Z%*),%=)P,E$+ @ + + + + + + # # + ", +" . # # + + + + @ @ + -);>;)>)<$Y#Y#F%q$q$G%w&o,5-,)')))w-N.N.N.N.z.O*!)~)e,k=l=l=I=k=]>K,,,o>.':@f@N.N.N.N.N.N.E.$-c>G=>,e>{)l=l=l=l=l=t;#;>,])~'f=:*N.N.N.N.N.N.f@O.t'^)/)t'b,q-@ @ } ()_):)k&<)[)})|)~$+ + + + + + + # # . ", +" . # # + + + @ + + ~%>>1)->2)3)S$q$q$r$q$F%*&o,5-D-V&,&M.N.N.N.f@9.P>4)S*5)k=k=a-5;R*6)7),-,+N.N.N.N.N.N.z.O.t'',$)K,s,('l=l=l=l=I=('S*N>])8)),z.N.N.N.N.N.N.M.),f-o*9)0)q*a)b)) @ @ < f%p>c)d)P,(,+ + + + + + + + @ @ . ", +" # # + + + + + + [ = e)D,f)>)<$Y#Y#r$r$q$F%Z&k%&,,)g)x-w-N.N.N.o.b)h)i)j)k)l)m)%)n)o>t,M.N.N.N.N.N.N.N.=$P'',G=r'e>{=l=l=l=l=l=t;o)R*])h>),x N.N.N.N.N.N.z.p.!)p)q)r)d,S;s)x,t)o.@ } ' e%E;w>u)~$+ + + + + + + + @ + ", +" + # + + + + + @ + @ v)$,w)x#2)($S$q$q$q$q$F%*&@-5-x)V&.*f@N.N.f@y)z)A)E-T*B)C),,D)7,,+N.N.N.N.N.N.z.E.t'D),,S;R;a-l=l=l=l=I=E)F)G)])H)t,z.N.N.N.N.N.N.z.f=a,I)J)R;l)K)L)M)N)O)f=o.@ } $ %.} + @ + + + + + + # # @ ", +" + @ + + + + + + + @ L n+_#P)Q)>)($Y#q$r$r$q$G%Z&Z#5-,)x$N*f@N.N.:@> R)x,S)T)q*N=; :@N.N.N.N.N.N.N.c+P'r*Q'N>]>],H=l=l=l=l=k=U)!=0,h>V):*N.N.N.N.N.N.z.,+!)T>W)X)('k=Y)Z)`) !.!+!) @ @ @ } + + + + + + + + # # @ ", +" + # # + + + + + + @ @ @!m,#!$!2)(%S$Y#q$q$q$F%=&I*5-%!:;.*f@N.N.M.W G-&!*!&;y),+N.N.N.N.N.N.f@E.b)c>=!R*R;{=l=l=l=l=I=I=^'G)O>',$-z.N.N.N.N.N.N.z.t,-!;!_'~=t;k=>!Z)Y),!'!)!!!b,@ @ @ @ + + + + + + + # # @ ", +" + @ # + + + @ + @ + @ L ~%~!P)h#E*3)Y#q$F%r$q$G%T$Z&5- ;{!G#f@N.N.f@:@:*c+,+z.N.N.N.N.N.N.N.:@t,]!P;T*e>a-H=l=l=l=l=t;^!N>/!h>,-,+N.N.N.N.N.N.z.:@(!_!_'U)E)l=>!:!>!Y)3!4!d*N.N.N.N.N.N.N.N.N.N.N.N.N.N.E.$-c>$)Q>s,{)l=l=l=l=I=k=^'5!O>g=m*z.N.N.N.N.N.N.z.t,*!T)_'R>t;k=>!Z)>!>!H=J=^>6!7!) @ @ + @ @ @ + + + # @ @ ", +" . @ # # + + @ + @ @ + @ @ ~%8!9!3&o$$&Y#q$q$q$q$T$*&0!_%M',>N.N.N.N.N.N.N.N.N.N.N.N.N.z.a!!,b!T; 'H=l=l=l=l=l=k=c!d!!'e!x M.N.N.N.N.N.N.z.:@a,T>_'f!k=l=>!>!>!>!g!h!i=i!j!f'$ @ + @ + + + + + # # # ", +" . @ # + + + @ + @ @ + @ L @!k!#!l!m!E%_$Y#q$q$q$*&*&%=n!3-N.N.N.N.N.N.N.N.N.N.N.N.,+o!p!$)b']={)l=l=l=l=k=k=]=G)])e!q!z.N.N.N.N.N.N.z.f'O'T)W)R>k=k=>!Z)>!>!H=r!s!t!u!v!, } + + @ + + + + + # @ + ", +" . # # + + + + + + + + @ @ b#w!x!7>/;$&p$q$q$q$Y#=&y!%!c*N.N.N.N.N.N.N.N.N.N.N.N.,-t'z!T;e>u;l=l=l=l=l=k=s;u,L,%-,+z.N.N.N.N.N.N.z.O.A!z!b'U)t;l=>!>!>!>!B!*-C!D!E!F!) @ @ + + + + + + + # @ + ", +" + # # + + + + @ + @ + @ = v)z>G!f)H!E%%&Y#q$m;I!>&J!k*N.N.} K!f%< [ N.N.N.N.N.P'~'U*5;{=l=l=l=l=l=k=H=*-d-I,q!z.N.N.N.N.N.N.z.),h>T)b'R>E)k=>!Z)>!>!H=L!M!s)N!O!1!L @ + + @ + + + + + # + ", +" + # # + + + @ + + + + @ @ P!Q!1)^%R!3)%&Y#X#X#7>S!T!N.} U!V!!%W!X!L N.N.N.N.Y!x,Z!`!t;l=l=l=l=k=s;{= ~T>o!:@N.N.N.N.N.N.:@b,P>(>J)X)t;l=>!>!>!>!H=*-L>.~x,+~a;@ @ + @ + + + + + + @ + ", +" + # # + + + + @ + @ + @ = k#<-G!f)/$<$K'Y=E*@~_#'*' X;#~$~%~&~*~=~M.N.N.N.4;-~_>;~s;l=l=l=l=l=k=a-m)0,P'O.N.N.N.N.N.f@7,O)T)b' ~a-k=>!Z)>!>!B!L!L>s)>~,~b,%.@ + @ # @ + + + # # + ", +" + # @ + + + @ @ + @ + @ @ k#m,'~s-y#)~!~7>~~{~+,{;#~]~^~/~(~$'_~Z'L N.N.P'T'w;l)s;k=l=l=l=l=k=('o):~<~P':@z.N.N.:@> [~}~#)5;s;k=>!:!>!>!|~*-q,.~>~1~, @ @ + @ + + + + + + # # . ", +" + # # + + + + @ @ @ + @ = v)~!2~3~4~1)5~6~x X;7~8~9~0~a~A;b~i'c~d~z.N.,-t'e~X)/'c!k=l=l=l=l=/'E)f~G=/,V)t*N.f@y)g~h~J)^'a-k=>!Z)>!>!B!L!d>t!r;i~, %.@ + @ @ + + + + # + # + ", +" + # @ + + + @ @ @ @ + @ @ = k#-)j~k~= L '$l~m~n~o~]-v%9%p~q~r~_~s=@ :@W s~t~F)c!t;k=l=l=l=I=k=S*v'])u~F=E.''v~w~x~y~t;k=>!Z)>!>!6;l>z~d-A~v!y)@ @ + @ @ @ @ + + + # @ + ", +" + # # + + + @ + + @ + @ [ =#~%P!n+[ B~C~=)-*P=6%W%W%X>D~E~9~F~h'B~} :*<'~,>,('t;c!k=l=l=l=l=a-{,R*s'a'N;r*G~H~S*a-k=>!Z):!>!B!r!'!I~J~i~K~%.@ + @ @ @ + + + + # @ + ", +" + # # + + + + + + + + @ @ @ @ @ @ B*,*L~{-<,i,x%X%S,0%M~0~N~O~P~V!['Q~<'y'N>m)s;t;k=l=l=l=l=k=R;R~S~n>6)T~R>s;k=>!Z)>!>!6;J=K,U~q*1~o!@ @ + @ @ @ @ + + + # @ . ", +" + @ # + + + + + @ + + + @ @ @ } V~2>W~i,w%0%0%Y%X%Y%Y%[={-k&X~Y~@=Z~7,T'`~x'E)s;s;k=l=l=l=l=],{, ~ {.{+{],k=>!Z):!>!B!0-i=8-@{,~) $ @ + @ + @ + + + + # # . ", +" + # # # + + + + + @ @ + @ @ @ #{${%{&{[&x%0%Y%Y%X%Y%x%7%*{;%={&*-{;{b)T'u'!=5;t;k=k=l=l=l=l=l=k=t;k=k=k=>!Z)>!>!6;0->{,{'{v!){@ @ + @ + @ @ + + + # # + ", +" + # + + + + + + @ + @ + @ @ !{w>~{{{]{i,x%Y%Y%X%X%Y%Y%w%>;-%^{/{@';{7,*!w~B)E)e,s;l=l=l=l=l=l=l=l=l=>!Z)>!>!B!b-i=/=J>O!< $ @ + + + @ + + + + # # + ", +" . # # + + + + + + @ + + @ ({_{:{<{[{{-y%w%0%Y%Y%X%Y%w%}{4*|{1{/{-{2{b)h>u'>,{,k=s;k=l=l=l=l=l=l=>!Z)>!>!6;0-K,)''{3{4{@ @ + @ + @ @ + + + @ # + ", +" @ # # # + + + + + @ + + + %.5{})6{7{8{i,W%Y%Y%Y%X%Y%<&7%9{3'0{a{b{K~7,<'p)=-/'e,s;l=l=l=l=l=>!:!>!>!B!J=i=h=J>c{I-} @ + + + + + + + + # # + ", +" + . # @ + + + + + + + + + ~$w>d{O&e{{-Y%w%0%Y%Y%X%Y%m&7%&'/~1{f{y;g{Q~e!O>W)l>k=s;k=l=h{>!Z)>!>!|~L!R~8-(=,~4{+ @ + @ + @ @ + + + @ # + ", +" + # # # + + + + + + + @ {${;i{j{k{a%U%0%Y%Y%Y%Y%Y%<&}{}{l{c;m{n{<>7,<'o{d,5)e,s;l=>!>!>!>!p{q{i=d-r{v!I-@ @ + + + + + + + + # # + ", +" + @ @ # + + + + + + @ $ ~$s{t{.=u{o~W%w%<,Y%Y%X%Y%m&v%4*v{w{x{!%y{Q~0'(>z{5;r,A{B{>!>!B!C{M!D{E{i~> $ @ + @ + # + + + + @ # + ", +" + @ @ + + + + + + + + + B~{;F{G{H{8{w%0%<,Y%Y%X%Y%<,I{v%J{K{L{Q%M{N{,~h)K,O{p{r,|~P{q{Q{.~R{Y!a;@ @ + + + + + + + + # # + ", +" + @ @ # + + + + + + @ # ~$V!>*.=S{{-w%w%Y%Y%Y%X%Y%m&n&y*T{U{V{W{X{Y{Z{>~`{ ].]+]q,@]#]$]&;o!%.@ + @ + @ + + + + # # + ", +" + @ # # + + + + # # + + U=%]&]*]S{8{W%0%0%Y%Y%X%Y%0%I{=]3'-];]e$~$o.& 7!>]$),{8-,]']F!, @ @ + + + + @ + + + @ # + ", +" @ # # + + + + + + + ({'-)]&]c%!]{-U%w%Y%Y%X%X%<,w%6%[=|&~]{]]]o.L ^]Y![~(!/]Z{(]K~o.@ + @ + @ + # + + # # + ", +" @ # # + + + + + + + + a;_]:]<][][&X>W%0%Y%Y%X%Y%w%I{}]|]S%1]5{+ @ @ } } o.} @ @ @ + @ @ @ @ + + + @ # + ", +" @ # # + + + + + + @ {$~$2]3]|=j'3*9%w%Y%Y%Y%X%W%4]W%a%q&5]6]'-} @ @ } } @ @ @ + @ + + @ + + + # # + ", +" @ # # + + + + + + @ + '-7]8]G{9]5*Y%x%W%Y%Y%Y%Y%w%0]D'a]b]c]@=} @ @ @ @ + + + + + + + + + # # + ", +" @ # # + + + + + + @ {$B~V!d]e]Q=T,f]V%X%X%X%X%W%g]L-h]i]j]k]} } @ @ + @ + @ + + + + + # @ + ", +" @ # # + + + + @ @ @ + B*5{l]m]n]f;o]g]X%X%X%X%X%g]p]j-!;q]} @ + + + + + + + + + # @ # + ", +" @ # + + + + @ + + + ({B~r]M$s]t]s>4]W%X%X%B'x%]-u]v]w]2=+ + @ + @ @ @ + + + + + # + ", +" @ @ @ + + + + + + + + B*e%x]~]9]Z%X%U%U%g],;y]z]A]c]N$+ + + + + + + + + + # # @ ", +" + @ # + + + + + + + $ U=w>z'K&B]l-C]C;4]1>^{D]c]E]{$+ + @ + + + + + + # # @ ", +" + # # + + + + + + @ # B*F]G]H]I]J]K]~-L]M]N]s={$@ + + + + + + + @ # # . ", +" + # # # + + + + + + # -'O]P]Q]R]S]T]U]V]_-# + + + + + + + # # # @ ", +" + @ @ # + + + + + + $ W]X]6]r&/-Y]Y;Z]`]+ + + + + + @ @ @ @ + ", +" + @ @ # # + + + + + + + + + + + + + + + + + + # @ @ @ + ", +" . @ # # # # + + + + + + + + + + + + # # # @ @ @ ", +" + @ @ # # # # + + + + + + # # # # @ @ + ", +" + + . @ @ # # + + + + # # @ @ . + + ", +" + + @ # @ # # @ # @ + + ", +" + + . . . . + + ", +" + + + + "}; diff -Nru pcsx2-1.3.1+dfsg/linux_various/validate_glsl.sh pcsx2-1.4.0/linux_various/validate_glsl.sh --- pcsx2-1.3.1+dfsg/linux_various/validate_glsl.sh 2012-06-08 18:14:47.000000000 +0000 +++ pcsx2-1.4.0/linux_various/validate_glsl.sh 2016-01-05 17:28:08.000000000 +0000 @@ -23,8 +23,10 @@ # VERT="cgc -oglsl -profile glslv -po version=$GL_VERSION" # FRAG="cgc -oglsl -profile glslf -po version=$GL_VERSION" # Uniform buffer not supported on glsl ... -VERT="cgc -oglsl -profile vp40" -FRAG="cgc -oglsl -profile fp40" +#VERT="cgc -oglsl -profile vp40" +#FRAG="cgc -oglsl -profile fp40" +VERT="cgc -oglsl -profile gp5vp" +FRAG="cgc -oglsl -profile gp5fp" ###################################################### # Options @@ -102,7 +104,8 @@ head echo "#define FRAGMENT_SHADER 1" >> $TEST echo "$MACRO" >> $TEST - echo "Fragment check with macro : $MACRO" + echo "Fragment check with macro : " + echo "$MACRO" tail $FRAG $ENTRY $TEST @@ -114,13 +117,19 @@ ###################################################### if [ "$TEST_ZZOGL" = '1' ] ; then - ./test_shader.sh --input $INPUT --novert --m TEST_AEM 1 - ./test_shader.sh --input $INPUT --novert --m REGION_REPEAT 1 - ./test_shader.sh --input $INPUT --novert --m EXACT_COLOR 1 - ./test_shader.sh --input $INPUT --m WRITE_DEPTH 1 - ./test_shader.sh --input $INPUT + ./validate_glsl.sh --input $INPUT --novert --m TEST_AEM 1 + ./validate_glsl.sh --input $INPUT --novert --m REGION_REPEAT 1 + ./validate_glsl.sh --input $INPUT --novert --m EXACT_COLOR 1 + ./validate_glsl.sh --input $INPUT --m WRITE_DEPTH 1 + ./validate_glsl.sh --input $INPUT elif [ "$TEST_GSDX" = '1' ] ; then echo "not yet implemented" + # A very big shader example (124 instructions!) + ./validate_glsl.sh --input $INPUT --novert --entry ps_main --macro PS_TCC 0 --macro PS_TFX 0 --macro PS_IIP 1 --macro PS_ATST 4 --macro PS_FST 1 --macro PS_BLEND 4 --macro PS_COLCLIP 3 --macro PS_SHUFFLE 1 --macro PS_LTF 1 --macro PS_FMT 6 --macro PS_AEM 0 --macro PS_FBMASK 1 --macro PS_FOG 1 --macro PS_WMS 2 --macro PS_WMT 3 + + # TODO + # Maybe it would be nice to make several loop to iterate on various option and to monitor the impact on the instruction number + else if [ "$NOVERT" = '0' ] ; then vertex_test; fi if [ "$NOFRAG" = '0' ] ; then fragment_test; fi diff -Nru pcsx2-1.3.1+dfsg/locales/ar_SA/pcsx2_Iconized.po pcsx2-1.4.0/locales/ar_SA/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ar_SA/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ar_SA/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,7 +35,7 @@ "ePSXe or PCSX." msgstr "" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -43,33 +43,33 @@ "a lot of memory." msgstr "" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." msgstr "" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " "the recompilers listed above, if you resolve the errors." msgstr "" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " "count). Please consult the FAQs and Guides for further instructions." msgstr "" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -86,7 +86,36 @@ "below)." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -143,6 +172,13 @@ "Hero)." msgstr "" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -193,7 +229,7 @@ "progress will be lost. Are you sure?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -205,7 +241,7 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -213,17 +249,22 @@ "and re-enable it at any time using Config:Memory cards from the main menu." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" @@ -311,7 +352,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 @@ -322,19 +364,19 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -392,75 +434,91 @@ "%s, then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " "panel first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " "EE for each VU microprogram the game runs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -468,14 +526,14 @@ "slowdown (especially on dual core CPUs)." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " "this method of vsync will see little or no speedup from this hack." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -485,31 +543,31 @@ "timeslice, whichever comes first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -519,7 +577,7 @@ "disabled on-the-fly (video will typically be garbage)." msgstr "" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ar_SA/pcsx2_Main.po pcsx2-1.4.0/locales/ar_SA/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ar_SA/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ar_SA/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 1.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-08-14 09:51+0200\n" "Last-Translator: abdo123 \n" "Language-Team: Abdo 123 \n" @@ -24,15 +24,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "لم يعطى سبب معين " -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "خطأ تحليلي" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "إن الهاردوير الخاص بجهازك غير قادر على تشغيل PCSX2 . أس٠يا صاحبي ." @@ -95,7 +95,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "يتضمن أحداث معالجة خاملة Ùˆ بعض الإستخدامات الغير شائعة" -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "صيغة مل٠الـ ISO غير مدعومة " @@ -111,18 +111,18 @@ "إذا تم التشغيل من مل٠ISO هذا الخطأ ربما سببه صيغة مل٠ISO غير مدعومة أو " "خطأ ÙÙŠ دعم ملÙات الـ ISO" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "إن عملية MTGS أصبحت لا تستجيب أناء الإنتظار لملحق GS ليعمل" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr " لم يتم قراءة الحالة , على ما يبدو أنها Ùاسدة أو غير كاملة ." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -131,7 +131,7 @@ "الملحق لم يعمل على ما يبدو أنه لديك موارد غير كاÙية أو تعريÙ/هاردوير غير " "متواÙÙ‚ %s" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -140,17 +140,17 @@ "Ùشل الملحق s. بالقيام بعملية التهيئة ربما نظامك ليس لديه ذاكرة كاÙية أو " "الموارد اللازمة %s " -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "مل٠الملحق %s المضبوط ليس موجودا" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "مل٠الملحق المضبوط %s ليس مكتبة ديناميكية صالحة" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -159,19 +159,19 @@ "الملحق %s ليس ملحقا خاصا بـ PCSX2 أو هو لنسخة قديمة غير مدعومة حاليا ÙÙŠ " "هذه النسخة" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "وصلنا تقرير من الملحق أن الـ \"سوÙتوير\" أو التعاري٠غير مدعومة " -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "" "الملحق ليس ملحقا خاصا بـ PCSX2 أو هو لنسخة قديمة غير مدعوم ÙÙŠ النسخة الحالية " -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -180,11 +180,11 @@ "الملحق %s ليس ملحقا خاصا بـ PCSX2 أو هو لنسخة قديمة غير مدعومة حاليا ÙÙŠ " "هذه النسخة" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "ملحق كروت الذاكرة الخارجي Ùشل ÙÙŠ التهيئة " -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "ملحق لم يتم تشغيله" @@ -341,11 +341,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "سجل Ù…Ùصل لـCDVD" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "رسالة PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -353,31 +353,31 @@ "الـ savestate لم تحÙظ بشكل لائق . المل٠المؤقت أنشئ بنجاح لكن لم يتم نقله " "إلى مكان Ø­Ùظه الأخير" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "الأكثر أمانا" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "أمن ( أسرع )" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "متوازن" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "إندÙاعي" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "إندÙاعي بلس" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "على الأغلب مؤذي" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Ùشل ÙÙŠ إستبدال مل٠الإعدادات الأصلي , تم رÙض الأذن" @@ -385,99 +385,104 @@ msgid "Loading PS2 system plugins..." msgstr "يتم قراءة ملحقات الـ PS2" -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "SEE غير مدعوم من قيل معالجك PCSX2 يتطلب معالج يدعم SEE" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "حطأ ÙÙŠ الـ Rcompiler ÙÙŠ PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "كل هذه الإعدادات لهذه الجلسة Ùقط ولن ينم Ø®Ùظها\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "مل٠ISO" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "يعرض لائحة من الأوامر من أجل الإعدادات" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "يجبر سجل البرنامج على الظهور " -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "إستخدام وضع الشاشة الكاملة" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "إسنخدام وضع الناÙذة" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "يعطل عرض الواجهة الرسومية أثناء تشغيل الألعاب " -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "يشغل مل٠ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "يقلع قارء DVD ( سواقة ) Ùارغ ( من دون لعب ) يستخدم للوصول إلى نظام الـ PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "يقلع من ملحق الـ CDVD ( من السواقة متجاهلا وجود مل٠ISO" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "تعطيل جميع speedhacks ( هاكات السرعة ) " -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "إستخدام الÙاصلة المخصصة أو اللائحة المÙصولة منـ gamefixes ( إصلاحات الألعاب )" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "يعطل الـ fast booting ( الإقلاع السريع )" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "تغير مسار مل٠حÙظ الإعدادات " -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "تحديد مل٠إعدادات PCSX2 التي يجب إستخدامها " -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "يجبر %s ليبدأ بمعالج التشغيل لأول مرة" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "تÙعيل وضع العمليات المحمولة ( يتطلب صلاحيات مدير )" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "تحديد المل٠الذي سيستخدم كملحق الـ %s " -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr " خطأ ÙÙŠ تجاهل الملحق - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -487,94 +492,94 @@ "%s خطأ ÙÙŠ تجاهل الملحق ! المل٠التالي ليس موجودا أو انه غير صالح كملحق %s :\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "إضغط نعم لإستخدام لإستخدام الملحق المضبوط الأصلي أو إلغاء لإغلاق %s" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "خطا ÙÙŠ PCSX2 : نقص ÙÙŠ الهاردوير " -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "إضغط نعم لإغلاق %s" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr " خطأ حرج %s" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "حسنا" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "حسنا " -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "إلغاء" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr " إلغاء " -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr " تطبيق " -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr " التالي < " -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr " للخل٠>" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr " للخل٠" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr " إنتهى " -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr " نعم " -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr " لا " -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "إستعراض" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "Ùˆ إحÙظ " -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "إحÙظ كـ ..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr " مساعدة" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr " الرئيسية" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "عرض ناÙذة \"حول البرنامج \" " -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -584,41 +589,46 @@ "\n" "إضغط نعم للذهاب إلى لوحة إعداد الملحقات." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "تحذير لم يتم تشغيل ملحقات النظام . ربما PCSX2 غير صالح للعمل" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s إختيارات سطر الأوامر" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "خطأ ÙÙŠ الـ BIOS الخاص بـ PS2 " -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "إضغط حسنا للذهاب إلى لوحة ضبط الـ BIOS" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "تحذير لم يتم تشغيل ملحقات النظام . ربما PCSX2 غير صالح للعمل" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s إختيارات سطر الأوامر" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "العملية الغير المستجيبة لـ PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "إنهاء" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "تنÙيذ الجهاز الوهمي لـ PS2" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "إستعرض عن مل٠ISO ليس ÙÙŠ السجل ( التاريخ ) الحديث" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "إستعراض" @@ -664,51 +674,52 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "لا يمكن تطبيق الإعدادات الجديدة , أحدها عير صالح" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "سؤال عن حقظ السجل" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "يتسع لكثير من السجلات ÙÙŠ مساحة صغيرة " -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "صغير " -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "هذا ما أستخدمه ( المبرمج )" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "طبيعي" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "إنه جيد وقابل للقراءة" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "كبير " -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "ضخم" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "ÙÙŠ حالة لديك جهاز عرض ذو دقة عالية جدا" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "الأسلوب الإÙتراضي ذو اللون ناعم النبرة " -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "الثيم الخÙÙŠÙ" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -716,84 +727,94 @@ "الأسلوب الكلاسيكي الأسود للناس الذين يستمتعون بالحصول على نص محروق ÙÙŠ العصب " "البصري " -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "الثيم الأسود" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "دائما ÙÙŠ الأعلى" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "عندما يوضع علامة صح عليها سو٠تكون ناÙذة السجل Ùوق خلÙية النظام" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "إحÙظ" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "إحÙظ محتويات السجل إلى مل٠" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "مسح" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "مسح محتويات ناÙذة السجل" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "الشكل" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "إغلاق" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "أغلق ناÙذة السجل ( المحتويات محÙوظة )" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "يعرض السجلات الخاصة بمطوريّ PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "يقرا الـ CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "يظهر النشاط ÙÙŠ قراءة القرص ( DVD )" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "تÙعيل الكل" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "تÙعيل جميع Ùلترات المصدر الخاصة بالسجل" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "تعطيل الكل" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "تعطيل جميع Ùلترات المصدر الخاصة بالسجل" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "إستعادة الإعدادات الإÙتراضية" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "تÙعيل جميع Ùلترات المصدر الخاصة بالسجل" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "السجل" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "المصادر" @@ -806,48 +827,45 @@ msgid "About %s" msgstr "%s حول البرنامج" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "إختبار النسخ التجريبية" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "النسخ السابقة" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "مسؤوليّ المواقع" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "خبراء الملحقات" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "شكر خاص لـ" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "المطورون ( المبرمجون )" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "المساهمين" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "محاكي الـ Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "الصÙحة والمنتدى الرسميّن لـ PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "مستودع النسخ التجريبية ÙÙŠ GitHub الخاص بـ PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "لقد قرأت بما يكÙÙŠ" @@ -855,23 +873,19 @@ msgid "Assertion Failure - " msgstr "- خطأ تأكيدي" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "يحÙظ صورة من لوحة الإعدادات هذه بصيغة PNG" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "إحÙظ صور الحوار لـ" -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "مختار الـ BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "لا تظهر هذا الحوار مرة أخرى" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -879,7 +893,7 @@ "يلغي هذه الناÙذة المنبثقة وأي خيار ستختاره هنا سو٠يستخدم بشكل ألي " "( أوتوماتيكي) من الأن Ùˆ صاعدا" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -887,16 +901,89 @@ "هذه الناÙذة المنبثقة لن تظهر مرة أخرى هذه الإعدادات يمكن التراجع عنها من " "لوائح الإعدادات" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "تجاهل" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "إعادة تشغيل" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "المجلدات" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "خطأ (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "إنشاء كرت ذاكرة" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "إنشاء كرت ذاكرة جديد" @@ -918,30 +1005,30 @@ msgid "Select file name: " msgstr "حدد إسم ملÙ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "خطأ (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "إنشاء كرت ذاكرة" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "خطأ : لم نستطع إنشاء كرت الذاكرة" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "خطأ : لم نستطع إنشاء كرت الذاكرة" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "إستخدام ضغط \"NTFS \" عند إنشاء هذا الكرت" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [الأكثر تواÙقا]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -949,36 +1036,36 @@ "هذا هو الأساس الذي تستخدمه Sony Ùˆ هو مدعوم من قبل جميع الألعاب ونسخ الـ " "BIOS " -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "دائما إستخدم هذا الكرت إذا أردت الكرت الأكثر أماتا Ùˆ ثقة" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "حجم بعض كروت الذاكرة الغير أصلية يجب أن تعمل مع أغلب الألعاب" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "الكروت ذوات الحجم 16mb Ùˆ 32mb لديها تقريبا Ù†Ùس التواÙÙ‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -986,13 +1073,29 @@ "تحذير بإنخÙاض التواÙÙ‚ : نعم إنه كبير جدا لكنه ربما لن يعمل مع العديد من " "الألعاب " -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "" "إستخدمه نحن مسؤليتك الخاصة أداء غريب لكرت الذاكرة ممكن ( لكنه غير متوقع )" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1003,6 +1106,7 @@ msgstr "الإعدادات" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "مختار اللغة" @@ -1056,15 +1160,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "إخراج كروت الذاكرة بسكل ألي ( أوتوماتيكي ) عند تشغيل savestates" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "مدير كروت الذاكرة" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "إدخال أو إخراج الكروت من مأخذ الـ PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1126,24 +1234,24 @@ msgid "Game Fixes" msgstr "Game Fixes إصلاحات الألعاب" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "%s مختار المكونات" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "الملحقات " -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "المجلدات" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "%s الشكل أو الثيم" @@ -1165,47 +1273,51 @@ msgid "Terminate App" msgstr "إنهاء البرنامج" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "إن الإخراج من GS معطل" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Ø­Ùظ الحالة" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Ø­Ùظ اللعبة ÙÙŠ مرحلة معينة" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "تشغيل الحالة" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "يشغل اللعبة عند الحالة من المكان الحالي المختار" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "تشغيل الحالة الإحتياطية" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "يشغل اللعبة عند الحالة الإحتياطية من المكان الحالي المختار " -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "تقدم إالى المكان التالي" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "تقدم من خلال أمكنة الحالات مكان واحد" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "إرجع إلى الحالة السابقة" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "إرجع من خلال أمكنة الحالات مكان واحد" @@ -1222,7 +1334,7 @@ "يحدث هذا الخطأ عندما يتم وضع ملÙات متعددة ÙÙŠ %s النظام . ملق واحد ÙÙŠ المرة " "الوحدة من Ùضلك , شكرا" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "أكد إعادة تشغيل PS2" @@ -1240,376 +1352,376 @@ msgid "You have dropped the following ISO image into %s:" msgstr "لقد قمت بترك مل٠ISO التالي إلى %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Ùراع %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "نسخة إحتياطية" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "إظهار لوحة المراقبة" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "لوحة المراقبة إلى stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "النظام" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CDVD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "الضبط" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "متÙرقان" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "تصحيح" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "تهيئة ...." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "تشغيل مل٠ELF" -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "لتشغيل البيناري الخاص بـ PCSX2 مباشرة" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "القيام بنسخة إحتياطية Ùبل الخقظ" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "إصلاحات الألعاب الأليّة ( أوتوماتيكية )" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "بشكل ألي يتم تطبيق بعض إصلاحات الألعاب لبعض الألعاب المعروÙØ© بمشاكلها" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "تÙغيل الغش " -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "تÙعيل الـ Speedhacks ( هاكات السرعة )" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "تÙعيل إستضاÙØ© مل٠النظام" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "إغلاق" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "يمحي جميع الحالات الخاصة بالمحاكاة Ùˆ يقوم بإغلاق الملحقات" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "الخروج" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "إغلاق %s ربما يكون خطر على الصحة" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "مختار ملÙات الـISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "قائمة الملحقات" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "مل٠ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "يجعل مل٠الـ ISO المحدد الـ CDVD" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "ملحق" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "يتسخدم ملحق خارجي كـ CDVD" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "بدون قرص" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "" "إستخدم هذا الإعداد للوصول إلى إعدادات نظام الـ PS2 الوهمي ( الذي تمت " "محاكانه ) " -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "إعدادات المحاكاة" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "كروت الذاكرة" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "مختار ملÙات الـ BIOS أو الملحقات" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "معدّل قاعدة البيانات الخاصة بالألعاب" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "الÙيديو ( GS )" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "الصوت ( SPU-2 )" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "المتحكمات ( PAD )" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "مسح جميع الإعدادات" -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "يمحي جميع إعدادات %s Ùˆ يعيد تشغيل معالج الضبط لأول مرة" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "عن البرنامج" -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "تسجيل" -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "توق٠(مؤقت )" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "ÙŠ" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "إستعادة" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "يستعيد حالة المحاكاة الموقّقة مؤقتا" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "إيقاÙ\\إستعادة" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "لا يوجد عملية محاكاة Ùعّالة لا يمكن التعليق أو الإستعادة " -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "إعادة التشغيل" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "يحاكي عملية إعادة التشغيل ÙÙŠ الـ PS2 الوهمية" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "لا يوجد عملية محاكاة Ùعالّة قم بتشغيل شيئا ما أولا" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "إعادة تشغيل الـ CDVD ( الكامل )" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "إعادة تشغيل كاملة للمحاكاة" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "تشغيل الـ CDVD ( الكامل )" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "تشغيل الـ PS2 مستخدما الـ DVD المحدد أو مل٠الـ ISO المختار" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "إعادة تشغيل الـ CDVD (سريع)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "إعادة تشغيل الـ CDVD بإستخدام التشغيل السريع ( يتخطى شاشات الـ PS2 )" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "تشغيل الـ CDVD (سريع)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "إستخدم التشغيل السريع ليتخطى شاشات الـ PS2 " -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "لم يتم تشغيل أي ملحقات" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "إعدادات الـ GS الرئيسية" -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "يعدل إعدادت محاكاة الـ Hardware الخاص بـ PS2 المنظمة من قبل PCSX2 " -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "إعدادت الناÙذة" -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "يعدل شكل الناÙذة Ùˆ إعدادات الشكل متضمنا تسبة الجانب" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "إعدادات الملحق" -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Ùتح شاشة الإعدادات المتقدمة الخاصة بملحق %s " -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "محي جميع الإعدادان " -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "تأكيد أمر تغير مل٠الـ ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "هل تريد تبديل الأقراص أو تشغيل المل٠الجديد ( بإستخدام إعادة التشغيل )" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "تبديل الأقراص" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "تأكيد تغير الـ CDVD " -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "لقد إخترت تبديل الـ CDVD من %s إلى %s" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "هل تريد تبديل الأقراص أو تشغيل القرص الجديد ( من خلال إعادة التشغيل )" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "( كل %s المدعوم ) " -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "( ملÙات الأقراص %s )" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "حجب الإستخراجات (%s )" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "حجب الإستخراجات (%s )" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "(*.*) جميع الملÙات " -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "إختر مل٠الـ ISO كـ CDVD" +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "إختر مل٠الـ ELF" -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "! لم يتم إيجاد مل٠ISO " -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "حدث خطأ أثناء محاولة Ùتح المل٠:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." msgstr "خطأ : مل٠الـ ISO المختار ليس موجود إضغط حسنا لإختيار مل٠ISO جديد" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1617,7 +1729,7 @@ "لقد إخترت مل٠الـ ISO التالي لـ PCSX2 : \n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1630,7 +1742,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1643,19 +1755,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "إسم المل٠Ùارغ أو قصير للغاية" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "إسم المل٠خارج المسار المطلوب" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "إسم المل٠موجود أصلا " -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "الويندوز يمنع هذا المل٠من أن يتم إنشاؤه" @@ -1663,28 +1775,28 @@ msgid "Cannot apply settings..." msgstr "لا يمكن تطبيق الإعدادات" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "مسار البخث عن الـ BIOS" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "إختر مل٠الذي بداخله ملÙات BIOS" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "" "إنقر \"إستعراض\" لإختيار مل٠مختل٠الذي سيحاول PCSX2 إيجاد ملÙات BIOS بداخله" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "قائمة التحديث" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "إختر مل٠BIOS" @@ -1716,88 +1828,92 @@ msgid "None" msgstr "لا شيء" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "طبيعي" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU إعدادات معيد الترجمة المتقدمة" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "زيادة + علامة المحاÙظة" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "كامل" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr " VU0 / VU1 إعدادات معيد الترجمة المتقدمة" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "إضاÙÙŠ" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "المقاطع" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "على الأغلب أبطأ شيء موجود ÙÙŠ الكون" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "معيد الترجمة" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "يؤدي بوقت مناسب ترجمة من 64-bit MIPS-IV إلى X86" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "أيضا بطيء موجود لتشخيص الأخطاء" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "يؤدي بوقت مناسب ترجمة من 32-bit MIPS-I إلى X86" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "تÙعيل كاش الـ EE ( أبطأ )" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "وضع المقاطع Ùقط لأعمال إكتشا٠الأخطاء" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "إستعادة الإعدادات الإÙتراضية" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "وضع المقاطع لـ VU . بطيء Ùˆ ليس متواÙÙ‚ كثيرا يستخدم لأغراض تشخيصية " -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "وضع معيد الترجمة microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "وضع معيد للترجمة جديد للـ VU مع تواÙÙ‚ أحسن بكثير . مستحسن" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "وضع معيد الترجمة superVU ( قديم )" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "Ù…Ùيد ÙÙŠ تشخيص الأخطاء أو مشاكل اللقط ÙÙŠ وضع معيد الترجمة microVU" @@ -1966,7 +2082,7 @@ msgstr "تجاهل إتجاه الـ Bus ÙÙŠ عملية تحويل الـ Path3 - تستخدم للعبة Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -1995,87 +2111,92 @@ "تحذير : تÙعيل اليجل التتبعي هو بطيء بشكل نوعي لذلك هو السبب الأساسي ÙÙŠ مشاكل " "\"ماذا حدث للسرعة\"" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "لإختر ملÙا لكروت الذاكرة الخاصة بـ PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "إخراج" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "إستنساخ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "إعادة تسمية" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "إنشاء" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "إدخال" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "كرت :" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "إنشاء كرت ذاكرة جديد" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "إعادة تسمية كرت الذاكرة " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "إدخال" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "أخرج الكرت من هذا المدخل" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "أدخل هذا الكرت لمدخل" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "إنشاء مستنسخ من هذا الكرت" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "حذÙ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "خذق تام ونهائي لكرت الذاكرة هذا من القرص الصلب ( كل المحتويات سو٠تÙقد )" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "أنشأ كرت جديد وعيّنه لهذا المدخل " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "حذ٠المل٠الخاص بكرت الذاكرة " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "إستنساخ كرت الذاكرة" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Ùشل : يمكن Ùقط إستنساخ الكروت الموجودة" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2083,25 +2204,25 @@ "إختر إسما للمستنسخ \n" " ( سو٠تضا٠بشكل تلقائي ps2. )" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "%s Ùشل " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Ùشل النسخ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "كرت الذاكرة '%s' إستنسخ إلى '%s' " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "نجاح " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2110,121 +2231,126 @@ "إختر إسما جديدا لكرت الذاكرة '%s'\n" "( سو٠تضا٠بشكل تلقائي ps2. )" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "إعادة تسمية كرت الذاكرة " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "خطأ : لم يمكن إكمال إعادة التسمية \n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "المدخل -%u / Multitap -%u-- المدخل -1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr "Multitap-%u--المدخل -%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Ùارغ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "إختر مدخل لـ '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "أدخل الكرت" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "أخرج الكرت" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "أدخل الكرت ...." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "إستنساخ الكرت ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "إعادة تسمية الكرت ...." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "حذ٠الكرت " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "أدخل الكرت" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "أنشئ كرتا جديدا " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "حدّث القائمة " -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "مدخل الموجود ÙÙŠ الـ PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "إسم الكرت ( الملق )" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "حجم الكرت" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "تم تهيئته ( Ù…Ùرمت )" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "أخر مرة تم تعديله" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "أنشئ ÙÙŠ " -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "لا" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "نعم" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "الÙرامات ÙÙŠ الثانية الواحدة" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "الÙرامات ÙÙŠ الثانية الواحدة" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[ --الكروت الغير مستعملة--]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- لا يوجد كروت غير مستعملة --]" @@ -2257,11 +2383,11 @@ msgid "Select a document root for %s" msgstr "إختر ملÙا لـ %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "تطبيق" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "إجعل هذه اللغة الإÙتراضية ( الأساسية ) حاليا" @@ -2338,51 +2464,51 @@ "السبب : %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "إنهاء المهام ..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "تÙعيل الـ Speedhacks ( هاكات السرعة )" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "طريقة أمنة Ùˆ سهلة للتأكد أن جميع أن كل هاكات السرعة مطÙأة بشكل كامل" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "تغير كل الهاكات إلى الحالة الإÙتراضية والذي بناء على ذلك سيتم إطÙاؤهم" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [ غير مستحسن ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [ غير مستحسن ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "هاكات خاصة بوضع microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "هاكات mVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "تحسن جيد بالسرعة Ùˆ تواÙÙ‚ جيد , ربما يسبب رسوميات سيئة " -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr " (microVU1 متعدد العمليات ) MTVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2390,15 +2516,15 @@ "زيادة جيدة ÙÙŠ السرعة Ùˆ تواÙÙ‚ عالي , ربما يسبب تجمدات ( تعليقات ) ... ] " "مستحسن إذا كان لديك أكثر من 3 أنوية ÙÙŠ المعالج [" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "هاكات أخرى" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "تÙعيل إكتشا٠دوران الـ INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2406,22 +2532,22 @@ "زيادة ضخمة بالسرعة ÙÙŠ بعض الألعاب , تقريبا عدم وجدو تأثيرات جانبية للتواÙÙ‚ " "[مستحسن ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "تÙعيل إكتشا٠الـ Wait Loop" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "زيادة معتدلة ÙÙŠ السرعة لبعض الألعاب , مع عدم وجود أي تأثيرات جانبية معروÙØ© " "[ مستحسن ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "تÙعيل الـ DVD السريع " -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "وصول أسرع للقرص , يقلل من وقت القراءة [ غير مستحسن ]" @@ -2443,42 +2569,42 @@ msgid "Select a visual theme:" msgstr "إختر ثيما صوريّا" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "تعطيل الـ Framelimiting ( الحد من الÙرامات )" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Ù…Ùيد ÙÙŠ القبام بإختبارات الأداء , قم بالتبديل إلى هذا الخبار أثناء اللعب " "بضغط F4" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "تحديد معدل الÙرامات الأساسي :" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "تحديد معدل الÙرامات ÙÙŠ وضع \"بطء الحركة\"" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "تحديد معدل الÙرامات ÙÙŠ وضع \"التربو\"" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "معدل الÙرامات الخاص بألعاب NTSC :" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "الÙرامات ÙÙŠ الثانية الواحدة" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "معدل الÙرامات الخاص بألعاب PAL" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2486,19 +2612,19 @@ "خطأ أثناء تحليل إحدى إعدادات معدل الÙرامات الخاصة بـ NTSC أو PAL . الإعدادت " "يجب أن تكون أرقام عشرية طبيعية صالحة !" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "معطلة [ الإÙتراضي ]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "قم بالتخطي Ùقط أثناء وضع \"التربو\" ( قم بضغط TAB للتÙعيل ) " -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "تخطي مستمر" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2506,40 +2632,40 @@ "الوضع الطبيعي Ùˆ وضع التربو سو٠يقوم بتخطي الÙرامات . وضع \"بطء الحركة\" سو٠" "يظل معطل تخطي الÙرامات" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "الÙرامات التي يجب رسمها " -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "الÙرامات التي يجب تخطيها" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "إستخدام MTGS المتزامن " -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" "إنه لإكتشا٠الاخطاء وإصلاحها ÙÙŠ MTGS Ùقط Ùˆ هو يحتمل أن يكون بطيء للغاية " -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "يعطل كل ما يخرج من GS ( الرسوميات )" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." msgstr "يعطل كاÙØ© أنشطة ملحق GS , مثالي لإختبار أداء مكونات الـ EE" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "تخطي الÙرامات" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "المحد من الÙرامات " @@ -2574,7 +2700,7 @@ "log file for details." msgstr "لم يتم قراءة الحالة لنقص مكونات محوريّة . إنظر للسجل لمزيد من التÙاصيل " -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "( الإÙتراضي )" @@ -2594,7 +2720,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "مل٠الـ BIOS ليس موجودا الرجاء إعادة الضبط !" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2610,6 +2736,15 @@ msgstr "" "لم يتم إيجاد أطقمة التعليمات microVU يتطلب معالج مع MMX, SSE, Ùˆ SSE2 %s" +#~ msgid "Betatesting" +#~ msgstr "إختبار النسخ التجريبية" + +#~ msgid "BIOS Selector" +#~ msgstr "مختار الـ BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "إختر مل٠الـ ISO كـ CDVD" + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 -SSE2 مستحسن" diff -Nru pcsx2-1.3.1+dfsg/locales/ca_ES/pcsx2_Iconized.po pcsx2-1.4.0/locales/ca_ES/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ca_ES/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ca_ES/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-07-20 19:58+0100\n" "Last-Translator: Sergi Canaleta \n" "Language-Team: LANGUAGE \n" @@ -35,7 +35,7 @@ "ePSXe or PCSX." msgstr "" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -43,26 +43,26 @@ "a lot of memory." msgstr "" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." msgstr "" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " "the recompilers listed above, if you resolve the errors." msgstr "" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -73,7 +73,7 @@ "propietari (Una PS2 deixada no compte). Si us plau consulti les preguntes " "més freqüents i guies per obtenir més instruccions." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -90,7 +90,36 @@ "below)." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -158,6 +187,13 @@ "Hero)." msgstr "" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -208,7 +244,7 @@ "progress will be lost. Are you sure?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -220,7 +256,7 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -228,18 +264,23 @@ "and re-enable it at any time using Config:Memory cards from the main menu." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Avís: La gran majoria de jocs funcionen bé amb les opcions per defecte." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Avís: La majoria dels jocs funcionen bé amb les opcions per defecte." @@ -339,7 +380,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 @@ -350,19 +392,19 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -420,37 +462,53 @@ "%s, then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - velocitat de cicles per defecte. S'acosta molt a la velocitat de " -"l'Emotion Engine de la PS2." +"3 - Redueix la velocitat de cicles de l'Emotion Engine aproximadament un " +"50%. Incrementa moderadament la velocitat, però pot causar pampallugues a " +"sons i en bastantes cinemàtiques." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - Redueix la velocitat de cicles de l'Emotion Engine aproximadament un " "33%. S'incrementa lleument la velocitat amb els jocs i té una gran " "comptabilitat." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" +"1 - velocitat de cicles per defecte. S'acosta molt a la velocitat de " +"l'Emotion Engine de la PS2." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Redueix la velocitat de cicles de l'Emotion Engine aproximadament un " -"50%. Incrementa moderadament la velocitat, però pot causar pampallugues a " -"sons i en bastantes cinemàtiques." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - Desactiva el robament de cicles a la VU. La opció més compatible!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -458,7 +516,7 @@ "1 - Lleu robatori de cicles a la VU. Poca compatibilitat , però amb " "increments de velocitat en molts jocs." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -466,7 +524,7 @@ "2 - Robatori moderat de cicles a la VU. Encara menys compatibilitat, però te " "significants increments de velocitat en alguns jocs." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -474,7 +532,7 @@ "3 - Robatori màxim de cicles a la VU. Casi sense ús, està limitat, si poses " "això pot causar parpelleig o baixades de velocitat en la majoria de jocs." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -485,28 +543,31 @@ "frames. Si et trobes amb aquest problemes de emulació, desactiva el panell " "primer." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " "EE for each VU microprogram the game runs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -514,7 +575,7 @@ "slowdown (especially on dual core CPUs)." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -525,7 +586,7 @@ "jocs que no utilitzen aquest mètode de VSync veuran poc o cap augment de " "velocitat amb aquest hack." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -535,13 +596,13 @@ "timeslice, whichever comes first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -549,7 +610,7 @@ "Tingueu en compte que quan limitació de frames està desactivada, Els modes " "turbo i slowmotion no estaran disponibles tampoc." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -557,7 +618,7 @@ "Avís: A causa del disseny de maquinari de PS2, saltar els frames exactes és " "impossible. L'habilitació causarà greus errors gràfics en alguns jocs." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -565,7 +626,7 @@ "Activeu aquesta opció si pensa que sincronització de fil MTGS està causant " "accidents o errors gràfics." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -575,7 +636,7 @@ "disabled on-the-fly (video will typically be garbage)." msgstr "" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ca_ES/pcsx2_Main.po pcsx2-1.4.0/locales/ca_ES/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ca_ES/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ca_ES/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-07-27 01:15+0100\n" "Last-Translator: Sergi Canaleta \n" "Language-Team: ca_ES \n" @@ -22,15 +22,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "No hi ha una raó específica." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Error d'anàlisi" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "El hardware del teu ordinador no es capaç de fer servir PCSX2. Ho sentim " @@ -100,7 +100,7 @@ "Inclou el processament d'esdeveniments d'inactivitat i alguns altres usos " "d'esdeveniments poc comuns." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Format de fitxer no reconegut de la imatge ISO" @@ -116,73 +116,73 @@ "image type or a bug in PCSX2 ISO image support." msgstr "" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " "incompatible hardware/drivers." msgstr "" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " "resources needed." msgstr "" -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "El plugin de %s no ha estat trobat" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "El plugin de %s no es una llibreria dinàmica vàlida" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " "unsupported version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "El plugin reporta que el teu \"Hardware\" o \"Software\" o els seus \"Drivers" "\" no estan suportats." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " "unsupported version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "" -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "" @@ -327,41 +327,41 @@ msgid "Detailed logging of CDVD hardware." msgstr "" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." msgstr "" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" @@ -369,96 +369,100 @@ msgid "Loading PS2 system plugins..." msgstr "" -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "Desactiva tots els hacks de velocitat" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -466,135 +470,139 @@ "\n" msgstr "" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "Accepta" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&Accepta" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Desfés" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Desfés" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Aplica" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Endavant >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Endarrera" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Endarerra" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Finalitza" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Si" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&No" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Explora" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Guarda" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Guarda &Com" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Ajuda" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Inici" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" "Press Ok to go to the Plugin Configuration Panel." msgstr "" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Explora..." @@ -636,134 +644,144 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Restaura els valors per defecte" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Restaura els valors per defecte" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "" @@ -776,47 +794,44 @@ msgid "About %s" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Programadors" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Contribuents" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Un emulador de la Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Lloc oficial de PCSX2 i fòrums." -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "Repositori oficial de PCSX2 a Github." -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Ja n'he vist prou" @@ -824,44 +839,112 @@ msgid "Assertion Failure - " msgstr "" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "" -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "No ensenyis mes aquesta opció." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reinicia" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Carpetes" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "" @@ -883,76 +966,91 @@ msgid "Select file name: " msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -963,6 +1061,7 @@ msgstr "Opcións" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Seleccionador de llenguatges" @@ -1016,15 +1115,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1084,24 +1187,24 @@ msgid "Game Fixes" msgstr "Correccions de jocs" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Selector de components - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Carpetes" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Apariència/Temes - %s" @@ -1123,47 +1226,51 @@ msgid "Terminate App" msgstr "" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Guarda l'estat." -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Carga l'estat" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "" @@ -1178,7 +1285,7 @@ "please, thank you." msgstr "" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "" @@ -1194,382 +1301,382 @@ msgid "You have dropped the following ISO image into %s:" msgstr "" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Ensenya la consola" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistema" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Configuració" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Altres" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Executa l'arxiu ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Per executar directament els binaris PS2" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Fes una còpia de seguretat abans de guardar" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Reparació Automàtica de Jocs" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Automàticament aplica els pegats necessaris per a jocs amb problemàtiques " "conegudes." -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Activa els trucs" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Activa els pegats per a pantalles amplies" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Activa els arxius de sistema" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Apaga" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Apaga las màquines virtuals i els seus estats i tenca els plugins." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Surt" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Tancar el %s pot ser perillós per la teva salut" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Selector de ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menú del plugin" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Fa que la imatge ISO sigui el CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "" "Fa servir un plugin extern per a reconèixer des de un lector/gravadora el " "CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Sense Disc" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "" "Fes servir això per a entrar a una màquina virtual de la Playstation 2 per a " "configurar la BIOS." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Opcions d'&emulació" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Selector de Plugin/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Sons (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Controladors (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Reinicia totes les opcions..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Neteja totes les opcions del %s i torna a engegar el configurador." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Sobre PCSX2..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pausa/Inicia" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "No hi ha cap estat actiu; no pots pausar o iniciar." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Reinicia CDVD (Complet)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Inicia CDVD (Complet)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Inicieu la màquina virtual utilitzant el DVD o la imatge ISO" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Reinicia CDVD (Ràpid)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Inicia CDVD (Ràpid)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "" "Utilitza l'inicia ràpid per a esquivar l'inici de la Playstation 2 i la seva " "Splash Screen" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Opcions del nucli gràfic" -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Opcions de finestra" -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Opcions del plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Confirma el canvi de imatge ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Voleu canviar de disc o inicar amb la nova imatge (via reinicia del sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Canvia el disc" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1577,7 +1684,7 @@ "Tens seleccionada la següent imatge ISO en el PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1586,7 +1693,7 @@ "\n" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1595,19 +1702,19 @@ "\n" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "" @@ -1615,15 +1722,15 @@ msgid "Cannot apply settings..." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Directori de Busca de BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1631,13 +1738,13 @@ "Apreta el botó \"Explora\" per a seleccionar una carpeta diferent on PCSX2 " "mirar per a les roms de BIOS de PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Refresca la llista" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Selecciona una rom de BIOS:" @@ -1669,40 +1776,44 @@ msgid "None" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Opcions avançades del Recompilador de Emotion Engine / FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Intepretador" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Molt possiblement la cosa més lenta de l'univers." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompilador" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1710,11 +1821,11 @@ "Realitza una traducció binaria en cada moment d'el codi maquinari de 64 bits " "MIPS-IV a x86 (32 bits)." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Molt lent; per a fer proves de diagnòstic només." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1722,20 +1833,20 @@ "Realitza una traducció binaria en cada moment d'el codi maquinari de 32 bits " "MIPS-IV a x86 (32 bits)." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Activa la memòria cau per a Emotion Engine (Lent)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Només interpretador; fet servir per a diagnòstic" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Restaura els valors per defecte" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1743,22 +1854,22 @@ "Interpretador de Unitat Vectorial. Lent i no gaire compatible. Només a " "utilitzar per a diagnòstics." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nou recompilador de unitat vectorial amb una compatibilitat molt millorada. " "Recomanat." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1920,7 +2031,7 @@ msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -1947,229 +2058,238 @@ "of 'What happened to my FPS?' problems. :)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Extreu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Duplica ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Re nombra ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Crea ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Crea ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Targetes:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" "( '.ps2' will be added automatically)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Port de la PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr " Nom de la targeta (arxiu)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Mida de la Targeta" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatada" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tipus" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Ultima modificació" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Creada el dia" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "No" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Si" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "" @@ -2200,11 +2320,11 @@ msgid "Select a document root for %s" msgstr "" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Aplica" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "" @@ -2280,55 +2400,55 @@ "\n" msgstr "" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Activa els hacks de velocitat" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Una manera fàcil i segura de que tots els hacks de velocitat estan " "completament desactivats" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "Velocitat de cicles de Emotion Engine [No Recomanat]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "Robatori de cicles a la VU [No Recomanat]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "Hack de flag de MicroVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Bon augment de velocitat i alta compatibilitat, però pot causar mals gràfics " "a vegades... [Recomanat]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2336,15 +2456,15 @@ "Bon augment de velocitat i alta compatibilitat; pot causar penjaments al " "PCSX2... [Recomanat si tens més de 3 Nuclis]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Altres Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Activa la detecció de voltes de INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2352,22 +2472,22 @@ "Enorme augment de velocitat en alguns jocs, amb la gran majoria no te " "efectes interiors negatius. [Recomanat]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Activa la detecció de bucles d'espera" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Augment de velocitat moderat en alguns jocs, no es coneix cap problemàtica. " "[Recomanat]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Activa CDVD rapid" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Accés a disc més ràpid, menys temps de càrrega. [No Recomanat]" @@ -2389,77 +2509,77 @@ msgid "Select a visual theme:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Desactiva la Limitació de Frames" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Molt útil per a fer Probes de rendiment. Activa aquesta opció apretant F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Ajustament de velocitat de Frames:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Ajustament a càmera lenta:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Ajustament de Turbo:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Limit de frames en NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Limit de Frames en PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Desactivat [Per defecte]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Omissió només amb mode Turbo (Tabulació per a activar)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Omissió constant" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Frames a Dibuixar" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Frames a Omitir" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Utilitza la MTGS Sincronitzada" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2467,21 +2587,21 @@ "Per a la solució de problemes potencials, errors en els MTGS només, ja que " "és potencialment molt lent." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Omissió de Frames" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Limitador de Frames" @@ -2514,7 +2634,7 @@ "log file for details." msgstr "" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "" @@ -2532,7 +2652,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " diff -Nru pcsx2-1.3.1+dfsg/locales/cs_CZ/pcsx2_Iconized.po pcsx2-1.4.0/locales/cs_CZ/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/cs_CZ/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/cs_CZ/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2012-09-09 20:43+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-12-31 01:13+0100\n" "Last-Translator: ZbynÄ›k Schwarz \n" "Language-Team: ZbynÄ›k Schwarz\n" "Language: cs\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Virtaal 0.7.1-rc1\n" +"X-Generator: Poedit 1.8.5\n" "X-Poedit-KeywordsList: pxE\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SearchPath-0: pcsx2\n" @@ -38,7 +38,7 @@ "Herní disky Playstation nejsou PCSX2 podporovány. Pokud chcete emulovat hry " "PSX, pak si budete muset stáhnout PSX emulátor, jako ePSXe nebo PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -50,7 +50,7 @@ "pamÄ›ti, jako napÅ™. vypnutý nebo malý stránkovací soubor, nebo jiným " "programem nároÄným na paměť." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -58,7 +58,7 @@ "PCSX2 nemůže pÅ™idÄ›lit paměť potÅ™ebnou pro virtuální stroj PS2. ZavÅ™ete " "nÄ›které úlohy na pozadí nároÄné na paměť a zkuste to znovu." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -66,7 +66,7 @@ "Varování: NÄ›které z nastavených rekompilátorů PS2 nelze spustit a byly " "zakázány:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -76,7 +76,7 @@ "výraznÄ› zlepÅ¡ují rychlost emulace. Možná budete muset ruÅ™ne rekompilátory " "znovu zapnout, pokud vyÅ™ešíte chyby." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -86,7 +86,7 @@ "ze skuteÄného PS2, které vlastníte (půjÄení se nepoÄítá). Podívejte se " "prosím na NejÄastÄ›jší Otázky a Průvodce pro další instrukce." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -111,7 +111,45 @@ "správcovská oprávnÄ›ní, pak budete muset pÅ™epnout do režimu Uživatelských " "Dokumentů (kliknÄ›te na tlaÄítko níže)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" +"Prosím mÄ›jte na vÄ›domí, že výsledný soubor nemusí obsahovat vÅ¡echny uložené " +"pozice podle toho, kolik jich je na zdrojové paměťové kartÄ›." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" +"POZOR: PÅ™evod paměťové karty může chvíli trvat! Prosím, nezavírejte emulátor " +"bÄ›hem průbÄ›hu konverze i když nebude nÄ›jakou dobu reagovat na vstup." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" +"PÅ™evést tuto paměťovou kartu na běžný soubor paměťové karty .ps2 o velikosti " +"8 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" +"PÅ™evést tuto paměťovou kartu na soubor paměťové karty .ps2 o velikosti 16 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" +"PÅ™evést tuto paměťovou kartu na soubor paměťové karty .ps2 o velikosti 32 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" +"PÅ™evést tuto paměťovou kartu na soubor paměťové karty .ps2 o velikosti 64 MB." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -191,6 +229,16 @@ "karty po naÄtení uloženého stavu. Nemusí být kompatibilní se vÅ¡emi hrami " "(Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(Jen pro typ složka) Znovu indexuje obsah paměťové karty pokaždé, když ji " +"zmÄ›ní běžící program. To zamezí možnosti, že by na paměťové kartÄ› doÅ¡lo " +"místo pro uložené pozice." + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -267,7 +315,7 @@ "Tato Äinnost resetuje existující stav virtuálního stroje PS2; veÅ¡kerý " "souÄasný postup bude ztracen. Jste si jisti?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -287,7 +335,7 @@ "\n" "(poznámka: nastavení zásuvných modulů nejsou ovlivnÄ›na)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -297,7 +345,12 @@ "Pozice PS2 %d byla automaticky zakázána. Můžete tento problém opravit\n" "a znovu ji kdykoli povolit pomocí Nastavení:Paměťové Karty z hlavního menu." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "(FolderMcd) Paměťová karta je plná, nemohu pÅ™idat: %s" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -305,11 +358,11 @@ "Prosím zvolte platný BIOS. Pokud nejste schopni provést platnou volbu, pak " "stisknÄ›te ZruÅ¡it pro zavÅ™ení KonfiguraÄního panelu." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "UpozornÄ›ní: VÄ›tÅ¡ina her bude v pořádku s výchozím nastavením." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "UpozornÄ›ní: VÄ›tÅ¡ina her bude v pořádku s výchozím nastavením." @@ -428,19 +481,18 @@ "* Transformers" #: pcsx2/gui/Panels/GameFixesPanel.cpp:116 -#, fuzzy msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" -"Opravy her můžou obejít Å¡patnou emulaci v nÄ›kterých hrách.\n" -"Můžou ale také způsobit problémy s kompatibilitou a výkonem, takže nejsou " -"doporuÄeny.\n" -"Opravy her jsou použity automaticky, takže zde nic nemusíte nastavovat." +"Je lepší povolit 'Automatické Herní Záplaty' v hlavní nabídce a ponechat " +"tuto stránku prázdnou. ('Automatické' znamená: selektivní použití " +"specifických a otestovaných oprav v daných hrách). RuÄní opravy NEZVÃÅ Ã " +"výkon. VlastnÄ› jej mohou snížit." #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 -#, fuzzy msgid "" "Gamefixes can work around wrong emulation in some titles. \n" "They may also cause compatibility or performance issues.\n" @@ -448,11 +500,11 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" "Opravy her můžou obejít Å¡patnou emulaci v nÄ›kterých hrách.\n" -"Můžou ale také způsobit problémy s kompatibilitou a výkonem, takže nejsou " -"doporuÄeny.\n" -"Opravy her jsou použity automaticky, takže zde nic nemusíte nastavovat." +"Můžou ale také způsobit problémy s kompatibilitou a výkonem\n" +"\n" +"NejbezpeÄnÄ›jší je ujistit se, že vÅ¡echny opravy her jsou kompletnÄ› vypnuté." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -461,14 +513,14 @@ "Chystáte se smazat formátovanou paměťovou kartu '%s'. VÅ¡echna data na kartÄ› " "budou ztracena! Jste si naprosto a zcela jisti?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Selhání: Kopírování je povoleno pouze na prázdnou pozici PS2 nebo do systému " "souborů." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Selhání: Cílová paměťová karta '%s' se používá." @@ -550,35 +602,53 @@ "nemůžete provést výbÄ›r kvůli chybÄ›jícímu modulu nebo nedokonÄené instalaci " "%s, pak stisknÄ›te ZruÅ¡it pro uzavÅ™ení panelu Nastavení." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"-2 - Sníží množství cyklů EE asi o 50%. PrůmÄ›rné zrychlení, ale *způsobí* " +"zadrhávání zvuku ve spoustÄ› FMV." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"-1 - Sníží množství cyklů EE asi o 33%. Mírné zrychlení ve vÄ›tÅ¡inÄ› her s " +"vysokou kompatibilitou." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" -"Výchozí množství cyklů. Toto se blíže shoduje se skuteÄnou rychlostí " +"0 - Výchozí množství cyklů. Toto se nejblíže shoduje se skuteÄnou rychlostí " "opravdového EmotionEngine PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"Sníží množství cyklů EE asi o 33%. Mírné zrychlení ve vÄ›tÅ¡inÄ› her s vysokou " -"kompatibilitou." +"1 - Zvýší poÄet EE cyklů o 33%. Zvýší hardwarové nároky, ale může také " +"zvýšit FPS ve hÅ™e." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"Sníží množství cyklů EE asi o 50%. PrůmÄ›rné zrychlení, ale *způsobí* " -"zadrhování zvuku ve spoustÄ› FMV." +"2 - Zvýší poÄet EE cyklů o 50%. PodstatnÄ› zvýší hardwarové nároky, ale může " +"znatelnÄ› zvýšit FPS ve hÅ™e.\n" +"Toto nastavení může způsobit, že HRY SE NEMUSà SPUSTIT." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "Zakáže krádež cyklů VJ. NejkompatibilnÄ›jší nastavení" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -586,7 +656,7 @@ "Mírná krádež cyklů VJ. Nižší kompatibilita, ale jisté zrychlení ve vÄ›tÅ¡inÄ› " "her." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -594,7 +664,7 @@ "PrůmÄ›rná krádež cyklů VJ. JeÅ¡tÄ› nižší kompatibilita, ale výrazné zrychlení v " "nÄ›kterých hrách." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -602,7 +672,7 @@ "Maximální krádež cyklů VJ. UžiteÄnost je omezená protože toto způsobuje " "blikání grafiky nebo zpomalení ve vÄ›tÅ¡inÄ› her. " -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -612,17 +682,22 @@ "chyby, Å¡patný zvuk a Å¡patné údaje o SZS. Když máte problémy s emulací, tento " "panel zakažte nejdříve." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." -msgstr "" -"Nastavením vyšších hodnot na tomto Å¡oupátku úÄinnÄ› sníží rychlost hodin " -"jádra R5900 procesoru EmotionEngine a typicky pÅ™ináší velké zrychlení hrám, " -"které nemohou využívat plný potenciál skuteÄného hardwaru PS2. " +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." +msgstr "" +"Nastavení nižších hodnot na tomto posuvníku efektivnÄ› sníží rychlost " +"procesoru EmotionEngine R5900 a typicky pÅ™inese velké zrychlení ve hrách, " +"které nedokážou využít plný potenciál opravdového hardwaru PS2. Naopak vyšší " +"hodnoty efektivnÄ› zvýší rychlost, což může zvýšit FPS ve hÅ™e, ale taky budou " +"hry nároÄnÄ›jší na výkon a možná se objeví problémy." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -632,7 +707,7 @@ "Vyšší hodnoty zvyÅ¡ují poÄet ukradených cyklů od EE pro každý mikroprogram, " "který VJ spustí." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -642,7 +717,7 @@ "neustále. Toto je vÄ›tÅ¡inou bezpeÄné a Super VJ dÄ›lá standardnÄ› nÄ›co " "podobného." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -654,7 +729,7 @@ "jsou nekompatibilní a mohou se zaseknout. V případÄ› her omezených GS může " "dojít ke zpomalení (zvláštÄ› na poÄítaÄích s dvoujádrovým procesorem)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -664,7 +739,7 @@ "Äekání na vsynch, což hlavnÄ› zahrnuje ne-3D rpg hry. Ty, co tuto metodu v " "synch nepoužívají z tohoto hacku nedostanou žádné nebo malé zrychlení." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -679,7 +754,7 @@ "jednotky. Po prvním opakováním takovýchto smyÄek, pokroÄíme do doby další " "události nebo konce pracovního intervalu procesoru, co nastane dříve." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -687,7 +762,7 @@ "Zkontrolujte seznam kompatibility HDLoadera pro hry, známé, že s tímto mají " "problémy. (Äasto oznaÄené jako vyžadující 'mode 1' nebo 'slow DVD'" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -695,7 +770,7 @@ "Nezapomeňte, že když je omezení snímků vypnuté, nebudou ani také dostupné " "režimy Turbo a ZpomalenýPohyb." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -703,7 +778,7 @@ "UpozornÄ›ní: Kvůli hardwarovému designu PS2 je pÅ™esné pÅ™eskakování snímků " "nemožné. Zapnutím tohoto způsobí vážné grafické chyby v nÄ›kterých hrách." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -711,7 +786,7 @@ "ZapnÄ›te toto, pokud si myslíte, že synch vlákna VVGS způsobuje pády a " "grafické problémy." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -728,7 +803,7 @@ "Varování: Tato volba může být zapnuta za bÄ›hu ale typicky nemůže být takto " "vypnuta (obraz bude vÄ›tÅ¡inou poÅ¡kozený)" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/cs_CZ/pcsx2_Main.po pcsx2-1.4.0/locales/cs_CZ/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/cs_CZ/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/cs_CZ/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2012-09-09 20:41+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-12-31 01:17+0100\n" "Last-Translator: ZbynÄ›k Schwarz \n" "Language-Team: ZbynÄ›k Schwarz\n" "Language: cs\n" @@ -15,21 +15,21 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Virtaal 0.7.1-rc1\n" +"X-Generator: Poedit 1.8.5\n" "X-Poedit-KeywordsList: _;pxL\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Bez udání důvodu." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Chyba analyzování" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Váš hardware stroje je neschopen spustit PCSX2. SorÃ¡Ä chlape." @@ -96,7 +96,7 @@ msgstr "" "Zahrnuje zpracování neÄinné události a další neobyÄejné používání událostí." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Nerozpoznaný formát souboru obrazu ISO" @@ -112,19 +112,19 @@ "Pokud naÄítáte z obrazu ISO, tato chyba mohla být způsobena nepodporovaným " "typem obrazu ISO nebo chyba PCSX2 v podpoÅ™e obrazů ISO." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "Vlákno VVGS pÅ™estalo odpovídat pÅ™i Äekání na otevÅ™ení zásuvného modulu GS." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "Uložený stav nelze naÄíst, protože vypadá poÅ¡kozený nebo neúplný" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -133,7 +133,7 @@ "Zásuvný modul %s nelze otevřít. Váš poÄítaÄ může mít nedostateÄné zdroje, " "nebo nekompatibilní hardware/ovladaÄe." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -142,17 +142,17 @@ "Zásuvný modul %s nelze spustit. Váš systém možná nemá dostateÄnou paměť nebo " "potÅ™ebné zdroje." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Nastavený soubor zásuvného modulu %s nebyl nalezen" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Nastavený soubor zásuvného modulu %s není platná dynamická knihovna" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -161,14 +161,14 @@ "Nastavený zásuvný modul %s není platný modul PCSX2, nebo je pro starší " "nepodporovanou verzi PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Zásuvný modul hlásí, že Váš hardware nebo software/ovladaÄe nejsou " "podporovány." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -176,7 +176,7 @@ "Nastavený zásuvný modul není modul PCSX2. nebo je pro starší nepodporovanou " "verzi PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -185,11 +185,11 @@ "Nastavený zásuvný modul %s není platný modul PCSX2, nebo je pro starší " "nepodporovanou verzi PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "VnitÅ™ní zásuvný modul Paměťové Karty nelze spustit." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "UvolnÄ›ný Zásuvný Modul" @@ -345,11 +345,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Detailní záznam hardwaru CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Zpráva PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -357,31 +357,31 @@ "Uložený stav nebyl správnÄ› uložen. DoÄasný soubor byl úspěšnÄ› vytvoÅ™en ale " "nemohl být pÅ™esunut do svého posledního místa odpoÄinku." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "NejbezpeÄnÄ›jší" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "BezpeÄné (rychlejší)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Vyrovnaný" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresivní" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Agresivní plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "VÄ›tÅ¡inou Å kodlivý" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Nelze pÅ™epsat existující soubor nastavení; oprávnÄ›ní bylo zamítnuto." @@ -389,101 +389,104 @@ msgid "Loading PS2 system plugins..." msgstr "Nahrávám systémové zásuvné moduly PS2..." -#: pcsx2/gui/AppInit.cpp:49 -#, fuzzy +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "" -"Rozšíření SSE nejsou dostupná. PCSX2 vyžaduje procesor, který podporuje " -"instrukÄní sadu SSE." +"Rozšíření SSE2 nejsou dostupná. PCSX2 vyžaduje procesor, který podporuje " +"instrukÄní sadu SSE2." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Chyba/y Rekompilátoru PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "VÅ¡echny volby jsou pouze pro souÄasnou relaci a nebudou uloženy.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Soubor ISO" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "zobrazí tento seznam voleb příkazového řádku" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "donutí, aby záznam programu/konzola byly viditelné" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "použít GS režim na celou obrazovku" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "použít režim GS v oknÄ›" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "zakáže zobrazení rozhraní, když hry běží" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "spustí obraz ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" -"zavede prázdnou mechaniku dvd; použijte pro vstup do systémového menu PS2" +"zavede prázdnou mechaniku DVD; použijte pro vstup do systémového menu PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "zavádí ze zásuvného modulu CDVD (potlaÄí parametr IsoFile)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "zakáže vÅ¡echny hacky rychlosti" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "použít seznam oprav her urÄených Äárkami nebo svislými Äárami." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "zakáže rychlé zavádÄ›ní" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "zmÄ›ní cestu k souboru s nastavením" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "urÄuje, který soubor s nastavením PCSX2 použít" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "donutí %s spustit Průvodce Prvním SpuÅ¡tÄ›ním" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "povolí operace pÅ™enosného režimu (vyžaduje administrátorský/koÅ™enový přístup)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "urÄete soubor, který použít jako zásuvný modul %s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Chyba PotlaÄení Zásuvného Modulu - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -494,96 +497,96 @@ "platný modul %s:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "StisknÄ›te OK pro použití výchozího nastaveného zásuvného modulu, nebo ZruÅ¡it " "pro zavÅ™ení %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Chyba PCSX2: Hardwarová Vada" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "StisknÄ›te OK pro uzavÅ™ení %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kritická Chyba" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "ZruÅ¡it" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&ZruÅ¡it" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Použít" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Další >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &ZpÄ›t" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&ZpÄ›t" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&DokonÄit" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ano" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Ne" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Procházet" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Uložit" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Uložit &Jako..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&NápovÄ›da" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Domů" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Zobrazí dialogové okno O Programu " -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -593,43 +596,47 @@ "\n" "StisknÄ›te Ok pro pÅ™echod na Panel Nastavení Zásuvných Modulů." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Varování! Systémové zásuvné moduly nebyly naÄteny. PCSX2 může být " "nepoužitelný." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Volby Příkazového Řádku" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Chyba BIOSu PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "StisknÄ›te OK pro pÅ™echod na Panel nastavení BIOSu." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "Varování! Správný BIOS nebyl vybrán. PCSX2 nemusí být provozuschopné." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Volby Příkazového Řádku" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Neodpovídající Vlákno PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "UkonÄit" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "SpouÅ¡tím Virtuální Stroj PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Procházet pro Iso, které není ve VaÅ¡i nedávné historii" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Procházet..." @@ -675,51 +682,51 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Nelze použít nová nastavení, jedno z nastavení je neplatné." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Otázka uložení záznamu" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Nacpe spoustu záznamu do mikrokosmicky malé oblasti." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Malé" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "To, co používám já (programátor)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" msgstr "Normální" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Je hezké a Äitelné." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Velké" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Obrovské" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "V případÄ›, že máte displej s opravdu vysokým rozliÅ¡ením." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Výchozí barevné schéma jemných odstínů." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "SvÄ›tlý vzhled" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -727,139 +734,144 @@ "Klasický vzhled Äerné barvy pro lidi, kteří mají rádi text vypálen do jejich " "optických nervů." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tmavý vzhled" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Vždy NahoÅ™e" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "PÅ™i zaÅ¡krtnutí bude okno záznamu viditelné nad ostatními okny v popÅ™edí." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Uložit..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Uložit obsah záznamu do souboru" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&VyÄistit" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "VyÄistit obsah okna se záznamem" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Vzhled" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Zavřít" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Zavřít toto okno se záznamem; obsah je uchován" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Vývoj/VýřeÄný" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Zobrazí záznamy vývojářů PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Ätení CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Zobrazí aktivitu Ätení disku" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Povolit vÅ¡e" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Povolí vÅ¡echny filtry zdroje záznamů." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Zakázat vÅ¡e" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Zakáže vÅ¡echny filtry zdroje záznamů." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "Obnovit Výchozí" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Obnovit výchozí filtry zdrojů." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Záznam" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Zdroje" #: pcsx2/gui/Debugger/DisassemblyDialog.cpp:223 +#, fuzzy msgid "panel" -msgstr "" +msgstr "panel" #: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:35 #, c-format msgid "About %s" msgstr "O %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Beta testeÅ™i" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "PÅ™edchozí verze" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Správci Int. Stránek" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Odborníci Zásuvných Modulů" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Zvláštní podÄ›kování" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Vývojáři" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "PÅ™ispÄ›vatelé" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" -msgstr "Emulátor Playstation 2" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +msgid "PlayStation 2 Emulator" +msgstr "Emulátor PlayStation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Officiální stránka a Fóra PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 -#, fuzzy +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" -msgstr "Oficiální úložiÅ¡tÄ› Svn PCSX2 na GitHub" +msgstr "Oficiální repozitář Git PCSX2 na GitHubu" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Už jsem vidÄ›l dost" @@ -867,23 +879,19 @@ msgid "Assertion Failure - " msgstr "Selhání UplatnÄ›ní - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Uloží snímek tohoto panelu nastavení do souboru PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Uložit snímek obrazovky dialogového okna do..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "VýbÄ›r BIOSu" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Už toto dialogové okno nezobrazovat." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -891,7 +899,7 @@ "Zakáže toto vyskakovací okno a jakákoliv odpovÄ›Ä, kterou zde vyberete bude, " "odteÄ automaticky použita." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -899,16 +907,89 @@ "Vyskakující okno už se znovu nezobrazí. Toto nastavení může být zruÅ¡eno z " "panelů nastavení." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorovat" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "Znovu" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "ZruÅ¡it" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Resetovat" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "PÅ™evést paměťovou kartu do jiného formátu" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "PÅ™evést" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "PÅ™evést:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "Do:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "8MB Soubor" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "16MB Soubor" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "32MB Soubor" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "64MB Soubor" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" +"PÅ™evést tuto paměťovou kartu na složku obsahující individuální uložené " +"pozice." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "Složka" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Chyba (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "PÅ™evést paměťovou kartu" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "Cílový typ není podporován!" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "PÅ™evod paměťové karty selhal z neznámých důvodů." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "VytvoÅ™it novou paměťovou kartu" @@ -930,30 +1011,29 @@ msgid "Select file name: " msgstr "Vybrat jméno souboru:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Chyba (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "VytvoÅ™it paměťovou kartu" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "Chyba: Složka paměťové karty nemohla být vytvoÅ™ena." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Chyba: Paměťová karta nemohla být vytvoÅ™ena." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Použít komprimaci NTFS pÅ™i vytváření této karty." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [nejvíce kompatibilní]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -961,7 +1041,7 @@ "Toto je standardní velikost dodávaná Sony a je podporována vÅ¡emi hrami a " "verzemi BIOS." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -969,32 +1049,32 @@ "Používejte tuto volbu vždy, když chcete nejbezpeÄnÄ›jší a nejjistÄ›jší chování " "paměťové karty." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Typická velikost pro paměťové karty 3. strany, která by mÄ›la fungovat ve " "vÄ›tÅ¡inÄ› her." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 a 32 MB karty mají zhruba stejný faktor kompatibility." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1002,7 +1082,7 @@ "Varování nízké kompatibility: Ano, je velmi velká, ale nefunguje ve spoustÄ› " "her." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1010,6 +1090,28 @@ "Používejte na vlastní riziko. Je možné nestálé chování paměťové karty (i " "když nepravdÄ›podobné)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "Složka [experimentální]" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" +"Uložit obsah paměťové karty na hostitelský systém souborů místo jednoho " +"souboru." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" +"Automaticky spravuje obsah paměťové karty tak, že jen konzole vidí soubory " +"vztahující se k aktuálnÄ› spuÅ¡tÄ›nému programu. Umožní vám to pÅ™etahovat " +"soubory z a do paměťové karty prostÅ™ednictvím běžného správce souborů. To je " +"stále experimentální, takže to používejte na vlastní zodpovÄ›dnost." + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1020,6 +1122,7 @@ msgstr "Nastavení" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "VýbÄ›r jazyka" @@ -1073,15 +1176,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Automaticky vyjmout paměťové karty pÅ™i nahrávání uložených stavů" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "Automaticky spravuje uložené pozice podle právÄ› spuÅ¡tÄ›né hry" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Správce Paměťových Karet" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Táhnout karty do nebo z portů PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1145,24 +1252,24 @@ msgid "Game Fixes" msgstr "Opravy Her" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "VýbÄ›r SouÄástí - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Zásuvné Moduly" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Adresáře" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Motivy/Vzhledy - %s" @@ -1184,47 +1291,51 @@ msgid "Terminate App" msgstr "UkonÄit Aplikaci" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "Výstup GS je Zakázán!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "UkonÄit PCSX2?" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Uložit stav" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Uloží stav virtuálního stroje do souÄasné pozice." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Nahrát stav" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Nahraje stav virtuálního stroje ze souÄasné pozice." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Nahrát Zálohu Stavu" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "\"Nahraje zálohu stavu virtuálního stroje do souÄasné pozice." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Cyklovat do další pozice" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Cykluje souÄasnou pozici uložení ve stylu +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Cyklovat do pÅ™edchozí pozice" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Cykluje souÄasnou pozici uložení ve stylu -1!" @@ -1241,7 +1352,7 @@ "Je chyba pÅ™etahovat mnoho souborů do okna %s. Jeden po druhém prosím, " "dÄ›kujeme." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Potvrdit Resetování PS2" @@ -1259,277 +1370,276 @@ msgid "You have dropped the following ISO image into %s:" msgstr "PÅ™etáhli jste následující obraz ISO do %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Pozice %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Záloha" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Zobrazit Konzoli" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konzole na Výstup" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Systém" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Nastavení" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Ostatní" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&LadÄ›ní" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Zavádím..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Spustit ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Pro přímé spuÅ¡tÄ›ní souborů PS2" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "PÅ™ed uložením zálohovat" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatické Herní Záplaty" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Automaticky použije potÅ™ebné Herní Záplaty pro známé problematické hry" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Povolit Cheaty" -#: pcsx2/gui/MainFrame.cpp:429 -#, fuzzy +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" -msgstr "Povolit Záplaty" +msgstr "Povolit Záplaty pro Å¡irokoúhlé displeje" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Povolit Systém Souborů Hostitele" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Vypnout" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Smaže vÅ¡echny vnitÅ™ní stavy VS a vypne zásuvné moduly." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "UkonÄit" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "ZavÅ™ení %s může ohrozit VaÅ¡e zdraví" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "VýbÄ›r Iso" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu Zásuvného Modulu" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "UdÄ›lá z urÄeného obrazu ISO zdroj CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Zásuvný modul" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Používá externí zásuvný modul jako zdroj CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Žádný disk" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Toto použijte pro spuÅ¡tÄ›ní do nastavení BIOSu VaÅ¡eho virtuálního PS2." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "&Nastavení Emulace" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Paměťové karty" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&VýbÄ›r Zásuvných Modulů/BIOSu" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor Databáze Her" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Obraz (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Zvuk (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&OvladaÄe (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "VyÄistit vÅ¡echna nastavení..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "VyÄistí vÅ¡echna nastavení %s a znovu spustí průvodce pÅ™i spuÅ¡tÄ›ní." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "O Programu..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "Otevřít Okno LadÄ›ní..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Záznam..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pozastavit" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "BezpeÄnÄ› pozastaví emulaci a uchová stav PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "PokraÄovat" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Obnoví pozastavený stav emulace." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pozastavit/PokraÄovat" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Žádný stav emulace není aktivní; nelze pozastavit nebo pokraÄovat." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "restartovat" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Napodobí tvrdý reset virtuálního stroje PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Není aktivní žádný stav emulace; nÄ›co nejdříve zaveÄte." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Restartovat CDVD (úplnÄ›)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Tvrdý reset aktivního VS." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Zavést CDVD (úplnÄ›)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Zavést VS použitím souÄasného zdrojového média DVD nebo Iso" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Restartovat CDVD (rychle)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Restartovat pomocí rychlého ZAVEDENà (pÅ™eskoÄí úvodní obrazovky)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Zavést CDVD (rychle)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "" "Použít rychlé zavedení pro pÅ™eskoÄení spouÅ¡tÄ›cích a úvodních obrazovek PS2" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Nejsou naÄteny žádné zásuvné moduly" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Nastavení Jádra GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1537,93 +1647,93 @@ "ZmÄ›nit nastavení emulace hardwaru, regulované jádrem virtuálního stroje " "PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Nastavení Okna..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "ZmÄ›nit nastavení okna a vzhledu, zahrnující i pomÄ›r stran." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Nastavení Zásuvného Modulu..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "OtevÅ™e dialogové okno pokroÄilého nastavení zásuvného modulu %s." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Resetovat vÅ¡echna nastavení?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Potvrdit zmÄ›nu obrazu ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "Chcete vymÄ›nit disky nebo zavést nový obraz (pÅ™es reset systému)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "VymÄ›nit Disk" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Potvrdit zmÄ›nu zdroje CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Vybrali jste výmÄ›nu zdroje CDVD z %s na %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Chcete vymÄ›nit disky nebo zavést nový obraz (reset systému)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "VÅ¡e Podporované (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Obrazy Disku (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Výpisy bloků (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 -#, fuzzy, c-format +#: pcsx2/gui/MainMenuClicks.cpp:275 +#, c-format msgid "Compressed (%s)" -msgstr "Výpisy bloků (%s)" +msgstr "Komprimováno (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "VÅ¡echny soubory (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Vyberte zdrojové iso CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "Vyberte obraz disku, komprimovaný obraz disku a nebo block-dump..." -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Vyberte soubor ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Soubor ISO nenalezen!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Vyskytla se chyba pÅ™i pokusu o otevÅ™ení souboru:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1631,7 +1741,7 @@ "Chyba: Nastavený soubor ISO neexistuje. KliknÄ›te na OK pro vybrání nového " "zdroje ISO pro CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1639,7 +1749,7 @@ "Vybrali jste následující obraz ISO do PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1652,7 +1762,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1665,19 +1775,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Jméno souboru prázdné nebo příliÅ¡ krátké" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Jméno souboru mimo vyžadovaný adresář" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Jméno souboru již existuje" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "OperaÄní systém zabraňuje vytvoÅ™ení tohoto souboru" @@ -1685,15 +1795,15 @@ msgid "Cannot apply settings..." msgstr "Nelze použít nastavení..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Cesta pro hledání BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Vyberte adresář s romy BIOSu PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1701,13 +1811,13 @@ "KliknÄ›te na tlaÄítko Procházet pro vybrání jiného adresáře, kde bude PCSX2 " "hledat romy BIOSu PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Obnovit seznam" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Vyberte rom BIOS:" @@ -1739,71 +1849,75 @@ msgid "None" msgstr "Žádný" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normální" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/MKO PokroÄilé Možnosti Rekompilátoru" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Zachovat Znaménko" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Úplné" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VJ0 / VJ1 PokroÄilé Volby Rekompilátoru" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "PÅ™evadÄ›Ä" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Dost možná ta nejpomalejší vÄ›c ve vesmíru." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Rekompilátor" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "" "Provádí binární pÅ™eklad 'za bÄ›hu' 64 bitového strojového kódu MIPS-IV do x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "PÄ›knÄ› pomalý; poskytnutý pouze pro diagnostické úÄely." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "" "Provádí binární pÅ™eklad 'za bÄ›hu' 32 bitového strojového kódu MIPS-I do x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Povolit Vyr. Paměť EE (Pomalejší)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Pouze pÅ™evadÄ›Ä; pro diagnostické úÄely" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Obnovit Výchozí" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1811,22 +1925,22 @@ "PÅ™evadÄ›Ä Vektorové Jednotky. Pomalý a ne moc kompatibilní. Používaný pouze " "pro diagnostiku." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Rekompilátor mikroVJ" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nový rekompilátor Vektorové Jednotky s mnohem lepší kompatibilitou. " "DoporuÄeno." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Rekompilátor superVJ [zastaralé]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1990,22 +2104,23 @@ msgstr "Simulovat Ätení dopÅ™edu VIF1 FIFO. Opravuje pomalé naÄítání her." #: pcsx2/gui/Panels/GameFixesPanel.cpp:92 -#, fuzzy msgid "" "Delay VIF1 Stalls (VIF1 FIFO) - For SOCOM 2 HUD & Spy Hunter loading hang." -msgstr "Odložit zdržení VIF1 (VIF1 FIFO) - Pro SOCOM 2 HUD." +msgstr "" +"Odložit zdržení VIF1 (VIF1 FIFO) - Pro opravu zaseknutí bÄ›hem naÄítání SOCOM " +"2 HUD a Spy Hunter." #: pcsx2/gui/Panels/GameFixesPanel.cpp:96 msgid "Ignore Bus Direction on Path3 Transfer - Used for Hotwheels" msgstr "Nevšímat si smÄ›ru Å™adiÄe v pÅ™evodu Path3 - Použito pro Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "PÅ™epnout na softwarové vykreslování GSdx pÅ™i pÅ™ehrávání FMV" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" -msgstr "" +msgstr "PÅ™ednaÄíst TLB hack pro zabránÄ›ní minutí tlb v Goemon" #: pcsx2/gui/Panels/GameFixesPanel.cpp:115 msgid "Enable manual game fixes [Not recommended]" @@ -2031,87 +2146,91 @@ "Varování: Zapnutí sledování záznamu je obyÄejnÄ› velmi pomalé, a je to hlavní " "důvod v problémech s 'Co se stalo s mými SZS?'. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Vyberte adresář s paměťovými kartami PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Vyjmout" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Kopírovat ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "PÅ™ejmenovat ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "VytvoÅ™it ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "PÅ™evést ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Karta:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "VytvoÅ™it novou paměťovou kartu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "PÅ™ejmenovat tuto paměťovou kartu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Vložit ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Vyjmout kartu z tohoto portu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Vložit tuto kartu do portu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "VytvoÅ™it kopii této paměťové karty ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Smazat" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Natrvalo smazat tuto paměťovou kartu z disku (veÅ¡kerý obsah bude ztracen)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "VytvoÅ™it novou paměťovou kartu a pÅ™iÅ™adit ji k tomuto Portu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Smazat paměťový soubor?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Kopírovat paměťovou kartu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Selhání: Kopírovat lze pouze existující kartu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2119,25 +2238,25 @@ "Vyberte jméno pro kopii\n" "( '.ps2' bude pÅ™idáno automaticky)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Selhalo: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopírování selhalo!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Paměťová karta '%s' zkopírována do '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "ÚspÄ›ch" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2146,121 +2265,124 @@ "Vyberte nové jméno pro paměťovou kartu '%s'\n" "('.ps2' bude pÅ™idána automaticky)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "PÅ™ejmenovat paměťovou kartu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Chyba: PÅ™ejmenování nemohlo být dokonÄeno.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Prázdné" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Vyberte cílový port pro '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Vložit kartu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Vyjmout kartu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Vložit kartu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Kopírovat kartu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "PÅ™ejmenovat kartu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Smazat kartu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "PÅ™evést kartu" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "VytvoÅ™it novou kartu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Obnovit Seznam" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Port PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Jméno karty (souboru)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Velikost karty" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formátována" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 +#, fuzzy msgid "Type" -msgstr "" +msgstr "Typ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Naposledy ZmÄ›nÄ›na" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "VytvoÅ™ena" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Ne" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ano" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 -#, fuzzy +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" -msgstr "SZS" +msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 -#, fuzzy +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" -msgstr "SZS" +msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Nepoužité karty --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Žádné nepoužité karty --]" @@ -2293,11 +2415,11 @@ msgid "Select a document root for %s" msgstr "Vyberte koÅ™en dokumentů pro %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Použít" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Hned teÄ udÄ›lat z tohoto jazyka můj výchozí!" @@ -2377,22 +2499,22 @@ "Důvod. %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "DokonÄuji úkoly..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Povolit hacky rychlosti" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "BezpeÄný a jednoduchý způsob, jak se ujistit, že vÅ¡echny hacky rychlosti " "jsou úplnÄ› zakázané." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2400,34 +2522,34 @@ "Resetuje vÅ¡echny volby hacků rychlosti na jejich výchozí hodnoty, což " "následnÄ› vÅ¡echny VYPNE." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "Množství Cyklů EE [NedoporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "Krádež Cyklů VJ [NedoporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hacky mikroVJ" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "Hack Příznaku mVJ" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Dobré Zrychlení a Vysoká Kompatibilita; může způsobit grafické chyby... " "[DoporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "VVVJ (Vícevláknová mikroVJ1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2435,15 +2557,15 @@ "Dobré Zrychlení a Vysoká Kompatibilita; může způsobit zaseknutí... " "[DoporuÄeno pÅ™i 3+ více jádrech]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Jiné Hacky" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Povolit ZjiÅ¡tÄ›ní OtáÄení KPŘE" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2451,22 +2573,22 @@ "Velké zrychlení v nÄ›kterých hrách bez jakýchkoliv vedlejších úÄinků na " "kompatibilitu. [DoporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Povolit ZjiÅ¡tÄ›ní ÄŒekací SmyÄky" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Mírné zrychlení v nÄ›kterých hrách bez žádných známých vedlejších úÄinků. " "[DoporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Zapnout rychlé CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Rychlý přístup k disku, menší doba nahrávání. [NedoporuÄeno]" @@ -2490,42 +2612,42 @@ msgid "Select a visual theme:" msgstr "Vyberte grafický vzhled:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Vypnout Omezování Snímků" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "UžiteÄné pro spuÅ¡tÄ›ní zatěžovacích testů. Tuto možnost pÅ™epínáte ve hÅ™e " "stiskem F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Seřízení Základní Frekvence Snímků:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Seřízení Zpomaleného Pohybu:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Seřízení Turba:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Frekvence Snímků NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "SZS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Frekvence Snímků PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2533,19 +2655,19 @@ "Chyba pÅ™i analýze nastavení snímkovací frekvence NTSC nebo PAL. Nastavení " "musí být platná Äísla s plovoucí Äárkou." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Vypnuto [výchozí]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "PÅ™eskoÄit pouze když je použito Turbo (TAB pro zapnutí)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Neustálé pÅ™eskakování" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2553,19 +2675,19 @@ "Normální a Turbo omezují množství pÅ™eskoÄených snímků. Režim zpomaleného " "pohybu pÅ™esto vypne pÅ™eskakování snímků." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Snímky na Vykreslení" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Snímky na PÅ™eskoÄení" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Použít Synchronizovaný VVGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2573,11 +2695,11 @@ "Pouze pro Å™eÅ¡ení možných chyb v VVGS, protože je toto potenciálnÄ› velmi " "pomalé." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Zakázat vÅ¡echen výstup GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2585,11 +2707,11 @@ "ÚplnÄ› zakáže jakoukoli aktivitu zásuvného modulu GS; ideální pro měření " "výkonu hlavních souÄástí EE." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "PÅ™eskakování Snímků" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "OmezovaÄ Snímků" @@ -2630,7 +2752,7 @@ "Uložený stav nemůže být nahrán kvůli chybÄ›jícím důležitým souÄástem. " "ProhlédnÄ›te si záznam pro podrobnosti." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (výchozí)" @@ -2650,22 +2772,30 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Nastavený soubor BIOSu neexistuje. Prosím nastavte znovu." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 -#, fuzzy, c-format +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 +#, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " "SSE2 extensions." msgstr "" -"Rozšíření %s nenalezeno. Rekompilátor R5900-32 potÅ™ebuje hostitelský " -"procesor s rozšířením MMX, SSE, a SSE2." +"Rozšíření %s nenalezeno. Rekompilátor R5900-32 potÅ™ebuje hostitelské CPU s " +"rozšířením SSE2." #: pcsx2/x86/microVU.cpp:28 -#, fuzzy, c-format +#, c-format msgid "" "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." msgstr "" -"Rozšíření %s nenalezeno. mikroVJ vyžaduje, aby hostitelský procesor mÄ›l " -"rozšíření MMX, SSE, a SSE2." +"Rozšíření %s nenalezeno. microVU potÅ™ebuje hostitelské CPU s rozšířením SSE2." + +#~ msgid "Betatesting" +#~ msgstr "Beta testeÅ™i" + +#~ msgid "BIOS Selector" +#~ msgstr "VýbÄ›r BIOSu" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Vyberte zdrojové iso CDVD..." #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 DoporuÄeno" diff -Nru pcsx2-1.3.1+dfsg/locales/de_DE/pcsx2_Iconized.po pcsx2-1.4.0/locales/de_DE/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/de_DE/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/de_DE/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-06 09:06+0100\n" "Last-Translator: \n" "Language-Team: PCSX2\n" @@ -34,7 +34,7 @@ "ePSXe or PCSX." msgstr "PlayStation 1 (PSX) Spiele werden von PCSX2 noch nicht unterstützt!" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -45,7 +45,7 @@ "PCSX2 etwas mehr Speicher zu gewähren indem du nicht benötigte Programme " "beendest." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -53,14 +53,14 @@ "Es steht nicht genügend virtueller Speicher zur Verfügung bzw. der Speicher " "wird von anderen Programmen / DLLs belegt." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" "Einige der PCSX2 Recompiler konnten nicht starten und wurden deaktiviert:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -70,7 +70,7 @@ "wichtig um akzeptable FPS Raten zu erreichen. Du kannst versuchen die " "Recompiler über die Konfigurationseinstellungen zu reaktivieren." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -80,7 +80,7 @@ "dürfen wir dieses nicht mit PCSX2 vertreiben. Du musst daher das BIOS Abbild " "deiner eigenen PS2 benutzen! Näheres dazu in der FAQ." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -104,7 +104,36 @@ "Ordner zu erstellen. Falls du keine dieser Möglichkeiten hast, solltest du " "in den normalen Installationsmodus wechseln (klicke den folgenden Button)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -176,6 +205,13 @@ "Inkompatibel mit Guitar Hero und Spielen, die es nicht ermöglichen mehrmals " "nach einer Memory Card zu suchen." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -242,7 +278,7 @@ "progress will be lost. Are you sure?" msgstr "Diese Option wird die virtuelle PS2 resetten. Bist du dir sicher?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -257,7 +293,7 @@ "Ausführen des Konfigurationshelfers. %s muss dazu neu gestartet werden.Alle " "%s Einstellungen gehen verloren. Bist du dir sicher?" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -267,7 +303,12 @@ "Die Memory Card in Slot %d wurde automatisch deaktiviert. Du kannst dieses " "Problem via Konfiguration > Memory Card beheben." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -275,11 +316,11 @@ "Bitte wähle ein korrektes BIOS Abbild aus. \n" "Falls du dies nicht tun kannst, wähle Abbrechen." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Normalerweise müssen diese Einstellungen nicht angepasst werden." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Normalerweise müssen diese Einstellungen nicht angepasst werden." @@ -373,7 +414,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Spielefixes können spezifische, bekannte Fehler in einigen Spielen beheben. " "Sie sollten aber nur für diese Spiele aktiviert werden." @@ -389,7 +431,7 @@ "Spielefixes können spezifische, bekannte Fehler in einigen Spielen beheben. " "Sie sollten aber nur für diese Spiele aktiviert werden." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -398,14 +440,14 @@ "Hiermit wird die komplette Memory Card in Slot %s gelöscht. Bist du dir " "absolut sicher?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Fehler: Duplizieren ist nur in einen leeren PS2 Port oder in das Dateisystem " "erlaubt." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -480,47 +522,63 @@ "%s Installation keine gültige Konfiguration erstellen kannst, wähle " "Abbrechen." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." -msgstr "Deaktiviert" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "Stufe 3." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "Stufe 2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." -msgstr "Stufe 3." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "Deaktiviert" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "Kein Cycle Steal." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "Stufe 1." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "Stufe 2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." msgstr "Stufe 3." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -531,16 +589,20 @@ "Emulationsprobleme auslösen, daher empfehlen wir bei Fehlern zuerst die " "Speedhacks zu deaktivieren!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Erhöhen dieses Wertes untertaktet die virtuelle PS2 CPU (Emotion Engine). " "Daher läuft die Emulation etwas schneller aber viele Spiele laufen stockend." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -549,14 +611,14 @@ "\"Stiehlt\" der PS2 CPU einige Zyklen bei jeder VU Programmausführung. " "Geschwindigkeitsgewinn bei reduzierter Kompatibilität." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "Lässt einige VU Statusflags aus. Sicher." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -567,14 +629,14 @@ "zu erhöhen. Benötigt 3 oder mehr CPU Kerne und funktioniert nicht mit jedem " "Spiel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " "this method of vsync will see little or no speedup from this hack." msgstr "Kann gefahrlos aktiviert werden." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -584,7 +646,7 @@ "timeslice, whichever comes first." msgstr "Kann gefahrlos aktiviert werden." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -592,7 +654,7 @@ "Einige Spiele erwarten ein standardkonformes (langsam lesendes) DVD " "Laufwerk. Diese können dann hängenbleiben." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -600,7 +662,7 @@ "Deaktiviert den Framelimiter. Das Spiel läuft so schnell wie es dein Rechner " "ermöglicht." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -608,13 +670,13 @@ "Aufgrund des spezifischen Designs der PS2 ist ein akkurates Frameskipping " "nicht möglich. Versuche die Werte anzupassen oder benutze Speedhacks." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "Nur für das Debugging aktivieren. Sehr langsam." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -626,7 +688,7 @@ "Entfernt störende Faktoren von der Grafikkarte oder Treiberproblemen. Nur " "für PCSX2 Benchmarks interressant." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/de_DE/pcsx2_Main.po pcsx2-1.4.0/locales/de_DE/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/de_DE/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/de_DE/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: pcsx2\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-31 11:43+0100\n" "Last-Translator: \n" "Language-Team: PCSX2\n" @@ -19,15 +19,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Kein Grund angegeben." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Fehler beim Lesen" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Dieser Computer hat leider zu PCSX2 inkompatible Hardware. Sorry." @@ -92,7 +92,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "Idle Zeit und Anderes." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Unbekanntes ISO Dateiformat" @@ -109,19 +109,19 @@ "Dieser Fehler könnte durch ein nicht unterstütztes ISO Format oder einen Bug " "im ISO Code verursacht worden sein." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "Der MTGS Thread ist eingefroren." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Der Savestate konnte nicht geladen werden. Er ist korrupt oder unvollständig." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -130,7 +130,7 @@ "%s Plugin konnte nicht geöffnet werden. Dein Computer hat eventuell zu wenig " "Ressourcen oder inkompatible Treiber." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -139,17 +139,17 @@ "%s Plugin konnte nicht initialisiert werden. Dein Computer hat eventuell zu " "wenig Ressourcen oder inkompatible Treiber." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Das konfigurierte %s Plugin konnte nicht gefunden werden" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Das konfigurierte %s Plugin ist keine korrektes DLL Datei" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -157,20 +157,20 @@ msgstr "" "Das konfigurierte %s Plugin ist kein PCSX2 Plugin oder für eine alte Version" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Das Plugin meldet, dass deine Hardware oder Software nicht supported werden." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "" "Das konfigurierte %s Plugin ist kein PCSX2 Plugin oder für eine alte Version" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -178,11 +178,11 @@ msgstr "" "Konfiguriertes %s Plugin ist kein PCSX2 Plugin oder für eine alte Version" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Internes Memory Card Plugin konnte nicht Initialisiert werden." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin entladen" @@ -330,11 +330,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Detailierte CDVD Hardwarelogs." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 Nachricht" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -342,31 +342,31 @@ "Der Savestate wurde nicht korrekt gespeichert. Die temporäre Datei konnte " "zwar erstellt, aber nicht an den finalen Platz kopiert werden." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Sicher" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Sicher (schneller)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Ausbalanciert" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Aggressiv" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Aggressiv Plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Maximum" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Konnte existierende Konfigurationsdatei nicht überschreiben. Zugriff " @@ -376,7 +376,7 @@ msgid "Loading PS2 system plugins..." msgstr "Lade PS2 Systemplugins..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -385,95 +385,100 @@ "SSE Erweiterungen nicht verfügbar. PCSX2 benötigt einen Prozessor, der über " "SSE verfügt." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 Recompiler Fehler" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Alle Optionen sind nur für die aktuelle Sitzung und werden nicht " "gespeichert. \n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoDatei" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "Zeigt eine Liste der verfügbaren Kommandozeilenoptionen." -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "Macht Konsole ständig sichtbar" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "Benutze Vollbild GS Modus" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "Benutze Fenster GS Modus" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "Deaktiviere GUI Anzeige während Spiele laufen" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "Führt eine ELF Datei aus" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "Bootet mit einem lehren DVD Laufwerk. Benutze dies, um in das PS2 Systemmenü " "zu gelangen." -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "Bootet vom CDVD Plugin (override des IsoFile Parameters)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "Deaktiviert alle Speedhacks" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "Benutze die spezifizierte Komma oder Pipe-getrennte Liste von Spielefixes." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "Deaktiviert schnelles Booten" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "Ändert den Pfad zu den Konfigurationsdateien" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "Spezifiziert die zu benutzende PCSX2 Konfigurationsdatei" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "Lässt %s den Konfigurationshelfer starten" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "Aktiviert den portablen Installationsmodus (benötigt Adminrechte)." -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "Wähle die Datei, welche als %s Plugin genutzt werden soll" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Plugin Override Fehler - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -484,96 +489,96 @@ "ungültig: %s Plugin:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Drücke OK um das Standardplugin zu benutzen, oder Abbrechen um %s zu " "schließen." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 Fehler: Hardwareproblem" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Wähle OK um %s zu schließen." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kritischer Fehler" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Abbrechen" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Abbrechen" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Anwenden" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Weiter >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Zurück" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Zurück" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Fertigstellen" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ja" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Nein" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Suche" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Speichern" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Speichern &als..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Hilfe" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Home" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Zeige About Dialog" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -583,41 +588,46 @@ "\n" "Drücke OK um in das Pluginkonfigurationsmenü zu gelangen." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "Warnung! Systemplugins sind nicht geladen. PCSX2 kann inoperabel sein." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Kommandozeilenoptionen" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS Fehler" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Wähle OK um in das BIOS Konfigurationsmenü zu gelangen." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "Warnung! Systemplugins sind nicht geladen. PCSX2 kann inoperabel sein." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Kommandozeilenoptionen" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 nicht antwortender Thread" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Beende" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Lasse PS2 Virtuelle Maschine laufen..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Wähle ein ISO das nicht in der Liste der letzten Dateien ist." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Suche..." @@ -665,134 +675,145 @@ "Konnte neue Einstellungen nicht anwenden, eine Einstellung muss ungültig " "sein." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Speiche Logfrage" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Packt viel Info in ein kleines Fenster." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Klein" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Das, was ich auch nutze (der Programmierer)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Nett und lesbar." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Gross" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Riesig" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Für Riesendisplays." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Standard Farbschema." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Helles Thema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "Klassisch tiefschwarz :)" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Dunkles Thema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Immer im Vordergrund" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Hält das Logfenster im Vordergrund." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Speichern..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Speichere Logfensterinhalt in eine Datei" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "Löschen" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Lösche Logfensterinhalt" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Ansicht" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Schließen" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Schließe dieses Logfenster; Inhalt wird beibehalten." -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Ausgiebig" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Zeige PCSX2 Entwicklerlogs" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD Zugriff" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Zeigt CD/DVD Leseaktivität" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Aktiviere alle" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Aktiviere alle Logquellenfilter." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Deaktiviere alle" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Deaktiviere alle Logquellenfilter." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Standardeinstellung" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Aktiviere alle Logquellenfilter." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Log" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Quellen" @@ -805,48 +826,45 @@ msgid "About %s" msgstr "Ãœber %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Vorherige Versionen" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmasters" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Plugin Spezialisten" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Vielen Dank an" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Entwickler" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Mithelfer" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Ein Playstation 2 Emulator" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 offizielle Webseite und Foren (Englisch)" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "Offizielles PCSX2 SVN Repository auf GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Danke, habe genug gesehen" @@ -854,23 +872,19 @@ msgid "Assertion Failure - " msgstr "Assertion Fehler - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Speichert einen Screenshot dieser Einstellungen in eine PNG Datei." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Speichere Dialog Screenshots nach..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS Wählen" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Zeige diesen Dialog nicht noch einmal." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -878,7 +892,7 @@ "Deaktiviert dieses Popup von nun an. Die gewählte Einstellung wird die " "Standardeinstellung werden." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -886,16 +900,89 @@ "Dieses Popup wird nicht noch einmal erscheinen. Diese Einstellung kann im " "Menü rückgängig gemacht werden." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorieren" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reset" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Ordner" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Fehler (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Erstelle Memory Card" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Erstelle neue Memory Card" @@ -917,30 +1004,30 @@ msgid "Select file name: " msgstr "Wähle einen Dateinamen:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Fehler (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Erstelle Memory Card" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Fehler: Die Memory Card konnte nicht erstellt werden." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Fehler: Die Memory Card konnte nicht erstellt werden." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Benutze NTFS Kompression beim Erstellen der Karte." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [Standard, kompatibel]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -948,38 +1035,38 @@ "Dieses ist die Standardgröße der Sony Memory Cards. Alle Spiele unterstützen " "sie." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "Nutze diese Option, um die sichersten Memory Cards zu Erstellen." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Eine typische Drittherstellergröße für Memory Cards welche gut mit Spielen " "funktionieren sollte." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 und 32MB Karten sind gleich gut kompatibel." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -987,7 +1074,7 @@ "Warnung: Diese Karte wäre zwar sehr gross aber viele Spiele werden damit " "nicht funktionieren." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -995,6 +1082,22 @@ "Auf eigenes Riskio benutzen. Fehlerhaftes Memory Card Verhalten ist möglich " "(aber unwahrscheinlich)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1005,6 +1108,7 @@ msgstr "Einstellungen" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Sprache:" @@ -1058,15 +1162,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Werfe Memory Cards aus nach einem Savestate Ladevorgang" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Memory Card Manager" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Drag und Drop zu / aus PS2 Ports." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1130,24 +1238,24 @@ msgid "Game Fixes" msgstr "Spielefixes" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Komponenten Selektoren - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Ordner" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Ansicht/Themes - %s" @@ -1169,47 +1277,51 @@ msgid "Terminate App" msgstr "Schließe Anwendung" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS Ausgabe deaktivert!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Speichere Savestate" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Speichert den Status der virtuellen Maschine im aktuellen Slot" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Lade Savestate" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Lädt einen Savestate vom aktuellen Slot." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Lade Savestate Backup" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Lädt einen Savestate vom Backup des aktuellen Slots." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Wähle nächsten Slot" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Inkrementiert den aktuellen Slot um 1." -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Wähle vorherigen Slot" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Dekrementiert den aktuellen Slot um 1." @@ -1224,7 +1336,7 @@ "please, thank you." msgstr "Bitte nur eine Datei zur gleichen Zeit in das %s Fenster ziehen." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Bestätige PS2 Reset" @@ -1242,370 +1354,370 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Du hast die folgende ISO Datei in %s gezogen:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Backup" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Öffne Konsole" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsolenausgabe nach Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&System" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfiguration" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Verschiedenes" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Initialisiere..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Lade ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Um PS2 Anwendungen (Homebrew) direkt zu laden." -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Backup vor dem Speichern" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatische Spielefixes" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Aktiviert benötigte Spielefixes für bekannte Spiele automatisch" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Aktiviere Cheats" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Aktiviere Widescreen Patches" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Aktiviere Host-Dateisystem" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Herunterfahren" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Löscht alle VM Daten und Plugins und fährt VM herunter" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Verlassen" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%s zu verlassen kann gesundheitsschädlich sein." -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ISO Wählen" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Plugin Menü" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Macht die gewählte ISO Datei zur CDVD Quelle." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Benutzt ein externes Plugin als CDVD Quelle." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Keine Disk" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Benutze dies, um in dein PS2 BIOS zu Booten." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Emulations&einstellungen" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Memory Cards" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Plugin/BIOS Selektor" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Spieldatenbankeditor" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Audio (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Kontroller (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Lösche alle Einstellungen..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Löscht alle %s Einstellungen, um den Setup Wizard neu auszuführen." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Ãœber..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Logging..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pause" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Pausiert Emulation und sichert den PS2 Status." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Fortsetzen" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Setzt den angehaltenen Emulationsstatus fort." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pause/Fortsetzen" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Kein aktiver VM status; Kann nicht Anhalten oder Fortsetzen." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Neustart" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simuliert einen Hardware Reset der PS2 VM." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Kein aktiver Emulationsstatus; Boote zuerst etwas." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Neustart (Vollständig)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Reset der aktiven VM." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Starte CDVD (Vollständig)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Starte die VM mit der aktuellen DVD oder der ISO Datei." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Reboot CDVD (schnell)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Neustart mit Fast Boot (keine BIOS Splashscreens)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Boote CDVD (schnell)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Fast Boot: Umgeht PS2 Start / Splashscreens." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Kein Plugin geladen" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "GS Einstellungen" -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "Ändere Hardwareemulationseinstellungen der PCSX2 virtuellen Maschine." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Fenster Einstellungen..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Ändere Fenster und Ansichtseinstellungen, sowie das Seitenverhältnis." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Plugin Einstellungen..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Öffnet %s's erweiterte Einstellungen." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Resette alle Einstellungen?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Bestätige ISO Abbild Wechsel" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Möchtest du die Disk wechseln oder die neue Disk booten (via System Reset)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Wechsle Disk" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Bestätige CDVD Quelländerung" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Du hast gewählt die CDVD Quelle von %s nach %s zu ändern." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Möchtest du die Disk wechseln oder die neue Disk booten (System Reset)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Alle unterstützten (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Disk Abbilder (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Alle Dateien (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Wähle CDVD Quell ISO" +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Wähle ELF Datei..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO Datei nicht gefunden!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "" "Während des Versuchs folgende Datei zu öffnen ist ein Fehler aufgetreten: " -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1613,7 +1725,7 @@ "Fehler: Die konfigurierte ISO Datei existiert nicht. Klicke OK um eine neue " "ISO Quelle zu wählen." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1621,7 +1733,7 @@ "Du hast die folgende ISO Datei gewählt:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1634,7 +1746,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1647,19 +1759,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Dateiname leer oder zu kurz" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Dateiname ist außerhalb des benötigten Ordners" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Dateiname existiert bereits" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Das Betriebssystem verhindert, das diese Datei erstellt wird" @@ -1667,15 +1779,15 @@ msgid "Cannot apply settings..." msgstr "Kann Einstellungen nicht anwenden..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS Suchpfad" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Wähle Ordner mit PS2 BIOS Roms" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1683,13 +1795,13 @@ "Drücke den Suchen Button um einen anderen Ordner zu wählen in dem PCSX2 nach " "BIOS Roms sucht." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Aktualisiere Liste" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Wähle ein BIOS rom:" @@ -1721,90 +1833,94 @@ msgid "None" msgstr "Kein" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU erweiterte Recompiler Einstellungen" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Vorzeichen behalten" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Voll" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 erweiterte Recompiler Einstellungen" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "So ziemlich das Langsamste im gesamten Universum ;p" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "Just-in-time Codeübersetzung von 64bit MIPS IV nach x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Ziemlich langsam, nur zu Diagnosezwecken verwenden." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "Just-in-time Codeübersetzung von 32bit MIPS I nach x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Aktiviere EE Cacheemulation - Nur für Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Ziemlich langsam, nur zu Diagnosezwecken verwenden." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Standardeinstellung" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "Vector Unit Interpreter. Langsam, Fehlerhaft und generell nicht empfohlen." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Recompiler [empfohlen]" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Neuer Vector Unit Recompiler mit verbesserter Kompatibilität. Empfohlen." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Recompiler [veraltet]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "Nützlich, um Bugs oder Probleme im mVU Recompiler zu finden." @@ -1971,7 +2087,8 @@ msgstr "Ignoriere Path3 Transfer Busrichtung - Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "Setze GSdx auf Software Rendering für Videos" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2000,88 +2117,93 @@ "of 'What happened to my FPS?' problems. :)" msgstr "Warnung: Trace Logs sind sehr langsam!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Wähle Ordner mit PS2 Memory Cards" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Auswerfen" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Kopieren ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Umbenennen ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Erstelle ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Einfügen ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Card:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Erstelle neue Memory Card." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Benenne diese Memory Card um ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Einfügen ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Werfe die Karte aus dem Port aus" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Füge diese Card in einen Port ein ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Erstelle eine Kopie dieser Memory Card ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Lösche" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Löscht die gewählte Memory Card von der Festplatte (alle Spielstände gehen " "verloren)." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Erstellt eine neue Memory Card in dem gewählten Slot." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Lösche Memory Card?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Memory Card duplizieren?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Fehler: Kann nur existierende Cards kopieren." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2089,25 +2211,25 @@ "Wähle einen Namen für das Duplikat\n" "( '.ps2' wird automatisch angehängt)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Fehlgeschlagen: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopieren fehlgeschlagen!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Memory Card '%s' dupliziert nach '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Erfolg" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2116,119 +2238,124 @@ "Wähle einen neuen Namen für Memory Card '%s'\n" "( '.ps2' wird automatisch angehängt)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Memory Card umbenennen?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Fehler: Die Memory Card konnte nicht umbenannt werden.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Leer" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Wähle einen Ordner für %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Füge Card ein" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Werfe Card aus" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Karte einfügen ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Duplizere Card ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Karte umbenennen ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Lösche Memory Card?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Füge Card ein" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Erstelle neu..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Aktualisiere Liste" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Port" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Dateiname" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Cardgröße" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatiert" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Typ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Modifiziert" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Erstellt" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Nein" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ja" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Unbenutzte Cards --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Keine unbenutzten Cards --]" @@ -2261,11 +2388,11 @@ msgid "Select a document root for %s" msgstr "Wähle einen Ordner für %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Anwenden" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Aktiviere diese Sprache jetzt!" @@ -2345,66 +2472,66 @@ "Ursache: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Beende Aufgaben..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Aktiviere Speedhacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Eine einfache Möglichkeit sicherzugehen, dass alle Hacks deaktiviert sind." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "Stellt die Standardeinstellungen wieder her (alles deaktiviert)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [nicht empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [nicht empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "Guter FPS Anstieg, gute Kompatibilität [empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" msgstr "Guter FPS Anstieg, gute Kompatibilität [empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Andere Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Aktiviere INTC Warteschleifenerkennung" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2412,20 +2539,20 @@ "Gute Geschwindigkeitsverbesserung, fast keine " "Kompatibilitätseinschränkungen. [empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Aktiviere erkennen von Warteschleifen" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "Leichte Geschwindigkeitsverbesserung in einigen Spielen [empfohlen]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Aktiviere schnelles CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Schnellerer Diskzugriff, kürzere Ladezeiten [nicht empfohlen]" @@ -2448,88 +2575,88 @@ msgid "Select a visual theme:" msgstr "Wähle ein Theme:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Deaktiviere FPS Limitierung" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Sinnvoll für Benchmarks. Kann auch während des Spielens mit F4 aktiviert " "werden." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Basis Bildwiederholrate:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Slowmotion Einstellung:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbo Einstellung:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC Bildwiederholrate" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL Bildwiederholrate" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." msgstr "Fehler beim Einlesen der NTSC oder PAL Framerateeinstellungen." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Deaktiviert [standard]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Skipping nur im Turbomodus" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Konstantes Skipping" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." msgstr "Normal und Turbo werden Bilder auslassen, Slow motion nicht." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Bilder darstellen" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Bilder auslassen" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Benutze synchrones MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "Um eventualle Fehler im MTGS Thread zu debuggen. Sehr langsam!" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Deaktiviere GS Ausgabe" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2537,11 +2664,11 @@ "Deaktiviert alle GS Plugin Aktivitäten. Ideal um den Emulatorkern zu " "Benchmarken." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Bilder auslassen (skipping)" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "FPS Limitierung" @@ -2585,7 +2712,7 @@ "Dieser Savestate kann nicht geladen werden, da wichtige Komponenten fehlen. " "Weitere Informationen in der Logdatei." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(standard)" @@ -2606,7 +2733,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Die gewählte BIOS-Datei existiert nicht. Bitte neu konfigurieren." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2623,6 +2750,15 @@ "%s Erweiterungen nicht gefunden. MicroVU benötigt einen Prozessor mit MMX, " "SSE und SSE2 Erweiterungen." +#~ msgid "Betatesting" +#~ msgstr "Betatesting" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS Wählen" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Wähle CDVD Quell ISO" + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 empfohlen" diff -Nru pcsx2-1.3.1+dfsg/locales/es_ES/pcsx2_Iconized.po pcsx2-1.4.0/locales/es_ES/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/es_ES/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/es_ES/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.2.1\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-08-25 15:33+0100\n" +"POT-Creation-Date: 2015-12-23 18:23+0100\n" +"PO-Revision-Date: 2015-11-08 00:57+0100\n" "Last-Translator: Víctor González \n" "Language-Team: \n" "Language: es_ES\n" @@ -17,7 +17,7 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: pxE\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.6.4\n" +"X-Generator: Poedit 1.8.4\n" #: common/src/Utilities/Exceptions.cpp:275 msgid "" @@ -38,7 +38,7 @@ "de PSX tendrás que descargarte un emulador específico para PSX, como ePSXe o " "PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -50,7 +50,7 @@ "recursos de memoria virtual, como un swapfile pequeño o desactivado, o " "cualquier otro programa que esté acumulando mucha memoria." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -59,7 +59,7 @@ "Cierra cualquier programa en segundo plano que esté acumulando recursos y " "vuelve a intentarlo." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -67,7 +67,7 @@ "Aviso: Algunos de los recompiladores configurados de PS2 no se han iniciado " "y por lo tanto están desactivados:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -78,7 +78,7 @@ "Tendrás que volver a activar manualmente los recompiladores indicados " "encima, si consigues arreglar los errores." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -88,7 +88,7 @@ "*debes* conseguir una BIOS de una consola PS2 real que poseas (no vale " "pedirla prestada). Consulta los FAQs y las guías para tener más información." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,44 @@ "superiores en este ordenador, tendrás que cambiar al modo de Documentos del " "usuario (pulsa en el botón de abajo)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" +"Ten en cuenta que el archivo resultante podría no tener todas las partidas " +"guardadas, según la cantidad de partidas que haya en la tarjeta de memoria " +"original." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" +"AVISO: ¡La conversión de una tarjeta de memoria puede tardar un buen rato! " +"No cierres el emulador durante el proceso de conversión, aunque deje de " +"responder." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" +"Convierte esta tarjeta de memoria a un archivo .ps2 de Memory Card estándar " +"de 8 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "Convierte esta tarjeta de memoria a un archivo .ps2 de 16 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "Convierte esta tarjeta de memoria a un archivo .ps2 de 32 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "Convierte esta tarjeta de memoria a un archivo .ps2 de 64 MB." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -197,6 +234,16 @@ "índice de los contenidos de la tarjeta tras cargar un guardado rápido. " "Puede no ser compatible con todos los juegos (Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(Solo para tipos de carpetas) Vuelve a indizar el contenido de la tarjeta de " +"memoria cada vez que se cambia el software ejecutado. Esto evita que la " +"tarjeta de memoria se quede sin espacio." + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -275,7 +322,7 @@ "Esta acción reiniciará el estado actual de la máquina virtual de PS2 y se " "perderán todos los progresos no guardados. ¿Seguro que quieres continuar?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -296,7 +343,7 @@ "\n" "(Nota: la configuración de los plugins no se verá afectada)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -307,7 +354,12 @@ "problema y volver a activarla en cualquier momento dirigiéndote a Ajustes -> " "Tarjetas de memoria en el menú principal." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "(FolderMcd) Tarjeta de memoria llena, no se ha podido añadir: %s" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -315,13 +367,13 @@ "Selecciona una BIOS válida. Si no puedes seleccionar una opción válida, " "pulsa en Cancelar para cerrar el panel de configuración." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Nota: La mayoría de los juegos funcionan bien con las opciones " "predeterminadas." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "Nota: La mayoría de los juegos funcionan bien con las opciones " @@ -447,29 +499,30 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" -"Es mejor activar 'Arreglos para juegos automáticos' en el menú principal y " -"dejar esta sección en blanco.\n" +"Lo mejor es activar 'Arreglos para juegos automáticos' en el menú principal " +"y dejar esta sección en blanco.\n" "('Automático' significa utilizar de forma selectiva arreglos ya probados " -"para juegos concretos)" +"para juegos concretos)\n" +"Los arreglos para juegos manuales NO mejorarán el rendimiento, de hecho, " +"podrían empeorarlo." #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 -#, fuzzy msgid "" "Gamefixes can work around wrong emulation in some titles. \n" "They may also cause compatibility or performance issues.\n" "\n" "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -"Los arreglos para juegos arreglan temporalmente la emulación en algunos " -"juegos.\n" +"Los arreglos para juegos pueden corregir la emulación en algunos juegos.\n" "También pueden provocar problemas de compatibilidad o de rendimiento.\n" "\n" -"La forma más segura de confirmar que todos los arreglos para juegos están " -"desactivados." +"Lo más seguro es verificar que has desactivado todos los arreglos para " +"juegos." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -478,14 +531,14 @@ "Vas a eliminar la tarjeta de memoria formateada '%s'. ¡Se perderán todos los " "datos de esta tarjeta! ¿Estás total y completamente seguro?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Error: Solo se permite duplicar a un puerto vacío de PS2 o al sistema de " "archivos." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Error: La tarjeta de memoria de destino '%s' está siendo utilizada." @@ -509,10 +562,10 @@ "option only affects Standard Paths which are set to use the installation " "default value." msgstr "" -"Puedes cambiar la ubicación preferida para los documentos de usuario de " -"PCSX2 aquí (incluye tarjetas de memoria, capturas de pantalla, configuración " -"y guardados rápidos). Esta opción solo afecta a las carpetas estándar, que " -"se utilizarán según la configuración de instalación predeterminada." +"Aquí puedes cambiar la ubicación preferida para los documentos de usuario de " +"PCSX2 (incluye tarjetas de memoria, capturas de pantalla, configuración y " +"guardados rápidos). Esta opción afecta a las carpetas estándar, que se " +"utilizarán según la configuración de instalación predeterminada." #: pcsx2/gui/Panels/PathsPanel.cpp:40 msgid "" @@ -569,35 +622,51 @@ "puedes hacer una selección válida porque falten plugins o la instalación de " "%s esté incompleta, pulsa en Cancelar para cerrar el panel de configuración." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - Tasa de ciclos predeterminada. Lo más parecido a la velocidad de un " -"EmotionEngine real de PS2." +"3 - Reduce la tasa de ciclos del EE a un 50%. Subida de velocidad moderada, " +"pero causará sonido entrecortado en FMVs." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - Reduce la tasa de ciclos del EE a un 33%. Ligera subida de velocidad " "para la mayoría de los juegos y alta compatibilidad." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" +"1 - Tasa de ciclos predeterminada. Lo más parecido a la velocidad de un " +"EmotionEngine real de PS2." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"3 - Reduce la tasa de ciclos del EE a un 50%. Subida de velocidad moderada, " -"pero causará sonido entrecortado en FMVs." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - Desactiva el robo de ciclos VU. ¡El ajuste más compatible!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -605,7 +674,7 @@ "1 - Bajo robo de ciclos VU. Baja compatibilidad, pero aumenta la velocidad " "en algunos juegos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -613,7 +682,7 @@ "2 - Robo de ciclos VU moderado. Compatibilidad muy baja, pero aumenta " "bastante la velocidad en algunos juegos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -621,7 +690,7 @@ "3 - Robo de ciclos VU máximo. No es muy útil, provoca gráficos parpadeantes " "o ralentiza casi todos los juegos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -631,18 +700,22 @@ "pero pueden provocar fallos gráficos, sonido entrecortado y falsas lecturas " "de FPS. Si tienes problemas de emulación, empieza desactivando este panel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Si asignas un valor alto con esta opción reducirás la velocidad de reloj " "real de la CPU del núcleo R5900 del EmotionEngine, y generalmente aumenta la " "velocidad de los juegos que no utilizan el potencial del hardware de PS2 " "real." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -652,30 +725,30 @@ "EmotionEngine. Un valor alto aumenta el número de ciclos robados del EE a " "cada microprograma del VU que utiliza el juego." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "" -"Actualiza las etiquetas de estado solo en los bloques que podrán leerse, en " +"Actualiza las etiquetas de estado sólo en los bloques que podrán leerse, en " "lugar de hacerlo constantemente. Generalmente es la opción más segura, y " "SuperVU ya hace algo parecido de forma predeterminada." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " "incompatible and may hang. In the case of GS limited games, it may be a " "slowdown (especially on dual core CPUs)." msgstr "" -"Ejecuta VU1 en un hilo dedicado (solo microVU1). Suele aumentar la velocidad " +"Ejecuta VU1 en un hilo dedicado (sólo microVU1). Suele aumentar la velocidad " "en CPUs de tres núcleos o más. Opción segura para la mayoría de los juegos, " "pero algunos no son compatibles y pueden bloquear el emulador. En el caso " "de los juegos limitados por GS, podría ralentizarlos (sobre todo en CPUs de " "doble núcleo)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -686,7 +759,7 @@ "juegos que no utilizan este método de sincronía vertical no recibirán " "aumentos de velocidad con este arreglo." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -702,7 +775,7 @@ "aumentamos el tiempo del siguiente evento o el final del espacio de tiempo " "del procesador, según lo que llegue primero." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -711,7 +784,7 @@ "tienen problemas con esta opción. (Generalmente marcadas como 'modo 1' o " "'DVD lento')." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -719,7 +792,7 @@ "Observa que al desactivar la limitación de fotogramas, los modos Turbo y " "Velocidad lenta no estarán disponibles." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -728,7 +801,7 @@ "fotogramas preciso. Activarlo causará serios fallos visuales en varios " "juegos." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -736,7 +809,7 @@ "Activa esta opción si crees que la sincronía de hilos MTGS provoca caídas o " "fallos gráficos." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -753,7 +826,7 @@ "Aviso: Esta opción puede activarse al vuelo, pero normalmente no puede " "desactivarse al vuelo (la imagen se mostrará dañada)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/es_ES/pcsx2_Main.po pcsx2-1.4.0/locales/es_ES/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/es_ES/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/es_ES/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.2.1\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-08-25 15:33+0100\n" +"POT-Creation-Date: 2015-12-23 18:23+0100\n" +"PO-Revision-Date: 2015-11-08 00:55+0100\n" "Last-Translator: Víctor González \n" "Language-Team: \n" "Language: es_ES\n" @@ -17,17 +17,17 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: _;pxL\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Generator: Poedit 1.6.4\n" +"X-Generator: Poedit 1.8.4\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "No se ha indicado una razón." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Error de análisis" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "El hardware de tu ordenador es incapaz de ejecutar PCSX2. Se siente, amigo." @@ -52,7 +52,7 @@ #: common/src/Utilities/Exceptions.cpp:332 msgid "[Unnamed or unknown]" -msgstr "[Sin nombre o desconocida]" +msgstr "(Sin nombre o desconocida)" #: common/src/Utilities/Exceptions.cpp:352 msgid "A file could not be created." @@ -96,7 +96,7 @@ msgstr "" "Incluye proceso de eventos detenidos y otros usos de eventos no habituales." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Formato de imagen ISO no reconocido" @@ -115,7 +115,7 @@ "formato de imagen ISO no admitido o un error en el soporte de imágenes ISO " "de PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." @@ -123,13 +123,13 @@ "El flujo de MTGS ha dejado de resonder mientras esperaba a que se iniciara " "el plugin GS." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "No se ha podido cargar el guardado rápido, parece estar dañado o incompleto." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -138,7 +138,7 @@ "El plugin %s no se ha abierto correctamente. Tu ordenador puede no tener " "los recursos suficientes, o un hardware o controladores no compatibles." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -147,18 +147,18 @@ "El plugin %s no se ha iniciado correctamente. Tu sistema puede no tener la " "memoria o recursos necesarios." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "No se ha encontrado el archivo del plugin configurado %s." -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "El archivo de plugin configurado %s no es una biblioteca dinámica válida." -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -167,14 +167,14 @@ "El plugin configurado %s no es un plugin de PCSX2 o funciona en una versión " "antigua y no soportada de PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "El plugin informa de que tu hardware o software/controladores no están " "soportados." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -182,7 +182,7 @@ "El plugin configurado no es un plugin de PCSX2 o funciona en una versión " "antigua y no soportada de PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -191,11 +191,11 @@ "El plugin configurado %s no es un plugin de PCSX2 o funciona en una versión " "antigua y no soportada de PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." -msgstr "El plugin interno de Memory Cards no se ha iniciado." +msgstr "No se ha iniciado el plugin interno de tarjetas de memoria." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin no cargado" @@ -272,12 +272,12 @@ #: pcsx2/SourceLog.cpp:193 pcsx2/SourceLog.cpp:294 msgid "Logs only unknown, unmapped, or unimplemented register accesses." msgstr "" -"Registra solo los accesos a registro desconocidos, no ubicados o no " +"Registra únicamente los accesos a registro desconocidos, no ubicados o no " "implementados." #: pcsx2/SourceLog.cpp:199 pcsx2/SourceLog.cpp:300 msgid "Logs only DMA-related registers." -msgstr "Registra solo los registros relacionados con DMA." +msgstr "Registra únicamente los registros relacionados con DMA." #: pcsx2/SourceLog.cpp:205 msgid "IPU activity: hardware registers, decoding operations, DMA status, etc." @@ -347,8 +347,8 @@ #: pcsx2/SourceLog.cpp:306 msgid "Memorycard reads, writes, erases, terminators, and other processing." msgstr "" -"Lectura, escritura, eliminación, finalización y otros procesos de la Memory " -"Card (Tarjeta de memoria)." +"Lectura, escritura, eliminación, finalización y otros procesos de la tarjeta " +"de memoria." #: pcsx2/SourceLog.cpp:312 msgid "Gamepad activity on the SIO." @@ -369,11 +369,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Registro detallado del hardware CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Mensaje de PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -381,31 +381,31 @@ "El guardado rápido no se guardó correctamente. El archivo temporal ha sido " "creado con éxito, pero no se pudo trasladar a su destino final." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Lo más seguro" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Seguro (más rápido)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Equilibrado" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresivo" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Muy agresivo" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Dañino" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Error al sobrescribir el archivo de configuración ya existente, permiso " @@ -415,103 +415,107 @@ msgid "Loading PS2 system plugins..." msgstr "Cargando plugins del sistema PS2..." -#: pcsx2/gui/AppInit.cpp:49 -#, fuzzy +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "" -"No hay extensiones SSE disponibles. PCSX2 necesita una CPU que admita el " -"set de instrucciones SSE." +"No hay extensiones SSE2 disponibles. PCSX2 necesita una CPU que admita el " +"set de instrucciones SSE2." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Error(es) del recompilador PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Todas las opciones se utilizarán en la sesión actual y no se guardarán.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Archivo ISO" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "Muestra esta lista de opciones para la línea de comandos" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" -msgstr "Fuerza a la consola/registro del programa a que sea visible" +msgstr "Fuerza la visibilidad de la consola/registro del programa" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "Utiliza el modo GS de pantalla completa" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "Utiliza el modo GS en una ventana" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" -msgstr "Desactiva la interfaz mientras se ejecute un juego" +msgstr "Oculta la interfaz mientras se ejecute un juego" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" +"En caso de utilizar nogui: Preguntar antes de salir durante una suspensión." + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "Ejecuta una imagen ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "Carga una bandeja de DVD vacía, sirve para entrar al menú del sistema de PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "Carga desde el plugin CDVD (se salta el parámetro Archivo ISO)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "Desactiva todas las ayudas para velocidad" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "Utiliza la lista de arreglos para juegos de coma o limitada a canal " "especificada." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "Desactiva el arranque rápido" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "Cambia la carpeta del archivo de configuración" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "Especifica el archivo de configuración de PCSX2 a utilizar" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "Obliga a %s a ejecutar el asistente inicial" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "Permite actuar en modo portátil (necesita acceso de admin/raíz)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "Especifica el archivo a utilizar como plugin de %s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" -msgstr "Error de anulación de plugin - %s" +msgstr "Error de anulación de plugin: %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -522,96 +526,96 @@ "un plugin de %s válido:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Pulsa Aceptar para utilizar el plugin configurado predeterminado, o Cancelar " "para cerrar %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Error de PCSX2: Fallo de hardware" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Pulsa en Aceptar para cerrar %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "Error crítico de %s" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "Aceptar" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&Aceptar" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Cancelar" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Cancelar" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "A&plicar" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Siguiente >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< A&nterior" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "A&nterior" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Terminar" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Sí" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&No" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Buscar" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Guardar" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Guardar co&mo..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "A&yuda" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Inicio" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Mostrar la ventana de acerca de." -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -621,43 +625,48 @@ "\n" "Pulsa en Aceptar para ir al panel de configuración de plugins." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" -"¡Aviso! No se han cargado los plugins del sistema. PCSX2 puede no " -"funcionar." +"¡Aviso! No se han cargado los plugins del sistema. Puede que PCSX2 no " +"funcione." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "Opciones de línea de comandos de %s" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Error de la BIOS de PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Pulsa en Aceptar para ir al panel de configuración de BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"¡Aviso! No se ha seleccionado una BIOS válida. Puede que PCSX2 no funcione." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "Opciones de línea de comandos de %s" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Hilo sin respuesta de PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Abortar" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Ejecutando máquina virtual de PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Buscar una Iso que no esté en tu historial reciente." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Buscar..." @@ -672,7 +681,7 @@ #: pcsx2/gui/AppUserMode.cpp:140 #, c-format msgid "Portable mode error - %s" -msgstr "Error de modo portátil - %s" +msgstr "Error de modo portátil: %s" #: pcsx2/gui/AppUserMode.cpp:153 msgid "" @@ -704,52 +713,52 @@ "No se puede aplicar la nueva configuración, uno de los parámetros no es " "válido." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Guardar pregunta del registro" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "" "Introduce mucho texto en una zona tan pequeña como el ojo de una aguja." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Pequeño" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Es lo que suelo utilizar (el programador)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" -msgstr "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" +msgstr "Fuente normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Bonito y fácil de leer." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Grande" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Enorme" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Por si tienes una pantalla con una resolución muy alta." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." -msgstr "Esquema de colores predeterminado de tonos suaves." +msgstr "Paleta de colores predeterminada, con tonos suaves." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Tema claro" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -757,86 +766,94 @@ "Esquema clásico de blanco y negro para a los que les encante que les " "taladren los nervios ópticos con texto." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tema oscuro" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Siempre al frente" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Al activarse, la ventana de registro se verá por encima de otras ventanas " "que haya encima." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Guardar..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Guardar contenidos del registro a un archivo" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&Borrar" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Elimina los contenidos de la ventana de registro" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Aspecto" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Cerrar" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Cierra esta ventana de registro, sus contenidos serán guardados" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Registro de desarrollo" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Muestra los registros para desarrolladores de PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Lecturas del CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Muestra la actividad al leer el disco" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Activar todo" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Activa todos los filtros de fuentes de registro." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Desactivar todo" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Desactiva todos los filtros de fuentes del registro." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "Reiniciar ajustes predeterminados" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore default source filters." +msgstr "Recupera los filtros predeterminados." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Registro" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Fuentes" @@ -849,71 +866,64 @@ msgid "About %s" msgstr "Acerca de %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Pruebas" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versiones anteriores" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmasters" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Especialistas en plugins" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Agradecimientos" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Desarrolladores" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Contribuyentes" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Un emulador de PlayStation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Página web oficial y foros de PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "Repositorio Git oficial de PCSX2 en GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Ya he visto suficiente" #: pcsx2/gui/Dialogs/AssertionDialog.cpp:23 msgid "Assertion Failure - " -msgstr "Error de asignación - " +msgstr "Error de asignación: " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Guarda una captura de este panel de ajustes a un archivo PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Guardar capturas de ventanas a..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Selector de BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "No volver a mostrar esta ventana" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -921,7 +931,7 @@ "Desactiva esta ventana, haciendo que cualquier respuesta que selecciones " "aquí sea utilizada automáticamente desde este momento." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -929,16 +939,90 @@ "La ventana no volverá a mostrarse. Este ajuste puede deshacerse en los " "paneles de ajustes." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorar" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "Reintentar" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "Abortar" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reiniciar" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "Convierte una tarjeta de memoria a un formato distinto" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "Convertir" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "Convertir:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "A:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "Archivo de 8 MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "Archivo de 16 MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "Archivo de 32 MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "Archivo de 64 MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" +"Convierte esta tarjeta de memoria a una carpeta de partidas guardadas " +"individuales." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "Carpeta" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Error (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "Convertir tarjeta de memoria" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "¡No hay soporte para este tipo de destino!" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" +"La conversión de la tarjeta de memoria ha fallado por un motivo desconocido." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Crear una tarjeta de memoria nueva" @@ -960,72 +1044,72 @@ msgid "Select file name: " msgstr "Seleccionar nombre de archivo:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Error (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Crear tarjeta de memoria" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "Error: No se ha podido crear la carpeta para la tarjeta de memoria." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Error: No se ha podido crear la tarjeta de memoria." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." -msgstr "Utilizar la compresión NTFS al crear esta tarjeta." +msgstr "Utilizar la compresión NTFS al crear la tarjeta de memoria." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [lo más compatible]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "" -"Este es el tamaño estándar de Sony, y es compatible con todos los juegos y " -"BIOS disponibles." +"Este es el tamaño estándar de Sony, compatible con todos los juegos y BIOS " +"disponibles." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "" -"Utiliza esta opción siempre que quieras que la Memory Card se utilice de la " -"forma más segura." +"Utiliza esta opción siempre que quieras que la tarjeta de memoria se utilice " +"de la forma más segura." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" -"El tamaño normal de las tarjetas de memoria fabricadas por terceros, que " -"debería funcionar con la mayoría de los juegos." +"Un tamaño habitual de las tarjetas fabricadas por terceros, debería " +"funcionar con la mayoría de los juegos." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" -"Las tarjetas de 16 y 32 MBs tienen prácticamente la misma compatiblidad." +"Las tarjetas de memoria de 16 y 32 MBs tienen prácticamente la misma " +"compatiblidad." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1033,13 +1117,36 @@ "Aviso de baja compatibilidad: El tamaño aumenta, pero puede no funcionar con " "muchos juegos." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "" -"Utilízala bajo tu propio riesgo. Es posible que la Memory Card se comporte " -"de forma errática (aunque es poco probable)." +"Utilízala bajo tu responsabilidad. Es posible que la tarjeta de memoria se " +"comporte de forma errática (aunque es poco probable)." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "Carpeta (experimental)" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" +"Almacena los contenidos de la tarjeta de memoria en el sistema de archivos " +"anfitrión en vez de en un archivo." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" +"Gestiona de forma automática los contenidos de las tarjetas de memoria para " +"que la consola sólo vea archivos relacionados con el software que se esté " +"ejecutando. Permite arrastrar archivos desde la tarjeta de memoria y hacia " +"ella a través de tu explorador de archivos estándar. ¡Aún es experimental, " +"así que utilízalo bajo tu responsabilidad!" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format @@ -1051,6 +1158,7 @@ msgstr "Ajustes" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Selector de idioma" @@ -1059,7 +1167,7 @@ "Change the language only if you need to.\n" "The system default should be fine for most operating systems." msgstr "" -"Cambia el idioma solo si es necesario.\n" +"Cambia el idioma sólo si es necesario.\n" "El idioma predeterminado del sistema debería bastar para la mayoría de " "sistemas operativos." @@ -1083,7 +1191,7 @@ #: pcsx2/gui/Dialogs/GameDatabaseDialog.cpp:24 #, c-format msgid "Game database - %s" -msgstr "Base de datos de juegos - %s" +msgstr "Base de datos de juegos: %s" #: pcsx2/gui/Dialogs/ImportSettingsDialog.cpp:24 msgid "Import Existing Settings?" @@ -1105,15 +1213,21 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Autoexpulsar tarjetas de memoria al cargar guardados rápidos" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" +"Gestiona de forma automática las partidas guardadas según el juego que se " +"esté ejecutando" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Gestor de tarjetas de memoria" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" -msgstr "Arrastra las tarjetas hacia o desde los puertos de PS2." +msgstr "Arrastra las tarjetas de memoria hacia o desde los puertos de PS2." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1151,7 +1265,7 @@ #: pcsx2/gui/Dialogs/SysConfigDialog.cpp:212 #, c-format msgid "Emulation Settings - %s" -msgstr "Ajustes de emulación - %s" +msgstr "Ajustes de emulación: %s" #: pcsx2/gui/Dialogs/SysConfigDialog.cpp:221 msgid "EE/IOP" @@ -1177,27 +1291,27 @@ msgid "Game Fixes" msgstr "Arreglos para juegos" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" -msgstr "Selectores de componentes - %s" +msgstr "Selectores de componentes: %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Carpetas" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" -msgstr "Aspecto/Temas - %s" +msgstr "Aspecto/Temas: %s" #: pcsx2/gui/ExecutorThread.cpp:40 msgid "Logs events as they are passed to the PS2 virtual machine." @@ -1216,49 +1330,53 @@ msgid "Terminate App" msgstr "Abortar aplicación" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "¡Se ha desactivado la salida de GS!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "¿Abandonar PCSX2?" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Guardado rápido" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Guarda el estado de la máquina virtual en el hueco actual." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Carga rápida" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Carga un estado de la máquina virtual del hueco actual." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Cargar copia del estado" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Carga la copia del estado de la máquina virtual del hueco actual." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Pasar a hueco siguiente" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Cambia el hueco de guardado actual al siguiente puesto." -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Pasar a hueco anterior" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" -msgstr "Cambia el hueco de guardado actual al puesto anterior." +msgstr "Cambia la ranura de guardado actual al puesto anterior." #: pcsx2/gui/IsoDropTarget.cpp:55 msgid "Drag and Drop Error" @@ -1273,7 +1391,7 @@ "Es un error soltar varios archivos en una ventana de %s. Por favor, " "arrástralos de uno en uno." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Confirmar reinicio de PS2" @@ -1291,282 +1409,282 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Has arrastrado la siguiente imagen ISO a %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Hueco %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Copia de seguridad" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Mostrar consola" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Consola a Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistema" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Ajustes" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Otros" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Depuración" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Iniciando..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Ejecutar ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Para ejecutar directamente binarios de PS2" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Copia de seguridad antes de guardar" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Arreglos para juegos automáticos" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Aplica automáticamente los arreglos para juegos necesarios en juegos " "problemáticos conocidos" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Activar trampas" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Activar parches para imagen panorámica" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Activar sistema de archivos del host" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Apagar" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Elimina todos los estados internos de la MV y desconecta los plugins." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Salir" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Cerrar %s podría ser peligroso para tu salud" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Selector de ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menú de plugins" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Imagen Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Convierte a la imagen ISO seleccionada la fuente del CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Utiliza un plugin externo como la fuente del CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Sin disco" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "" "Utiliza esta opción para entrar en la configuración de la BIOS virtual de " "PS2." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "A&justes de emulación" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "Tarjetas de &memoria" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "Selector de &Plugin/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor de base de datos de juegos" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Vídeo (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Sonido (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Mandos (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Borrar todos los ajustes..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Borra todos los ajustes de %s y arranca el asistente inicial." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Acerca de..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "Abrir ventana de depuración..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Registros..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pausar" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Pausa la emulación de forma segura y conserva el estado de PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Reanudar" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Reanuda el estado de emulación suspendido." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pausar/Reanudar" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "No hay un estado de emulación activo, no se puede suspender o reanudar." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Reiniciar" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simula un reinicio por hardware de la máquina virtual de PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "No hay un estado de emulación activo, antes debes ejecutar algo." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Reiniciar CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Reinicio forzado de la MV activa." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Ejecutar CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "" "Ejecuta la MV utilizando como el DVD actual o la imagen ISO como fuente " "actual" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Reiniciar CDVD (rápido)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Reinicia utilizando el arranque rápido (salta las pantallas iniciales)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Ejecutar CDVD (rápido)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Utiliza el inicio rápido para saltarte las pantallas de inicio de PS2." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "No se ha cargado un plugin" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Ajustes del núcleo GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1574,97 +1692,99 @@ "Modifica los ajustes de emulación de hardware regulados por el núcleo de la " "máquina virtual de PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Ajustes de ventana..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Modifica las opciones de ventana y aspecto, incluyendo su proporción." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Ajustes del plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Abre la ventana de ajustes avanzados del plugin %s." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "¿Reiniciar toda la configuración?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Confirmar cambio de imagen ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "¿Quieres cambiar de disco o iniciar la nueva imagen (mediante reinicio del " "sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Cambiar de disco" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Confirmar cambio de la fuente CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Has seleccionado cambiar la fuente del CDVD de %s a %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "¿Quieres cambiar de disco o iniciar la nueva imagen (mediante reinicio del " "sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Todos los admitidos (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Imágenes de disco (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Volcados de bloques (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "Comprimido (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Todos los archivos (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Selecciona la ISO que se utilizará en CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" +"Selecciona una imagen de disco, una imagen comprimida o un volcado de " +"bloques..." -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Selecciona un archivo ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "¡No se ha encontrado el archivo ISO!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Ha habido un error al intentar abrir el archivo:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1672,7 +1792,7 @@ "Error: El archivo ISO configurado no existe. Pulsa en Aceptar para " "seleccionar una nueva ISO a cargar en CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1680,7 +1800,7 @@ "Has seleccionado la siguiente imagen ISO para utilizarla en PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1693,7 +1813,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1706,35 +1826,35 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "No se ha escrito un nombre de archivo o es demasiado corto." -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "El nombre de archivo está fuera de la carpeta solicitada." -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "El nombre de archivo ya existe." -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" -msgstr "El sistema operativo está impidendo que este archivo pueda ser creado." +msgstr "El sistema operativo no permite crear este archivo." #: pcsx2/gui/Panels/BaseApplicableConfigPanel.cpp:103 msgid "Cannot apply settings..." msgstr "No se puede aplicar la configuración..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Carpeta de búsqueda de BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Selecciona la carpeta que contiene las roms de la BIOS de PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1742,13 +1862,13 @@ "Pulsa en Buscar para seleccionar la carpeta donde PCSX2 buscará las roms de " "la BIOS de PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Actualizar lista" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Selecciona una rom de BIOS:" @@ -1780,40 +1900,44 @@ msgid "None" msgstr "Ninguno" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Opciones avanzadas del recompilador EE/FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Conservar señal" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Completo" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Opciones avanzadas del recompilador VU0 / VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Intérprete" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Probablemente lo más lento que exista en el universo." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompilador" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1821,11 +1945,11 @@ "Realiza una traducción binaria al vuelo del código de máquina de 64 bits " "MIPS-IV a x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." -msgstr "Muy lento; solo útil para realizar diagnósticos." +msgstr "Muy lento; sólo útil para realizar diagnósticos." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1833,20 +1957,20 @@ "Realiza una traducción binaria al vuelo del código de máquina de 32 bits " "MIPS-I a x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Activar caché EE (Lento)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Solo para intérprete, usado para realizar diagnósticos." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Reiniciar ajustes predeterminados" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1854,22 +1978,22 @@ "Intérprete de la Unidad Vectorial. Lento y no muy compatible. Solo para " "diagnósticos." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Recompilador microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nuevo recompilador de la Unidad Vectorial con compatibilidad muy mejorada. " "Recomendado." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Recompilador superVU (legado)" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1968,7 +2092,7 @@ #: pcsx2/gui/Panels/GameFixesPanel.cpp:40 msgid "VU Add Hack - Fixes Tri-Ace games boot crash." -msgstr "Añadido VU - Evita que los juegos de Tri-Ace fallen al arrancar." +msgstr "Añadido VU: Evita que los juegos de Tri-Ace fallen al arrancar." #: pcsx2/gui/Panels/GameFixesPanel.cpp:41 msgid "" @@ -1989,38 +2113,39 @@ #: pcsx2/gui/Panels/GameFixesPanel.cpp:48 msgid "FPU Compare Hack - For Digimon Rumble Arena 2." -msgstr "Comparación FPU - Para Digimon Rumble Arena 2." +msgstr "Comparación FPU: Para Digimon Rumble Arena 2." #: pcsx2/gui/Panels/GameFixesPanel.cpp:52 msgid "FPU Multiply Hack - For Tales of Destiny." -msgstr "Multiplicación FPU - Para Tales of Destiny." +msgstr "Multiplicación FPU: Para Tales of Destiny." #: pcsx2/gui/Panels/GameFixesPanel.cpp:56 msgid "FPU Negative Div Hack - For Gundam games." -msgstr "División negativa FPU - Para los juegos de Gundam." +msgstr "División negativa FPU: Para los juegos de Gundam." #: pcsx2/gui/Panels/GameFixesPanel.cpp:60 msgid "VU XGkick Hack - For Erementar Gerad." -msgstr "XGkick de VU - Para Erementar Gerad." +msgstr "XGkick de VU: Para Erementar Gerad." #: pcsx2/gui/Panels/GameFixesPanel.cpp:64 msgid "FFX videos fix - Fixes bad graphics overlay in FFX videos." msgstr "" -"Arreglo de vídeos en FFX - Arregla una mala imagen en los vídeos de FFX." +"Arreglo de vídeos en FFX: Arregla una mala imagen en los vídeos de FFX." #: pcsx2/gui/Panels/GameFixesPanel.cpp:68 msgid "EE timing hack - Multi purpose hack. Try if all else fails." -msgstr "Tempo EE - Arreglo multipropósito. Probar si todo lo demás falla." +msgstr "" +"Tempo EE: Arreglo multipropósito. Probar en caso de que todo lo demás falle." #: pcsx2/gui/Panels/GameFixesPanel.cpp:73 msgid "" "Skip MPEG hack - Skips videos/FMVs in games to avoid game hanging/freezes." msgstr "" -"Saltar MPEGs - No muestra los vídeos/FMVs para evitar cuelgues/bloqueos." +"Saltar MPEGs: No muestra los vídeos/FMVs para evitar cuelgues/bloqueos." #: pcsx2/gui/Panels/GameFixesPanel.cpp:77 msgid "OPH Flag hack - Try if your game freezes showing the same frame." -msgstr "Señal OPH - Probar si tu juego se bloquea al mostrar la misma imagen." +msgstr "Señal OPH: Probar si el juego se bloquea al mostrar una misma imagen." #: pcsx2/gui/Panels/GameFixesPanel.cpp:82 msgid "Ignore DMAC writes when it is busy." @@ -2036,18 +2161,18 @@ msgid "" "Delay VIF1 Stalls (VIF1 FIFO) - For SOCOM 2 HUD & Spy Hunter loading hang." msgstr "" -"Retrasar detenciones de VIF1 (FIFO VIF1) - Para la interfaz de SOCOM 2 y el " +"Retrasar detenciones de VIF1 (FIFO VIF1): Para la interfaz de SOCOM 2 y el " "bloqueo al cargar en Spy Hunter." #: pcsx2/gui/Panels/GameFixesPanel.cpp:96 msgid "Ignore Bus Direction on Path3 Transfer - Used for Hotwheels" msgstr "" -"Ignorar dirección del bus en transferencia de Path3 - Utilizar en Hot Wheels" +"Ignorar dirección del bus en transferencia de Path3: Utilizar en Hot Wheels." #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" -"Cambiar a renderizado por software de GSdx cuando se reproduzca una FMV" +"Cambiar al renderizado por software de GSdx cuando se reproduzca una FMV" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" @@ -2077,88 +2202,92 @@ "Aviso: Los registros de rastros reducen el rendimiento y son la principal " "causa de la pregunta '¿Por qué va lento el juego?'. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Selecciona la carpeta con las tarjetas de memoria de PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Expulsar" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Duplicar..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Renombrar..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Crear..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "Convertir..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Tarjeta:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Crea una nueva tarjeta de memoria." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Cambia el nombre a esta tarjeta de memoria." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Insertar..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Expulsa la tarjeta de este puerto." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Introduce esta tarjeta a un puerto." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Crea una copia de esta tarjeta de memoria." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Borrar" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Borra permanentemente esta tarjeta de memoria del disco (se perderá todo su " "contenido)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Crea una nueva tarjeta de memoria y la asigna a este puerto." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "¿Borrar la tarjeta de memoria?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Duplicar tarjeta de memoria" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Error: Solo puedes duplicar una tarjeta que ya exista." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2166,146 +2295,150 @@ "Selecciona un nombre para el archivo duplicado:\n" "(La extensión '.ps2' se añadirá automáticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Error: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "¡Error al copiar!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Tarjeta de memoria '%s' duplicada a '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Éxito" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" "( '.ps2' will be added automatically)" msgstr "" "Selecciona el nuevo nombre de la tarjeta de memoria '%s'\n" -"(La extensión '.ps2' se añadirá automáticamente)" +"(La extensión '.ps2' se añadirá automáticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Renombrar tarjeta de memoria" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Error: No se ha podido cambiar el nombre.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" -msgstr "Puerto-%u / Multitap-%u--Puerto-1" +msgstr "Puerto %u / Multitap %u--Puerto 1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" -msgstr " Multitap-%u--Puerto-%u" +msgstr " Multitap %u--Puerto %u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Vacío" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Selecciona el puerto de destino para '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Insertar tarjeta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Expulsar tarjeta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Insertar tarjeta..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Duplicar tarjeta..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Renombrar tarjeta..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Borrar tarjeta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "Convertir tarjeta" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Crear una tarjeta nueva..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Actualizar lista" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Puerto de PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Nombre del archivo" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Tamaño" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formateada" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tipo" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Última modificación" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Fecha de creación" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "No" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Sí" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Tarjetas sin usar --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- No hay tarjetas sin usar --]" @@ -2338,11 +2471,11 @@ msgid "Select a document root for %s" msgstr "Selecciona una raíz de documentos para %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Aplicar" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "¡Hacer este idioma mi predeterminado ahora mismo!" @@ -2422,22 +2555,22 @@ "Motivo: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Completando tareas..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Activar arreglos para velocidad" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "La forma más fácil y segura de desactivar todos los arreglos para la " "velocidad." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2445,34 +2578,34 @@ "Reinicia los arreglos de velocidad a su configuración predeterminada, " "desactivándolos todos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "Velocidad de ciclos EE (No recomendado)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "Robo de ciclos de la VU (No recomendado)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hacks de microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "Arreglo de etiqueta mVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Buena subida y alta compatibilidad; puede crear gráficos dañados... " "(Recomendado)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (microVU1 multihilos)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2480,15 +2613,15 @@ "Buena subida y alta compatibilidad; puede provocar cuelgues... (Recomendado " "si tienes 3 o más núcleos de CPU)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Otros arreglos" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Activar detección de giro INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2496,22 +2629,22 @@ "Gran subida de velocidad en algunos juegos, sin casi ningún efecto " "secundario de compatibilidad (Recomendado)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Activar detección de bucles de parada" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Subida moderada en algunos juegos, sin efectos secundarios conocidos. " "(Recomendado)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Activar CDVD rápido" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "" "Accede al disco más rápidamente, reduciendo los tiempos de carga. (No " @@ -2537,42 +2670,42 @@ msgid "Select a visual theme:" msgstr "Selecciona un aspecto visual:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Desactivar limitación de fotogramas" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Útil para comprobaciones de rendimiento. Puedes activarla dentro del juego " "pulsando F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Ajuste de velocidad de fotogramas:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Ajuste de velocidad lenta:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Ajuste del turbo:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Velocidad de fotogramas NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Velocidad de fotogramas PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2580,19 +2713,19 @@ "Error al analizar la configuración de la velocidad de fotogramas PAL o " "NTSC. La configuración debe ser un valor numeral entero." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Desactivado [por defecto]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Solo con el turbo activado (TAB para activar)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Salto constante" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2600,30 +2733,30 @@ "Normal y Turbo limitan la velocidad de salto de fotogramas. El modo de " "velocidad lenta desactivará el salto de fotogramas." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Fotogramas a mostrar" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Fotogramas a saltar" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Utilizar MTGS sincronizado" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" -"Usar solo para evitar posibles fallos en el MTGS ya que puede ser muy lento." +"Usar sólo para evitar posibles fallos en el MTGS ya que puede ser muy lento." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Desactivar toda la salida de GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2631,11 +2764,11 @@ "Desactiva toda actividad del plugin GS; ideal para probar componentes de " "EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Saltar fotogramas" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Limitador de fotogramas" @@ -2679,7 +2812,7 @@ "Este guardado rápido no puede cargarse debido a que faltan componentes " "críticos. Mira el registro para saber más." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (predeterminado)" @@ -2701,22 +2834,31 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "El archivo de configuración de BIOS no existe. Reconfigura la BIOS." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 -#, fuzzy, c-format +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 +#, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " "SSE2 extensions." msgstr "" -"Extensiones %s no encontradas. El recompilador R5900-32 necesita una CPU " -"con extensiones MMX, SSE y SSE2." +"No se han encontrado las extensiones %s. El recompilador R5900-32 necesita " +"una CPU con extensiones SSE2." #: pcsx2/x86/microVU.cpp:28 -#, fuzzy, c-format +#, c-format msgid "" "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." msgstr "" -"Extensiones %s no encontradas. La microVU necesita una CPU con extensiones " -"MMX, SSE y SSE2." +"No se han encontrado las extensiones %s. La microVU necesita una CPU con " +"extensiones SSE2." + +#~ msgid "Betatesting" +#~ msgstr "Pruebas" + +#~ msgid "BIOS Selector" +#~ msgstr "Selector de BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Selecciona la ISO que se utilizará en CDVD..." #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 Recomendado" diff -Nru pcsx2-1.3.1+dfsg/locales/fi_FI/pcsx2_Iconized.po pcsx2-1.4.0/locales/fi_FI/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/fi_FI/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/fi_FI/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-05-20 13:26+0200\n" "Last-Translator: kmartimo \n" "Language-Team: kmartimo \n" @@ -41,7 +41,7 @@ "PCSX2 ei tue Playstationin pelilevyjä. Jos haluat emuloida PSX-pelejä, sinun " "täytyy ladata PSX-emulaattori, kuten ePSXe tai PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -56,7 +56,7 @@ "yrittää vähentää oletusarvoisia välimuistin kokoja kaikille PCSX2:den " "uudelleenkääntäjille. Asetukset löytyvät isäntäasetuksista." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -64,7 +64,7 @@ "PCSX2 ei pysty varaamaan PS2-virtuaalikoneelle tarvittavaa muistia. Sulje " "joitakin paljon muistia vieviä taustatehtäviä ja kokeile uudelleen." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -72,7 +72,7 @@ "Varoitus: Joidenkin määriteltyjen PCSX2-uudelleenkääntäjien alustus " "epäonnistui ja ne on poistettu käytöstä:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -83,7 +83,7 @@ "manuaalisesti ottamaan käyttöön yllä listatut uudelleenkääntäjät, jos saat " "virheet ratkaistua." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -93,7 +93,7 @@ "*täytyy* hankkia BIOS-tiedosto omistamastasi PS2-järjestelmästä (lainaamista " "ei lasketa). Lisätietoja löydät UKK:sta (FAQ) ja oppaista." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -119,7 +119,36 @@ "tällä tietokoneella, sinun tarvitsee siirtyä Käyttäjän Tiedostot -tilaan " "(paina allaolevaa nappia)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -201,6 +230,13 @@ "muistikortin sisällöntilatallennuksesta ladattaessa. Ei ole välttämättä " "yhteensopiva kaikkien pelien kanssa (Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -281,7 +317,7 @@ "Tämä toiminto resetoi olemassaolevan PS2-virtuaalikoneen tilan; kaikki " "nykyiset tiedot menetetään. Oletko varma?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -302,7 +338,7 @@ "\n" "(huom. liitännäisten asetuksia ei poisteta)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -314,7 +350,12 @@ "ja ottaa se uudestaan käyttöön milloin tahansa valikosta Asetukset: " "Muistikortit." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -322,11 +363,11 @@ "Ole hyvä ja valitse kelvollinen BIOS. Jos et pysty tekemään kelvollista " "valintaa, paina Peruuta sulkeaksesi konfiguraatiopaneelin." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Huomautus: Useimmat pelit toimivat hyvin oletusasetuksilla." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Huomautus: Useimmat pelit toimivat hyvin oletusasetuksilla." @@ -452,7 +493,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Pelikorjaukset voivat kiertää virheellisen emulaation vaikutuksia joissakin " "peleissä.\n" @@ -480,7 +522,7 @@ "('Automaattinen' tarkoittaa: valikoivasti käytä tiettyjä testattuja " "korjauksia tietyille peleille)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -489,14 +531,14 @@ "Olet poistamassa alustettua muistikorttia '%s'. Kaikki tämän kortin " "sisältämät tiedot menetetään! Oletko aivan varma?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Epäonnistui: Kopiointi sallitaan vain tyhjään PS2-muistikorttipaikkaan tai " "tiedostojärjestelmään." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Epäonnistui: Kohdemuistikortti '%s' on käytössä." @@ -581,36 +623,52 @@ "tai epätäydellisen %s-asennuksen takia, paina Peruuta sulkeaksesi " "asetuspaneelin." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - Vähentää EE-prosessorin syklinopeutta noin 50%. Kohtuullinen " +"nopeuslisäys, mutta *tulee* aiheuttamaan pätkivää ääntä monissa videoissa." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - Vähentää EE-prosessorin syklinopeutta noin 33%. Lievä nopeuslisäys " +"useimmille peleille korkealla yhteensopivuudella." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - Oletusarvoinen syklinopeus. Tämä vastaa hyvin pitkälle oikean PS2:den " "EmotionEnginen todellista nopeutta." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - Vähentää EE-prosessorin syklinopeutta noin 33%. Lievä nopeuslisäys " -"useimmille peleille korkealla yhteensopivuudella." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Vähentää EE-prosessorin syklinopeutta noin 50%. Kohtuullinen " -"nopeuslisäys, mutta *tulee* aiheuttamaan pätkivää ääntä monissa videoissa." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Poistaa VU-syklivarastamisen käytöstä. Kaikkein yhteensopivin asetus!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -618,7 +676,7 @@ "1 - Lievä VU-syklivarastaminen. Alhaisempi yhteensopivuus, mutta nopeuttaa " "jonkin verran useimpia pelejä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -626,7 +684,7 @@ "2 - Kohtuullinen VU-syklivarastaminen. Vielä alhaisempi yhteensopivuus, " "mutta huomattava nopeuslisäys joissain peleissä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -635,7 +693,7 @@ "aiheuttaa vilkkuvia grafiikoita tai nopeuden hidastumista useimmissa " "peleissä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -645,18 +703,22 @@ "aiheuttaa ongelmia, rikkinäistä ääntä ja virheellisiä FPS-lukemia. Kun " "kohtaat ongelmia emulaatiossa, ota tämä paneeli pois käytöstä ensin." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Korkeampien arvojen asettaminen tällä liukusäätimellä vähentää " "EmotionEnginen R5900-ydinprosessorin kellonopeutta, ja yleensä antaa suuren " "nopeuslisän peleihin, jotka eivät käytä oikean PS2:den laitteiston täyttä " "suorituskykyä hyväkseen." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -666,7 +728,7 @@ "määrää. Korkeammat arvot lisäävät EE:ltä varastettujen syklien määrää " "jokaiselle VU-mikro-ohjelmalle joita peli suorittaa." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -676,7 +738,7 @@ "reaaliaikaisen päivittämisen sijaan. Tämä on useimmiten turvallista, ja " "Super VU tekee jotain samankaltaista oletuksena." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -689,7 +751,7 @@ "saattaa jumiutua. GS-rajoitteisissa peleissä saattaa hidastaa nopeutta " "(erityisesti tuplaydinsuorittimilla)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -701,7 +763,7 @@ "pystytahdistukseen saavat vain pienen tai ei yhtään nopeutusta tästä " "viritelmästä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -717,7 +779,7 @@ "kierroksen jälkeen etenemme seuraavan tapahtuman ajankohtaan tai prosessorin " "aikasiivun loppuun, riippuen kumpi tulee ennemmin." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -725,7 +787,7 @@ "Tarkista HDLoaderin yhteensopivuuslistasta tunnetut pelit, jotka eivät toimi " "tämän kanssa. (Usein merkitty tarvitsemaan 'mode 1' tai 'slow DVD'" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -733,7 +795,7 @@ "Huomioi, että kun nopeusrajoitus on poistettu käytöstä, nopeutus- ja " "hidastustilat eivät myöskään ole saatavilla." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -742,7 +804,7 @@ "on mahdotonta. Sen ottaminen käyttöön aiheuttaa vakavia grafiikkavirheitä " "joissain peleissä." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -750,7 +812,7 @@ "Ota tämä käyttöön jos epäilet MTGS:n säiesynkronoinnin aiheuttavan " "kaatumisia tai grafiikkavirheitä." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -767,7 +829,7 @@ "Varoitus: Tämän valinnan voi ottaa käyttöön lennosta, mutta yleensä ei voi " "poistaa käytöstä lennosta (pelikuvan tilalla on yleensä roskaa)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/fi_FI/pcsx2_Main.po pcsx2-1.4.0/locales/fi_FI/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/fi_FI/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/fi_FI/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-05-20 13:27+0200\n" "Last-Translator: kmartimo \n" "Language-Team: quarterlife \n" @@ -23,15 +23,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Ei syytä annettu." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Jäsennysvirhe" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Tietokoneesi laitteisto ei kykene suorittamaan PCSX2:hta. Pahoittelut." @@ -100,7 +100,7 @@ "Sisältää tyhjäkäynnin tapahtumaprosessoinnin ja muita harvinaisia " "tapahtumakäyttöjä." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Tuntematon ISO-levykuvaformaatti" @@ -118,20 +118,20 @@ "Jos lataat ISO-levykuvasta, tämä virhe voi aiheutua ei-tuetusta ISO-" "levykuvaformaatista tai virheestä PCSX2:n ISO-levykuvatuessa." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "MTGS-säie ei vastaa koska se odottaa GS-liitännäisen käynnistymistä." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Tilatallennusta ei voida ladata, koska se vaikuttaa olevan vioittunut tai " "epätäydellinen." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -140,7 +140,7 @@ "Liitännäisen %s avaaminen epäonnistui. Tietokoneessasi saattaa olla liian " "vähäiset resurssit tai epäyhteensopivaa laitteistoa/ajureita." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -149,18 +149,18 @@ "Liitännäisen %s alustaminen epäonnistui. Järjestelmässäsi saattaa olla " "liian vähän muistia tai muita tarvittuja resursseja." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Valitun %s-liitännäisen tiedostoa ei löytynyt" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "Valitun %s-liitännäisen tiedosto ei ole kelvollinen dynaaminen kirjasto" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -169,14 +169,14 @@ "Valittu %s-liitännäinen ei ole PCSX2-liitännäinen tai se on tarkoitettu " "vanhalle PCSX2-versiolle, jota ei tueta." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Liitännäinen ilmoittaa että laitteistosi tai ohjelmistosi/ajurisi eivät ole " "tuettuja." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -184,7 +184,7 @@ "Valittu liitännäinen ei ole PCSX2-liitännäinen tai se on tarkoitettu " "vanhalle PCSX2-versiolle, jota ei tueta." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -193,11 +193,11 @@ "Valittu %s-liitännäinen ei ole kelvollinen PCSX2-liitännäinen tai se on " "tarkoitettu vanhalle PCSX2-versiolle, jota ei tueta." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Sisäisen muistikorttiliitännäisen alustus epäonnistui." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Liitännäinen poistettu käytöstä" @@ -364,11 +364,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Yksityiskohtainen CDVD-laitteiston loki." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2-viesti" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -376,31 +376,31 @@ "Tilatallennusta ei tallennettu oikein. Väliaikaistiedosto luotiin " "onnistuneesti, mutta sitä ei pystytty siirtämään lopulliseen kohteeseensa." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Turvallisin" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Turvallinen (nopeampi)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Tasapainotettu" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Aggressiivinen" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Erittäin aggressiivinen" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Enimmäkseen haitallinen" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Olemassaolevan asetustiedoston ylikirjoitus epäonnistui; käyttö oli estetty." @@ -409,7 +409,7 @@ msgid "Loading PS2 system plugins..." msgstr "Ladataan PS2-järjestelmäliitännäisiä..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -418,95 +418,100 @@ "SSE-laajennoksia ei ole saatavilla. PCSX2 vaatii suorittimelta SSE-" "käskykantatuen." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 Uudelleenkääntäjän virhe(et)" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Kaikki valinnat ovat vain nykyiselle istunnolla ja niitä ei tallenneta.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoFile" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "näyttää tämän listan komentorivivalitsimia" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "pakottaa ohjelman lokin/konsolin näkyväksi" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "käytä koko näytön GS-tilaa" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "käytä ikkunoitua GS-tilaa" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "poistaa graafisen käyttöliittymän käytöstä pelejä pelattaessa" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "suorittaa ELF-tiedoston" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "käynnistää tyhjällä dvd-levykelkalla; käytä päästäksesi PS2:n " "järjestelmävalikkoon" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "käynnistää CDVD-liitännäiseltä (ohittaa IsoFile-valitsimen)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "poistaa kaikki nopeusviritelmät käytöstä" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "käytä määriteltyä, pilkulla tai putkella eroteltua, listaa pelikorjauksista." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "poistaa nopean käynnistyken käytöstä" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "vaihtaa asetustiedoston polun" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "määrittää käytettävän PCSX2-asetustiedoston" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "pakottaa %s:n käynnistämään ensimmäisen käyttökerran asetusvelhon" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "ottaa käytöön siirrettävän tilan (vaatii järjestelmänvalvoja/root-oikeudet)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "määrittää tiedoston jota käytetään %s-liitännäisenä" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Liittännäisen ohitusvirhe - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -517,96 +522,96 @@ "ole kelvollinen %s-liitännäinen:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Paina OK käyttääksesi oletuksena määriteltyä liitännäistä, tai Peruuta " "sulkeaksesi %s:den." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2-virhe: Laitteisto puutteellinen" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Paina OK sulkeaksesi %s:den." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kriittinen virhe" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Peruuta" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Peruuta" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Käytä" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Seuraava >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Edellinen" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Edellinen" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Valmis" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Kyllä" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Ei" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Selaa" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Tallenna" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Tallenna &nimellä..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Ohje" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Koti" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Näytä tietoja-ikkuna" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -616,43 +621,50 @@ "\n" "Paina Ok mennäksesi liitännäisten konfigurointipaneeliin." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Varoitus! Järjestelmäliitännäisiä ei ole ladattu. PCSX2 ei mahdollisesti " "toimi." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s komentorivivalinnat" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS-virhe" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Paina Ok mennäksesi BIOSin konfigurointipaneeliin." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Varoitus! Järjestelmäliitännäisiä ei ole ladattu. PCSX2 ei mahdollisesti " +"toimi." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s komentorivivalinnat" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 säie ei vastaa" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Lopeta" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Suoritetaan PS2-virtuaalikonetta..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Selaa valitaksesi Iso-tiedosto, joka ei ole lähihistoriassasi." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Selaa..." @@ -697,51 +709,52 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Ei pysty ottamaan uusia asetuksia käyttöön, jokin asetus ei kelpaa." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Lokintallennuskysymys" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Sovittaa paljon lokia mikrokosmisen pieneen tilaan." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Pieni" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Tätä minä käytän (ohjelmoija)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normaali" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Mukava ja luettava." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Suuri" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Valtava" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Jos sinulla on todella suuren erottelukyvyn näyttö." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Oletusarvoinen pehmeävärinen teema." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Vaalea teema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -749,84 +762,94 @@ "Klassinen musta väriteema niille ihmisille, jotka nauttivat tekstin " "korventumisesta näköhermoihinsa." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tumma teema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Aina päällimmäisenä" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Tämä valittuna loki-ikkuna pysyy muiden ikkunoiden päällä." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Tallenna..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Tallenna lokin sisältö tiedostoon" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "T&yhjennä" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Tyhjentää loki-ikkunan sisällön" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Ulkonäkö" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Sulje" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Sulkee tämän loki-ikkunan, ikkunan sisältö säilytetään" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Kehitys/runsas" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Näyttää PCSX2-kehityslokit" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD-luennat" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Näyttää levynlukutoiminnan" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Ota kaikki käyttöön" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Ottaa käyttöön kaikki lokilähteet." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Poista kaikki käytöstä" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Poistaa käytöstä kaikki lokilähteet." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Palauta oletusasetukset" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Ottaa käyttöön kaikki lokilähteet." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Loki" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "Lä&hteet" @@ -839,48 +862,45 @@ msgid "About %s" msgstr "Tietoja %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatestaus" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Edelliset versiot" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Sivujen ylläpitäjät" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Liitännäisasiantuntijat" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Erityiskiitokset" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Kehittäjät" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Osallistujat" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Playstation 2 -emulaattori" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 viralliset sivut ja foorumit" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2 virallinen Svn-varasto GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Olen nähnyt tarpeeksi" @@ -888,23 +908,19 @@ msgid "Assertion Failure - " msgstr "Oletusvirhe - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Tallentaa ruutukaappauksen tästä asetusikkunasta PNG-tiedostoksi." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Tallenna kuvakaappaukset sijaintiin..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS-valitsin" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Älä näytä tätä ikkunaa uudelleen." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -912,7 +928,7 @@ "Poistaa tämän ponnahdusikkunan käytöstä ja käyttää valitsemaasi vaihtoehtoa " "oletuksena jatkossa." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -920,16 +936,89 @@ "Ponnahdusikkunaa ei näytetä uudelleen. Tämän asetuksen voi poistaa " "asetuksista." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ohita" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Resetoi" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Kansiot" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Virhe (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Luo muistikortti" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Luo uusi muistikortti" @@ -951,37 +1040,37 @@ msgid "Select file name: " msgstr "Valitse tiedostonimi:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Virhe (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Luo muistikortti" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Virhe: Muistikorttia ei voitu luoda." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Virhe: Muistikorttia ei voitu luoda." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Käytä NTFS-pakkausta tätä muistikorttia luodessa." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [yhteensopivin]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "" "Tämä on Sonyn standardikoko ja sitä tukee kaikki pelit ja BIOS-versiot." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -989,32 +1078,32 @@ "Käytä aina tätä valintaa jos haluat muistikortin turvallisimman ja varmimman " "käyttäytymisen." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Tyypillinen koko muiden valmistajien muistikorteille, pitäisi toimia " "useimpien pelien kanssa." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 ja 32 MB muistikorteilla on suunnilleen sama yhteensopivuustaso." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1022,7 +1111,7 @@ "Alhaisen yhteensopivuuden varoitus: Kyllä, se on todella iso, mutta ei toimi " "välttämättä kaikissa peleissä." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1030,6 +1119,22 @@ "Käytä omalla vastuulla. Muistikortin arvaamaton käyttäytyminen on " "mahdollista (vaikkakin epätodennäköistä)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1040,6 +1145,7 @@ msgstr "Asetukset" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Kielivalitsin" @@ -1094,15 +1200,19 @@ msgstr "" "Poista muisikortit automaattisesti käytöstä tilatallennuksia ladattaessa" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Muistikorttien hallinta" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Raahaa kortteja PS2-muistikorttipaikkoihin tai pois niistä" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1166,24 +1276,24 @@ msgid "Game Fixes" msgstr "Pelikorjaukset" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Komponenttivalitsijat - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Liitännäiset" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Kansiot" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Ulkoasu/teemat - %s" @@ -1205,47 +1315,51 @@ msgid "Terminate App" msgstr "Lopeta ohjelma" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS-ulostulo ei ole käytössä!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Tallenna tila" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Tallentaa virtuaalikoneen tilan nykyiseen paikkaan." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Lataa tila" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Lataa virtuaalikoneen tilan nykyisestä paikasta." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Lataa tilan varmuuskopio" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Lataa virtuaalikoneen tilan varmuuskopion nykyiselle paikalle." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Kierrä seuraavaan paikkaan" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Kiertää nykyistä tallennuspaikkaa +1 -tyylillä!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Kierrä edelliseen paikkaan" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Kiertää nykyistä tallennuspaikkaa -1 -tyylillä!" @@ -1262,7 +1376,7 @@ "On virheellistä pudottaa useita tiedostoja %s-ikkunaan. Yksi kerrallaan, " "kiitos." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Vahvista PS2:n resetointi" @@ -1280,377 +1394,377 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Olet pudottanut seuraavan ISO-levykuvan %s:een:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Paikka %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Varmuuskopio" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Näytä konsoli" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsoli Stdioon" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Järjestelmä" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Asetukset" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Sekalaiset" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Alustetaan..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Suorita ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Raakojen PS2-binaarien suorittamiseen" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Varmuuskopioi ennen tallennusta" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automaattiset pelikorjaukset" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Automaattisesti käyttää tarvittavia pelikorjauksia tunnetusti ongelmallisiin " "peleihin" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Ota huijaukset käyttöön" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Ota käyttöön nopeusviritelmät" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Yhdistä isäntäjärjestelmän tiedostojärjestelmä" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Sammuta" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "" "Pyyhkii kaikki sisäiset virtuaalikoneen tilat ja sammuttaa liitännäiset." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Lopeta" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%s:n sulkeminen saattaa olla vaarallista terveydellesi" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Iso-valitsin" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Liitännäisen valikko" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Tekee valitusta ISO-levykuvasta CDVD-lähteen." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Liitännäinen" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Käyttää ulkoista liitännäistä CDVD-lähteenä." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Ei levyä" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Käytä tätä käynnistääksesi virtuaalisen PS2:den BIOS-asetuksiin." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Emulaation &asetukset" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Muistikortit" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Liitännäis/BIOS-valitsin" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Pelitietokannan muokkaustyökalu" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Ääni (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Ohjaimet (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Nollaa kaikki asetukset..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Nollaa kaikki %s:den asetukset ja ajaa ensimmäisen käyttökerran asetusvelhon " "uudelleen." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Tietoja..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Lokitus..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Keskeytä" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Turvallisesti tauottaa emulaation ja säilyttää PS2:n tilan." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Jatka" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Jatkaa keskeytetystä emulaatiotilasta." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Keskeytä/Jatka" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Ei aktiivista emulaatiotilaa; ei voi keskeyttää tai jatkaa." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Uudelleenkäynnistä" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simuloi PS2-virtuaalikoneen laitteiston resetointia." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Ei aktiivista emulaatiotilaa; käynnistä jotain ensin." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Uudelleenkäynnistä CDVD (täysi)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Aktiivisen virtuaalikoneen pakotettu resetointi." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Käynnistä CDVD (täysi)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Käynnistä virtuaalikone käyttäen nykyistä DVD- tai Iso-lähdettä" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Uudelleenkäynnistä CDVD (nopea)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Uudelleenkäynnistä nopeasti (ohittaa aloitusruudut)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Käynnistä CDVD (nopea)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "" "Käytä nopeaa käynnistystä PS2-käynnistyksen ja aloitusruutujen ohittamiseen" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Ei ladattua liitännäistä" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "GS:n ydinasetukset..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "" "Muokkaa PCSX2:n ydinvirtuaalikoneen sääntelemiä laitteistoemulaatioasetuksia." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Ikkunan asetukset..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Muokkaa ikkunan ja ulkoasun asetuksia, kuvasuhde mukaanlukien." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Liitännäisen asetukset..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Avaa %s-liitännäisen edistyneiden asetusten valikon." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Nollataanko kaikki asetukset?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Vahvista ISO-levykuvan vaihto" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Haluatko vaihtaa levyä lennosta vai käynnistää uuden levykuvan (resetoimalla " "järjestelmän)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Vaihda levy lennosta" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Vahvista CDVD-lähteen vaihto" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Olet valinnut CDVD-lähteen vaihdon asetuksesta %s asetukseen %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Haluatko vaihtaa levyn lennosta vai käynnistää uudelleen?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Kaikki tuetut (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Levykuvat (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Lohkovedokset (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Lohkovedokset (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Kaikki tiedostot (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Valitse CDVD-lähteen ISO-levykuva..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Valitse ELF-tiedosto..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO-tiedostoa ei löytynyt!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Tiedostoa avattessa tapahtui virhe:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1658,7 +1772,7 @@ "Virhe: Valittua ISO-levykuvatiedostoa ei löydy. Napsauta OK:ta valitaksesi " "uuden ISO-levykuvan CDVD:lle." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1666,7 +1780,7 @@ "Olet valinnut seuraavan ISO-levykuvatiedoston:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1679,7 +1793,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1692,19 +1806,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Tiedostonimi on tyhjä tai liian lyhyt" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Tiedostonimi vaaditun kansion ulkopuolella" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Tiedostonimi on jo olemassa" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Käyttöjärjestelmä estää tämän tiedoston luonnin" @@ -1712,28 +1826,28 @@ msgid "Cannot apply settings..." msgstr "Ei pysty ottamaan asetuksia käyttöön..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS-hakupolku:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Valitse PS2 BIOS-kuvat sisältävä kansio" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "" "Paina Selaa-nappia valitaksesi kansion mistä PCSX2 etsii PS2 BIOS-kuvia." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Päivitä lista" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Valitse BIOS-kuva:" @@ -1765,40 +1879,44 @@ msgid "None" msgstr "Ei mikään" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normaali" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU edistyneen uudelleenkääntäjän valinnat" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Ylimääräinen + etumerkin säilytys" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Täysi" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 kehittyneen uudelleenkääntäjän valinnat" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Ylimääräinen" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Tulkki" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Mahdollisesti koko universumin hitain." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Uudelleenkääntäjä" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1806,11 +1924,11 @@ "Suorittaa ajonaikaisen binaarikääntämisen 64-bittisestä MIPS-IV-konekielestä " "x86-konekieleen." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Melko hidas, pelkästään vianmääritystä varten." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1818,20 +1936,20 @@ "Suorittaa ajonaikaisen binaarikääntämisen 32-bittisestä MIPS-I-konekielestä " "x86-konekieleen." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Ota käyttöön EE-välimuisti (hitaampi)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Vain tulkille, pelkästään vianmääritystä varten" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Palauta oletusasetukset" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1839,22 +1957,22 @@ "Vektoriyksikkötulkki. Hidas eikä kovin yhteensopiva. Käytä vain " "vianmääritykseen." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU-uudelleenkääntäjä" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Uusi vektoriyksikön uudelleenkääntäjä paljon paremmalla yhteensopivuudella. " "Suositeltu." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU-uudelleenkääntäjä [vanha]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2031,7 +2149,7 @@ msgstr "Jätä huomiotta väylän suunta Path3-siirrossa - Käytetään Hotwheelsissä" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2062,86 +2180,91 @@ "Varoitus: Jäljityslokien käyttöön ottaminen on yleensä hyvin hidasta, ja " "johtava syy 'Mitä tapahtui nopeudelle?'-ongelmiin. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Valitse PS2-muistikortit sisältävä kansio" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Poista käytöstä" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Kopioi ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Uudelleennimeä ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Luo ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Aseta ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Kortti:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Luo uusi muistikortti." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Uudelleennimeä tämä muistikortti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Aseta ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Poistaa muistikortin tästä muistikorttipaikasta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Aseta tämä muistikortti muistikorttipaikkaan ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Tee kopio tästä muistikortista ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Poista" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Poistaa muistikortin peruuttamattomasti (kaikki sisältö menetetään)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Luo uusi muistikortti ja aseta se tähän muistikorttipaikkaan." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Poistetaanko muistikorttitiedosto?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Luo kopio muistikortista" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Epäonnistui: vain olemassaolevia muistikortteja voi kopioida." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2149,25 +2272,25 @@ "Valitse kopion nimi\n" "( '.ps2' lisätään automaattisesti)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Epäonnistui: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopiointi epäonnistui!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Muistikortti '%s' kopioitiin muistikorttiin '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Onnistuminen" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2176,121 +2299,126 @@ "Valitse uusi nimi muistikortille '%s'\n" "( '.ps2' lisätään automaattisesti)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Uudelleennimeä muistikortti" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Virhe: Uudelleennimeämistä ei voitu suorittaa.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Paikka-%u / Multitap-%u--Paikka-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Paikka-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Tyhjä" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Valitse kohdepaikka muistikortille '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Aseta muistikorttipaikkaan" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Poista muistikorttipaikasta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Aseta muistikortti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Kopio muistikortti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Uudelleennimeä muistikortti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Poista muistikortti" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Aseta muistikorttipaikkaan" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Luo uusi muistikortti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Päivitä lista" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Muistikorttipaikka" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kortin (tiedosto)nimi" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Koko" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Alustettu" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Viimeksi muokattu" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Luotu" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Ei" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Kyllä" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Käyttämättömät --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Ei käyttämättömiä --]" @@ -2323,11 +2451,11 @@ msgid "Select a document root for %s" msgstr "Valitse hakemistojuuri %s:lle" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Käytä" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Tee tästä kielestä oletukseni juuri nyt!" @@ -2405,22 +2533,22 @@ "Syy: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Suoritetaan tehtäviä..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Ota käyttöön nopeusviritelmät" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Turvallinen ja helppo tapa varmistaa, että kaikki nopeusviritelmät ovat " "poistettu täysin käytöstä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2428,34 +2556,34 @@ "Palauttaa kaikki nopeusviritelmäasetukset oletuksiinsa, siis ottaa ne kaikki " "POIS käytöstä." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE syklinopeus [Ei suositella]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU-syklivarastaminen [Ei suositella]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU viritelmät" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU lippuviritelmä" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Hyvä nopeuslisä ja suuri yhteensopivuus; saattaa aiheuttaa " "grafiikkavirheitä... [Suositeltu]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Monisäikeistetty microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2463,15 +2591,15 @@ "Hyvä nopeuslisä ja suuri yhteensopivuus; saattaa aiheuttaa jumiutumista... " "[Suositeltu jos 3 tai enemmän suoritinydintä]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Muut viritelmät" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Ota käyttöön INTC-pyörimisen havaitseminen" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2479,22 +2607,22 @@ "Massiivinen nopeuslisä joillekkin peleille, melkein olemattomat " "sivuvaikutukset yhteensopivuudelle. [Suositeltu]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Ota käyttöön odotussilmukan havaitseminen" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Maltillinen nopeuslisä joillekin peleille, ei tunnettuja sivuvaikutuksia. " "[Suositeltu]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Ota käyttöön nopea CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Nopea levyn luku, vähentää latausaikoja. [Ei suositella]" @@ -2517,42 +2645,42 @@ msgid "Select a visual theme:" msgstr "Valitse teema:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Poista nopeusrajoitin käytöstä" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Käytännöllinen suorituskykytestaamiseen. Kytke tämä päälle ja pois " "pelaamisen aikana painamalla F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Perusnopeuden säätö:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Hidastuksen säätö:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Nopeutuksen säätö:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC-kehysnopeus:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL-kehysnopeus:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2560,19 +2688,19 @@ "Virhe NTSC- tai PAL-kehysnopeuden asetusten tulkitsemisessa. Asetusten " "tulee olla kelvollisia liukulukunumeroita." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Pois käytöstä [oletus]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Ohita vain kun nopeutus päällä (TAB ottaa käyttöön)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Jatkuva ohittaminen" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2580,19 +2708,19 @@ "Normaali- ja Nopeutus-nopeustila ohittaa kehyksiä. Hidastustila poistaa " "kehysten ohittamisen käytöstä." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Piirettävien kehysten määrä" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Ohitettavien kehysten määrä" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Käytä synkronoitua MTGS:ää" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2600,11 +2728,11 @@ "Vain MTGS:n mahdollisten virheiden etsintään, koska mahdollisesti todella " "hidas." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Poista GS-ulostulo käytöstä kokonaan" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2612,11 +2740,11 @@ "Poistaa käytöstä täysin kaiken GS-liitännäisen toiminnan; ihanteellinen " "EEcore-komponenttien suorituskykytestaukseen." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Kehysten ohittaminen" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Nopeusrajoitin" @@ -2659,7 +2787,7 @@ "Tätä tilatallennusta ei voida ladata koska kriittisiä komponentteja " "puuttuu. Katso yksityiskohdat lokitiedostosta." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (oletus)" @@ -2683,7 +2811,7 @@ "Valittua BIOS-tiedostoa ei ole olemassa. Ole hyvä ja tee asetukset " "uudelleen." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2700,6 +2828,15 @@ "%s laajennoksia ei löytynyt. microVU vaatii suorittimen, jossa on MMX-, " "SSE- ja SSE2-laajennokset." +#~ msgid "Betatesting" +#~ msgstr "Betatestaus" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS-valitsin" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Valitse CDVD-lähteen ISO-levykuva..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2:hta suositellaan" diff -Nru pcsx2-1.3.1+dfsg/locales/fr_FR/pcsx2_Iconized.po pcsx2-1.4.0/locales/fr_FR/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/fr_FR/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/fr_FR/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-03-08 11:33-0000\n" "Last-Translator: goldeng \n" "Language-Team: goldeng \n" @@ -41,7 +41,7 @@ "voulez émuler des jeux PSX, veuillez télécharger un émulateur PS1 dédié (par " "exemple, ePSXe ou PCSX) !" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -55,7 +55,7 @@ "Vous pouvez également essayer de réduire la taille du cache par défaut " "allouée au recompiler PCSX2." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -64,7 +64,7 @@ "l'émulation d'une machine virtuelle PS2. Mettez fin aux processus en cours " "qui nécessitent beaucoup de mémoire (CTRL + ALT + Suppr) puis réessayez." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -72,7 +72,7 @@ "Attention ! Certaines fonctions du recompiler PCSX2 n'ont pas pu être " "initialisées et ont, par conséquent, été désactivées :" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -83,7 +83,7 @@ "globales. Si vous êtes parvenus à résoudre des problèmes en désactivant le " "recompiler, vous devrez le réactiver manuellement." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -98,7 +98,7 @@ "Veuillez consulter la FAQ ou les guides disponibles pour plus de " "renseignements." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -124,7 +124,36 @@ "d'un accès au compte administrateur, vous aurez besoin de faire appel au " "mode User Documents (cliquez sur le bouton ci-dessous)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -208,6 +237,13 @@ "Cette option peut être incompatible avec certains jeux (Guitar Hero, par " "exemple) !" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -290,7 +326,7 @@ "virtuelle PS2 : toutes les données en cours seront perdues.\n" "Êtes-vous sûr de vouloir réaliser cette opération ?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -312,7 +348,7 @@ "Êtes-vous sûr de vouloir procéder à cette manipulation ?\n" "PS. Les paramètres des plugins individuels ne seront pas affectés." -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -324,7 +360,12 @@ "et relancer la carte mémoire à l'aide du menu principal (Configuration -> " "Cartes mémoire)." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -332,13 +373,13 @@ "Veuillez choisir un BIOS valide. Si vous ne possédez pas un tel fichier, " "cliquez sur Annuler pour fermer le panneau de configuration." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Rappel : La plupart des jeux fonctionneront correctement à l'aide du " "paramétrage par défaut." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "Rappel : La plupart des jeux fonctionneront correctement à l'aide du " @@ -473,7 +514,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Les patchs peuvent corriger des problèmes liés à l'émulation de titres " "spécifiques.\n" @@ -501,7 +543,7 @@ "dans le menu \"Système\" de l'émulateur plutôt que d'utiliser celle-ci.\n" "(\"Patchs automatiques\" : utilise uniquement le patch associé au jeu émulé)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, fuzzy, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -511,14 +553,14 @@ "les données présentes sur la carte seront perdues !\n" "Êtes-vous sûr de réaliser cette manipulation ?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Erreur : Le port-PS2 concerné est occupé par un autre service, empêchant la " "copie." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, fuzzy, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -604,36 +646,52 @@ "installation incomplète de %s alors cliquer sur Annuler pour fermer le " "paneau de Configuration" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - Diminue l'EE Cyclerate d'environ 50% : amélioration modérée des " +"performances, mais le son de certaines cinématiques sera insupportable." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - Diminue l'EE Cyclerate d'envion 33% : amélioration sensible des " +"performances et compatibilité élevée." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - Cyclerate par défaut : la vitesse d'émulation est équivalente à celle " "d'une véritable console Playstation 2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - Diminue l'EE Cyclerate d'envion 33% : amélioration sensible des " -"performances et compatibilité élevée." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Diminue l'EE Cyclerate d'environ 50% : amélioration modérée des " -"performances, mais le son de certaines cinématiques sera insupportable." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Désactive le VU Cycle Stealing : compatibilité maximale, évidemment !" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -641,7 +699,7 @@ "1 - VU Cycle Stealing léger : faible compatibilité mais une amélioration " "sensible des performances pour certains jeux." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -649,7 +707,7 @@ "2 - VU Cycle Stealing modéré : très faible compatibilité, mais une " "amélioration significative des performances pour certains jeux." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -657,7 +715,7 @@ "3 - VU Cycle Stealing maximal : relativement inutile puisqu'il engendre des " "ralentissements et des bugs graphiques dans la plupart des jeux." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -668,18 +726,22 @@ "des FPS. Si vous rencontrez des soucis lors de l'émulation d'un jeu, cette " "option est la première à désactiver." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Les valeurs définissent la vitesse de l'horlogue du CPU core R5900 de " "l'EmotionEngine, et entraînent une amélioration des performances conséquente " "pour les jeux incapables d'utiliser tout le potentiel des composants de la " "Playstation 2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -689,7 +751,7 @@ "au système EmotionEngine. Une valeur élevée augmente le nombre emprunté à " "l'EE pour chaque microprogramme VU que le jeu utilise." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -699,7 +761,7 @@ "qu'ils ne soient lus en permanence. Cette option n'occasionne aucun problème " "en général, et le Super VU fait la même chose par défaut." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -714,7 +776,7 @@ "De plus, les processeurs dual-core souffriront de ralentissements " "conséquents." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -725,7 +787,7 @@ "2D. Les jeux qui n'utilisent pas cette méthode connaîtront une légère " "amélioration des performances." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -735,7 +797,7 @@ "timeslice, whichever comes first." msgstr "Vise surtout l'EE idle loop à l'adresse 0x81FC0 du kernel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -744,7 +806,7 @@ "rencontrent habituellement des problèmes avec lui (le plus souvent, " "repérables par l'indication \"mode 1\" ou \"slow DVD\")." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -752,7 +814,7 @@ "Si le Famelimiting est désactivé, les modes Turbo et Slow Motion ne seront " "plus disponibles." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -761,7 +823,7 @@ "L'activation de cette option pourrait entraîner des bugs graphiques " "conséquents dans certains jeux." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -769,7 +831,7 @@ "Activez cette option si vous pensez que le processus SyncMTGS cause des bugs " "graphiques ou crashs récurents." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -787,7 +849,7 @@ "pause, mais entraînera des bugs graphiques si elle est ensuite désactivée au " "cours de la même partie." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/fr_FR/pcsx2_Main.po pcsx2-1.4.0/locales/fr_FR/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/fr_FR/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/fr_FR/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-03-08 11:42-0000\n" "Last-Translator: goldeng \n" "Language-Team: goldeng \n" @@ -23,15 +23,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Erreur critique." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Parse error" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "Le matériel de votre ordinateur rend impossible le fonctionnement de PCSX2. " @@ -98,7 +98,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "Inclue certains évènements d'usage peu commun." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Format du fichier ISO non reconnu." @@ -116,7 +116,7 @@ "Si cette erreur se produit à la suite du montage d'une image ISO, c'est que " "le format utilisé ne semble pas être pris en charge par PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." @@ -124,14 +124,14 @@ "Le processus MTGS ne répondait plus alors qu'il patientait jusqu'au " "démarrage du plugin GS." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "La sauvegarde ne peut pas être chargée, elle est sans doute corrompue ou " "incomplète." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -141,7 +141,7 @@ "ressources en mémoire suffisantes, ou le plugin est incompatible avec votre " "matériel." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -150,19 +150,19 @@ "Le plugin %s n'a pas pu s'initialiser. Votre système ne semble pas disposer " "de ressources en mémoire suffisantes." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Le fichier de configuration du plugin %s est introuvable" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "Le fichier de configuration du plugin %s n'utilise pas une librairie " "dynamique valide." -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -171,14 +171,14 @@ "Le plugin %s n'est pas un plugin PCSX2, ou la version utilisée est trop " "ancienne." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Le plugin indique que votre matériel ou les drivers utilisés ne sont pas " "supportés." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -186,7 +186,7 @@ "Le plugin configuré n'est pas un plugin PCSX2, ou la version utilisée est " "trop ancienne." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -195,11 +195,11 @@ "Le plugin %s n'est pas un plugin PCSX2, ou la version utilisée est trop " "ancienne." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Le plugin de la Memory Card interne n'a pas pu s'initialiser." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin non-chargé." @@ -366,11 +366,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Rapport détaillé de l'hardware CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Message PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -379,31 +379,31 @@ "temporaire a été créé avec succès mais n'a pas pu être acheminé vers le " "dossier choisi." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Le plus sûr" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Sûr (rapide)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Equilibré" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Efficace" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Efficace (+)" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Nuisible" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Erreur lors de l'écrasement des paramètres pré-existants : autorisation " @@ -413,7 +413,7 @@ msgid "Loading PS2 system plugins..." msgstr "Plugins du système en cours de chargement..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -422,94 +422,99 @@ "Les extensions SSE ne sont pas disponibles. PCSX2 requiert un CPU qui " "supporte les instructions SSE." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Erreurs(s) du PCSX2 Recompiler" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Les paramètres ne concernent que la session actuelle et ne seront pas " "sauvegardés.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoFile" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "affiche la liste des commandes" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "oblige le rapport ou la console du programme à s'afficher" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "utilise le mode plein-écran GS" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "utilise le mode fenêtré GS" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "désactive l'affichage du GUI lorsqu'un jeu est lancé" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "exécute un fichier ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "démarre à partir d'un DVD vierge : à utiliser pour accéder directement au " "menu système de la PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "démarre depuis le plugin CDVD (remplace les paramètres IsoFile)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "désactive tous les speedhacks" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "utilisent les patchs sélectionnés dans la liste." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "désactive le démarrage rapide" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "modifie le chemin d'accès au fichier de configuration" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "spécifie le fichier de configuration PCSX2 à utiliser" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "oblige %s à démarrer l'assistant de première configuration" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "active le mode portable (requiert les droits d'un administrateur)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "spécifie que le fichier doit être utilisé comme le plugin %s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Erreur ! Surcharge du plugin - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -520,96 +525,96 @@ "plugin %s valide :\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Cliquez sur OK pour utiliser la configuration par défaut, ou sur Annuler " "pour fermer %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Erreur PCSX2 : Hardware." -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Cliquez sur OK pour fermer %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "Erreur critique de %s !" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Annuler" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Annuler" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Appliquer" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Suivant >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Précédent" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Retour" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Terminer" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Oui" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Non" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Parcourir" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Enregistrer" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Enregistrer &sous..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Aide" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Accueil" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Ouvre une boîte de dialogue (qui vaut le coup)." -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -619,43 +624,50 @@ "\n" "Cliquez sur OK pour accéder au panel de configuration des plugins." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "ATTENTION ! Le système des plugins n'a pas été chargé. PCSX2 ne peut pas " "être utilisé." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "Options de commande de %s" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Erreur ! BIOS PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Cliquez sur OK pour accéder au panel de configuration du BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"ATTENTION ! Le système des plugins n'a pas été chargé. PCSX2 ne peut pas " +"être utilisé." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "Options de commande de %s" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Le processus PCSX2 ne répond pas" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Terminer" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Exécution de la machine virtuelle PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Trouve un ISO qui n'apparaît pas dans l'historique récent." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Parcourir..." @@ -704,136 +716,147 @@ "Impossible d'appliquer les nouveaux paramètres, l'un d'entre eux n'est pas " "valide." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Sauvegarder le log" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Regroupe un nombre important de logs dans un espace réduit." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Petit" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "C'est ce que j'utilise (le mec qui programme)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "C'est sympa et lisible." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Moyen" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Grand" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Au cas où vous utiliseriez une résolution d'écran VRAIMENT élevée." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Thème par défaut." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Thème \"Light\"" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "Thème \"Classic black\"" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Thème \"Dark\"" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Toujours au-dessus" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Une fois cochée, la fenêtre de dialogue restera toujours par-dessus les " "autres fenêtres." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Enregistrer..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Sauvegarder le contenu du log dans un fichier" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "N&ettoyer" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Nettoyer le contenu du log dans la fenêtre" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Apparence" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Fermer" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Fermer la fenêtre du log : le contenu sera préservé" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev / Impression" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Affiche les logs des développeurs de PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Lecture CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Affiche l'activité de la lecture du disque" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Tout activer" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Activer tous les filtres source du log." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Tout désactiver" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Désactiver tous les filtres source du log." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Réinitialiser les paramètres" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Activer tous les filtres source du log." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Rapport" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Sources" @@ -846,48 +869,45 @@ msgid "About %s" msgstr "En savoir plus sur %s !" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Beta-test" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versions précédentes" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmestres" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Spécialistes plugins" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Remerciements particuliers à" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Développeurs :" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Ils ont contribué :" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Un émulateur Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Site internet/forums officiels PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "Répertoire Svn officiel PCSX2 (sur GitHub)" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "C'est bon, j'ai compris !" @@ -895,29 +915,25 @@ msgid "Assertion Failure - " msgstr "Assertion Failure -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Sauvegarder une image d'écran des paramètres (fichier PNG)." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Sauvegarder les images vers..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Choix du BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Ne plus montrer cette fenêtre." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "Désactive cette fenêtre et se rappellera de la réponse choisie ici." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -925,16 +941,89 @@ "Cette fenêtre ne s'affichera plus à l'avenir. Les paramètres peuvent être " "réinitialisés à partir du panel concerné." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorer" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Réinitialiser" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Dossiers" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Erreur (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Créer une carte mémoire" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Créer une nouvelle carte mémoire" @@ -956,30 +1045,30 @@ msgid "Select file name: " msgstr "Nom du fichier :" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Erreur (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Créer une carte mémoire" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Erreur ! La carte mémoire n'a pas pu être créée." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Erreur ! La carte mémoire n'a pas pu être créée." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Utiliser une compression NTFS pour créer la carte." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [la plus compatible]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -987,7 +1076,7 @@ "Il s'agit de la taille standard prévue par Sony, et elle est supportée par " "tous les jeux (ainsi que tous les BIOS existants)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -995,34 +1084,34 @@ "Toujours utiliser cette option pour être sûr d'éviter les sauvegardes " "corrompues." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Le format classique des cartes mémoires non-officielles, qui devraient " "marcher avec la plupart des jeux." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" "Les cartes mémoire de 16 et 32 MB possèdent des facteurs de compatibilité " "similaires." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1030,7 +1119,7 @@ "Attention ! La compatibilité est réduite : certes, c'est très gros, mais la " "plupart des jeux ne marcheront pas avec." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1038,6 +1127,22 @@ "A vos risques et périls. La carte mémoire pourrait rencontrer des erreurs " "critiques." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1048,6 +1153,7 @@ msgstr "Paramètres" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Choix de la langue" @@ -1103,15 +1209,19 @@ "Éjecter automatiquement les cartes mémoire lorsqu'une sauvegarde virtuelle " "est chargée" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Gestionnaire de cartes mémoire" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Lecture des cartes mémoire vers / depuis les ports PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1174,24 +1284,24 @@ msgid "Game Fixes" msgstr "Patchs" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Gestionnaire de composants - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Dossiers" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Apparence / Thèmes - %s" @@ -1214,49 +1324,53 @@ msgid "Terminate App" msgstr "Terminer l'application" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "La sortie GS est désactivée !" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Sauvegarder" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "" "Sauvegarder les paramètres de la machine virtuelle vers l'emplacement actuel." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Charger" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "" "Charger les paramètres de la machine virtuelle vers l'emplacement actuel." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Charger le backup." -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Charger le backup de la machine vituelle sur l'emplacement actuel." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Passer à l'emplacement suivant" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "On passe au slot suivant !" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Passer à l'emplacement précédent" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "On passe au slot précédent !" @@ -1273,7 +1387,7 @@ "Vous ne pouvez pas glisser plusieurs fichiers à la fois vers une fenêtre %s. " "Un seul à la fois, merci." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Confirmer la réinitialisation de la PS2" @@ -1291,375 +1405,375 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Vous avez déposé l'image ISO dans %s :" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Emplacement %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Backup" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Afficher la console" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Console vers Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Système" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD/DVD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Configuration" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Autres" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debogueur" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Initialisation en cours..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Démarrage du ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Pour lancer directement des fichiers exécutables binaires." -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Faire un backup avant de sauvegarder" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Patchs automatiques" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Applique automatiquement les patchs associés à certains jeux." -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Activer les codes de triche" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Activer les correctifs pour écran large" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Activer le Host Filesystem" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Éteindre le jeu" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Coupe toutes les opérations en cours et réinitialise les plugins." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Quitter" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Fermer %s est dangereux pour la santé !" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Choisir un ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Gestionnaire de plugins" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Utilise l'image ISO choisie comme un disque PS2." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Utilise un plugin externe en tant que CDVD-source." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Pas de disque" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Permet la configuration du BIOS de votre PS2 virtuelle." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Paramètres &d'émulation" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Cartes mémoire" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Choix des Plugins/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editeur de base de données" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Vidéo (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Son (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Contrôleurs (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Sans-fil" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Effacer tous les paramètres..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Efface tous les paramètres de %s et relance l'assistant de première " "configuration." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "À propos de..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Connexion en cours..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pause" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Met l'émulation en pause et préserve son bon fonctionnement." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Reprendre le jeu" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Relance l'émulation là où elle s'était arrêtée." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pause / Reprendre" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Aucune émulation en cours : impossible d'interrompre ou de reprendre " "l'activité." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Redémarrer" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simule une réinitilisation de la PS2 virtuelle." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Pas d'émulation en cours : lancez quelque chose, d'abord !" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Relancer le CDVD (complet)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Redémarrage intégral du système d'émulation." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Démarrer le CDVD (complet)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Démarre le système à partir du DVD ou de l'ISO source." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Relancer le CDVD (rapide)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Redémarrage rapide du système d'émulation (saute les logos PS2/Sony)." -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Démarrer le CDVD (rapide)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Démarre le système en sautant les logos PS2/Sony." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Aucun plugin chargé" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Paramètres du Core GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "Modifie les paramètres d'émulation hardware gérés par PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Paramètres du mode fenêtré..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Modifie la fenêtre et l'apparence, notamment l'aspect ratio." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Paramètres du plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Ouvre la fenêtre de configuration avancée du plugin %s." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Réinitialiser tous les paramètres ?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Confirmer le changement d'image ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Voulez-vous changer de disque ou lancer une nouvelle image-disque " "(réinitilisation du système) ?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Changer de disque" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Confirmer le changement de CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Vous avez choisi de changer le CDVD %s pour %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Voulez-vous changer de disque ou démarrer une nouvelle image-disque " "(réinitilisation du système) ?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Tous les fichiers supportés (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Images disque (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Tous les fichiers (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Choisir un ISO..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Choisir un fichier ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Fichier ISO introuvable !" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Une erreur s'est produite alors que le fichier tentait d'être ouvert :" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1667,7 +1781,7 @@ "Erreur ! Le fichier ISO configuré n'existe pas. Cliquez sur OK pour choisir " "un autre ISO." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1675,7 +1789,7 @@ "Vous avez choisi l'image ISO suivante : \n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1688,7 +1802,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1701,19 +1815,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nom du fichier absent ou trop court" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nom du fichier extérieur au dossier" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Nom du fichier déjà existant" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Votre système empêche la création du fichier" @@ -1721,28 +1835,28 @@ msgid "Cannot apply settings..." msgstr "Impossible d'appliquer les paramètres..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Chemin du BIOS :" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Choisir le fichier où se trouvent les BIOS PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "" "Cliquez sur le bouton Parcourir pour sélectionner un dossier différent." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Rafraîchir la liste" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Sélectionner un BIOS :" @@ -1774,71 +1888,75 @@ msgid "None" msgstr "Aucun" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Options EE/FPU Advanced Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preserve Sign" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Complet" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Options VU0 / VU1 Advanced Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Peut-être la chose la plus lente de tout l'univers." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "" "Réalise une traduction en temps réel d'un code 64-bit MPIS-IV vers un x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Relativement lent : à utiliser uniquement à des fins de diagnostique." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "" "Réalise une traduction en temps réel d'un code 32-bit MIPS-I vers un x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Activer l'EE Cache (plus lent)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Seulement pour l'usage de l'interpreter, à des fins de diagnostique" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Réinitialiser les paramètres" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1846,22 +1964,22 @@ "Vector Unit Interpreter. Lent et rarement compatible. A n'utiliser que pour " "des diagnostiques." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nouveau Vector Unit recompiler qui bénéficie d'une compatibilité améliorée. " "Recommandé." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2040,7 +2158,8 @@ "Ignorer le Bus Direction sur le Path3 Transfer - Utile pour le jeu Hot Wheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "Utlise une emulation plus precise de GSdx quand une FMV joue" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2072,88 +2191,93 @@ "et reste l'une des principales réponses à la question : \"Où sont passés mes " "FPS !?\" :p" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Choisir le dossier des cartes mémoire PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Éjecter" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Dupliquer ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Renommer ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Créer ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Insérer ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Carte :" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Créer une nouvelle carte mémoire." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Renommer cette carte mémoire ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Insérer ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Éjecter la carte de son lecteur." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Insérer la carte dans un lecteur ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Dupliquer le contenu de cette carte mémoire ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Effacer" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Effacer la carte mémoire du disque (toutes les données seront " "irrémédiablement perdues)." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Créer une nouvelle carte mémoire et l'assigner à ce lecteur." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Effacer le fichier mémoire ?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Dupliquer la carte mémoire" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Échec : seule une carte déjà existante peut être dupliquée." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2161,25 +2285,25 @@ "Choisir un nom pour la copie \n" "(le format '.ps2' sera automatiquement ajouté)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Échec : %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "La copie a échoué ! (bad trip)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Carte mémoire '%s' dupliquée sous le nom '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Opération réalisée avec succès !" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2188,119 +2312,124 @@ "Choisissez un nouveau nom pour la carte mémoire '%s'\n" "(le format '.ps2' sera automatiquement ajouté à sa suite)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Renommer la carte mémoire" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Erreur : impossible à renommer.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Vide" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Assignez un lecteur pour '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Insérer la carte" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Éjecter la carte" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Insérer la carte ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Dupliquer la carte ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Renommer la carte ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Effacer la carte" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Insérer la carte" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Créer une nouvelle carte ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Rafraîchir la liste" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Port PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Nom de la carte" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Taille" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatée ?" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Type" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Dernière modification" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Créée le" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Non" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Oui" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Cartes inutilisées --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Pas de carte inutilisée --]" @@ -2331,11 +2460,11 @@ msgid "Select a document root for %s" msgstr "Choisir la racine du document pour %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Appliquer" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Cette langue deviendra celle par défaut !" @@ -2414,22 +2543,22 @@ "Explication : %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Exécution des tâches..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Activer les speedhacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "La manière la plus simple de s'assurer que les speedhacks ont été " "complètement désactivés." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2437,34 +2566,34 @@ "Réinitialise les options des speedhacks à leurs valeurs par défaut (à noter " "que cette opération les désactivera tous)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EmotionEngine (EE) Cyclerate [Non recommandé]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VectorUnit (VU) Cycle Stealing [Non recommandé]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Amélioration sensible des performances et compatibilité élevée, mais " "pourrait causer quelques bugs graphiques... [Recommandé]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2472,15 +2601,15 @@ "Bonnes performances et compatibilité élevée, mais pourrait occasionner des " "\"tremblements\" à l'écran... [Recommandé pour Proc. 3/+ coeurs]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Autres Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Active l'INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2488,22 +2617,22 @@ "Augmente les FPS de manière considérable sur certains jeux et n'a pas " "d'impact sur la compatibilité générale. [Recommandé]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Activer la Wait Loop Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Amélioration modérée des performances sur certains jeux, et aucun effet " "pervers connu. [Recommandé]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Activer l'accès rapide aux CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Réduit les temps de chargement. [Non recommandé]" @@ -2527,42 +2656,42 @@ msgid "Select a visual theme:" msgstr "Sélectionner un thème :" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Désactiver le Framelimiting (limite le nombre de frames)" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Utile pour les benchmarks. On peut utiliser cette option en jeu grâce à la " "touche F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Ajustement de la Framerate de base :" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Ajustement de la Slow Motion :" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Ajustement du Turbo :" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Framerate en mode NTSC :" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS (IPS)" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Framerate en mode PAL :" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2570,19 +2699,19 @@ "Erreur de lecture des paramètres de la framerate NTSC ou PAL : les valeurs " "sont fausses." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Désactivé [défaut]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Activé lorsque le Turbo est actif (appuyez sur TAB)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Saut de frames permanent" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2590,29 +2719,29 @@ "Les modes Normal et Turbo permettent de sauter des frames. Le mode Slow " "motion désactivera le saut de frames." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "frames à afficher" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "frames à ignorer" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Utiliser la MTGS synchonisé" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "Permet d'enrayer des bugs potentiels liés au MTGS." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Désactive toute sortie GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2620,11 +2749,11 @@ "Désactive complètement l'affichage vidéo : idéal pour un benchmark des " "composants EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Saut de frames" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Framelimiter" @@ -2668,7 +2797,7 @@ "La sauvegarde n'a pas pu être chargée du fait de l'absence de composants " "indispensables. Référez-vous aux rapports pour plus de détails." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(défaut)" @@ -2689,7 +2818,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Le fichier de configuation du BIOS n'existe pas. Merci d'en créer un." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2706,6 +2835,15 @@ "%s extensions non trouvées. microVU nécessite un CPU qui gère les extensions " "MMX, SSE et SSE2." +#~ msgid "Betatesting" +#~ msgstr "Beta-test" + +#~ msgid "BIOS Selector" +#~ msgstr "Choix du BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Choisir un ISO..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 Recommandé" diff -Nru pcsx2-1.3.1+dfsg/locales/hr_HR/pcsx2_Iconized.po pcsx2-1.4.0/locales/hr_HR/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/hr_HR/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/hr_HR/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-04 17:41+0100\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" @@ -41,7 +41,7 @@ "PCSX2 ne podržava Play Station 1 diskove. Ako želite emulirat PSX igre " "treba da skinete emulator za PSX, poput ePSXe ili PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -53,7 +53,7 @@ "memorijom, poput iskljuÄene ili male veliÄine swap datoteke, ili drugim " "programom koji guta puno memorije." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -61,7 +61,7 @@ "PCSX2 nemože dodijeliti dovoljno memorije potrebne za PS2 virtualni stroj. " "Zatvorite pozadinske programe koji troÅ¡e memoriju i pokuÅ¡ajte ponovno." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -69,7 +69,7 @@ "Upozorenje: Neki konfigurirani PS2 rekompajleri se nisu uspjeli pokrenuti te " "su iskljuÄeni:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -79,7 +79,7 @@ "znaÄajno poboljÅ¡avaju brzinu emulacije. Možda ćete morati ponovno ukljuÄiti " "navedene rekompajlere, ako rijeÅ¡ite probleme." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -89,7 +89,7 @@ "dobiti iz PS2 konzole u vaÅ¡em vlasniÅ¡tvu (posuÄ‘ena se ne raÄuna). Molimo " "pogledajte NajÄešća pitanja ili VodiÄe za daljnje upute." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,36 @@ "potrebnih mapa. Ako nemate većih prava na ovom raÄunalu, onda ćete morati " "prebaciti na naÄin rada sa KorisniÄkim Dokumentima (pritisnite dugme ispod)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -194,6 +223,13 @@ "promjene redosljed sadržaja na kartici nakon uÄitavanja iz spremljenih " "stanja. Nije kompatibilno sa svim igrama (Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -270,7 +306,7 @@ "Ova radnja će restartirat stanje PS2 virtualnog stroja; sav trenutni " "napredak će biti izgubljen. Jeste li sigurni?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -290,7 +326,7 @@ "\n" "(napomena: ovo ne utjeÄe na postavke za dodatke)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -301,7 +337,12 @@ "i ponovno ga omogućiti u bilo koje vrijeme koristeći Konfiguracija:" "Memorijske kartice u glavnom izborniku." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -309,11 +350,11 @@ "Molimo odaberite važeći BIOS. Ako niste u mogućnosti izabrati pritisnite " "PoniÅ¡titi za zatvaranje Konfiguracijske table." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Napomena: Većina igara radi bez problema sa poÄetnim postavkama." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Napomena: Većina igara radi bez problema sa poÄetnim postavkama." @@ -436,7 +477,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Zakrpe za igre mogu popraviti loÅ¡u emulaciju u nekim naslovima. \n" "Mogu takoÄ‘er uzrokovati probleme sa kompatibilnošću i brzinom. \n" @@ -460,7 +502,7 @@ "izborniku, i ostaviti ovu stranicu praznom. \n" "('Automatske' znaÄi: biranje testiranih zakrpa za pojedine igre)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -469,14 +511,14 @@ "Upravo ćete izbrisati formatiranu memorijsku karticu '%s'. Svi podaci na " "ovoj kartici bit će izgubljeni! Jeste li apsolutno sigurni da želite to?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Neuspjelo: Kopiranje je dozvoljeno samo u prazan PS2 Port ili u datoteÄni " "sustav." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Neuspjelo: Odabrana memorijska kartica '%s' je u upotrebi." @@ -557,35 +599,51 @@ "ispravno odabrati zbog nedostajućih dodataka ili %s nepotpune instalacije, " "pritisnite PoniÅ¡titi za zatvaranje Konfiguracijskog izbornika." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - Smanjuje EE-ovu brzinu ciklusa za oko 50%. Blago ubrzanje, ali *će* " +"uzrokovati zamuckivanje zvuka na mnogim FMV-ovima (video)." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - Smanjuje EE-ovu brzinu ciklusa za oko 33%. Blago ubrzanje za većinu " +"igara sa visokom kompatibilnošću." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - Zadana brzina ciklusa. Ovo približno odgovara stvarnoj brzini PS2 " "EmotionEngina." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - Smanjuje EE-ovu brzinu ciklusa za oko 33%. Blago ubrzanje za većinu " -"igara sa visokom kompatibilnošću." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Smanjuje EE-ovu brzinu ciklusa za oko 50%. Blago ubrzanje, ali *će* " -"uzrokovati zamuckivanje zvuka na mnogim FMV-ovima (video)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - Onemogućuje VU KraÄ‘u Ciklusa. Najkompatibilnija postavka!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -593,7 +651,7 @@ "1 - Manja KraÄ‘a VU Ciklusa. Niža kompatibilnost, ali neÅ¡to ubrzanja za " "većinu igara." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -601,7 +659,7 @@ "2 - Umjerena KraÄ‘a VU Ciklusa. JoÅ¡ niža kompatibilnost, ali znaÄajna " "ubrzanja u nekim igrama." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -609,7 +667,7 @@ "3 - Najveća KraÄ‘a VU Ciklusa. Korisnost je ograniÄena, jer će uzrokovati " "treptanje slike ili usporavanje u većini igara." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -619,17 +677,21 @@ "propuste, pokvaren zvuk, i lažna FPS oÄitavanja. U sluÄaju problema sa " "emulacijom, onesposobite ovo najprije." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Veće vrijednosti na ovom klizaÄu efektivno smanjuju brzinu EmotionEnginovom " "R5900 glavnom procesoru, i Äesto dolazi do velikih ubrzanja u igrama koje ne " "iskoriÅ¡tavaju hardver stvarnog PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -639,7 +701,7 @@ "EmotionEngina. Veće vrijednosti povećavaju broj ciklusa koji se ukradu od " "EE za svaki VU mikroprogram koji igra pokrene." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -649,7 +711,7 @@ "ažurira stalno. Ovo je sigurno većinu vremena, i Super VU radi neÅ¡to sliÄno " "sam od sebe." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -662,7 +724,7 @@ "igara ograniÄenih od strane GS-a, može biti usporavanje (posebno na " "dvojezgrenim procesorima)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -672,7 +734,7 @@ "vsyncova, to ukljuÄuje uglavnom ne-3D RPG naslove. Igre koje ne koriste ovaj " "naÄin vsynca će imati malo ili nimalo ubrzanja od ovog trika." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -687,7 +749,7 @@ "jedne iteracije takvih petlji, napreduje se do sljedećeg dogaÄ‘aja ili kraja " "procesorovog djelića vremena, Å¡to god od toga doÄ‘e prije." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -695,7 +757,7 @@ "Provjerite HDLoader popis kompatibilnosti za poznatim igrama koje imaju " "problema sa ovime. (ÄŒesto znaÄeno kao potreban 'mode 1' ili 'slow DVD'" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -703,7 +765,7 @@ "Kada je iskljuÄeno OgraniÄavanje broja sliÄica, Turbo i Spori naÄina rada " "takoÄ‘er neće biti dostupni." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -712,7 +774,7 @@ "nemoguće. Njegovo omogućavanje će uzrokovati ozbiljne pogreÅ¡ke na slici u " "nekim igrama." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -720,7 +782,7 @@ "Omogućite ovo ako mislite da MTGS thread sync uzrokuje ruÅ¡enja i grafiÄke " "pogreÅ¡ke." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -737,7 +799,7 @@ "Upozorenje: Ova mogućnost može biti omogućena za vrijeme izvoÄ‘enja ali " "nemože biti onemogućena za vrijeme izvoÄ‘enja (slika će najÄešće biti loÅ¡a)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/hr_HR/pcsx2_Main.po pcsx2-1.4.0/locales/hr_HR/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/hr_HR/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/hr_HR/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-04 17:40+0100\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" @@ -24,15 +24,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Nije naveden razlog." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "PogreÅ¡ka raÅ¡Älambe" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Hardver vaÅ¡eg raÄunala nije u stanju pokrenuti PCSX2. Žao nam je." @@ -99,7 +99,7 @@ msgstr "" "UkljuÄuje obradu neaktivnog sluÄaja i drugih neuobiÄajnih sluÄajeva uporabe." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Nije prepoznat format ISO slike" @@ -117,18 +117,18 @@ "Ukoliko se uÄitava sa ISO slike, ova pogreÅ¡ka može biti uzrokovana od " "nepodržanog ISO tipa slike ili pogreÅ¡ke u ISO slici." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "MTGS thread je postao nedostupan dok se Äeka na pokretanje GS dodatka." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "Spremljeno stanje nemože biti uÄitano, jer je oÅ¡tećeno ili nepotpuno." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -137,7 +137,7 @@ "%s dodatak se nije uspio pokrenuti. Moguće je da raÄunalo nema dovoljno " "resursa, ili ima neodgovarajuće upravljaÄke programe." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -146,17 +146,17 @@ "%s dodatak se nije uspio pokrenuti. Moguće je da sustav nema dovoljno " "memorije ili resursa." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Konfigurirani %s dodatak nije pronaÄ‘en" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Konfigurirani %s dodatak nije važeća prijenosna biblioteka" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -165,13 +165,13 @@ "Konfigurirani %s dodatak nije PCSX2 dodatak, ili pripada starijoj verziji " "PCSX2 koja viÅ¡e nije podržana." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Dodatak ne podržava vaÅ¡ hardver ili softver i njegove upravljaÄke programe." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -179,7 +179,7 @@ "Konfigurirani dodatak nije PCSX2 dodatak, ili pripada starijoj verziji PCSX2 " "koja viÅ¡e nije podržana." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -188,11 +188,11 @@ "Konfigurirani %s dodatak nije PCSX2 dodatak, ili pripada starijoj verziji " "PCSX2 koja viÅ¡e nije podržana." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Dodatak za internu Memorijsku karticu se nije uspio pokrenuti." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Dodatak odstranjen" @@ -364,11 +364,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Detaljno oÄitavanje informacija o CDVD hardveru." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 Poruka" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -376,31 +376,31 @@ "Spremljeno stanje nije ispravno spremljeno. Privremena datoteka je stvorena " "ali nije mogla biti premjeÅ¡tena na svoje odrediÅ¡te." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Najsigurnije" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Sigurno (brže)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Uravnoteženo" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresivno" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Dodatno agresivno" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Uglavnom Å¡tetno" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Promjena postavki nije uspjela; pristup nije dopuÅ¡ten." @@ -408,7 +408,7 @@ msgid "Loading PS2 system plugins..." msgstr "UÄitavanje dodataka PS2 sustava..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -417,95 +417,100 @@ "SSE ekstenzije nisu dostupne. PCSX zahtjeva procesor koji podržava SSE set " "instrukcija." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PogreÅ¡ka/e PCSX2 Recompiler-a" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "Sve opcije su za trenutnu sesiju i neće biti spremljene.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoDatoteka" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "prikazuje popis opcija komandnog retka" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "omogućava vidljivost programskog dnevnika/konzole" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "prikaz slike preko punog ekrana" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "prikaz slike unutar prozora" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "onemogućavanje prikaza korisniÄkog suÄelja za vrijeme igre" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "pokreće ELF sliku" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "pokreće sustav bez uÄitavanja igre; koristi se za ulazak u izbornik PS2 " "sustava" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "" "pokreće sustav koristeći CDVD dodatak (zanemaruje parametar IsoDatoteka)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "onemogućuje sve trikove za brzinu" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "koriÅ¡tenje odreÄ‘enih zakrpa za igru koji se moraju ruÄno unijeti." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "onemogućuje brzo pokretanje sustava" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "mijenja putanju konfiguracijske datoteke" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "odabir PCSX2 konfiguracijske datoteke" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "%s pokreće PoÄetnog ÄŒarobnjaka" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "omogućuje prijenosni naÄin rada (zahtjeva administratorska/korijenska " "dopuÅ¡tenja)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "odabir %s dodatka" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "PogreÅ¡ka u dodatku - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -516,96 +521,96 @@ "dodatak:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Pritisnite U redu za koriÅ¡tenje zadanog konfiguriranog dodatka, ili " "PoniÅ¡titi da bi zatvorili %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 PogreÅ¡ka: Nedostatak Hardvera" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Pritisnite U redu da bi zatvorili %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s KritiÄna PogreÅ¡ka" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "U redu" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&U redu" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "PoniÅ¡titi" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&PoniÅ¡titi" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Primijeniti" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Sljedeće >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Natrag" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Natrag" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&ZavrÅ¡iti" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Da" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Ne" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Pregled" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Spremiti" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Spremiti &Kao..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Pomoć" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Na poÄetnu" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Prikaz PCSX2 autora i zahvale" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -615,42 +620,48 @@ "\n" "Pritisnite U redu za prikaz Konfiguracijske Table Dodatka." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Upozorenje! Dodaci sustava nisu uÄitani. Moguće je da PCSX2 nije upotrebljiv." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Opcije Komandnog retka" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PogreÅ¡ka PS2 BIOS-a" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Pritisnite U redu za otvaranje Konfiguracijske Table BIOS-a." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Upozorenje! Dodaci sustava nisu uÄitani. Moguće je da PCSX2 nije upotrebljiv." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Opcije Komandnog retka" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 Thread ne reagira" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "OkonÄati" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "IzvrÅ¡avanje PS2 Virtualnog Stroja..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Pronaći Iso datoteku koja nije nedavno otvarana." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Pregledati..." @@ -696,137 +707,148 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Nije moguće primjeniti nove postavke, neka od postavki je neispravna." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Pitanje o spremanju dnevnika" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Sprema veliku koliÄinu dnevnika u mali prostor." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Mali" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "To je ono Å¡to ja koristim (programer)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normalan" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Lijepo je i Äitljivo." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Velik" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Ogroman" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Za sluÄaj da imate monitor visoke rezolucije." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Zadana shema mekih boja." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Svjetla tema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "" "KlasiÄna shema s crnom bojom za ljude koji vole da im se tekst ureže u oÄi." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tamna tema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Uvijek na Vrhu" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Kada je ukljuÄeno prozor sa dnevnikom će biti vidljiv iza prozora u prvom " "planu." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Spremiti..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Spremiti sadržaj dnevnika u datoteku" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "Is&prazniti" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Isprazniti sadržaj dnevnika u prozoru" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Izgled" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Zatvoriti" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Zatvoriti prozor s dnevnikom; sadržaj se saÄuva" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Prikaz PCSX2 dnevnika za razvojni tim" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD oÄitavanje" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Aktivnost Äitanja diska" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Omogućiti sve" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "UkljuÄuje sve izvore prikaza u dnevniku." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Onemogućiti sve" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "IskljuÄuje sve izvore prikaza u dnevniku." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Vratiti Zadane postavke" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "UkljuÄuje sve izvore prikaza u dnevniku." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Dnevnik" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Izvori prikaza" @@ -839,48 +861,45 @@ msgid "About %s" msgstr "O projektnom timu %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatestiranje" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Prethodne verzije" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Vlasnici web domene" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Programeri dodataka" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Posebna zahvala" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Razvojni tim" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Suradnici" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Play Station 2 emulator" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 Službena internet stranica i forumi" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2 Službeno skladiÅ¡te meÄ‘uverzija na web stranici GitHub-a" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Vidio sam dovoljno" @@ -888,23 +907,19 @@ msgid "Assertion Failure - " msgstr "Neuspjeh tvrdnje - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Sprema snimak table s postavkama u PNG oblik datoteke." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Spremi napravljeni snimak dijaloga u..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS Izbornik" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Ne prikazuj viÅ¡e ovaj dijalog." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -912,7 +927,7 @@ "Onemogućuje ovaj skoÄni prozor i odabrani odgovor će od sada automatski biti " "koriÅ¡ten." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -920,16 +935,89 @@ "SkoÄni prozor neće viÅ¡e biti prikazivan. Ova postavka može biti promjenjena " "na tabli sa postavkama." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Zanemariti" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Ponovno postavljanje" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Mape" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "PogreÅ¡ka (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Stvori memorijsku karticu" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Stvoriti novu memorijsku karticu" @@ -951,30 +1039,30 @@ msgid "Select file name: " msgstr "Odaberite naziv datoteke:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "PogreÅ¡ka (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Stvori memorijsku karticu" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "PogreÅ¡ka: Memorijska kartica ne može biti napravljena." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "PogreÅ¡ka: Memorijska kartica ne može biti napravljena." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Koristi NTFS sažimanje pri stvaranju ove kartice." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [najkompatibilnije]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -982,7 +1070,7 @@ "Ovo je standardna veliÄina Sonyeve memorijske kartice, i podržana je u svim " "igrama i BIOS verzijama." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -990,32 +1078,32 @@ "Uvijek odaberite ovu opciju ukoliko želite najsigurnije i najstabilnije " "ponaÅ¡anje kartice." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "TipiÄna veliÄina memorijske kartice koju proizvode drugi proizvoÄ‘aÄi a " "trebala bi raditi u većini igara." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "Kartice od 16 i 32 MB imaju približno istu kompatibilnost." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1023,7 +1111,7 @@ "Upozorenje na nisku kompatibilnost: Veoma je velik kapacitet, ali neće dobro " "raditi sa mnogim igrama." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1031,6 +1119,22 @@ "Koristite je na vlastiti rizik. Nepravilno ponaÅ¡anje memorijske kartice je " "moguće (iako je malo vjerojatno)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1041,6 +1145,7 @@ msgstr "Postavke" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Odabir jezika" @@ -1095,15 +1200,19 @@ msgstr "" "Automatsko izbacivanje memorijski kartica pri uÄitavanju Spremljenih stanja" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Upravitelj memorijski kartica" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Ubaci ili izbaci kartice iz otvora za kartice na PS2-ki" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1166,24 +1275,24 @@ msgid "Game Fixes" msgstr "Zakrpe za igre" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Izbornici komponenata - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Dodaci" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Mape" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Izgled/Teme - %s" @@ -1205,48 +1314,52 @@ msgid "Terminate App" msgstr "OkonÄati aplikaciju" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS Izlaz je IskljuÄen!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Spremljeno stanje" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Sprema stanje virtualnog stroja u trenutni slot." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "UÄitaj spremljeno stanje" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "UÄitava stanje virtualnog stroja iz trenutnog slota." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "UÄitaj rezervno spremljeno stanje" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" "UÄitava rezervno spremljeno stanje virtualnog stroja iz trenutnog slota." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Prebaci na idući slot" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Prebaci trenutni slot za +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Prebaci na predhodni slot" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Prebaci trenutni slot za -1!" @@ -1263,7 +1376,7 @@ "GreÅ¡ka je ispustiti viÅ¡e datoteka u %s prozor. Molimo da povlaÄite jednu po " "jednu, hvala." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Potvrdi ponovno pokretanje PS2-ke" @@ -1281,278 +1394,278 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Ispustili ste sljedeću ISO sliku u %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Sigurnosna kopija" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Prikaz konzole" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konzola za standardne ulaze i izlaze" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sustav" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfiguracija" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Ostalo" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Pronalazak greÅ¡aka" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Inicijalizacija..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Pokrenuti ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Za direktno pokretanje PS2 binarni datoteka" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Napraviti sigurnosnu kopiju prije spremanja" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatske Zakrpe za igru" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Automatska primjena potrebnih Zakrpa za igru u problematiÄnim igrama" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "UkljuÄiti Å ifre za igru" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Omogućiti zakrpe za Å¡iroki ekran" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Omogućiti pokretanje demo datoteka" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Prekid rada" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "BriÅ¡e sva interna stanja virtualnog stroja i gasi dodatke." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Izlaz" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Zatvaranje %s može biti opasno za zdravlje" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Odabir ISO slike" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Odabir dodataka" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Pravi posebnu ISO sliku za CDVD izvor." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Dodatak" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Koristi vanjski dodatak za Äitanje CDVD izvora." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Bez diska" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Koristite ovo za ulaz u BIOS postave PS2-ke." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Postavke &Emulacije" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Memorijske kartice" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Odabir Dodataka/BIOS-a" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "UreÄ‘ivaÄ Baze podataka za igre" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Slika (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Zvuk (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Kontroleri (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "PoniÅ¡titi sve postavke..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "PoniÅ¡tava sve postavke %s i ponovno pokreće Äarobnjaka." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "O programu..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Zapisivanje..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pauza" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Pauzira PS2 emulaciju i zadržava trenutno stanje." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Nastaviti" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Nastavlja obustavljenu emulaciju." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pauziraj/Nastavi" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Nijedno emulacijsko stanje nije aktivno; nije moguće obustaviti ili " "nastaviti." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Ponovo pokrenuti" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simulira hardversko resetovanje PS2 virtualnog stroja." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Nijedno emulacijsko stanje nije aktivno; potrebno neÅ¡to pokrenuti." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Ponovno pokretanje CDVDa (puno)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Ponovno pokretanje virtualnog stroja." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Pokreni CDVD (puno)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Pokretanje virtualnog stroja koristeći trenutni DVD ili Iso izvor" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Ponovno pokreni CDVD (brzo)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Ponovno pokretanje koristeći brzo POKRETANJE (preskaÄe logoe)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Pokreni CDVD (brzo)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "KoriÅ¡tenje brzog pokretanja za preskakanje PS2 i drugih logoa" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Dodatak nije uÄitan" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Temeljne GS Postavke..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1560,96 +1673,96 @@ "Promjena emulacijskih postavki hardvera kojima upravlja PCSX2 virtualni " "stroj." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Postavke Prozora..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Promjena izgleda prozora, ukljuÄujući omjer slike." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Postavke Dodatka..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Otvara dijaloÅ¡ki okvir sa naprednim postavkama za %s dodatak ." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Resetiraj sve postavke?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Potvrda promjene ISO slike" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Želite li zamjeniti diskove ili pokrenuti novu sliku (koristeći resetiranje " "sustava)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Zamjena diska" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Potvrda promjene CDVD izvora" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Izabrali ste promjenu CDVD izvora sa %s u %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Želite li zamjeniti diskove ili pokrenuti novu sliku (resetiranjem sustava)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Svi Podržani (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Slike Diskova (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Zapisi blokova (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Zapisi blokova (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Sve Datoteke (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Odabrati CDVD iso sliku..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Odabrati ELF datoteku..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO datoteka nije pronaÄ‘ena!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "PogreÅ¡ka prilikom otvaranja datoteke:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1657,7 +1770,7 @@ "PogreÅ¡ka: Tražena ISO datoteka ne postoji. Pritisnite U redu za odabrir " "novog ISO izvora za CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1665,7 +1778,7 @@ "Izabrali ste sljedeće ISO sliku za pokretanje sa PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1678,7 +1791,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1691,19 +1804,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Ime datoteke nije upisano ili je prekratko" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Ime datoteke izvan potrebnog direktorija" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Ime datoteke već postoji" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Operativni sustav sprijeÄava stvaranje ove datoteke" @@ -1711,15 +1824,15 @@ msgid "Cannot apply settings..." msgstr "Nije moguće primjeniti postavke..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Putanja do BIOS-a:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Odaberite mapu sa PS2 BIOS datotekom" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1727,13 +1840,13 @@ "Pritisnite dugme Pregled za odabir druge mape u kojoj će PCSX2 potražiti " "BIOS datoteku." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Osviježi popis" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Odaberite BIOS datoteku:" @@ -1765,40 +1878,44 @@ msgid "None" msgstr "IskljuÄen" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normalan" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU Napredne Opcije Rekompajlera" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Dodatno + OÄuvati Trag" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Puno" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 Napredne Opcije Rekompajlera" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Dodatno" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Prevoditelj" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Sasvim vjerojatno najsporija stvar u svemiru." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Rekompajler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1806,31 +1923,31 @@ "Obavlja direktni binarni prijevod 64-bitnog MIPS-IV strojnog koda u x86 " "oblik." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "PriliÄno sporo; samo za dijagnostiÄke svrhe." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "" "Obavlja direktni binarni prijevod 32-bitnog MIPS-I strojnog koda u x86 oblik." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Omogućiti EE Cache (Sporije)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Samo za prevoditelj; utvrÄ‘ivanje dijagnostike" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Vratiti Zadane postavke" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1838,22 +1955,22 @@ "Prevoditelj Vektorske Jedinice. Spor i ne baÅ¡ kompatibilan. Samo za " "dijagnostiÄku svrhu." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Rekompajler" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Novi kompajler za Vektorsku Jedinicu sa poboljÅ¡anom kompatibilnošću. " "PreporuÄeno." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Rekompajler [ostavÅ¡tina]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2030,7 +2147,8 @@ "Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "Prebaciti na GSdx softversko prikazivanje kada se izvodi FMV (video)" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2061,87 +2179,92 @@ "Upozorenje: Omogućavanje bilježenja tragova uzrokuje veliko usporavanje, " "meÄ‘u glavnim je uzrocima problema tipa 'Å to se dogodilo sa FPSom?'. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Odabrati mapu sa PS2 memorijskim karticama" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Izbaciti" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Kopirati ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Preimenovati ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Stvoriti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Umetnuti ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Kartica: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Stvoriti novu memorijsku karticu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Preimenovati ovu memorijsku karticu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Umetnuti ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Izbaciti karticu iz ovog porta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Umetnuti ovu karticu u port ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Stvoriti kopiju ove memorijske kartice ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Izbrisati" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Trajno izbrisati ovu memorijsku karticu sa diska (sav sadržaj je izbrisan)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Stvaranje nove memorijske kartice i dodjeljivanje ovom Portu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Izbrisati memorijsku datoteku?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Kopiranje memorijske kartice" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Neuspjelo: Moguće kopirati samo postojeću karticu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2149,25 +2272,25 @@ "Izabrati ime za kopiju\n" "( '.ps2' nastavak će biti dodan automatski)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Neuspjelo: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Neuspjelo kopiranje!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Memorijska kartica '%s' kopirana u '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Uspjeh" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2176,119 +2299,124 @@ "Izabrati novo ime za memorijsku karticu '%s'\n" "( '.ps2' nastavak će biti dodan automatski)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Preimenovati memorijsku karticu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "PogreÅ¡ka: Preimenovanje nije moguće.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Prazno" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Izabrati port za '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Umetnuti karticu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Izbaciti karticu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Umetnuti karticu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Kopirati karticu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Preimenovati karticu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Izbrisati karticu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Umetnuti karticu" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Stvoriti novu karticu ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Osviježi popis" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Port" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Ime kartice (datoteke)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "VeliÄina kartice" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatirana" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tip" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Zadnja aktivnost" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Datum stvaranja" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Ne" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Da" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- NekoriÅ¡tene kartice --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Nema nekoriÅ¡tenih kartica --]" @@ -2321,11 +2449,11 @@ msgid "Select a document root for %s" msgstr "Izaberite lokaciju dokumenta za %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Primjeniti" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Postaviti ovaj jezik kao zadani!" @@ -2403,21 +2531,21 @@ "Razlog: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "ZavrÅ¡avanje zadataka..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Omogućiti trikove za brzinu" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Siguran i jednostavan naÄin za potpuno iskljuÄivanje svih trikova za brzinu." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2425,34 +2553,34 @@ "Vraća sve trikove za brzinu na zadane poÄetne vrijednosti, a time ih sve " "iskljuÄuje." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Brzina ciklusa [Nije PreporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "KraÄ‘a VU Ciklusa [Nije PreporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Trikovi" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Dobro Ubrzanje i Visoka Kompatibilnost; može uzrokovati loÅ¡u grafiku... " "[PreporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (ViÅ¡enitni microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2460,15 +2588,15 @@ "Dobro Ubrzanje i Visoka Kompatibilnost; može uzrokovati zaÅ¡topavanje " "slike... [PreporuÄeno ako imate 3 i viÅ¡e jezgri]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Drugi Trikovi" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Omogućiti INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2476,20 +2604,20 @@ "Veliko ubrzanje za neke igre, bez negativnih uÄinaka na kompatibilnost. " "[PreporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Omogućiti Wait Loop Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "Umjereno ubrzanje za neke igre, bez negativnih uÄinaka. [PreporuÄeno]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Omogućiti brzi CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Brzi pristup disku, manje vrijeme uÄitavanja. [Nije PreporuÄeno]" @@ -2512,40 +2640,40 @@ msgid "Select a visual theme:" msgstr "Odabrati vizualnu temu:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Onemogućiti ograniÄavanje slika u sekundi" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "Korisno za mjerenje uÄinka. UkljuÄite ga u igri sa F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "PodeÅ¡avanje temeljnog broja sliÄica:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "PodeÅ¡avanje Usporenog izvoÄ‘enja:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "PodeÅ¡avanje Turbo izvoÄ‘enja" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC Broj sliÄica:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL Broj sliÄica:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2553,19 +2681,19 @@ "PogreÅ¡ka pri postavljanju NTSC ili PAL broja sliÄica. U postavkama moraju " "biti važeći brojevi sa pomiÄnim zarezom." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Onemogućeno [zadano]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "PreskoÄiti samo kada je Turbo aktivan (TAB za ukljuÄenje)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Stalno preskakanje" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2573,30 +2701,30 @@ "Normalni i Turbo broj preskakanja sliÄica. Spori naÄin rada će onemogućiti " "preskakanje sliÄica." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Iscrtati slike" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "PreskoÄiti slike" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "KoriÅ¡tenje UsklaÄ‘enog MTGS-a" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" "Samo za pronalaženje potencijalnih greÅ¡aka u MTGS-u, jer je veoma sporo." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Onemogućiti sav GS izlaz (prikaz)" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2604,11 +2732,11 @@ "Onemogućava sve aktivnost GS dodatka; idealno za mjerenje uÄinaka komponenti " "EE jezge." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Preskakanje SliÄica" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Upravljanje brojem sliÄica" @@ -2649,7 +2777,7 @@ "Spremljeno stanje ne može biti uÄitano zbog nedostajućih kritiÄnih " "komponenti. Vidjeti datoteku dnevnika za detalje." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (zadani)" @@ -2671,7 +2799,7 @@ msgstr "" "Konfigurirana BIOS datoteka ne postoji. Molimo ponovno konfigurirajte." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2688,6 +2816,15 @@ "%s Nastavci nisu pronaÄ‘eni. microVU zahtjeva procesor sa MMX, SSE, i SSE2 " "nastavcima." +#~ msgid "Betatesting" +#~ msgstr "Betatestiranje" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS Izbornik" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Odabrati CDVD iso sliku..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 PreporuÄen" diff -Nru pcsx2-1.3.1+dfsg/locales/hu_HU/pcsx2_Iconized.po pcsx2-1.4.0/locales/hu_HU/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/hu_HU/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/hu_HU/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.8\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2011-04-17 17:56+0100\n" "Last-Translator: Delirious \n" "Language-Team: Delirious \n" @@ -36,7 +36,7 @@ "emulálni, akkor le kell töltened egy PSX emulátort, ilyenek az ePSXe vagy a " "PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -51,7 +51,7 @@ "csökkenteni az alapértelmezett gyorsítótár méretét is minden PCSX2 " "recomplier számára a Gazdagép beállításai alatt." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -59,7 +59,7 @@ "PCSX2 nem képes a szükséges memória lefoglalására a PS2 virtuális gép " "számára. Zárj be néhány nagy memóriaigényű háttér feladatot és próbáld újra." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -67,7 +67,7 @@ "Figyelem: Néhány beállított PS2 recomplier iniciálása sikertelen és ezért " "használatuk letiltva:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -77,7 +77,7 @@ "lényegesn gyorsítják az emuláció sebességét. Kézileg kell majd újra " "bekapcsolnod a feljebb listázott recompilereket, ha megoldottad a hibákat." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -88,7 +88,7 @@ "(kölcsönözni is lehet). További információk végett ajánlatos megtekinteni az " "Olvass el fájlt, és átnézni a Beállítási útmutató tartalmát." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,36 @@ "rendelkezel magasabb szintű jogosultsággal a számítógépen, akkor át kell " "váltanod a Felhasználói dokumentumok módra (kattints a lenti gombra)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -196,6 +225,13 @@ "indexelésére vannak kényszerítve állásmentés betöltését követÅ‘en. Nem minden " "játékkal kompatibilis (Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -274,7 +310,7 @@ "Ez a művelet alapra állítja a meglévÅ‘ PS2 virtuális gép állapotát; minden " "eddigi adat el fog veszni. Biztosan akarod?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -295,7 +331,7 @@ "\n" "(megjegyzés: nincs hatással a plugin beállításokkal)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -307,7 +343,12 @@ "és bármikor visszakapcsolhatod a fÅ‘menübÅ‘l a Beállítások > Memória kártyák " "résznél." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -315,12 +356,12 @@ "Válassz egy érvényes BIOS fájlt. Ha nem áll rendelkezésre megfelelÅ‘ fájl, " "akkor nyomj Mégsem gombot a beállítás panel bezárásához." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Megjegyzés: A legtöbb játéknak megfelelÅ‘ek az alapértelmezett beállítások. " -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "Megjegyzés: A legtöbb játéknak megfelelÅ‘ek az alapértelmezett beállítások. " @@ -443,7 +484,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "A játék javítások megoldások lehetnek a hibás emulációra néhány játék " "esetében. \n" @@ -467,7 +509,7 @@ "A játék javítások alapból be vannak kapcsolva, ezért nem kell semmit sem " "beállítanod itt." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -476,13 +518,13 @@ "Éppen törölni szándékozod a(z) '%s' nevű formázott memória kártyát. Minden a " "kártyán lévÅ‘ adat el fog veszni! Teljesen és egészen biztos vagy a dologban?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Hiba: Másolás csak egy üres PS2 portra vagy a fájlrendszerbe engedélyezett." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Hiba: A(z) '%s' nevű memória kártya használatban van." @@ -569,36 +611,52 @@ "nem volt teljes, akkor nyomd meg a Mégsem gombot a beállítási panel " "bezárásához." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - MegközelítÅ‘leg 50 %-kal csökkenti az EE ciklusszámát. Mérsékelt " +"sebesség növekedés, de recsegÅ‘ hangot *okoz* számos FMV esetén." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - 33 %-kal csökkenti az EE ciklusszámát. Enyhe sebesség növekedés a " +"legtöbb játéknál magas kompatibilitással." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - Alapértelmezett ciklusszám. Ez megközelítÅ‘leg hasonlít a valódi PS2 " "EmotionEngine tényleges sebességéhez." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - 33 %-kal csökkenti az EE ciklusszámát. Enyhe sebesség növekedés a " -"legtöbb játéknál magas kompatibilitással." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - MegközelítÅ‘leg 50 %-kal csökkenti az EE ciklusszámát. Mérsékelt " -"sebesség növekedés, de recsegÅ‘ hangot *okoz* számos FMV esetén." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Kikapcsolja a VU ciklus csökkentést. Leginkább kompatibilis beállítás!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -606,7 +664,7 @@ "1 - Enyhe VU ciklus csökkentés. Alacsonyabb kompatibilitás, de bizonyos " "sebességnövekedés a legtöbb játéknál." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -614,7 +672,7 @@ "2 - Mérsékelt VU ciklus csökkentés. Még alacsonyabb kompatibilitás, de " "jelentÅ‘s sebességnövekedés néhány játéknál." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -622,7 +680,7 @@ "3 - Maximális VU ciklus csökkentés. Használhatósága korlátozott, mivel " "képvillogást és lassulást okoz a legtöbb játéknál." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -632,18 +690,22 @@ "hibákat, hang problémákat és hibás FPS beolvasást eredményezhetnek. " "Emulációs problémák esetén elÅ‘ször ezt a panelt kapcsold ki." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Magasabb érték állítása a csúszkán hatásosan csökkenti az EmotionEngine's " "R5900 központi processzor órajelét és tipikusan nagy sebesség növekedést " "okoz azoknál a játékoknál, amelyek nem képesek kihasználni a valódi PS2 " "hardver tényleges képességeit." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -653,7 +715,7 @@ "elvesz az EmotionEngine elÅ‘l. Magasabb érték növeli az EE elÅ‘l elvett és a " "játék által futtatott összes mikroprogram számára átadott ciklusok számát." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -663,7 +725,7 @@ "azokat. Legtöbbször ez biztonságos és a Super VU is valami hasonlót végez " "alapértelmezettként." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 #, fuzzy msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " @@ -672,7 +734,7 @@ "slowdown (especially on dual core CPUs)." msgstr "Nem működik a Gran Turismo 4 vagy Tekken 5 esetén." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -684,7 +746,7 @@ "eljárást használják a függÅ‘leges szinkronhoz csak csekély, vagy semmilyen " "gyorsulás nem észlelhetÅ‘ a hack használatával." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -701,7 +763,7 @@ "elÅ‘rehozhatjuk a következÅ‘ eseményt vagy a processzor idÅ‘szeletének végét, " "bármelyik is következik elÅ‘bb." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -709,7 +771,7 @@ "EllenÅ‘rizd a HDLoader kompatibilitási listát a problémás játékok végett. " "(Gyakran ez szerepel 'mode 1' vagy 'slow DVD')" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -717,7 +779,7 @@ "Nem árt tudni, ha a képkocka korlátozás ki van kapcsolva, a turbó és " "lassított mód sem érhetÅ‘ el." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -726,7 +788,7 @@ "kihagyás nem lehetséges. Használata számos grafikai hibát okoz néhány " "játékban." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -734,7 +796,7 @@ "Kapcsold ezt be, ha úgy gondolod az MTGS folyamatág szinkron okozza a " "fagyást vagy grafikai hibákat." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -751,7 +813,7 @@ "Figyelem: Ez az opció bekapcsolható, de többnyire nem kapcsolható ki játék " "közben (a videó tipikusan szétesik)" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/hu_HU/pcsx2_Main.po pcsx2-1.4.0/locales/hu_HU/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/hu_HU/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/hu_HU/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.8\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2011-04-17 16:35+0100\n" "Last-Translator: Delirious \n" "Language-Team: Delirious \n" @@ -18,15 +18,15 @@ "X-Poedit-Language: Hungarian\n" "X-Poedit-SourceCharset: utf-8\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Nincs meghatározott ok." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Elemzési hiba" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "A számítógéped hardvere nem alkalmas a PCSX2 futtatására. Bocs haver." @@ -94,7 +94,7 @@ "Beleértve az üresjárati esemény feldolgozást és néhány más rendkívüli " "esemény felhasználást." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Felismerhetetlen ISO képfájl formátum" @@ -112,20 +112,20 @@ "ISO képfájl betöltése esetén ezt a hibát okozhatja egy nem támogatott ISO " "képfájl típus, vagy egy hiba a PCSX2 ISO képfájl támogatásban." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "Az MTGS folyamatág nem válaszol, miközben a GS plugin megnyitására várakozik." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "A mentett állás nem tölthetÅ‘ be, mivel az sérültnek vagy hiányosnak tűnik." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -135,7 +135,7 @@ "rendelkezik elegendÅ‘ erÅ‘forrással, vagy hardver / illesztÅ‘program ütközés " "van." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -144,17 +144,17 @@ "%s plugin iniciálása sikertelen. A rendszer lehetséges, hogy nem " "rendelkezik elegendÅ‘ memóriával vagy a szükséges erÅ‘forrásokkal. " -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "A konfigurált %s plugin fájl nem található" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "A konfigurált %s plugin fájl egy érvénytelen dinamikus könyvtár " -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -163,14 +163,14 @@ "A konfigurált %s plugin nem PCSX2 plugin, vagy egy régebbi, nem támogatott " "PCSX2 verzióhoz való." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "A plugin szerint a hardver vagy szoftver / illesztÅ‘programok nem " "támogatottak." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -178,7 +178,7 @@ "A konfigurált plugin nem PCSX2 plugin, vagy egy régebbi, nem támogatott " "PCSX2 verzióhoz való." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -187,11 +187,11 @@ "A konfigurált %s plugin nem évényes PCSX2 plugin, vagy egy régebbi, nem " "támogatott PCSX2 verzióhoz való." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "BelsÅ‘ memória kártya plugin iniciálása sikertelen." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Betöltetlen plugin" @@ -338,11 +338,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 üzenet" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -350,31 +350,31 @@ "A mentett állás nem megfelelÅ‘en van elmentve. Az ideiglenes fájl sikeresen " "létre lett hozva, de nem került át a végsÅ‘ helyére." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Legbiztonságosabb" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Biztonságos (gyorsabb)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Kiegyensúlyozott" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresszív" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Agresszív plusz" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Legártalmasabb" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "A meglévÅ‘ beállítás fájl felülírása sikertelen; hozzáférés megtagadva." @@ -382,7 +382,7 @@ msgid "Loading PS2 system plugins..." msgstr "PS2 rendszer pluginok betöltése..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -391,95 +391,100 @@ "SSE kiterjesztések nem állnak rendelkezésre. PCSX2 futtatásához szükséges " "egy SSE utasításkészletet támogató processzor." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 Recompiler hiba/hibák" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "A beállítások csak a jelenlegi munkamenetre érvényesek és nem lesznek " "elmentve.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Iso fájl" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "megjeleníti a parancssori lehetÅ‘ségek listáját" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "láthatóvá teszi a program naplót/konzolt" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "teljes képernyÅ‘s GS mód használata" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "ablakos GS mód használata" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "játék közben elrejti a felhasználói felületet" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "ELF képfájlt indít" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "dvd lemez nélkül indítás; PS2 rendszer menü elérésére használatos" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "" "CDVD pluginról indítás (figyelmen kívül hagyja az ISO fájl paraméterét)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "kikapcsolja az összes gyorsító hacket" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "használd a vesszÅ‘vel vagy függÅ‘leges vonallal határolt játék javítás listát" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "letiltja a gyors indítást " -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "megváltoztatja a konfigurációs fájl elérési helyét" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "kjelöli a használandó PCSX2 konfigurációs fájlt" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "kényszeríti a %s emulátort az elsÅ‘ indításkori varázsló elindítására" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "hordozható módi műveletek használata (rendszergazdai hozzáférés szükséges)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "válassz %s pluginként használatos fájlt" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Plugin felülírási hiba - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -490,96 +495,96 @@ "%s plugin:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Nyomj Rendben gombot az alapértelmezett konfigurált plugin használatához, " "vagy Mégsem gombot a %s bezárásához." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 hiba: Hardver elégtelenség" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Nyomj Rendben gombot a %s bezárásához." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s kritikus hiba" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "Rendben" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&Rendben" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Mégsem" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Mégsem" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Alkalmaz" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&KövetkezÅ‘ >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Vissza" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Vissza" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Befejezés" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Igen" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Nem" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Tallózás" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Mentés" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Mentés &másként..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Súgó" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Home" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Megnyitja a Névjegy párbeszédablakot" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -589,43 +594,50 @@ "\n" "Nyomj Rendben gombot a plugin konfigurációs panel eléréséhez." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Figyelem! A rendszer pluginok nem töltÅ‘dtek be. A PCSX2 lehet, hogy nem " "fog működni." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s parancssori beállítások" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS hiba" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Nyomj Rendben gombot a BIOS konfigurációs panel eléréséhez." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Figyelem! A rendszer pluginok nem töltÅ‘dtek be. A PCSX2 lehet, hogy nem " +"fog működni." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s parancssori beállítások" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 nem reagáló folyamatág" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Megszakítás" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "PS2 virtuális gép indítása..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Olyan ISO tallózása ami nem szerepel az elÅ‘zményekben." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Tallózás..." @@ -672,51 +684,52 @@ msgstr "" "Az új beállítások nem érvényesíthetÅ‘ek, egy vagy több beállítás érvénytelen." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Napló kérdés mentése" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Legtöbb bejelentkezésre alkalmas egy mikrokozmikusan piciny területre." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Kicsi" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Ezt használom én (a programozó fickó)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normál" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Szép és olvasható." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Nagy" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Hatalmas" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Ha tényleg nagyfelbontású kijelzÅ‘t használsz." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Finom tónusú alapértelmezett szín sémák." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Világos téma" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -724,84 +737,94 @@ "Hagyományos fekete szín sémák azoknak, akik szeretik a beégett szöveget az " "optikai érzékelÅ‘ikbe." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Sötét téma" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Mindig felül" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Bekapcsoláskor a naplóablak megjelenik a háttérablakok elÅ‘tt." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Mentés..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Napló adatok mentése fájlba" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "T&örlés" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Napló ablak tartalmának törlése" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Kinézet" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Bezárás" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Napló ablak bezárása; tartalom megÅ‘rizve" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Fejlesztés/részletes" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "PCSX2 fejlesztÅ‘i napló megjelenítése" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD beolvasások" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Lemez olvasási tevékenység megjelenítése" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Mind bekapcsolása" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Minden napló forrás szűrÅ‘ bekapcsolása." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Mind kikapcsolása" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Minden napló forrás szűrÅ‘ kikapcsolása." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Alapértékek visszaállítása" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Minden napló forrás szűrÅ‘ bekapcsolása." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Napló" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Források" @@ -814,51 +837,48 @@ msgid "About %s" msgstr "%s súgója" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Béta tesztelés" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "ElÅ‘zÅ‘ verziók" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmesterek" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Plugin specialisták" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Külön köszönet" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "FejlesztÅ‘k" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "KözreműködÅ‘k" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "" "a PlayStation 2 emulátor\n" "\n" "Magyarítás: Delirious" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 hivatalos weblap és fórum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2 hivatalos SVN GitHub tárhely" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Eleget láttam" @@ -866,23 +886,19 @@ msgid "Assertion Failure - " msgstr "Sikertelen kérés -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "A beállításpanel pillanatképének mentése PNG fájlba." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Párbeszédablak pillanatképek mentése..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS választó" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Ez a párbeszédablak ne jelenjen meg újra." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -890,7 +906,7 @@ "Letiltja ezt a felugró ablakot és bármilyen választ adsz meg itt, az " "mostantól automatikusan alkalmazva lesz." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -898,16 +914,89 @@ "Ez a felugró ablak nem fog megjelenni többé. Ez a beállítás visszavonható a " "beállítások panelen." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Kihagyás" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Alapra állítás" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Mappák" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Hiba (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Memória kártya létrehozása" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Új memória kártya létrehozása" @@ -929,30 +1018,30 @@ msgid "Select file name: " msgstr "Válassz fájl nevet:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Hiba (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Memória kártya létrehozása" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Hiba: A memória kártya létrehozása nem sikerült." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Hiba: A memória kártya létrehozása nem sikerült." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "NTFS tömörítés használata a kártya létrehozásakor." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [legjobb kompatibilitás]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -960,7 +1049,7 @@ "Ez a szabvány Sony gyártmány méret, ami minden játék illetve BIOS verzió " "által támogatott." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -968,34 +1057,34 @@ "Mindig ezt a beállítást használd, ha a legbiztonságosabb és legbiztosabb " "memória kártya működést szeretnéd." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Tipikus harmadik féltÅ‘l származó memória kártya méret, ami működik a legtöbb " "játékkal." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" "16 és 32 MB-os kártyák nagyjából azonos kompatibilitási faktorral " "rendelkeznek." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1003,7 +1092,7 @@ "Alacsony kompatibilitási figyelmeztetés: Igen, meglehetÅ‘sen nagy, de " "elÅ‘fordul, hogy sok játéknál nem működik." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1011,6 +1100,22 @@ "Csak saját felelÅ‘sségre használd. Szabálytalan memória kártya működés " "elÅ‘fordulhat (noha valószínűtlen)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1021,6 +1126,7 @@ msgstr "Beállítások" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Nyelv választó" @@ -1074,15 +1180,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Memória kártya automatikus leválasztása mentések betöltésekor" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Memória kártya intézÅ‘" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Kártyák illesztése/leválasztása PS2 portokra/portokról" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1147,24 +1257,24 @@ msgid "Game Fixes" msgstr "Játék javítások" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "ÖsszetevÅ‘ választó - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Pluginok" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Mappák" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Megjelenés/Témák - %s" @@ -1186,48 +1296,52 @@ msgid "Terminate App" msgstr "Alk. megszakítása" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS kimenet kikapcsolva!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Ãllás mentés" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "A virtuális gép állapotát menti a jelenlegi helyre." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Ãllás betöltés" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Betölti a virtuális gép állapotát a jelenlegi helyrÅ‘l." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Ãllás mentés másolat betöltés" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" "Betölti a virtuális gép állapotának biztonsági mentését a jelenlegi helyrÅ‘l." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Ugrás a következÅ‘ helyre" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "A jelenlegi mentési hely növelése eggyel!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Ugrás az elÅ‘zÅ‘ helyre" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "A jelenlegi mentési hely csökkentése eggyel!" @@ -1244,7 +1358,7 @@ "Ez hiba a hiba akkor jelentkezik, ha egyszerre több fájl kerül a %s ablakba. " "Egyszerre egyet csak, köszi." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "PS2 alapra állításának jóváhagyása" @@ -1262,281 +1376,281 @@ msgid "You have dropped the following ISO image into %s:" msgstr "A következÅ‘ ISO képfájlt húztad ide: %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "%d hely" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Biztonsági mentés" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Konzol megjelenítése" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Stdio konzol" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Rendszer" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Beállítások" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Egyebek" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&HibakeresÅ‘" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Iniciálás..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "ELF futtatása..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Feldolgozatlan PS2 binérek közvetlen futtatásához" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Mentés elÅ‘tt másolat készítése" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatikus játék javítások" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Automatikusan érvényesíti a szükséges játék javításokat az ismert problémás " "játékokhoz" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Csalások használata" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Javítások használata" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Gazda fájlrendszer használata" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Leállítás" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Töröl minden VM állapotot és leállítja a pluginokat." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Kilépés" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%s bezárása az egészségedre káros lehet" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ISO választó" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Plugin menü" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Beállítja a kiválasztott ISO képfájlt CDVD forrásnak." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Egy külsÅ‘ plugint használ CDVD forrásként." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Nincs lemez" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Ennek használatával lehet elérni a virtuális PS2 BIOS beállításokat." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Emuláció &beállítások" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Memória kártyák" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Plugin/BIOS választó" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Játék adatbázis szerkesztÅ‘" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Grafika (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Hang (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Irányítók (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "1. Multitap" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "2. Multitap" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Minden beállítás törlése..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Töröl minden %s beállítást és újrafuttatja az indításkori varázslót." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Névjegy..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Naplózás..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Szünet" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Biztonságosan szüntelteti az emulációt és megÅ‘rzi a PS2 állapotát." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Folytatás" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Folytatja a felfüggesztett emulációs állapotot." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Szünet / folytatás" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Nincs aktív emulációs állapot; nem függeszthetÅ‘ fel és nem folytatható." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Újraindítás" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Szimulálja a PS2 virtuális gép hardverének alaphelyzetbe állítását." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Nincs aktív emulációs állapot; elÅ‘ször indíts el valamit." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "CDVD újraindítása (teljes)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "A virtuális gép (VM) teljes alaphelyzetbe állítása." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "CDVD indítása (teljes)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "" "Indítsd el a virtuális gépet a mostani DVD vagy ISO forrás média " "használatával." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "CDVD újraindítása (gyors)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Újraindítás a gyors indítás használatával (üdvözlÅ‘képernyÅ‘ kihagyása)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "CDVD indítása (gyors)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Gyors indítás használata a PS2 indító és üdvözlÅ‘képernyÅ‘ kihagyásához" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Nincs plugin betöltve" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "GS központi beállítások..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1544,97 +1658,97 @@ "A PCSX2 központi virtuális gép által szabályozott hardver emulációs " "beállítások módosítása." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Ablak beállítások..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Ablak és megjeleníési beállítások módosítása, beleérte a képarányt is." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Plugin beállítások..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "%s plugin fejlett beállítási párbeszédablakját nyitja meg." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Minden beállítás alapra állítása?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "ISO képfájl csere megerÅ‘sítése" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Lemezt akarsz cserélni vagy elindítani az új képfájlt (a rendszer " "alapértékekre állításával)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Lemezcsere" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "CDVD forrás váltás megerÅ‘sítése" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Azt választottad, hogy a CDVD forrást átváltod errÅ‘l: %s, erre: %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Lemezt akarsz cserélni vagy elindítani az új képfájlt (a rendszer " "alapértékekre állítása)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Minden formátum (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Lemez képfájlok (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Mentés tömbök (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Mentés tömbök (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Minden fájl (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "CDVD forrás ISO választása..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "ELF fájl választása..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Nem található ISO fájl!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Hiba keletkezett a fájl megnyitására irányuló próbálkozás közben:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1642,7 +1756,7 @@ "Hiba: A megadott ISO fájl nincs meg. Kattints a Rendben gombra egy új ISO " "forráshoz a CDVD számára." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1650,7 +1764,7 @@ "A következÅ‘ ISO képfájlt választottad a PCSX2 számára:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1663,7 +1777,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1676,19 +1790,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nincs megadva fájlnév vagy túl rövid" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "A fájlnév a kívánt könyvtáron kívül van" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Ilyen fájlnév már van" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Az operációs rendszer akadályozza a fájl létrehozását" @@ -1696,15 +1810,15 @@ msgid "Cannot apply settings..." msgstr "Beállítások nem érvényesíthetÅ‘ek..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS keresési hely:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Válassz PS2 BIOS romokat tartalmazó mappát" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1712,13 +1826,13 @@ "Kattints a Tallózás gombra egy másik mappa megadásához, ahol PCSX2 keresni " "fogja a PS2 BIOS romokat." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Lista frissítése" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "BIOS rom választása:" @@ -1750,40 +1864,44 @@ msgid "None" msgstr "Nincs" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normál" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU fejlett Recompiler beállítások" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + fenntartott jel" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Teljes" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 fejlett Recompiler beállítások" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Minden bizonnyal a leglassabb dolog a világegyetemben" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1791,11 +1909,11 @@ "MegfelelÅ‘ idÅ‘ben végzi a 64-bit MIPS-IV gépi kód bináris fordítását x86 " "rendszerre." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "MeglehetÅ‘sen lassú; csak diagnosztikai célokra szolgál." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1803,22 +1921,22 @@ "MegfelelÅ‘ idÅ‘ben végzi a 32-bit MIPS-I gépi kód bináris fordítását x86 " "rendszerre." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 #, fuzzy msgid "Enable EE Cache (Slower)" msgstr "EE gyorsítótár használata - Csak Interpreter ! (lassabb)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 #, fuzzy msgid "Interpreter only; provided for diagnostic" msgstr "MeglehetÅ‘sen lassú; csak diagnosztikai célokra szolgál." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Alapértékek visszaállítása" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1826,22 +1944,22 @@ "Vector Unit Interpreter. Lassú és nem túl kompatibilis. Csak diagnosztikára " "használd." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Új Vector Unit recompiler nagy mértékben javított kompatibilitással. " "Ajánlott." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Recompiler [öröklött]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2014,7 +2132,7 @@ msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2045,87 +2163,92 @@ "Figyelem: NyomkövetÅ‘ naplózás használata meglehetÅ‘sen lassú, és többnyire a " "'Miért esett az FPS értéke?' problémát veti fel. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "PS2 memória kártyákat tartalmazó mappa választása" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Kiadás" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Másolás..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Ãtnevezés..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Létrehozás..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Behelyezés..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Kártya:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Új memória kártya létrehozása." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "A memória kártya átnevezése..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Behelyezés..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Kártya kiadása errÅ‘l a portról" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Kártya behelyezése egy portra..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Egy másolat létrehozása errÅ‘l a memória kártyáról..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Törlés" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Véglegesen törli ezt a memória kártyát a lemezrÅ‘l (minden tartalom elveszik)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Új memória kártya létrehozása és kiosztása ehhez a porthoz." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Törlöd a memória fájlt?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Memória kártya másolat" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Hiba: Csak meglévÅ‘ kártyáról készíthetÅ‘ másolat." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2133,25 +2256,25 @@ "Adj nevet a másolat számára\n" "( '.ps2' automatikusan hozzá lesz adva)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Hiba: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Másolás sikertelen!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "'%s' memória kártya másolat létrehozva '%s' néven." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Sikerült" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2160,121 +2283,126 @@ "Adj új nevet a memória kártya számára '%s'\n" "( '.ps2' automatikusan hozzá lesz adva)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Memória kártya átnevezése" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Hiba: Az átnevezés nem sikerült.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Ãœres" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Válassz célportot a(z) '%s' számára" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Kártya behelyezése" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Kártya kiadása" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Kártya behelyezése..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Kártya másolat készítése..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Kártya átnevezése..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Kártya törlése" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Kártya behelyezése" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Új kártya létrehozása..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Lista frissítése" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 port" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kártya (fájl) név" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Kártya méret" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formázva" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Utoljára módosítva" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Létrehozva" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Nem" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Igen" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Nem használt kártyák --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Nincsenek nem használt kártyák --]" @@ -2307,11 +2435,11 @@ msgid "Select a document root for %s" msgstr "%s dokumentum gyökérkönyvtár megadása" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Alkalmaz" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Legyen ez az alapértelmezett nyelv mostantól!" @@ -2390,22 +2518,22 @@ "Ok: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Feladat befejezése..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Gyorsító hackek használata" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "A legbiztosabban így gyÅ‘zÅ‘dhetünk meg arról, hogy a gyorsító hackek teljesen " "ki vannak kapcsolva." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2413,23 +2541,23 @@ "Visszaállít minden gyorsító hack beállítást az alapértékre, ami által mind " "KIKAPCSOLVA lesz." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE ciklusszám [Nem ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU ciklus csökkentés [Nem ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU hackek" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 #, fuzzy msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" @@ -2437,11 +2565,11 @@ "Látványos gyorsulás és magas kompatibilitás; grafikai hibákat okozhat, SPS, " "stb... [Ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 #, fuzzy msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " @@ -2450,15 +2578,15 @@ "Látványos gyorsulás és magas kompatibilitás; grafikai hibákat okozhat, SPS, " "stb... [Ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Egyéb hackek" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "INTC pörgés észlelés használata" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2466,22 +2594,22 @@ "Nagymértékű gyorsulás néhány játék esetében, többnyire nincs kompatibilitási " "mellékhatás. [Ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Hurok észlelésre várakozás használata" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Enyhe sebesség növekedés néhány játéknál, nincs ismert mellékhatás. " "[Ajánlott]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Gyors CDVD használata" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Gyors lemez hozzáférés, kevesebb betöltési idÅ‘. [Nem ajánlott]" @@ -2505,42 +2633,42 @@ msgid "Select a visual theme:" msgstr "Vizuális téma választása:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Képkocka korlátozás kikapcsolása" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Tesztek futtatásához hasznos. Az opció be/kikapcsolása játék közben az F4 " "lenyomásával." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Képfrissítésen alapuló szabályozás:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Lassított mozgás szabályozás:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbó szabályozás:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC képfrissítés:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL képfrissítés:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2548,19 +2676,19 @@ "Hiba vagy az NTSC vagy PAL képfrissítési beállítások elemzésekor. A " "beállításoknak érvényes lebegÅ‘pontos számoknak kell lenniük." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Kikapcsolva [alap]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Csak bekapcsolt Turbó esetén (TAB a használathoz)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Változatlan kihagyás" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2568,19 +2696,19 @@ "Normál és turbó korlátozza a kihagyandó képkockák számát. A lassított mód " "is kikapcsolja a képkocka kihagyást." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "MegjelenítendÅ‘ képkockák" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Kihagyandó képkockák" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Szinkronizált MTGS használata" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2588,11 +2716,11 @@ "Lehetséges hibák keresése csupán az MTGS-ben, mivel potenciálisan nagyon " "lassú." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Minden GS kimenet kikapcsolása" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2600,11 +2728,11 @@ "Teljesen leállít minden GS plugin tevékenységet; ideális az EEcore " "összetevÅ‘k tesztelése esetén." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Képkocka kihagyás" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Képkocka korlátozó" @@ -2649,7 +2777,7 @@ "Az állásmentés nem tölthetÅ‘ be kritikus összetevÅ‘k hiánya miatt. Részletek " "a naplófájlban." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "" @@ -2669,7 +2797,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "A BIOS konfigurációs fájl nincs meg. Konfiguráld újra." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2686,6 +2814,15 @@ "%s kiterjesztés nem található. A microVU működéséhez szükséges egy MMX, SSE " "és SSE2 utasításkészletet támogató processzor." +#~ msgid "Betatesting" +#~ msgstr "Béta tesztelés" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS választó" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "CDVD forrás ISO választása..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 ajánlott" diff -Nru pcsx2-1.3.1+dfsg/locales/id_ID/pcsx2_Iconized.po pcsx2-1.4.0/locales/id_ID/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/id_ID/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/id_ID/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.8 r4560\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-06-01 10:32+0100\n" "Last-Translator: Gregory Hainaut \n" "Language-Team: ikazu \n" @@ -36,7 +36,7 @@ "ePSXe or PCSX." msgstr "" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -44,33 +44,33 @@ "a lot of memory." msgstr "" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." msgstr "" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " "the recompilers listed above, if you resolve the errors." msgstr "" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " "count). Please consult the FAQs and Guides for further instructions." msgstr "" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -87,7 +87,36 @@ "below)." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -144,6 +173,13 @@ "Hero)." msgstr "" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -194,7 +230,7 @@ "progress will be lost. Are you sure?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -206,7 +242,7 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -214,17 +250,22 @@ "and re-enable it at any time using Config:Memory cards from the main menu." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" @@ -312,7 +353,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 @@ -323,19 +365,19 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -393,75 +435,91 @@ "%s, then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " "panel first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " "EE for each VU microprogram the game runs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -469,14 +527,14 @@ "slowdown (especially on dual core CPUs)." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " "this method of vsync will see little or no speedup from this hack." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -486,31 +544,31 @@ "timeslice, whichever comes first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -520,7 +578,7 @@ "disabled on-the-fly (video will typically be garbage)." msgstr "" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/id_ID/pcsx2_Main.po pcsx2-1.4.0/locales/id_ID/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/id_ID/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/id_ID/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-05-04 22:04+0700\n" "Last-Translator: \n" "Language-Team: ikazu \n" @@ -23,15 +23,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Tidak diberikan alasan." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Kesalahan parsing" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Perangkat keras mesin Anda tidak mampu menjalankan PCSX2. Maaf sobat." @@ -97,7 +97,7 @@ "Menyertakan kejadian idle saat pemrosesan dan beberapa kejadian dengan " "penggunaan yang tak lazim." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Format ISO tak dikenali" @@ -113,18 +113,18 @@ "Jika memula dari image ISO, kegagalan ini mungkin disebabkan oleh image ISO " "yang tidak didukung atau sebuah bug dalam dukungan ISO PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "Trit MTGS menjadi tidak responsif ketika menunggu pembukaan plugin GS." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "Savestate tersebut gagal dibuka, kelihatannya korup atau tidaklengkap." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -133,7 +133,7 @@ "%s plugin gagal dibuka. Komputer anda mungkin kekurangan daya, atau " "perangkat keras/driver tidak kompatibel." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -142,17 +142,17 @@ "%s plugin gagal dijalankan. Sistem anda mungkin kekurangan memori atau daya " "yang diperlukan." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "File konfigurasi %s plugin tak ditemukan" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "File konfigurasi %s plugin bukanlah sebuah dynamic library yang valid" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -161,14 +161,14 @@ "Konfigurasi %s plugin bukan plugin PCSX2, atau merupakan versi lama yang " "tidak didukung PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Plugin melaporkan bahwa perangkat keras anda atau perangkat lunak/driver " "tidak mendukung." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -176,7 +176,7 @@ "Konfigurasi plugin bukanlah plugin PCSX2, atau merupakan versi lama yang " "tidak didukung PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -185,11 +185,11 @@ "Konfigurasi %s plugin bukanlah plugin valid PCSX2, atau merupakan versi lama " "yang tidak didukung PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Plugin Internal Memorycard gagal dijalankan." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin nonaktif" @@ -349,11 +349,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Catatan detil dari perangkat keras CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Pesan PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -361,31 +361,31 @@ "Savestate tidak tersimpan dengan baik. File temporer berhasil dibuat namun " "gagal dipindahkan ke tempat akhir." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Teraman" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Aman (lebih cepat)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Seimbang" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresif" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Agresif plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Paling Berbahaya" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Gagal menimpa file pengaturan yang ada; izin ditolak." @@ -393,7 +393,7 @@ msgid "Loading PS2 system plugins..." msgstr "Meload plugin sistem PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -402,91 +402,96 @@ "Ekstensi SSE tidak tersedia. PCSX2 membutuhkan sebuah cpu yang mendukung " "instruksi SSE." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Kegagalan Recompiler PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Semua opsi hanya untuk sesi yang sedang berjalan dan tidak akan disimpan.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoFile" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "Menampilkan opsi daftar perintah" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "memaksa catatan program/konsol menjadi tampak" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "gunakan mode fullscreen GS" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "gunakan mode GS windowed" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "menonaktifkan tampilan gui ketika menjalankan game" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "jalankan sebuah image ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "jalankan dvd kosong; berguna untuk masuk menu sistem PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "jalankan plugin CDVD (menggantikan parameter IsoFile)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "nonaktifkan semua speedhack" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "gunakan koma yang dipilih atau daftar gamefixes pipe-delimited." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "nonaktifkan fast booting" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "mengganti lokasi konfigurasi file" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "masukkan file konfigurasi yang digunakan PCSX2" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "paksa %s untuk memulai Tampilan First-time" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "aktifkan mode operasi portable (memerlukan admin/akses root)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "masukkan file yang digunakan sebagai %s plugin" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Kegagalan Timpa Plugin - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -496,95 +501,95 @@ "%s Gagal Menimpa Plugin! File tersebut tidak ada atau tidaklah valid %s " "plugin:\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Tekan OK untuk menerapkan plugin default, atau Cancel untuk menutup %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Eror PCSX2: Defisiensi Perangkatkeras" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Tekan OK untuk menutup %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Eror Kritikal" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Batal" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Batal" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Terapkan" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Lanjut >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Back" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Kembali" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Akhiri" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ya" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Tidak" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Cari" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Simpan" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Simpan &Sebagai..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Bantuan" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Rumah" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Tampilkan tentang dialog" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -594,43 +599,50 @@ "\n" "Tekan Ok untuk menuju ke Panel Konfigurasi Plugin." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Peringatan! Plugin Sistem belum dijalankan. PCSX2 mungkin tidak bisa " "beroperasi." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Opsi Commandline" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "BIOS PS2 Eror" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Tekan Ok untuk menuju Panel Konfigurasi BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Peringatan! Plugin Sistem belum dijalankan. PCSX2 mungkin tidak bisa " +"beroperasi." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Opsi Commandline" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Trit PCSX2 Tidakrespon" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Gagalkan" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Sedang eksekusi Mesin Virtual PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Temukan Iso yang tidak berada di riwayat." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Temukan..." @@ -675,135 +687,146 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Gagal menerapkan pengaturan baru, satu diantaranya takvalid." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Simpan catatan pertanyaan" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Memuat banyak catatan didalam daerah mikrokosmikal kecil." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Kecil" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Ini yang ku pakai (sang programmer)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Baik dan dapat dibaca." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Besar" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Besarsekali" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Siapa tahu anda memiliki tampilika resolusi yang sangat tinggi." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Umum jenis warna soft-tone." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Tema cahaya" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "" "Warna hitam klasik untuk orang yang menyenangi teks terselip di optik mereka." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tema gelap" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Selalu di Atas" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Ketika dicentang window catatan akan tampak diatas semua window." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Simpan..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Simpan konten catatan kedalam file" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "H&apus" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Hapus konten window catatan" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Tampilan" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Tutup" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Tutup window catatan ini; konten akan dijaga" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Tampilkan catatan pengembang PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD baca" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Tampilkan aktivitas pembacaan disk" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Aktifkan semua" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Aktifkan semua filter sumber catatan." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Nonaktifkan semua" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Nonaktifkan semua filter sumber catatan" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Restorasi Semula" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Aktifkan semua filter sumber catatan." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Catatan" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Sumber" @@ -816,48 +839,45 @@ msgid "About %s" msgstr "Tentang %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versi Sebelum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmaster" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Spesialis Plugin" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Terimakasih khusus buat" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Para pengembang" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Para kontributor" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Sebuah Emulator Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Laman dan Forum Resmi PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "Repository Svn Resmi PCSX2 di GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Saya telah cukup melihat" @@ -865,23 +885,19 @@ msgid "Assertion Failure - " msgstr "Assertion Gagal -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Simpan sebuah snapshot dari panel pengaturan ini ke sebuah file PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Simpan dialog screenshot ke..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Pemilih BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Jangan tampilkan dialog ini lagi." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -889,7 +905,7 @@ "Nonaktifkan popup ini dan apapun respon yang dipilih akan otomatis digunakan " "mulai saat ini." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -897,16 +913,89 @@ "Popup ini tidak akan ditampilkan lagi. Pengaturan ini dapat dimundur dari " "panel pengaturan." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Biarkan" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reset" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Folder" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Gagal (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Buat memory card" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Buat sebuah memory card baru" @@ -928,37 +1017,37 @@ msgid "Select file name: " msgstr "Pilih nama file:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Gagal (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Buat memory card" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Gagal: Memory card gagal dibuat." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Gagal: Memory card gagal dibuat." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Gunakan kompresi NTFS ketika membuat card ini." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [paling cocok]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "" "Ini adalah standar ukuran Sony, dan didukung semua game dan versi BIOS." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -966,32 +1055,32 @@ "Selalu gunakan opsi ini jika kamu mau yang paling aman dan tindakan memory " "card yang paling pasti." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Sebuah ukuran tipikal untuk memory card pihak ke-tiga yang seharusnya cocok " "untuk sebagian besar game." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 dan 32 MB mempunyai faktor kompatibilitas yang kasarnya sama." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -999,7 +1088,7 @@ "Peringatan kompatibilitas rendah: Ya sangat besar, tetapi mungkin tidak " "jalan dengan banyak game." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1007,6 +1096,22 @@ "Gunakan pada resiko sendiri. Perbuatan aneh memory card mungkin terjadi " "(meskipun agak tidak mungkin)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1017,6 +1122,7 @@ msgstr "Pengaturan" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Pemilih bahasa" @@ -1070,15 +1176,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Auto-keluarkan memory card ketika membuka savestate" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "MemoryCard Manager" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Tarik card ke atau dari port PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1141,24 +1251,24 @@ msgid "Game Fixes" msgstr "Game Fixes" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Pemilih Komponen - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Folder" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Tampilan/Tema - %s" @@ -1180,47 +1290,51 @@ msgid "Terminate App" msgstr "Gagalkan Aplikasi" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "Output GS di Nonaktifkan!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Save state" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Simpan kondisi mesin virtual ke slot yang terpasang." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Load state" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Jalankan sebuah kondisi mesin virtual dari slot yang terpilih." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Backup Load State" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Jalankan kondisi backup mesin virtual untuk slot yang terpilih." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Pindah ke slot berikut" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Pindah save slot sekarang dengan fashion +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Kembali ke slot sebelum" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Pindah slot save sekarang dengan fashion -1!" @@ -1237,7 +1351,7 @@ "Merupakan kesalahan jika menjatuhkan banyak file kedalam sebuah %s window. " "Satu satu donk, terima kasih." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Konfirmasi Reset PS2" @@ -1255,277 +1369,277 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Kamu telah menjatuhkan ISO image ini ke %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Backup" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Tampilkan Konsol" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsol ke Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistem" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfigurasi" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Lainnya" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Memulai..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Jalankan ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Untuk menjalankan binari mentah PS2 langsung" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Backup sebelum simpan" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Gamefix Otomatis" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Otomatis terapkan gamefix yang diperlukan ke game yang bermasalah" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Aktifkan Cheats" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Aktifkan speedhacks" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Aktifkan Filesystem Host" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Shutdown" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Lenyapkan semua kondisi VM internal dan mematikan plugin." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Keluar" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Menutup %s mungkin berbahaya bagi kesehatan anda" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Pemilih Iso" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu Plugin" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Menyebabkan ISO image yang terpilih menjadi sumber CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Pakai sebuah plugin eksternal sebagai sumber CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Tidak ada disc" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Pakai ini untuk masuk ke konfigurasi virtual BIOS PS2 kamu." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Emulasi &Pengaturan" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Memory cards" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Pemilih Plugin/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor Database Game" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Audio (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Controllers (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Hapus semua pengaturan..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Hapus semua %s pengaturan dan ulang jalankan tampilan mulamula." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Tentang..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Pencatatan..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Hentikan" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Hentikan secara aman emulasi dan simpan kondisi PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Lanjutkan" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Melanjutkan kembali kondisi emulasi yang diberhentikan." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Hentikan/Lanjutkan" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Tidak ada kondisi emulasi yang aktif; gagal menghentikan atau melanjutkan." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Restart" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simulasikan restart dari mesin virtual PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Tidak ada kondisi emulasi yang aktif; jalankan sesuatu dulu." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Restart CDVD (penuh)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Reset total dari VM yang aktif." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Jalankan CDVD (penuh)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Jalankan VM menggunakan DVD sekarang atau media sumber Iso" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Restart CDVD (cepat)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Restart menggunakan fast BOOT (melewati layar splash)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Jalankan CDVD (cepat)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Pakai fast boot untuk melewatkan pembukaan PS2 dan layar logo" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Tidak ada plugin yang jalan" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Pengaturan Inti GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1533,93 +1647,93 @@ "Ubah pengaturan emulasi perangkat keras yang diregulasi oleh inti mesin " "virtual PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Pengaturan Window..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Ubah window dan opsi tampilan, termasuk aspek rasio." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Pengaturan Plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Buka %s plugin dialog pengaturan kompleks." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Reset semua pengaturan?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Konfirmasi pengubahan image ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "Apa kamu mau ganti disc atau jalankan image baru (lewat reset sistem)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Ganti Disc" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Konfirmasi perubahan sumber CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Kamu telah memilih untuk beralih sumber CDVD dari %s ke %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Apa km mau ganti disc atau jalankan image baru (sistem reset)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Semua Didukung (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Image Disc (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Semua File (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Pilih sumber iso CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Pilih file ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO tidak ditemukan!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Kesalahan terjadi ketika sedang membuka file:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1627,7 +1741,7 @@ "Kesalahan: Konfigurasi file ISO tidak ada. Klik OK untuk memilih sumber ISO " "baru untuk CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1635,7 +1749,7 @@ "Kamu telah memilih image ISO berikut ke PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1648,7 +1762,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1661,19 +1775,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nama file kosong atau terlalu pendek" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nama file diluar direktori yang diperlukan" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Nama file sudah ada" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Sistem Operasi mencegah file ini dibuat" @@ -1681,15 +1795,15 @@ msgid "Cannot apply settings..." msgstr "Gagal terapkan aturan..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Lokasi Pencarian BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Pilih folder dengan rom BIOS PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1697,13 +1811,13 @@ "Klik tombol Temukan untuk memilih folder berbeda dimana PCSX2 akan mencari " "rom BIOS PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Ulangmuat" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Pilih sebuah rom BIOS:" @@ -1735,51 +1849,55 @@ msgid "None" msgstr "None" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Opsi Kompleks Recompiler EE/FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preserve Sign" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Penuh" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Opsi Kompleks Recompiler VU0 / VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Ekstra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Kemungkinan merupakan yang paling lambat di dunia." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "" "Jalankan translasi binari just-in-time dari kode mesin MIPS-IV 64-bit ke x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Cukup pelan; tersedia untuk tujuan diagnosa saja ." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1787,42 +1905,42 @@ "Menjalankan translasi binary just-in-time dari mesin kode MIPS-I 32-bit ke " "x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Aktifkan EE Cache (Lambat)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Interpreter saja; tersedia untuk diagnosa" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Restorasi Semula" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "Interpreter Vektor Unit. Lambat dan tidak kompatibel. Hanya untuk diagnosa." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Recompiler microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Recompiler baru Vektor Unit dengan kompatibilitas meningkat. " "Direkomendasikan." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Recompiler superVU [legasi]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1993,7 +2111,7 @@ msgstr "Biarin Bus Direction pada Transfer Path3 - Berguna untuk Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2024,86 +2142,91 @@ "Peringatan: Aktifkan catatan jejak secara tipikal sangat lambat, dan " "merupakan penyebab utama dari 'Apa yang terjadi dengan FPS ku?' masalah. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Pilih folder dengan memory card PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Keluarkan" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Duplikat ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Rename ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Buat ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Masukkan ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Card:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Buat sebuah memory card baru." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Rename memory card ini ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Masukkan ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Keluarin card dari port ini" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Masukkan card ini ke port ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Buat duplikat dari memory card ini ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Hapus" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Hapus memory card dari disk secara permanen (konten akan hilang)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Buat sebuah memory card baru dan masukkan ke Port ini." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Hapus file memory?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Duplikat memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Gagal: Hanya bisa menduplikat card yang sudah ada." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2111,25 +2234,25 @@ "Pilih sebuah nama untuk duplikat\n" "('.ps2' akan otomatis ditambah)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Gagal: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Gagal salin!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Memory card '%s' telah diduplikat ke '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Sukses" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2138,121 +2261,126 @@ "Pilih sebuah nama untnuk memory card '%s'\n" "('.ps2' akan otomatis ditambah)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Rename memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Gagal: Rename tidak dapat dilaksanakan.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Kosong" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Pilih port tujuan untuk '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Masukkan card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Keluarin card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Masukkan card ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Gandakan card ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Rename card ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Hapus card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Masukkan card" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Buat sebuah card baru ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Ulangmuat" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Port PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Card (file) nama" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Ukuran card" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Telah diformat" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Terakhir diubah" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Dibuat pada" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Tidak" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ya" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Card tidakterpakai --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Tidak ada Card tidakterpakai --]" @@ -2285,11 +2413,11 @@ msgid "Select a document root for %s" msgstr "Pilih sebuah root dokumen untuk %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Terapkan" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Buat bahasa ini bahasa tetap aku saat ini juga!" @@ -2367,20 +2495,20 @@ "Alasan: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Menyelesaikan tugas..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Aktifkan speedhacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "Metode aman untuk memastikan semua speedhack nonaktif." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2388,34 +2516,34 @@ "Mereset semua opsi speedhack ke semula, yang menyebabkan mereka semua " "NONAKTIF." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [Tidak Direkomendasikan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [Tidak direkomendasikan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hack microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "Flag Hack mVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Peningkatan kecepatan baik dan kompatibilitas tinggi; bisa bikin grafis " "hancur... [Direkomendasikan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2423,15 +2551,15 @@ "Peningkatan baik kecepatan dan kompatibilitas; bisa bikin hang... " "[Direkomendasikan bila jumlah core 3+)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Hack lain" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Aktifkan INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2439,22 +2567,22 @@ "Peningkatan besar kecepatan untuk beberapa game, dengan hampir tidak ada " "pengaruh terhadap kompatibilitas. [Direkomendasikan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Aktifkan Deteksi Wait Loop" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Peningkatan menengah pada kecepatan beberapa game, dengan tidak ada " "pengaruh. [Direkomendasikan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Aktifkan fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Akses disc cepat, lama loading berkurang. [Tidak direkomendasikan]" @@ -2478,42 +2606,42 @@ msgid "Select a visual theme:" msgstr "Pilih sebuah tema visual:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Nonaktifkan Framelimiting" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Berguna untuk menjalankan benchmark. Atur opsi ini dalam game dengan menekan " "F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Aturan Dasar Framerate:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Aturan Slow Motion:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Aturan Turbo:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Framerate NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Framerate PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2521,19 +2649,19 @@ "Kesalahan ketika parsing NTSC ataupun aturan framerate PAL. Pengaturan " "harus memuat angka floating poin valid." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Nonaktif [umum]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Lewati bila dalam Turbo saja (TAB untuk mengaktifkan)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Pelewatan konstan" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2541,30 +2669,30 @@ "Normal dan Turbo membatasi rate skip grame. Mode slow motion masih tetap " "menonaktif frameskipping." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Frames di Ambil" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Frame di Lewat" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Pakai MTGS yang Tersinkronisasi" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" "Untuk pertolongan potensi bug di MTGS saja, karena benar sangat lambat." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Nonaktifkan semua output GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2572,11 +2700,11 @@ "Sepenuhnya menonaktifkan aktivitas plugin GS; ideal untuk benchmark komponen " "EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Frame Skipping" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Framelimiter" @@ -2615,7 +2743,7 @@ "Savestate ini gagal diload dikarenakan kehilangan komponen kritikal. Lihat " "log file untuk detilnya." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (default)" @@ -2636,7 +2764,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "File konfigurasi BIOS tidak ada. Silakan ulang konfigurasi." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2653,6 +2781,15 @@ "%s Ekstensi tidak ditemukan. microVU memerlukan sebuah CPu dengan ekstensi " "MMX, SSE, dan SS2. " +#~ msgid "Betatesting" +#~ msgstr "Betatesting" + +#~ msgid "BIOS Selector" +#~ msgstr "Pemilih BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Pilih sumber iso CDVD..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2- SSE2 Direkomendasikan" diff -Nru pcsx2-1.3.1+dfsg/locales/it_IT/pcsx2_Iconized.po pcsx2-1.4.0/locales/it_IT/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/it_IT/pcsx2_Iconized.po 2015-01-18 10:40:05.000000000 +0000 +++ pcsx2-1.4.0/locales/it_IT/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.3.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2015-01-18 11:37+0100\n" -"PO-Revision-Date: 2015-01-18 11:38+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-10-24 10:24+0200\n" "Last-Translator: Leucos\n" "Language-Team: Leucos \n" "Language: it_IT\n" @@ -14,8 +14,8 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: pxE;pxEt\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-Basepath: ..\\..\n" -"X-Generator: Poedit 1.7.3\n" +"X-Poedit-Basepath: ../..\n" +"X-Generator: Poedit 1.8.6\n" "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" @@ -37,7 +37,7 @@ "emulare i giochi della PSX dovrai scaricare un emulatore specifico per PSX, " "come ePSXe o PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -49,7 +49,7 @@ "di memoria virtuale insufficiente, come un file di scambio troppo piccolo o " "disattivato, o da un altro programma che ha arraffato molta memoria." -#: pcsx2/System.cpp:355 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -58,7 +58,7 @@ "virtuale PS2. Chiudi delle attività in background occupanti molta memoria e " "riprova." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -66,7 +66,7 @@ "Attenzione: alcuni dei ricompilatori PS2 configurati hanno fallito " "l'inizializzazione e sono stati disabilitati:" -#: pcsx2/gui/AppInit.cpp:204 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -77,7 +77,7 @@ "risolvere gli errori, sarà necessario riabilitare i ricompilatori elencati " "qui sopra manualmente." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -88,7 +88,7 @@ "prestito non conta). Per favore consulta le FAQ e le guide per ulteriori " "istruzioni." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,42 @@ "possiedi privilegi elevati in questo computer, dovrai utilizzare la Modalità " "Documenti Utente (fai clic sul pulsante qui sotto)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" +"Nota che il file risultante potrebbe non contenere tutti i salvataggi. " +"Dipende da quanti salvataggi vi sono nella memory card originale." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" +"ATTENZIONE: La conversione della memory card potrebbe richiedere un po' di " +"tempo! Per favore non chiudere l'emulatore durante il processo di " +"conversione, anche l'emulatore non risponde più agli input." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" +"Converte questa memory card ad un file Memory Card .ps2 standard da 8 MiB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "Converte questa memory card ad un file Memory Card .ps2 da 16 MiB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "Converte questa memory card ad un file Memory Card .ps2 da 32 MiB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "Converte questa memory card ad un file Memory Card .ps2 da 64 MiB." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -198,6 +233,16 @@ "salvataggio di stato. Potrebbe non essere compatibile con tutti i giochi " "(Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(Solo per il tipo cartella) Reindicizza il contenuto della memory card ad " +"ogni cambiamento del software in esecuzione. Questo previene che la memory " +"card esaurisca lo spazio per i salvataggi." + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -278,7 +323,7 @@ "Questa azione reimposterà lo stato attuale della macchina virtuale PS2 e " "tutti i progressi correnti saranno perduti. Sei sicuro?" -#: pcsx2/gui/MainMenuClicks.cpp:112 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -300,7 +345,7 @@ "\n" "(nota: le impostazioni dei singoli plugin non saranno cancellate)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -311,7 +356,12 @@ "problema\n" "e riabilitarlo utilizzando Configurazione -> Memory Card dai menù principali." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "(FolderMcd) Memory Card è piena, impossibile aggiungere: %s" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -319,13 +369,13 @@ "Per favore seleziona un BIOS valido. Se non è possibile effettuare una " "selezione valida, premi Annulla per chiudere il pannello di configurazione." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Avviso: La maggior parte dei giochi funzionano bene con le impostazioni " "predefinite." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "Avviso: La maggior parte dei giochi funzionano bene con le impostazioni " @@ -458,12 +508,13 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" -"È preferibile attivare l'opzione 'GameFix automatici' nel menu principale, e " -"lasciare quindi le opzioni di questa pagina non selezionate.\n" -"('automatici' significa un'attivazione selettiva di GameFix specifici e " -"testati per specifici giochi)" +"È consigliato abilitare 'GameFix automatici' nel menu principale e non " +"modificare questa pagina. ('Automatici' significa: uso selettivo di " +"correzioni testate specifiche per specifici giochi). I GameFix manuali NON " +"aumenteranno le prestazioni. Anzi potrebbero ridurle." #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 msgid "" @@ -478,23 +529,24 @@ "Il modo più sicuro è accertarsi che tutti i GameFix siano completamente " "disabilitati." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "" -"Stai per cancellare la memory card formattata '%s'. Tutti i dati di questa " -"scheda saranno perduti! Sei assolutamente e positivamente sicuro?" +"Stai per cancellare la memory card formattata '%s'\n" +"Tutti i dati di questa scheda saranno perduti!\n" +"Sei assolutamente e positivamente sicuro?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Fallita: La copia è permessa solamente verso una Porta-PS2 non occupata o " "verso il file system." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Fallita! La memory card di destinazione '%s' è in uso" @@ -579,39 +631,58 @@ "a causa di plugin mancanti o un'installazione incompleta di %s premi Annulla " "per chiudere il pannello di configurazione." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - Cyclerate predefinito.\n" -"Eguaglia accuratamente la velocità dell'EmotionEngine di una vera PS2." +"-2 - Riduce EE Cyclerate di circa il 50%.\n" +"Aumento di velocità moderato, ma di sicuro causerà audio singhiozzante in " +"molti FMV." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" -"2 - Riduce EE Cyclerate di circa il 33%.\n" +"-1 - Riduce EE Cyclerate di circa il 33%.\n" "Aumento di velocità contenuto per la maggior parte dei giochi mantenendo " "buona compatibilità." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." msgstr "" -"3 - Riduce EE Cyclerate di circa il 50%.\n" -"Aumento di velocità moderato, ma di sicuro causerà audio singhiozzante in " -"molti FMV." +"0 - Cyclerate predefinito.\n" +"Eguaglia accuratamente la velocità dell'originale EmotionEngine di una PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" +"1 - Aumenta EE cyclerate di circa il 33%.\n" +"I requisiti hardware aumentano, può aumentare gli FPS all'interno del gioco." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" +"2 - Aumenta EE cyclerate di circa il 50%.\n" +"I requisiti hardware aumentano fortemente, gli FPS all'interno del gioco " +"aumentano in modo sensibile.\n" +"Alcuni giochi potrebbero NON AVVIARSI con questa impostazione." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Disabilita il VU Cycle Stealing.\n" "È l'impostazione più compatibile!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -620,7 +691,7 @@ "Abbassa la compatibilità, ma garantisce aumenti di velocità per la maggior " "parte dei giochi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -629,7 +700,7 @@ "Abbassa ulteriormente la compatibilità, ma porta significativi aumenti di " "velocità in alcuni giochi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -638,7 +709,7 @@ "L'utilità è limitata dato che causa visuali traballanti o rallentamenti " "nella maggior parte dei giochi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -649,18 +720,25 @@ "non corrette. Se hai problemi di emulazione, per prima cosa disattiva le " "opzioni in questo pannello." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." -msgstr "" -"Impostando i valori più elevati di questo slider di fatto si riduce la " -"frequenza della CPU core R5900 dell'EmotionEngine portando a grossi aumenti " -"di velocità in quei giochi che non riescono ad utilizzare il pieno " -"potenziale dell'hardware della PS2." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." +msgstr "" +"Impostando questo slider su valori più bassi si riduce effettivamente la " +"frequenza della CPU core R5900 dell'EmotionEngine, portando solitamente ad " +"un miglioramento delle prestazioni nell'emulazione dei giochi che non " +"riescono a sfruttare appieno l'hardware della vera PS2. All'opposto, " +"impostando valori più elevati, si va ad incrementare la frequenza della CPU " +"emulata permettendo un incremento potenziale degli FPS all'interno dei " +"giochi, al costo di una di requisiti d'emulazione più esigenti e possibili " +"glitch." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -671,7 +749,7 @@ "Valori più alti aumentano il numero di cicli 'rubati' dall'EE per ogni " "microprogramma VU eseguito dal gioco." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -682,7 +760,7 @@ "Nella maggior parte dei casi questo non crea problemi e superVU fa qualcosa " "del genere in maniera predefinita." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -696,7 +774,7 @@ "Si possono invece verificare dei rallentamenti (specialmente su CPU dual-" "core) nel caso di giochi limitati dal thread GS ." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -707,7 +785,7 @@ "3D. I giochi che non utilizzano questo metodo di sincronia verticale " "otterranno un aumento di velocità minimo se non nullo." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -723,7 +801,7 @@ "iterazione di questo tipo di ciclo, l'elaborazione passa all'evento " "successivo o alla fine del tempo riservato al processore, quale venga prima." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -732,7 +810,7 @@ "problemi \n" "con questo SpeedHack (spesso indicati con 'mode 1' o 'slow DVD' necessario)." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -740,7 +818,7 @@ "Nota che quando il Limitatore Fotogrammi è disattivato anche le modalità " "Turbo e Rallentatore non sono più disponibili." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -749,7 +827,7 @@ "preciso non è possibile. La sua attivazione può causare gravi errori grafici " "in alcuni giochi." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -757,7 +835,7 @@ "Attiva questa opzione se pensi che la perdita di sincronia del thread MTGS " "sia la causa di crash o problemi grafici." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -775,7 +853,7 @@ "disattivata (la schermata visualizzata sarà in pratica spazzatura " "poligonale)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " @@ -797,3 +875,20 @@ "disponibile all'utilizzo. Questo non è un errore critico, dato che il " "ricompilatore superVU è obsoleto e in ogni caso dovresti utilizzare " "microVU. :)" + +#~ msgid "" +#~ "Setting lower values on this slider effectively reduces the clock speed " +#~ "of the EmotionEngine's R5900 CPU core, and typically brings big speedups " +#~ "to games that fail to utilize the full potential of the real PS2 " +#~ "hardware. Conversely, higher values effectively increase the clock speed " +#~ "which may bring about an increase in in-game FPS while also making games " +#~ "more demanding and possibly causing glitches." +#~ msgstr "" +#~ "Impostando questo slider su valori più bassi viene ridotta la frequenza " +#~ "del core CPU R5900 dell'EmotionEngine. In questo modo si può riscontrare " +#~ "un aumento della velocità di emulazione nei giochi che non usavano fino " +#~ "in fondo l'hardware originale della PS2.\n" +#~ "Viceversa, valori più elevati vanno ad incrementare la frequenza della " +#~ "CPU emulata offrendo un possibile aumento degli FPS all'interno dei " +#~ "giochi, al costo di possibili glitch e requisiti di emulazione più " +#~ "esigenti." diff -Nru pcsx2-1.3.1+dfsg/locales/it_IT/pcsx2_Main.po pcsx2-1.4.0/locales/it_IT/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/it_IT/pcsx2_Main.po 2015-01-18 10:40:05.000000000 +0000 +++ pcsx2-1.4.0/locales/it_IT/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.3.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2015-01-18 11:33+0100\n" -"PO-Revision-Date: 2015-01-18 11:37+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-10-24 10:40+0200\n" "Last-Translator: Leucos\n" "Language-Team: Leucos \n" "Language: it_IT\n" @@ -14,11 +14,24 @@ "Content-Transfer-Encoding: 8bit\n" "X-Poedit-KeywordsList: _;pxL;_d;pxDt;_t;pxLt\n" "X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-Basepath: ..\\..\n" -"X-Generator: Poedit 1.7.3\n" +"X-Poedit-Basepath: ../..\n" +"X-Generator: Poedit 1.8.6\n" "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" +#: common/include/Utilities/Exceptions.h:202 +msgid "No reason given." +msgstr "Nessuna spiegazione fornita." + +#: common/include/Utilities/Exceptions.h:241 +msgid "Parse error" +msgstr "Errore d'interpretazione" + +#: common/include/Utilities/Exceptions.h:265 +msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." +msgstr "" +"L'hardware del tuo sistema non è in grado di eseguire PCSX2. Ci dispiace." + #: common/src/Utilities/Exceptions.cpp:240 msgid "Oh noes! Out of memory!" msgstr "O no! Memoria esaurita!" @@ -72,7 +85,7 @@ #: common/src/Utilities/ThreadingDialogs.cpp:30 msgid "Waiting for tasks..." -msgstr "In attesa del completamento dei task..." +msgstr "In attesa del completamento delle operazioni..." #: common/src/Utilities/ThreadingDialogs.cpp:41 msgid "Waiting for task..." @@ -84,7 +97,7 @@ "Include la processazione degli eventi d'inattività ed alcuni altri utilizzi " "non comuni di eventi." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Formato file immagine ISO non riconosciuto" @@ -103,7 +116,7 @@ "causato da un tipo di immagine ISO non supportato o da un bug nel supporto " "immagini ISO di PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." @@ -111,14 +124,14 @@ "Durante l'attesa per l'apertura del plugin GS il thread MTGS ha smesso di " "rispondere." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Il salvataggio di stato non può essere caricato, in quanto pare essere " "corrotto o incompleto." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -127,7 +140,7 @@ "Non è stato possibile avviare il plugin %s. Il computer potrebbe non " "possedere risorse sufficienti o avere driver/hardware incompatibili." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -136,18 +149,18 @@ "Non è stato possibile inizializzare il plugin %s. Il sistema potrebbe non " "disporre della memoria sufficiente o delle risorse richieste." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Non è stato possibile trovare il file del plugin %s configurato" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "Il plugin %s configurato non è una libreria di collegamento dinamico valida" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -156,13 +169,13 @@ "Il plugin %s configurato non è un plugin di PCSX2 o è realizzato per una " "versione precedente di PCSX2 e non più supportata." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Il plugin riporta che l'hardware, il software o i driver non sono supportati." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -170,7 +183,7 @@ "Il plugin configurato non è un plugin di PCSX2 o è realizzato per una " "versione di PCSX2 precedente e non più supportata." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -179,11 +192,11 @@ "Il plugin %s configurato non è un plugin di PCSX2 valido o è realizzato per " "una versione di PCSX2 precedente e non più supportata." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Non è stato possibile inizializzare il plugin interno Memory Card." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin Scaricato" @@ -354,7 +367,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Log dettagliato dell'hardware CDVD." -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 +msgid "PCSX2 Message" +msgstr "PCSX2 - Messaggio" + +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -363,31 +380,31 @@ "temporaneo è stato creato con successo ma non è stato possibile spostarlo " "nel suo ultimo luogo di riposo." -#: pcsx2/gui/AppConfig.cpp:927 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Sicura +" -#: pcsx2/gui/AppConfig.cpp:928 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Sicura (più veloce)" -#: pcsx2/gui/AppConfig.cpp:929 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Bilanciata" -#: pcsx2/gui/AppConfig.cpp:930 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Aggressiva" -#: pcsx2/gui/AppConfig.cpp:931 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Aggressiva +" -#: pcsx2/gui/AppConfig.cpp:932 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Per lo più dannosa" -#: pcsx2/gui/AppConfig.cpp:1092 pcsx2/gui/AppConfig.cpp:1098 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Sovrascrittura del file impostazioni esistente fallita: permesso negato." @@ -396,7 +413,7 @@ msgid "Loading PS2 system plugins..." msgstr "Caricamento dei plugin di sistema PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." @@ -404,99 +421,99 @@ "Le estensioni SSE2 non sono disponibili. PCSX2 richiede una CPU che supporti " "il set di istruzioni SSE2." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Errore(i) del ricompilatore di PCSX2" -#: pcsx2/gui/AppInit.cpp:217 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Tutte le opzioni valgono solo per la sessione corrente e non saranno " "salvate.\n" -#: pcsx2/gui/AppInit.cpp:227 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoFile" -#: pcsx2/gui/AppInit.cpp:228 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "mostra questa lista di opzioni da riga di comando" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "forza la visualizzazione della finestra console/log del programma" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "usa la modalità GS a schermo intero" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "usa la modalità GS in finestra" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "nasconde l'interfaccia grafica durante l'esecuzione dei giochi" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:235 msgid "when nogui - prompt before exiting on suspend" msgstr "quando in modalità \"nogui\" - chiedi prima di uscire o sospendere" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "esegue l'immagine ELF specificata da " -#: pcsx2/gui/AppInit.cpp:237 +#: pcsx2/gui/AppInit.cpp:238 msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" "avvia con il lettore DVD vuoto; usalo per entrare nel menu di sistema della " "PS2" -#: pcsx2/gui/AppInit.cpp:238 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "avvia dal plugin CDVD (sovrascrive il parametro IsoFile)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "disattiva tutti gli SpeedHack" -#: pcsx2/gui/AppInit.cpp:241 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "usa la lista di GameFix specificata (separati da ',' o da '|'):" -#: pcsx2/gui/AppInit.cpp:242 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "disattiva l'avvio veloce" -#: pcsx2/gui/AppInit.cpp:244 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "cambia il percorso dei file di configurazione" -#: pcsx2/gui/AppInit.cpp:245 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "specifica il file di configurazione di PCSX2 da usare" -#: pcsx2/gui/AppInit.cpp:246 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "forza %s ad avviare la Procedura Guidata del primo avvio" -#: pcsx2/gui/AppInit.cpp:247 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "abilita la modalità portatile (richiede accesso come amministratore/root)" -#: pcsx2/gui/AppInit.cpp:251 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "specifica con il file da usare come plugin %s" -#: pcsx2/gui/AppInit.cpp:299 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Errore sovrascrittura dell'impostazione del plugin - %s" -#: pcsx2/gui/AppInit.cpp:302 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -507,96 +524,96 @@ "seguente non esiste o non è un plugin di %s valido:\n" "\n" -#: pcsx2/gui/AppInit.cpp:309 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Premi OK per usare il plugin configurato predefinito, o Annulla per chiudere " "%s." -#: pcsx2/gui/AppInit.cpp:489 pcsx2/gui/AppInit.cpp:501 +#: pcsx2/gui/AppInit.cpp:515 +msgid "PCSX2 Error: Hardware Deficiency" +msgstr "Errore di PCSX2: Hardware non compatibile" + +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Premi OK per chiudere %s." -#: pcsx2/gui/AppInit.cpp:489 -msgid "PCSX2 Error: Hardware Deficiency" -msgstr "Errore di PCSX2: Hardware non compatibile" - -#: pcsx2/gui/AppInit.cpp:502 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s - Errore Critico" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Annulla" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Annulla" -#: pcsx2/gui/AppInit.cpp:676 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "A&pplica" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "Ava&nti >" -#: pcsx2/gui/AppInit.cpp:678 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Indietro" -#: pcsx2/gui/AppInit.cpp:679 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Indietro" -#: pcsx2/gui/AppInit.cpp:680 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Fine" -#: pcsx2/gui/AppInit.cpp:681 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Sì" -#: pcsx2/gui/AppInit.cpp:682 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&No" -#: pcsx2/gui/AppInit.cpp:683 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Sfoglia" -#: pcsx2/gui/AppInit.cpp:684 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Salva" -#: pcsx2/gui/AppInit.cpp:685 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Salva con &Nome..." -#: pcsx2/gui/AppInit.cpp:686 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Aiuto" -#: pcsx2/gui/AppInit.cpp:687 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Home" -#: pcsx2/gui/AppInit.cpp:689 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Mostra la finestra informazioni" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -606,46 +623,52 @@ "\n" "Premi OK per aprire il Pannello di Configurazione dei Plugin." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Attenzione! I plugin di sistema non sono stati caricati. PCSX2 potrebbe " "essere inutilizzabile." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s - Opzioni da riga di comando" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Errore del BIOS PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Premi OK per aprire il Pannello di Configurazione del BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Attenzione! Non è stato selezionato un BIOS valido. PCSX2 potrebbe non " +"funzionare." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s - Opzioni da riga di comando" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Thread senza risposta di PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Termina" -#: pcsx2/gui/AppMain.cpp:991 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Avvio esecuzione Macchina virtuale PS2..." -#: pcsx2/gui/AppRes.cpp:72 -msgid "Browse..." -msgstr "Sfoglia..." - -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Sfoglia le cartelle per una ISO non presente tra quelle recenti." +#: pcsx2/gui/AppRes.cpp:65 +msgid "Browse..." +msgstr "Sfoglia..." + #: pcsx2/gui/AppUserMode.cpp:95 msgid "The following folders exist, but are not writable:" msgstr "" @@ -685,55 +708,57 @@ "Prova ad eliminare manualmente il file chiamato \"portable.ini\" dalla tua " "cartella d'installazione." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ApplyState.h:55 +msgid "Cannot apply new settings, one of the settings is invalid." +msgstr "" +"Impossibile applicare le nuove impostazioni, una delle impostazioni non è " +"valida." + +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Conferma salvataggio log" -#: pcsx2/gui/ConsoleLogger.cpp:418 -msgid "Small" -msgstr "Piccolo" - -#: pcsx2/gui/ConsoleLogger.cpp:418 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Infila un mucchio di log in un'area microcosmicamente piccola." -#: pcsx2/gui/ConsoleLogger.cpp:420 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" -msgstr "Normale" +#: pcsx2/gui/ConsoleLogger.cpp:439 +msgid "Small" +msgstr "Piccolo" -#: pcsx2/gui/ConsoleLogger.cpp:420 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "È quello che uso io (il programmatore)." -#: pcsx2/gui/ConsoleLogger.cpp:422 -msgid "Large" -msgstr "Grande" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" +msgstr "Carattere normale" -#: pcsx2/gui/ConsoleLogger.cpp:422 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "È bello e leggibile." -#: pcsx2/gui/ConsoleLogger.cpp:424 +#: pcsx2/gui/ConsoleLogger.cpp:443 +msgid "Large" +msgstr "Grande" + +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Enorme" -#: pcsx2/gui/ConsoleLogger.cpp:424 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Nel caso tu possieda uno schermo veramente ad alta risoluzione." -#: pcsx2/gui/ConsoleLogger.cpp:428 -msgid "Light theme" -msgstr "Tema chiaro" - -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Schema predefinito a colori tenui." -#: pcsx2/gui/ConsoleLogger.cpp:429 -msgid "Dark theme" -msgstr "Tema scuro" +#: pcsx2/gui/ConsoleLogger.cpp:449 +msgid "Light theme" +msgstr "Tema chiaro" -#: pcsx2/gui/ConsoleLogger.cpp:429 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -741,90 +766,94 @@ "Schema classico a colore nero, per la gente che si diverte ad avere il testo " "marchiato a fuoco nei propri nervi ottici." -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:450 +msgid "Dark theme" +msgstr "Tema scuro" + +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Sempre in primo piano" -#: pcsx2/gui/ConsoleLogger.cpp:433 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Con questa opzione attiva, la finestra di log resterà visibile sopra le " "altre finestre attive." -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Salva..." -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Salva i contenuti del log in un file." -#: pcsx2/gui/ConsoleLogger.cpp:436 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "Pu&lisci" -#: pcsx2/gui/ConsoleLogger.cpp:436 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Cancella i contenuti della finestra di log." -#: pcsx2/gui/ConsoleLogger.cpp:438 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Aspetto" -#: pcsx2/gui/ConsoleLogger.cpp:440 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Chiudi" -#: pcsx2/gui/ConsoleLogger.cpp:440 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Chiude questa finestra di log, il contenuto viene mantenuto." -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Mostra i log degli sviluppatori di PCSX2." -#: pcsx2/gui/ConsoleLogger.cpp:445 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Letture CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:445 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Mostra l'attività di lettura del disco." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Abilita tutti" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Abilita tutti i filtri delle fonti di log." -#: pcsx2/gui/ConsoleLogger.cpp:463 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Disabilita tutti" -#: pcsx2/gui/ConsoleLogger.cpp:463 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Disabilita tutti i filtri delle fonti di log." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 msgid "Restore Default" msgstr "Riprisitna predefinite" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 msgid "Restore default source filters." msgstr "Ripristina le fonti di log predefinite." -#: pcsx2/gui/ConsoleLogger.cpp:466 +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Log" -#: pcsx2/gui/ConsoleLogger.cpp:467 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Fonti" @@ -837,47 +866,43 @@ msgid "About %s" msgstr "Informazioni su %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versioni precedenti" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmaster" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Specialisti plugin" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Ringraziamenti speciali a" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Sviluppatori" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Collaboratori" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +msgid "PlayStation 2 Emulator" msgstr "Emulatore per PlayStation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Sito Web e Forum ufficiali di PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "Repository Git ufficiale di PCSX2 presso GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Ho visto abbastanza" @@ -885,23 +910,19 @@ msgid "Assertion Failure - " msgstr "Fallimento Asserzione - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Salva una screenshot di questo pannello impostazioni in un file PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Salva screenshot della finestra in..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Selettore BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Non mostrare nuovamente questa finestra." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -909,7 +930,7 @@ "Disattiva questo popup, la risposta che sarà selezionata ora sarà " "automaticamente utilizzata le volte successive." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -917,16 +938,88 @@ "Il popup non sarà mostrato nuovamente. Questa impostazione può essere " "cambiata dai pannelli impostazioni." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignora" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "Riprova" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "Annulla" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reset" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "Conversione della memory card in un formato differente" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "Converti" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "Converti: " + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "In:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "File da 8 MiB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "File da 16 MiB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "File da 32 MiB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "File da 64 MiB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" +"Converte questa memory card in una cartella con salvataggi in file singoli." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "Cartella" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Errore (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "Converti memory card..." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "Il tipo selezionato non è supportato!" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "La conversione della memory card è fallita per ragioni sconosciute." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Creazione di una nuova memory card" @@ -948,30 +1041,29 @@ msgid "Select file name: " msgstr "Nome del file:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Errore (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Crea memory card" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "Errore: Non è stato possibile creare la cartella per la memory card." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Errore: Non è stato possibile creare la memory card." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Usa la compressione NTFS per la creazione di questa Memory Card." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" -msgstr "8 MB [la più compatibile]" +msgstr "8 MiB [la più compatibile]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -979,7 +1071,7 @@ "È la dimensione standard prevista da Sony ed è supportata da tutti i giochi " "e da tutte le versioni del BIOS." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -987,34 +1079,34 @@ "Usa sempre questa opzione se desideri il comportamento delle memory card più " "affidabile." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" -msgstr "16 MB" +msgstr "16 MiB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Una delle dimensioni tipiche delle memory card prodotte da terze parti, " "dovrebbe funzionare con la maggior parte dei giochi." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" -"Le memory card da 16 e 32 MB hanno grosso modo lo stesso grado di " +"Le memory card da 16 e 32 MiB hanno grosso modo lo stesso grado di " "compatibilità." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" -msgstr "32 MB" +msgstr "32 MiB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" -msgstr "64 MB" +msgstr "64 MiB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1022,7 +1114,7 @@ "Avviso di bassa compatibilità: Di certo è molto grande ma potrebbe non " "funzionare in parecchi giochi." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1031,17 +1123,40 @@ "comporti \n" "in modo imprevedibile (anche se non è un'eventualità così probabile)." -#: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 -msgid "Settings" -msgstr "Impostazioni" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "Cartella [sperimentale]" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" +"Salva i contenuti della memory card nel filesystem dell'host invece che in " +"un file." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" +"Gestione automatica del contenuto della memory card in modo che la console " +"veda i soli file collegati al software in esecuzione. Ti permette di " +"trascinare e rilasciare i file all'interno della memory card con il tuo " +"normale file Explorer. È una funzionalità ancora sperimentale, quindi usala " +"a tuo rischio!" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" msgstr "Seleziona una cartella per le impostazioni di %s" +#: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 +msgid "Settings" +msgstr "Impostazioni" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:274 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Selettore Lingua" @@ -1050,9 +1165,8 @@ "Change the language only if you need to.\n" "The system default should be fine for most operating systems." msgstr "" -"Modifica la lingua solo se necessario.\n" -"L'impostazione predefinita dovrebbe andare bene per la maggior parte dei " -"sistemi operativi." +"Modifica la lingua solo se necessario. L'impostazione predefinita dovrebbe " +"andare bene per la maggior parte dei sistemi operativi." #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:92 msgid "Welcome to PCSX2!" @@ -1098,15 +1212,19 @@ "Espelli automaticamente le memory card quando si carica un salvataggio di " "stato" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "Gestisci automaticamente i salvataggi in base al gioco in esecuzione" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Gestore Memory Card" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Trascina le memory card da o sulle porte PS2 per inserirle/espellerle." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1171,24 +1289,24 @@ msgid "Game Fixes" msgstr "GameFix" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Selettore Componenti - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugin" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Cartelle" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Aspetto/Temi - %s" @@ -1211,53 +1329,53 @@ msgid "Terminate App" msgstr "Termina applicazione" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "L'output GS è disabilitato!" -#: pcsx2/gui/GlobalCommands.cpp:295 +#: pcsx2/gui/GlobalCommands.cpp:308 msgid "Exit PCSX2?" msgstr "Uscire da PCSX2?" -#: pcsx2/gui/GlobalCommands.cpp:417 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Salva stato" -#: pcsx2/gui/GlobalCommands.cpp:418 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Salva lo stato della macchina virtuale nello slot corrente." -#: pcsx2/gui/GlobalCommands.cpp:423 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Carica stato" -#: pcsx2/gui/GlobalCommands.cpp:424 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Carica uno stato della macchina virtuale dallo slot corrente." -#: pcsx2/gui/GlobalCommands.cpp:429 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Carica stato dal backup" -#: pcsx2/gui/GlobalCommands.cpp:430 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" "Carica lo stato della macchina virtuale dalla copia di sicurezza dello slot " "corrente." -#: pcsx2/gui/GlobalCommands.cpp:435 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Seleziona slot successivo" -#: pcsx2/gui/GlobalCommands.cpp:436 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Passa allo slot di salvataggio successivo" -#: pcsx2/gui/GlobalCommands.cpp:441 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Seleziona slot precedente" -#: pcsx2/gui/GlobalCommands.cpp:442 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Passa allo slot di salvataggio precedente" @@ -1274,7 +1392,7 @@ "È un errore rilasciare più file su di una finestra di %s. Per favore uno " "alla volta, grazie." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:347 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Conferma reset della PS2" @@ -1292,282 +1410,282 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Hai rilasciato la seguente immagine ISO su %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Backup" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Mostra Console" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Console a Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistema" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "C&DVD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Configurazione" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Varie" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Inizializzazione..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Esegui ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Per avviare direttamente da file binari PS2." -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Crea backup prima di salvare" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "GameFix automatici" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Applica automaticamente i GameFix necessari a giochi problematici noti." -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Abilita Cheat" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Abilita le Patch Widescreen" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Abilita Filesystem dell'Host" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Spegni" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Cancella tutti gli stati interni della MV e termina i plugin." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Esci" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Chiudere %s potrebbe nuocere alla tua salute." -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Selettore ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu Plugin" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Cambia l'origine del CDVD nell'immagine ISO specificata." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Usa un plugin esterno come origine per il CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Nessun disco" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "" "Usa questa opzione per avviare la configurazione del BIOS della tua PS2 " "virtuale." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "&Impostazioni Emulazione" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Memory card" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "Selettore &Plugin/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor del Database Giochi" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Audio (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Controller (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "FireWire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Cancella tutte le impostazioni..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Cancella tutte le impostazioni di %s e riesegue la Procedura Guidata del " "primo avvio." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Informazioni su..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "Apri Finestra di Debug..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Log..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pausa" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "" "Mette correttamente in pausa l'emulazione mantenendo lo stato della PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Riprendi" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Riprende dallo stato emulazione sospeso." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pausa/Riprendi" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "L'emulazione non è attiva, impossibile sospendere o riprendere." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Riavvia" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simula un reset hardware della macchina virtuale PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "L'emulazione non è attiva, devi prima avviare qualcosa." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Riavvia da CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Hard reset della MV attiva." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Avvia da CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Avvia la MV utilizzando il supporto DVD o ISO selezionato." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Riavvia da CDVD (veloce)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "" "Riavvia utilizzando il BOOT veloce (per saltare le schermate di avvio)." -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Avvia da CDVD (veloce)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Usa l'avvio veloce per saltare le schermate di avvio della PS2." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Nessun plugin caricato" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Impostazioni Core GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1575,97 +1693,97 @@ "Modifica le impostazioni dell'emulazione hardware controllate dalla macchina " "virtuale core di PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Impostazioni Finestra..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Modifica le opzioni della finestra GS, inclusa la proporzione aspetto." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Impostazioni plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "" "Apre la finestra di dialogo con le impostazioni avanzate del plugin %s." -#: pcsx2/gui/MainMenuClicks.cpp:114 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Cancellare tutte le impostazioni?" -#: pcsx2/gui/MainMenuClicks.cpp:142 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Conferma cambio immagine ISO" -#: pcsx2/gui/MainMenuClicks.cpp:148 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Desideri cambiare disco o avviare la nuova immagine (tramite reset del " "sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:150 pcsx2/gui/MainMenuClicks.cpp:196 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Cambia disco" -#: pcsx2/gui/MainMenuClicks.cpp:186 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Conferma cambio origine del CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:189 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Hai richiesto di cambiare l'origine del CDVD da %s a %s." -#: pcsx2/gui/MainMenuClicks.cpp:193 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Desideri cambiare disco o avviare la nuova immagine (reset del sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:263 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Tutti i formati supportati (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:266 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Immagini disco (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:269 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdump (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:272 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "File compressi (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:275 pcsx2/gui/MainMenuClicks.cpp:296 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Tutti i file (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:278 -msgid "Select CDVD source iso..." -msgstr "Seleziona origine ISO del CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "Seleziona un'immagine disco, immagine disco compressa o block-dump..." -#: pcsx2/gui/MainMenuClicks.cpp:295 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Seleziona un file ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:321 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "File ISO non trovato!" -#: pcsx2/gui/MainMenuClicks.cpp:323 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Un errore si è verificato provando ad aprire il file:" -#: pcsx2/gui/MainMenuClicks.cpp:324 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1673,7 +1791,7 @@ "Errore: Il file ISO configurato non esiste. Fai clic su OK per selezionare " "una nuova origine ISO per il CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:395 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1681,7 +1799,7 @@ "Hai selezionato la seguente immagine ISO in PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1694,7 +1812,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1707,19 +1825,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nome file vuoto o troppo corto" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nome file al di fuori della cartella richiesta" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Nome file già esistente" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Il sistema operativo impedisce la creazione di questo file" @@ -1727,15 +1845,15 @@ msgid "Cannot apply settings..." msgstr "Impossibile applicare le impostazioni..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Percorso di ricerca BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Seleziona la cartella contenente le ROM del BIOS PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1743,13 +1861,13 @@ "Fai clic sul pulsante Sfoglia per scegliere una cartella differente dove " "PCSX2 cercherà le ROM del BIOS PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Aggiorna lista" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Seleziona ROM del BIOS:" @@ -1781,40 +1899,44 @@ msgid "None" msgstr "Nessuno" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normale" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Opzioni avanzate ricompilatori EE/FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + mantieni segno" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Completo" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Opzioni avanzate del ricompilatore VU0/VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interprete" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Con ogni probabilità la cosa più lenta dell'universo." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Ricompilatore" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1822,11 +1944,11 @@ "Esegue una traduzione binaria sul momento del codice macchina 64-bit MIPS-IV " "in x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Decisamente lento, disponibile solo per effettuare test." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1834,20 +1956,20 @@ "Esegue una traduzione binaria sul momento del codice macchina 32-bit MIPS-I " "in x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Attiva Cache EE (lento)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Solo per l'interprete, disponibile solo per effettuare test." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:223 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Ripristina predefinite" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1855,22 +1977,22 @@ "Interprete Vector Unit. Lento e non molto compatibile. Da utilizzare solo " "per test." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Ricompilatore microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nuovo ricompilatore delle Vector Unit con compatibilità decisamente " "migliorata. Consigliato." -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Ricompilatore superVU [precedente]" -#: pcsx2/gui/Panels/CpuPanel.cpp:190 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2049,8 +2171,8 @@ "Hotwheels." #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" -msgstr "Passa al rendering software di GSdx quando viene riprodotto un FMV." +msgid "Switch to GSdx software rendering when an FMV plays" +msgstr "Passa al rendering software di GSdx durante la riproduzione di un FMV" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" @@ -2081,88 +2203,92 @@ "prestazioni ed è una delle principali cause della domanda 'Cos'è successo ai " "miei FPS?' :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Seleziona la cartella contenente le memory card della PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Espelli" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Copia..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Rinomina..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Crea..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "Converti..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Memory card:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Crea nuova memory card." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Rinomina memory card selezionata..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Inserisci..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Espelle la memory card dalla porta selezionata" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Inserisce la memory card selezionata in una porta..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Crea una copia della memory card selezionata..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Elimina" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Elimina permanentemente questa memory card dal disco (tutti i contenuti " "saranno perduti)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Crea una memory card assegnata alla Porta selezionata." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Eliminare il file della memory card?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -msgid "Failed: Can only duplicate an existing card." -msgstr "Fallita: Si possono copiare solo memory card esistenti." - -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Copia memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +msgid "Failed: Can only duplicate an existing card." +msgstr "Fallita: Si possono copiare solo memory card esistenti." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2170,25 +2296,25 @@ "Scrivi il nome della copia\n" "('.ps2' sarà aggiunto automaticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Fallita: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Copia fallita!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Copia della memory card '%s' creata col nome '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Successo" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2197,119 +2323,123 @@ "Scrivi un nuovo nome della memory card '%s'\n" "('.ps2' sarà aggiunto automaticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Rinomina memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Errore: Non è stato possibile completare la rinomina.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Porta-%u / Multitap-%u--Porta-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Porta-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Vuota" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Seleziona la porta in cui inserire '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Inserimento memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Espelli memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Inserisci memory card..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Copia memory card..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Rinomina memory card..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Elimina memory card" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "Converti memory card" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Crea nuova memory card..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Aggiorna lista" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Porta PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Nome file memory card" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Dimensione memory card" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formattata" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tipo" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Ultima modifica" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Creata il" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 -msgid "Yes" -msgstr "Sì" - -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "No" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 -msgid "PSX" -msgstr "PSX" +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 +msgid "Yes" +msgstr "Sì" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 +msgid "PSX" +msgstr "PSX" + +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Card inutilizzate --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Nessuna card inutilizzata --]" @@ -2426,22 +2556,22 @@ "Motivo: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Completamento delle operazioni..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Attiva gli SpeedHack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Un modo facile per assicurarsi che tutti gli SpeedHack siano completamente " "disattivati." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2449,50 +2579,50 @@ "Ripristina tutti gli SpeedHack alle loro impostazioni predefinite, di " "conseguenza saranno tutti disattivati." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [non consigliato]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [non consigliato]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hack di microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "microVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" -"Buon aumento di velocità ed alta compatibilità. Può causare problemi nella " -"grafica... [consigliato]" +"Buon aumento di velocità ed elevata compatibilità. Può causare problemi " +"nella grafica... [consigliato]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (microVU1 multi-threaded)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" msgstr "" -"Buon aumento di velocità ed alta compatibilità. Può causare stalli nei " +"Buon aumento di velocità ed elevata compatibilità. Può causare stalli nei " "giochi... [consigliato, solo se possiedi 3 o più core]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Altri Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Attiva rilevamento Spin INTC (INTC Spin Detection)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2500,22 +2630,22 @@ "Grande aumento di velocità per alcuni giochi, con quasi nessun effetto " "negativo sulla compatibilità. [consigliato]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Attiva rilevamento ciclo d'attesa (Wait Loop Detection)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Aumento di velocità moderato per alcuni giochi, nessun effetto collaterale " "noto. [consigliato]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Attiva CDVD veloce (fast CDVD)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "" "Accesso rapido al disco, tempi di caricamento inferiori. [non consigliato]" @@ -2540,42 +2670,42 @@ msgid "Select a visual theme:" msgstr "Selezione un Tema:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Disattiva il Limitatore Fotogrammi" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Utile per eseguire dei benchmark.\n" "Attiva/Disattiva questa opzione premendo F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" -msgstr "Aggiust. freq. fotogr. di base:" +msgstr "Aggiustamento frequenza fotogrammi di base:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" -msgstr "Aggiust. Mod. Rallentatore:" +msgstr "Aggiustamento Modalità Rallentatore:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" -msgstr "Aggiust. Mod. Turbo:" +msgstr "Aggiustamento Modalità Turbo:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Frequenza fotogrammi NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Frequenza fotogrammi PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2583,19 +2713,19 @@ "Errore nell'interpretazione dell'impostazione della frequenza dei fotogrammi " "PAL o NTSC. L'impostazione deve avere un valore numerico con virgola valido." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Disattivato [predefinito]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Salta solo in modalità Turbo (TAB per attivare)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Salto costante" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2603,19 +2733,19 @@ "In modalità Normale e Turbo i fotogrammi saranno saltati. Nella modalità\n" "Rallentatore il salto dei fotogrammi sarà comunque disattivato." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Fotogrammi da disegnare" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Fotogrammi da saltare" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Usa MTGS sincronizzato" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2623,11 +2753,11 @@ "Solo per rilevare eventuali bug nel MTGS, dato che potenzialmente è molto " "lento." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Disabilita tutto l'output GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2635,11 +2765,11 @@ "Disattiva completamente l'attività del plugin GS; ideale per fare un " "benchmark dei componenti EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Salto Fotogrammi" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Limitatore Fotogrammi" @@ -2681,7 +2811,7 @@ "Questo salvataggio di stato non può essere caricato a causa di componenti " "critici mancanti. Controlla il file di log per i dettagli." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(predefinito)" @@ -2704,7 +2834,7 @@ msgstr "" "Il file del BIOS configurato non esiste. Configuralo nuovamente, per favore." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2721,88 +2851,5 @@ "Estensioni %s non trovate. microVU richiede una CPU del sistema host con " "estensioni SSE2." -#: common/include/Utilities/Exceptions.h:190 -msgid "No reason given." -msgstr "Nessuna spiegazione fornita." - -#: common/include/Utilities/Exceptions.h:229 -msgid "Parse error" -msgstr "Errore d'interpretazione" - -#: common/include/Utilities/Exceptions.h:253 -msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." -msgstr "" -"L'hardware del tuo sistema non è in grado di eseguire PCSX2. Ci dispiace." - -#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 -msgid "PCSX2 Message" -msgstr "PCSX2 - Messaggio" - -#: pcsx2/gui/ApplyState.h:55 -msgid "Cannot apply new settings, one of the settings is invalid." -msgstr "" -"Impossibile applicare le nuove impostazioni, una delle impostazioni non è " -"valida." - -#~ msgid "boots an empty dvd tray; use to enter the PS2 system menu" -#~ msgstr "avvia con il lettore DVD vuoto, per accedere al menu della PS2" - -#~ msgid "PCSX2 - SSE2 Recommended" -#~ msgstr "PCSX2 - SSE2 Consigliate" - -#~ msgid "Dynamically toggle Vsync depending on frame rate (read tooltip!)" -#~ msgstr "" -#~ "Attiva/disattiva dinamicamente la sincronia verticale a seconda della " -#~ "frequenza fotogrammi (leggere il suggerimento!)" - -#~ msgid "%s %d.%d.%d" -#~ msgstr "%s %d.%d.%d" - -#~ msgid "%s %d.%d.%d-%lld%s (git) %s" -#~ msgstr "%s %d.%d.%d-%lld%s (git) %s" - -#~ msgid "" -#~ "Gamefixes can work around wrong emulation in some titles. \n" -#~ "They may also cause compatibility or performance issues.\n" -#~ "\n" -#~ "The safest way to make sure that all game fixes are completely disabled." -#~ msgstr "" -#~ "I GameFix possono aggirare i problemi di emulazione di alcuni titoli. \n" -#~ "Possono inoltre causare problemi di compatibilità e di prestazioni.\n" -#~ "\n" -#~ "Il modo più sicuro per accertarsi che tutti i GameFix siano completamente " -#~ "disabilitati." - -#~ msgid "" -#~ "The safest way to make sure that all game fixes are completely disabled." -#~ msgstr "" -#~ "Il modo più sicuro per accertarsi che tutti i GameFix siano completamente " -#~ "disattivati." - -#~ msgid "(modded)" -#~ msgstr "(modificato)" - -#~ msgid "" -#~ "Cannot load this savestate. The state is from an incompatible edition of " -#~ "PCSX2 that is either newer than this version, or is no longer supported." -#~ msgstr "" -#~ "Impossibile caricare questo salvataggio di stato. Il salvataggio di " -#~ "stato è di una edizione incompatibile di PCSX2, che può essere sia più " -#~ "recente di questa versione o sia non più supportata." - -#~ msgid "" -#~ "Cannot load this savestate. The state is an unsupported version, likely " -#~ "created by a newer edition of PCSX2." -#~ msgstr "" -#~ "Impossibile caricare questo salvataggio di stato. Il salvataggio di stato " -#~ "è di una versione non supportata, probabilmente è stato creato da una " -#~ "nuova edizione di PCSX2." - -#~ msgid "mVU Block Hack" -#~ msgstr "microVU Block Hack" - -#~ msgid "" -#~ "Good Speedup and High Compatibility; may cause bad graphics, SPS, etc..." -#~ msgstr "" -#~ "Buon aumento di velocità ed alta compatibilità. Può causare problemi " -#~ "nella grafica, SPS, ecc..." +#~ msgid "Betatesting" +#~ msgstr "Betatesting" diff -Nru pcsx2-1.3.1+dfsg/locales/ja_JP/pcsx2_Iconized.po pcsx2-1.4.0/locales/ja_JP/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ja_JP/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ja_JP/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-08-29 03:56+0900\n" "Last-Translator: nrusef \n" "Language-Team: DeltaHF\n" @@ -39,7 +39,7 @@ "PS1ã®ãƒ‡ã‚£ã‚¹ã‚¯ã¯PCSX2ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。 \n" "ePSXeã‚„PCSXãªã©ã®PS1å‘ã‘ã®ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’ãŠä½¿ã„ãã ã•ã„。" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -54,7 +54,7 @@ "フォルトキャッシュサイズを\n" "å°ã•ã設定ã™ã‚‹äº‹ã§å•é¡Œã‚’解決ã§ãる事ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -62,7 +62,7 @@ "PCSX2ã¯PS2仮想マシンã«å¿…è¦ãªãƒ¡ãƒ¢ãƒªã‚’割り当ã¦ã‚‹äº‹ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ \n" "ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã‚¿ã‚¹ã‚¯ã‚’終了ã•ã›ã€ãƒ¡ãƒ¢ãƒªã‚’解放ã—ã¦ã‹ã‚‰å†è©¦è¡Œã—ã¦ãã ã•ã„。" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -70,7 +70,7 @@ "警告:設定ã•ã‚ŒãŸã„ãã¤ã‹ã®PS2リコンパイラーãŒåˆæœŸåŒ–ã«å¤±æ•—ã—ã€ç„¡åŠ¹ã«ã•ã‚Œã¾ã—" "ãŸã€‚" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -81,7 +81,7 @@ "エラーを解決ã—ãŸå¾Œã«ã€ä¸Šè¨˜ãƒªã‚¹ãƒˆã®ãƒªã‚³ãƒ³ãƒ‘イラーを手動ã§æœ‰åŠ¹åŒ–ã—ãªãŠã™å¿…è¦ãŒ" "ã‚ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -91,7 +91,7 @@ "ã™ï¼‰PS2ã®å®Ÿæ©Ÿã‹ã‚‰ \n" "「åˆæ³•çš„ã«ã€æ‰‹ã«å…¥ã‚Œã¦ãã ã•ã„。詳ã—ã„方法ã¯FAQやガイドをå‚ç…§ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -117,7 +117,36 @@ "管ç†è€…権é™ãŒãªã„å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒ¢ãƒ¼ãƒ‰ã«åˆ‡ã‚Šæ›¿ãˆã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™\n" "(下ã®ãƒœã‚¿ãƒ³ã‚’クリック)。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -196,6 +225,13 @@ "メモリーカードデータã®ç ´å£Šã‚’回é¿ã—ã¾ã™ã€‚å…¨ã¦ã®ã‚²ãƒ¼ãƒ ã«äº’æ›æ€§ãŒã‚ã‚‹ã‚ã‘ã§ã¯ã‚" "ã‚Šã¾ã›ã‚“(ギターヒーロー)。" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -270,7 +306,7 @@ "ã“ã®æ“作ã¯æ—¢å­˜ã®ä»®æƒ³ãƒžã‚·ãƒ³ã‚’リセットã—ã¾ã™ã€‚\n" "進行中ã®å…¨ã¦ã®ä½œæ¥­ãŒå¤±ã‚ã‚Œã¾ã™ã€‚本当ã«ãƒªã‚»ãƒƒãƒˆã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -291,7 +327,7 @@ "\n" "(注æ„: プラグインã®è¨­å®šã«å½±éŸ¿ã¯ã‚ã‚Šã¾ã›ã‚“)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -301,7 +337,12 @@ "PS2スロット[%d]ã¯è‡ªå‹•çš„ã«ç„¡åŠ¹ã«ã•ã‚Œã¾ã—ãŸã€‚ã“ã®å•é¡Œã‚’解決ã™ã‚‹ã«ã¯\n" "メインメニューã‹ã‚‰ [設定→メモリーカード] ã§å†åº¦æœ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -309,11 +350,11 @@ "有効ãªBIOSイメージファイルをé¸æŠžã—ã¦ãã ã•ã„。\n" "é¸æŠžã§ããªã„å ´åˆã¯ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚’押ã—ã¦è¨­å®šãƒ‘ãƒãƒ«ã‚’é–‰ã˜ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "メモ:ã»ã¨ã‚“ã©ã®ã‚²ãƒ¼ãƒ ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã®ã¾ã¾ã§å‹•ä½œã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "メモ:ã»ã¨ã‚“ã©ã®ã‚²ãƒ¼ãƒ ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã®ã¾ã¾ã§å‹•ä½œã—ã¾ã™ã€‚" @@ -436,10 +477,12 @@ " * Transformers" #: pcsx2/gui/Panels/GameFixesPanel.cpp:116 +#, fuzzy msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "ゲームフィックスをé©ç”¨ã™ã‚‹ã“ã¨ã§ã€ã„ãã¤ã‹ã®ã‚²ãƒ¼ãƒ ã§ã®ä¸æ­£ãªã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³" "を修正ã§ãã¾ã™ãŒã€\n" @@ -467,7 +510,7 @@ "([自動ゲームフィックス]ã¯ã€ç‰¹å®šã®ã‚²ãƒ¼ãƒ ã«å¯¾ã—ã¦ãƒ†ã‚¹ãƒˆæ¸ˆã¿ã®ä¿®æ­£ã®ã¿ã‚’é©ç”¨ã—" "ã¾ã™ï¼‰" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -476,14 +519,14 @@ "フォーマットã•ã‚ŒãŸãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰[%s]を削除ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n" "メモリーカードã®ãƒ‡ãƒ¼ã‚¿ã¯å…¨ã¦å¤±ã‚ã‚Œã¾ã™ã€‚本当ã«å‰Šé™¤ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "コピーã«å¤±æ•—ã—ã¾ã—ãŸã€‚コピーã¯ç©ºã®PS2ãƒãƒ¼ãƒˆã‚„ファイルシステムã«å¯¾ã—ã¦ã®ã¿è¨±å¯" "ã•ã‚Œã¦ã„ã¾ã™ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "コピーã«å¤±æ•—ã—ã¾ã—ãŸã€‚コピー先ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰[%s]ã¯ä½¿ç”¨ä¸­ã§ã™ã€‚" @@ -571,48 +614,64 @@ "ã¯\n" "キャンセルを押ã—ã¦è¨­å®šãƒ‘ãƒãƒ«ã‚’é–‰ã˜ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - [デフォルト] PS2実機ã®EEã¨åŒã‚µã‚¤ã‚¯ãƒ«æ•°ï¼ˆã»ã¼åŒé€Ÿåº¦ï¼‰ã§ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã—" -"ã¾ã™ã€‚" +"3 - EEã®ã‚µã‚¤ã‚¯ãƒ«ãƒ¬ãƒ¼ãƒˆã‚’ç´„50%低下ã•ã›ã¾ã™ã€‚大ãã速度ãŒå‘上ã—ã¾ã™ãŒã€äº’æ›æ€§ãŒ" +"低下ã—ã¾ã™ã€‚ゲーム内ムービーã®éŸ³å£°ãŒä¹±ã‚Œã‚‹äº‹ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - EEã®ã‚µã‚¤ã‚¯ãƒ«ãƒ¬ãƒ¼ãƒˆã‚’ç´„33%低下ã•ã›ã¾ã™ã€‚速度ãŒãã“ãã“å‘上ã—ã€äº’æ›æ€§ã‚‚高ã„" "ã§ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" +"1 - [デフォルト] PS2実機ã®EEã¨åŒã‚µã‚¤ã‚¯ãƒ«æ•°ï¼ˆã»ã¼åŒé€Ÿåº¦ï¼‰ã§ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã—" +"ã¾ã™ã€‚" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"3 - EEã®ã‚µã‚¤ã‚¯ãƒ«ãƒ¬ãƒ¼ãƒˆã‚’ç´„50%低下ã•ã›ã¾ã™ã€‚大ãã速度ãŒå‘上ã—ã¾ã™ãŒã€äº’æ›æ€§ãŒ" -"低下ã—ã¾ã™ã€‚ゲーム内ムービーã®éŸ³å£°ãŒä¹±ã‚Œã‚‹äº‹ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - VU サイクルステアリングを無効ã«ã—ã¾ã™ã€‚最も互æ›æ€§ãŒé«˜ã„ã§ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "" "1 - ç©ã‚„ã‹ãªè¨­å®šã§ã™ã€‚ãã“ãã“速度ãŒå‘上ã—ã¾ã™ãŒã€äº’æ›æ€§ãŒå°‘ã—低下ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "2 - é©åº¦ãªè¨­å®šã§ã™ã€‚大ãã速度ãŒå‘上ã—ã¾ã™ãŒã€äº’æ›æ€§ãŒä½Žä¸‹ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -620,7 +679,7 @@ "3 - 最大é™ã®è¨­å®šã§ã™ã€‚利用価値ã¯ä½Žãã€ã»ã¨ã‚“ã©ã®ã‚²ãƒ¼ãƒ ã§ã¯ç”»é¢ã®ã¡ã‚‰ã¤ãã€é€Ÿ" "度低下ãªã©ãŒç™ºç”Ÿã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -631,16 +690,20 @@ "エミュレーションã«ã¤ã„ã¦å•é¡ŒãŒç™ºç”Ÿã—ãŸæ™‚ã¯ã€ã¾ãšã¯ã“ã®ãƒ‘ãƒãƒ«ã®è¨­å®šã‚’無効ã«ã—" "ã¦ã¿ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "設定値を高ãã™ã‚‹ç¨‹ã€EEã®R5900 CPUã®ã‚¯ãƒ­ãƒƒã‚¯ã‚’低下ã•ã›ã¾ã™ã€‚PS2ã®æ€§èƒ½ã‚’最大é™" "ã«åˆ©ç”¨ã—ã¦ã„ãªã„ゲームã§å¤§å¹…ã«é€Ÿåº¦ãŒå‘上ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -649,7 +712,7 @@ "VUãŒEEã‹ã‚‰å¥ªã†ã‚µã‚¤ã‚¯ãƒ«ã‚’増減ã•ã›ã¾ã™ã€‚値ãŒé«˜ã„ã»ã©VUプログラム数ã«å¿œã˜ã¦EEã‹" "ら奪ã†ã‚µã‚¤ã‚¯ãƒ«ãŒå¢—加ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -659,7 +722,7 @@ "ã¾ã™ã€‚\n" "ã»ã¼å®‰å…¨ã«ä½¿ã†äº‹ãŒã§ãã€Super VUもデフォルトã§åŒã˜ã‚ˆã†ãªå‹•ä½œã‚’ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -671,7 +734,7 @@ "互æ›æ€§ã®ä½Žä¸‹ã‚‚ã»ã¼ã‚ã‚Šã¾ã›ã‚“ãŒã€ãƒ•ãƒªãƒ¼ã‚ºã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚" # "GSãŒé™å®šã•ã‚ŒãŸã‚²ãƒ¼ãƒ ã®å ´åˆã«ã¯ã€ï¼ˆç‰¹ã«ã€ãƒ‡ãƒ¥ã‚¢ãƒ«ã‚³ã‚¢CPUã®å ´åˆï¼‰ã‚¹ãƒ­ãƒ¼ãƒ€ã‚¦ãƒ³ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -681,7 +744,7 @@ "RPG)ã§ä½¿ã†ã¨åŠ¹æžœãŒå¾—られã¾ã™ã€‚\n" "ã“ã®æ‰‹æ³•ã‚’使用ã—ãªã„ゲームã§ã¯ã€é€Ÿåº¦å‘上ã¯ã‚ãšã‹ã§ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -696,7 +759,7 @@ "ループã«å¯¾ã—一度ã®å復後ã«æ¬¡ã®ã‚¤ãƒ™ãƒ³ãƒˆã€\n" "ã¾ãŸã¯ãƒ—ロセッサã®ã‚¿ã‚¤ãƒ ã‚¹ãƒ©ã‚¤ã‚¹ã®æœ«å°¾ã®ã©ã¡ã‚‰ã‹è¿‘ã„ã»ã†ã¸é£›ã³ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -704,7 +767,7 @@ "「HDLoader compatibility listã€ã‚’å‚ç…§ã—ã€ã“ã®æ©Ÿèƒ½ã‚’《使用ã§ããªã„》ゲームを調" "ã¹ã¦ãã ã•ã„(mode 1/slow DVDã¨è¡¨è¨˜ã•ã‚Œã¦ã„ã¾ã™ï¼‰ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -712,7 +775,7 @@ "フレームレート制é™ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã‚¿ãƒ¼ãƒœã‚„スローモーションモードã¯ä½¿" "用ã§ãã¾ã›ã‚“。" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -720,14 +783,14 @@ "メモ:PS2ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ä»•æ§˜ã«ã‚ˆã‚Šã€æ­£ç¢ºãªãƒ•ãƒ¬ãƒ¼ãƒ ã‚¹ã‚­ãƒƒãƒ—ã¯ä¸å¯èƒ½ã§ã™ã€‚\n" "有効ã«ã™ã‚‹ã¨ã€ã‚²ãƒ¼ãƒ ã«ã‚ˆã£ã¦ã¯æ˜ åƒã«ä¸å…·åˆãŒèµ·ãã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "" "ä¸å…·åˆã®ç™ºç”ŸåŽŸå› ã¨ã—ã¦MTGSスレッドã®åŒæœŸãŒç–‘ã‚ã—ã„å ´åˆã¯æœ‰åŠ¹ã«ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -744,7 +807,7 @@ "警告: ã“ã®ã‚ªãƒ—ションã¯ã‚²ãƒ¼ãƒ å®Ÿè¡Œä¸­ã«æœ‰åŠ¹åŒ–ã§ãã¾ã™ãŒã€ç„¡åŠ¹åŒ–ã™ã‚‹äº‹ã¯ã§ãã¾" "ã›ã‚“(映åƒå‡ºåŠ›å†…容ã®åˆ¤åˆ¥ãŒã§ããªããªã‚Šã¾ã™ï¼‰ã€‚" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ja_JP/pcsx2_Main.po pcsx2-1.4.0/locales/ja_JP/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ja_JP/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ja_JP/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-08-29 03:56+0900\n" "Last-Translator: nrusef \n" "Language-Team: DeltaHF\n" @@ -22,15 +22,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "原因ä¸æ˜Žã®ã‚¨ãƒ©ãƒ¼" -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "構文エラー" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ã“ã®ãƒžã‚·ãƒ³ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æ§‹æˆã§ã¯PCSX2ã¯å®Ÿè¡Œã§ãã¾ã‚“。" @@ -96,7 +96,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "アイドルイベント処ç†ãŠã‚ˆã³ãã®ä»–例外イベントを用途ã«å«ã¿ã¾ã™ã€‚" -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "èªè­˜ã§ããªã„ISOイメージファイル形å¼ã§ã™ã€‚" @@ -113,18 +113,18 @@ "ISOイメージã‹ã‚‰èª­ã¿è¾¼ã‚“ã§ã„ã‚‹å ´åˆã€ã“ã®ã‚¨ãƒ©ãƒ¼ã¯ã‚µãƒãƒ¼ãƒˆã—ãªã„ISOイメージ形" "å¼ã€æˆ–ã„ã¯PCSX2å´ã®ISOイメージサãƒãƒ¼ãƒˆã®ãƒã‚°ãŒåŽŸå› ã¨è€ƒãˆã‚‰ã‚Œã¾ã™ã€‚" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "GSプラグインã®ãƒ­ãƒ¼ãƒ‰å¾…機中ã«MTGSスレッドã®å¿œç­”ãŒåœæ­¢ã—ã¾ã—ãŸã€‚" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "セーブステートをロードã§ãã¾ã›ã‚“。破æã—ã¦ã„ã‚‹ã‹ä¸å®Œå…¨ã§ã™ã€‚" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -133,7 +133,7 @@ "[%s]プラグインãŒãƒ­ãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸã€‚システムã®ãƒªã‚½ãƒ¼ã‚¹ãŒä¸è¶³ã—ã¦ã„ã‚‹ã‹ã€äº’" "æ›æ€§ã®ç„¡ã„ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚„ドライãƒãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -142,17 +142,17 @@ "[%s]プラグインãŒåˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚システムã®ãƒ¡ãƒ¢ãƒªã¾ãŸã¯ãƒªã‚½ãƒ¼ã‚¹ãŒä¸è¶³ã—" "ã¦ã„ã¾ã™ã€‚" -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "設定ã•ã‚ŒãŸ[%s]プラグインファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "設定ã•ã‚ŒãŸ[%s]プラグインファイルã¯ç„¡åŠ¹ãªDLLã§ã™ã€‚" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -161,14 +161,14 @@ "設定ã•ã‚ŒãŸ[%s]プラグインã¯PCSX2ã®ãƒ—ラグインã§ã¯ãªã„ã‹ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å¤" "ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ—ラグインã§ã™ã€‚" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "ã“ã®ãƒ—ラグインã§ã¯ã‚ãªãŸã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚‚ã—ãã¯ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã€ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã¯ã‚µ" "ãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“。" -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -176,7 +176,7 @@ "設定ã•ã‚ŒãŸãƒ—ラグインã¯PCSX2ã®ãƒ—ラグインã§ã¯ãªã„ã‹ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å¤ã„" "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ—ラグインã§ã™ã€‚" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -185,11 +185,11 @@ "設定ã•ã‚ŒãŸ[%s]プラグインã¯PCSX2ã®ãƒ—ラグインã§ã¯ãªã„ã‹ã€ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„å¤" "ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ—ラグインã§ã™ã€‚" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "内部メモリーカードプラグインã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "プラグインãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¦ã„ã¾ã›ã‚“。" @@ -347,11 +347,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "CDVDãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®è©³ç´°ãƒ­ã‚°ã€‚" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 メッセージ" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -359,31 +359,31 @@ "セーブステートãŒæ­£å¸¸ã«ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚一時ファイルã®ä½œæˆã¯æˆåŠŸã—ã¾ã—ãŸ" "ãŒä¿å­˜å…ˆã«ç§»å‹•ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "最も安全" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "安全(速ã‚)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "ãƒãƒ©ãƒ³ã‚¹" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "アクティブ" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "アクティブプラス" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "ã»ã¼ç„¡ç›Š" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "既存ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ã®ä¸Šæ›¸ãã«å¤±æ•—ã—ã¾ã—ãŸã€‚権é™ãŒã‚ã‚Šã¾ã›ã‚“。" @@ -391,7 +391,7 @@ msgid "Loading PS2 system plugins..." msgstr "PS2システムã®ãƒ—ラグインをロード中..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -399,90 +399,95 @@ msgstr "" "SSE拡張命令ãŒå­˜åœ¨ã—ã¾ã›ã‚“。SSE拡張命令セットをサãƒãƒ¼ãƒˆã™ã‚‹CPUãŒå¿…è¦ã§ã™ã€‚" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 リコンパイラーエラー" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "å…¨ã¦ã®ã‚ªãƒ—ションã¯ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ä¸­ã«ã®ã¿é©ç”¨ã•ã‚Œã€ä¿å­˜ã•ã‚Œã¾ã›ã‚“。\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "ISOファイル" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "ã“ã®ãƒªã‚¹ãƒˆã®ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‚ªãƒ—ションを表示" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "プログラムログï¼ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®è¡¨ç¤ºã‚’強制" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "GS フルスクリーンモード" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "GS ウィンドウモード" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "ゲーム実行中ã¯GUIéžè¡¨ç¤º" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "ELFイメージã®å®Ÿè¡Œ" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "空ディスクドライブ起動。PS2ã®BIOSã®ã‚·ã‚¹ãƒ†ãƒ ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«å…¥ã‚Œã‚‹ã€‚" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "CDVDプラグインã‹ã‚‰èµ·å‹•ã™ã‚‹ï¼ˆIsoFileパラメータを無視ã—ã¾ã™ï¼‰" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "スピードãƒãƒƒã‚¯ã‚’å…¨ã¦ç„¡åŠ¹ã«ã™ã‚‹" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "カンマã¾ãŸã¯ãƒã‚¤ãƒ•ãƒ³åŒºåˆ‡ã‚Šã®ã‚²ãƒ¼ãƒ ãƒ•ã‚£ãƒƒã‚¯ã‚¹ãƒªã‚¹ãƒˆã‚’使用ã™ã‚‹ã€‚" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "急速起動を無効" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "設定ファイルã®ãƒ‘スを変更" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "PCSX2設定ファイルを指定ã™ã‚‹" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "åˆå›žè¨­å®šã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã®é–‹å§‹ã‚’%sã«å¼·åˆ¶ã™ã‚‹" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "ãƒãƒ¼ã‚¿ãƒ–ルモードæ“作を有効化(è¦ï¼šç®¡ç†è€…権é™ï¼ãƒ«ãƒ¼ãƒˆæ¨©é™ï¼‰" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "[%s]プラグインã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "プラグイン上書ãエラー - [%s]" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -493,96 +498,96 @@ "ã™ï¼š\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "OKを押ã—ã¦ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ—ラグインを使用ã™ã‚‹ã‹ã€ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã‚’押ã—ã¦%sã‚’é–‰ã˜ã¦ãã " "ã•ã„。" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2エラー: ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢æ§‹æˆãŒæœ€ä½ŽåŸºæº–を満ãŸã—ã¦ã„ã¾ã›ã‚“。" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "OKを押ã—ã¦%sã‚’é–‰ã˜ã¦ãã ã•ã„。" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s é‡å¤§ãªã‚¨ãƒ©ãƒ¼" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "キャンセル" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "キャンセル" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "é©ç”¨(&A)" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "次ã¸(&N)>" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "<戻る(&B)" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "戻る" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "完了" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "ã¯ã„" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "ã„ã„ãˆ" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "å‚ç…§" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "セーブ(S)" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "åå‰ã‚’ã¤ã‘ã¦ä¿å­˜(&A)..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "ヘルプ(&H)" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "ホーム(&H)" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "PCSX2ã«ã¤ã„ã¦ã‚’表示ã™ã‚‹" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -592,43 +597,50 @@ "\n" "OKを押ã—ã¦ãƒ—ラグイン設定画é¢ã«ç§»å‹•ã—ã¾ã™ã€‚" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "警告: システムプラグインãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚PCSX2を実行ã§ããªã„ã‹ã‚‚ã—" "ã‚Œã¾ã›ã‚“。" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s コマンドラインオプション" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2BIOSエラー" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "OKを押ã—ã¦BIOS設定画é¢ã«ç§»å‹•ã—ã¾ã™ã€‚" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"警告: システムプラグインãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚PCSX2を実行ã§ããªã„ã‹ã‚‚ã—" +"ã‚Œã¾ã›ã‚“。" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s コマンドラインオプション" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 スレッドã®å¿œç­”ãŒã‚ã‚Šã¾ã›ã‚“" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "終了" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "PS2仮想マシン実行中..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "ISOイメージをå‚ç…§ã—ã¾ã™ã€‚" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "å‚ç…§..." @@ -674,51 +686,52 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "æ–°è¦ã®è¨­å®šã‚’é©ç”¨ã™ã‚‹äº‹ãŒã§ãã¾ã›ã‚“ã€ç„¡åŠ¹ãªè¨­å®šãŒã‚ã‚Šã¾ã™ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "ログã®ã‚»ãƒ¼ãƒ–" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "沢山ã®ãƒ­ã‚°ã‚’蚤より果ã¦ã—ãªãå°ã•ãªã‚¨ãƒªã‚¢ã«åŽã‚られる。" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "å°" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "ç§ãŒä½¿ã£ã¦ã‚‹å¥´ã ï¼ˆbyプログラマã®äººï¼‰ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "中" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "ãã‚Œã„ã§èª­ã¿ã‚„ã™ã„。" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "特大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "超高解åƒåº¦ãƒ‡ã‚£ã‚¹ãƒ—レイをæŒã£ã¦ã„る人用。" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "デフォルトã®ã‚½ãƒ•ãƒˆãƒˆãƒ¼ãƒ³ã‚«ãƒ©ãƒ¼ã‚¹ã‚­ãƒ¼ãƒ ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "ライトテーマ" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -726,84 +739,94 @@ "クラシックブラックカラースキームã€ãƒ†ã‚­ã‚¹ãƒˆã‚’視神経ã«ç„¼ã付ã‘られるã®ãŒå¤§å¥½ã" "ãªäººç”¨ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "ダークテーマ" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "常ã«æœ€å‰é¢" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "ãƒã‚§ãƒƒã‚¯ã‚’入れるã¨ãƒ­ã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯æœ€å‰é¢ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "ä¿å­˜..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "ログ内容をファイルã«ä¿å­˜" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "クリア" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "ログウィンドウã®å†…容をクリア" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "外観テーマ" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "é–‰ã˜ã‚‹" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "ログウィンドウを閉ã˜ã‚‹ï¼ˆå†…容ã¯ä¿ãŸã‚Œã¾ã™ï¼‰ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "開発者用詳細表示" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "PCSX2開発者用ログを表示" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD読ã¿è¾¼ã¿" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "ディスク読ã¿è¾¼ã¿ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティを表示" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "å…¨ã¦æœ‰åŠ¹åŒ–" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "å…¨ã¦ã®ãƒ­ã‚°ã‚½ãƒ¼ã‚¹ãƒ•ã‚£ãƒ«ã‚¿ã‚’有効ã«ã—ã¾ã™ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "å…¨ã¦ç„¡åŠ¹åŒ–" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "å…¨ã¦ã®ãƒ­ã‚°ã‚½ãƒ¼ã‚¹ãƒ•ã‚£ãƒ«ã‚¿ã‚’無効ã«ã—ã¾ã™ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "デフォルトã«æˆ»ã™" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "å…¨ã¦ã®ãƒ­ã‚°ã‚½ãƒ¼ã‚¹ãƒ•ã‚£ãƒ«ã‚¿ã‚’有効ã«ã—ã¾ã™ã€‚" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "ログ" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "ソース" @@ -816,47 +839,44 @@ msgid "About %s" msgstr "%sã«ã¤ã„ã¦" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "ベータテスター" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "ウェブマスター" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "プラグインスペシャリスト" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "多è¬" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "開発陣" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "貢献者" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "プレイステーション2 エミュレーター" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2å…¬å¼ã‚¦ã‚§ãƒ–サイトã¨ãƒ•ã‚©ãƒ¼ãƒ©ãƒ " -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2å…¬å¼Gitリãƒã‚¸ãƒˆãƒª - GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "å分ã«ã¿ã¾ã—ãŸ" @@ -864,23 +884,19 @@ msgid "Assertion Failure - " msgstr "表明é•å - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "表示ã—ã¦ã„る設定画é¢ã®ã‚¹ãƒŠãƒƒãƒ—ショットをPNGå½¢å¼ã§ä¿å­˜ã—ã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "スナップショットをä¿å­˜ã™ã‚‹..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOSé¸æŠž" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "今後ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ãªã„。" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -888,22 +904,95 @@ "ã“ã®ãƒãƒƒãƒ—アップを無効ã«ã—ã€ã“ã“ã§é¸æŠžã—ãŸã‚ªãƒ—ションã¯ä»Šå¾Œè‡ªå‹•çš„ã«é©ç”¨ã•ã‚Œã¾" "ã™ã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "ãƒãƒƒãƒ—アップã¯ä»Šå¾Œè¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。設定パãƒãƒ«ã§å…ƒã«æˆ»ã™äº‹ãŒã§ãã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "無視" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "リセット" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "フォルダー管ç†" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "エラー (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "メモリーカードã®ä½œæˆ" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "メモリーカードを新è¦ä½œæˆ" @@ -925,37 +1014,37 @@ msgid "Select file name: " msgstr "ファイルå:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "エラー (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "メモリーカードã®ä½œæˆ" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "エラー:メモリーカードã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "エラー:メモリーカードã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "NTFS圧縮を利用ã—ã¦ä½œæˆã™ã‚‹ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8MB [最上ä½ã®äº’æ›æ€§]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "" "純正メモリーカードã®ã‚µã‚¤ã‚ºã§ã€å…¨ã¦ã®ã‚²ãƒ¼ãƒ ã¨BIOSã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -963,38 +1052,38 @@ "最も確実ã§å®‰å…¨ãªãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã®æŒ™å‹•ã‚’求ã‚ã‚‹ãªã‚‰ã°ã€ã“ã®ã‚ªãƒ—ションを必ãšé¸æŠž" "ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "サードパーティ製メモリーカードã§ã‚ˆãã‚るサイズã§ã™ã€‚ã»ã¨ã‚“ã©ã®ã‚²ãƒ¼ãƒ ã§å•é¡Œç„¡" "ã動作ã—ã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16MBã€32MBカードã¯åŒç¨‹åº¦ã®äº’æ›æ€§èƒ½ã‚’有ã—ã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "警告:大容é‡ã§ã™ãŒã€ä¸€éƒ¨ã®ã‚²ãƒ¼ãƒ ã«ã—ã‹ä½¿ç”¨ã§ãã¾ã›ã‚“。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1002,6 +1091,22 @@ "自己責任ã§ä½¿ç”¨ã—ã¦ãã ã•ã„。誤作動ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ï¼ˆã»ã¨ã‚“ã©ç„¡ã„ã§ã™" "ãŒï¼‰ã€‚" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1012,6 +1117,7 @@ msgstr "フォルダー設定" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "言語é¸æŠž" @@ -1065,15 +1171,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "セーブステートをロードã™ã‚‹æ™‚ã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã‚’自動的ã«å–り出ã™" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "メモリーカードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "メモリーカードをドラッグ&ドロップã§æ“作ã§ãã¾ã™ã€‚" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1138,24 +1248,24 @@ msgid "Game Fixes" msgstr "ゲームフィックス" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "コンãƒãƒ¼ãƒãƒ³ãƒˆé¸æŠž - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "プラグイン" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "フォルダー管ç†" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "外観テーマ - %s" @@ -1177,47 +1287,51 @@ msgid "Terminate App" msgstr "アプリケーションã®çµ‚了" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS出力ã¯ç„¡åŠ¹ã§ã™ï¼" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "セーブステート" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "仮想マシンステートをé¸æŠžã‚¹ãƒ­ãƒƒãƒˆã«ã‚»ãƒ¼ãƒ–ã—ã¾ã™" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "ロードステート" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "仮想マシンステートをé¸æŠžã‚¹ãƒ­ãƒƒãƒˆã‹ã‚‰ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "ロードãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ステート" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "仮想マシンステートをé¸æŠžã‚¹ãƒ­ãƒƒãƒˆã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã‹ã‚‰ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "次ã®ã‚¹ãƒ­ãƒƒãƒˆã¸é€²ã‚€" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "ç¾åœ¨ã®ã‚»ãƒ¼ãƒ–スロットã‹ã‚‰ï¼‹ï¼‘サイクル移動ã—ã¾ã™ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "å‰ã®ã‚¹ãƒ­ãƒƒãƒˆã¸æˆ»ã‚‹" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "ç¾åœ¨ã®ã‚»ãƒ¼ãƒ–スロットã‹ã‚‰ï¼ï¼‘サイクル移動ã—ã¾ã™ã€‚" @@ -1234,7 +1348,7 @@ "ã„ãã¤ã‚‚%sウィンドウã«ãƒ‰ãƒ­ãƒƒãƒ—ã™ã‚‹ã¨ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚1ã¤ãšã¤ã§ãŠé¡˜ã„ã—ã¾ã™" "ã­ã€‚" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "PS2リセット確èª" @@ -1252,371 +1366,371 @@ msgid "You have dropped the following ISO image into %s:" msgstr "次ã®ISOイメージを%sã«ãƒ‰ãƒ­ãƒƒãƒ—ã—ã¾ã—ãŸï¼š" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "スロット %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "コンソールを表示" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "コンソールã‹ã‚‰æ¨™æº–入出力ã¸" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "システム(&S)" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "設定(&C)" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "ãã®ä»–(&M)" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "デãƒãƒƒã‚°(&D)" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "åˆæœŸåŒ–中..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "ELF実行..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "PS2ã®ãƒã‚¤ãƒŠãƒªã‚’直接実行ã—ã¾ã™" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "ステートセーブå‰ã«ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "自動ゲームフィックス" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "既知ã®ã‚²ãƒ¼ãƒ ãƒ•ã‚£ãƒƒã‚¯ã‚¹ã‚’自動的ã«é©ç”¨ã—ã¾ã™" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "ãƒãƒ¼ãƒˆæœ‰åŠ¹åŒ–" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "ワイドスクリーンパッãƒæœ‰åŠ¹åŒ–" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Host Filesystem有効化" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "シャットダウン" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "内部仮想マシンをåœæ­¢ã—ã€ãƒ—ラグインを終了ã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "終了" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%sã‚’é–‰ã˜ã‚‹äº‹ã¯ã‚ãªãŸã®å¥åº·ã‚’æãªã†ãŠãã‚ŒãŒã‚ã‚Šã¾ã™" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ISOé¸æŠž" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "プラグインメニュー" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "指定ã•ã‚ŒãŸISOイメージをCDVDã®ã‚½ãƒ¼ã‚¹ã«ã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "プラグイン" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "CDVDソースã«å¤–部プラグインを使用ã™ã‚‹ã€‚" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "ディスク無ã—" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "PS2ã®æœ¬ä½“設定ã«å…¥ã‚‹æ™‚ã«ä½¿ã„ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "エミュレーション設定 (&S)" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "メモリーカード (&M)" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "プラグイン/BIOSé¸æŠž (&P)" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "ゲームデータベース編集" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "ビデオ (GS) (&V)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "オーディオ (SPU2) (&A)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "コントローラー (PAD) (&C)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "ãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ (Dev9)" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "i.LINK (FireWire)" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "マルãƒã‚¿ãƒƒãƒ— 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "マルãƒã‚¿ãƒƒãƒ— ï¼’" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "å…¨ã¦ã®è¨­å®šã‚’åˆæœŸåŒ–..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "å…¨ã¦ã®%s設定をåˆæœŸåŒ–ã—ã€æ¬¡å›žèµ·å‹•æ™‚ã«åˆå›žè¨­å®šã‚¦ã‚£ã‚¶ãƒ¼ãƒ‰ã‚’実行ã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "PCSX2ã«ã¤ã„ã¦" -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "デãƒãƒƒã‚°ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ã" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "ログ開始..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "中断" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "エミュレーションを安全ã«ä¸­æ–­ã—ã€çŠ¶æ…‹ã‚’ä¿æŒã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "å†é–‹" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "中断ã•ã‚ŒãŸã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’å†é–‹ã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "中断/å†é–‹" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "アクティブãªã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ãƒ†ãƒ¼ãƒˆãŒã‚ã‚Šã¾ã›ã‚“。中断ã€å†é–‹ã¯ã§ãã¾ã›ã‚“。" -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "リスタート" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "PS2仮想マシンã§ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒªã‚»ãƒƒãƒˆã‚’シミュレートã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "" "アクティブãªã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚¹ãƒ†ãƒ¼ãƒˆãŒã‚ã‚Šã¾ã›ã‚“。先ã«ä½•ã‹èµ·å‹•ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "CDVDå†èµ·å‹• (フル)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "仮想マシンã®ãƒãƒ¼ãƒ‰ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã„ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "CDVDèµ·å‹• (フル)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "仮想マシンをDVD/ISOソースã‹ã‚‰èµ·å‹•ã—ã¾ã™" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "CDVDå†èµ·å‹• (急速)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "急速å†èµ·å‹•ã—ã¾ã™ (èµ·å‹•ç”»é¢ã‚’スキップã—ã¾ã™)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "CDVDèµ·å‹• (急速)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "急速起動ã§PS2ã®èµ·å‹•ç”»é¢ã‚’スキップã—ã¾ã™" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "プラグインãŒãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¦ã„ã¾ã›ã‚“" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "GSコア設定..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "仮想マシンã§åˆ¶å¾¡ã•ã‚Œã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³è¨­å®šã®å¤‰æ›´ã€‚" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "GSウィンドウ設定..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "アスペクト比ãªã©ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å¤–観オプションを変更ã—ã¾ã™ã€‚" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "プラグイン設定..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "%sプラグインã®è©³ç´°è¨­å®šã‚’é–‹ãã¾ã™ã€‚" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "å…¨ã¦ã®è¨­å®šã‚’リセットã—ã¾ã™ã‹ï¼Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "ISOイメージ変更ã®ç¢ºèª" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "ディスクを入れ替ãˆã‚‹ã‹ã€åˆ¥ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’èµ·å‹•ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’リセットã—ã¾ã™ã‹ï¼Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "ディスク入れ替ãˆ" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "CDVDソースã®å¤‰æ›´ç¢ºèª" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "CDVDソースを[%s]ã‹ã‚‰[%s]ã«å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "ディスクを入れ替ãˆã‚‹ã‹ã€åˆ¥ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’èµ·å‹•ã—ã¦ã‚·ã‚¹ãƒ†ãƒ ã‚’リセットã—ã¾ã™ã‹ï¼Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "全サãƒãƒ¼ãƒˆå½¢å¼ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "ディスクイメージ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "ブロックダンプ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "圧縮済㿠(%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ« (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "CDVDã®ISOソースをé¸æŠžã—ã¦ãã ã•ã„..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "ELFファイルをé¸æŠžã—ã¦ãã ã•ã„..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISOファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "ファイルを開ãã¨ãã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸï¼š" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1624,7 +1738,7 @@ "エラー:指定ã•ã‚ŒãŸISOファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。OKをクリックã—ã€CDVDã®ISOソー" "スをé¸æŠžã—ã¦ãã ã•ã„。" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1632,7 +1746,7 @@ "次ã®ISOイメージãŒé¸æŠžã•ã‚Œã¾ã—ãŸï¼š\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1645,7 +1759,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1658,19 +1772,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "ファイルåãŒç„¡ã„ã‹ã€çŸ­ã™ãŽã¾ã™" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "ファイルåã¯è¦æ±‚ã•ã‚Œã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå¤–ã§ã™" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "åŒã˜åå‰ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ—¢ã«ã‚ã‚Šã¾ã™" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "OSã«ã‚ˆã‚Šã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’作æˆã™ã‚‹äº‹ãŒã§ãã¾ã›ã‚“" @@ -1678,27 +1792,27 @@ msgid "Cannot apply settings..." msgstr "設定をé©ç”¨ã™ã‚‹äº‹ãŒã§ãã¾ã›ã‚“..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOSå‚照パス:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "PS2ã®BIOSãŒã‚るフォルダーをé¸æŠžã—ã¦ãã ã•ã„" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "å‚照を押ã—ã¦PCSX2ãŒBIOS ROMをロードã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’指定ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "リスト更新" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "BIOS ROMã‚’é¸æŠžã—ã¦ãã ã•ã„:" @@ -1730,40 +1844,44 @@ msgid "None" msgstr "ç„¡ã—" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "中" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU リコンパイラー詳細設定" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preserve Sign" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "フル" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0/VU1 リコンパイラー詳細設定" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "インタプリター" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "ãŠãらãã“ã®å®‡å®™ã®ä¸­ã§ä¸€ç•ªé…ã„ã‚‚ã®ã§ã™ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "リコンパイラー" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1771,11 +1889,11 @@ "64-bit MIPS-IV マシンコードを x86 ã«ãƒã‚¤ãƒŠãƒªãƒˆãƒ©ãƒ³ã‚¹ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã™ã‚‹æ“作をJust-" "In-Timeæ–¹å¼ã§è¡Œã†ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "çµæ§‹é…ã„ã€ãƒ‡ãƒãƒƒã‚°è¨ºæ–­ç”¨ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1783,40 +1901,40 @@ "32-bit MIPS-I マシンコードを x86 ã«ãƒã‚¤ãƒŠãƒªãƒˆãƒ©ãƒ³ã‚¹ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã™ã‚‹æ“作をJust-" "In-Timeæ–¹å¼ã§è¡Œã†ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "EEキャッシュを有効ã«ã™ã‚‹ï¼ˆé…ããªã‚‹ï¼‰" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "インタプリターモード専用ã€ãƒ‡ãƒãƒƒã‚°ç”¨" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "デフォルトã«æˆ»ã™" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "ベクターユニットインタプリター。低速ã§ã‚ã¾ã‚Šäº’æ›æ€§ãŒç„¡ã„。デãƒãƒƒã‚°è¨ºæ–­ç”¨ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU リコンパイラー" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "最新ã®VUリコンパイラーã§ã™ã€‚互æ›æ€§ãŒæ”¹å–„ã•ã‚Œã¦ã„ã¾ã™ã€‚ãŠå‹§ã‚。" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU リコンパイラー [legacy]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "microVUã«ãŠã‘ã‚‹ãƒã‚°ã®è¨ºæ–­ã‚„クランプå•é¡Œã«å½¹ç«‹ã¡ã¾ã™ã€‚" @@ -1989,7 +2107,8 @@ msgstr "Path3転é€ã®Bus Directionを無視ã™ã‚‹" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "ムービーå†ç”Ÿæ™‚ã«GSdxをソフトウェアレンダリングã«åˆ‡ã‚Šæ›¿ãˆã‚‹" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2022,86 +2141,91 @@ "警告:トレースログを有効ã«ã™ã‚‹ã¨é…ããªã‚Šã¾ã™ã€‚「俺ã®FPSã¯ã©ã†ãªã£ã¡ã¾ã£ãŸã€ç¾" "象ã«ç¹‹ãŒã‚Šã¾ã™ã€‚ (^-^)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "PS2メモリーカードãŒä¿å­˜ã•ã‚Œã‚‹ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "å–り出ã—" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "複製 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "åå‰ã®å¤‰æ›´ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "ä½œæˆ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "å·®ã—込む ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "メモリーカード:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "メモリーカードã®æ–°è¦ä½œæˆã‚’ã™ã‚‹ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "メモリーカードã®åå‰ã‚’変更 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "å·®ã—込む ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "ãƒãƒ¼ãƒˆã‹ã‚‰ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã‚’å–り出ã™" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "ãƒãƒ¼ãƒˆã«ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã‚’å·®ã—込む" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "メモリーカードã®è¤‡è£½ã‚’ä½œæˆ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "削除" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "ã“ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã‚’完全ã«æ¶ˆåŽ»ã™ã‚‹ï¼ˆå…¨ã¦ã®ãƒ‡ãƒ¼ã‚¿ã¯å¤±ã‚ã‚Œã¾ã™ï¼‰" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "メモリーカードを新è¦ä½œæˆã—ã€ã“ã®ãƒãƒ¼ãƒˆã«å‰²ã‚Šå½“ã¦ã‚‹" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "メモリーカードファイルを削除ã—ã¾ã™ã‹ï¼Ÿ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "メモリーカードã®è¤‡è£½" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "失敗:複製元ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“。" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2109,25 +2233,25 @@ "複製先ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚«ãƒ¼ãƒ‰ã«åå‰ã‚’付ã‘ã¦ãã ã•ã„。\n" "(拡張å­ã€Œ.ps2〠ã¯è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ï¼‰" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "失敗: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "コピーã«å¤±æ•—ã—ã¾ã—ãŸï¼" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "メモリーカード '%s' 㯠'%s' ã«è¤‡è£½ã•ã‚Œã¾ã—ãŸã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "æˆåŠŸ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2136,119 +2260,124 @@ "'%s' メモリーカードã«åå‰ã‚’付ã‘ã¦ãã ã•ã„\n" "(拡張å­ã€Œ.ps2〠ã¯è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã¾ã™ï¼‰" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "メモリーカードã®åå‰ã‚’変更" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "エラー:åå‰ã‚’変更ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "ãƒãƒ¼ãƒˆ-%u / マルãƒã‚¿ãƒƒãƒ—-%u--ãƒãƒ¼ãƒˆ-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " マルãƒã‚¿ãƒƒãƒ—-%u--ãƒãƒ¼ãƒˆ-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "空" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "'%s' ã‚’å·®ã—込むãƒãƒ¼ãƒˆã‚’指定ã—ã¦ãã ã•ã„" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "メモリーカードを差ã—込む" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "メモリーカードをå–り出ã™" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "メモリーカードを差ã—込む ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "メモリーカードを複製 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "メモリーカードã®åå‰ã‚’変更ã™ã‚‹ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "メモリーカードを削除" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "メモリーカードを差ã—込む" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "メモリーカードを新è¦ä½œæˆ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "リスト更新" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2ãƒãƒ¼ãƒˆ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "カード(ファイル)å" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "カードサイズ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "フォーマットã•ã‚ŒãŸ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "種類" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "更新日時" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "作æˆæ—¥æ™‚" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "ã„ã„ãˆ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "ã¯ã„" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PS1" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- メモリーカードãƒãƒ³ã‚¯ --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- カードãƒãƒ³ã‚¯ã¯ç©ºã§ã™ --]" @@ -2279,11 +2408,11 @@ msgid "Select a document root for %s" msgstr "%sを設置ã™ã‚‹ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ãƒ«ãƒ¼ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "é©ç”¨" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "ã“ã®è¨€èªžã‚’デフォルトã«è¨­å®šã—ã¦ãã‚Œï¼" @@ -2361,87 +2490,87 @@ "ç†ç”±ï¼š %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "タスク処ç†ä¸­..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "スピードãƒãƒƒã‚¯æœ‰åŠ¹åŒ–" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "スピードãƒãƒƒã‚¯ãŒå…¨ã¦ç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„る事を確èªã™ã‚‹ãŸã‚ã®æœ€å–„ãªæ–¹æ³•ã§ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "スピードãƒãƒƒã‚¯ã‚’å…¨ã¦ç„¡åŠ¹ã«ã—ã¾ã™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE サイクルレート [éžæŽ¨å¥¨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU サイクルステアリング [éžæŽ¨å¥¨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU ãƒãƒƒã‚¯" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "速度ãŒå‘上ã—ã¾ã™ãŒã€æ˜ åƒãŒä¹±ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ [推奨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU(マルãƒã‚¹ãƒ¬ãƒƒãƒ‰ microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" msgstr "" "速度ãŒå¤§å¹…ã«å‘上ã—ã¾ã™ãŒã€ãƒ•ãƒªãƒ¼ã‚ºã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ [3コア以上推奨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "ãã®ä»–ã®ãƒãƒƒã‚¯" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "INTC Spin Detection 有効化" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" msgstr "" "一部ã®ã‚²ãƒ¼ãƒ ã§é€Ÿåº¦ãŒå¤§å¹…ã«å‘上ã—ã€äº’æ›æ€§ã®ä½Žä¸‹ã‚‚ã»ã¼ã‚ã‚Šã¾ã›ã‚“。 [推奨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Wait Loop Detection 有効化" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "一部ã®ã‚²ãƒ¼ãƒ ã§é€Ÿåº¦ãŒãã“ãã“å‘上ã—ã€äº’æ›æ€§ã¯ä½Žä¸‹ã—ãªã„ã¨æ€ã‚ã‚Œã¾ã™ã€‚ [推奨]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Fast CDVD 有効化" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "高速ã«ãƒ‡ã‚£ã‚¹ã‚¯ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã§èª­ã¿è¾¼ã¿æ™‚間を減少ã•ã›ã¾ã™ã€‚ [éžæŽ¨å¥¨]" @@ -2464,41 +2593,41 @@ msgid "Select a visual theme:" msgstr "視覚テーマã®é¸æŠžï¼š" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "フレームリミッター無効化" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "ベンãƒãƒžãƒ¼ã‚¯ã‚’ã™ã‚‹æ™‚ã«ä¾¿åˆ©ã§ã™ã€‚ゲーム実行中ã¯ã€ŒF4ã€ã§åˆ‡ã‚Šæ›¿ãˆã‚‰ã‚Œã¾ã™ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "基本フレームレート調整:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "スローモーション調整:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "ターボ調整:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC フレームレート:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL フレームレート:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2506,19 +2635,19 @@ "NTSCã¾ãŸã¯PALæ–¹å¼ã®ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¬ãƒ¼ãƒˆè¨­å®šã®ãƒ‘ースエラー。設定ã¯æœ‰åŠ¹ãªæµ®å‹•å°æ•°ç‚¹æ•°" "ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "無効 [デフォルト]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "ターボ時ã®ã¿ã‚¹ã‚­ãƒƒãƒ—(タブキーã§æœ‰åŠ¹ï¼‰" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "常ã«ã‚¹ã‚­ãƒƒãƒ—" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2526,30 +2655,30 @@ "通常時ã¾ãŸã¯ã‚¿ãƒ¼ãƒœæ™‚ã«ãƒ•ãƒ¬ãƒ¼ãƒ ã‚¹ã‚­ãƒƒãƒ—ã—ã¾ã™ã€‚\n" "スローモーション時ã«ã¯ãƒ•ãƒ¬ãƒ¼ãƒ ã‚¹ã‚­ãƒƒãƒ—ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "æ画フレーム数" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "フレームスキップ数" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "MTGSåŒæœŸã‚’有効化" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" "ä¸å…·åˆã®ç™ºç”ŸåŽŸå› ã¨ã—ã¦MTGSスレッドã®åŒæœŸãŒç–‘ã‚ã—ã„å ´åˆã¯æœ‰åŠ¹ã«ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "GS出力を無効化" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2557,11 +2686,11 @@ "GSプラグインã®å‹•ä½œã‚’完全ã«ç„¡åŠ¹ã«ã—ã¾ã™ã€‚EEコンãƒãƒ¼ãƒãƒ³ãƒˆè‡ªä½“ã®å‡¦ç†é€Ÿåº¦è¨ˆæ¸¬ã¨" "デãƒãƒƒã‚°ã«æœ€é©ã§ã™ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "フレームスキップ" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "フレームリミッター" @@ -2602,7 +2731,7 @@ "セーブステートã®é‡è¦ãªæ§‹æˆãŒæ¬ ã‘ã¦ã„ãŸãŸã‚ã€ãƒ­ãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。詳細ã¯ãƒ­ã‚°ãƒ•ã‚¡" "イルをå‚ç…§ã—ã¦ãã ã•ã„。" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(デフォルト)" @@ -2622,7 +2751,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "指定ã•ã‚ŒãŸBIOSファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。å†åº¦è¨­å®šã—ã¦ãã ã•ã„。" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2639,6 +2768,15 @@ "ãŠä½¿ã„ã®CPU㯠%s 拡張命令ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。 microVU㯠MMXã€SSEã€ãŠã‚ˆã³SSE2 " "拡張命令ã«å¯¾å¿œã—ãŸCPUãŒå¿…è¦ã§ã™ã€‚" +#~ msgid "Betatesting" +#~ msgstr "ベータテスター" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOSé¸æŠž" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "CDVDã®ISOソースをé¸æŠžã—ã¦ãã ã•ã„..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2を推奨ã—ã¾ã™ã€‚" diff -Nru pcsx2-1.3.1+dfsg/locales/ko_KR/pcsx2_Iconized.po pcsx2-1.4.0/locales/ko_KR/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ko_KR/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ko_KR/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-14 19:47+0900\n" "Last-Translator: 99skull <99skull@gmail.com>\n" "Language-Team: 99skull,p695091 <99skull@gmail.com>\n" @@ -40,7 +40,7 @@ "ì—뮬레ì´íŠ¸í•˜ê³  ì‹¶ì€ ê²½ìš° ë‹¹ì‹ ì€ ePSXe ë˜ëŠ” PCSX와 ê°™ì€ íŠ¹ì • PSX ì—뮬레ì´í„°ë¥¼ " "다운로드해야 합니다." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -51,7 +51,7 @@ "오류는 작거나 ë¹„í™œì„±í™”ëœ êµì²´ 파ì¼, ë˜ëŠ” 메모리를 ë§Žì´ ì ìœ í•˜ëŠ” 다른 프로그램" "ì—ì„œ ê°€ìƒ ë©”ëª¨ë¦¬ ìžì› 부족으로 ì¸í•´ ë°œìƒí•  수 있습니다. " -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -59,14 +59,14 @@ "PCSX2는 PS2 ê°€ìƒ ë¨¸ì‹ ì— í•„ìš”í•œ 메모리를 할당할 수 없습니다. ì¼ë¶€ 메모리를 ì " "유하는 백그ë¼ìš´ë“œ ìž‘ì—…ì„ ë‹«ê³  다시 ì‹œë„하십시오." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" "경고: êµ¬ì„±ëœ PS2ì˜ ë¦¬ì»´íŒŒì¼ëŸ¬ 중 ì¼ë¶€ ì´ˆê¸°í™”ì— ì‹¤íŒ¨í•˜ì—¬ 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -76,7 +76,7 @@ "ì´ì…˜ ì†ë„를 ìƒë‹¹ížˆ 개선시킬 수 있습니다. ë‹¹ì‹ ì€ ì˜¤ë¥˜ë¥¼ 해결하기 위해 수ë™ìœ¼" "ë¡œ ìœ„ì— ë‚˜ì—´ëœ ë¦¬ì»´íŒŒì¼ëŸ¬ë¥¼ 다시-활성화할 수 있습니다." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -86,7 +86,7 @@ "ì‹œ* ìžì‹ ì´ 소유한 실제 PS2 유닛ì—ì„œ ë°”ì´ì˜¤ìŠ¤ë¥¼ 얻어야 합니다 (ë¹Œë¦°ê²ƒë„ í¬í•¨ë˜" "지 않습니다). 추가 ì„¤ëª…ì— ëŒ€í•œ FAQ ë° ì•ˆë‚´ë¥¼ 참조하십시오." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -110,7 +110,36 @@ "ëŠ¥ë ¥ì„ ë¶€ì—¬í•œ ë’¤ PCSX2를 다시-실행합니다. ì´ ì»´í“¨í„°ì— ëŒ€í•œ ë†’ì€ ê¶Œí•œì´ ì—†ëŠ” " "경우, ë‹¹ì‹ ì€ ì‚¬ìš©ìž ë¬¸ì„œ ë°©ì‹ìœ¼ë¡œ 전환해야 합니다 (아래 ë²„íŠ¼ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -189,6 +218,13 @@ "ì˜ ì†ìƒì„ 방지합니다. 모든 게임과 함께 호환ë˜ì§€ ì•Šì„ ìˆ˜ 있습니다 (기타 히어" "ë¡œ)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -264,7 +300,7 @@ "ì´ ìž‘ì—…ì€ ê¸°ì¡´ PS2ì˜ ê°€ìƒ ë¨¸ì‹  ìƒíƒœë¥¼ 리셋할 것입니다; í˜„ìž¬ì˜ ëª¨ë“  ì§„í–‰ì„ ìžƒ" "게 ë  ê²ƒìž…ë‹ˆë‹¤. 확실한가요?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -283,7 +319,7 @@ "\n" "(주ì˜: 플러그ì¸ì— 대한 ì„¤ì •ì€ ì˜í–¥ë°›ì§€ 않습니다)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -294,7 +330,12 @@ "다;\n" "ë©”ì¸ ë©”ë‰´ì—ì„œ 메모리 ì¹´ë“œ êµ¬ì„±ì„ ì‚¬ìš©í•˜ì—¬ 언제든지 다시-활성화할 수 있습니다." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -302,11 +343,11 @@ "유효한 ë°”ì´ì˜¤ìŠ¤ë¥¼ ì„ íƒí•˜ì‹­ì‹œì˜¤. ë‹¹ì‹ ì´ í™•ì‹¤í•œ ì„ íƒì„ í•  수 없다면 취소를 눌" "러 구성 패ë„ì„ ë‹«ìœ¼ì‹­ì‹œì˜¤." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "주ì˜: ëŒ€ë¶€ë¶„ì˜ ê²Œìž„ì€ ê¸°ë³¸ 옵션으로 잘 ìž‘ë™í•©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "주ì˜: ëŒ€ë¶€ë¶„ì˜ ê²Œìž„ì€ ê¸°ë³¸ 옵션으로 잘 ìž‘ë™í•©ë‹ˆë‹¤." @@ -433,7 +474,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "게임 ìˆ˜ì •ì€ ì¼ë¶€ 타ì´í‹€ì—ì„œ ìž˜ëª»ëœ ì—뮬레ì´ì…˜ì„ í•´ê²°í•  수 있습니다.\n" "ë˜í•œ 호환성ì´ë‚˜ 성능 문제가 ë°œìƒí•  수 있습니다.\n" @@ -459,7 +501,7 @@ "('ìžë™'ì˜ ì˜ë¯¸: 특정한 ê²Œìž„ì„ ìœ„í•´ 확실히 ê²€ì¦ëœ ìˆ˜ì •ì„ ì„ íƒì ìœ¼ë¡œ 사용합니" "다)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -468,12 +510,12 @@ "ë‹¹ì‹ ì€ í¬ë§·ëœ '%s' 메모리 카드를 삭제하려고 합니다. ì´ ì¹´ë“œì˜ ëª¨ë“  ë°ì´í„°ë¥¼ " "잃게 ë©ë‹ˆë‹¤! ì •ë§ë¡œ 분명히 확실한가요?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "실패: 복사는 ì˜¤ì§ ë¹„ì–´ìžˆëŠ” PS2-í¬íŠ¸ ë˜ëŠ” íŒŒì¼ ì‹œìŠ¤í…œì— í—ˆìš©ë©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "실패: ëŒ€ìƒ '%s' 메모리 카드가 사용 중입니다." @@ -552,36 +594,52 @@ "누ë½ìœ¼ë¡œ ì¸í•´ %s 설치가 불완전해서 ì ì ˆí•œ ì„ íƒì„ í•  수 없다면, ë‹¤ìŒ ì·¨ì†Œë¥¼ 눌" "러서 구성 패ë„ì„ ë‹«ìœ¼ì‹­ì‹œì˜¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - ì´ëª¨ì…˜ì—”ì§„ì˜ ì‚¬ì´í´ ë¹„ìœ¨ì„ ì•½ 50% 줄입니다. ì ë‹¹í•œ ì†ë„ ìƒìŠ¹ì„ 주지만, 많" +"ì€ FMVì—ì„œ ì˜¤ë””ì˜¤ì˜ ë§ë”듬 *ì›ì¸*ì´ ë©ë‹ˆë‹¤." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - ì´ëª¨ì…˜ì—”ì§„ì˜ ì‚¬ì´í´ ë¹„ìœ¨ì„ ì•½ 33% 줄입니다. ë†’ì€ í˜¸í™˜ì„±ê³¼ 함께 ëŒ€ë¶€ë¶„ì˜ " +"ê²Œìž„ì— ê°€ë²¼ìš´ ì†ë„ ìƒìŠ¹ì„ ì¤ë‹ˆë‹¤." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - 기본 사ì´í´ 비율. ì´ê²ƒì€ 실제 PS2ì˜ ì´ëª¨ì…˜ì—”ì§„ì— ì‹¤ì œ ì†ë„와 가장 ê°€ê¹ìŠµ" "니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - ì´ëª¨ì…˜ì—”ì§„ì˜ ì‚¬ì´í´ ë¹„ìœ¨ì„ ì•½ 33% 줄입니다. ë†’ì€ í˜¸í™˜ì„±ê³¼ 함께 ëŒ€ë¶€ë¶„ì˜ " -"ê²Œìž„ì— ê°€ë²¼ìš´ ì†ë„ ìƒìŠ¹ì„ ì¤ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - ì´ëª¨ì…˜ì—”ì§„ì˜ ì‚¬ì´í´ ë¹„ìœ¨ì„ ì•½ 50% 줄입니다. ì ë‹¹í•œ ì†ë„ ìƒìŠ¹ì„ 주지만, 많" -"ì€ FMVì—ì„œ ì˜¤ë””ì˜¤ì˜ ë§ë”듬 *ì›ì¸*ì´ ë©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - 벡터 유닛 사ì´í´ 훔치기를 비활성화합니다. 가장 í˜¸í™˜ì„±ì´ ì¢‹ì€ ì„¤ì •ìž…ë‹ˆë‹¤!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -589,7 +647,7 @@ "1 - 가벼운 벡터 유닛 사ì´í´ 훔치기. ë” ë‚®ì€ í˜¸í™˜ì„±ì´ì§€ë§Œ, ëŒ€ë¶€ë¶„ì˜ ê²Œìž„ì— ì•½" "ê°„ì˜ ì†ë„ ìƒìŠ¹ì„ ì¤ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -597,7 +655,7 @@ "2 - ì ë‹¹í•œ 벡터 유닛 사ì´í´ 훔치기. 보다 ë” ë‚®ì€ í˜¸í™˜ì„±ì´ì§€ë§Œ, ì¼ë¶€ 게임ì—ì„œ " "ìƒë‹¹í•œ ì†ë„ ìƒìŠ¹ì„ ì¤ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -605,7 +663,7 @@ "3 - 최대 벡터 유닛 사ì´í´ 훔치기. ìœ ìš©ì„±ì´ ì œí•œë˜ëŠ” ë™ì•ˆ, ì´ê²ƒì€ ëŒ€ë¶€ë¶„ì˜ ê²Œ" "ìž„ì—ì„œ 깜빡ì´ëŠ” 비주얼 ë˜ëŠ” ë‘”í™”ì˜ ì›ì¸ì´ ë©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -615,17 +673,21 @@ "FPS ê²€ì¶œì˜ ì›ì¸ì´ ë  ìˆ˜ 있습니다. ì—뮬레ì´ì…˜ 문제가 ë°œìƒí•  ë•Œ, 먼저 ì´ íŒ¨ë„" "ì„ ë¹„í™œì„±í™”í•˜ì‹­ì‹œì˜¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "ì´ ìŠ¬ë¼ì´ë”ì—ì„œ ë†’ì€ ê°’ì„ ì„¤ì •í•˜ë©´ 효과ì ìœ¼ë¡œ ì´ëª¨ì…˜ì—”ì§„ì˜ R5900 코어 cpu í´" "럭 ì†ë„를 ê°ì†Œì‹œí‚¤ê³  ì¼ë°˜ì ìœ¼ë¡œ 실제 PS2ì˜ í•˜ë“œì›¨ì–´ 잠재력 í™œìš©ì— ì‹¤íŒ¨í•˜ì§€ë§Œ " "ê²Œìž„ì— í° ì†ë„ ìƒìŠ¹ì„ 제공합니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -635,7 +697,7 @@ "ì€ ê°’ì€ ê°ê°ì˜ 벡터 유닛 마ì´í¬ë¡œ í”„ë¡œê·¸ëž¨ì´ ê²Œìž„ ì‹¤í–‰ì„ ìœ„í•´ ì´ëª¨ì…˜ì—”진ì—ì„œ " "훔친 사ì´í´ 수를 ì¦ê°€ 시킵니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -644,7 +706,7 @@ "í•­ìƒ ì—…ë°ì´íŠ¸í•˜ì§€ ì•Šê³  ì½ì–´ì§€ëŠ” 블ë¡ì—만 ìƒíƒœ 플래그를 ì—…ë°ì´íŠ¸ 합니다. ì´ê²ƒ" "ì€ ëŒ€ë¶€ë¶„ì˜ ê²½ìš° 안전하며, ìŠˆí¼ ë²¡í„° ìœ ë‹›ì€ ê¸°ë³¸ì ìœ¼ë¡œ 비슷한 ë™ìž‘ì„ í•©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -656,7 +718,7 @@ "ê°„ì˜ ê²Œìž„ì´ í˜¸í™˜ë˜ì§€ 않으며 걸릴지 모릅니다. GSê°€ ì œí•œëœ ê²Œìž„ì˜ ê²½ìš°ëŠ”, 둔화" "ë ì§€ë„ 모릅니다 (특히 듀얼코어 CPUì—...)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -666,7 +728,7 @@ "레지스터를 사용하는 ê²Œìž„ì— ê°€ìž¥ ì í•©í•©ë‹ˆë‹¤. ì´ëŸ° 수ì§ë™ê¸° ë°©ë²•ì„ ì‚¬ìš©í•˜ì§€ ì•Š" "는 ê²Œìž„ì€ ì´ í•µìœ¼ë¡œ ì†ë„ ìƒìŠ¹ì„ ê±°ì˜ ë³¼ 수 없습니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -681,7 +743,7 @@ "다. ì´ëŸ¬í•œ ë£¨í”„ì˜ ë‹¨ì¼ ë°˜ë³µ ë’¤ì—, ë‹¤ìŒ ì´ë²¤íŠ¸ 시간까지 먼저 ë„착하는 프로세서" "ì˜ íƒ€ìž„ 슬ë¼ì´ìŠ¤ì˜ ë으로 ì´ë™í•©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -689,7 +751,7 @@ "ì´ ë¬¸ì œê°€ 알려진 ê²Œìž„ì— ëŒ€í•´ í•˜ë“œë¡œë” í˜¸í™˜ 목ë¡ì„ 확ì¸í•˜ì‹­ì‹œì˜¤ (종종 í•„ìš”ì— " "ë”°ë¼ 'ë°©ì‹ 1' ë˜ëŠ” 'ëŠë¦° DVD'ë¡œ 표시ë©ë‹ˆë‹¤)" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -697,7 +759,7 @@ "ì œí•œëœ í”„ë ˆìž„ì´ ë¹„í™œì„±í™”ë  ë•Œ, 터보와 ëŠë¦° ë™ìž‘ ë°©ì‹ ì¤‘ 하나를 사용할 수 없으" "니 주ì˜í•˜ì‹­ì‹œì˜¤." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -705,7 +767,7 @@ "주ì˜: PS2ì˜ í•˜ë“œì›¨ì–´ 설계로 ì¸í•œ, 정확한 프레임 ìƒëžµì´ 불가능합니다. ì´ê²ƒì„ " "활성화하면 ì¼ë¶€ 게임ì—ì„œ 심ê°í•œ 그래픽 오류가 ë°œìƒí•©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -713,7 +775,7 @@ "ì¶©ëŒ ë˜ëŠ” 그래픽 오류 ë°œìƒì´ MTGS 스레드 ë™ê¸°í™”ë¼ê³  ìƒê°ë˜ë©´ ì´ê²ƒì„ 활성화합" "니다." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -730,7 +792,7 @@ "경고: ì´ ì˜µì…˜ì€ ê·¸ë•Œ 그때 활성화할 수 있지만 ì¼ë°˜ì ìœ¼ë¡œ 그때 그때 비활성화를 " "í•  수 없습니다 (비디오는 ì¼ë°˜ì ìœ¼ë¡œ 쓰레기가 ë  ê²ë‹ˆë‹¤)" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ko_KR/pcsx2_Main.po pcsx2-1.4.0/locales/ko_KR/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ko_KR/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ko_KR/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-01-14 19:47+0900\n" "Last-Translator: 99skull <99skull@gmail.com>\n" "Language-Team: 99skull,p695091 <99skull@gmail.com>\n" @@ -22,15 +22,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "특정한 ì´ìœ ê°€ 없습니다." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "ë¶„ì„ ì˜¤ë¥˜" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "ë‹¹ì‹ ì˜ ì»´í“¨í„° 하드웨어는 Pcsx2를 실행할 수 없습니다. 미안하내 친구." @@ -96,7 +96,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "ì•„ì´ë“¤ ì´ë²¤íŠ¸ 처리 ë° ì¼ë¶€ 다른 예외 ì´ë²¤íŠ¸ ìš©ë„를 í¬í•¨í•©ë‹ˆë‹¤." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "ì¸ì‹ë˜ì§€ 않는 ISO ì´ë¯¸ì§€ íŒŒì¼ í˜•ì‹ìž…니다" @@ -114,20 +114,20 @@ "ISO ì´ë¯¸ì§€ì—ì„œ 불러올 경우, ì´ ì˜¤ë¥˜ëŠ” 아마 PCSX2 ISO ì´ë¯¸ì§€ 지ì›ì— 지ì›ë˜ì§€ " "않는 ISO ì´ë¯¸ì§€ 종류 ë˜ëŠ” 버그로 ì¸í•´ ë°œìƒí•©ë‹ˆë‹¤." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "GS í”ŒëŸ¬ê·¸ì¸ ì—´ê¸°ë¥¼ 기다리는 ë™ì•ˆ MTGS 스레드가 ì‘답하지 ì•Šì„ ìˆ˜ 있습니다." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "ìƒíƒœ ì €ìž¥ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다, ì†ìƒë˜ì—ˆê±°ë‚˜ 불완전한 것으로 나타납니다." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -136,7 +136,7 @@ "%s í”ŒëŸ¬ê·¸ì¸ ì—´ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 컴퓨터 ìžì›ì´ 불충분하거나, 하드웨어/ë“œë¼ì´" "버가 호환ë˜ì§€ 않습니다." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -145,17 +145,17 @@ "%s í”ŒëŸ¬ê·¸ì¸ ì´ˆê¸°í™”ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. 시스템 메모리가 불충분하거나 ìžì›ì´ 필요할" "ì§€ë„ ëª¨ë¦…ë‹ˆë‹¤." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "êµ¬ì„±ëœ %s í”ŒëŸ¬ê·¸ì¸ íŒŒì¼ì´ 발견ë˜ì§€ 않았습니다" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "êµ¬ì„±ëœ %s 플러그ì¸ì´ 유효한 ë™ì  ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 아닙니다" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -164,13 +164,13 @@ "êµ¬ì„±ëœ %s 플러그ì¸ì€ PCSX2 플러그ì¸ì´ 아니거나, PCSXì˜ ì´ì „ 지ì›ë˜ì§€ 않는 버" "ì „ì˜ ê²ƒìž…ë‹ˆë‹¤." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "ì´ í”ŒëŸ¬ê·¸ì¸ì€ 하드웨어 ë˜ëŠ” 소프트웨어/ë“œë¼ì´ë²„ê°€ 지ì›ë˜ì§€ ì•ŠìŒì„ 보고합니다." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -178,7 +178,7 @@ "êµ¬ì„±ëœ í”ŒëŸ¬ê·¸ì¸ì€ PCSX2 플러그ì¸ì´ 아니거나, PCSX2ì˜ ì´ì „ 지ì›ë˜ì§€ 않는 버전" "ì˜ ê²ƒìž…ë‹ˆë‹¤." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -187,11 +187,11 @@ "êµ¬ì„±ëœ %s 플러그ì¸ì€ 유효한 PCSX2 플러그ì¸ì´ 아니거나, PCSX2ì˜ ì´ì „ 지ì›ë˜ì§€ " "않는 ë²„ì „ì˜ ê²ƒìž…ë‹ˆë‹¤." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "내부 메모리 ì¹´ë“œ í”ŒëŸ¬ê·¸ì¸ ì´ˆê¸°í™”ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "불러오기 í•´ì œëœ í”ŒëŸ¬ê·¸ì¸" @@ -343,11 +343,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "CDVD í•˜ë“œì›¨ì–´ì˜ ìƒì„¸í•œ 로깅." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 메시지" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -355,31 +355,31 @@ "ìƒíƒœ ì €ìž¥ì´ ì œëŒ€ë¡œ 저장ë˜ì§€ 않았습니다. ìž„ì‹œ 파ì¼ì´ 성공ì ìœ¼ë¡œ 만들어졌지만 " "최종 저장소로 옮길 수 없었습니다." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "가장 안전한" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "안전한 (ë” ë¹ ë¦„)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "균형 잡힌" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "공격ì ì¸" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "ë” ê³µê²©ì ì¸" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "대부분 유해한" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "ê¸°ì¡´ì˜ ì„¤ì • íŒŒì¼ ë®ì–´ ì“°ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤; 승ì¸ì´ 거부ë˜ì—ˆìŠµë‹ˆë‹¤." @@ -387,7 +387,7 @@ msgid "Loading PS2 system plugins..." msgstr "PS2 시스템 í”ŒëŸ¬ê·¸ì¸ ë¶ˆëŸ¬ì˜¤ëŠ” 중입니다..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -396,90 +396,95 @@ "유효한 SSE í™•ìž¥ì´ ì—†ìŠµë‹ˆë‹¤. PCSX2는 SSE 명령어 ì§‘í•©ì„ ì§€ì›í•˜ëŠ” cpuê°€ 필요합니" "다." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 리컴파ì¼ëŸ¬ 오류" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "모든 ì˜µì…˜ì€ í˜„ì œ ì„¸ì…˜ë§Œì„ ìœ„í•œ 것으로 저장ë˜ì§€ 않습니다.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Iso파ì¼" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "명령 줄 ì˜µì…˜ì˜ ëª©ë¡ì„ 표시합니다" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "강제로 프로그램 로그/ì½˜ì†”ì´ ë³´ì´ë„ë¡ í•©ë‹ˆë‹¤." -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "전체화면 GS ë°©ì‹ ì‚¬ìš©" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "ì°½ GS ë°©ì‹ ì‚¬ìš©" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ GUIì˜ í‘œì‹œë¥¼ 비활성화" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "ELF ì´ë¯¸ì§€ë¥¼ 실행" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "빈 dvd 트레ì´ë¥¼ 부트; PS2 시스템 메뉴 ìž…ë ¥ì— ì‚¬ìš©í•©ë‹ˆë‹¤" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "CDVD 플러그ì¸ì—ì„œ 부트 (Iso íŒŒì¼ ë§¤ê°œ 변수 무시)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "모든 스피드 핵 비활성화" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "ì§€ì •ëœ ì‰¼í‘œ ë˜ëŠ” 게임 ìˆ˜ì •ì˜ íŒŒì´í”„ë¡œ êµ¬ë¶„ëœ ëª©ë¡ì„ 사용합니다." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "빠른 부팅 비활성화" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "구성 íŒŒì¼ ê²½ë¡œë¥¼ 변경합니다" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "PCSX2ì˜ êµ¬ì„± 파ì¼ì„ 사용하ë„ë¡ ì§€ì •í•©ë‹ˆë‹¤" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "강제로 %s ì²˜ìŒ ë§ˆë²•ì‚¬ë¥¼ 시작합니다" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "무설치 ë°©ì‹ ìž‘ì—…ì„ í™œì„±í™” (관리ìž/루트 ì ‘ê·¼ì´ í•„ìš”í•©ë‹ˆë‹¤)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "%s 플러그ì¸ìœ¼ë¡œ 사용할 파ì¼ì„ 지정하십시오" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "í”ŒëŸ¬ê·¸ì¸ ë¬´ì‹œ 오류 - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -490,94 +495,94 @@ "니다:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "기본 êµ¬ì„±ëœ í”ŒëŸ¬ê·¸ì¸ ì‚¬ìš©ì€ í™•ì¸, ë˜ëŠ” %s 닫기는 취소를 누르십시오." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 오류: 하드웨어 결함" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "%s 닫기는 확ì¸ë¥¼ 누르십시오." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s ì¹˜ëª…ì  ì˜¤ë¥˜" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "확ì¸" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "확ì¸" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "취소" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "취소" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "ì ìš©" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "ë‹¤ìŒ >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< 뒤로" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "뒤로" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "완료" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "예" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "아니오" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "찾아보기" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "저장하기" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "다른 ì´ë¦„으로 저장..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "ë„움ë§" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "홈" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "다ì´ì–¼ë¡œê·¸ ì •ë³´ 표시" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -587,42 +592,48 @@ "\n" "í”ŒëŸ¬ê·¸ì¸ êµ¬ì„± 패ë„ë¡œ ì´ë™í•˜ë ¤ë©´ 확ì¸ì„ 누르십시오." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "경고! 시스템 플러그ì¸ì„ 불러오지 못했습니다. PCSX2ê°€ ìž‘ë™ ëª»í• ì§€ë„ ëª¨ë¦…ë‹ˆë‹¤." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s 명령 줄 옵션" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 ë°”ì´ì˜¤ìŠ¤ 오류" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "ë°”ì´ì˜¤ìŠ¤ 구성 패ë„ë¡œ ì´ë™í•˜ë ¤ë©´ 확ì¸ì„ 누르십시오." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"경고! 시스템 플러그ì¸ì„ 불러오지 못했습니다. PCSX2ê°€ ìž‘ë™ ëª»í• ì§€ë„ ëª¨ë¦…ë‹ˆë‹¤." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s 명령 줄 옵션" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2ì˜ ì‘답하지 않는 스레드" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "ë내기" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "PS2 ê°€ìƒ ë¨¸ì‹  실행 중..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "최근 ë‚´ì—­ì— ì—†ëŠ” Iso를 찾아보기." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "찾아보기..." @@ -667,135 +678,146 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "새로운 ì„¤ì •ì„ ì ìš©í•  수 없습니다, 설정 중 하나가 무효합니다." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "로그 문제 저장" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "축소하여 ìž‘ì€ ì˜ì—­ì— 로그를 많ì´í•˜ëŠ”ë° ì í•©í•©ë‹ˆë‹¤." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "작게" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "제가 사용하고 있습니다 (프로그래머)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "보통" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "보기 좋고 ì½ê¸° 쉽게." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "í¬ê²Œ" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "거대하게" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "실제로 ê³ -í•´ìƒë„ì˜ í™”ë©´ 표시기를 가지고 있는 경우." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "부드러운 색조 êµ¬ì„±ì˜ ê¸°ë³¸ 테마." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "ë°ì€ 테마" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "" "문ìžê°€ 시신경ì—ì„œ 무ê°ê°í•˜ê²Œ ëŠë¼ê³  ì¦ê¸¸ ì‚¬ëžŒë“¤ì„ ìœ„í•œ ê³ ì „ì ì¸ ê²€ì€ ìƒ‰ 테마." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "ì–´ë‘ìš´ 테마" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "í•­ìƒ ë§¨ 위ì—" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "ì´ ì˜µì…˜ì„ ì„ íƒí•˜ë©´ 로그 ì°½ì´ ë‹¤ë¥¸ ì „ê²½ ì°½ì„ í†µí•´ ë³¼ 수 있습니다." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "저장하기 ..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "파ì¼ì— 로그 ë‚´ìš©ì„ ì €ìž¥í•©ë‹ˆë‹¤" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "지우기" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "로그 ì°½ ë‚´ìš©ì„ ì§€ì›ë‹ˆë‹¤" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "외관" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "닫기" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "ì´ ë¡œê·¸ ì°½ì„ ë‹«ìŠµë‹ˆë‹¤; ë‚´ìš©ì€ ë³´ì¡´ë©ë‹ˆë‹¤" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "PCSX2ì˜ ê°œë°œìž ë¡œê·¸ë¥¼ 표시합니다" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD ì½ê¸°" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "ë””ìŠ¤í¬ ì½ê¸° 활ë™ì„ 표시합니다" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "ëª¨ë‘ í™œì„±í™”" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "모든 로그 소스 필터를 활성화합니다." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "ëª¨ë‘ ë¹„í™œì„±í™”" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "모든 로그 소스 필터를 비활성화합니다." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "기본 ë³µì›" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "모든 로그 소스 필터를 활성화합니다." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "로그(&L)" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "소스(&S)" @@ -808,48 +830,45 @@ msgid "About %s" msgstr "%s ì •ë³´" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "베타 검사" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "ì´ì „ 버전" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "웹 마스터" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "í”ŒëŸ¬ê·¸ì¸ íŠ¹í™”" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "특히 ê°ì‚¬í•  분들" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "개발ìž" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "ë„ì›€ì„ ì£¼ì‹  분" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "플레ì´ìŠ¤í…Œì´ì…˜ 2 ì—뮬레ì´í„°" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2ì˜ ê³µì‹ ì›¹ì‚¬ì´íŠ¸ ë° í¬ëŸ¼" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "êµ¬ê¸€ì½”ë“œì— PCSX2ì˜ ê³µì‹ Svn 보관소" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "충분히 봤어요" @@ -857,23 +876,19 @@ msgid "Assertion Failure - " msgstr "표명 실패 - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "ì´ ì„¤ì • 패ë„ì˜ ìŠ¤ëƒ…ìƒ·ì„ PNG 파ì¼ë¡œ 저장합니다." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "다ì´ì–¼ë¡œê·¸ ìŠ¤ëƒ…ìƒ·ì„ ì €ìž¥í•©ë‹ˆë‹¤..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "ë°”ì´ì˜¤ìŠ¤ ì„ íƒê¸°" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "ì´ ë‹¤ì´ì–¼ë¡œê·¸ë¥¼ 다시 표시하지 마십시오." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -881,7 +896,7 @@ "지금부터 여기ì—ì„œ ì„ íƒí•œ ê²ƒì€ ìžë™ìœ¼ë¡œ 사용ë˜ë©° ì´ íŒì—… ë° ì–´ë– í•œ ì‘ë‹µë„ ë¹„í™œ" "성화합니다." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -889,16 +904,89 @@ "íŒì—…ì€ ë‹¤ì‹œ 표시ë˜ì§€ ì•Šì„ ê²ƒìž…ë‹ˆë‹¤. ì´ ì„¤ì •ì€ ì„¤ì • 패ë„ì—ì„œ 취소할 수 있습니" "다." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "무시" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "리셋" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "í´ë”" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "오류 (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "메모리 ì¹´ë“œ 만들기" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "새로운 메모리 ì¹´ë“œ 만들기" @@ -920,30 +1008,30 @@ msgid "Select file name: " msgstr "íŒŒì¼ ì´ë¦„ ì„ íƒ:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "오류 (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "메모리 ì¹´ë“œ 만들기" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "오류: 메모리 카드를 만들 수 없었습니다." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "오류: 메모리 카드를 만들 수 없었습니다." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "ì´ ì¹´ë“œë¥¼ 만들 ë•Œ NTFS ì••ì¶•ì„ ì‚¬ìš©í•©ë‹ˆë‹¤." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [가장 호환성 좋ìŒ]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -951,39 +1039,39 @@ "ì´ê²ƒì€ 소니ì—ì„œ ì œê³µëœ í‘œì¤€ í¬ê¸°ì´ë©°, 모든 게임 ë° ë°”ì´ì˜¤ìŠ¤ 버전ì—ì„œ 지ì›ë©ë‹ˆ" "다." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "" "가장 안전하고 확실한 메모리 ì¹´ë“œì˜ ë™ìž‘ì„ ì›í•˜ë©´ í•­ìƒ ì´ ì˜µì…˜ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "ëŒ€ë¶€ë¶„ì˜ ê²Œìž„ê³¼ 함께 ìž‘ë™í•˜ë©° 3rd-party 메모리 카드를 위한 전형ì ì¸ í¬ê¸°ìž…니" "다." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 ë° 32 MB 카드는 대략 비슷한 호환 요소를 가지고 있습니다." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -991,7 +1079,7 @@ "경고 ë‚®ì€ í˜¸í™˜ì„±: 확실히 매우 í¬ì§€ë§Œ, ë§Žì€ ê²Œìž„ê³¼ 함께 ìž‘ë™í•˜ì§€ ì•Šì„ ìˆ˜ 있습" "니다." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -999,6 +1087,22 @@ "ìœ„í—˜ì„ ê°ìˆ˜í•˜ê³  사용하십시오. 불규칙한 메모리 ì¹´ë“œì˜ í–‰ë™ì´ ìžˆì„ ìˆ˜ 있습니다 " "(ì˜ˆìƒ ë°–ì´ì§€ë§Œ)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1009,6 +1113,7 @@ msgstr "설정" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "언어 ì„ íƒ" @@ -1062,17 +1167,21 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "ìƒíƒœ ì €ìž¥ì„ ë¶ˆëŸ¬ë“¤ì¼ ë•Œ 메모리 ì¹´ë“œ ìžë™-배출" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "메모리 ì¹´ë“œ 관리ìž" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "" "메모리 카드를 ëŒì–´ì„œ 빈 í¬íŠ¸ 쪽으로 ë˜ëŠ” PS2-í¬íŠ¸ì—ì„œ 빈 í¬íŠ¸ë¡œ ëŒì–´ 넣으면 " "ë©ë‹ˆë‹¤" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1136,24 +1245,24 @@ msgid "Game Fixes" msgstr "게임 수정" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "구성 요소 ì„ íƒê¸° - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "플러그ì¸" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "ë°”ì´ì˜¤ìŠ¤" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "í´ë”" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "외관/테마 - %s" @@ -1175,47 +1284,51 @@ msgid "Terminate App" msgstr "App ë내기" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS ì¶œë ¥ì„ ë¹„í™œì„±í™”!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "ìƒíƒœ 저장하기" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "현재 ìŠ¬ë¡¯ì— ê°€ìƒ ë¨¸ì‹  ìƒíƒœë¥¼ 저장합니다." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "ìƒíƒœ 불러오기" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "현재 슬롯ì—ì„œ ê°€ìƒ ë¨¸ì‹  ìƒíƒœë¥¼ 불러옵니다." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "백업 ìƒíƒœ 불러오기" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "현재 슬롯으로 부터 ê°€ìƒ ë¨¸ì‹  백업 ìƒíƒœë¥¼ 불러옵니다." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "ë‹¤ìŒ ìŠ¬ë¡¯ìœ¼ë¡œ 순환" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "+1 ë°©ì‹ìœ¼ë¡œ 현재 저장 ìŠ¬ë¡¯ì„ ìˆœí™˜!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "ì´ì „ 슬롯으로 순환" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "-1 ë°©ì‹ìœ¼ë¡œ 현재 저장 ìŠ¬ë¡¯ì„ ìˆœí™˜!" @@ -1232,7 +1345,7 @@ "%s ì°½ì— ì—¬ëŸ¬ ê°œì˜ íŒŒì¼ì„ 놓으면 오류가 ë°œìƒí•©ë‹ˆë‹¤. í•œë²ˆì— í•˜ë‚˜ì”© 부íƒí•©ë‹ˆë‹¤, " "ê°ì‚¬í•©ë‹ˆë‹¤." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "PS2 리셋 확ì¸" @@ -1250,369 +1363,369 @@ msgid "You have dropped the following ISO image into %s:" msgstr "ë‹¹ì‹ ì€ %sì— ë‹¤ìŒ ISO ì´ë¯¸ì§€ë¥¼ 탈ë½ì‹œì¼°ìŠµë‹ˆë‹¤:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "슬롯 %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "백업" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "콘솔 표시" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "표준 ìž…ì¶œë ¥ì— ì½˜ì†”" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "시스템(&S)" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CDVD(&V)" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "구성(&C)" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "기타(&M)" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "디버그(&D)" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "초기화 중입니다..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "ELF 실행..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "ì§ì ‘ ì›ë³¸ PS2 ë°”ì´ë„ˆë¦¬ë¥¼ 실행하기 위해 ..." -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "백업하기 ì „ì— ì €ìž¥" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "ìžë™ 게임 수정" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "알려진 ë¬¸ì œì˜ ê²Œìž„ì— í•„ìš”í•œ 게임 ìˆ˜ì •ì„ ìžë™ ì ìš©í•©ë‹ˆë‹¤" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "치트 활성화" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "와ì´ë“œ 스í¬ë¦° 패치 활성화" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "호스트 íŒŒì¼ ì‹œìŠ¤í…œ 활성화" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "중단" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "모든 내부 ê°€ìƒ ë¨¸ì‹ ì˜ ìƒíƒœë¥¼ 지우고 플러그ì¸ì„ 중단합니다." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "종료" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%s를 닫는 ê²ƒì€ ë‹¹ì‹ ì˜ ê±´ê°•ì— í•´ë¡­ìŠµë‹ˆë‹¤ :)" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Iso ì„ íƒ" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "í”ŒëŸ¬ê·¸ì¸ ë©”ë‰´" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "ì§€ì •ëœ ISO ì´ë¯¸ì§€ì˜ CDVD 소스를 만듭니다." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "플러그ì¸" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "CDVD 소스로 외부 플러그ì¸ì„ 사용합니다." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "ë””ìŠ¤í¬ ì—†ìŒ" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "ê°€ìƒ PS2ì˜ ë°”ì´ì˜¤ìŠ¤ 구성으로 ë¶€íŠ¸í•˜ëŠ”ë° ì´ê²ƒì„ 사용합니다." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "ì—뮬레ì´ì…˜ 설정" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "메모리 ì¹´ë“œ" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "플러그ì¸/ë°”ì´ì˜¤ìŠ¤ ì„ íƒ" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "게임 ë°ì´í„°ë² ì´ìŠ¤ 편집" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "비디오 (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "오디오 (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "컨트롤러 (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "파ì´ì–´ì™€ì´ì–´" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "멀티탭 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "멀티탭 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "모든 설정 지우기..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "모든 %s ì„¤ì •ì„ ì§€ìš°ê³  시작할 ë•Œ 마법사를 다시-실행합니다." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "ì •ë³´..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "로깅..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "중지" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "PS2 ìƒíƒœë¥¼ 유지하고 안전하게 ì—뮬레ì´ì…˜ì„ 중지합니다." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "재개" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "ì¤‘ì§€ëœ ì—뮬레ì´ì…˜ ìƒíƒœë¥¼ 재개합니다." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "중지/재개" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "활ë™ì ì¸ ì—뮬레ì´ì…˜ ìƒíƒœê°€ 아닙니다; 중지하거나 재개할 수 없습니다." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "재시작" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "PS2 ê°€ìƒ ë¨¸ì‹ ì˜ ì‹œë®¬ë ˆì´ì…˜ 하드웨어를 리셋합니다." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "활ë™ì ì¸ ì—뮬레ì´ì…˜ ìƒíƒœê°€ 아닙니다; 무언가를 ì²˜ìŒ ë¶€íŠ¸í•˜ì‹­ì‹œì˜¤." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "CDVD 재부트 (ì „ì²´)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "활ë™ì ì¸ ê°€ìƒ ë¨¸ì‹ ì˜ í•˜ë“œë¥¼ 리셋합니다." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "CDVD 부트 (ì „ì²´)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "í˜„ìž¬ì˜ DVD ë˜ëŠ” Iso 소스 미디어를 사용하여 ê°€ìƒ ë¨¸ì‹ ì„ ë¶€íŠ¸í•©ë‹ˆë‹¤" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "CDVD 재부트 (빠른)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "빠른 부트를 사용하여 재부트합니다 (스플래시 화면 ìƒëžµ)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "CDVD 부트 (빠른)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "PS2를 시작할 ë•Œ ë° ìŠ¤í”Œëž˜ì‹œ 화면 ìƒëžµì— 빠른 부트를 사용합니다" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "불러올 플러그ì¸ì´ 없습니다" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "GS 핵심 설정..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "" "PCSX2 핵심 ê°€ìƒ ë¨¸ì‹ ì— ì˜í•´ ê·œì œëœ í•˜ë“œì›¨ì–´ ì—뮬레ì´ì…˜ ì„¤ì •ì„ ë³€ê²½í•©ë‹ˆë‹¤." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "ì°½ 설정..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "화면 ë¹„ìœ¨ì„ í¬í•¨í•˜ì—¬ ì°½ ë° ì™¸ê´€ ì˜µì…˜ì„ ë³€ê²½í•©ë‹ˆë‹¤." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "í”ŒëŸ¬ê·¸ì¸ ì„¤ì •..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "%s 플러그ì¸ì˜ 고급 설정 다ì´ì–¼ë¡œê·¸ë¥¼ 엽니다." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "모든 ì„¤ì •ì„ ë¦¬ì…‹í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "ISO ì´ë¯¸ì§€ 변경 확ì¸" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "디스í¬ë¥¼ êµì²´í•˜ê±°ë‚˜ 새로운 ì´ë¯¸ì§€ë¥¼ 부트하시겠습니까 (시스템 ë¦¬ì…‹ì„ í†µí•˜ì—¬)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "ë””ìŠ¤í¬ êµì²´" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "CDVD 소스 변경 확ì¸" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "ë‹¹ì‹ ì€ %s ì—ì„œ %s ë¡œ CDVD 소스 ì „í™˜ì„ ì„ íƒí–ˆìŠµë‹ˆë‹¤." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "디스í¬ë¥¼ êµì²´í•˜ê±°ë‚˜ 새로운 ì´ë¯¸ì§€ë¥¼ 부트하시겠습니까 (시스템 리셋)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "지ì›ë˜ëŠ” 모든 (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "ë””ìŠ¤í¬ ì´ë¯¸ì§€ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "ë¸”ë¡ ë¤í”„ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "ë¸”ë¡ ë¤í”„ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "모든 íŒŒì¼ (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "CDVD 소스 iso를 ì„ íƒí•˜ì‹­ì‹œì˜¤..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "ELF íŒŒì¼ ì„ íƒ..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO 파ì¼ì´ 발견ë˜ì§€ 않습니다!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "íŒŒì¼ ì—´ê¸°ë¥¼ ì‹œë„하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1620,7 +1733,7 @@ "오류: êµ¬ì„±ëœ ISO 파ì¼ì´ 존재하지 않습니다. CDVDì— ëŒ€í•œ 새로운 ISO 소스를 ì„ íƒ" "하려면 확ì¸ì„ 누르십시오." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1628,7 +1741,7 @@ "ë‹¹ì‹ ì€ PCSX2ì— ë‹¤ìŒ ISO ì´ë¯¸ì§€ë¥¼ ì„ íƒí–ˆìŠµë‹ˆë‹¤:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1641,7 +1754,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1654,19 +1767,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì—ˆê±°ë‚˜ 너무 짧습니다" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "디렉토리 외부 íŒŒì¼ ì´ë¦„ì´ í•„ìš”í•©ë‹ˆë‹¤" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "íŒŒì¼ ì´ë¦„ì´ ì´ë¯¸ 존재합니다" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "ìš´ì˜-체제가 íŒŒì¼ ë§Œë“¤ê¸°ë¥¼ 방해합니다" @@ -1674,15 +1787,15 @@ msgid "Cannot apply settings..." msgstr "ì„¤ì •ì„ ì ìš©í•  수 없습니다..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "ë°”ì´ì˜¤ìŠ¤ 경로 검색:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "PS2 ë°”ì´ì˜¤ìŠ¤ 롬과 함께 í´ë”를 ì„ íƒí•˜ì‹­ì‹œì˜¤" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1690,13 +1803,13 @@ "PCSX2는 PS2 ë°”ì´ì˜¤ìŠ¤ ë¡¬ì„ ê¸°ë‹¤ë¦½ë‹ˆë‹¤.\n" "다른 í´ë”를 ì„ íƒí•˜ë ¤ë©´ 찾아보기 ë²„íŠ¼ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "ëª©ë¡ ìƒˆë¡œê³ ì¹¨" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "ë°”ì´ì˜¤ìŠ¤ 롬 ì„ íƒ:" @@ -1728,42 +1841,46 @@ msgid "None" msgstr "ì—†ìŒ" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "보통" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "ì´ëª¨ì…˜ 엔진/ë¶€ë™ ì†Œìˆ˜ì  ìž¥ì¹˜ 고급 리컴파ì¼ëŸ¬ 옵션" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "추가 + ë³´ì¡´ 부호" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "ì „ì²´" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "벡터 유닛 0 / 벡터 유닛 1 고급 리컴파ì¼ëŸ¬ 옵션" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "추가" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "ì¸í„°í”„리터" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "" "소스 í”„ë¡œê·¸ëž¨ì„ í•œ 단계씩 기계어로 번역하여 실행하는 언어처리 프로그램으로 ì•„" "ë§ˆë„ ì„¸ìƒì—ì„œ 가장 ëŠë¦´ 것입니다." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "리컴파ì¼ëŸ¬" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1771,30 +1888,30 @@ "ì´ë¯¸ 컴파ì¼ëœ 파ì¼ì„ 다시 컴파ì¼í•˜ëŠ” 프로그램으로 x86ì— 64-비트 MIPS-IV 기계 " "ì½”ë“œì˜ ë°”ì´ë„ˆë¦¬ ë²ˆì—­ì„ ë•Œë§žì¶° 수행합니다. " -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "매우 ëŠë¦¼; ì˜¤ì§ ì§„ë‹¨ì„ ëª©ì ìœ¼ë¡œ ì œê³µëœ ê²ƒìž…ë‹ˆë‹¤." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "x86ì— 32-비트 MIPS-IV 기계 ì½”ë“œì˜ ë°”ì´ë„ˆë¦¬ ë²ˆì—­ì„ ë•Œë§žì¶° 수행합니다. " -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "ì´ëª¨ì…˜ì—”진 ìºì‹œ 활성화 (ëŠë ¤ì§)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "ì¸í„°í”„리터만; ì§„ë‹¨ì„ ëª©ì ìœ¼ë¡œ ì œê³µëœ ê²ƒìž…ë‹ˆë‹¤" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "기본 ë³µì›" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1802,20 +1919,20 @@ "벡터 유닛 ì¸í„°í”„리터. ëŠë¦¬ê³  매우 호환ë˜ì§€ 않습니다. ì˜¤ì§ ì§„ë‹¨ 목ì ìœ¼ë¡œ 사용" "하십시오." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "마ì´í¬ë¡œ 벡터 유닛 리컴파ì¼ëŸ¬" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "ë”ìš± í–¥ìƒëœ 호환성과 함께 새로운 벡터 유닛 리컴파ì¼ëŸ¬. 권장합니다." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "ìŠˆí¼ ë²¡í„° 유닛 리컴파ì¼ëŸ¬ [ë‚¡ì€ ê¸°ìˆ ]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1995,7 +2112,8 @@ msgstr "경로3 ì´ì†¡ì— 버스 ë°©í–¥ 무시 - í•« 휠 ê²Œìž„ì„ ìœ„í•´ 사용ë©ë‹ˆë‹¤" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "í’€ 모션 비디오(FMV)ë¡œ 재ìƒí•  ë•Œ GSdx 소프트웨어 ë Œë”ë§ìœ¼ë¡œ 전환합니다" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2026,87 +2144,92 @@ "경고: 로그 추ì ì„ 활성화하면 ì¼ë°˜ì ìœ¼ë¡œ 매우 ëŠë ¤ì§€ë©°, 'ë‚´ FPSì— ë¬´ìŠ¨ ì¼ì´?' " "ë¬¸ì œì˜ ì£¼ëœ ì›ì¸ìž…니다. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "PS2 메모리 카드와 함께 í´ë”를 ì„ íƒí•˜ì‹­ì‹œì˜¤" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "꺼내기" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "복사" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "ì´ë¦„ 바꾸기..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "만들기 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "삽입 ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "ì¹´ë“œ: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "새로운 메모리 카드를 만들 수 있습니다." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "ì´ ë©”ëª¨ë¦¬ ì¹´ë“œì˜ ì´ë¦„ì„ ë³€ê²½í•©ë‹ˆë‹¤ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "삽입 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "ì´ í¬íŠ¸ì—ì„œ 카드를 꺼냅니다" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "í¬íŠ¸ì— ì´ ì¹´ë“œë¥¼ 삽입합니다 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "ì´ ë©”ëª¨ë¦¬ ì¹´ë“œì˜ ì‚¬ë³¸ì„ ë§Œë“­ë‹ˆë‹¤ ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "ì‚­ì œ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "디스í¬ì—ì„œ ì´ ë©”ëª¨ë¦¬ 카드를 ì˜ì›ížˆ 삭제합니다 (모든 ë‚´ìš©ë¬¼ì´ ì—†ì–´ì§‘ë‹ˆë‹¤)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "새로운 메모리 카드를 만들고 ì´ í¬íŠ¸ì— 할당합니다." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "메모리 파ì¼ì„ 삭제하시겠습니까?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "메모리 ì¹´ë“œ 복사" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "실패: ê¸°ì¡´ì˜ ì¹´ë“œë§Œ 복사할 수 있습니다." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2114,25 +2237,25 @@ "ì‚¬ë³¸ì˜ ì´ë¦„ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤\n" "( '.ps2'ê°€ ìžë™ìœ¼ë¡œ ì¶”ê°€ë  ê²ƒìž…ë‹ˆë‹¤)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "실패: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "복사 실패!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr " '%s' 메모리 카드를 '%s'ë¡œ 복사." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "성공" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2141,119 +2264,124 @@ "'%s' 메모리 ì¹´ë“œì˜ ìƒˆë¡œìš´ ì´ë¦„ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤\n" "( '.ps2'ê°€ ìžë™ìœ¼ë¡œ ì¶”ê°€ë  ê²ƒìž…ë‹ˆë‹¤)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "메모리 ì¹´ë“œ ì´ë¦„ 변경" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "오류: ì´ë¦„ ë³€ê²½ì„ ì™„ë£Œí•  수 없었습니다.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "í¬íŠ¸-%u / 멀티탭-%u--í¬íŠ¸-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " 멀티탭-%u--í¬íŠ¸-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "빈공간" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "'%s'를 위한 ëŒ€ìƒ í¬íŠ¸ë¥¼ ì„ íƒí•˜ì‹­ì‹œì˜¤" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "ì¹´ë“œ 삽입" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "ì¹´ë“œ 꺼내기" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "ì¹´ë“œ 삽입 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "ì¹´ë“œ 복사 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "ì¹´ë“œ ì´ë¦„ 바꾸기 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "ì¹´ë“œ ì‚­ì œ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "ì¹´ë“œ 삽입" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "새로운 ì¹´ë“œ 만들기 ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "ëª©ë¡ ìƒˆë¡œê³ ì¹¨" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 í¬íŠ¸" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "ì¹´ë“œ (파ì¼) ì´ë¦„" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "ì¹´ë“œ í¬ê¸°" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "í¬ë§· 여부" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "종류" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "마지막 변경" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "만든 날짜" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "아니오" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "예" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- 미사용 ì¹´ë“œ --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- 미사용 ì¹´ë“œ ì—†ìŒ --]" @@ -2286,11 +2414,11 @@ msgid "Select a document root for %s" msgstr "%s 를 위한 문서 루트를 ì„ íƒí•˜ì‹­ì‹œì˜¤" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "ì ìš©" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "지금 바로 ì´ ì–¸ì–´ë¥¼ 기본으로 만듭니다!" @@ -2368,21 +2496,21 @@ "ì´ìœ : %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "ìž‘ì—… 완료 중입니다..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "스피드 핵 활성화" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "모든 스피드 í•µì´ ë¹„í™œì„±í™”ë˜ì–´ 있는지 확ì¸í•˜ëŠ”게 안전하고 쉬운 방법입니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2390,34 +2518,34 @@ "모든 스피드 핵 ì˜µì…˜ì„ ê¸°ë³¸ìœ¼ë¡œ 리셋합니다, ê²°ê³¼ì ìœ¼ë¡œ 모든 ê²ƒì„ ë„기로 변경하" "는 것입니다." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "ì´ëª¨ì…˜ì—”진 사ì´í´ 비율 [권장하지 않습니다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "벡터 유닛 사ì´í´ 훔치기 [권장하지 않습니다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "마ì´í¬ë¡œ 벡터 유닛 핵" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "마ì´í¬ë¡œ 벡터 유닛 플래그 핵" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "ì–´ëŠ ì •ë„ ì†ë„ ìƒìŠ¹ ë° ë†’ì€ í˜¸í™˜ì„±; ìž˜ëª»ëœ ê·¸ëž˜í”½ì˜ ì›ì¸ì¼ì§€ 모릅니다...[권장" "합니다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (멀티-스레디드 마ì´í¬ë¡œ 벡터 유닛 1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2425,15 +2553,15 @@ "ì–´ëŠ ì •ë„ ì†ë„ ìƒìŠ¹ ë° ë†’ì€ í˜¸í™˜ì„±; 걸리는 ì›ì¸ì¼ì§€ 모릅니다...[코어가 3ê°œì´" "ìƒì¸ 경우 권장합니다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "다른 핵" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "INTC 회전 검출 활성화" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2441,21 +2569,21 @@ "ì¼ë¶€ 게임ì—ì„œ ì—„ì²­ë‚œ ì†ë„ ìƒìŠ¹ê³¼ 함께, 호환 ë¶€ìž‘ìš©ì´ ê±°ì˜ ì—†ìŠµë‹ˆë‹¤. [권장합니" "다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "대기 루프 검출 활성화" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "ì¼ë¶€ 게임ì—ì„œ ì ë‹¹í•œ ì†ë„ ìƒìŠ¹ê³¼ 함께, 알려진 ë¶€ìž‘ìš©ì´ ì—†ìŠµë‹ˆë‹¤. [권장합니다]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "빠른 CDVD 활성화" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "빠른 ë””ìŠ¤í¬ ì ‘ê·¼, 불러오는 ì‹œê°„ì„ ì¤„ìž…ë‹ˆë‹¤. [권장하지 않습니다]" @@ -2479,41 +2607,41 @@ msgid "Select a visual theme:" msgstr "ì‹œê°ì  테마 ì„ íƒ:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "ì œí•œëœ í”„ë ˆìž„ 비활성화" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "벤치마í¬ë¥¼ ì‹¤í–‰í•˜ëŠ”ë° ìœ ìš©í•©ë‹ˆë‹¤. 게임 ë‚´ì—ì„œ F4를 눌러 ì´ ì˜µì…˜ì„ ì „í™˜í•©ë‹ˆë‹¤." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "기본모드 ì†ë„ì¡°ì •:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "ëŠë¦°ëª¨ë“œ ì†ë„ì¡°ì •(단축키 shift+tab):" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "터보모드 ì†ë„ì¡°ì •(단축키 tab):" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC 프레임 비율:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL 프레임 비율:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2521,19 +2649,19 @@ "NTSC ë˜ëŠ” PAL 프레임 비율 설정 중 하나를 분ì„하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. " "ì„¤ì •ì€ ìœ íš¨í•œ ë¶€ë™ ì  ìˆ«ìžì´ì–´ì•¼ 합니다." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "비활성화 [기본]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "ì˜¤ì§ í„°ë³´ì¼ ë•Œ ìƒëžµ (TAB으로 활성화)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "ì¼ì •í•œ ìƒëžµ" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2541,19 +2669,19 @@ "보통 ë° í„°ë³´ì—ì„œ 프레임 ìƒëžµ ë¹„ìœ¨ì„ ì œí•œí•©ë‹ˆë‹¤.\n" "ëŠë¦° ë™ìž‘ ë°©ì‹ì€ ê³„ì† í”„ë ˆìž„ ìƒëžµì„ 비활성화합니다." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "그려질 프레임" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "ìƒëžµí•  프레임" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "ë™ê¸°í™”ëœ MTGS 사용" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2561,11 +2689,11 @@ "현 ìƒí™©ì—서는 매우 ëŠë¦´ 수 있으며, MTGSì—서만 가능한 버그 문제 í•´ê²°ì„ ìœ„í•´ ë™" "ê¸°í™”ëœ MTGS를 사용합니다" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "모든 GS 출력 비활성화" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2573,11 +2701,11 @@ "모든 GS í”ŒëŸ¬ê·¸ì¸ í™œë™ì„ 완전히 비활성화합니다; EE 핵심 요소 ë²¤ì¹˜ë§ˆí‚¹ì— ê°€ìž¥ " "알맞습니다." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "프레임 ìƒëžµ" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "프레임 제한" @@ -2618,7 +2746,7 @@ "중요한 ìš”ì†Œì˜ ëˆ„ë½ìœ¼ë¡œ ì¸í•´ ìƒíƒœ ì €ìž¥ì„ ë¶ˆëŸ¬ì˜¤ì§€ 못했습니다. ìžì„¸í•œ ë‚´ìš©ì€ ë¡œ" "ê·¸ 파ì¼ì„ 참조하십시오." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (기본)" @@ -2640,7 +2768,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "êµ¬ì„±ëœ ë°”ì´ì˜¤ìŠ¤ 파ì¼ì´ 존재하지 않습니다. 다시-구성하시기 ë°”ëžë‹ˆë‹¤." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2657,6 +2785,15 @@ "%s í™•ìž¥ì´ ë°œê²¬ë˜ì§€ 않습니다. 마ì´í¬ë¡œ 벡터 ìœ ë‹›ì€ ìš´ì˜ CPU와 함께 MMX, SSE, " "ë° SSE2 í™•ìž¥ì´ í•„ìš”í•©ë‹ˆë‹¤." +#~ msgid "Betatesting" +#~ msgstr "베타 검사" + +#~ msgid "BIOS Selector" +#~ msgstr "ë°”ì´ì˜¤ìŠ¤ ì„ íƒê¸°" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "CDVD 소스 iso를 ì„ íƒí•˜ì‹­ì‹œì˜¤..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2를 권장합니다" diff -Nru pcsx2-1.3.1+dfsg/locales/ms_MY/pcsx2_Iconized.po pcsx2-1.4.0/locales/ms_MY/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ms_MY/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ms_MY/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-05-23 10:01+0800\n" "Last-Translator: \n" "Language-Team: kohaku2421 \n" @@ -38,7 +38,7 @@ "Playstation aka PS1 disc tidak disokong oleh PCSX2. Jika anda nak emulate " "PS1, maka anda kena download emulator PS1, contohnye, ePSXe atau PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -52,7 +52,7 @@ "Anda juga boleh mengurangkan saiz cache utk recompiler PCSX2, dibawah Host " "Settings." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -60,7 +60,7 @@ "PCSX2 gagal utk menempah memori utk PS2 virtual machine. Tutup aplikasi yg " "banyak menggunakan memori kemudian cuba lagi." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -68,7 +68,7 @@ "Amaran: Sesetengah PS2 recompiler yg tlh di konfigurasi gagal utk dimulakan " "dan tlh dimatikan." -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -79,7 +79,7 @@ "kemungkinan perlu menghidupkan semula secara manual recompiler dlm senarai " "di atas, jika anda dapat menyelesaikan masalah anda kelak." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -89,7 +89,7 @@ "*MENDAPATKAN* BIOS dari PS2 MILIK ANDA SENDIRI. Sila rujuk FAQ dan panduan " "utk maklumat lanjut." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,36 @@ "anda tidak mempunyai hak terhadap komputer ini, maka anda perlu menukar " "kepada User Documents Mode (klik butang di bawah)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -193,6 +222,13 @@ "kandungan kad selepas memuat dari savestate. Mungkin tidak sesuai dgn semua " "permainan (Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -269,7 +305,7 @@ "Perbuatan ini akan reset state virtual machine PS2 yg sedia ada; semua " "perkembangan sekarang akan hilang. Anda pasti?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -290,7 +326,7 @@ "\n" "(nota: tidak termasuk seting utk plugin)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -302,7 +338,12 @@ "dan menghidupkannya semula pada bila-bila masa dgn Konfig:Kad Memori drpd " "menu utama." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -310,11 +351,11 @@ "Sila pilih BIOS yg sah. Jika anda gagal melakukannya maka tekan Batal utk " "menutup tetingkap panel Konfigurasi." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Notis: Kebanyakan game berfungsi dgn baik pada opsyen asal." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Notis: Kebanyakan game berfungsi dgn baik pada opsyen asal." @@ -441,7 +482,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "GameFix akan menyebabkan emulation salah dalam sesetengah game. \n" "Ia juga boleh menyebabkan masalah kestabilan dan kelajuan. \n" @@ -465,7 +507,7 @@ "membiarkan halaman ini kosong. \n" " ('Automatik' bermaksud: memberi game yg tertentu dgn fix yg bersesuaian)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -474,14 +516,14 @@ "Anda akan membuang kad memori %s. Semua data dlm kad ini akan hilang! Anda " "pasti?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Gagal: Duplicate hanya dibenarkan kepada port-PS2 kosong atau kepada fail " "sistem." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Gagal: Destinasi kad memori '%s' sedang digunakan." @@ -563,33 +605,49 @@ "gagal utk membuat pilihan yg sah kerana kehilangan plugin atau pemasangan %s " "yg tidak lengkap, maka tekan Batal utk menutup panel Kofigurasi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." -msgstr "Cyclerate asal. Ini sgt menyamai kelajuan EmotionEngine PS2 sebenar." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"Mengurangkan cyclerate EE sebanyak 50%. Lebih banyak pertambahan kelajuan, " +"tetapi *akan* menyebabkan stuttering audio dlm banyak FMV." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "Mengurangkan cyclerate EE sebanyak 33%. Sedikit pertambahan kelajuan utk " "kebanyakan game dgn kestabilan tinggi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "Cyclerate asal. Ini sgt menyamai kelajuan EmotionEngine PS2 sebenar." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"Mengurangkan cyclerate EE sebanyak 50%. Lebih banyak pertambahan kelajuan, " -"tetapi *akan* menyebabkan stuttering audio dlm banyak FMV." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "Mematikan VU Cycle Stealing. Seting paling stabil!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -597,7 +655,7 @@ "Sedikit VU Cycle Stealing. Merendahkan kestabilan, tetapi sedikit " "pertambahan kelajuan bagi kebanyakan game." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -605,7 +663,7 @@ "VU Cycle Stealing sederhana. Merendahkan lagi kestabilan, tetapi sangat " "meningkatkan kelajuan dlm sesetengah game." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -613,7 +671,7 @@ "VU Cycle Stealing maksimum. Kegunaannya terhad, kerana ia akan menyebabkan " "flickering atau slowdown dlm kebayakan game." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -623,17 +681,21 @@ "glitch, audio pelik, dan bacaan FPS palsu. Apabila menghadapi masalah " "emulation, matikan panel ini dahulu." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Menetapkan nilai yg lebih tinggi akan mengurangkan clock speed teras cpu " "EmotionEngine R5900 dgn efektif, dan akan memberi banyak peningkatan " "kelajuan pada game yg gagal menggunakan potensi penuh perkakasan sebenar PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -643,7 +705,7 @@ "lebih tinggi menambah cycle curian drpd EE bg setiap microprogram VU yg " "dijalankan game." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -652,7 +714,7 @@ "Megemaskini Status Flag pada blok yg akan membacanya sahaja, drpd sepanjang " "masa. Seting ini selamat dan SuperVU melakukan perkara yg sama pada asalnya." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -665,7 +727,7 @@ "hang. Dalam kes game yg dihadkan GSnya, ia akan menyebabkan slowdown " "(terutamanya dual core CPU)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -676,7 +738,7 @@ "menggunakan teknik vsync ini akan mendapat sedikit atau tiada pertambahan " "kelajuan." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -691,7 +753,7 @@ "loop tersebut, kita mempercepatkan masa untuk acara seterusnya atau " "penghujung masa pemproses, mana-mana yg datang dahulu." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -699,7 +761,7 @@ "Semak HDLoader utk senarai kesesuaian game-game yg mempunyai masalah dgn " "hack ini. (Sering ditandakan sbg memerlukan 'mode 1' atau 'slow DVD'" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -707,7 +769,7 @@ "Sila ambil tahu bahawa apabila Framelimiting dimatikan, mod Turbo dan " "SlowMotion juga akan tidak dibenarkan." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -716,7 +778,7 @@ "mustahil. Menghidupkannnya hanya akan menyebabkan ralat grafik yg agak teruk " "dlm sesetengah game." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -724,7 +786,7 @@ "Utk trubleshooting kemungkinan pepijat yg mungkin terdapat dlm MTGS sahaja, " "kerana ia mungkin sangat perlahan. " -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -740,7 +802,7 @@ "Amaran: Opsyen ini boleh dihidupkan on-the-fly tetapi tidak boleh dimatikan " "on-the-fly (video akan menjadi buruk/pelik)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ms_MY/pcsx2_Main.po pcsx2-1.4.0/locales/ms_MY/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ms_MY/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ms_MY/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-05-23 08:58+0800\n" "Last-Translator: \n" "Language-Team: kohaku2421 \n" @@ -21,15 +21,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Tiada sebab diberikan." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Ralat huraian" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Your machine's hardware is incapable of running PCSX2. Sorry dood." @@ -97,7 +97,7 @@ msgstr "" "Mangambil kira pemprosesan acara leka dan sedikit penggunaan acara luarbiasa." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Fail imej ISO tidak dikenali" @@ -115,19 +115,19 @@ "Jika memuatkan dari imej ISO, ralat ini mungkin disebabkan oleh imej ISO " "yang tidak disokong atau pepijat dalam sokongan imej ISO PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "Thread MTGS tidak memberi respons semasa menuggu plugin GS untuk buka." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Savestate tidak boleh dimuatkan, kerana ia telah korup atau tidak lengkap." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -136,7 +136,7 @@ "%s plugin gagal untuk dibuka. Komputer anda mungkin kekurangan keperluan, " "atau perkakasan/driver yang tidak sesuai." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -145,19 +145,19 @@ "%s plugin gagal untuk dimulakan. Sistem anda kemungkinan kekurangan memori " "atau keperluan yang diperlukan." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "%s plugin yang telah di konfigurasi tidak dijumpai." -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "Fail plugin %s yang di konfigurasi adalah perpustakaan sumber dinamik tidak " "sah" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -166,13 +166,13 @@ "%s plugin adalah bukan plugin untuk PCSX2, atau untuk PCSX2 versi lama yang " "tidak lagi disokong." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Plugin menyatakan yang perkakasan atau perisian/driver anda tidak disokong." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -180,7 +180,7 @@ "Plugin yang telah di konfigurasi bukan plugin PCSX2, atau untuk PCSX2 versi " "lama yang tidak lagi disokong." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -189,11 +189,11 @@ "Plugin %s yang telah dikonfigurasi adalah plugin PCSX2 yang tidak sah, atau " "untuk PCSX2 versi lama yang tidak lagi disokong." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Plugun Memori Kad dalamn gagal untuk dimulakan." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plugin tidak dimuatkan" @@ -349,11 +349,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Log teliti berkenaan perkakasan CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Mesej PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -361,31 +361,31 @@ "Savestate tidak disimpan dengan betul. Fail sementara berjaya dicipta tetapi " "tidak boleh dipindahkan ke tempat akhirnya." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Paling Selamat" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Selamat (lebih pantas)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Sama rata" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresif" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Lebih agresif" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Bahaya" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Gagal untuk menulis ke fail tetapan sedia ada; keizinan dinafikan." @@ -393,7 +393,7 @@ msgid "Loading PS2 system plugins..." msgstr "Memuatkan plugin sistem PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -401,91 +401,96 @@ msgstr "" "Ekstensi SSE tiada. PCSX2 memerlukan CPU yang menyokong set instruksi SSE." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Ralat PCSX2 Recompiler" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "Semua pilihan untuk sesi sekarang sahaja dan tidak akan disimpan.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Fail Iso" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "menunjukkan senarai pilihan command line ini" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "memaksa program log/console untuk ditunjukkan" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "gunakan mod GS skrin penuh" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "gunakan mod tetingkap GS" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "mematikan paparan gui semasa menjalankan permainan" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "memulakan imej ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "memuat dari tray dvd kosong; gunakan untuk memasuki sistem menu PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "memuat dari plugin CDVD (mengamibl alih parameter IsoFile)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "mematikan semua speedhack" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "gunakan koma yg dinyatakan atau senarai gamefix yg tlh di pipe-delimited kan" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "mematikan boot pantas" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "mengubah laluan fail konfigurasi" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "menyatakan fail konfigurasi untuk digunakan PCSX2" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "memaksa %s untuk mulakan Wizard Kali Pertama" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "membolehkan mod operasi mudah aliih (memerlukan akses admin/utama)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "menyatakan fail untuk menggunakan plugin%s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Ralat Ambil Alih Plugin - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -495,94 +500,94 @@ "Ralat Ambil Alih Plugin %s ! Fail tersebut tidak wujud atau %s plugin tidak " "sah:\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "tekan OK untuk gunakan tetapan asal plugin, atau Cancel untuk tutup %s" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Ralat PCSX2: Masalah Perkakasan" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Tekan OK untuk tutup %s" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Ralat Kritikal" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Batal" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Batal" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Tetapkan" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Seterusnya >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Balik" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Balik" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Tamat" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ya" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Tidak" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Cari" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Simpan" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Simpan &sbg" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Bantuan" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Rumah" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Tunjuk berkenaan dialog" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -592,43 +597,50 @@ "\n" "Tekan OK untuk ke Panel Konfigurasi Plugin" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Amaran! Plugin sistem tidak dimuatkan. PCSX2 kemungkinan tidak boleh " "dijalankan." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Pilihan Commandline" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Ralat PS2 BIOS" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Tekan OK untuk ke Panel Konfigurasi BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Amaran! Plugin sistem tidak dimuatkan. PCSX2 kemungkinan tidak boleh " +"dijalankan." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Pilihan Commandline" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Thread PCSX2 Tiada Respons" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Hentikan" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Memulakan PS2 Virtual Machine..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Cari Iso yg tiada sblm ini dalam sejarah." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Cari..." @@ -674,134 +686,145 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Tidak boleh menetapkan seting, salah satu seting tidak sah." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Simpan log soalan" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Meuatkan banyak log dalam ruang kecil." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Kecil" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Apa yg saya gunakan (programmer)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Ia lawa dan boleh dibaca." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Besar" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Sgt Besar" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Sekiranya anda ada paparan resolusi tinggi." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Skema warna tona lembut asal." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Tema terang." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "Tema warna hitam untuk mereka yang hmmm...." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tema gelap" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Sentiasa di Atas" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Apabila ditanda, tetingkap log akan berada atas tetingkap lain." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Simpan" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Simpan kandungan log kepada file" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "C&lear" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Mengosongkan kandungan tetingkap log" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Rupa" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Tutup" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Menutup tetingkap log; kandungan dikekalkan" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Menunjukkan log pembina PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "membaca CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Menunjukkan aktiviti disk read" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Hidupkan semua" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Hidupkan semua tapisan log punca." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Matikan semua" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Matikan semua tapisan log punca." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Kembali kpd Asal" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Hidupkan semua tapisan log punca." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Log" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Punca" @@ -814,48 +837,45 @@ msgid "About %s" msgstr "About %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versi2 sebelum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmaster" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Pakar Plugin" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Terima Kasih Daun Keladi kpd" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Para Pembina" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Yg turut membantu" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Sebuah Emulator Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Laman Web Rasmi dan Forum PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "Perpustakaan Svn Rasmi PCSX2 di GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Ya, sye da tgk sumer" @@ -863,23 +883,19 @@ msgid "Assertion Failure - " msgstr "Assertion Gagal -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Menyimpan snapshot seting ini ke fail PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Simpan dialog screenshot ke..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Pilihan BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Jgn tunjuk dialog ini lagi." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -887,7 +903,7 @@ "Mematikan popup ini dan apa2 yg tlh anda pilih akan digunakan secara " "automatik dari sekarang." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -895,16 +911,89 @@ "Popup ini tidak akan ditunjukkan lagi. Seting ini boleh diubah semula di " "panel tetapan." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Abaikan" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Reset" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Folders" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Ralat (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Buat kad memori" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Buat kad memori baru" @@ -926,67 +1015,67 @@ msgid "Select file name: " msgstr "Pilih nama fail:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Ralat (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Buat kad memori" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Ralat: Kad memori tidak boleh dihasilkan." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Ralat: Kad memori tidak boleh dihasilkan." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Gunakan pemampatan NTFS semasa membuat kad ini." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [paling stabil]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "Saiz standard dari Sony, disokong semua permainan dan versi BIOS." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "Sentiasa gunakan pilihan ini jika anda mahukan yg selamat dan terbaik." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Saiz biasa untuk kad memori pihak ketiga dimana akan berfungsi dgn " "kebanyakan game." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 and 32 MB cards have roughly the same compatibility factor." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -994,7 +1083,7 @@ "Amaran kestabilan rendah: Ya, ia sgt besar, tetapi kemungkinan tidak " "berfungsi dgn banyak game." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1002,6 +1091,22 @@ "Risiko anda yg tanggung. Kad memori mungkin akan berkelakuan pelik (walaupun " "kdg2)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1012,6 +1117,7 @@ msgstr "Tetapan" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Pilihan Bahasa" @@ -1065,15 +1171,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Auto-eject kad memori semasa memuat savestate" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Pengurus Kad Memori" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Tarik kad ke atau dari port PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1137,24 +1247,24 @@ msgid "Game Fixes" msgstr "Game Fixes" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Pilihan Komponen - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plugins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Folders" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Rupa/Tema - %s" @@ -1176,47 +1286,51 @@ msgid "Terminate App" msgstr "Hapus Aplikasi" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "Output GS dimatikan!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Save state" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Menyimpan state virtual machine ke slot yg dipilih." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Load state" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Memuatkan state virtual machine dari slot yg dipilih." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Load State Sokongan" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Memuatkan state virtual machine sokongan dari slot yg dipilih." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Ke slot seterusnya" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Ke slot kini dlm fesyen +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Ke slot sebelumnya" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Ke slot kini dlm fesyen -1!" @@ -1233,7 +1347,7 @@ "Adalah sebuah ralat untuk meletakkan berbilang fail ke tetingkap %s. Satu2 " "ya, terima kasih." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Pasti Reset PS2" @@ -1251,368 +1365,368 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Anda tlh meletakkan imej ISO ke dlm %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Buat sokongan" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Paparkan Console" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Console ke Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistem" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfig" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Lain2" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Memulakan..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Jalankan ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Untuk menjalankan binari PS2 mentah secara terus" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "buat sokongan sblm Simpan" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "GameFixes Automatik" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Menetapkan fix2 ke game2 yg diketahui bermasalah" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Hidupkan Cheats" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Hidupkan speedhacks" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Hidupkan Host Filesystem" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Tutup PS2 VM" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Menghapus semua state dalaman VM dan menutup plugin." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Keluar" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Menutup %s mungkin membahayakan hidup anda" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Pilih Iso" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu Plugin" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Menjadikan imej ISO sbg punca CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plugin" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Menggunakan plugin sbg punca CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Tiada CDVD" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Gunakan ini untuk memasuki konfigurasi PS2 BIOS maya." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Tetapan &Emulation" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Kad memori" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Pilihan Plugin/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor Database Permainan" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Audio (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Controllers (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Hapus semua tetapan..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Mengosongkan semua tetapan %s dan menjalankan semula wizard startup." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "About..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Logging..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Jeda" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Menjedakan emulation dan mengekalkan state PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Sambung" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Menyambung state emulation yg tlh dijeda." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Jeda/Sambung" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Tiada emulation state aktif; tidak boleh jeda atau sambung." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Mula Semula" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Seperti Reset pada PS2 sebenar." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Tiada emulation state aktif; boot apa2 dahulu." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Reboot CDVD (full)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Reset secara penuh VM." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Boot CDVD (full)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Memulakan VM dgn DVD atau ISO sbg punca media" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Reboot CDVD (fast)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Memulakan semula boot tanpa skrin BIOS" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Boot CDVD (fast)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Gunakan boot pantas untuk skip BIOS" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Tiada plugin dimuatkan" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Tetapan teras GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "Mengubah tetapan perkakasan emulation, dikawal oleh teras VM PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Tetapan Tetingkap..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Megubah tetapan rupa dan tetingkap, termasuk aspect ratio." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Tetapan Plugin..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Membuka kotak dialog plugin %s yg lebih mendalam." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Reset semua tetapan?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Pasti penukaran imej ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "Anda mahu menukar disc atau boot imej baru (melalui sistem reset)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Tukar Disc" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Pasti penukaran punca CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Anda tlh memilih untuk menukar punca CDVD dari %s ke %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Anda mahu menukar disc atau boot imej baru (sistem reset)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Semua Disokong (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Imej Disc (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Semua Fail (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Pilih punca iso CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Pilih fail ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Fail ISO tidak dijumpai!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Sebuah ralat terjadi semasa cuba untuk membuka fail:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1620,7 +1734,7 @@ "Ralat: Fail ISO yg tlh di konfigurasi tidak wujud. Tekan OK untuk pilih " "punca ISO baru utk CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1628,7 +1742,7 @@ "Anda tlh memilih fail imej ISO tersebut ke dlm PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1641,7 +1755,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1654,19 +1768,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Tiada nama atau terlalu pendek" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nama fail diluar direktori yg diperlukan" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Nama fail telah sedia ada" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Sistem Operasi menghalang fail ini dari dicipta" @@ -1674,28 +1788,28 @@ msgid "Cannot apply settings..." msgstr "Gagal menetapkan seting..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Laluan carian BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Pilih folder dgn rom PS2 BIOS" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "" "Tekan Cari untuk memilih folder yg lain utk PCSX2 mencari rom PS2 BIOS." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Refresh senarai" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Pilih rom BIOS:" @@ -1727,89 +1841,93 @@ msgid "None" msgstr "None" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Pilihan Advanced Recompiler EE/FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preserve Sign" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Full" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Pilihan Advanced Recompiler VU0 / VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Benda yg paling perlahan dlm alam semeta." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "Melakukan translasi binari 64-bit MIPS-IV machine code kepada x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Agak perlahan; gunakan untuk diagnostik shj." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "Melakukan translasi binari 32-bit MIPS-I mcahine code kepada x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Hidupkan EE Cache (Perlahan)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Interpreter shj; utk diagnostik" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Kembali kpd Asal" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "Vector Unit Interpreter. Perlahan dan kurang stabil. Gunakan utk diagnostik." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "VU unit baru dgn kestabilan tinggi. Disyorkan." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Recompiler [legacy]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "Berguna utk diagnostik pepijat atau isu2 lain berkenaa mVU recompiler." @@ -1976,7 +2094,7 @@ msgstr "Ignore Bus Direction on Path3 Transfer - Utk Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2007,87 +2125,92 @@ "Amaran: menghidupkan trace logs selalunya sgt perlahan, dan menyebabkan " "masalah 'Kenapa dgn FPS saya'. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Pilih folder dgn kad memori PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Eject" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Duplicate ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Nama Semula ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Cipta..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Masukkan ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "kad: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Cipta kad memori baru." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Nama semula kad memori ini ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Masukkan ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Keluarkan kad dari port ini" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Masukkan kad ini ke dlm port ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Membuat duplicate kad memori ini ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Buang" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Buang kad memori ini dari disk secara kekal (segala kandungan akan hilang)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Buat kad memori baru dan tetapkannya ke Port ini." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Buang fail memori?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Duplicate kad memori" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Gagal: Hanya boleh duplicate kad yg tlh sedia ada." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2095,25 +2218,25 @@ "Pilih nama utk duplicate\n" "( '.ps2' akan ditambah secara automatik)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Gagal: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Menyalin gagal!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Kad memori tlh di-duplicate drpd '%s' ke '%s'. " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Berjaya" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2122,121 +2245,126 @@ "Pilih nama baru utk kad memori '%s'\n" "( '.ps2' akan ditambah secara automatik)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Nama semula kad memori" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Ralat: Penamaan semula tidak boleh dilaksanakan. \n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "kosong" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Pilih target port utk '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Masuk kad" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Keluar kad" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Masuk kad..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Duplicate kad..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Nama Semula kad..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Buang kad" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Masuk kad" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Buat kad baru..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Refresh senarai" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Port" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kad (fail) nama" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Saiz kad" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Tlh diformat" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "T'akhir diubah" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Dicipta pada" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Tidak" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ya" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[--Kad x digunakan --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Tiada kad x digunakan --]" @@ -2269,11 +2397,11 @@ msgid "Select a document root for %s" msgstr "Pilih punca dokumen utk %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Tetapkan" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Jadikan bahasa in sbg bahasa asal sekarang!" @@ -2351,52 +2479,52 @@ "Sebab: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Menyiapkan kerja2..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Hidupkan speedhacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "Cara paling selamat adalah memastikan semua speedhacks dimatikan." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "" "Mengembalikan semua speedhax kpd yg asal, atau mudah dikatakan semua OFF." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [X digalakkan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [X digalakkan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "Kelajuan + Kestabilan; boleh menyebabkan grafik pelik... [Digalakkan}" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2404,36 +2532,36 @@ "Kelajuan + Kestabilan; boleh menyebabkan hanging... [Digalakkan jika 3+ " "teras CPU]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Hack lain2" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Enable INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" msgstr "" "Kelajuan++ utk sedikit games, dgn hampir tiada side effects. [Digalakkan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Enable Wait Loop Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Sedikit kelajuan utk sesetengah games, dgn tiada side effects. [Digalakkan]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Enable fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Akses disc pantas, kurang masa loading. [X digalakkan]" @@ -2455,40 +2583,40 @@ msgid "Select a visual theme:" msgstr "Pilih tema:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Matikan Framelimiting" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "Berguna utk benchmarking. Hidup atau matikan semasa gaming dgn F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Base Framerate Adjust:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Slow Motion Adjust:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbo Adjust:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC Framerate:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL Framerate:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2496,19 +2624,19 @@ "Ralat semasa menghurai tetapan framerate NTSC atau PAL. Seting mesti terdiri " "dari titik apungan numerik yg sah." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Dimatikan [Asal]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Skip bila dlm Turbo shj (TAB utk hidupkan)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Skip secara tetap" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2516,40 +2644,40 @@ "Normal dan Turbo menghadkan kadar skip frames. Mode slow motion akan " "mematikan frameskipping." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Frames utk Draw" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Frames utk Skip" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Guna Synchronized MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "Utk troubleshooting pepijat dlm MTGS shj, kerana ia sgt perlahan." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Matikan semua GS output" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." msgstr "" "Mematikan semua aktiviti plugin GS; ideal utk benchmarking komponen EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Frame Skipping" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Framelimiter" @@ -2587,7 +2715,7 @@ "Savestate ini gagal dimuatkan kerana kehilangan komponen pnting. Lihat log " "file utk maklumat lanjut." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (Asal)" @@ -2608,7 +2736,7 @@ msgstr "" "BIOS yg tlh di konfigurasi tidak wujud. Sila lakukan konfigurasi semula." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2625,6 +2753,15 @@ "Extensi %s tidak dijumpai. microVU memerlukan hos CPU dgn extensi MMX, SSE, " "dan SSE2." +#~ msgid "Betatesting" +#~ msgstr "Betatesting" + +#~ msgid "BIOS Selector" +#~ msgstr "Pilihan BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Pilih punca iso CDVD..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 Disyorkan" diff -Nru pcsx2-1.3.1+dfsg/locales/nb_NO/pcsx2_Iconized.po pcsx2-1.4.0/locales/nb_NO/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/nb_NO/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/nb_NO/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,7 +35,7 @@ "ePSXe or PCSX." msgstr "" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -43,33 +43,33 @@ "a lot of memory." msgstr "" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." msgstr "" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " "the recompilers listed above, if you resolve the errors." msgstr "" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " "count). Please consult the FAQs and Guides for further instructions." msgstr "" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -86,7 +86,36 @@ "below)." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -143,6 +172,13 @@ "Hero)." msgstr "" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -193,7 +229,7 @@ "progress will be lost. Are you sure?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -205,7 +241,7 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -213,17 +249,22 @@ "and re-enable it at any time using Config:Memory cards from the main menu." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" @@ -311,7 +352,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 @@ -322,19 +364,19 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -392,75 +434,91 @@ "%s, then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " "panel first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " "EE for each VU microprogram the game runs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " "default." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -468,14 +526,14 @@ "slowdown (especially on dual core CPUs)." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " "this method of vsync will see little or no speedup from this hack." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -485,31 +543,31 @@ "timeslice, whichever comes first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -519,7 +577,7 @@ "disabled on-the-fly (video will typically be garbage)." msgstr "" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/nb_NO/pcsx2_Main.po pcsx2-1.4.0/locales/nb_NO/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/nb_NO/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/nb_NO/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-08-12 09:43+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,15 +21,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Ingen grunn gitt." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Parse feil" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Din maskins hardvare har ikke mulighet til Ã¥ kjøre PCSX2. Beklager." @@ -95,7 +95,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "Inkluderer hvilende prosesser og noen unormale bruksomrÃ¥der." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Ukjent ISO bilde fil format" @@ -112,7 +112,7 @@ "Hvis lasting av et ISO bilde, sÃ¥ kan denne feilen oppstæ grunnet en ustøttet " "SO type eller en feil i PCSX2 ISO støtten." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." @@ -120,14 +120,14 @@ "MTGS trÃ¥den har stoppet Ã¥ svare mens den ventet pÃ¥ at GS tillegget skulle " "Ã¥pne." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Lagringen kunne ikke Ã¥pnes siden den ser ut til Ã¥ være korrupt eller " "ufullstendig." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -136,7 +136,7 @@ "%s tillegget greide ikke Ã¥ Ã¥pne. Maskinen din kan ha forlite resurser, eller " "ikke kompatibel hardvare/drivere." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -145,17 +145,17 @@ "%s tilleffet feilet Ã¥ initialisere. Maskinen din kan mangle nokk minne eller " "andre resurser." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Det konfigurerte %s tilleggets fil er ikke funnet" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Det konfigurerte %s tilleggets fil er ikke et ekte dynamisk bibliotek" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -164,14 +164,14 @@ "Det konfigurerte %s tillegget er ikke et PCSX2 tillegg, eller den kan være " "tilhørende en foreldet versjon av PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Dette tillegget rapporterer at dine hardvare eller mykvare/drivere ikke er " "støttet." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -179,7 +179,7 @@ "Den konfigurerte tillegget er ikke et PCSX2 tillegg, eller den hører til en " "eldre utstøtte versjon av PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -188,11 +188,11 @@ "Det konfigurerte %s tillegget er ikke et valid PCSX2 tillegg, eller den " "hører til en eldre utstøtte versjon av PCSX2" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Det interne minnekortet nektet Ã¥ starte." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Frakoplet tillegg" @@ -348,11 +348,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Detaljert logging av CDVD hardvare." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 Beskjed" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -360,31 +360,31 @@ "Lagrings stausen ble ikke korrekt lagret. Den midlertidige filen ble skapt " "korrekt men kunne ikke bli flyttet til sin endelige hvile plass." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Tryggest" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Trygg (Kjappere)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Balansert" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Aggressiv" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Aggressiv+" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Mest Skadelig" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Feilet i forsøket Ã¥ overskrive innstillings filen, tilgangen var nektet." @@ -393,7 +393,7 @@ msgid "Loading PS2 system plugins..." msgstr "Laster PS2 system tillegg..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -402,91 +402,96 @@ "SSE utvidelse ikke tilgjengelig. PCSX2 krever en CPU som støtter SSE " "instruksjons settet." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 Rekompilator Feil" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "Alle valg er fortiden kun sesjons messig og lagres ikke.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "ISOFil" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "vis denne listen med kommando linje valg" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "tvinger programmets logg/konsoll til Ã¥ være synlige" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "Bruk fullskjerm GS modus" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "Bruk vindu GS modus" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "deaktiver visningen av GUI mens spill kjører" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "kjør et ELF bilde" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "start opp til en tom dvd; bruk denne for Ã¥ gÃ¥ til PS2 sin system meny" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "start opp fra CDVD tillegget (Overkjører IsoFile parametere)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "deaktiver alle hastighets fikser" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "bruk den spessifiserte komma eller pipe-delgrense listen for spill fikser." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "deaktiver hurtig oppstart" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "skifter konfigurasjons fil stien" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "spessifiser PCSX2 configurasjonen som skal brukes" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "tvinger %s til Ã¥ starte Førstegangs Veiviseren" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "aktiver portabel modus opperasjon (krever admin/root rettigheter)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "spesifiser filen som brukes som %s tillegget" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Tillegs Overkjørings Feil - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -497,96 +502,96 @@ "ikke brukbar %s tillegg:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Trykk OK for Ã¥ bruke det standard konfigurerte tillegget, eller Avbryt for " "Ã¥ stenge ned %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 Feil: Hardvare Mangler" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Press OK for Ã¥ avslutte %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kritisk Feil" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Avbryt" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Avbryt" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Legg til" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Neste >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Forgje" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Forgje" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Fullfør" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ja" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Nei" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Søk" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Lagre" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Lagre &Som" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Hjelp" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Hjem" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Vis om dialogen" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -596,43 +601,50 @@ "\n" "Trykk OK for Ã¥ gÃ¥ til Tillegs Configurasjons Panelet" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Advarsel! Systemets tillegg har ikke blitt lastet. PCSX2 kan være ikke-" "fungerbar" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Komandolinje Opsjoner" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS Feil" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Trykk OK for Ã¥ gÃ¥ til BIOS konfigurasjons Panelet." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Advarsel! Systemets tillegg har ikke blitt lastet. PCSX2 kan være ikke-" +"fungerbar" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Komandolinje Opsjoner" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 TrÃ¥den har sluttet Ã¥ reagere" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Terminer" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Eksekverer PS2 Virtuell Maskin..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Søk etter en ISO som ikke er i din historie logg." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Søk..." @@ -679,51 +691,52 @@ "Kan ikke legge til nye instillinger, en av innstillingene er feil/" "problematiske." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Lagre logg spørsmÃ¥l" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Presser masse loggdate inn i et mikroskopisk lite omrÃ¥de." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Liten" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Det er hva jeg bruker (Hilsen programmøren)" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Det er pent og leselig." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Stor" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Kjempe" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "I tilfelle du har ekstremt høy opplosning pÃ¥ skjermen." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Standard myk-tone farge palett." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Lyst tema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -731,86 +744,96 @@ "Classisk svart farge er for de menneskene som liker Ã¥ ha text etset inn i " "sin optiske nerve." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Mørkt Tema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Alltid pÃ¥ topp" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "NÃ¥r hukket av sÃ¥ vil logg vinduet være synlig oppÃ¥ andre vinduer i " "forgrunnen." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Lagre" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Lagre logg innhold til fil" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&Tøm" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Tømm logg vinduet" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Utseende" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Avslutt" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Steng dette logg vinduet, innholdet er tatt vare pÃ¥" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Vis PCSX2 utvikler logger" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "DVD leser" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Vis disk lese aktivitet" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Aktiver alle" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Aktiver alle log kilde filtere." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Deaktiver alle" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Deaktiver alle log kilde filtere." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Gjenopprett standard innstillinger" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Aktiver alle log kilde filtere." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Logg" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Kilde" @@ -823,48 +846,45 @@ msgid "About %s" msgstr "Om %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Tidligere Versjoner" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmaster" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Tilleggs Spesialister" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Spesielt takk til" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Utviklere" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Bidragsytere" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "En Playstation 2 emulator" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 Offisiell Webside og Forum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2 Offisiell SVN Repository @ GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Jeg har sett nokk" @@ -872,23 +892,19 @@ msgid "Assertion Failure - " msgstr "Antagelse Feilet - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Lagre en skjermdump av dette innstillings panelet til en PNG fil." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Lagre skremdumper til..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS velger" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Ikke vis denne beskjeden igjenn." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -896,7 +912,7 @@ "Deaktiver denne meldingen og hva enn respons du velger her vil automatisk " "blir brukt fra nÃ¥ av." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -904,16 +920,89 @@ "Denne baskjeden vil ikke komme opp igjen. Dettee kan bli endre i " "innstillings panelet." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorer" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Start pÃ¥ nytt" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Mapper" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Feil (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Skap minnekort" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Skap nytt minnekort" @@ -935,30 +1024,30 @@ msgid "Select file name: " msgstr "Velg fil navn:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Feil (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Skap minnekort" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Feil: Minnekortet kunne ikke skapes." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Feil: Minnekortet kunne ikke skapes." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Bruk NTFS komprimering nÃ¥r man skaper dette kortet." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [mest kompatibelt]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -966,39 +1055,39 @@ "Dette er standard Sony størrelsen, og er støttet av alle spill og BIOS " "versjoner." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "" "Altid bruk dette valget hvis du ønsker den tryggeste minnekort oppførselen." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "En types størrelse for 3 parts leverandører som burde fungere med de fleste " "spill." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 og 32 MB kort har nesten de samme kompatiblitets faktorene." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1006,7 +1095,7 @@ "Lav kompatiblitets advarsel: Ja den er veldig stor men det er ikke sikkert " "den fungerer med mange spill." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1014,6 +1103,22 @@ "Bruk pÃ¥ egen risiko, Irrasjonell minnekort oppførsel er mulig (men " "usansynlig)" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1024,6 +1129,7 @@ msgstr "Innstillinger" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "SprÃ¥k velger" @@ -1077,15 +1183,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Automatisk frakople minnekortet nÃ¥r lasting av lagre" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Minnekort HÃ¥ndtering" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Dra kort till eller fra MS2-Portene" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1148,24 +1258,24 @@ msgid "Game Fixes" msgstr "Spill Fikser" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Komponent Velger - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Tillegg" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Mapper" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Utseende/Tema - %s" @@ -1188,47 +1298,51 @@ msgid "Terminate App" msgstr "Terminer Applikasjon" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS Ut strømen er deaktivert" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Lager Status" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Lagrer den virtuelle maskinens backup status til den aktive blokken." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Last Status" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Laster den virtuelle maskinens backup status fra den aktive blokken." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Last status backup" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Laster den virtuelle maskinens backup status fra den aktive blokken." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "GÃ¥ til neste blokk" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "GÃ¥ til neste lagrings blokk i en +1 type syklus" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "GÃ¥ til forgje blokk" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "GÃ¥ til neste lagrings blokk i en -1 type syklus" @@ -1243,7 +1357,7 @@ "please, thank you." msgstr "Det er feil Ã¥ slippe flere filer i et %s vindu. En av gangen, Takk." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Godkjenn PS2 omstart" @@ -1261,278 +1375,278 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Du har mistet den følgende ISO filen i %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Blokk %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Sikkerhets Kopi" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Vis Konsoll" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsoll til Studio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&System" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "&CDVD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfigurasjon" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Ekstra" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Problemløsing" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Initialiser..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Kjør ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "For Ã¥ kjøre PS2 rÃ¥ binærfiler direkte" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Ta sikkerhets Kopi før du lagrer" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatiske Spillfikser" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Automatisk legger ved trengte spill fikser for kjente problemer" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Aktiver Juks" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Aktiver hastighets fikser" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Aktiver Vert Filesystem" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Avslutt" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Tømmer den interne VM statusen og stenger ned tilleggene." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Avslutt" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Stenging %s kan være skadelig for din helse" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ISO Velger" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Tillegs Meny" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Gjør den spesifiserte ISO filen til CDVD kilen." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Tillegg" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Bruk et eksternt tillegg som CDVD kilde." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Ingen disk" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Bruk denne for Ã¥ starte til din PS2 sin BIOS konfigurasjon." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Emulering & Innstillinger" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Minnekort" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Tillegg/BIOS velger" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Spill Database Editor" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Grafikk (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Lyd (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Kontrollere (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Fler klikk 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Fler klikk 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Tøm alle innstillinger..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Tøm alle %s sine innstillinger og kjør og kjør Førstegangs Konfigurasjons " "Veiviser." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Om..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Logging..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pause" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Trygt pause emuleringen og ta vare pÃ¥ PS2 sin status." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Gjenoppta" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Gjenoppta den avventede emulerings statusen." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pause/Gjenoppta" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Ingen emulering er aktiv; kan ikke Avvente eller gjenoppta." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Omstart" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simulerer hardvare omstart av PS2 Virtuell Maskin." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Ingen emulering er aktiv; start noe først." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Omstart CDVD (Normal)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Kald omstart den aktive VM." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Start opp CDVD (Normal)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Start opp VM, men bruk gjeldende DVD eller ISO kilde" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Omstart CDVD (hurtig)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Omstart med hurtig start (Hopper direkte til spill start)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Start opp CDVD (hurtig)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Bruk hustig start for Ã¥ hoppe over PS2 sin oppstart sesjon." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Ingen Tillegg lastet inn" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Kjerne GS Innstillinger..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1540,98 +1654,98 @@ "Modifiser hardvare emulerings innstillingene regulert av PCSX2 sin kjerne " "virtuelle maskin." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Vindus Innstillinger..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "" "Modifiser vindu og utseende valgene, dette inkludere vindus oppløsningen." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Tilleggs Innstillinger..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Ã…pne %s tillegget sin avanserte innstillings dialog." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Tilbakestill alle innstillinger?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Godkjenn ISO bilde skifte" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Ønsker du Ã¥ skifte disker elle Ã¥ starte opp fra nytt bilde (via system " "omstart)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Bytt Disk" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Godkjenn CDVD kilde bytte" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Du har valgt Ã¥ bytte CDVD kilen fra %s til %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Ønsker du Ã¥ skifte disker eller Ã¥ starte opp pÃ¥ en ny ISO fil (system " "omstart)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Alle støttet (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Disk bilde (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blokk dumper (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Blokk dumper (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Alle filer (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Velg CDVD kilde ISO..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Velg ELF fil..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO filen ikke funnet!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "En feil oppstod imens man forsøkte Ã¥ Ã¥pne filen:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1639,7 +1753,7 @@ "Feil: Den konfigurert ISO filen eksisterer ikke. Klikk OK for Ã¥ velge en ny " "ISO kilde for CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1647,7 +1761,7 @@ "Du har valgt følgende ISO bilde i PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1660,7 +1774,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1673,19 +1787,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Fil navn er tomt eller for kort" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Fil navnet var pÃ¥ utsiden av den pÃ¥krevde stien" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Fil navnet eksisterer allerede" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "perativ Systemet hindrer denne filen Ã¥ bli skapt" @@ -1693,15 +1807,15 @@ msgid "Cannot apply settings..." msgstr "Kan ikke legge til innstillingen..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS Søk sti:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Velg mappe med PS2 BIOS filer" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1709,13 +1823,13 @@ "Klikk Søk knappen for Ã¥ velge en annen mappe hvor PCSX2 Kan se etter PS2 " "BIOS filer." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Oppfrisk listen" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Velg en BIOS fil:" @@ -1747,40 +1861,44 @@ msgid "None" msgstr "Ingen" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU Avanserte Rekompilerings Valg" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Ekstra + Bevar Tegn" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Full" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 Avanserte Rekompilerings Valg" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Ekstra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Oversetter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Mye mulig universets tregeste." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Rekompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1788,11 +1906,11 @@ "Utfør en ''just-in-time'' binær oversettelse av 64-bit MIPS-IV maskin kode " "til x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Meget treg; Kun diagnose bruk." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1800,40 +1918,40 @@ "Utfør en ''just-in-time'' binær oversettelse av 32-bit MIPS-I maskin kode " "til x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Aktiver EE Lager (Tregere)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Kun oversetter; Diagnose bruk" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Gjenopprett standard innstillinger" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "Vektor enhets oversetter. Treg og ikke veldig kompatibel. For diagnosebruk." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU rekompilator" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "Ny vektor enhet rekompilert med forbedret kompatibilitet. Anbefalt." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU rekompilator [Foreldet]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2007,7 +2125,7 @@ msgstr "Ignorer Bus direksjon pÃ¥ Path3 overføringer – Brukt i Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2038,86 +2156,91 @@ "Advarsel: aktivering av Sporingslogger er typisk veldig trengt, og er " "standard svaret til spørsmÃ¥let, hva skjedde med FPSen min?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Velg mappe med PS2 minnekort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Fjern" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Dupliser ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Gi nytt navn ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Skap ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Sett inn ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Kort:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Skap nytt minnekort." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Gi dette minnekortet nytt navn ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Sett inn ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Fjern kortet fra denne porten" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Sett kortet inn i denne porten ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Skap et duplikat av dette minnekortet ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Slett" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Permanent sletter dette minnekortet fra disk (alt innhold er tapt)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Skaper et nytt minnekort og legger den til denne porten" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Sletter minnekort fil?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Dupliser minne kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Feilet: Kan bare duplisere eksisterende kort." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2125,25 +2248,25 @@ "Velg et nytt navn for minnekortet '%s'\n" "( '.ps2' vil bli lagt till automatisk)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Feilet: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopi feilet!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Minne kort '%s' duplisert til '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Suksess" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2152,121 +2275,126 @@ "Velg et nytt navn for minnekortet '%s'\n" "( '.ps2' vil bli lagt till automatisk)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Gi minnekortet nytt navn" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Feil: Nytt navn kunne ikke gis.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Fler klikk-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Fler klikk-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Tom" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Velg en mÃ¥l port for '%s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Sett inn kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Slipp ut kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Sett inn kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Dupliser kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Gi kortet nytt navn ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Slett kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Sett inn kort" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Skap et nytt kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Oppfriske listen" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Port" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kort (fil) navn" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Kort størrelse" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatert" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Sist Modifisert" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Skapt pÃ¥" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Nei" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ja" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Ubrukte kort --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Ingen ubrukte kort --]" @@ -2299,11 +2427,11 @@ msgid "Select a document root for %s" msgstr "Velg en sti for %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Legg Til" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Gjør dette sprÃ¥ket til mitt standard sprÃ¥k nÃ¥!\"" @@ -2381,22 +2509,22 @@ "Begrunnelse: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Fullfører oppgaver..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Aktiver hastighets fikser" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "En trygg og enkel mÃ¥te Ã¥ sørge for at alle hastighets fikser er fullstendig " "deaktivert." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2404,34 +2532,34 @@ "Tilbakestill alle hastighets fikser til dere standard verdi. (dette skrur " "dem egentlig AV)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Syklus rate [Ikke Anbefalt]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Syklus Stjeling [Ikke Anbefalt]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Fiks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Fiks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "God ytelses økning sammen med høy kompatibilitet; kan forsake dÃ¥rlig " "grafikk... [Anbefalt]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Fler-TrÃ¥ds microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2439,15 +2567,15 @@ "God ytelses økning sammen med høy kompatibilitet; kan forsake noe henging... " "[Anbefalt ved 3+ kjerner]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Andre Fikser" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Aktiver INTC Snurr Deteksjon" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2455,21 +2583,21 @@ "Stor ytelses økning for noen spill, nesten uten kompatibilitet problemer. " "[Anbefalt]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Aktiver Vente Løkke Detektering" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Moderate hastighets økning for noen spill, uten kjente bieffekter. [Anbefalt]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Aktiver fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Hurtig dik disc tilgang, lavere laste tider. [Ikke Anbefalt]" @@ -2493,41 +2621,41 @@ msgid "Select a visual theme:" msgstr "Velg visuelt tema:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Deaktiver Rammebegrensning" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Brukbar for Ã¥ kjøre ytelses tester. Velg denne i spillet ved Ã¥ trykke F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Grunn Rammehastighets Innstillinger:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Treg modus Innstillinger:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbo Innstillinger:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC Rammehastighet:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL Rammehastighet:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2536,19 +2664,19 @@ "Innstillingene mÃ¥ være ekte flyt talls verdier (1.0, 0.002, 3.532 ol. Ikke " "1,2,3)." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Deaktivert [standard]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Hopp over nÃ¥r turbo er aktivert (TAB for Ã¥ aktivere)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Hopp konstant over." -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2556,19 +2684,19 @@ "Normal og Turbo begrens rammer som hoppes over. Treg Modus vil enda " "deaktivere ramme hopping." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Rammer Ã¥ tegne." -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Rammer Ã¥ hoppe over." -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Bruk Synkronisert MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2576,11 +2704,11 @@ "For feilsøking av potensielle fil i kun MTGS, siden det kan potensielt være " "veldig tregt." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Deaktiver all GS output" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2588,11 +2716,11 @@ "Fullstendig deaktivering alle GS tilleggs aktiviteter; ideelt for ytelses " "mÃ¥ling av Eecore komponenter." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Ramme Hopping" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Rammebegrensning" @@ -2630,7 +2758,7 @@ "Dette lageret kan ikke lastes siden det mangler kritiske komponenter. Se " "log filen for detaljer." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(Standard)" @@ -2651,7 +2779,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Den konfigurerte BIOS filen eksisterer ikke, Vennligst re-konfigurer" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2668,6 +2796,15 @@ "%s Utvidelse ikke funnet. microVU krever en vert CPU med MMX, SSE, og SSE2 " "utvidelsene." +#~ msgid "Betatesting" +#~ msgstr "Betatesting" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS velger" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Velg CDVD kilde ISO..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 Anbefalt" diff -Nru pcsx2-1.3.1+dfsg/locales/pl_PL/pcsx2_Iconized.po pcsx2-1.4.0/locales/pl_PL/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/pl_PL/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/pl_PL/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 1.1.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-08-13 05:40+0100\n" "Last-Translator: Miseru99 \n" "Language-Team: Miseru99 \n" @@ -42,7 +42,7 @@ "PSX\n" "musisz Å›ciÄ…gnąć emulator PSX taki jak ePSXe lub PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -58,7 +58,7 @@ "zredukować\n" "standardowy rozmiar cache dla rekompilatorów PCSX2, pod ustawieniami Hosta." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -67,7 +67,7 @@ "virtualnej maszynie PS2.\n" "Zamknij niepotrzebne programy i usÅ‚ugi dziaÅ‚ajÄ…ce w tle i spróbuj ponownie." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -75,7 +75,7 @@ "Uwaga: Niektóre ze skonfigurowanych rekompilatorów zawiodÅ‚y i zostaÅ‚y " "wyÅ‚Ä…czone." -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -86,7 +86,7 @@ "BÄ™dziesz musiaÅ‚ rÄ™cznie przywrócić wymienione rekompilatory jeÅ›li rozwiążesz " "problemy." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -98,7 +98,7 @@ "szczegóły proszÄ™ zapoznaj\n" "siÄ™ z FAQ oraz poradnikami." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -125,7 +125,36 @@ "przeÅ‚Ä…czyć opcje\n" "na Tryb użytkownika - Moje Dokumenty(kliknij przycisk poniżej)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -209,6 +238,13 @@ "zapisu gry.\n" "Może nie być kompatybilne ze wszystkimi grami (np. Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -286,7 +322,7 @@ "Ta akcja zresetuje istniejÄ…cy stan virtualnej maszyny PS2;\n" "Dotychczasowy stan gry zostanie utracony. JesteÅ› pewien?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -306,7 +342,7 @@ "Czy jesteÅ› ABSOLUTNIE pewien, że tego chcesz?\n" "(Informacja: Ustawienia wtyczek nie bÄ™dÄ… naruszone)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -317,7 +353,12 @@ "wÅ‚Ä…czyć slot ponownie\n" "używajÄ…c Konfiguracji - Karty PamiÄ™ci z głównego menu." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -325,11 +366,11 @@ "ProszÄ™ użyć poprawnego BIOSu. JeÅ›li takiego nie posiadasz, naciÅ›nij\n" "'Anuluj' aby zamknąć panel konfiguracji." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Uwaga: WiÄ™kszość gier chodzi dobrze na standardowych ustawieniach." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Uwaga: WiÄ™kszość gier chodzi dobrze na standardowych ustawieniach." @@ -455,7 +496,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Åatki do gier mogÄ… poprawić dziaÅ‚anie pewnych tytułów.\n" "MogÄ… też jednak pogorszyć dziaÅ‚anie innych.\n" @@ -481,7 +523,7 @@ "('Automatyczne' znaczy: wybrane dla sprawdzonych gier, którym poprawia " "wydajność/bÅ‚Ä™dy)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -490,14 +532,14 @@ "Chcesz usunąć sformatowanÄ… kartÄ™ pamiÄ™ci '%s'.\n" "Wszystkie dane na tej karcie bÄ™dÄ… utracone! Czy jesteÅ› pewien?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Porażka: Sklonować możesz tylko do pustego slotu PS2 lub na dysk do " "wybranego katalogu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Porażka: Docelowa Karta PamiÄ™ci '%s' w użyciu." @@ -584,37 +626,53 @@ "'Anuluj' by zamknąć\n" "panel konfiguracji." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - Standardowa skala cyklu. Bliska oryginalnej prÄ™dkoÅ›ci prawdziwego " -"Silnika Emotion(EE) PS2." +"3 - Redukuje cykle EE o okoÅ‚o 50%. Przyspiesza\n" +"w niektórych grach ale może spowodować\n" +"'dÅ‚awienie siÄ™' dźwiÄ™ku w wielu animacjach." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - Redukuje cykle EE o okoÅ‚o 33%. Åšrednie przyspieszenie w wiÄ™kszoÅ›ci gier " "i spora kompatybilność." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." msgstr "" -"3 - Redukuje cykle EE o okoÅ‚o 50%. Przyspiesza\n" -"w niektórych grach ale może spowodować\n" -"'dÅ‚awienie siÄ™' dźwiÄ™ku w wielu animacjach." +"1 - Standardowa skala cyklu. Bliska oryginalnej prÄ™dkoÅ›ci prawdziwego " +"Silnika Emotion(EE) PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Deaktywuje podkradanie cykli VU. Najbardziej kompatybilne ustawienie!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -622,7 +680,7 @@ "1 - Drobne podkradanie cykli VU. Niższa kompatybilność, lecz możliwe " "przyspieszenie w niektórych grach." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -630,7 +688,7 @@ "2 - Åšrednie podkradanie cykli VU. Jeszcze niższa kompatybilność, lecz spore " "przyspieszenia w niektórych grach." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -639,7 +697,7 @@ "powodować znaczne spadki\n" "prÄ™dkoÅ›ci i inne graficzne udziwnienia w wielu grach." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -650,11 +708,15 @@ "a także bÅ‚Ä™dne odczyty FPS. Podczas wystÄ…pienia jakichkolwiek bÅ‚Ä™dów, " "zacznij od wyÅ‚Ä…czenia tego panelu." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Ustawienie wyższych wartoÅ›ci na tym wskaźniku efektywnie redukuje prÄ™dkość " "procesora\n" @@ -662,7 +724,7 @@ "gier, które nie sÄ…\n" "w stanie w peÅ‚ni wykorzystać prÄ™dkoÅ›ci konsoli PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -673,7 +735,7 @@ "ilość skradzionych cykli używanych na każdy mikroprogram uruchamiany przez " "grÄ™." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -684,7 +746,7 @@ "Jest to bezpieczne w wiÄ™kszoÅ›ci przypadków, SuperVU robi coÅ› podobnego w " "standardzie." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -698,7 +760,7 @@ "Na gry ograniczone wÄ…tkiem GS może to mieć odwrotny skutek, szczególnie przy " "2-rdzeniowych procesorach." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -709,7 +771,7 @@ "głównie wszelkie nie zrobione w 3D RPGi. Inne gry nie bÄ™dÄ… miaÅ‚y z tego " "żadnego, lub minimalny pożytek." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -724,7 +786,7 @@ "odtwarza je\n" "dopiero gdy to zdarzenie nastÄ…pi." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -733,7 +795,7 @@ "Å‚atkÄ… problemy.\n" "(Zwykle oznaczone jako wymagajÄ…ce 'trybu 1' lub 'wolnego DVD')" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -741,7 +803,7 @@ "Miej na uwadze, że przy wyÅ‚Ä…czonym limicie klatek animacji,\n" "tryby Przyspieszony i Spowolniony nie bÄ™dÄ… dostÄ™pne." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -752,7 +814,7 @@ "WÅ‚Ä…czenie tej opcji z caÅ‚Ä… pewnoÅ›ciÄ… bÄ™dzie\n" "powodowaÅ‚o masÄ™ bÅ‚Ä™dów graficznych w wielu grach." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -760,7 +822,7 @@ "Użyj tej opcji jeÅ›li podejrzewasz, że synchronizacja wÄ…tku MTGS\n" "odpowiada za zawieszanie siÄ™ lub graficzne bÅ‚Ä™dy w jakiejÅ› grze." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -777,7 +839,7 @@ "Uwaga: Ta opcja może być wÅ‚Ä…czona w każdym momencie, lecz nagle wyÅ‚Ä…czona, " "bÄ™dzie powodować bÅ‚Ä™dy graficzne." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/pl_PL/pcsx2_Main.po pcsx2-1.4.0/locales/pl_PL/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/pl_PL/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/pl_PL/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 1.1.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2012-08-13 05:40+0100\n" "Last-Translator: Miseru99 \n" "Language-Team: Miseru99 \n" @@ -23,15 +23,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Brak podanych powodów." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "BÅ‚Ä…d skÅ‚adni" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Twój sprzÄ™t nie jest w stanie uruchomić PCSX2. Å»ycie... :3" @@ -99,7 +99,7 @@ "Zawiera bezczynne przetwarzanie zdarzeÅ„ oraz kilka innych rzadziej " "spotykanych rozwiÄ…zaÅ„." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Nierozpoznany format obrazu pÅ‚yty" @@ -115,7 +115,7 @@ "Podczas uruchamiania z obrazu pÅ‚yty, ten bÅ‚Ä…d może być spowodowany " "nieobsÅ‚ugiwanym typem lub bÅ‚Ä™dem w obsÅ‚udze obrazów pÅ‚yty przez PCSX2." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." @@ -123,13 +123,13 @@ "WÄ…tek MTGS przestaÅ‚ odpowiadać podczas oczekiwania na otwarcie wtyczki " "graficznej." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Ten zapis gry nie może być wczytany, wyglÄ…da na uszkodzony lub niekompletny." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -138,7 +138,7 @@ "Wtyczka %s nie mogÅ‚a być otwarta. Twój komputer może mieć niewystarczajÄ…ce " "zasoby, lub niekompatybilne podzespoÅ‚y/sterowniki." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -147,17 +147,17 @@ "Wtyczka %s nie zostaÅ‚a uruchomiona. Twój system może mieć niewystarczajÄ…cÄ… " "ilość pamiÄ™ci bÄ…dź wymaganych zasobów." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Plik skonfigurowanej wtyczki %s nie zostaÅ‚ znaleziony." -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Plik skonfigurowanej wtyczki %s nie jest prawidÅ‚owÄ… bibliotekÄ… dll." -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -166,14 +166,14 @@ "Skonfigurowana wtyczka %s nie jest prawidÅ‚owym rozszerzeniem PCSX2 lub jest " "przeznaczona do starszej wersji." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Wtyczka uprzejmie donosi, że Twój sprzÄ™t lub oprogramowanie nie jest " "obsÅ‚ugiwane." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -181,7 +181,7 @@ "Skonfigurowana wtyczka nie jest wtyczkÄ… PCSX2 lub jest przeznaczona do " "starszej wersji." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -190,11 +190,11 @@ "Skonfigurowana wtyczka %s nie jest prawidÅ‚owÄ… wtyczkÄ… PCSX2 lub przeznaczona " "jest do starszej wersji." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Nie udaÅ‚o siÄ™ uruchomić wbudowanej wtyczki Kart PamiÄ™ci." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Wtyczka wyÅ‚Ä…czona" @@ -354,11 +354,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Wyszczególniony zapis sprzÄ™tu CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Wiadomość PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -366,31 +366,31 @@ "Ten zapis gry nie zostaÅ‚ poprawnie zachowany. Tymczasowa kopia zostaÅ‚a " "stworzona pomyÅ›lnie, lecz nie mogÅ‚a być przeniesiona we wÅ‚aÅ›ciwe miejsce." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Najbezpieczniejszy" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Bezpieczny (szybszy)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Zbalansowany" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresywny" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Agresywny Plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Głównie Szkodliwy" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Nie udaÅ‚o siÄ™ nadpisać istniejÄ…cego pliku ustawieÅ„; odmowa dostÄ™pu." @@ -398,7 +398,7 @@ msgid "Loading PS2 system plugins..." msgstr "Wgrywanie wtyczek systemu PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -407,94 +407,99 @@ "Rozszerzenia SSE sÄ… niedostÄ™pne. PCSX2 wymaga procesora wyposażonego w " "zestaw instrukcji SSE." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "BlÄ…d/BÅ‚Ä™dy recompilatora PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Wszystkie opcje sÄ… wyÅ‚Ä…cznie dla obecnej sesji i nie zostanÄ… zachowane. \n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "PlikISO" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "wyÅ›wietla tÄ™ listÄ™ parametrów wiersza poleceÅ„" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "wymusza widoczność okna statusu/konsoli" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "użyj peÅ‚noekranowego trybu" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "wyÅ›wietlaj obraz w oknie" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "wyÅ‚Ä…cza wyÅ›wietlanie GUI podczas dziaÅ‚ania gry" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "uruchamia obraz ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "zaÅ‚adowuje pustÄ… pÅ‚ytÄ™ DVD; użyj by wejść do menu systemowego PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "odtwarza z wtyczki CDVD (nadpisuje parametr PlikuISO)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "wyÅ‚Ä…cza wszystkie przyspieszajÄ…ce emulacjÄ™ sztuczki" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "użyj wyszczególnionej przecinkami lub pionowymi kreskami listy poprawek do " "gier" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "wyÅ‚Ä…cza szybkie odtwarzanie" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "zmienia Å›cieżkÄ™ dostÄ™pu do pliku konfiguracji" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "ustala plik konfiguracji PCSX2 do użycia" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "wymusza %s do uruchomienia Pomocnika Konfiguracji" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "pozwala na operowanie w trybie przenoÅ›nym (wymaga poziomu dostÄ™pu admin/root)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "okreÅ›l plik do użycia jako wtyczka %s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "BÅ‚Ä…d Nadpisania Wtyczki - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -505,96 +510,96 @@ "prawidÅ‚owÄ… wtyczkÄ… %s:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "NaciÅ›nij OK aby użyć standardowo skonfigurowanej wtyczki lub Anuluj by " "zamknąć %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "BÅ‚Ä…d PCSX2: Niedostatek mocy" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "NaciÅ›nij OK aby zamknąć %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "BÅ‚Ä…d Krytyczny %s" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Anuluj" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Anuluj" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Zatwierdź" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&NastÄ™pna Strona >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Cofnij" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Cofnij" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&ZakoÅ„cz" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Tak" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Nie" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "PrzeglÄ…daj" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Zapisz" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Zapisz &Jako..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Pomoc" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Dom" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Pokaż opis" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -604,43 +609,50 @@ "\n" "NaciÅ›nij OK aby przejść do Panelu Konfiguracji Wtyczek." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "UWAGA! Wtyczki systemowe nie zostaÅ‚y zaÅ‚adowane. PCSX2 może nie reagować na " "polecenia." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Opcje Wiersza PoleceÅ„" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "BÅ‚Ä…d BIOS'u PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "NaciÅ›nij OK aby przejść do Panelu Konfiguracji BIOS'u." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"UWAGA! Wtyczki systemowe nie zostaÅ‚y zaÅ‚adowane. PCSX2 może nie reagować na " +"polecenia." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Opcje Wiersza PoleceÅ„" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "NiereagujÄ…cy wÄ…tek PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Zlikwiduj" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Odtwarzanie Virtualnej Maszyny PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "PrzeglÄ…daj w poszukiwaniu ISO nie zapisanego w historii." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "PrzeglÄ…daj..." @@ -688,51 +700,52 @@ "Nie można zachować nowych ustawieÅ„, co najmniej jedna opcja jest " "nieprawidÅ‚owa." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Pytanie o zachowanie statusu" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "MieÅ›ci sporo zapisu w bardzo maÅ‚ej powierzchni." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "MaÅ‚y" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Tego sam używam (programista)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normalny" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Przejrzyste i czytelne." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Duży" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Olbrzymi" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "W razie posiadania wyÅ›wietlacza o bardzo dużej rozdzielczoÅ›ci." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Standardowy Å‚agodny schemat kolorów." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Jasny temat" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -740,84 +753,94 @@ "Klasyczny czarny temat kolorów, dla ludzi lubiÄ…cych gdy tekst wbija im siÄ™ w " "nerwy wzrokowe." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Ciemny temat" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Zawsze na wierzchu" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "Gdy zaznaczone, okno statusu bÄ™dzie widoczne zawsze na wierzchu." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Zapis..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Zapisz opis statusu do pliku" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&Wyczyść" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Wyczyść zawartość okna statusu" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "WyglÄ…d" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Zamknij" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Zamknij to okno statusu; zawartość pozostaje zachowana" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Pokazuje zapisy przydatne dla programistów PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Odczyty CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Pokazuje aktywność odczytywania dysku" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Aktywuj wszystko" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Aktywuje pokazywanie wszystkich źródÅ‚owych opisów w oknie statusu." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Dezaktywuj wszystko" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Deaktywuje pokazywanie źródÅ‚owych opisów w oknie statusu" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Przywróć Standardowe ustawienia" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Aktywuje pokazywanie wszystkich źródÅ‚owych opisów w oknie statusu." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Status" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Opisy ŹródÅ‚a" @@ -830,48 +853,45 @@ msgid "About %s" msgstr "O %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Ekipa TestujÄ…ca" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Poprzednie wersje" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmasterzy" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Twórcy Wtyczek" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Specjalne podziÄ™kowania dla" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Deweloperzy" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "ZasÅ‚użeni" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Emulator Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 Oficjalna Strona oraz Forum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2 Oficjalna Repozytornia SVN na GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Już siÄ™ napatrzyÅ‚em" @@ -879,46 +899,115 @@ msgid "Assertion Failure - " msgstr "NieprawidÅ‚owe Stwierdzenie -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Saves a snapshot of this settings panel to a PNG file." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Zapisz obrazek z ustawieniami do..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Wybór BIOS'u" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Nie pokazuj wiÄ™cej tego komunikatu." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "" "WyÅ‚Ä…cza ten komunikat ustawiajÄ…c obecnÄ… odpowiedź do przyszÅ‚ych zapytaÅ„." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "" "Okienko nie bÄ™dzie wiÄ™cej pokazywane. Możesz to zmienić w panelu ustawieÅ„." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignoruj" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Resetuj" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Katalogi" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "BÅ‚Ä…d (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Stwórz kartÄ™ pamiÄ™ci" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Stwórz nowÄ… kartÄ™ pamiÄ™ci" @@ -940,30 +1029,30 @@ msgid "Select file name: " msgstr "Wybierz nazwÄ™ pliku:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "BÅ‚Ä…d (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Stwórz kartÄ™ pamiÄ™ci" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "BÅ‚Ä…d: Karta pamiÄ™ci nie mogÅ‚a być utworzona." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "BÅ‚Ä…d: Karta pamiÄ™ci nie mogÅ‚a być utworzona." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Użyj kompresji NTFS tworzÄ…c tÄ… kartÄ™." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [najbardziej kompatybilna]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -971,7 +1060,7 @@ "Standardowa karta pamiÄ™ci, najstabilniejsza, dziaÅ‚ajÄ…ca ze wszystkimi grami " "i wersjami BIOS'u." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -979,37 +1068,37 @@ "Zawsze używaj tej opcji jeÅ›li pragniesz najbezpieczniejszego i " "najpewniejszego dziaÅ‚ania kart pamiÄ™ci." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "Standardowej wielkoÅ›ci karta jakÄ… można dokupić do zestawu." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 i 32 MB karty pamiÄ™ci majÄ… mniej wiÄ™cej podobnÄ… kompatybilność." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "" "Ostrzeżenie: Tak, ta karta jest duża, lecz może nie dziaÅ‚ać z wieloma grami." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1017,6 +1106,22 @@ "Używaj na wÅ‚asnÄ… odpowiedzialność, bÅ‚Ä™dne dziaÅ‚anie karty pamiÄ™ci " "prawdopodobne(choć rzadkie)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1027,6 +1132,7 @@ msgstr "Ustawienia" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Wybór JÄ™zyka" @@ -1080,15 +1186,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Automatycznie odÅ‚Ä…cz karty pamiÄ™ci podczas wgrywania zapisu gry" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Menadżer Kart PamiÄ™ci" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Przemieść karty do lub z portów PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1152,24 +1262,24 @@ msgid "Game Fixes" msgstr "Poprawki do gier" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Ustawienia Komponentów - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Wtyczki" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Katalogi" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "WyglÄ…d/Tematy - %s" @@ -1191,47 +1301,51 @@ msgid "Terminate App" msgstr "Likwiduj AplikacjÄ™" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "WyjÅ›cie obrazu(GS) wyÅ‚Ä…czone!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Zapisz stan" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Zapisuje stan gry do wybranego slotu." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Wgraj zapis" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Wgrywa zapisany stan gry z wybranego slotu." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Wgraj KopiÄ™ ZapasowÄ… Zapisu" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Wgrywa kopiÄ™ zapasowÄ… wybranego zapisu gry." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Przestaw na kolejny slot" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Wybiera kolejny slot zapisu gry." -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Przestaw na poprzedni slot" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Wybiera poprzedni slot zapisu gry." @@ -1248,7 +1362,7 @@ "BÅ‚Ä…d powstaÅ‚y w wyniku przeniesienia wielu plików na okno %s. Możesz " "przenieść tylko jeden na raz." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Potwierdź reset PS2" @@ -1266,374 +1380,374 @@ msgid "You have dropped the following ISO image into %s:" msgstr "UpuÅ›ciÅ‚eÅ› nastÄ™pujÄ…ce obrazy ISO na %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Kopia zapasowa" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Pokazuj KonsolÄ™" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsola do Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&System" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfiguracja" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Różne" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Odbugowanie" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Inicjalizacja..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Uruchom ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Uruchamia surowe binarki PS2" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Zrób kopiÄ™ przed zapisem" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatyczne Poprawki" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Automatycznie uruchamia istniejÄ…ce poprawki do gier sprawiajÄ…cych problemy" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Aktywuj Cheaty" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "Aktywuj Å‚atki przyspieszajÄ…ce" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Aktywuj System Plików Hosta" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Przerwij EmulacjÄ™" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Zamyka wszystkie Virtualne Maszyny i wtyczki." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "WyjÅ›cie" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Zamyka %s - może szkodzić zdrowiu" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Wybierz ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu Wtyczek" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Wybiera zaznaczony obraz ISO jako źródÅ‚o z grÄ…." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Wtyczka" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Używa zewnÄ™trznej wtyczki jako źródÅ‚o gry." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Brak pÅ‚yty" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Użyj tego by wejść do ustawieÅ„ BIOS'u swojej wirtualnej PS2." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "&Ustawienia Emulacji" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Karty PamiÄ™ci" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&Wybór Wtyczek/BIOS'u" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Edytor Bazy Gier" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Obraz (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&DźwiÄ™k (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Kontrolery (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Wyczyść wszystkie ustawienia..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Usuwa wszelkie ustawienia %s i uruchamia od nowa pomocnika konfiguracji." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "O twórcach..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Zapisywanie..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pauza" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Bezpiecznie zatrzymuje emulacjÄ™ przechowujÄ…c obecny stan gry." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Kontynuuj" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Przywraca zatrzymanÄ… grÄ™." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pauza/Kontynuacja" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Å»adna gra nie uruchomiona, nie możesz zatrzymać ani kontynuować." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Restart" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Symuluje sprzÄ™towy reset konsoli PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Nic nie emulujesz; uruchom coÅ› najpierw." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Ponownie Uruchom CDVD (peÅ‚ne)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Twardy reset aktywnej maszyny wirtualnej." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Uruchom CDVD (peÅ‚ne)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "" "Uruchamia wirtualnÄ… maszynÄ™ używajÄ…c obecnie wybranego DVD lub obrazu pÅ‚yty." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Ponownie Uruchamia CDVD (szybko)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "" "Ponownie uruchamia stosujÄ…c szybkie uruchomienie (pomija ekrany startowe ps2)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Uruchom CDVD (szybko)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Używa szybkiego uruchomienia pomijajÄ…c ekrany startowe PS2." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Wtyczki nie wgrane" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Ustawienia silnika graficznego..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "" "Zmienia emulacjÄ™ sprzÄ™tu okreÅ›lanÄ… przez silnik wirtualnej maszyny PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Ustawienia Okna..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Zmienia ustawienia wyÅ›wietlania okna, w tym proporcji." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Ustawienia Wtyczki..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Otwiera okno ustawieÅ„ zaawansowanych wtyczek %s." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Resetować wszystkie ustawienia?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Potwierdź zmianÄ™ obrazu ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Czy chcesz podmienić dyski czy uruchomić nowy obraz (poprzez reset systemu)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "PodmieÅ„ Dysk" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Potwierdź zmianÄ™ źródÅ‚a CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "WybraÅ‚eÅ› zmianÄ™ źródÅ‚a CDVD z %s na %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Czy chcesz podmienić dyski czy uruchomić nowy obraz (reset systemu)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Wszystkie obsÅ‚ugiwane (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Obrazy pÅ‚yt (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Zrzuty bloków (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Zrzuty bloków (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Wszystkie pliki (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Wybierz źródÅ‚owe ISO dla CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Wybierz plik ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Plik ISO nie znaleziony!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "PojawiÅ‚ siÄ™ bÅ‚Ä…d podczas próby otwarcia pliku:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1641,7 +1755,7 @@ "BÅ‚Ä…d: Ustawiony plik ISO nie istnieje. NaciÅ›nij OK by wybrać nowy obraz ISO " "dla CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1649,7 +1763,7 @@ "WybraÅ‚eÅ› nastÄ™pujÄ…cy obraz ISO w PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1662,7 +1776,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1675,19 +1789,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nazwa pliku pusta lub zbyt krótka" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nazwa pliku poza wymaganym katalogiem" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Taka nazwa pliku już istnieje" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "System Operacyjny nie zezwala na stworzenie tego pliku" @@ -1695,15 +1809,15 @@ msgid "Cannot apply settings..." msgstr "Nie można zastosować ustawieÅ„..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Åšcieżka szukania BIOS'u:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Wybierz katalog z zapisem BIOS'u PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1711,13 +1825,13 @@ "NaciÅ›nij przycisk 'PrzeglÄ…daj' aby wybrać inny folder gdzie PCSX2 bÄ™dzie " "szukać zapisu BIOS'u PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "OdÅ›wież listÄ™" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Wybierz plik BIOS'u" @@ -1749,71 +1863,75 @@ msgid "None" msgstr "Å»aden" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normalny" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU Zaawansowane Opcje Rekompilera" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Dodatkowy z Zachowaniem Znaku" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "PeÅ‚ny" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0/VU1 Zaawansowane Opcje Rekompilera" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Dodatkowy" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "CaÅ‚kiem możliwe - najwolniejsza rzecz we wszechÅ›wiecie." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Rekompilator" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "" "Przetwarza jÄ™zyk maszynowy z 64-bit MIPS-IV na x86 dokÅ‚adnie-kiedy-trzeba." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Dość powolne; tylko do celów diagnostycznych." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "" "Przetwarza jÄ™zyk maszynowy z 32-bit MIPS-I na x86 dokÅ‚adnie-kiedy-trzeba." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "WÅ‚Ä…cz cache EE - Tylko Interpreter! (Powolne)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Tylko interpreter; udostÄ™pnione dla celów diagnostycznych" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Przywróć Standardowe ustawienia" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1821,22 +1939,22 @@ "Interpreter Jednostki Wektorowej. Powolne i niezbyt kompatybilne. Tylko do " "diagnozowania." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Rekompilator microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Nowy rekompilator Jednostki Wektorowej z dużo polepszonÄ… kompatybilnoÅ›ciÄ…. " "Zalecany." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Rekompilator superVU [dziedziczony]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2012,7 +2130,7 @@ msgstr "Ignoruj kierunek transferu w Path3 - dla Hotwheels." #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2043,86 +2161,91 @@ "Uwaga: Pozwolenie na zapisywanie przebiegu zwykle bardzo spowalnia emulacjÄ™ " "i prowadzi do gÅ‚upich pytaÅ„ w stylu \"Gdzie siÄ™ podziaÅ‚y moje FPSy?\" ^_^" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Zaznacz katalog z kartami pamiÄ™ci PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "OdÅ‚Ä…cz" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Sklonuj..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "ZmieÅ„ nazwÄ™..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Utwórz..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "PodÅ‚Ä…cz..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Karta:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Stwórz nowÄ… kartÄ™ pamiÄ™ci." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "ZmieÅ„ nazwÄ™ tej karty pamiÄ™ci..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "PodÅ‚Ä…cz..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "OdÅ‚Ä…cz kartÄ™ z tego portu" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "PodÅ‚Ä…cz tÄ… kartÄ™ do portu..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Utwórz kopiÄ™ tej karty pamiÄ™ci..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "UsuÅ„" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Nieodwracalnie kasuje kartÄ™ pamiÄ™ci z dysku (zawartość jest utracona)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Tworzy nowÄ… kartÄ™ pamiÄ™ci i przypisuje jÄ… do tego Portu." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Usunąć kartÄ™ pamiÄ™ci?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Sklonuj kartÄ™ pamiÄ™ci" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Niepowodzenie: Można sklonować tylko istniejÄ…cÄ… kartÄ™." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2130,25 +2253,25 @@ "Utwórz nazwÄ™ dla kopii\n" "( '.ps2' zostanie dodane automatycznie)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "KlÄ™ska: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopiowanie nawaliÅ‚o!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Karta pamiÄ™ci '%s' skopiowana jako '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Sukces" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2157,121 +2280,126 @@ "Wyznacz nowÄ… nazwÄ™ dla karty pamiÄ™ci '%s'\n" "( '.ps2' zostanie dodane automatycznie)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "ZmieÅ„ nazwÄ™ karty" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "BÅ‚Ä…d: Zmiana nazwy nie możliwa.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Brak" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Wybierz port docelowy dla '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "PodÅ‚Ä…cz kartÄ™" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "OdÅ‚Ä…cz kartÄ™" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "PodÅ‚Ä…cz kartÄ™..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Sklonuj kartÄ™..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "ZmieÅ„ nazwÄ™..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Wykasuj kartÄ™" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "PodÅ‚Ä…cz kartÄ™" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Utwórz nowÄ… kartÄ™..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "OdÅ›wież ListÄ™" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Port PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Nazwa (pliku) Karty" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Rozmiar Karty" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Sformatowana?" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Ostatnia modyfikacja" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Stworzona" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Nie" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Tak" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- NiepodÅ‚Ä…czone Karty --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Brak NiepodÅ‚Ä…czonych Kart --]" @@ -2304,11 +2432,11 @@ msgid "Select a document root for %s" msgstr "Wyznacz Å›cieżkÄ™ dokumentów dla %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Zastosuj" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Ustaw ten jÄ™zyk za mój podstawowy!" @@ -2386,22 +2514,22 @@ "Powód: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "KoÅ„czenie zadaÅ„..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Aktywuj Å‚atki przyspieszajÄ…ce" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Bezpieczny i Å‚atwy sposób upewnienia siÄ™, że wszystkie Å‚atki przyspieszajÄ…ce " "sÄ… wyÅ‚Ä…czone." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2409,34 +2537,34 @@ "Resetuje Å‚atki przyspieszajÄ…ce do ich standardowych wartoÅ›ci - wyÅ‚Ä…czajÄ…c je " "kompletnie." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "Skala Cykli EE [Nie zalecane]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "Podkradanie Cykli VU [Nie zalecane]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hack'i microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Dobre przyspieszenie i duża kompatybilność; może powodować bÅ‚Ä™dy grafiki... " "[Zalecane]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU(Wielo-WÄ…tkowe microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2445,15 +2573,15 @@ "powodować niestabilność...\n" "[Zalecane dla 3+ rdzeniowych procesorów]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Inne Hack'i" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Aktywuj DetekcjÄ™ Rozruchu INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2461,22 +2589,22 @@ "Ogrome przyspieszenie w pewnych grach, zwykle nie ma efektów ubocznych. " "[Zalecane]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Aktywuj Wykrywanie Poczekania na PÄ™tlÄ™" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Åšrednie przyspieszenie dla niektórych gier, bez znanych efektów ubocznych. " "[Zalecane]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Aktywuj szybkie CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "" "Szybki dostÄ™p do dysku, mniejsze czasy wgrywania.\n" @@ -2502,40 +2630,40 @@ msgid "Select a visual theme:" msgstr "Wybierz temat graficzny:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "WyÅ‚Ä…cz limiter klatek" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "Użyteczne przy sprawdzaniu wydajnoÅ›ci. PrzeÅ‚Ä…czaj naciskajÄ…c F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Regulacja Klatek Animacji:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Tryb Spowolniony:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Tryb Przyspieszony:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Ilość klatek systemu NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Ilość klatek systemu PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2543,19 +2671,19 @@ "BÅ‚Ä…d podczas skÅ‚adania ustawieÅ„ klatek animacji NTSC lub PAL. Ustawienia " "muszÄ… zawierać prawidÅ‚owe liczby rzeczywiste." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "WyÅ‚Ä…czone [standardowo]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Pomijaj tylko w trybie przyspieszonym (TAB przeÅ‚Ä…cza)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Stale pomijaj" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2563,19 +2691,19 @@ "Normalny i Przyspieszony limit pomija klatki animacji. Spowolniony nadal " "wyÅ‚Ä…cza pomijanie." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Klatek do Pokazania" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Klatek do PominiÄ™cia" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Użyj Synchronizowanego MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2583,11 +2711,11 @@ "Tylko w celach testowych i wyÅ‚apywania potencjalnych bÅ‚Ä™dów w MTGS gdyż jest " "potencjalnie bardzo wolne." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "WyÅ‚Ä…cz caÅ‚kowicie wyÅ›wietlanie obrazu" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2595,11 +2723,11 @@ "CaÅ‚kowicie wyÅ‚Ä…cza caÅ‚Ä… aktywność silnika graficznego; idealne do testowania " "componentów EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Pomijanie Klatek Animacji" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Limiter Klatek Animacji" @@ -2644,7 +2772,7 @@ "Ten zapis stanu nie może być wczytany przez brak elementów skÅ‚adowych. " "Przeczytaj zapis statusu dla peÅ‚nych informacji." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(standardowy)" @@ -2666,7 +2794,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Ustawiony plik BIOS'u nie istnieje. ProszÄ™ ponownie skonfigurować." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2683,6 +2811,15 @@ "Rozszerzenia %s nie znalezione. Recompilator microVU wymaga procesora " "obsÅ‚ugujÄ…cego rozszerzenia MMX, SSE oraz SSE2." +#~ msgid "Betatesting" +#~ msgstr "Ekipa TestujÄ…ca" + +#~ msgid "BIOS Selector" +#~ msgstr "Wybór BIOS'u" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Wybierz źródÅ‚owe ISO dla CDVD..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - Zalecane SSE2" diff -Nru pcsx2-1.3.1+dfsg/locales/pt_BR/pcsx2_Iconized.po pcsx2-1.4.0/locales/pt_BR/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/pt_BR/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/pt_BR/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -1,15 +1,15 @@ # Brazilian Portuguese Translation for pcsx2 (Iconized) -# Copyright (C) 2014 PCSX2 Dev Team +# Copyright (C) 2015 PCSX2 Dev Team # This file is distributed under the same license as the PCSX2 package. -# Rafael Ferreira , 2011, 2012, 2013, 2014. +# Rafael Fontenelle , 2011, 2012, 2013, 2014, 2015. # msgid "" msgstr "" "Project-Id-Version: pcsx2 iconized master\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-12-23 13:39-0300\n" -"Last-Translator: Rafael Ferreira \n" +"POT-Creation-Date: 2015-12-22 10:08-0200\n" +"PO-Revision-Date: 2015-12-22 10:49-0200\n" +"Last-Translator: Rafael Fontenelle \n" "Language-Team: \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -18,7 +18,7 @@ "X-Poedit-KeywordsList: pxE;pxEt\n" "X-Poedit-SourceCharset: utf-8\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.7.1\n" +"X-Generator: Poedit 1.8.6\n" #: common/src/Utilities/Exceptions.cpp:275 msgid "" @@ -39,7 +39,7 @@ "emular jogos de PSX, então você terá que fazer download de um emulador " "especificamente para PSX, como ePSXe ou PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -51,7 +51,7 @@ "virtual, como um arquivo de memória swap pequeno ou desabilitado, ou por " "outro programa que está ocupando muita memória." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -60,7 +60,7 @@ "PS2. Feche algumas tarefas que estejam utilizando muita memória e tente " "novamente." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -68,7 +68,7 @@ "Aviso: Alguns recompiladores de PS2 configurados falharam em inicializar e " "foram desativados:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -79,7 +79,7 @@ "você tenha que ativar novamente os recompiladores listados acima, se você " "solucionar os erros." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -89,7 +89,7 @@ "*deve* obter uma BIOS de uma unidade PS2 que você possua (pegar emprestado " "não conta). Por favor consulte os FAQs e os Guias para mais instruções." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -115,7 +115,50 @@ "permissões elevadas nesse computador, então você vai precisar alternar para " "o modo de Documentos do Usuário (clique no botão abaixo)" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" +"Por favor, note que o arquivo resultante pode não exatamente conter todos os " +"saves, dependendo de quantos estiverem armazenados no cartão de memória " +"original." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" +"AVISO: Converter um cartão de memória pode levar um tempo! Por favor, não " +"feche o emulador durante o processo de conversão, mesmo se o emulador não " +"estiver mais respondendo aos comandos do teclado, mouse, etc." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" +"Converte este cartão de memória para um arquivo padrão de cartão de memória " +"(.ps2) de 8 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" +"Converte este cartão de memória para um arquivo padrão de cartão de memória " +"(.ps2) de 16 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" +"Converte este cartão de memória para um arquivo padrão de cartão de memória " +"(.ps2) de 32 MB." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" +"Converte este cartão de memória para um arquivo padrão de cartão de memória " +"(.ps2) de 64 MB." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -197,6 +240,16 @@ "dos cartões após carregados os savestates. Pode não ser compatível com todos " "jogos (ex: Guitar Hero)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(Tipo pasta apenas) Indexa novamente o conteúdo do cartão de memória a cada " +"alteração do software em execução. Isso evita que o cartão de memória de " +"ficar sem espaço para saves." + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -279,7 +332,7 @@ "Essa ação vai redefinir o estado da máquina virtual existente de PS2; todo " "progresso atual será perdido. Você tem certeza?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -300,7 +353,7 @@ "\n" "(nota: configurações dos plug-ins não serão afetadas)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -312,7 +365,14 @@ "e ativá-lo novamente a qualquer tempo em Configuração:Cartões de Memória, no " "menu principal." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" +"(Pasta Cart.Mem.) Cartão de memória está cheio, não foi possível adicionar: " +"%s" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -320,11 +380,11 @@ "Por favor selecione uma BIOS válida. Se você não conseguir fazer uma seleção " "válida, então pressione Cancelar para fechar o painel de Configuração." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Nota: A maioria dos jogos ficarão bem, com as opções padrões." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Nota: A maioria dos jogos ficarão bem, com as opções padrões." @@ -447,11 +507,13 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "É melhor habilitar 'Correções de Jogos Automáticas' no menu principal, e " "deixar esta página vazia. ('Automáticas' significa: uso seletivo testado " -"especificamente para jogos específicos)" +"especificamente para jogos específicos). Correções de jogos manuais NÃO VAI " +"aumentar sua performance. Na verdade, elas podem até diminuí-la." #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 msgid "" @@ -466,7 +528,7 @@ "O mais seguro é garantir que todas as correções de jogos estejam " "desabilitadas." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -475,14 +537,14 @@ "Você irá excluir o cartão de memória formatado '%s'. Todos dados nesse " "cartão serão perdidos! Você tem certeza bem positiva e absoluta?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Falhou: Duplicação só é permitida para uma Porta-PS2 vazia ou para o sistema " "de arquivos." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Falhou: O cartão de memória destinatário '%s' está em uso." @@ -566,35 +628,54 @@ "incompleta de %s, então pressione Cancelar para fechar o painel de " "Configurações." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"-2 - Reduz a frequência de ciclo do EE em mais ou menos 33%. Aceleração " +"moderada, mas *vai* causar desordem no áudio em vários FMVs." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"-1 - Reduz a frequência de ciclo do EE em mais ou menos 33%. Aceleração " +"suave para a maioria dos jogos com alta compatibilidade." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" -"1 - Frequência de ciclo normal. Isso quase corresponde com a real velocidade " +"0 - Frequência de ciclo padrão. Isso quase corresponde com a real velocidade " "de uma EmotionEngine real de PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - Reduz a frequência de ciclo do EE em mais ou menos 33%. Aceleração suave " -"para a maioria dos jogos com alta compatibilidade." +"1 - Aumenta a frequência de ciclo do EE em mais ou menos 33%. Aumenta os " +"requisitos de hardware, pode aumentar o FPS durante o jogo." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Reduz a frequência de ciclo do EE em mais ou menos 55%. Aceleração " -"moderada, mas *vai* causar falhas de áudio em muitos FMVs." +"2 - Aumenta a frequência de ciclo do EE em mais ou menos 50%. Aumenta " +"consideravelmente os requisitos de hardware, pode aumentar visivelmente o " +"FPS durante o jogo..\n" +"Essa configuração causar nos jogos uma FALHA PARA INICIAR." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - Desativa Roubo de Ciclo do VU. Configuração mais compatível!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -602,7 +683,7 @@ "1 - Suave Roubo de Ciclo do VU. Menor compatibilidade, mas é alguma " "aceleração para maioria dos jogos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -610,7 +691,7 @@ "2 - Moderado Roubo de Ciclo de VU. Ainda menor compatibilidade, mas a " "aceleração é significante em alguns jogos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -618,7 +699,7 @@ "3 - Máximo de Roubo de Ciclo de VU. Utilidade é limitada, uma vez que isso " "pode causar oscilações visuais ou desaceleração na maioria dos jogos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -628,18 +709,24 @@ "causar glitches, falha no áudio, e falsa leitura do FPS. Quando tiver " "problemas de emulação, primeiro desabilite esse painel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" -"Definir valores mais altos nesse slider reduz efetivamente a velocidade de " +"Definir valores menores nesse slider reduz efetivamente a velocidade do " "clock da CPU núcleo R5900 da EmotionEngine e normalmente traz grande " "aceleração para jogos que falham em utilizar todo potencial do hardware de " -"PS real." +"PS real. Por outro lado, valores maiores aumentam efetivamente a velocidade " +"do clock, o que pode resultar em algum aumento no FPS do jogo, ao mesmo " +"tempo que faz com que os jogos demandem mais e possivelmente causem falhas " +"nos gráficos." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -649,7 +736,7 @@ "EmotionEngine. Maiores valores aumentam o número de ciclos roubados do EE " "para cada micro-programa VU que o jogo roda." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -659,7 +746,7 @@ "contrário de de o tempo todo. Isso é seguro na maioria do tempo, e o Super " "VU faz coisa semelhante por padrão." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -672,7 +759,7 @@ "caso de jogos limitados pelo GS, pode ser um atraso (especialmente em CPUs " "dual core)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -683,7 +770,7 @@ "Jogos que não usam esse método de vsync vão aproveitar pouca ou nada de " "aceleração desse hack." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -699,7 +786,7 @@ "avançamos para a vez do evento seguinte ou o fim da fatia de tempo do " "processador, seja qual for que vier a ocorrer primeiro." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -708,7 +795,7 @@ "tenham problemas com isso. (Muitas vezes marcado por precisar de 'modo 1' ou " "'DVD lento')" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -716,7 +803,7 @@ "Note que quando o Limitador de Frames está desabilitado, os modos Turbo e " "Câmera Lenta também não vão estar disponíveis." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -724,7 +811,7 @@ "Nota: Por causa do design do PS2, frame skipping preciso não é possível. " "Ativar essa opção pode causar sérios erros gráficos em alguns jogos." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -732,7 +819,7 @@ "Habilite isso se você achar que a sincronização da thread MTGS está causando " "travamentos ou erros gráficos." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -748,7 +835,7 @@ "Aviso: Essa opção pode ser ativada durante o jogo, mas normalmente não pode " "ser desativada durante o jogo (o vídeo normalmente ficará estragado)" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/pt_BR/pcsx2_Main.po pcsx2-1.4.0/locales/pt_BR/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/pt_BR/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/pt_BR/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -1,15 +1,15 @@ # Brazilian Portuguese Translation for pcsx2 (Main) -# Copyright (C) 2014 PCSX2 Dev Team +# Copyright (C) 2015 PCSX2 Dev Team # This file is distributed under the same license as the PCSX2 package. -# Rafael Ferreira , 2011, 2012, 2013, 2014. +# Rafael Fontenelle , 2011, 2012, 2013, 2014, 2015. # msgid "" msgstr "" "Project-Id-Version: pcsx2 main master\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-12-23 13:38-0300\n" -"Last-Translator: Rafael Ferreira \n" +"POT-Creation-Date: 2015-12-22 10:08-0200\n" +"PO-Revision-Date: 2015-12-22 11:04-0200\n" +"Last-Translator: Rafael Fontenelle \n" "Language-Team: \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" @@ -18,17 +18,17 @@ "X-Poedit-KeywordsList: _;pxL;_d;pxDt;_t;pxLt\n" "X-Poedit-SourceCharset: utf-8\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.7.1\n" +"X-Generator: Poedit 1.8.6\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Nenhum motivo dado." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Erro de análise" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "O hardware da sua máquina não é capaz de rodar PCSX2. Sinto muito, cara." @@ -98,7 +98,7 @@ "Inclui processamento de eventos ociosos e alguns outros usos de eventos " "incomuns." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Formato de arquivo de imagem ISO não reconhecido." @@ -117,20 +117,20 @@ "causado por um tipo de imagem ISO sem suporte ou um bug do PCSX2 no suporte " "de imagem ISO." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "A thread MTGS não está respondendo enquanto espera o plug-in GS abrir." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "O savestate não pôde ser carregado, pois parece estar corrompido ou " "incompleto." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -139,7 +139,7 @@ "Plug-in de %s falhou em carregar. Seu computador deve ter recursos " "insuficientes, ou hardware/drivers incompatíveis." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -148,18 +148,18 @@ "Plug-in de %s falhou em inicializar. Seu sistema deve ter memória " "insuficiente ou recursos faltando." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "O arquivo do plug-in de %s configurado não foi encontrado" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "O arquivo do plug-in de %s configurado não é uma biblioteca dinâmica válida" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -168,13 +168,13 @@ "O plug-in de %s configurado não é um plug-in de PCSX2, ou é para uma versão " "antiga e sem suporte do PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "O plug-in relata que seu hardware ou seus software/drivers são suportados." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -182,7 +182,7 @@ "O plug-in definido não é um plug-in de PCSX2, ou é para uma versão antiga e " "sem suporte do PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -191,11 +191,11 @@ "O Plug-in de %s definido não é um plug-in válido de PCSX2, ou é para uma " "versão antiga ou sem suporte do PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "O plug-in de Cartão de Memória interno falhou na inicialização." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Plug-in descarregado" @@ -367,11 +367,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Registro log detalhado do hardware de CDVD." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Mensagem do PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -379,31 +379,31 @@ "O savestate não foi armazenado corretamente. O arquivo temporário foi criado " "com sucesso, mas não pôde ser movido para seu destino de armazenamento." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Mais seguro" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Seguro (+ rápido)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Balanceado" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agressivo" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Agressivo plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Prejudicial" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Falha em sobrescrever arquivo de configurações existentes; permissão negada." @@ -412,7 +412,7 @@ msgid "Loading PS2 system plugins..." msgstr "Carregando plug-ins de sistema do PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." @@ -420,100 +420,103 @@ "Extensões SSE não disponíveis. PCSX2 requer um CPU que suporte o conjunto de " "instruções SSE." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Erro(s) no Recompilador do PCSX2." -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "Todas opções são para a sessão atual somente e não serão salvas.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Arquivo ISO" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "exibe essa lista de opções de linha de comando" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "força o log/console do programa estar visível" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "usa o modo tela cheia no GS" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "usa modo janela no GS" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "desativa exibição da GUI enquanto estiver rodando jogos" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "quando em \"nogui\", perguntar antes de sair ao suspender" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "executa uma imagem ELF" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" -"carrega uma bandeja de DVD vazia; use para entrar no\n" -" \tmenu de sistema do PS2" +"carrega uma bandeja de DVD vazia; use para entrar no menu de sistema do PS2" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "" "carrega pelo plug-in de CDVD (passa por cima do\n" " \tparâmetro ArquivoISO)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "desativa todos os hacks de velocidade" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "use a lista, delimitada por vírgula ou pipe, de\n" " \tcorreções de jogos especificada." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "desativa carregamento rápido" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "altera o caminho do arquivo de configurações" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "especifica qual arquivo de configuração do PCSX2 usar" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "" "força %s a iniciar o Assistente de Primeiras\n" " \tConfigurações" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" "habilita operação em modo portátil (requer acesso como\n" " \tadmin/root)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "especifique o arquivo a ser usado como plug-in de %s" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Erro de substituição de plug-in - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -524,96 +527,96 @@ "um plug-in válido de %s :\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Pressione OK para usar o plug-in configurado padrão, ou Cancelar para fechar " "%s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Erro no PCSX2: Deficiência de Hardware" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Pressione OK para fechar %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "Erro Crítico no %s" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Cancelar" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Cancelar" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Aplicar" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Próximo >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Voltar" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Voltar" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Concluir" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Sim" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Não" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Procurar" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Salvar" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Salvar &Como..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Ajuda" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Página Inicial" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Exibe informações sobre o PCSX2." -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -623,43 +626,48 @@ "\n" "Pressione OK para ir para o Painel de Configuração de Plug-in." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Aviso! Plug-ins de sistema não foram carregados. PCSX2 pode não estar " "operacional." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "Opções de Linha de Comando do %s" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Erro de BIOS de PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Pressione Ok para ir para o Painel de Configuração de BIOS." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Aviso! BIOS válida não foi selecionada. PCSX2 pode não estar operacional." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "Opções de Linha de Comando do %s" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Thread de PCSX2 não está respondendo" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Terminar" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Executando Máquina Virtual de PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Procurar por uma ISO que não está no seu histórico recente." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Procurar..." @@ -705,51 +713,51 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Não foi possível aplicar novas configurações. Uma delas é inválida." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Pergunta sobre armazenamento de log" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Armazena um conteúdo de log em uma área microscopicamente pequena." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Pequeno" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "É o que eu uso (o programador)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" -msgstr "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" +msgstr "Fonte normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "É bom e legível." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Grande" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Gigante" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Para o caso de você ter um monitor de realmente alta resolução." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Esquema padrão de cores em tons suaves." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Tema claro" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -757,86 +765,94 @@ "Clássico esquema de cor preta para pessoas que gostam de ter texto " "cauterizado nos seus nervos ópticos." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Tema escuro" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Sempre no Topo" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Quando marcado, a janela de logs estará visível sobre outras janelas de " "primeiro plano." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Salvar..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Armazenar conteúdo de log em arquivo" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&Limpar" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Limpar conteúdo da janela de logs" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Aparência" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "Fe&char" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Fechar essa janela de logs; Conteúdos serão preservados" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Desenvolvimento/Detalhado" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Exibe logs de desenvolvimento do PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Leituras de CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Exibir atividade de leitura do disco" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Ativar todos" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Ativar todos filtros de fonte de logs." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Desativar todos" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Desativa todos filtros de origem de log." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "Restaurar padrão" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore default source filters." +msgstr "Restaura filtros de fonte padrão." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Log" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "Fonte&s" @@ -849,47 +865,43 @@ msgid "About %s" msgstr "Sobre o %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Testes Beta" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Versões anteriores" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Webmasters" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Especialistas de plug-ins" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Agradecimento especial para" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Desenvolvedores" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Contribuidores" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" -msgstr "Um emulador de Playstation 2" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +msgid "PlayStation 2 Emulator" +msgstr "Emulador de Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Website e Fóruns Oficiais do PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "Repositório git Oficial do PCSX2 no GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Ok, vi o suficiente" @@ -897,25 +909,21 @@ msgid "Assertion Failure - " msgstr "Falha na declaração - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "" "Salva uma captura instantânea da imagem do painel de configurações para um " "arquivo PNG." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Salvar capturas de imagem da janela para..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "Seleção de BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Não mostre mais esse diálogo." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -923,7 +931,7 @@ "Desabilita esse pop-up e qualquer outra resposta que você selecionar aqui " "será usada automaticamente daqui para frente." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -931,16 +939,87 @@ "Esse pop-up não vai ser exibido novamente. Essa configuração pode ser " "desfeita no painel de configurações." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Ignorar" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "Tentar novamente" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "Abortar" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Redefinir" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "Conversão de cartão de memória para um formato diferente" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "Converter" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "Converter: " + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "Para: " + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "Arquivo de 8MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "Arquivo de 16MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "Arquivo de 32MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "Arquivo de 64MB" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "Converte este cartão de memória para uma pasta com seus saves." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "Pasta" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Erro (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "Converter cartão de memória" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "Sem suporte a este tipo de alvo!" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "A conversão de cartão de memória falhou por motivos desconhecidos." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Criar novo cartão de memória" @@ -962,30 +1041,29 @@ msgid "Select file name: " msgstr "Na pasta: " -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Erro (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Criar cartão de memória" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "Erro: O diretório do cartão de memória não pôde ser criado." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Erro: O cartão de memória não pôde ser criado." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Usar compressão NTFS na criação desse cartão." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [mais compatível]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -993,7 +1071,7 @@ "Esse é o tamanho padrão provido pela Sony e tem suporte em todos jogos e " "versões de BIOS." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -1001,33 +1079,33 @@ "Sempre use essa opção caso você queira o mais seguro e certo dos " "comportamentos de cartão de memória." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Um tamanho comum para um cartão de memória de terceiros que deveria " "funcionar com a maioria dos jogos." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" "Cartões de 16 e 32 MB têm aproximadamente o mesmo fator de compatibilidade." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1035,7 +1113,7 @@ "Aviso de baixa compatibilidade: Sim, é muito grande, mas pode não funcionar " "em muitos jogos." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1043,6 +1121,29 @@ "Use por sua conta e risco. É possível que ocorra algum comportamento " "irregular do cartão memória (apesar de ser improvável)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "Pasta [experimental]" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" +"Armazena o conteúdo de cartão de memória no sistema de arquivos hospedeiro, " +"ao invés de um arquivo." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" +"Gerencia automaticamente o conteúdo de cartão de memória de forma que o " +"console vê apenas arquivos relacionados ao software atualmente em execução. " +"Permite que você arraste-e-solte arquivos para dentro e para fora do cartão " +"de memória com seu navegador de arquivos padrão. Isso ainda é experimental, " +"então use por sua própria conta e risco!" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1053,6 +1154,7 @@ msgstr "Configurações" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Seleção de Idioma" @@ -1106,15 +1208,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Auto-ejetar cartões de memória quando estiver carregando savestates" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "Gerenciar automaticamente saves baseado no jogo" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Gerenciador de Cartão de Memória" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Arraste cartões para Portas-PS2, ou a partir delas." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1178,24 +1284,24 @@ msgid "Game Fixes" msgstr "Correções de jogos" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "Seleção de Componentes - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Plug-ins" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Pastas" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Aparência/Temas - %s" @@ -1218,47 +1324,51 @@ msgid "Terminate App" msgstr "Terminar Aplicativo" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "Saída do GS está Desativada!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "Sair do PCSX2?" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Salvar estado" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Salva o estado da máquina virtual para o slot atual." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Carregar estado" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Carrega um estado de máquina virtual do slot atual." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Carregar estado backup" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Carrega estado backup da máquina virtual no slot atual." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Muda para o slot seguinte." -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Altera o slot de save atual num estilo +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Muda para o slot anterior" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Altera o slot de save atual num estilo -1!" @@ -1275,7 +1385,7 @@ "É um erro arrastar múltiplos arquivos para a janela de %s. Um por vez por " "favor, obrigado." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Confirmar reset do PS2" @@ -1293,280 +1403,280 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Você arrastou a seguinte imagem ISO para %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Backup" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Exibe Console" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Console para Entrada/Saída padrão" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistema" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Configuração" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Misc" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Debug" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Inicializando..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Rodar ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Rodar binários de PS2 diretamente" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Fazer backup antes de salvar" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Correções de Jogos Automáticas" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Aplica automaticamente Correções de Jogos necessárias para jogos com " "problemas conhecidos" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Habilitar Cheats" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Habilitar Patches de Tela Cheia" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Habilitar Sistema de Arquivos do Host" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Desligar" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Limpa todos estados de VM interna e fecha os plug-ins" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Sair" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Fechar o %s pode ser perigoso para sua saúde" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Seleção de Iso" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Menu de Plug-ins" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Faz com que a imagem ISO especificada seja a fonte CDVD." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Plug-in" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Usa um plug-in externo como fonte CDVD." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Sem disco" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Use essa opção pra carregar as configurações de BIOS do PS2 virtual." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "Configuraçõe&s de Emulação" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "Cartões de &Memória" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "Seleção de &Plug-in/BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Editor de Banco de Dados de Jogos" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Vídeo (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Ãudio (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Controles (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Apagar todas configurações..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" "Apaga todas configurações do %s e roda novamente o Assistente de Primeiras " "Configurações." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Sobre..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "Abrir janela de depuração..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Registro de Logs..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pausar" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Pausa com segurança a emulação e preserva o estado do PS2." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Resumir" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Resume o estado da emulação suspensa" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pausar/Resumir" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Nenhum estado de emulação está ativo; não foi possível suspender ou resumir." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Reiniciar" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simula reinício de hardware da máquina virtual do PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Nenhum estado de emulação está ativo; carregue alguma coisa primeiro." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Reiniciar CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Reinício forçado da VM ativa." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Carregar CDVD (completo)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Carregar a VM usando o atual DVD ou fonte de mídia Iso" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Recarregar CDVD (rápido)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Recarregar mais rápido (pula tela de inicialização)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Carregar CDVD (rápido)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Carregar mais rápido, pulando telas de inicialização do PS2." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Nenhum plug-in carregado" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Configurações Gerais de GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1574,97 +1684,98 @@ "Modificar as configurações da emulação de hardware regulada pela máquina " "virtual central do PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Configurações da Janela..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Modifica opções de janela e aparência, incluindo a taxa de proporção." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Configurações do Plug-in..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Abre a janela de configurações avançadas do plug-in de %s." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Redefinir todas configurações?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Confirmar alteração de imagem ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Você quer trocar discos ou carregar a nova imagem (por meio de " "reinicialização do sistema)" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Trocar Disco" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Confirmar alteração da fonte do CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Você selecionou a troca da fonte de CDVD de %s para %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Você quer trocar discos ou carregar a nova imagem (reinicialização do " "sistema)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Todos Suportados (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Imagens de Disco (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blocos de Extração (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "Comprimidos (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Todos Arquivos (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Selecione a fonte Iso de CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" +"Selecione imagem de disco, imagem de disco comprimida ou bloco de extração..." -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Selecione o arquivo ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "Arquivo ISO não encontrado!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Ocorreu um arquivo ao tentar abrir o arquivo:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1672,7 +1783,7 @@ "Erro: O arquivo ISO configurado não existe. Clique OK para selecionar uma " "nova fonte ISO para CDVD." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1680,7 +1791,7 @@ "Você selecionou a seguinte imagem ISO para o PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1693,7 +1804,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1706,19 +1817,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Nome de arquivo vazio ou muito curto" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Nome de arquivo fora do diretório esperado" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Nome de arquivo já existe" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "O Sistema Operacional está evitando de o arquivo de ser criado" @@ -1726,15 +1837,15 @@ msgid "Cannot apply settings..." msgstr "Não foi possível aplicar configurações..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "Caminho para pesquisa de BIOS:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Selecione pasta com roms de BIOS de PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1742,13 +1853,13 @@ "Clique o botão Procurar para selecionar uma pasta diferente onde PCSX2 vai " "procurar por roms de BIOS de PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Atualizar lista" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Selecione uma rom de BIOS:" @@ -1780,40 +1891,44 @@ msgid "None" msgstr "Nenhum" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "Opções Avançadas de Recompilador de EE/Unidade de Pontos Flutuantes" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preservar Sinal" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Completo" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "Opções Avançadas de Recompilador de VU0 / VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpretador" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Bem possivelmente a coisa mais lenta do universo." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompilador" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1821,11 +1936,11 @@ "Executa tradução just-in-time de binários de códigos de máquina de MIPS-IV " "de 64-bit para x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Bem lento; Disponível para fim de diagnóstico somente." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1833,20 +1948,20 @@ "Executa tradução just-in-time de binários de códigos de máquina de MIPS-I de " "32-bit para x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Habilitar Cache EE (Mais lento)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Interpretador somente; disponível para diagnóstico" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Restaurar padrão" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1854,22 +1969,22 @@ "Interpretador de Unidade Vetorial. Lento e não muito compatível. Use somente " "para diagnósticos." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "Recompilador microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Novo recompilador de Unidade Vetorial com compatibilidade muito melhorada. " "Recomendado." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "Recompilador SuperVU [legado]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2050,9 +2165,10 @@ "Ignorar Direção de Barramento na Transferência Path3 - Usado para Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" -"Trocar para renderização por software do GSdx quando um FMV é reproduzido" +"Trocar para renderização por software do GSdx quando um FMV estiver sendo " +"reproduzido" # Lembrete: TLB = Translation Lookaside Buffer #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2083,88 +2199,92 @@ "Aviso: Habilitar logs de rastreamento é normalmente muito lento e é uma das " "principais causas de problemas \"O que aconteceu com meu FPS?\". :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Selecione pasta com cartões de memória de PS2." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Ejetar" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Duplicar..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Renomear..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Criar..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "Converter ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Cartão: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Criar novo cartão de memória." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Renomear esse cartão de memória..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Inserir ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Ejetar o cartão a partir dessa porta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Inserir esse cartão em uma porta" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Criar duplicata desse cartão de memória" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Excluir" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Deletar permanentemente esse cartão de memória do disco (todo conteúdo será " "perdido)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Criar um novo cartão de memória e alocá-lo a essa Porta." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Excluir cartão de memória?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Duplicar cartão de memória" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Falhou: é possível duplicar somente um cartão existente." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2172,25 +2292,25 @@ "Selecione um nome para o cartão duplicado\n" "('.ps2' será adicionado automaticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Falhou: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Cópia falhou!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Cartão de memória '%s' foi duplicado para '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "Sucesso" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2199,119 +2319,123 @@ "Selecione o novo nome para o cartão de memória '%s'\n" "('.ps2' será adicionado automaticamente)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Renomear cartão de memória" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Erro: Renomeação não pôde ser efetuada.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Porta-%u / Multitap-%u--Porta-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Porta-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Vazio" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Selecione uma porta para '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Inserir cartão" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Ejetar cartão" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Renomear cartão..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Duplicar Cartão ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Renomear cartão..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Deletar cartão" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "Converter cartão" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Criar um novo cartão..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Atualizar lista" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Porta PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Nome do cartão (arquivo)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Capacidade do cartão " -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formatado" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tipo" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Última Modificação" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Criado em" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Não" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Sim" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Não usados --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Nenhum não usado --]" @@ -2344,11 +2468,11 @@ msgid "Select a document root for %s" msgstr "Selecione uma pasta raiz para documentos para %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Aplicar" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Faça esse idioma ser meu padrão agora mesmo!" @@ -2428,22 +2552,22 @@ "Motivo: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Completando tarefas..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Habilitar hacks de velocidade" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "O modo mais seguro e fácil de ter certeza que todos hacks de velocidade " "estão completamente desabilitados." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2451,34 +2575,34 @@ "Reinicia todas opções de hack de velocidade para seus valores padrões, o que " "consequentemente vai desabilitá-los." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "Taxa de Ciclo EE [Não Recomendado]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "Roubo de Ciclo VU [Não Recomendado]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "Hacks de microVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "Hack de Sinalizador de mVU" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Boa Aceleração e Alta Compatibilidade; pode ocasionar gráficos ruins... " "[Recomendado]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2486,15 +2610,15 @@ "Boa Aceleração e Alta Compatibilidade; pode causar travamento... " "[Recomendado para 3+ núcleos]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Outros Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Habilita Detecção de Rotação INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2502,22 +2626,22 @@ "Imensa aceleração para alguns jogos, com quase nenhum efeito colateral. " "[Recomendado]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Habilita Detecção de Loop de Espera" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Moderada aceleração para alguns jogos, com nenhum efeito colateral conhecido " "[Recomendado]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Habilita CDVD rápido" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Acesso rápido ao disco, menor tempo de carregamento. [Não recomendado]" @@ -2541,42 +2665,42 @@ msgid "Select a visual theme:" msgstr "Selecione o tema visual:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Desabilita Limitação de Frames" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Útil para rodar benchmarks. Ative/Desative essa opção no jogo pressionando " "F4." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Ajuste da Framerate Base:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Ajuste de Câmera Lenta:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Ajuste do Turbo:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Framerate de NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Framerate de PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2584,19 +2708,19 @@ "Erro enquanto analisava as configurações de taxas de frame de NTSC ou PAL. " "As configurações devem ser pontos flutuantes numéricos válidos." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Desabilitado [padrão]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Pular quando usar Turbo somente (TAB para habilitar)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Pular constantemente" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2604,19 +2728,19 @@ "Taxa de limites Normal e Turbo aplicam Frame skipping. O modo câmera lenta " "vai manter desabilitado Frame skipping." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Frames a Serem Desenhados" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Frames a Serem Pulados" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Usar MTGS Sincronizado" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2624,11 +2748,11 @@ "Somente para solucionar problemas de bugs em potencial no MTGS, pois ele é " "potencialmente muito lento." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Desabilita toda saída do GS" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2636,11 +2760,11 @@ "Desabilita completamente toda atividade do plug-in de GS; ideal para avaliar " "a performance dos componentes do EEcore." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Frame Skipping" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Limitador de Frames" @@ -2682,7 +2806,7 @@ "O savestate não pôde ser carregado por estar faltando componentes críticos. " "Veja o arquivo de log para mais detalhes." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (padrão)" @@ -2705,7 +2829,7 @@ msgstr "" "O arquivo de BIOS configurado não existe. Por favor, configure novamente." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2722,6 +2846,15 @@ "Extensões %s não encontradas. O microVU requer uma máquina com CPU com " "extensões SSE2." +#~ msgid "Betatesting" +#~ msgstr "Testes Beta" + +#~ msgid "BIOS Selector" +#~ msgstr "Seleção de BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Selecione a fonte Iso de CDVD..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 recomendado" diff -Nru pcsx2-1.3.1+dfsg/locales/ru_RU/pcsx2_Iconized.po pcsx2-1.4.0/locales/ru_RU/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/ru_RU/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ru_RU/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2011-04-25 01:25+0100\n" "Last-Translator: Bukhartsev Dmitriy \n" "Language-Team: Kein \n" @@ -37,7 +37,7 @@ "ЭмулÑтор PCSX2 не поддерживает игры от PlayStation. ЕÑли вы желаете " "запуÑтить игры от PSX, иÑпользуйте ÑоответÑтвующий ÑмулÑтор: ePSXe или PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 #, fuzzy msgid "" "This recompiler was unable to reserve contiguous memory required for " @@ -52,7 +52,7 @@ "ЕÑли хотите, вы можете попробовать уменьшить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÑша Ð´Ð»Ñ Ð²Ñех " "рекомпилÑторов PCSX2 (Ñм. «ОÑновные наÑтройки»)." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -61,7 +61,7 @@ "виртуальной машины PS2. Попробуйте закрыть какие-либо \"Ñ‚Ñжелые\" Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ " "(антивируÑ, браузер) и перезапуÑтите PCSX2." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -69,7 +69,7 @@ "Внимание: произошла ошибка инициализации некоторых рекомпилÑторов PCSX2, они " "будут автоматичеÑки отключены." -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -80,7 +80,7 @@ "их Ñнова в наÑтройках ÑмулÑции PCSX2 Ñразу поÑле того, как уÑтраните причину " "ошибки." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -91,7 +91,7 @@ "полученный от друзей. ИÑпользуйте Ñпец-программы Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ " "ÑобÑтвенной копии BIOS'а Ñ Ð²Ð°ÑˆÐµÐ¹ конÑоли." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -116,7 +116,36 @@ "прав на Ñтом компьютере то вам придетьÑÑ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ð½Ð° пользовательÑкий " "\"мод\" (кликните на кнопочку Ñ€Ñдом)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -201,6 +230,13 @@ "\"заÑтавит\" игру перечитать Ñодержимое карты. Данный режим неÑомеÑтим Ñ " "некоторыми играми (Guitar Hero 4)." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -278,7 +314,7 @@ "Ð”Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑтит вирутальную машину PS2. Ð’Ñе неÑохраненные " "данные будут потерÑны. Хотите продолжить?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -290,7 +326,7 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -302,7 +338,12 @@ "вы можете включить ее опÑÑ‚ÑŒ в окне ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ð°Ð¼Ð¸ памÑти: ÐаÑтройки -> " "ÐаÑтройки карт памÑ" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -311,12 +352,12 @@ "уверены в Ñвоем выборе, нажмите Cancel дабы закрыть окно наÑтроек без " "Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "Примечание: большинÑтво игр хорошо работают Ñо Ñтандартными наÑтройками" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "Примечание: большинÑтво игр хорошо работают Ñо Ñтандартными наÑтройками" @@ -437,7 +478,8 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "Определенные игровые хаки иÑправлÑÑŽÑ‚ ошибки ÑмулÑции в определенных играх, " "однако почти вÑегда вызывают ошибки и проблемы в других. При Ñмене игры вам " @@ -455,7 +497,7 @@ "однако почти вÑегда вызывают ошибки и проблемы в других. При Ñмене игры вам " "необходимо отключить хаки вручную (еÑли какие-либо их них были включены)." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, fuzzy, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -464,13 +506,13 @@ "Ð’Ñ‹ дейÑтвительно хотите удалить отформатированную карту памÑти в Ñлоте %s? " "Ð’Ñе Ñохраненные данные на ней будут потерÑны!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Облом: Ð”ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ñ€Ð°Ð·ÐµÑ€ÑˆÐµÐ½Ð° только на пуÑтой PS2-порт или на файловую ÑиÑтему" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, fuzzy, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -553,37 +595,53 @@ "плагины. ЕÑли вы не можете Ñделать выбор ввиду отÑутÑÑ‚Ð²Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… плагинов " "%s, нажмите \"Отмена\" Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из окна наÑтроек." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy +msgid "" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - понижает цикл работы EE примерно на 50%. Хорошее уÑкорение, чревато " +"возможным заиканием звука." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"with high compatibility." +msgstr "" +"2 - понижает цикл работы EE примерно на 33%. Ðеплохое уÑкорение Ð´Ð»Ñ " +"большинÑтва игр, без потери ÑовмеÑтимоÑти." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " "EmotionEngine." msgstr "" "1 - Стандартное значение ÑкороÑти работы виртуального процеÑÑора PS2 (нет " "прироÑта ÑкороÑти)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " -"with high compatibility." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"2 - понижает цикл работы EE примерно на 33%. Ðеплохое уÑкорение Ð´Ð»Ñ " -"большинÑтва игр, без потери ÑовмеÑтимоÑти." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - понижает цикл работы EE примерно на 50%. Хорошее уÑкорение, чревато " -"возможным заиканием звука." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - VU Cycle Stealing отключен. Ðаиболее безопаÑÐ½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð² плане " "ÑовмеÑтимоÑти." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -591,7 +649,7 @@ "1 - Ñреднее значение VU Cycle Stealing. Может повлиÑÑ‚ÑŒ на ÑовмеÑтимоÑÑ‚ÑŒ, но " "при Ñтом уÑкорÑет некоторые игры." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -599,7 +657,7 @@ "2 - выÑокое значение VU Cycle Stealing. ÐавернÑка ÑкажетÑÑ Ð½Ð° ÑовмеÑтимоÑти, " "окупаетÑÑ Ð½ÐµÐ¿Ð»Ð¾Ñ…Ð¸Ð¼ уÑкорением ÑмулÑции." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -607,7 +665,7 @@ "1 - макÑимальное значение VU Cycle Stealing. Ð’ Ñтом режиме будет проÑвлÑÑ‚ÑŒÑÑ " "множеÑтво графичеÑких багов." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -618,17 +676,21 @@ "иÑпорченным звуком, некорректными значениÑми FPS. При наличии каких-либо " "критичных проблем - первым делом отключите ВСЕ Ñпидхаки." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "ПозволÑет поÑледовательно понизить цикл работы EmotionEngine процеÑÑора " "Ñмулируемой машины и тем Ñамым уÑкорить игры, которые не полноÑтью " "иÑпользуют аппаратные реÑурÑÑ‹ PS2." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -638,7 +700,7 @@ "EmotionEngine. Более выÑокое значение хака увеличивает количеÑтво циклов, " "которые будут \"позаимÑтвованы\" у EE Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ микропрограмм VU." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -648,7 +710,7 @@ "флаги (вмеÑто поÑтоÑнного Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñех блоков). Вполне безопаÑный хак, " "SuperVU-рекомпилÑтор делает нечто подобное по-умолчанию." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 #, fuzzy msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " @@ -660,7 +722,7 @@ "дополнительных Min/Max-операций при проÑчете логики. \"Ломает\" Gran Turismo " "4 и Tekken 5. Возможно что-то еще." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -671,7 +733,7 @@ "не иÑпользующие 3D. Ð’Ñе оÑтальные игры либо не получат никакого уÑкорениÑ, " "либо оно будет чрезвычайно мало." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -691,7 +753,7 @@ "Ñобытию или\n" "вообще к концу процеÑÑорного интервала." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -700,13 +762,13 @@ "данного хака, вы можете обратитьcÑ Ðº ÑпиÑку ÑовмеÑимоÑти HDLoader'а " "(Ñмотрите по \"mode1\" и \"slow DVD\")." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "Отключение лимита кадров отключит так же и Turbo-/Slowmotion-режимы." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -715,7 +777,7 @@ "пропуÑк кадров невозможен в принципе. ПоÑтому, его Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ " "Ñпровоцировать поÑвление графичеÑких артефактов в некоторых играх." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -723,7 +785,7 @@ "Включайте данную опцию только в том Ñлучае, еÑли вы думаете что " "ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð² MTGS приводит к вылетам или графичеÑким артефактам." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -741,7 +803,7 @@ "Примечание: Ð´Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÑетÑÑ \"на лету\", однако ее поÑледующее " "отключение в реальном времени чревато поÑвлением графичеÑкого муÑора в игре. " -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/ru_RU/pcsx2_Main.po pcsx2-1.4.0/locales/ru_RU/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/ru_RU/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/ru_RU/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2011-04-25 19:40+0100\n" "Last-Translator: Bukhartsev Dmitriy \n" "Language-Team: Kein \n" @@ -20,15 +20,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Причина неизвеÑтна." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Ошибка парÑинга" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" "Ðппаратные ÑпоÑобноÑти вашего компьютера оÑтавлÑÑŽÑ‚ желать лучшего. Извини, " @@ -97,7 +97,7 @@ "Включает в ÑÐµÐ±Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÑƒ Ñобытий Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸ других редко иÑпользуемых " "Ñобытий." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Ðеопознаный формат ISO-файла" @@ -114,20 +114,20 @@ "неподдерживамаего типа ISO-образа или из-за бага в поддержке образов ISO в " "PCSX2" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "СвÑзь Ñ MTGS-потоком была потерÑна в период Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ GS-плагина." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" "Файл быÑтрого ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ может быть загружен, возможно он поврежден." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -137,7 +137,7 @@ "Ñвободных реÑурÑов или ваше оборудование/драйвера неÑовмеÑтимы Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ " "плагином." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -146,17 +146,17 @@ "Ошибка инициализации плагина %s. Возможно ваша ÑиÑтема не имеет доÑтаточно " "Ñвободных реÑурÑов и/или памÑти." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Файл %s-плагина не найден!" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "Файл плагина %s не ÑвлÑетÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑки загружаемой библиотекой." -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -165,14 +165,14 @@ "Плагин %s не ÑвлÑетÑÑ PCSX2-ÑомеÑтимым плагином или же он предназначен Ð´Ð»Ñ " "более Ñтарой верÑии PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Плагин Ñообщает о том, что ваше программное обеÑпечение/драйвера не " "поддерживаютÑÑ." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -180,7 +180,7 @@ "Выбранный плагин не ÑвлÑетÑÑ PCSX2-ÑомеÑтимым плагином или же он " "предназначен Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ Ñтарой верÑии PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -189,11 +189,11 @@ "Плагин %s не ÑвлÑетÑÑ PCSX2-ÑомеÑтимым плагином или же он предназначен Ð´Ð»Ñ " "более Ñтарой верÑии PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Ошибка инициализации вÑтроенного плагина карт памÑти." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Выгруженный плагин" @@ -357,11 +357,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Детализированное логирование CDVD" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "Сообщение от PCSX2" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -370,31 +370,31 @@ "вполне уÑпешно, но по каким-то причинам он не может быть перемещен в пункт " "назначениÑ." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Очень безопаÑно" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "БезопаÑно (и быÑтрее)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "СбаланÑировано" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "ÐгреÑÑивно" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Более агреÑÑивно!" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Ð’ большинÑтве Ñлучаев губительно..." -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Ошибка прав доÑтупа при перезапиÑи текущего файла наÑтроек." @@ -402,7 +402,7 @@ msgid "Loading PS2 system plugins..." msgstr "Загрузка ÑиÑтемных плагинов PS2..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " @@ -411,94 +411,99 @@ "Ваш процеÑÑор не поддерживает SSE-инÑтрукции, необходимые Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñ†ÐµÐ½Ð½Ð¾Ð¹ " "работы PCSX2. Увы." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "Ошибка(и) рекомпилÑторов PCSX2" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Ð’Ñе указанные тут опции актуальны только Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð¹ ÑеÑÑии ÑмулÑтора и " "не будут Ñохранены в конфиг при иÑпользовании.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "ISO-файл" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "выводит данное Ñправочное окно" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "принудительно запуÑкает ÑмулÑтор Ñ Ð¾ÐºÐ½Ð¾Ð¼ лога" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "запуÑкает ÑмулÑтор в полноÑкранном режиме" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "запуÑкает ÑмулÑтор в оконном режиме" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "отключает показ графичеÑкого интерфейÑа" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "запуÑкает указанный ELF-файл." -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "запуÑкает ÑмулÑтор \"без диÑка\" (иÑпользуйте Ð´Ð»Ñ Ð´Ð¾Ñтупа к BIOS'у)" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "запуÑкает ÑмулÑтор Ñ Ð¸Ñпользованием CDVD-плагина" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "отключает вÑе Ñпидхаки" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "позволÑет активировать указанные иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸Ð³Ñ€ при запуÑке (через " "запÑтую)" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "отключает быÑтрый запуÑк диÑка/образа" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "позволÑет указать папку Ñ Ð½Ð°Ñтройками PCSX2" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "позволÑет указать файл Ñ Ð½Ð°Ñтройками PCSX2" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "запуÑкает МаÑтер наÑтройки %s" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "включает мобильный режим (необходим админиÑтративный или root доÑтуп)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "позволÑет указать файл в качеÑтве %s-плагина" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Ошибка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -508,96 +513,96 @@ "Ошибка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ %s-плагина! Ðижеуказанный файл не ÑущеÑтвует или не " "ÑвлÑетÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼ %s-плагином :\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Ðажмите \"OK\" еÑли желаете иÑпользовать файл плагина из наÑтроек PCSX2 или " "нажмите \"Отмена\" чтобы закрыть %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "Ошибка PCSX2: Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð½ÐµÐ¸ÑправноÑÑ‚ÑŒ" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Ðажимите OK чтобы закрыть %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "Ð¡Ñ‚Ñ€Ð°ÑˆÐ½Ð°Ñ Ð¸ непереноÑÐ¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° %s" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "OK" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&OK" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Отмена" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Отмена" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Применить" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Далее >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Ðазад" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Ðазад" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Завершить" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Да" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Ðет" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Обзор" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Сохранить лог как..." -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "&Сохранить лог как..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Помощь" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Домой" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Показать диалог \"О программе\"" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -607,43 +612,50 @@ "\n" "Ðажмите OK Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в окно ÐаÑтройки плагинов PCSX2." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Внимание! Ðе вÑе ÑиÑтемные плагины загружены, Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° PCSX2 не " "гарантируетÑÑ." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "Опции командной Ñтроки %s" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "Ошибка BIOS'а PS2" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Ðажмите ОК Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° в окно наÑтройки BIOS'а." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" +"Внимание! Ðе вÑе ÑиÑтемные плагины загружены, Ð½Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð° PCSX2 не " +"гарантируетÑÑ." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "Опции командной Ñтроки %s" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "Превышено Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÐ° PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Закрыть" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "ЗапуÑк вирутальной машины PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "ПоиÑк и выбор нового образа диÑка." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Обзор..." @@ -689,52 +701,52 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Ошибка Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… наÑтроек, где-то в опции закралаÑÑŒ ошибка!" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Сохранить лог-файл как..." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Вмещает чудовищное количеÑтво \"лога\" в чудовищно малое проÑтранÑтво." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Мелкий шрифт" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Это то что Ñ Ð¸Ñпользую. (ПрограммиÑÑ‚)." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" msgstr "Средний шрифт" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Это хорошо и читаемо." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Большой шрифт" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Огромный шрифт" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "" "Ð’ Ñлучае еÑли у Ð²Ð°Ñ Ð² наличии диÑплей ДЕЙСТВИТЕЛЬÐО выÑокого разрешениÑ." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñхема в мÑгких тонах." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Светлый фон" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -742,86 +754,96 @@ "КлаÑÑичеÑÐºÐ°Ñ Ñ‡ÐµÑ€Ð½Ð°Ñ Ñ†Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñхема Ð´Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹ которые любÑÑ‚ когда текÑÑ‚ " "врезаетьÑÑ Ð¸Ð¼ в глаза и нервы." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Темный фон" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Поверх вÑе окон" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "" "Когда выбрана Ñта опциÑ, окно логов будет видно поверх вÑех окон на переднем " "плане." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Сохранить лог как..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "СохранÑет Ñодержимое окна в файл." -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&ОчиÑтить окно" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Очищает окно лога." -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Внешний вид" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Закрыть" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Закрывает окно лога (Ñодержимое окна ÑохранÑетÑÑ)." -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Отображает подробную отладочную информацию." -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "Чтение CDVD " -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Показывает активновÑÑ‚ÑŒ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð¸Ñка" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Включить вÑе" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Включает вÑе иÑточники логированиÑ" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Выключить вÑе" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Отключает вÑе иÑточники логированиÑ." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "СброÑить наÑтройки" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Включает вÑе иÑточники логированиÑ" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Файл" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Режим" @@ -834,48 +856,45 @@ msgid "About %s" msgstr "О программе %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "БетатеÑтинг" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Предыдущие верÑии" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Веб-МаÑтера" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "СпециалиÑÑ‚Ñ‹ по плагинам" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "ОÑобое ÑпаÑибо" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Разработчики" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Ðвторы" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "ЭмулÑтор Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "Официальный web-реÑÑƒÑ€Ñ PCSX2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "Официальный svn-репозиторий PCSX2 на GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Я видел доÑтаточно" @@ -883,23 +902,19 @@ msgid "Assertion Failure - " msgstr "Облом -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "СохранÑет Ñкриншот наÑтроек текущего окна." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Сохранить Ñкриншот Ñ Ð½Ð°Ñтройками как..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "ÐаÑтройка BIOS'а" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Больше не показывать данный диалог" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -907,7 +922,7 @@ "ПозволÑет Ñкрыть данное окно в дальнейшем и вÑегда применÑÑ‚ÑŒ то дейÑтвие, " "которое вы выберете ÑейчаÑ." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -915,16 +930,89 @@ "Ð’Ñплывающее окошко показано больше не будет. ÐаÑтройки можно изменить из " "панели наÑтроек." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Игнорировать" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "СброÑ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Папки" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Ошибка (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Создание карты памÑти" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Создание новой карты памÑти" @@ -946,30 +1034,30 @@ msgid "Select file name: " msgstr "Выберите Ð¸Ð¼Ñ Ðº файлу:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Ошибка (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Создание карты памÑти" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Ошибка: карта памÑти не может быть Ñоздана." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Ошибка: карта памÑти не может быть Ñоздана." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "ИÑпользовать NTFS-компреÑÑию Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð° карты памÑти." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [наиболее ÑовмеÑтимый вариант]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -978,7 +1066,7 @@ "Ñамой Sony.\n" "СовмеÑтим Ñ Ð»ÑŽÐ±Ñ‹Ð¼Ð¸ играми и верÑиÑми BIOS'а." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -986,33 +1074,33 @@ "Ð’Ñегда иÑпользуйте Ñту опцию еÑли хотите более быÑтрое и надежную реакцию " "от карты памÑти." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "Стандартный размер Ð´Ð»Ñ \"неофициальных\" карт памÑти. Должы работать почти " "Ñо вÑеми играми." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" "16 и 32 МБ карты имеют приблизительно один и тот же фактор ÑовмеÑтимоÑти." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1020,7 +1108,7 @@ "Больше - не значит лучше! Размер, в данном Ñлучае, обратно-пропорционален " "ÑовмеÑтимоÑти." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1028,6 +1116,22 @@ "ИÑпользуйте на Ñвой Ñтрах и риÑк! Возможно неÑтандартное поведение карты " "(Ñ…Ð¾Ñ‚Ñ Ð²Ñ€Ñд ли)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1038,6 +1142,7 @@ msgstr "МеÑто Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñтроек" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Выбор Ñзыка" @@ -1093,15 +1198,19 @@ "ÐвтоматичеÑки \"вынимать\" вирутальные карты памÑти при загрузке быÑтрого " "ÑохранениÑ" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Управление картами памÑти" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Перемещает карты в или из PS2-портов." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1166,24 +1275,24 @@ msgid "Game Fixes" msgstr "ИÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸Ð³Ñ€" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "ÐаÑтройка плагинов %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Плагины" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Папки" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Внешний вид/Темы - %s" @@ -1205,48 +1314,52 @@ msgid "Terminate App" msgstr "Закрыть" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "Вывод видеоданных отключен!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "БыÑтрое Ñохранение" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Создает быÑтрое Ñохранение аÑÑоциированное Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñлотом." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Загружает быÑтрое Ñохранение аÑÑоциированное Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñлотом." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "БÑкап " -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" "Загружает бÑкап ÑоÑтоÑÐ½Ð¸Ñ Ð²Ð¸Ñ€Ñ‚ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð¹ машины аÑÑоциированный Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ Ñлотом." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "ПереключитьÑÑ Ð½Ð° Ñледующий Ñлот." -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Прокручивает текущий Ñлот быÑтрого ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð² +1 манере!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "ПереключитьÑÑ Ð½Ð° предыдущий Ñлот." -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Прокручивает текущий Ñлот быÑтрого ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð² -1 манере!" @@ -1263,7 +1376,7 @@ "Ð’Ñ‹ не можете перетащить в окно %s Ñразу неÑколько файлов. Ð’ очередь, " "пожалуйÑта." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Подтвердите ÑброÑ" @@ -1281,281 +1394,281 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Ð’Ñ‹ перетащили в окно %s Ñледующий ISO-файл:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Слот %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "БÑкап" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Отображать конÑоль." -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "КонÑоль в Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&ЗапуÑк" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&ÐаÑтройка" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Разное" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Отладка" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "ИнициализациÑ..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "ЗапуÑтить ELF-файл..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "ПрÑмой запуÑк бинарных файлов PS2" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "БÑкап перед Ñохранением" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "ÐвтоматичеÑкие иÑправлениÑ" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "ÐвтоматичеÑки применÑет неообходимые иÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸Ð·Ð²ÐµÑтных проблем в " "играх" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Включить читы" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Включить широкоÑкранные патчи" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Включить файловую ÑиÑтему хоÑта" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Выключить конÑоль" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Закрывает текущую VM-ÑеÑÑию и оÑтанавливает работу плагинов." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Выход" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "" "Выход из %s без нашего официального Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ плохо ÑказатьÑÑ Ð½Ð° " "вашем здоровье..." -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Выбор ISO" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "CDVD-плагин" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ИÑпользовать ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "ИÑпользует текущий выбранный ISO-файл в качеÑтве диÑка." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "ИÑпользовать плагин" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "ИÑпользует CDVD-плагин и его наÑтройки Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка игры." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Ðе иÑпользовать диÑк" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "ПозволÑет загрузить PS2-Ð±Ð¸Ð¾Ñ Ð´Ð»Ñ Ð´Ð¾Ñтупа к его наÑтройкам." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "ÐаÑтройки &ÑмулÑции" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&ÐаÑтройка карт памÑти" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&ÐаÑтройка плагинов/BIOS'а" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Редактор базы данных игр" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Видео (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Звук (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&ДжойÑтики (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "СброÑить вÑе наÑтройки..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "СбраÑывает вÑе наÑтройки %s и перезапуÑкает \"МаÑтер наÑтройки\"." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "О программе..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Логи..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Пауза" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Ставит текущую игровую ÑеÑÑию на \"внутреннюю\" паузу." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Продолжить" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Снимает \"паузу\" и возвращает игровую ÑеÑÑию к ее прежнему ÑоÑтоÑнию." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Пауза/Продолжить" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Ðичего не запущено, Ñтавить на паузу нечего." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "ПерезапуÑк" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "ПерезапуÑк виртуальной конÑоли, аналогичный кнопке ÑброÑа на PS2." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Ðичего не запущено, перезапуÑкать нечего." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "ПерезапуÑтить CD/DVD (вÑе Ñтапы)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "\"ХолоднаÑ\" перезагрузка текущей вирутальной машины." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "ЗапуÑтить CD/DVD (вÑе Ñтапы)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "" "ЗапуÑкает вирутальную машину PS2 иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¹ DVD-диÑк или ISO-файл." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "ПерезапуÑтить CD/DVD (быÑтро)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "" "Перезагрузка иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼ÐµÑ‚Ð¾Ð´ \"Fast BOOT\" (пропуÑк загрузочных Ñкранов)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "ЗапуÑтить CD/DVD (быÑтро)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "ИÑпользование быÑтрой загруÑки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑка загрузочных Ñкранов PS2" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Плагин не загружен" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Базовые наÑтройки GS..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1563,99 +1676,99 @@ "ÐаÑтройка опций ÑмулÑции аппаратной чаÑти за которую отвечает Ñдро " "вирутальной машины PCSX2." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "ÐаÑтройки окна..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "" "ПозволÑет наÑтроить различные опции видео-окна, в том чиÑле и Ñоотношение " "Ñторон." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "ÐаÑтройки плагина..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "Открывает раÑширенные наÑтройки текущего %s -плагина." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "СброÑить вÑе наÑтройки?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Подтверждение Ñмены ISO-образа" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Желаете Ñменить текущий диÑк ИЛИ перезапуÑтить конÑоль Ñ Ð½Ð¾Ð²Ñ‹Ð¼ образом " "(ÑброÑ)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Сменить диÑк" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Подтверждение Ñмены иÑточника данных CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ñменит иÑточник данных Ñ %s на %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "Ð’Ñ‹ желаете Ñменить иÑточник и продолжить играть ИЛИ Ñменить и перезапуÑтить " "конÑоль (ÑброÑ)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Ð’Ñе поддерживаемые (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Образа диÑков (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Block-дампы (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "Block-дампы (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Ð’Ñе файлы (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Выбор файла-образа в качеÑтве CDVD-иÑточника..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Выбор ELF-файла..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO-файл не найден!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Произошла ошибка при попытке Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1663,13 +1776,13 @@ "Ошибка: указанный ISO-файл не ÑущеÑтвует. Ðажмите \"ОК\" Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° другого " "ISO-файла Ð´Ð»Ñ CDVD-иÑточника." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" msgstr "Ðовый образ Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка:\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1682,7 +1795,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1695,19 +1808,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° пуÑто или Ñлишком коротко" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° за пределами нужной директории" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ Ð¡Ð¸Ñтема мешает Ñозданию файла" @@ -1715,27 +1828,27 @@ msgid "Cannot apply settings..." msgstr "Ðевозможно применить наÑтройки..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "ИÑкать BIOS-образа в:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Выберите папку Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°Ð¼Ð¸ BIOS'а" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "Ðажмите кнопку \"Обзор\" Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° папки Ñ Ð¾Ð±Ñ€Ð°Ð·Ð°Ð¼Ð¸ BIOS'а PS2." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Обновить ÑпиÑок" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Выберите желаемый BIOS:" @@ -1767,42 +1880,46 @@ msgid "None" msgstr "None" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU Advanced Recompiler Options" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Preserve Sign" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Full" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 Advanced Recompiler Options" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Interpreter" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "" "Режим интерпретации - тугодум еще тот. ИÑпользуйте его только Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка " "возможных багов рекомпилÑтора." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." @@ -1810,13 +1927,13 @@ "Заметно уÑкорÑет ÑмулÑцию поÑредÑтвом рекомпилÑции бинарного машинного кода " "64-bit MIPS-IV в x86-ÑовмеÑтимый \"на-лету\"." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "" "Медленный режим, иÑпользуйте только Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка возможных багов IOP-" "рекомпилÑтора." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." @@ -1824,46 +1941,46 @@ "Заметно уÑкорÑет ÑмулÑцию поÑредÑтвом рекомпилÑции бинарного машинного кода " "32-bit MIPS-IV в x86-ÑовмеÑтимый \"на-лету\"." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 #, fuzzy msgid "Enable EE Cache (Slower)" msgstr "Включить кÑш EE - Только Интерпритатор! (Медленней)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 #, fuzzy msgid "Interpreter only; provided for diagnostic" msgstr "" "Медленный режим, иÑпользуйте только Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка возможных багов IOP-" "рекомпилÑтора." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "СброÑить наÑтройки" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "ИÑпользуйте режим интерпретатора VU только Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ошибок рекомпилÑтора." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Recompiler" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Ðовый рекомпилÑтор VU Ñ Ð²ÐµÑьма выÑокой ÑовмеÑтимоÑтью. РекомендуетÑÑ Ð´Ð»Ñ " "иÑпользованиÑ." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Recompiler [уÑтаревший]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2035,7 +2152,7 @@ msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -2067,88 +2184,93 @@ "производительноÑÑ‚ÑŒ, и Ñто Ð¿ÐµÑ€Ð²Ð°Ñ Ð¿Ñ€Ð¸Ñ‡Ð¸Ð½Ð° вÑех \"Что ÑлоучилоÑÑŒ Ñ Ð¼Ð¾Ð¸Ð¼Ð¸ FPS!!!" "\" проблем. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "Выберите папку Ð´Ð»Ñ Ð²Ð¸Ñ€ÑƒÑ‚Ð°Ð»ÑŒÐ½Ñ‹Ñ… карт памÑти PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "ИзъÑÑ‚ÑŒ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Продублировать..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Переименовать ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Создать ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Ð’Ñтавка..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Карта:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Создание новой карты памÑти." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Переименовывание Ñтой карты ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Ð’Ñтавка..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "ИзъÑÑ‚ÑŒ карту из Ñтого порта" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Ð’Ñтавить Ñту карту в порт..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Создание копии Ñтой карты..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Удалить" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" "Окончательно удалÑет выбранную карту памÑти Ñ Ð´Ð¸Ñка (вÑе данные будут " "потерÑны)." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Создать новую карту памÑти и привÑзать ее к Ñтому порту." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Удалить карту памÑти?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Создать дубликат карты памÑти" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Облом: Возможно продублировать только ÑущеÑтвующую карту" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2156,25 +2278,25 @@ "Выберите Ð¸Ð¼Ñ Ð´Ð»Ñ Ð´ÑƒÐ¿Ð»Ð¸ÐºÐ°Ñ‚Ð°\n" "( '.ps2' будет добавлено автоматичеÑки)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Облом: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Ошибка копированиÑ!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Карта памÑти '%s' дублируетьÑÑ Ð² '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "УÑпех!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2183,121 +2305,126 @@ "Выберите новое Ð¸Ð¼Ñ Ð´Ð»Ñ ÐºÐ°Ñ€Ñ‚Ñ‹ памÑти '%s'\n" "( '.ps2' будет добавлено автоматичеÑки)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Переименовать карту памÑти" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Ошибка: Переименовывание не может быть завершено. \n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Поорт-%u / Multitap-%u--Порт-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Порт-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "ПуÑто" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Выберите порт Ð´Ð»Ñ '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Ð’Ñтавить карту" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "ИзъÑÑ‚ÑŒ карту" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Ð’Ñтавить карту..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Дублировать карту..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Переименовать карту..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Удалить карту" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Ð’Ñтавить карту" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Создать новую карту ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Обновить ÑпиÑок" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "Порт PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Ð˜Ð¼Ñ ÐºÐ°Ñ€Ñ‚Ñ‹ (файла)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Размер карты" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Отформатировано" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "ПоÑледнее" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Создано" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Ðет" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Да" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "FPS" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[--ÐеиÑпользованные карты--]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[--Ðет неиÑпользованных карт--]" @@ -2330,11 +2457,11 @@ msgid "Select a document root for %s" msgstr "Выберите оÑновную папку Ð´Ð»Ñ Ð½Ð°Ñтроек %s:" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Применить" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "УÑтанавливает выбранный Ñзык как Ñзык интерфейÑа по умолчанию." @@ -2412,20 +2539,20 @@ "Причина: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Завершение задач..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Включить Ñпидхаки" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "ПроÑтое и быÑтрое включение/отключение вÑех Ñпидхаков." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." @@ -2433,23 +2560,23 @@ "СбраÑывает вÑе наÑтройки Ñпидхаков на Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию (поочередное " "отключение вÑех директив)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [не рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [не рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU-хаки" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 #, fuzzy msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" @@ -2458,11 +2585,11 @@ "графичеÑкого \"муÑора\", черного Ñкрана, выпадающих полигонов и Ñ‚.п. " "[рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 #, fuzzy msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " @@ -2472,15 +2599,15 @@ "графичеÑкого \"муÑора\", черного Ñкрана, выпадающих полигонов и Ñ‚.п. " "[рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Другие хаки" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Включить INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2488,22 +2615,22 @@ "Серьезное повышение производительноÑти и почти без каких-либо побочных " "Ñффектов. [рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Включить Wait Loop Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "Ðеплохое уÑкорение некоторых игр без каких-либо побочных Ñффектов. " "[рекомендуетÑÑ]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Включить fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "УÑкорÑет доÑтуп к диÑку, уменьшает Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸. [не рекомендуетÑÑ]" @@ -2525,42 +2652,42 @@ msgid "Select a visual theme:" msgstr "Выберите тему:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Отключить лимит кадров" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Удобно иÑпользовать Ð´Ð»Ñ Ð·Ð°Ð¼ÐµÑ€Ð¾Ð² производительноÑти. БыÑÑ‚Ñ€Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° Ð´Ð»Ñ " "Ñмены режима во Ð²Ñ€ÐµÐ¼Ñ Ð¸Ð³Ñ€Ñ‹: F4" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Базовое значение:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "КоÑффициент замедлениÑ:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "КоÑффициент уÑкорениÑ:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "Лимит кадров Ð´Ð»Ñ NTSC-игр" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "Лимит кадров Ð´Ð»Ñ PAL-игр" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2568,19 +2695,19 @@ "Возникла ошибка при чтении наÑтроек чаÑтот кадров или NTSC или PAL. " "ÐаÑтройки должны быть дейÑтвительными чиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑŽÑ‰ÐµÐ¹ точкой." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Отключен (по умолчанию)" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "ПропуÑкать только в режиме уÑÐºÐ¾Ñ€ÐµÐ½Ð¸Ñ (TAB Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "ПоÑтоÑнный пропуÑк" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2588,19 +2715,19 @@ "Normal- и Turbo-режимы позволÑÑŽÑ‚ пропуÑк кадров. Slowmotion-режим отключает " "любой пропуÑк кадров." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "кол-во кадров Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ€Ð¸Ñовки" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "кол-во кадров Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑка" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "ИÑпользовать Ñинхронизацию MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2608,11 +2735,11 @@ "Только Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка потенциальных багов и неиÑправноÑтей в MTGS, так как " "(потенциально) Ñто Ñлишком медленно" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Отключить вывод GS-данных." -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2620,11 +2747,11 @@ "Сводит на ноль вÑÑŽ активноÑÑ‚ÑŒ GS плагина. Идеально Ð´Ð»Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ " "компонентов EE Ñдра." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "ПропуÑк кадров" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Лимит кадров" @@ -2671,7 +2798,7 @@ "ÑоÑтаве отÑутÑтвуют важные компоненты. См. файл лога Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ подробной " "информации." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "" @@ -2692,7 +2819,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Выбранный файл BIOS'а не найден. Выберите другой." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2709,6 +2836,15 @@ "РаÑширение %s не обнаружено. microVU-рекомпилÑтору необходим процеÑÑор Ñ " "поддержкой инÑтрукций MMX, SSE, и SSE2." +#~ msgid "Betatesting" +#~ msgstr "БетатеÑтинг" + +#~ msgid "BIOS Selector" +#~ msgstr "ÐаÑтройка BIOS'а" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Выбор файла-образа в качеÑтве CDVD-иÑточника..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - Уведомление о необходимоÑти SSE2" diff -Nru pcsx2-1.3.1+dfsg/locales/sv_SE/pcsx2_Iconized.po pcsx2-1.4.0/locales/sv_SE/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/sv_SE/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/sv_SE/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -2,10 +2,10 @@ # This file is distributed under the same license as the PCSX2 package. msgid "" msgstr "" -"Project-Id-Version: PCSX2 1.3.0 - 141218\n" +"Project-Id-Version: PCSX2 - 150922\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-12-20 21:25+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-09-22 15:36+0100\n" "Last-Translator: pgert \n" "Language-Team: http://forums.pcsx2.net/Thread-Swedish-GUI-translation-for-" "PCSX2-Svenskt-anv%C3%A4ndargr%C3%A4nssnitt-f%C3%B6r-PCSX2\n" @@ -39,7 +39,7 @@ "PlayStation®One speldiskar stödjes icke av PCSX2. Om Ni vill emulera PSX-" "spel fÃ¥r Ni använda en särskild PSX-emulator, sÃ¥som ePSXe eller PCSX." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -53,7 +53,7 @@ " spärrad växlingsfil används, eller av att ett annat program tar för sig " "mycket minne." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -62,15 +62,15 @@ " för PS2's Virtuella Maskin. Stäng minneskrävande \n" " bakgrundsprogram och försök igen." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "" -"Varning: NÃ¥gra av de konfigurerade PS2-omkompilerarna \n" -" misslyckades att köras igÃ¥ng och har blivit spärrade:" +"Varning: NÃ¥gra av de konfigurerade PS2 omkompilerarna \n" +" kunde inte köras igÃ¥ng och har blivit spärrade:" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -80,17 +80,17 @@ "de förbättrar oftast emuleringshastigheten avsevärt. Ni kanske mÃ¥ste " "Ã¥termöjliggöra omkompilerarna ovanför egenhändigt, om Ni löser fel." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " "count). Please consult the FAQs and Guides for further instructions." msgstr "" "PCSX2 kräver PS2 BIOS för att köras. Av juridiska skäl *mÃ¥ste* Ni anskaffa " -"ett BIOS frÃ¥n en faktisk PS2-enhet som Ni äger (tillÃ¥ns gäller inte). " -"Undersök FAQ'er och Guider för ytterligare information." +"ett BIOS frÃ¥n en faktisk PS2 enhet som Ni äger (tillÃ¥ns gäller inte). Öga " +"igenom FAQ'er och Guider för ytterligare information." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -115,13 +115,46 @@ "självt. Om Ni inte har upphöjd Behörighet för Er dator, fÃ¥r Ni byta till " "AnvändarnivÃ¥Dokument-läge (klicka pÃ¥ knappen nedanför)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" +"Bemärk att slutfilen mÃ¥hända inte innehÃ¥ller alla sparningar, beroende pÃ¥ " +"hur mÃ¥nga som är med i käll-Minneskortet." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" +"VARNING: Omvandling av Minneskort kan ta en stund! Stäng inte emulatorn " +"under omvandlingsprocessen, även om den ej längre svarar." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "Omvandla detta Minneskort till en standard 8 MB Minneskort .ps2 fil." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "Omvandla detta Minneskort till en 16 MB Minneskort .ps2 fil." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "Omvandla detta Minneskort till en 32 MB Minneskort .ps2 fil." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "Omvandla detta Minneskort till en 64 MB Minneskort .ps2 fil." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." msgstr "" -"NTFS-komprimering kan ändras egenhändigt \n" -" när som helst genom Egenskaper \n" +"NTFS-komprimering kan när som helst \n" +" ändras egenhändigt genom Egenskaper \n" " hos Windows Utforskaren." #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:49 @@ -151,8 +184,8 @@ msgstr "" "Denna Dialog kommer att hjälpleda Er genom konfigurering av " "InsticksProgram, \n" -" Minneskort och BIOS. Ifall detta är första gÃ¥ngen Ni installerar %s, \n" -" AnrÃ¥des Ni att undersöka ''Läs mig'' och ''KonfigurationsVägledningen''." +" Minneskort och BIOS. Om detta är första gÃ¥ngen Ni installerar %s, \n" +" AnrÃ¥des Ni att öga igenom ''Läs mig'' och ''KonfigurationsVägledningen''." #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:139 msgid "" @@ -198,6 +231,16 @@ "kortinnehÃ¥ll efter att ha laddat Sparpunkt. MÃ¥hända inte förenligt med alla " "spel (''Guitar Hero'')." +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(Endast Mapp-typ) Ã…terindexera MineskortsInnehÃ¥ll var gÃ¥ng den körandes " +"mjukvaran ändras. Detta förhindrar Minneskortet att fÃ¥ slut pÃ¥ plats för " +"sparningar." + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -241,7 +284,7 @@ "4 - Some more aggressive hacks.\n" "6 - Too many hacks which will probably slow down most games.\n" msgstr "" -"Förinställningarna tillämpar Uppsnabbningshackar, nÃ¥gra \n" +"Förinställningarna tillämpar UppsnabbningsHackar, nÃ¥gra \n" " omkompilerarfunktioner, och en del Spelfixar som till vetskap ökar " "farten. \n" "Spelfixar som till vetskap är viktiga (''Patchar'') tillämpas automatiskt. \n" @@ -260,7 +303,7 @@ "\n" "--> Uncheck to modify settings manually (with current preset as base)" msgstr "" -"Förinställningarna tillämpar Uppsnabbningshackar, nÃ¥gra \n" +"Förinställningarna tillämpar UppsnabbningsHackar, nÃ¥gra \n" " omkompilerarfunktioner, och en del Spelfixar som till vetskap ökar " "farten. \n" "Spelfixar som till vetskap är viktiga (''Patchar'') tillämpas automatiskt. \n" @@ -278,7 +321,7 @@ " framsteg kommer att gÃ¥ förlorade. \n" "Är Ni säker?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -300,7 +343,7 @@ "\n" "Är Ni helt säker?" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -311,7 +354,14 @@ " och Ã¥termöjliggöra sockeln när som helst genom ''Konfig > Minneskort'' i " "Huvudmenyn." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" +"(MappMkort) Minneskortet är fullt - Följaktligen kunde inte denna tilläggas: " +"%s" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -319,7 +369,7 @@ "Välj ett giltligt BIOS. Är Ni oförmögen att göra detta \n" " sÃ¥ tryck ''Avbryt'' för att stänga KonfigurationsDialogen." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" "EE = Emotion Engine = Rörelse Motor = PS2 CPU'n \n" @@ -327,7 +377,7 @@ "\n" "Bemärk: De flesta spel har det fint med FörvalsSättningarna." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" "VM = Virtual Machine = Virtuell Maskin \n" @@ -400,7 +450,7 @@ "emulation. You can still toggle fullscreen display at any time using alt-" "enter." msgstr "" -"Möjliggör automatiskt lägesbyte till Helskärm när emulering börjar eller " +"Möjliggör automatiskt lägesbyte till Helskärm när emulering pÃ¥börjas eller " "Ã¥terupptas. \n" "Ni kan fortfarande växla mellan Helskärm och Fönsterläge genom att trycka " "''Alt'' + ''Enter''." @@ -459,12 +509,14 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" -"Det är i allmänhet bättre att spärra denna tillämpning, och att möjliggöra " -"''Automatiska Spelfixar'' \n" +"Det är i allmänhet bättre att ha denna tillämpning spärrad, och att isället " +"möjliggöra ''Automatiska Spelfixar'' \n" " i Huvudmenyn (''Automatiska'' innebär: Tillämpar särskilt utvalda och " -"beprövade lösningar för särskilda spel)." +"beprövade lösningar för särskilda spel).\n" +"Egna Spelfixar ökar INTE prestandan, utan kan mÃ¥hända istället minska den." #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 msgid "" @@ -477,10 +529,10 @@ "De kan dock vÃ¥lla förenlighets- och/eller prestandaproblem. \n" "Ni fÃ¥r stänga av Spelfixar egenhändigt när Ni byter spel. \n" "\n" -"Det bästa sättet att försäkra Er om att alla egenhändiga \n" +"Det bästa sättet att försäkra Er om att alla Egna \n" " Spelfixar är helt spärrade, är att ha denna Avmarkerad." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -490,14 +542,14 @@ "All data pÃ¥ detta kort kommer att förloras! \n" "Är Ni helt säker?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Misslyckades: Dubblering är endast tillÃ¥tet till en tom PS2-sockel, eller " -"till ett filsystem." +"till filsystemet." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Misslyckades: MÃ¥lMinneskortet '%s' används för närvarande." @@ -566,8 +618,8 @@ "Varning! Att byta InsticksProgram kräver en full nedstängning \n" " och Ã¥terställning av PS2's Virtuella Maskin. \n" "PCSX2 kommer att försöka att spara och Ã¥terställa tillstÃ¥ndet, \n" -" men om de nyligen valda InsticksProgramen är oförenliga \n" -" kan detta misslyckas, och alla nuvarande framsteg gÃ¥r förlorade. \n" +" men om de nyligen valda InsticksProgramen är oförenliga kan detta \n" +" misslyckas, och alla nuvarande framsteg gÃ¥r sÃ¥ledes förlorade. \n" "\n" "Är Ni säker att Ni vill tillämpa ändringarna nu?" @@ -585,40 +637,56 @@ " installaion av %s, sÃ¥ tryck ''Avbryt'' för att stänga " "KonfigurationsDialogen." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - Förvalscykelgrad. \n" -"Detta överensstämmer nästan med den \n" -" faktiska hastigheten för en PS2-EE." +"3 - Minskar EE'ns cykelgrad med ungefär 50%. \n" +"MÃ¥ttfull uppsnabbning, men *kommer* att \n" +" vÃ¥lla stamningsljud för mÃ¥nga FMV'er." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - Minskar EE'ns cykelgrad med ungefär 33%. \n" "Mild uppsnabbning och hög förenlighet \n" " för de flesta spel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" +"1 - Förvalscykelgrad. \n" +"Detta överensstämmer nästan med den \n" +" faktiska hastigheten för en PS2 EE." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - Minskar EE'ns cykelgrad med ungefär 50%. \n" -"MÃ¥ttfull uppsnabbning, men *kommer* att \n" -" vÃ¥lla stamningsljud för mÃ¥nga FMV'er." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - Förhndrar VU-cykelstöld. \n" "Den mest förenliga inställningen!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -627,7 +695,7 @@ "Lägre förenlighet, men en \n" " viss uppsnabbning för de flesta spel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -636,7 +704,7 @@ "Ännu lägre förenlighet, men en \n" " markant uppsnabbning för vissa spel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -645,29 +713,33 @@ "Begränsad användning, eftersom tillämpning \n" " vÃ¥llar synligt flimrande för de flesta spel." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " "panel first." msgstr "" -"Uppsnabbningshackar förbättrar vanligtvis emuleringshastigheten, men kan " +"UppsnabbningsHackar förbättrar vanligtvis emuleringshastigheten, men kan " "vÃ¥lla trassel, \n" " brutet ljud, och falska FPS-avläsningar. Spärra denna panel det första Ni " "gör vid emuleringsproblem." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Att sätta ett högre värde genom denna manick minskar \n" " verkningsfullt klockhastigheten hos EE'ns R5900 kärn-CPU, \n" " och ger oftast en hög hastghetsökning Ã¥t spel som är oförmögna \n" " att nyttja möjligheterna med PS2's verkliga hÃ¥rdvara fullt ut." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -677,7 +749,7 @@ " stjäl ifrÃ¥n EE'n. Högre värden ökar antalet cykler \n" " som stjäls frÃ¥n EE'n för varje microVU program spelet kör." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -688,7 +760,7 @@ "Detta är för det mesta säkert, \n" " och superVU gör nÃ¥got liknande som standard." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -702,7 +774,7 @@ "Vidare kan en nedbromsning ske för GS-begränsade spel \n" " (i synnerhet med dubbelkärniga CPU'er)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -713,7 +785,7 @@ "Spel som inte använder denna Vsync-metod \n" " kommer pÃ¥ sin höjd att fÃ¥ en Liten uppsnabbning." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -731,7 +803,7 @@ "nästa händelse \n" " eller till slutet av processorns tidskvantum, vilket som än kommer först." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -740,7 +812,7 @@ "frÃ¥ga \n" " med det här (ofta markerat som behövande ''läge 1'' eller ''lÃ¥ngsam DVD'')." -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -749,7 +821,7 @@ " spärrad sÃ¥ kommer lägena Turbo & Nedsatt \n" " heller inte att vara tillgängliga." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -758,15 +830,15 @@ " sÃ¥ är precist bildöverhoppande ouppnÃ¥eligt. \n" "Att tillämpa det kan vÃ¥lla rejäla grafikfel för vissa spel." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "" -"Tillämpa detta ifall Ni tror att MTGS-trÃ¥dsyncen \n" +"Tillämpa detta ifall Ni tror att MTGS-trÃ¥dsynken \n" " vÃ¥llar braker eller grafiska fel." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -775,7 +847,7 @@ "Warning: This option can be enabled on-the-fly but typically cannot be " "disabled on-the-fly (video will typically be garbage)." msgstr "" -"Tar bort allt norm-oljud vÃ¥llat av MTGS-trÃ¥dens eler GPU'ns överdrag. \n" +"Tar bort allt norm-oljud vÃ¥llat av MTGS-trÃ¥dens eller GPU'ns överdrag. \n" "Denna funktion används bäst i förening med Sparpunkter: \n" " gör en Sparpunkt i en idealisk scen, tillämpa denna funktion, \n" " och Ã¥terladda därefter Sparpunkten.\n" @@ -783,7 +855,7 @@ "Varning: Denna funktion kan möjliggöras dynamiskt \n" " men kan vanligtvis inte spärras pÃ¥ samma vis (video blir ofta skräp)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " @@ -805,7 +877,7 @@ " den mängd särskilda minne som krävs, och kommer inte vara tillgänglig för " "bruk. \n" "Detta är inte ett kritiskt fel eftersom sVU är förÃ¥ldrat, \n" -" och följdaktligen borde Ni hur som helst använda Er av microVU istället." +" och följaktligen borde Ni hur som helst använda Er av microVU istället." #~ msgid "" #~ "Warning: Your computer does not support SSE2, which is required by many " diff -Nru pcsx2-1.3.1+dfsg/locales/sv_SE/pcsx2_Main.po pcsx2-1.4.0/locales/sv_SE/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/sv_SE/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/sv_SE/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -2,10 +2,10 @@ # This file is distributed under the same license as the PCSX2 package. msgid "" msgstr "" -"Project-Id-Version: PCSX2 1.3.0 - 141218\n" +"Project-Id-Version: PCSX2 - 150922\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-12-20 21:25+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-09-22 15:36+0100\n" "Last-Translator: pgert \n" "Language-Team: http://forums.pcsx2.net/Thread-Swedish-GUI-translation-for-" "PCSX2-Svenskt-anv%C3%A4ndargr%C3%A4nssnitt-f%C3%B6r-PCSX2\n" @@ -21,15 +21,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Ingen anledning given." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Tolkningsfel" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "Er maskinhÃ¥rdvara är oförmögen att köra PCSX2. Beklagar snubben." @@ -53,7 +53,7 @@ #: common/src/Utilities/Exceptions.cpp:332 msgid "[Unnamed or unknown]" -msgstr "[Onamngiven eller okänd]" +msgstr "[Onamngiven eller Okänd]" #: common/src/Utilities/Exceptions.cpp:352 msgid "A file could not be created." @@ -97,7 +97,7 @@ "Innefattar tomgÃ¥ngshändelsebearbetning och nÃ¥gra andra ovanliga " "händelseanvändningar." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Oerkänt ISO-filformat" @@ -114,87 +114,88 @@ "Om försök att ladda genom ISO-avbild har gjorts, kan detta fel ha orsakats " "av en ostödjandes ISO-typ, eller av ett fel i PCSX2's ISO-stöd." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "MTGS-trÃ¥den har blivit osvarandes under inväntningen av att GS-" -"InsticksProgramet ska öppna." +"InsticksProgrammet ska öppna." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" -"Sparpunkten kan inte laddas, eftersom den verkar förstörd eller ofullständig." +"Sparpunkten kan inte laddas, eftersom den verkar vara förstörd eller " +"ofullständig." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " "incompatible hardware/drivers." msgstr "" -"%s's InsticksProgram misslyckades att öppna. \n" +"%s's InsticksProgram kunde inte öppna. \n" "Er dator kan ha otillräckliga erfordeliga resurser, \n" " eller oförenlig hÃ¥rdvara/drivrutiner." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " "resources needed." msgstr "" -"%s's InsticksProgram misslyckades att komma igÃ¥ng. \n" +"%s's InsticksProgram kunde inte köra igÃ¥ng. \n" "Ert system kan ha otillräckligt med minne eller andra erfordeliga resurser." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" -msgstr "Den konfigurerade %s-InsticksProgramsFilen hittades ej." +msgstr "Den konfigurerade %s-InsticksProgramFilen hittades ej." -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" -msgstr "Det konfigurerade %s-InsticksProgramet är inte en giltlig DLL." +msgstr "Det konfigurerade %s-InsticksProgrammet är inte en giltlig DLL." -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " "unsupported version of PCSX2." msgstr "" -"Det konfigurerade %s-InsticksProgramet är inte ett giltigt \n" +"Det konfigurerade %s-InsticksProgrammet är inte ett giltigt \n" " PCSX2-InsticksProgram, eller är för en äldre ostödjandes version av PCSX2." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" -"InsticksProgramet rapporterar att Er hÃ¥rdvara och/eller mjukvara/drivrutiner " -"icke stödjes." +"InsticksProgrammet rapporterar att Er hÃ¥rdvara och/eller mjukvara/" +"drivrutiner icke stödjes." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "" -"Det konfigurerade InsticksProgramet är inte ett giltigt \n" +"Det konfigurerade InsticksProgrammet är inte ett giltigt \n" " PCSX2-InsticksProgram, eller är för en äldre ostödjandes version av PCSX2." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " "unsupported version of PCSX2." msgstr "" -"Det konfigurerade %s-InsticksProgramet är inte ett giltligt \n" +"Det konfigurerade %s-InsticksProgrammet är inte ett giltligt \n" " PCSX2-InsticksProgram, eller är för en äldre ostödjandes version av PCSX2." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." -msgstr "Det egna MinneskortsInsticksProgramet misslyckades att komma igÃ¥ng." +msgstr "Det egna MinneskortsInsticksProgrammet kunde inte köra igÃ¥ng." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "Oladdat InsticksProgram" @@ -206,14 +207,13 @@ #: pcsx2/SourceLog.cpp:96 msgid "Dumps detailed information for PS2 executables (ELFs)." -msgstr "Skriver ut detaljerad information om PS2-körfiler (ELF'ar)." +msgstr "Skriver ut detaljerad information om PS2 körfiler (ELF'ar)." #: pcsx2/SourceLog.cpp:101 msgid "" "Logs manual protection, split blocks, and other things that might impact " "performance." -msgstr "" -"Loggar egenhändigt skydd, delade block, och annat som kan pÃ¥verka prestanda." +msgstr "Loggar eget skydd, delade block, och annat som kan pÃ¥verka prestanda." #: pcsx2/SourceLog.cpp:106 msgid "Shows the game developer's logging text (EE processor)" @@ -348,11 +348,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "Detaljerad loggning av CDVD-hÃ¥rdvara." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 Meddelande" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -360,40 +360,40 @@ "Sparpunkten blev inte ordentligt sparad. Den tillfälliga filen skapades " "framgÃ¥ngsrikt med kunde inte flyttas till sin slutliga viloplats." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "Säkrast" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Säkert (snabbare)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Balanserat" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Aggressivt" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Aggressivt plus" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "Mest Skadligt" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" "Misslyckades att skriva över befintlig InställningsFil; tillstÃ¥nd nekades." #: pcsx2/gui/AppCorePlugins.cpp:404 msgid "Loading PS2 system plugins..." -msgstr "Laddar PS2-SystemInsticksProgram ..." +msgstr "Laddar PS2 SystemInsticksProgram ..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." @@ -401,192 +401,197 @@ "SSE2-utökningar ej tillgängliga. PCSX2 kräver en CPU som stödjer " "instruktionsuppsättningen SSE2." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 OmkompilerarFel" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" "Alla valmöjligheter gäller endast för den nuvarande sessionen och kommer " "inte att sparas. \n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "ISO-fil" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "uppvisar listan av instruktionsmöjligheter" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" -msgstr "tvingar programets logg/konsol att uppenbara sig" +msgstr "tvingar programmets logg/konsol att uppenbara sig" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "använd Helskärms GS-läge" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "använd inramat GS-läge" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "spärrar uppvisning av GUI medans spel körs" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "med ingen GUI - anmärk innan utträde" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "kör en ELF-avbild" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" -msgstr "kör igÃ¥ng en tom DVD-trÃ¥g; använd för att Ã¥tkomma PS2's systemmeny" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" +msgstr "kör igÃ¥ng en tom DVD-trÃ¥g; använd för att Ã¥tkomma PS2's SystemMeny" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" -msgstr "kör igÃ¥ng frÃ¥n CDVD-InsticksProgramet (Ã¥sidosätter ISO-fil parameter)" +msgstr "" +"kör igÃ¥ng genom CDVD-InsticksProgrammet (Ã¥sidosätter ISO-fil parameter)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" -msgstr "spärrar alla Uppsnabbningshackar" +msgstr "spärrar alla UppsnabbningsHackar" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "använd den angivna komma- eller linjeavgränsande listan av Spelfixar." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "spärrar Snabbkörning" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "ändrar KonfigurationfilsVägen" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "anger PCSX2-KonfigurationsFilen att använda" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "tvingar %s att köra KonfigurationsDialogen" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "möjliggör flyttbart-läge procedur (kräver AdministarörsBehörighet)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "ange filen att använda som %s's InsticksProgram" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Insticks Ã…sidosättande Fel - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " "valid %s plugin:\n" "\n" msgstr "" -"%s Insticks Ã…sidosättande Fel! Följande fil finns ej \n" +"%s Insticks Ã…sidosättande Fel! Följande fil finns ej, \n" " eller är icke ett giltligt %s-InsticksProgram: \n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" -"Tryck ''Vidare'' för att använda det FörvalsKonfigurerade InsticksProgramet, " -"eller ''Avbryt'' för att stänga %s." +"Tryck ''Vidare'' för att använda det FörvalsKonfigurerade " +"InsticksProgrammet, eller ''Avbryt'' för att stänga %s." -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 Fel: HÃ¥rdvaruBristfällighet" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "Tryck ''Vidare'' för att stänga %s." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kritiskt Fel" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "Vidare" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&Vidare" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Avbryt" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Avbryt" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Tillämpa" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Nästa >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Tillbaka" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Tillbaka" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Slutför" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&Ja" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&Nej" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Bläddra" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Spara" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "Spara So&m ..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Hjälp" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Hem" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "InfoDialog om PCSX2." -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -596,42 +601,46 @@ "\n" "Tryck ''Vidare'' för att gÃ¥ till InsticksKonfigurationsPanelen." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" "Varning! SystemInsticksProgram har inte laddats. PCSX2 kan vara oduglig." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Instruktionsmöjligheter" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS Fel" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "Tryck ''Vidare'' för att gÃ¥ till BIOS KonfigurationsPanelen." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "Varning! Giltligt BIOS har ej valts. PCSX2 kan vara oduglig." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Instruktionsmöjligheter" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 Osvarande trÃ¥d" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Avsluta" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Kör PS2's Virtuella Maskin ..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Bläddra efter en ISO som inte redan är i Er lista." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Bläddra ..." @@ -679,51 +688,51 @@ "Kan ej tillämpa de nya inställningarna, eftersom att minst en av dom är " "ogiltlig." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Spara loggfrÃ¥ga" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Klämmer in mycket loggning i en mikroskopiskt liten yta." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Litet" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Det är vad Jag (programmerarsnubben) använder." -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" -msgstr "Normalt" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" +msgstr "Normalt typsnitt" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Det är fint och läsbart." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Stort" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Enormt" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." -msgstr "Utifall att Ni har en riktigt hög upplösning." +msgstr "Om Ni har en riktigt hög upplösning." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "FörvalsMjukatmosfärs-färgtema." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Ljust tema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -731,84 +740,92 @@ "Klassiskt svart färgtema för folk som njuter av att ha text svedd in i sina " "synnerver." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Mörkt tema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Alltid överst" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "När markerad kommer loggfönstret att bli synligt över andra fönster." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&Spara ..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Spara logginnehÃ¥ll till fil" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&Rensa" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Rensa loggfönsterinnehÃ¥llet" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Framträdande" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "St&äng" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Stäng detta loggfönster; innehÃ¥llet bevaras" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Utförliga loggar" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "Visar PCSX2's utvecklarloggar" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD läsningar" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Visar diskläsaraktivitet" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Möjliggör allt" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Möjliggör alla loggkällsfilter." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Spärra allt" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Spärrar alla loggkällsfilter." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "Ã…terställ Förval" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore default source filters." +msgstr "Ã…terställ FörvalsKällfilter." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Logg" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Källor" @@ -821,47 +838,44 @@ msgid "About %s" msgstr "Om %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatestare" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "FöregÃ¥ende versioner" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Nätansvariga" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "InsticksProgramsSpecialister" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Särskilt tack till" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "Utvecklare" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Bidragare" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "En PlayStation®2 emulator" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2's officiella Websida & Forum" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "PCSX2's officiella SVN-magasin hos GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Jag har sett nog" @@ -869,23 +883,19 @@ msgid "Assertion Failure - " msgstr "PÃ¥stÃ¥endesMisslyckande - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Gör en Stillbild av denna InställningsPanel till en PNG-fil." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Spara DialogSkärmsbilder i ..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS Väljare" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Visa inte denna dialog igen." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -893,7 +903,7 @@ "Spärrar denna DialogRuta, och de gensvar Ni gör här kommer automatiskt att " "användas hädanefter." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -901,16 +911,87 @@ "Meddelandet kommer inte visas igen. Inställningen kan ändras i " "InställningsPanelen." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Förbise" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Ã…terställ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "Omvandla ett Minneskort till ett annat format" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "Omvandla" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "Omvandla:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "Till:" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "8MB fil" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "16MB fil" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "32MB fil" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "64MB fil" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "Omvandla detta Minneskort till en mapp med individuella sparningar." + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "Mapp" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Fel (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "Omvandla Minneskort" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "Denna mÃ¥ltyp stödjes ej!" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "MinneskortsOmvandlingen misslyckades, av okänd anledning." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Skapa ett nytt Minneskort" @@ -932,30 +1013,29 @@ msgid "Select file name: " msgstr "Välj filnamn:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Fel (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Skapa Minneskort" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "Fel: Mappen för Minneskortet kunde inte skapas." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Fel: Minneskortet kunde inte skapas." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Använd NTFS-komprimering för skapande av detta kort." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [mest förenligt]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -963,7 +1043,7 @@ "Detta är den (av Sony) standard-föreskrivna storleken \n" " och stödjes av alla spel och BIOS versioner." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -971,34 +1051,34 @@ "Använd alltid denna tillämpning om Ni vill ha det \n" " säkraste och tillförlitligaste MinneskortsBeteendet." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "En typisk storlek för tredje-parts Minneskort \n" " som bör fungera med de flesta spel." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" "16 & 32 MB kort har ungefär \n" " samma FörenlighetsEgenskap." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -1006,7 +1086,7 @@ "Varning för lÃ¥g förenlighet: Jo den är väldigt stor, \n" " men fungerar mÃ¥hända inte för mÃ¥nga spel." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1015,6 +1095,26 @@ " oberäkneliga MinneskortsBeteenden \n" " är möjliga (dock osannolika)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "Mapp [experimentell]" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "Lagra MinneskortsInnehÃ¥ll i Värdfilssystemet istället för i en fil." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" +"Hanterar automatiskt MinneskortsInnehÃ¥ll, sÃ¥ att konsolen endast ser filer " +"förknippade med den körandes mjukvaran. LÃ¥ter Er dra-och-släppa filer in i " +"och ut ur Minneskortet med Er vanliga filhanterare. Detta är ännu " +"experimentellt, sÃ¥ användes pÃ¥ egen risk!" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1025,6 +1125,7 @@ msgstr "Inställningar" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "SprÃ¥kVäljare" @@ -1078,15 +1179,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Utmata automatiskt Minneskort när Sparpunkter laddas" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "Hantera automatiskt sparningar härstammandes frÃ¥n körandes spel" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "MinneskortsHanteraren" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" -msgstr "Dra kort till eler frÃ¥n PS2-socklar" +msgstr "Dra kort till eller frÃ¥n PS2-socklar" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1149,24 +1254,24 @@ msgid "Game Fixes" msgstr "Spelfixar" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "SystemInställningsDialog - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "InsticksProgram" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Mappar" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Framträdande/Teman - %s" @@ -1177,7 +1282,7 @@ #: pcsx2/gui/ExecutorThread.cpp:430 msgid "Press Cancel to attempt to cancel the action." -msgstr "Tryck ''Avbryt'' för att försöka avbryta verkan." +msgstr "Tryck ''Avbryt'' för att försöka avbryta gärningen." #: pcsx2/gui/ExecutorThread.cpp:431 #, c-format @@ -1188,47 +1293,51 @@ msgid "Terminate App" msgstr "Avsluta Tillämpning" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS Utsignal är Spärrad!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "Avsluta PCSX2?" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Skapa Sparpunkt" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Sparar VM-tillstÃ¥ndet till den nuvarande Spalten." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Ladda Sparpunkt" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Laddar ett VM-tillstÃ¥nd frÃ¥n den nuvarande Spalten." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Ladda SparpunktsKopia" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Laddar VM-tillstÃ¥ndskopian för den nuvarande Spalten." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Cyklar till nästa Spalt" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Cyklar den nuvarande Spalten i +1 vis!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Cyklar till föregÃ¥ende Spalt" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Cyklar den nuvarande Spalten i -1 vis!" @@ -1244,7 +1353,7 @@ msgstr "" "Det är felaktigt att släppa flera filer pÃ¥ ett %s-fönster. En i taget, tack." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "Bekräfta PS2 Ã…terställning" @@ -1262,277 +1371,277 @@ msgid "You have dropped the following ISO image into %s:" msgstr "Ni har släppt följande ISO-avbild i %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Spalt %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Kopiera Spalt " -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Visa Konsol" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsol till Stdio" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&System" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "&CDVD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Konfig" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&Övrigt" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Felsök" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "Initialisering ..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "Kör ELF ..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "För att direktköra rÃ¥a PS2-binärer." -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Magasinera vid Överskrivning" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Automatiska Spelfixar" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" "Tillämpar automatiskt erfordeliga Spelfixar för till vetskap problematiska " "spel." -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Möjliggör Fuskisar" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "Möjliggör Bredbildsfixar" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" -msgstr "Möjliggör Värdfilsystem" +msgstr "Möjliggör Värdfilssystem" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Avsluta Emulering" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." -msgstr "Rensar alla inhemska VM-tillstÃ¥nd och stänger InsticksProgram." +msgstr "Rensar alla egna VM-tillstÃ¥nd och stänger InsticksProgram." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Stäng av Emulatorn" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "Att stänga %s kan vara riskfyllt för Edert välbefinnande." -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ISO väljare" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "InsticksMeny" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "ISO" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Gör den ovan angivna ISO-avbilden till CDVD-källa." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "InsticksProgram" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "Använder ett utomstÃ¥ende InsticksProgram som CDVD-källa." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "Disklös" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Använd detta för att köra Er virtuella PS2's BIOS konfiguration." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "&EmuleringsInställningar" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&MinneskortsHanteraren" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&SystemInställningar" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "SpeldatabasRedigerare" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Video (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Ljud (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Manövrering (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Flerplugg 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Flerplugg 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Rensa alla Inställningar ..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Rensa alla %s-inställningar och Ã¥terkör KonfigurationsDialogen." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Om ..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." -msgstr "Öppna felsöksfönster..." +msgstr "Öppna FelsöksDialog ..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Loggning ..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Pausa" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Säker halt av emulering som bevarar PS2-tillstÃ¥ndet." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Ã…teruppta" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Ã…terupptar det pausade emuleringstillstÃ¥ndet." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Pausa/Ã…teruppta" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "Inget emuleringstillstÃ¥nd är aktivt; inget att Pausa/Ã…teruppta." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Omstart" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "Simulerar hÃ¥rdvaruÃ¥terställningen för PS2's Virtuella Maskin." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Inget emuleringstillstÃ¥nd är aktivt - kör nÃ¥got först." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "Ã…terkör CDVD (fullt)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Full Ã¥terställning av aktiv VM." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "Kör CDVD (fullt)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Kör VM'n med det nuvarande DVD/ISO mediumet som källa." -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "Ã…terkör CDVD (snabbt)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "Ã…terkör med Snabbuppkörning (hoppar över plaskskärmar)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "Kör CDVD (snabbt)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "Använd detta för att hoppa över PS2-uppstart och plaskskärmar." -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Inget InsticksProgram laddat" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Kärn GS inställningar ..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1540,95 +1649,95 @@ "Ändra HÃ¥rdvaruEmuleringsInställningar reglerade av PCSX2's kärn Virtuella " "Maskin." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "FönsterInställningar ..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "Ändra fönster och UtseendeTillämpningar, däribland Bildkvot." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "InsticksInställningar ..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." -msgstr "Öppnar %s-InsticksProgramets avancerade InställningsDialog." +msgstr "Öppnar %s-InsticksProgrammets avancerade InställningsDialog." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Ã…terställa alla inställningar?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "Bekräfta ISO-avbildförändring" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "Vill Ni byta disk eller köra den nya avbilden \n" " (genom systemÃ¥terställning)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "Byt Disk" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "Bekräfta CDVD-källförändring" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "Ni har valt att byta CDVD-källa frÃ¥n %s till %s." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "Vill Ni byta disk eller köra den nya avbilden (systemÃ¥terställning)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Alla Stödjandes (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Diskavbilder (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumpar (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "Komprimerade (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Alla Filer (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "Välj CDVD'ns käll-ISO ..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "Välj disk-avbild, komprimerad disk-avbild, eller block-dumpning ..." -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "Välj ELF-fil ..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO-fil hittades ej!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Ett fel uppstod medans försök gjordes att öppna filen:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1636,7 +1745,7 @@ "Fel: Den konfigurerade ISO-filen finns ej. Klicka ''Vidare'' för att välja " "en ny ISO-källa till CDVD'n." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1644,7 +1753,7 @@ "Ni har valt följande ISO-avbild för PCSX2: \n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1657,7 +1766,7 @@ "%s \n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1670,19 +1779,19 @@ "%s \n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Filnamnet är tomt eller för kort" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Filnamnet är utanför den krävda Mappen" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Filnamnet finns redan" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "OperativSystemet hindrar denna fil frÃ¥n att skapas" @@ -1690,15 +1799,15 @@ msgid "Cannot apply settings..." msgstr "Kan ej tillämpa inställningar ..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS Filväg:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "Välj Mapp med PS2 BIOS ROM" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." @@ -1706,13 +1815,13 @@ "Klicka pÃ¥ ''Bläddra'' för att välja en annan Mapp för PCSX2 att söka efter " "PS2 BIOS ROM." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Aktualisera" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "Välj ett BIOS ROM:" @@ -1744,71 +1853,75 @@ msgid "None" msgstr "Inget" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normalt" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU Avancerade OmkompilerarFunktioner" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Extra + Bevara Minus" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Fullt" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0/VU1 Avancerade OmkompilerarFunktioner" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Extra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Tolkare" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." -msgstr "Möjligen det lÃ¥ngsammaste i universum." +msgstr "Möjligen det lÃ¥ngsammaste i Universum." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Omkompilerare" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "" "Utför precis-i-tid binäröversättning av 64-bit MIPS-IV maskinkod till x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Ganska lÃ¥ngsam; tillhandahÃ¥lls endast för Diagnostiksyften." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "" "Utför precis-i-tid binäröversättning av 32-bit MIPS-I maskinkod till x86." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "Möjliggör EE-förrÃ¥d (LÃ¥ngsammare)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Endast tolkare; tillhandahÃ¥lls för Diagnostiksyften." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Ã…terställ Förval" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." @@ -1817,22 +1930,22 @@ "LÃ¥ngsam och inte värst förenlig. \n" "Använd endast för Diagnostik." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU (mVU) Omkompilerare" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" "Ny VU-omkompilerare med mycket \n" " förbättrad förenlighet. AnrÃ¥des." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU (sVU) Omkompilerare [legat]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -2008,8 +2121,8 @@ "Förbise Bussriktning vid ''Path3 Överföring'' - används för ''Hotwheels''." #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" -msgstr "Växla till GSdx Mjukvaruframställning när FMV-videor spelas." +msgid "Switch to GSdx software rendering when an FMV plays" +msgstr "Växla till GSdx Mjukvaruframställning en FMV spelas." #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" @@ -2017,7 +2130,7 @@ #: pcsx2/gui/Panels/GameFixesPanel.cpp:115 msgid "Enable manual game fixes [Not recommended]" -msgstr "Möjliggör egenhändiga Spelfixar [AvrÃ¥des]" +msgstr "Möjliggör Egna Spelfixar [AvrÃ¥des]" #: pcsx2/gui/Panels/LogOptionsPanels.cpp:249 msgid "Enable Trace Logging" @@ -2039,86 +2152,90 @@ "Varning: Möjliggörande av spÃ¥rloggar är vanligtvis mycket lÃ¥ngsamt, och är " "den främsta orsaken till ''Vad skedde med mina FPS'er?'' problem. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" -msgstr "Välj Mapp med PS2-Minneskort" +msgstr "Välj Mapp med PS2 Minneskort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Utmata" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Dubblera ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Namnbyt ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Skapa ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "Omvandla ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Minneskort: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Skapa ett nytt Minneskort." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Namnbyt detta Minneskort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Inmata ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Utmata Minneskortet frÃ¥n denna sockel" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Inmata detta kort till en sockel ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Dubblera detta Minneskort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Kassera" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Kassera detta Minneskort (allt innehÃ¥ll gÃ¥r förlorat)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Skapa ett nytt Minneskort och anvisa den till denna Sockel." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Kassera minnesfil?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Dubblera Minneskort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "Misslyckades: Kan endast dubblera ett befintligt kort." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2126,25 +2243,25 @@ "Välj ett namn för dubbletten \n" " (''.ps2'' läggs till automatiskt):" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "Misslyckades: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopiering misslyckades!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "Minneskort ''%s'' dubblerad till ''%s''." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "FramgÃ¥ng" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2153,119 +2270,123 @@ "Välj ett nytt namn för Minneskortet ''%s'' \n" " (''.ps2'' läggs till automatiskt):" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Namnbyt Minneskort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Fel: Namnbyte kunde inte fullgöras. \n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Sockel-%u / Flerplugg-%u--Sockel-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Flerplugg-%u--Sockel-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "Tom" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "Välj en mÃ¥lsockel för ''%s''" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Inmata kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Utmata kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Inmata kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Dubblera kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Namnbyt kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Kassera kort" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "Omvandla kort" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Skapa ett nytt kort ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Aktualisera" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" -msgstr "PS2-Sockel" +msgstr "PS2 Sockel" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kort (fil) namn" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Kortstorlek" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "Formaterad" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Typ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Senast Modifierad" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "Skapad den" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Nej" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Ja" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Oanvända kort --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Inga oanvända kort --]" @@ -2298,11 +2419,11 @@ msgid "Select a document root for %s" msgstr "Välj en dokument-rot för %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Tillämpa" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Gör genast detta till mitt FörvalsSprÃ¥k!" @@ -2377,62 +2498,62 @@ "Reason: %s\n" "\n" msgstr "" -"Det valda %s-InsticksProgramet misslyckades att laddas. \n" +"Det valda %s-InsticksProgrammet kunde inte laddas. \n" "\n" "Anledning: %s \n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Fullföljer uppgifter ..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" -msgstr "Möjliggör Uppsnabbningshackisar" +msgstr "Möjliggör UppsnabbningsHackisar" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Ett lätt och säkert sätt att försäkra Er \n" -" om att alla Uppsnabbningshackar är helt \n" +" om att alla UppsnabbningsHackar är helt \n" " spärrade, är att ha denna Avmarkerad." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "" "Ã…terställer alla UppsnabbningsTillämpningar \n" -" till deras Förval, vilket följdaktligen avaktiverar dem." +" till deras Förval, vilket följaktligen avaktiverar dem." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE cykelhastighet [AvrÃ¥des]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU cykelstöld [AvrÃ¥des]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hackisar" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flagg Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Bra uppsnabbning och hög förenlighet; kan vÃ¥lla dÃ¥lig grafik ... [AnrÃ¥des]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-TrÃ¥dad microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2440,15 +2561,15 @@ "Bra uppsnabbning och hög förenlighet; kan vÃ¥lla att det hänger sig ... " "[AnrÃ¥des för 3+ kärnor]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Andra Hackisar" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Möjliggör INTC RotationsUpptäckning" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2456,21 +2577,21 @@ "Enorm uppsnabbning för vissa spel, men nästan utan FörenlighetsBieffekter. " "[AnrÃ¥des]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Möjliggör VäntgÃ¥ngsUpptäckning" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "MÃ¥ttlig uppsnabbning för vissa spel, dock utan kända bieffekter. [AnrÃ¥des]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Möjliggör snabb CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "Snabb disktillgÃ¥ng med färre antal laddningar. [AvrÃ¥des]" @@ -2494,42 +2615,42 @@ msgid "Select a visual theme:" msgstr "Välj ett tema:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Spärra Bildhastighetsreglering" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Användbart för att köra enligt Riktmärkningar. Omkoppla denna tillämpning i " "aktivt spel genom att trycka pÃ¥ ''F4''." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Normal reglering:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Nedsatt reglering:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbo reglering:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC bildfrekvens:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL bildfrekvens:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2537,19 +2658,19 @@ "Fel under tolkning av antingen NTSC eller PAL BildfrekvensInställningar. " "Inställningarna mÃ¥ste vara giltliga flyttalsnummer." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Spärrat [förval]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Hoppa över endast vid Turbo (''Tab'' för att möjliggöra)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Konstant överhoppande" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2557,19 +2678,19 @@ "Normal & Turbo begränsad Bildöverhoppning, \n" " vilket (bemärk) fortfarande spärras med läget Nedsatt." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Bilder att Rita" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Bilder att Hoppa över" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Använd synkroniserad MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2577,11 +2698,11 @@ "Endast för att problemlösa eventuella fel inom MTGS, eftersom det möjligen " "är mycket lÃ¥ngsamt." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Spärra all GS-utgÃ¥ng" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2589,11 +2710,11 @@ "Spärrar helt all GS-InsticksProgramsAktivitet; \n" " idealt för att utvärdera EE-KärnKomponenter." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Bildöverhoppning" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Bildhastighetsreglering" @@ -2631,7 +2752,7 @@ "Oförmögen att ladda denna Sparpunkt till följd av saknade kritiska " "Komponenter. Se loggfil för detaljer." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (förval)" @@ -2651,7 +2772,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Den konfigurerade BIOS filen finns ej. Omkonfigurera!" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2667,6 +2788,15 @@ msgstr "" "%s-utökningar ej funna. microVU kräver en värd-CPU med SSE2-utökningar." +#~ msgid "Betatesting" +#~ msgstr "Betatestare" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS Väljare" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "Välj CDVD'ns käll-ISO ..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 AnrÃ¥des" diff -Nru pcsx2-1.3.1+dfsg/locales/templates/pcsx2_Iconized.pot pcsx2-1.4.0/locales/templates/pcsx2_Iconized.pot --- pcsx2-1.3.1+dfsg/locales/templates/pcsx2_Iconized.pot 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/templates/pcsx2_Iconized.pot 2016-01-05 17:28:08.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PCSX2 1.3.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -30,27 +30,27 @@ msgid "Playstation game discs are not supported by PCSX2. If you want to emulate PSX games then you'll have to download a PSX-specific emulator, such as ePSXe or PCSX." msgstr "" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "This recompiler was unable to reserve contiguous memory required for internal caches. This error can be caused by low virtual memory resources, such as a small or disabled swapfile, or by another program that is hogging a lot of memory." msgstr "" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close out some memory hogging background tasks and try again." msgstr "" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "Warning: Some of the configured PS2 recompilers failed to initialize and have been disabled:" msgstr "" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "Note: Recompilers are not necessary for PCSX2 to run, however they typically improve emulation speed substantially. You may have to manually re-enable the recompilers listed above, if you resolve the errors." msgstr "" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't count). Please consult the FAQs and Guides for further instructions." msgstr "" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -61,7 +61,31 @@ msgid "Please ensure that these folders are created and that your user account is granted write permissions to them -- or re-run PCSX2 with elevated (administrator) rights, which should grant PCSX2 the ability to create the necessary folders itself. If you do not have elevated rights on this computer, then you will need to switch to User Documents mode (click button below)." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "Please note that the resulting file may not actually contain all saves, depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "WARNING: Converting a memory card may take a while! Please do not close the emulator during the conversion process, even if the emulator is no longer responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "NTFS compression can be changed manually at any time by using file properties from Windows Explorer." msgstr "" @@ -101,6 +125,10 @@ msgid "Avoids memory card corruption by forcing games to re-index card contents after loading from savestates. May not be compatible with all games (Guitar Hero)." msgstr "" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "(Folder type only) Re-index memory card content every time the running software changes. This prevents the memory card from running out of space for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "The thread '%s' is not responding. It could be deadlocked, or it might just be running *really* slowly." @@ -138,7 +166,7 @@ msgid "This action will reset the existing PS2 virtual machine state; all current progress will be lost. Are you sure?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time Wizard. You will need to manually restart %s after this operation.\n" @@ -148,22 +176,27 @@ "(note: settings for plugins are unaffected)" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the problem\n" "and re-enable it at any time using Config:Memory cards from the main menu." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "Please select a valid BIOS. If you are unable to make a valid selection then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "" @@ -231,7 +264,7 @@ msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:116 -msgid "It's better to enable 'Automatic game fixes' at the main menu instead, and leave this page empty. ('Automatic' means: selectively use specific tested fixes for specific games)" +msgid "It's better to enable 'Automatic game fixes' at the main menu instead, and leave this page empty. ('Automatic' means: selectively use specific tested fixes for specific games). Manual game fixes will NOT increase your performance. In fact they may decrease it." msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 @@ -242,16 +275,16 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "You are about to delete the formatted memory card '%s'. All data on this card will be lost! Are you absolutely and quite positively sure?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "" @@ -288,86 +321,96 @@ msgid "All plugins must have valid selections for %s to run. If you are unable to make a valid selection due to missing plugins or an incomplete install of %s, then press Cancel to close the Configuration panel." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 -msgid "1 - Default cyclerate. This closely matches the actual speed of a real PS2 EmotionEngine." +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +msgid "-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* cause stuttering audio on many FMVs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 -msgid "2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games with high compatibility." +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +msgid "-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games with high compatibility." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 -msgid "3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* cause stuttering audio on many FMVs." +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +msgid "0 - Default cyclerate. This closely matches the actual speed of a real PS2 EmotionEngine." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "1 - Increases the EE's cyclerate by about 33%. Increases hardware requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant speedups in some games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause flickering visuals or slowdown in most games." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "Speedhacks usually improve emulation speed, but can cause glitches, broken audio, and false FPS readings. When having emulation problems, disable this panel first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 -msgid "Setting higher values on this slider effectively reduces the clock speed of the EmotionEngine's R5900 core cpu, and typically brings big speedups to games that fail to utilize the full potential of the real PS2 hardware." +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +msgid "Setting lower values on this slider effectively reduces the clock speed of the EmotionEngine's R5900 core cpu, and typically brings big speedups to games that fail to utilize the full potential of the real PS2 hardware. Conversely, higher values effectively increase the clock speed which may bring about an increase in in-game FPS while also making games more demanding and possibly causing glitches." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "This slider controls the amount of cycles the VU unit steals from the EmotionEngine. Higher values increase the number of cycles stolen from the EE for each VU microprogram the game runs." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "Updates Status Flags only on blocks which will read them, instead of all the time. This is safe most of the time, and Super VU does something similar by default." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with 3 or more cores. This is safe for most games, but a few games are incompatible and may hang. In the case of GS limited games, it may be a slowdown (especially on dual core CPUs)." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "This hack works best for games that use the INTC Status register to wait for vsyncs, which includes primarily non-3D RPG titles. Games that do not use this method of vsync will see little or no speedup from this hack." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this hack attempts to detect loops whose bodies are guaranteed to result in the same machine state for every iteration until a scheduled event triggers emulation of another unit. After a single iteration of such loops, we advance to the time of the next event or the end of the processor's timeslice, whichever comes first." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "Check HDLoader compatibility lists for known games that have issues with this. (Often marked as needing 'mode 1' or 'slow DVD'" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will not be available either." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "Notice: Due to PS2 hardware design, precise frame skipping is impossible. Enabling it will cause severe graphical errors in some games." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "Enable this if you think MTGS thread sync is causing crashes or graphical errors." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This option is best used in conjunction with savestates: save a state at an ideal scene, enable this option, and re-load the savestate.\n" "\n" "Warning: This option can be enabled on-the-fly but typically cannot be disabled on-the-fly (video will typically be garbage)." msgstr "" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "Your system is too low on virtual resources for PCSX2 to run. This can be caused by having a small or disabled swapfile, or by other programs that are hogging resources." msgstr "" diff -Nru pcsx2-1.3.1+dfsg/locales/templates/pcsx2_Main.pot pcsx2-1.4.0/locales/templates/pcsx2_Main.pot --- pcsx2-1.3.1+dfsg/locales/templates/pcsx2_Main.pot 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/templates/pcsx2_Main.pot 2016-01-05 17:28:08.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PCSX2 1.3.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -22,15 +22,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "" -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "" @@ -82,7 +82,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "" -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "" @@ -94,57 +94,57 @@ msgid "If loading from an ISO image, this error may be caused by an unsupported ISO image type or a bug in PCSX2 ISO image support." msgstr "" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "The MTGS thread has become unresponsive while waiting for the GS plugin to open." msgstr "" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "%s plugin failed to open. Your computer may have insufficient resources, or incompatible hardware/drivers." msgstr "" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "%s plugin failed to initialize. Your system may have insufficient memory or resources needed." msgstr "" -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "The configured %s plugin is not a PCSX2 plugin, or is for an older unsupported version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "The plugin reports that your hardware or software/drivers are not supported." msgstr "" -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "Configured plugin is not a PCSX2 plugin, or is for an older unsupported version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "Configured %s plugin is not a valid PCSX2 plugin, or is for an older unsupported version of PCSX2." msgstr "" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "" -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "" @@ -284,39 +284,39 @@ msgid "Detailed logging of CDVD hardware." msgstr "" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "The savestate was not properly saved. The temporary file was created successfully but could not be moved to its final resting place." msgstr "" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "" @@ -324,228 +324,236 @@ msgid "Loading PS2 system plugins..." msgstr "" -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 msgid "SSE2 extensions are not available. PCSX2 requires a cpu that supports the SSE2 instruction set." msgstr "" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a valid %s plugin:\n" "\n" msgstr "" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" "Press Ok to go to the Plugin Configuration Panel." msgstr "" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "" @@ -583,131 +591,139 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Classic black color scheme for people who enjoy having text seared into their optic nerves." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "When checked the log window will be visible over other foreground windows." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore default source filters." +msgstr "" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "" @@ -720,47 +736,43 @@ msgid "About %s" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +msgid "PlayStation 2 Emulator" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "" @@ -768,40 +780,107 @@ msgid "Assertion Failure - " msgstr "" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "" -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "Disables this popup and whatever response you select here will be automatically used from now on." msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "The popup will not be shown again. This setting can be undone from the settings panels." msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Folder" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Convert memory card" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "" @@ -823,67 +902,78 @@ msgid "Select file name: " msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +msgid "Error: The directory for the memory card could not be created." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "This is the standard Sony-provisioned size, and is supported by all games and BIOS versions." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "Always use this option if you want the safest and surest memory card behavior." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "A typical size for 3rd-party memory cards which should work with most games." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "Low compatibility warning: Yes it's very big, but may not work with many games." msgstr "" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "Use at your own risk. Erratic memory card behavior is possible (though unlikely)." msgstr "" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "Automatically manages memory card contents so that the console only sees files related to the currently running software. Allows you to drag-and-drop files in and out of the memory card with your standard file explorer. This is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -894,6 +984,7 @@ msgstr "" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "" @@ -945,15 +1036,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1013,24 +1108,24 @@ msgid "Game Fixes" msgstr "" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "" @@ -1052,47 +1147,51 @@ msgid "Terminate App" msgstr "" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "" @@ -1105,7 +1204,7 @@ msgid "It is an error to drop multiple files onto a %s window. One at a time please, thank you." msgstr "" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "" @@ -1121,375 +1220,375 @@ msgid "You have dropped the following ISO image into %s:" msgstr "" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "" -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "Modify hardware emulation settings regulated by the PCSX2 core virtual machine." msgstr "" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "" -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "Error: The configured ISO file does not exist. Click OK to select a new ISO source for CDVD." msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1498,7 +1597,7 @@ "\n" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1507,19 +1606,19 @@ "\n" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "" @@ -1527,25 +1626,25 @@ msgid "Cannot apply settings..." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "Click the Browse button to select a different folder where PCSX2 will look for PS2 BIOS roms." msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "" @@ -1577,81 +1676,85 @@ msgid "None" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to x86." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "Performs just-in-time binary translation of 32-bit MIPS-I machine code to x86." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "Vector Unit Interpreter. Slow and not very compatible. Only use for diagnostics." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "" @@ -1806,7 +1909,7 @@ msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -1829,229 +1932,237 @@ msgid "Warning: Enabling trace logs is typically very slow, and is a leading cause of 'What happened to my FPS?' problems. :)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" "( '.ps2' will be added automatically)" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +msgid "Convert card" +msgstr "" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "" @@ -2080,11 +2191,11 @@ msgid "Select a document root for %s" msgstr "" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "" @@ -2158,75 +2269,75 @@ "\n" msgstr "" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "Resets all speedhack options to their defaults, which consequently turns them all OFF." msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ cores]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "Huge speedup for some games, with almost no compatibility side effects. [Recommended]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "" @@ -2246,87 +2357,87 @@ msgid "Select a visual theme:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "Error while parsing either NTSC or PAL framerate settings. Settings must be valid floating point numerics." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "Normal and Turbo limit rates skip frames. Slow motion mode will still disable frameskipping." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "For troubleshooting potential bugs in the MTGS only, as it is potentially very slow." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "Completely disables all GS plugin activity; ideal for benchmarking EEcore components." msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "" @@ -2354,7 +2465,7 @@ msgid "This savestate cannot be loaded due to missing critical components. See the log file for details." msgstr "" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "" @@ -2370,7 +2481,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, c-format msgid "%s Extensions not found. The R5900-32 recompiler requires a host CPU with SSE2 extensions." msgstr "" diff -Nru pcsx2-1.3.1+dfsg/locales/th_TH/pcsx2_Iconized.po pcsx2-1.4.0/locales/th_TH/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/th_TH/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/th_TH/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-09-16 11:50+0700\n" "Last-Translator: blackb1rd \n" "Language-Team: xyteton , blackb1rd \n" "Language-Team: xyteton , blackb1rd " msgstr "&ถัดไป >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &ย้อนà¸à¸¥à¸±à¸š" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&ย้อนà¸à¸¥à¸±à¸š" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&เสร็จสิ้น" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "&ใช่" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "&ไม่" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "มองหา" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&บันทึà¸" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "บันทึà¸&เป็น" -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&ช่วยเหลือ" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "&Home" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "à¹à¸ªà¸”งà¸à¸¥à¹ˆà¸­à¸‡à¹‚ต้ตอบเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -563,41 +568,46 @@ "\n" "à¸à¸” ตà¸à¸¥à¸‡ เพื่อไปยังผังà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "คำเตือน! ปลั๊à¸à¸­à¸´à¸™à¸£à¸°à¸šà¸šà¸¢à¸±à¸‡à¹„ม่ถูà¸à¹‚หลด, PCSX2 อาจไม่สามารถจะทำได้" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "ตัวเลือภCommandline %s " - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "ไบออส PS2 ผิดพลาด" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "à¸à¸” ตà¸à¸¥à¸‡ เพื่อไปยังผังà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าไบออส" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "คำเตือน! ปลั๊à¸à¸­à¸´à¸™à¸£à¸°à¸šà¸šà¸¢à¸±à¸‡à¹„ม่ถูà¸à¹‚หลด, PCSX2 อาจไม่สามารถจะทำได้" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "ตัวเลือภCommandline %s " + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "สายงานไม่ตอบสนอง PCSX2" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "สิ้นสุด" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸›à¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£à¹€à¸„รื่องเสมือน PS2..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "มองหา Iso ที่ไม่อยู่ในประวัติล่าสุดของคุณ" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "มองหา..." @@ -639,134 +649,145 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "ไม่สามารถใช้à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าใหม่ได้ หนึ่งในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าไม่ถูà¸à¸•à¹‰à¸­à¸‡" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "บันทึà¸à¸„ำถามà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูล" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "ทำà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลจำนวนมาà¸à¹ƒà¸«à¹‰à¸žà¸­à¸”ีในพื้นที่เล็ภๆ" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "เล็à¸" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "มันคือสิ่งที่ผมใช้ (หนุ่มโปรà¹à¸à¸£à¸¡à¹€à¸¡à¸­à¸£à¹Œ)" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "ปà¸à¸•à¸´" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "มันดีà¹à¸¥à¸°à¸ªà¸²à¸¡à¸²à¸£à¸–อ่านได้" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "ใหà¸à¹ˆ" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "มหึมา" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "ในà¸à¸£à¸“ีที่คุณมีà¸à¸²à¸£à¹à¸ªà¸”งผลที่ความละเอียดสูงจริงๆ" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "ค่าตั้งต้นà¹à¸šà¸šà¸ªà¸µà¹‚ทนอ่อน" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "ลัà¸à¸©à¸“ะสว่าง" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "à¹à¸šà¸šà¸ªà¸µà¸”ำคลาสสิà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸„นที่ชอบให้ตัวอัà¸à¸©à¸£à¸ªà¹ˆà¸­à¸‡à¹à¸ªà¸‡à¹€à¸‚้าประสาทตา" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "ลัà¸à¸©à¸“ะมืด" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "อยู่บนเสมอ" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "เมื่อทำเครื่องหมาย หน้าต่างà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลจะเห็นได้บนหน้าต่างเบื้องหน้าอื่น ๆ" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "&บันทึà¸..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "บันทึà¸à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸‚องà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลลงสู่ไฟล์" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "&ล้าง" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "ล้างเนื้อหาของหน้าต่างà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูล" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "รูปลัà¸à¸©à¸“์" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&ปิด" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "ปิดหน้าต่างà¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลนี้; เนื้อหาได้ถูà¸à¸ªà¸‡à¸§à¸™à¹„ว้" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "Dev/Verbose" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "à¹à¸ªà¸”งบันทึà¸à¸‚้อมูลของผู้พัฒนา PCSX2" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "à¸à¸²à¸£à¸­à¹ˆà¸²à¸™ CDVD" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "à¹à¸ªà¸”งà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸à¸²à¸£à¸­à¹ˆà¸²à¸™à¸”ิสà¸à¹Œ" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "เปิดà¸à¸²à¸£à¸—ำงานทั้งหมด" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "เปิดà¸à¸²à¸£à¸—ำงานทั้งหมดของตัวà¸à¸£à¸­à¸‡à¹à¸«à¸¥à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูล" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "ปิดà¸à¸²à¸£à¸—ำงานทั้งหมด" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "ปิดà¸à¸²à¸£à¸—ำงานทั้งหมดของตัวà¸à¸£à¸­à¸‡à¹à¸«à¸¥à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูล" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "คืนสู่ค่าตั้งต้น" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "เปิดà¸à¸²à¸£à¸—ำงานทั้งหมดของตัวà¸à¸£à¸­à¸‡à¹à¸«à¸¥à¹ˆà¸‡à¸šà¸±à¸™à¸—ึà¸à¸‚้อมูล" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&บันทึà¸à¸‚้อมูล" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&à¹à¸«à¸¥à¹ˆà¸‡" @@ -779,48 +800,45 @@ msgid "About %s" msgstr "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "à¸à¸²à¸£à¸—ดสอบเบต้า" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "เวอร์ชันà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "ผู้ดูà¹à¸¥à¹€à¸§à¹‡à¸š" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "ผู้เชี่ยวชาà¸à¸”้านปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "ขอขอบคุณ" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "ผู้พัฒนา" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "ผู้ช่วยเหลือ" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "ตัวจำลองเครื่องเล่น Playstation 2" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "เว็บไซต์ทางà¸à¸²à¸£à¹à¸¥à¸°à¸šà¸­à¸£à¹Œà¸”อภิปรายของ PCSX2 " -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 #, fuzzy msgid "PCSX2 Official Git Repository at GitHub" msgstr "à¹à¸«à¸¥à¹ˆà¸‡à¹€à¸à¹‡à¸šà¸‚้อมูล Git à¹à¸šà¸šà¸—างà¸à¸²à¸£à¸‚อง PCSX2 ที่ GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "ฉันเห็นพอà¹à¸¥à¹‰à¸§" @@ -828,45 +846,114 @@ msgid "Assertion Failure - " msgstr "à¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸ªà¸´à¸—ธิ์ล้มเหลว -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "บันทึà¸à¸ à¸²à¸žà¸–่ายของผังà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านี้เป็นไฟล์ PNG" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "บันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸à¸¥à¹ˆà¸­à¸‡à¹‚ต้ตอบไปยัง..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "ตัวใช้เลือà¸à¹„บออส" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "ไม่ต้องà¹à¸ªà¸”งà¸à¸¥à¹ˆà¸­à¸‡à¹‚ต้ตอบนี้อีà¸" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "" "ปิดà¸à¸²à¸£à¸—ำงานป๊อปอัพนี้ à¹à¸¥à¸°à¸­à¸°à¹„รà¸à¹‡à¸•à¸²à¸¡à¸—ี่ตอบสนองà¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸à¸‚องคุณที่นี่ จะถูà¸à¹ƒà¸Šà¹‰à¸­à¸±à¸•à¹‚นมัตินับตั้งà¹à¸•à¹ˆà¸•à¸­à¸™à¸™à¸µà¹‰" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "ป๊อปอัพจะไม่ถูà¸à¹à¸ªà¸”งอีภà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่านี้สามารถยà¸à¹€à¸¥à¸´à¸à¹„ด้จาà¸à¸œà¸±à¸‡à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "ละเลย" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "รีเซ็ต" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "โฟลเดอร์" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "ผิดพลาด (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ความจำ" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ความจำใหม่" @@ -888,77 +975,93 @@ msgid "Select file name: " msgstr "เลือà¸à¸Šà¸·à¹ˆà¸­à¹„ฟล์:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "ผิดพลาด (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ความจำ" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "ผิดพลาด: ไม่สามารถสร้างà¸à¸²à¸£à¹Œà¸”ความจำ" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "ผิดพลาด: ไม่สามารถสร้างà¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "ใช้à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”à¹à¸šà¸š NTFS เมื่อสร้างà¸à¸²à¸£à¹Œà¸”นี้" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [เข้าà¸à¸±à¸™à¹„ด้มาà¸à¸—ี่สุด]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "นี่คือขนาดมาตรà¸à¸²à¸™à¸—ี่ Sony à¸à¸³à¸«à¸™à¸”ไว้ à¹à¸¥à¸°à¸£à¸­à¸‡à¸£à¸±à¸šà¹‚ดยเà¸à¸¡à¸—ั้งหมดà¹à¸¥à¸°à¹€à¸§à¸­à¸£à¹Œà¸Šà¸±à¸™à¹„บออส" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "ใช้ตัวเลือà¸à¸™à¸µà¹‰à¹€à¸ªà¸¡à¸­ ถ้าคุณต้องà¸à¸²à¸£à¸„วามปลอดภัยà¹à¸¥à¸°à¹à¸™à¹ˆà¹ƒà¸ˆà¹ƒà¸™à¸žà¸¤à¸•à¸´à¸à¸£à¸£à¸¡à¸‚องà¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "ขนาดปà¸à¸•à¸´à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹Œà¸”ความจำจาà¸à¹à¸«à¸¥à¹ˆà¸‡à¸—ี่สาม ซึ่้งควรใช้ได้ผลสำหรับเà¸à¸¡à¸ªà¹ˆà¸§à¸™à¹ƒà¸«à¸à¹ˆ" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 à¹à¸¥à¸° 32 MB โดยคร่าว ๆ มีปัจจัยà¸à¸²à¸£à¹€à¸‚้าà¸à¸±à¸™à¹„ด้เหมือน ๆ à¸à¸±à¸™" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "คำเตือนของà¸à¸²à¸£à¹€à¸‚้าà¸à¸±à¸™à¹„ด้ต่ำ: ใช่ มันใหà¸à¹ˆà¸¡à¸²à¸ à¹à¸•à¹ˆà¸­à¸²à¸ˆà¹ƒà¸Šà¹‰à¹„ม่ได้ผลà¸à¸±à¸šà¸«à¸¥à¸²à¸¢ ๆ เà¸à¸¡" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "" "ใช้ตามความเสี่ยงของคุณเอง พฤติà¸à¸£à¸£à¸¡à¸—ี่ไม่à¹à¸™à¹ˆà¸™à¸­à¸™à¸‚องà¸à¸²à¸£à¹Œà¸”ความจำอาจเà¸à¸´à¸”ขึ้นได้ (à¹à¸¡à¹‰à¸§à¹ˆà¸²à¹„ม่น่าจะ)" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -969,6 +1072,7 @@ msgstr "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "ตัวใช้เลือà¸à¸ à¸²à¸©à¸²" @@ -1022,15 +1126,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "ถอดà¸à¸²à¸£à¹Œà¸”ความจำออà¸à¸­à¸±à¸•à¹‚นมัติ เมื่อโหลดบันทึà¸à¸ªà¸–านภาพ" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "ตัวจัดà¸à¸²à¸£à¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "ลาà¸à¸à¸²à¸£à¹Œà¸”สู่หรือจาà¸à¸žà¸­à¸£à¹Œà¸•-PS2" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1092,24 +1200,24 @@ msgid "Game Fixes" msgstr "à¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¹€à¸à¸¡" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "ตัวใช้เลือà¸à¸­à¸‡à¸„์ประà¸à¸­à¸š - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "ปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "ไบออส" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "โฟลเดอร์" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "รูปลัà¸à¸©à¸“์/ธีม - %s" @@ -1131,47 +1239,51 @@ msgid "Terminate App" msgstr "สิ้นสุดโปรà¹à¸à¸£à¸¡" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "ผลผลิตของ GS ปิดà¸à¸²à¸£à¸—ำงาน!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "บันทึà¸à¸ªà¸–านภาพ" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "บันทึà¸à¸ªà¸–านภาพเครื่องเสมือนไปยังสล็อตปัจจุบัน" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "โหลดสถานภาพ" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "โหลดสถานภาพเครื่องเสมือนจาà¸à¸ªà¸¥à¹‡à¸­à¸•à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "โหลดสถานภาพสำรอง" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "โหลดสถานภาพสำรองของเครื่องเสมือนจาà¸à¸ªà¸¥à¹‡à¸­à¸•à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "หมุนสู่สล็อตถัดไป" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "หมุนสล็อตที่บันทึà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¹ƒà¸™à¸£à¸¹à¸›à¹à¸šà¸š +1!" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "หมุนสู่สล็อตà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "หมุนสล็อตที่บันทึà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™à¹ƒà¸™à¸£à¸¹à¸›à¹à¸šà¸š -1!" @@ -1186,7 +1298,7 @@ "please, thank you." msgstr "ข้อผิดพลาดในà¸à¸²à¸£à¸§à¸²à¸‡à¹„ฟล์หลาย ๆ ไฟล์ไปยังหน้าต่าง %s , โปรดทำครั้งละหนึ่ง ขอบคุณ" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "ยืนยันà¸à¸²à¸£à¸£à¸µà¹€à¸‹à¹‡à¸• PS2" @@ -1204,374 +1316,374 @@ msgid "You have dropped the following ISO image into %s:" msgstr "คุณได้วางอิเมจ ISO ต่อไปนี้ไปยัง %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "สล็อต %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "สำรอง" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "à¹à¸ªà¸”งคอนโซล" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "คอนโซลสู่สตูดิโอ" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&ระบบ" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&à¸à¸³à¸«à¸™à¸”ค่า" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&เบ็ดเตล็ด" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&à¹à¸à¹‰à¹„ขข้อผิดพลาด" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "รัน ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "สำหรับà¸à¸²à¸£à¸£à¸±à¸™à¹„บนารี PS2 ดิบโดยตรง" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "สำรองไว้à¸à¹ˆà¸­à¸™à¸šà¸±à¸™à¸—ึà¸" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¹€à¸à¸¡à¸­à¸±à¸•à¹‚นมัติ" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "ใช้ความต้องà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¹€à¸à¸¡ สู่เà¸à¸¡à¸—ี่ทราบปัà¸à¸«à¸²à¹‚ดยอัตโนมัติ" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "เปิดà¸à¸²à¸£à¸—ำงานà¸à¸²à¸£à¹‚à¸à¸‡à¹€à¸à¸¡" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 #, fuzzy msgid "Enable Widescreen Patches" msgstr "ใช้ speedhack" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "เปิดà¸à¸²à¸£à¸—ำงานระบบไฟล์โฮสต์" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "ปิดลง" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "ล้างสถานภาพ VM ภายในทั้งหมด à¹à¸¥à¸°à¸›à¸´à¸”ปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "ออà¸" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "à¸à¸²à¸£à¸›à¸´à¸” %s อาจเป็นอันตรายต่อสุขภาพของคุณ" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "ตัวใช้เลือภIso" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "เมนูปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "ใช้อิเมจ ISO ที่เลือภเป็นà¹à¸«à¸¥à¹ˆà¸‡à¸‚อง CDVD" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "ปลั๊à¸à¸­à¸´à¸™" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "ใช้ปลั๊à¸à¸­à¸´à¸™à¸ à¸²à¸¢à¸™à¸­à¸ เป็นà¹à¸«à¸¥à¹ˆà¸‡à¸‚อง CDVD" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "ไม่มีดิสà¸à¹Œ" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "ใช้สิ่งนี้ในà¸à¸²à¸£à¸šà¸¹à¸•à¹„ปยังà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าไบออสของ PS2 เสมือน" -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸¥à¸­à¸‡" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&à¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "&ตัวใช้เลือà¸à¸›à¸¥à¸±à¹Šà¸à¸­à¸´à¸™/ไบออส" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "ตัวà¹à¸à¹‰à¹„ขà¸à¸²à¸™à¸‚้อมูลเà¸à¸¡" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&วิดีโอ (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&เสียง (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&ตัวควบคุม (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "ล้างà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าทั้งหมด..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "ล้างà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า %s ทั้งหมด à¹à¸¥à¸°à¸£à¸±à¸™à¸•à¸±à¸§à¸Šà¹ˆà¸§à¸¢à¹ƒà¸™à¸à¸²à¸£à¹€à¸£à¸´à¹ˆà¸¡à¸•à¹‰à¸™à¹ƒà¸«à¸¡à¹ˆ" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸š..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "เปิดหน้าต่างà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ˆà¸”บันทึà¸..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "หยุด" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "หยุดà¸à¸²à¸£à¸ˆà¸³à¸¥à¸­à¸‡à¸­à¸¢à¹ˆà¸²à¸‡à¸›à¸¥à¸­à¸”ภัยà¹à¸¥à¸°à¸ªà¸‡à¸§à¸™à¸ªà¸–านภาพ PS2" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "ทำต่อ" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "ทำต่อจาà¸à¸ªà¸–านภาพจำลองที่พัà¸à¸„้างเอาไว้" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "หยุด/ทำต่อ" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "ไม่มีสถานภาพของà¸à¸²à¸£à¸ˆà¸³à¸¥à¸­à¸‡à¸—ี่ใช้งาน; ไม่สามารถพัà¸à¸«à¸£à¸·à¸­à¸—ำต่อจาà¸à¹€à¸”ิม" -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "เริ่มใหม่" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "จำลองà¸à¸²à¸£à¸£à¸µà¹€à¸‹à¹‡à¸•à¸®à¸²à¸£à¹Œà¸”à¹à¸§à¸£à¹Œà¸‚องเครื่องเสมือน PS2" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "ไม่มีสถานภาพของà¸à¸²à¸£à¸ˆà¸³à¸¥à¸­à¸‡à¸—ี่ใช้งาน; บูตสัà¸à¸­à¸¢à¹ˆà¸²à¸‡à¸à¹ˆà¸­à¸™" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "บูต CDVD ใหม่ (ครบถ้วน)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "รีเซ็ตฮาร์ดของ VM ที่ใช้งาน" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "บูต CDVD (ครบถ้วน)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "บูต VM โดยใช้สื่อจาà¸à¹à¸«à¸¥à¹ˆà¸‡ DVD หรือ Iso ปัจจุบัน " -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "บูต CDVD ใหม่ (รวดเร็ว)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "บูตใหม่โดยใช้à¸à¸²à¸£à¸šà¸¹à¸•à¸­à¸¢à¹ˆà¸²à¸‡à¸£à¸§à¸”เร็ว (ข้าม splash screen)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "บูต CDVD (รวดเร็ว)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "ใช้à¸à¸²à¸£à¸šà¸¹à¸•à¹à¸šà¸šà¸£à¸§à¸”เร็ว เพื่อข้ามหน้าจอเริ่มต้นà¹à¸¥à¸° splash screen ของ PS2" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "ไม่มีปลั๊à¸à¸­à¸´à¸™à¸—ี่ถูà¸à¹‚หลด" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า GS หลัà¸..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "ปรับเปลี่ยนà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าจำลองฮาร์ดà¹à¸§à¸£à¹Œ ควบคุมโดยเครื่องเสมือนหลัภPCSX2" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าหน้าต่าง..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "ปรับเปลี่ยนตัวเลือà¸à¸«à¸™à¹‰à¸²à¸•à¹ˆà¸²à¸‡à¹à¸¥à¸°à¸£à¸¹à¸›à¸¥à¸±à¸à¸©à¸“์, รวมทั้งสัดส่วนมุมมอง" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าปลั๊à¸à¸­à¸´à¸™..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "เปิดà¸à¸¥à¹ˆà¸­à¸‡à¹‚ต้ตอบà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าขั้นสูงของปลั๊à¸à¸­à¸´à¸™ %s" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "รีเซ็ตà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าทั้งหมดใหม่?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "ยืนยันà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸­à¸´à¹€à¸¡à¸ˆ ISO" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "คุณต้องà¸à¸²à¸£à¸ªà¸¥à¸±à¸šà¸”ิสà¸à¹Œ หรือบูตอิเมจใหม่ (ผ่านà¸à¸²à¸£à¸£à¸µà¹€à¸‹à¹‡à¸•à¸£à¸°à¸šà¸š)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "สลับดิสà¸à¹Œ" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "ยืนยันà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸«à¸¥à¹ˆà¸‡ CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "คุณได้เลือà¸à¸ªà¸¥à¸±à¸šà¹à¸«à¸¥à¹ˆà¸‡ CDVD จาภ%s สู่ %s" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "คุณต้องà¸à¸²à¸£à¸ªà¸¥à¸±à¸šà¸”ิสà¸à¹Œ หรือบูตอิเมจใหม่ (รีเซ็ตระบบ)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "ทั้งหมดที่รองรับ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "อิเมจดิสà¸à¹Œ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Blockdumps (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, fuzzy, c-format msgid "Compressed (%s)" msgstr "บีบอัด (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "ไฟล์ทั้งหมด (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "เลือภIso สำหรับà¹à¸«à¸¥à¹ˆà¸‡ CDVD..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "เลือà¸à¹„ฟล์ ELF..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ไม่พบไฟล์ ISO !" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "เà¸à¸´à¸”ความผิดพลาดขณะพยายามเปิดไฟล์:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." msgstr "ผิดพลาด: ไฟล์ ISO ที่à¸à¸³à¸«à¸™à¸”ไม่มีอยู่ คลิภตà¸à¸¥à¸‡ เพื่อเลือภISO à¹à¸«à¸¥à¹ˆà¸‡à¹ƒà¸«à¸¡à¹ˆà¸ªà¸³à¸«à¸£à¸±à¸š CDVD" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1579,7 +1691,7 @@ "คุณได้เลือà¸à¸­à¸´à¹€à¸¡à¸ˆ ISO ต่อไปนี้ไปยัง PCSX2:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1592,7 +1704,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1605,19 +1717,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "ชื่อไฟล์ว่างเปล่าหรือสั้นเà¸à¸´à¸™à¹„ป" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "ชื่อไฟล์อยู่นอà¸à¹„ดเรà¸à¸—อรี่ที่ต้องà¸à¸²à¸£" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "ชื่อไฟล์มีอยู่à¹à¸¥à¹‰à¸§" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "ระบบปà¸à¸´à¸šà¸±à¸•à¸´à¸à¸²à¸£à¹„ด้ป้องà¸à¸±à¸™à¹„ฟล์นี้จาà¸à¸à¸²à¸£à¸–ูà¸à¸ªà¸£à¹‰à¸²à¸‡" @@ -1625,27 +1737,27 @@ msgid "Cannot apply settings..." msgstr "ไม่สามารถใช้งานà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าได้..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "เส้นทางค้นหาไบออส:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "เลือà¸à¹‚ฟลเดอร์ที่มีรอมของไบออส PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "คลิà¸à¸›à¸¸à¹ˆà¸¡ มองหา เพื่อเลือà¸à¹‚ฟลเดอร์อื่นที่ PCXS2 จะมองหารอมของไบออส PS2" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "รีเฟรซรายà¸à¸²à¸£" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "เลือà¸à¸£à¸­à¸¡à¸‚องไบออส:" @@ -1677,88 +1789,92 @@ msgid "None" msgstr "ไม่มี" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "ปà¸à¸•à¸´" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "ตัวเลือà¸à¸£à¸µà¸„อมไพเลอร์ขั้นสูง EE/FPU" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "พิเศษ + สงวนท่าที" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "เต็มที่" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "ตัวเลือà¸à¸£à¸µà¸„อมไพเลอร์ขั้นสูง VU0 / VU1" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "พิเศษ" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "อินเตอร์พรีเตอร์" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "เป็นไปได้ว่าจะเป็นสิ่งที่ช้าที่สุดในจัà¸à¸£à¸§à¸²à¸¥à¹€à¸¥à¸¢à¸—ีเดียว" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "รีคอมไพเลอร์" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "ทำà¸à¸²à¸£à¹à¸›à¸¥à¹„บนารีเฉพาะในเวลาของเครื่อง MIPS-IV 64-บิต เข้ารหัสเป็น x86" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "ช้าพอควร; มีจุดประสงค์เพื่อใช้ในà¸à¸²à¸£à¸§à¸´à¸™à¸´à¸ˆà¸‰à¸±à¸¢à¹€à¸—่านั้น" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "ทำà¸à¸²à¸£à¹à¸›à¸¥à¹„บนารีเฉพาะในเวลาของเครื่อง MIPS-I 32-บิต เข้ารหัสเป็น x86" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "เปิดà¸à¸²à¸£à¸—ำางานà¹à¸„็ช EE (ช้าà¸à¸§à¹ˆà¸²)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "เฉพาะอินเตอร์พรีเตอร์; มีไว้เพื่อวินิจฉัย" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "คืนสู่ค่าตั้งต้น" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "อินเตอร์พรีเตอร์หน่วยเวà¸à¹€à¸•à¸­à¸£à¹Œ ช้าà¹à¸¥à¸°à¹€à¸‚้าà¸à¸±à¸™à¹„ม่ได้เป็นอย่างมาภใช้เฉพาะเพื่อà¸à¸²à¸£à¸§à¸´à¸™à¸´à¸ˆà¸‰à¸±à¸¢" -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "รีคอมไพเลอร์ microVU" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "รีคอมไพเลอร์หน่วยเวà¸à¹€à¸•à¸­à¸£à¹Œà¹ƒà¸«à¸¡à¹ˆ ที่ปรับปรุงความเข้าà¸à¸±à¸™à¹„ด้ดีขึ้นมาà¸, ขอà¹à¸™à¸°à¸™à¸³" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "รีคอมไพเลอร์ superVU [มรดà¸]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "มีประโยชน์สำหรับà¸à¸²à¸£à¸§à¸´à¸™à¸´à¸ˆà¸‰à¸±à¸¢à¸šà¸±à¹Šà¸à¸«à¸£à¸·à¸­à¸›à¸±à¸à¸«à¸²à¹à¸„ลมปิงในรีคอมไพเลอร์ mVU ใหม่" @@ -1923,7 +2039,8 @@ msgstr "ละเลย Bus Direction บนà¸à¸²à¸£à¸–่ายโอน Path3 - ใช้สำหรับ Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "เปลี่ยนไปใช้à¸à¸²à¸£à¹à¸ªà¸”งผลà¹à¸šà¸š GSdx software เมื่อเล่น FMV" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -1954,86 +2071,91 @@ "คำเตือน: à¸à¸²à¸£à¹€à¸›à¸´à¸”à¸à¸²à¸£à¸—ำงานà¸à¸²à¸£à¸•à¸´à¸”ตามà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸¯ มัà¸à¸ˆà¸°à¸—ำให้ช้ามาภà¹à¸¥à¸°à¹€à¸›à¹‡à¸™à¸ªà¸²à¹€à¸«à¸•à¸¸à¸«à¸¥à¸±à¸à¸‚องปัà¸à¸«à¸² " "'เà¸à¸´à¸”อะไรขึ้นà¸à¸±à¸šà¸­à¸±à¸•à¸£à¸²à¹€à¸Ÿà¸£à¸¡à¸‚องฉันเนี่ย?' :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "เลือà¸à¹‚ฟลเดอร์ที่มีà¸à¸²à¸£à¹Œà¸”ความจำ PS2" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "ถอดออà¸" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "ทำสำเนา..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "เปลี่ยนชื่อ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "สร้าง..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "ใส่..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "à¸à¸²à¸£à¹Œà¸”:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ความจำใหม่" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "เปลี่ยนชื่อà¸à¸²à¸£à¹Œà¸”ความจำนี้..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "ใส่..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "ถอดà¸à¸²à¸£à¹Œà¸”ออà¸à¸ˆà¸²à¸à¸žà¸­à¸£à¹Œà¸•à¸™à¸µà¹‰" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "ใส่à¸à¸²à¸£à¹Œà¸”นี้สู่พอร์ต..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "สร้างสำเนาของà¸à¸²à¸£à¹Œà¸”ความจำนี้..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "ลบ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "ลบà¸à¸²à¸£à¹Œà¸”ความจำนี้จาà¸à¸”ิสà¸à¹Œà¹à¸šà¸šà¸–าวร (เนื้อหาทั้งหมดจะสูà¸à¸«à¸²à¸¢)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ความจำใหม่à¹à¸¥à¸°à¸à¸³à¸«à¸™à¸”มันสำหรับพอร์ตนี้" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "ลบไฟล์ความจำ?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "ทำสำเนาà¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "ล้มเหลว: สามารถทำสำเนาเฉพาะà¸à¸²à¸£à¹Œà¸”ที่มีอยู่" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2041,25 +2163,25 @@ "เลือà¸à¸Šà¸·à¹ˆà¸­à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸³à¹€à¸™à¸²\n" "( '.ps2' จะถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¸­à¸±à¸•à¹‚นมัติ)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "ล้มเหลว: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "คัดลอà¸à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "à¸à¸²à¸£à¹Œà¸”ความจำ '%s' ถูà¸à¸—ำสำเนาเป็น '%s'." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "สำเร็จ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2068,121 +2190,126 @@ "เลือà¸à¸Šà¸·à¹ˆà¸­à¹ƒà¸«à¸¡à¹ˆà¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹Œà¸”ความจำ '%s'\n" "( '.ps2' จะถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¸­à¸±à¸•à¹‚นมัติ)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "เปลี่ยนชื่อà¸à¸²à¸£à¹Œà¸”ความจำ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "ผิดพลาด: เปลี่ยนชื่อไม่สำเร็จ \n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "พอร์ต-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "ว่าง" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "เลือà¸à¸žà¸­à¸£à¹Œà¸•à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸ªà¸³à¸«à¸£à¸±à¸š '%s'" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "ใส่à¸à¸²à¸£à¹Œà¸”" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "ถอดà¸à¸²à¸£à¹Œà¸”" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "ใส่à¸à¸²à¸£à¹Œà¸”..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "ทำสำเนาà¸à¸²à¸£à¹Œà¸”..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "เปลี่ยนชื่อà¸à¸²à¸£à¹Œà¸”..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "ลบà¸à¸²à¸£à¹Œà¸”" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "ใส่à¸à¸²à¸£à¹Œà¸”" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "สร้างà¸à¸²à¸£à¹Œà¸”ใหม่" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "รีเฟรซรายà¸à¸²à¸£" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "พอร์ต PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "ชื่อà¸à¸²à¸£à¹Œà¸”(ไฟล์)" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "ขนาดà¸à¸²à¸£à¹Œà¸”" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "ฟอร์à¹à¸¡à¸•à¹à¸¥à¹‰à¸§" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "ปรับเปลี่ยนล่าสุด" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "สร้างเมื่อ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "ไม่" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "ใช่" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 #, fuzzy msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- à¸à¸²à¸£à¹Œà¸”ที่ไม่ถูà¸à¹ƒà¸Šà¹‰ --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- ไม่มีà¸à¸²à¸£à¹Œà¸”ที่ไม่ถูà¸à¹ƒà¸Šà¹‰ --]" @@ -2215,11 +2342,11 @@ msgid "Select a document root for %s" msgstr "เลือà¸à¹€à¸­à¸à¸ªà¸²à¸£ root สำหรับ %s" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "ใช้งาน" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "ใช้ภาษานี้เป็นภาษาตั้งต้นของฉันเดี๋ยวนี้!" @@ -2297,84 +2424,84 @@ "เหตุผล: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "à¸à¸³à¸¥à¸±à¸‡à¸—ำงานให้สำเร็จ..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "เปิดà¸à¸²à¸£à¸—ำงาน speedhack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "ทางที่ปลอดภัยà¹à¸¥à¸°à¸‡à¹ˆà¸²à¸¢ ในà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¸„วามมั่นใจว่า speedhack ทั้งหมดไม่ถูà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸­à¸¢à¹ˆà¸²à¸‡à¸ªà¸¡à¸šà¸¹à¸£à¸“์" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "รีเซ็ตตัวเลือภspeedhack ทั้งหมดเป็นค่าตั้งต้น, ซึ่งต่อมาคือเป็นà¸à¸²à¸£à¸›à¸´à¸”มันทั้งหมด" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "อัตรารอบหมุน EE [ไม่à¹à¸™à¸°à¸™à¸³]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "à¸à¸²à¸£à¸‚โมยรอบหมุน VU [ไม่à¹à¸™à¸°à¸™à¸³]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hacks" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "เพิ่มความเร็วได้ดีà¹à¸¥à¸°à¹€à¸‚้าà¸à¸±à¸™à¹„ด้สูง; อาจเà¸à¸´à¸”à¸à¸£à¸²à¸Ÿà¸´à¸à¸—ี่ไม่ดี... [à¹à¸™à¸°à¸™à¸³]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Multi-Threaded microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" msgstr "เพิ่มความเร็วได้ดีà¹à¸¥à¸°à¹€à¸‚้าà¸à¸±à¸™à¹„ด้สูง; อาจเà¸à¸´à¸”à¸à¸²à¸£à¹à¸®à¸‡... [à¹à¸™à¸°à¸™à¸³ ถ้ามีคอร์ 3+]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "Hack อื่น ๆ" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "ใช้à¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ˆà¸±à¸š Spin INTC" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" msgstr "เพิ่มความเร็วมหาศาลสำหรับบางเà¸à¸¡, à¹à¸—บไม่มีผลข้างเคียงเรื่องความเข้าà¸à¸±à¸™à¹„ด้ [à¹à¸™à¸°à¸™à¸³]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "เปิดà¸à¸²à¸£à¸—ำงานà¸à¸²à¸£à¸•à¸§à¸ˆà¸ˆà¸±à¸š Wait Loop" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "เพิ่มความเร็วขึ้นปานà¸à¸¥à¸²à¸‡à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸²à¸‡à¹€à¸à¸¡, ไม่มีผลข้างเคียงที่ทราบà¹à¸¥à¹‰à¸§ [à¹à¸™à¸°à¸™à¸³]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "เปิดà¸à¸²à¸£à¸—ำงาน fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "เข้าถึงดิสà¸à¹Œà¸£à¸§à¸”เร็ว, เวลาโหลดน้อยà¸à¸§à¹ˆà¸² [ไม่à¹à¸™à¸°à¸™à¸³]" @@ -2396,59 +2523,59 @@ msgid "Select a visual theme:" msgstr "เลือà¸à¸˜à¸µà¸¡à¸¥à¸±à¸à¸©à¸“ะ:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "ปิดà¸à¸²à¸£à¸—ำงานà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”เฟรม" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "มีประโยชน์สำหรับà¸à¸²à¸£à¸£à¸±à¸™ benchmark สลับมาตัวเลือà¸à¸™à¸µà¹‰à¹„ด้เมื่ออยู่ในเà¸à¸¡ โดยà¸à¸” F4" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "ปรับอัตราเฟรมพื้นà¸à¸²à¸™" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "ปรับà¸à¸²à¸£à¹€à¸„ลื่อนไหวà¹à¸šà¸šà¸Šà¹‰à¸²:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "ปรับเทอร์โบ:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "อัตราเฟรม NTSC:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "อัตราเฟรม PAL:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." msgstr "" "ผิดพลาดขณะวิเคราะห์à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าอัตราเฟรม NTSC หรือ PAL à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าต้องเป็นจำนวนหน่วยที่ถูà¸à¸•à¹‰à¸­à¸‡" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "ปิดà¸à¸²à¸£à¸—ำงาน [ค่าตั้งต้น]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "ข้ามเมื่อเปิดเทอร์โบเท่านั้น (TAB เพื่อเปิดà¸à¸²à¸£à¸—ำงาน)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "à¸à¸²à¸£à¸‚้ามà¹à¸šà¸šà¸„งที่" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2456,29 +2583,29 @@ "อัตราจำà¸à¸±à¸”ปà¸à¸•à¸´à¹à¸¥à¸°à¹€à¸—อร์โบจะข้ามเฟรม " "ส่วนโหมดà¸à¸²à¸£à¹€à¸„ลื่อนไหวà¹à¸šà¸šà¸Šà¹‰à¸²à¸ˆà¸°à¸¢à¸±à¸‡à¸„งปิดà¸à¸²à¸£à¸—ำงานà¸à¸²à¸£à¸‚้ามเฟรม" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "เฟรมเพื่อà¹à¸ªà¸”ง" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "เฟรมเพื่อข้าม" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "ใช้ MTGS ที่ซิงโครไนส์" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "สำหรับบั๊à¸à¸—ี่เป็นปัà¸à¸«à¸²à¹„ด้ใน MTGS เท่านั้น เป็นไปได้ว่าจะช้ามาà¸" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "ปิดà¸à¸²à¸£à¸—ำงานผลผลิตของ GS ทั้งหมด" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2486,11 +2613,11 @@ "à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸›à¸¥à¸±à¹Šà¸à¸­à¸´à¸™ GS ทั้งหมดปิดà¸à¸²à¸£à¸—ำงานอย่างสมบูรณ์; เป็นอุดมคติสำหรับà¸à¸²à¸£à¸—ำ benchmark " "องค์ประà¸à¸­à¸š EEcore" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "à¸à¸²à¸£à¸‚้ามเฟรม" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "ตัวจำà¸à¸±à¸”เฟรม" @@ -2527,7 +2654,7 @@ "บันทึà¸à¸ªà¸–านภาพนี้ไม่สามารถโหลดได้ เนื่องจาà¸à¸­à¸‡à¸„์ประà¸à¸­à¸šà¸ªà¸³à¸„ัà¸à¸ªà¸¹à¸à¸«à¸²à¸¢ " "ดูที่à¹à¸šà¸šà¸šà¸±à¸™à¸—ึà¸à¸‚้อมูลสำหรับรายละเอียด" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (ค่าตั้งต้น)" @@ -2546,7 +2673,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "ไฟล์ไบออสที่à¸à¸³à¸«à¸™à¸”ไม่มีอยู่ โปรดà¸à¸³à¸«à¸™à¸”ใหม่" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2561,6 +2688,15 @@ "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." msgstr "ไม่พบส่วนเสริม %s , microVU ต้องà¸à¸²à¸£ CPU โฮสต์ที่มีส่วนเสริม MMX, SSE, à¹à¸¥à¸° SSE2 " +#~ msgid "Betatesting" +#~ msgstr "à¸à¸²à¸£à¸—ดสอบเบต้า" + +#~ msgid "BIOS Selector" +#~ msgstr "ตัวใช้เลือà¸à¹„บออส" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "เลือภIso สำหรับà¹à¸«à¸¥à¹ˆà¸‡ CDVD..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 à¹à¸™à¸°à¸™à¸³" diff -Nru pcsx2-1.3.1+dfsg/locales/tr_TR/pcsx2_Iconized.po pcsx2-1.4.0/locales/tr_TR/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/tr_TR/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/tr_TR/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.0.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-01-13 10:02+0200\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-04-22 18:25+0200\n" "Last-Translator: Ceyhun Özgöç \n" "Language-Team: Ceyhun Özgöç (PyramidHead) \n" "Language: tr_TR\n" @@ -18,7 +18,7 @@ "X-Poedit-KeywordsList: pxE;pxEt\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: C:\\Users\\Ceyhun\\Downloads\\PCSX2 SVN\n" -"X-Generator: Poedit 1.5.6\n" +"X-Generator: Poedit 1.6.9\n" "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" @@ -40,7 +40,7 @@ "bunun için ePSXe ya da PCSX gibi PS oyunlarına yönelik yapılmış bir emülatör " "kullanmalısınız." -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -52,7 +52,7 @@ "bırakılması nedeniyle düşük sanal bellek miktarı olan bilgisayarlarda veya " "baÅŸka bir programın hafızanın tamamı kullanması nedeniyle olur." -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -60,7 +60,7 @@ "PCSX2, PS2 sanal makinesi için gerekli hafızayı ayıramıyor. Arkaplanda " "çalışan uygulamaları kapatıp yeniden deneyin." -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" @@ -68,7 +68,7 @@ "Uyarı: Yapılandırılmış bazı PS2 derleyicileri baÅŸlatılamadı ve devre dışı " "bırakıldı." -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -78,7 +78,7 @@ "hızını oldukça artırırlar. Sorun ortadan kalktıktan sonra yukarıda " "listelenen derleyicileri el ile yeniden etkinleÅŸtirmeniz gerekebilir." -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -88,7 +88,7 @@ "dolayı BIOS dosyasını *kendi* PS2 konsolunuzdan almalısınız. Daha fazla " "talimat için lütfen SSS ve kullanma kılavuzlarına danışın." -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -114,7 +114,36 @@ "aÅŸağıdan Kullanıcı Dosyaları moduna geçmeniz gerekir (aÅŸağıdaki düğmeyi " "tıklayın)." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -197,6 +226,13 @@ "dizinlemeleri konusunda zorlayarak hafıza kartı bozulmalarını önler. Tüm " "oyunlarla uyumlu olmayabilir. (Guitar Hero)" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -274,7 +310,7 @@ "PS2 sanal makinesi baÅŸtan baÅŸlatılacak; ÅŸu anki konumunuzu kaybedeceksiniz. " "Bunu yapmak istediÄŸinizden emin misiniz?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -295,7 +331,7 @@ "\n" "(not: eklentilerin ayarları etkilenmez)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -307,7 +343,12 @@ "Yapılandırma:Hafıza kartları menüsünü kullanarak düzeltebilir ve bunu " "yeniden etkinleÅŸtirebilirsiniz." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -315,11 +356,11 @@ "Lütfen geçerli bir BIOS seçiniz. Geçerli bir seçim yapamıyorsanız " "Yapılandırma panelini kapatmak için Ä°ptal'e basınız." -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "Not: Birçok oyun varsayılan ayarlarla çalışabilir." -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "Not: Birçok oyun varsayılan ayarlarla çalışabilir." @@ -443,17 +484,14 @@ msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" -"Oyun düzeltmeleri bazı oyunlarda iÅŸe yaramayabilir. \n" -"Bunun yanı sıra uyumluluk ya da performans sorunlarına neden olabilirler. " "Ayarları buradan yapmak yerine ana menüden 'Otomatik Oyun Düzeltmeleri' " -"seçeneÄŸini etkinleÅŸtirmek çoÄŸu zaman daha faydalıdır.\n" -"('Otomatik' kelimesi test edilmiÅŸ düzeltmelerin belirli oyunlara doÄŸrudan " -"uygulanması anlamına gelir)" +"seçeneÄŸini etkinleÅŸtirmeniz önerilir. ('Otomatik' kelimesi test edilmiÅŸ " +"düzeltmelerin belirli oyunlara doÄŸrudan uygulanması anlamına gelir)" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 -#, fuzzy msgid "" "Gamefixes can work around wrong emulation in some titles. \n" "They may also cause compatibility or performance issues.\n" @@ -461,13 +499,12 @@ "The safest way is to make sure that all game fixes are completely disabled." msgstr "" "Oyun düzeltmeleri bazı oyunlarda iÅŸe yaramayabilir. \n" -"Bunun yanı sıra uyumluluk ya da performans sorunlarına neden olabilirler. " -"Ayarları buradan yapmak yerine ana menüden 'Otomatik Oyun Düzeltmeleri' " -"seçeneÄŸini etkinleÅŸtirmek çoÄŸu zaman daha faydalıdır.\n" -"('Otomatik' kelimesi test edilmiÅŸ düzeltmelerin belirli oyunlara doÄŸrudan " -"uygulanması anlamına gelir)" +"Bunun yanı sıra uyumluluk ya da performans sorunlarına neden olabilirler.\n" +"\n" +"En güvenli seçenek tüm oyun düzeltmelerinin tamamen devre dışı " +"bırakılmasıdır." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -476,14 +513,14 @@ "BiçimlendirilmiÅŸ '%s' hafıza kartını silmek üzeresiniz. Karttaki tüm veriler " "kaybolacaktır! Bunu yapmak istediÄŸinizden kesinlikle emin misiniz?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "" "Hata: Kopyalama yalnızca boÅŸ bir PS2-Portu veya dosya sistemi için " "geçerlidir." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "Hata: Hedef %s hafıza kartı kullanımda." @@ -563,33 +600,49 @@ "yüklemesinde oluÅŸan bir hata sonucu veya eksik eklentiler nedeniyle seçim " "yapamıyorsanız Ä°ptal'i tıklayarak Yapılandırma panelini kapatın." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." -msgstr "1 - Varsayılan döngü oranı. Gerçek PS2 EE hızına oldukça yakındır." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - EE'nin döngü oranını %50 oranında azaltır. Ortalama hız artışı " +"saÄŸlamasına raÄŸmen takılmalara neden olur." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - EE'nin döngü oranını %33 oranında azaltır. Birçok oyunda hız artışı " "saÄŸlar, uyumluluÄŸu oldukça yüksektir." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy +msgid "" +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "1 - Varsayılan döngü oranı. Gerçek PS2 EE hızına oldukça yakındır." + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"3 - EE'nin döngü oranını %50 oranında azaltır. Ortalama hız artışı " -"saÄŸlamasına raÄŸmen takılmalara neden olur." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - VU Cycle Stealing'i devre dışı bırakır. En sorunsuz seçenektir!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -597,7 +650,7 @@ "1 - Mild VU Cycle Stealing. UyumluluÄŸu düşüktür ancak çoÄŸu oyunda hız artışı " "saÄŸlar." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -605,7 +658,7 @@ "2 - Moderate VU Cycle Stealing. Daha düşük uyumluluk; birçok oyunda büyük " "hız artışı." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -613,7 +666,7 @@ "3 - Maximum VU Cycle Stealing. Titremeye ve takılmalara neden olacağından " "faydaları sınırlıdır." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -623,17 +676,21 @@ "bozulmalara ve yanlış FPS okumalarına neden olabilir. Oyunlarda sorunlar " "yaÅŸarsanız ilk olarak bu paneli devre dışı bırakın." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "Buradan yüksek deÄŸerleri seçtiÄŸinizde EE'nin R5900 çekirdek iÅŸlemcisinin " "saat hızı azaltılarak gerçek PS2 donanımı seviyesine ulaÅŸamayan oyunlarda " "büyük hız artışı saÄŸlanır." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -643,7 +700,7 @@ "saÄŸlar. Daha yüksek deÄŸerler oyunun yürüttüğü her bir VU mikro proframı için " "çalınan EE sayısını artırır." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -653,7 +710,7 @@ "Bu çoÄŸu zaman güvenlidir ve zaten Super VU varsayılan olarak buna benzer bir " "iÅŸlem uygular." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -666,7 +723,7 @@ "gelebilir. GS sınırlı oyunlarda FPS düşebilir (özellikle çift çekirdekli " "iÅŸlemcilerde)." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -676,7 +733,7 @@ "kullanan oyunlarla uyumludur. Bu vsync yöntemini kullanmayan oyunlarda hiç " "hız artışı görülmez veya çok az bir hız artışı görülür." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -691,7 +748,7 @@ "döngülerin tek seferlik iterasyonundan sonra iÅŸlemcinin zaman döngüsüne ya " "da bir sonraki olayın zamanlamasına ilerlenir." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -699,7 +756,7 @@ "Bilinen sorunlu oyunlar listesini görmek için HDLoader uyumluluk listesine " "bakın. (Sorunlu oyunlar 'mode1' ya da 'slow DVD' olarak iÅŸaretlidir)" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." @@ -707,7 +764,7 @@ "Kare sınırlaması devre dışı bırakıldığında Turbo ve Ağır Çekim modlarının da " "devre dışı bırakılacağını unutmayın." -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -716,7 +773,7 @@ "imkansızdır. Bu özelliÄŸi etkinleÅŸtirmek bazı oyunlarda ciddi görsel " "bozulmalara neden olacaktır." -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -724,7 +781,7 @@ "MTGS iÅŸlem eÅŸzamanlamasının çökmelere veya görsel bozulmalara neden olduÄŸunu " "düşünüyorsanız bunu etkinleÅŸtirin." -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -741,7 +798,7 @@ "Dikkat: Bu seçenek oyun açıkken etkinleÅŸtirilebilir fakat kapatılamaz " "(görüntüler bozulur)." -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/tr_TR/pcsx2_Main.po pcsx2-1.4.0/locales/tr_TR/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/tr_TR/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/tr_TR/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -2,8 +2,8 @@ msgstr "" "Project-Id-Version: PCSX2 1.0.0\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-01-13 10:00+0200\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-04-22 18:22+0200\n" "Last-Translator: Ceyhun Özgöç \n" "Language-Team: Ceyhun Özgöç (PyramidHead) \n" "Language: tr_TR\n" @@ -13,21 +13,21 @@ "X-Poedit-KeywordsList: _;pxL\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: trunk\\\n" -"X-Generator: Poedit 1.5.6\n" +"X-Generator: Poedit 1.6.9\n" "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "Sebep belirtilmemiÅŸ." -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "Çözümleme hatası" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." -msgstr "Bilgisayarınızın donanımı PCSX2'ye uyumsuz. Kusura bakma." +msgstr "Bilgisayarınızın donanımı PCSX2 ile uyumsuz. Kusura bakmayın." #: common/src/Utilities/Exceptions.cpp:240 msgid "Oh noes! Out of memory!" @@ -93,7 +93,7 @@ "Bekleme durumundaki iÅŸlemleri ve diÄŸer yaygın olmayan iÅŸlem kullanımlarını " "içerir." -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "Tanımlanamayan ISO dosyası formatı" @@ -109,19 +109,19 @@ "EÄŸer bir ISO dosyası yüklemeye çalışıyorsanız bu hata desteklenmeyen dosya " "formatı ya da PCSX2'deki bir hatadan kaynaklanıyor olabilir." -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "" "MTGS iÅŸlemi GS eklentisinin açılmasını beklerken yanıt vermemeye baÅŸladı." -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "Kayıt konumu yüklenemedi. Dosya bozuk veya eksik olabilir." -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -130,7 +130,7 @@ "%s eklentisi açılamıyor. Bilgisayarınızın kaynakları yeterli olmayabilir " "veya donanımınız/sürücüleriniz uyumsuz olabilir." -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " @@ -139,18 +139,18 @@ "%s eklentisi baÅŸlatılamadı. Bilgisayarınızın hafızası veya kaynakları " "yeterli olmayabilir." -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "Yapılandırılmış %s eklentisi bulunamıyor." -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "" "Yapılandırılmış %s eklentisi geçerli bir dinamik kütüphaneye sahip deÄŸil" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -159,14 +159,14 @@ "Yapılandırılmış %s eklentisi geçerli bir PCSX2 eklentisi deÄŸil ya da eski ve " "desteklenmeyen bir PCSX2 sürümüne ait." -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "" "Eklenti donanım veya yazılımınızın/sürücülerinizin desteklenmediÄŸini " "bildiriyor." -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." @@ -174,7 +174,7 @@ "Yapılandırılmış eklenti bir PCSX2 eklentisi deÄŸil ya da PCSX2'nin " "desteklenmeyen eski bir sürüme ait." -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -183,11 +183,11 @@ "Yapılandırılmış %s eklentisi geçerli bir PCSX2 eklentisi deÄŸil ya da eski ve " "desteklenmeyen bir PCSX2 sürümüne ait." -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "Dahili Hafıza Kartı Eklentisi baÅŸlatılamadı." -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "YüklenmemiÅŸ Eklenti" @@ -346,11 +346,11 @@ msgid "Detailed logging of CDVD hardware." msgstr "CDVD donanımının ayrıntılı günlüklemesi." -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 Ä°letisi" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." @@ -358,31 +358,31 @@ "Kayıt konumu doÄŸru ÅŸekilde kaydedilemedi. Geçici dosya baÅŸarıyla oluÅŸturuldu " "ancak son konumuna taşınamadı." -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "En Güvenli" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "Güvenli (Daha Hızlı)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "Dengeli" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "Agresif" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "Daha Agresif" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "ÇoÄŸu Zaman Zararlı" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "Mevcut ayarlar dosyasının üzerine yazılamadı; eriÅŸim engellendi." @@ -390,100 +390,104 @@ msgid "Loading PS2 system plugins..." msgstr "PS2 sistem eklentileri yükleniyor..." -#: pcsx2/gui/AppInit.cpp:49 -#, fuzzy +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "" -"Hiçbir SSE uzantısı kullanılamıyor. PCSX2 SSE komut kümesini destekleyen bir " +"SSE2 uzantıları kullanılamıyor. PCSX2 SSE2 talimat kümesini destekleyen bir " "iÅŸlemci gerektirir." -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 Derleyici Hataları" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "Tüm seçenekler ÅŸimdiki oturum için geçerlidir ve kaydedilmeyecektir.\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "IsoFile" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "komut satırı seçeneklerinin listesini gösterir" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "program günlüğünün/konsolunun gösterilmesini zorlar" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "tam ekran GS modu kullan" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "pencere GS modu kullan" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "oyun yürütülürken kullanıcı arayüzünü devre dışı bırakır" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "ELF dosyalarını açar" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "PS2 sistem menüsünü açmak için boÅŸ bir dvd sürücüsünü yürütür" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "CDVD eklentisini çalıştırır (IsoFile parametresini zorlar)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "tüm hız hacklerini devre dışı bırakır" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "" "oyun düzeltmeleri için belirli nokta veya virgülle ayrılmış listeyi kullan." -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "hızlı baÅŸlatmayı devre dışı bırakır" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "yapılandırma dosyasının konumunu deÄŸiÅŸtirir" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "kullanılacak PCSX2 yapılandırma dosyasını belirler" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "%s'nin Ä°lk Kullanım Sihirbazı'nı çalıştırmasını zorlar" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "taşınabilir sürüm iÅŸlemini baÅŸlatır (yönetici/kök izni gerektirir)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "%s eklentisi olarak kullanılacak dosyayı belirle" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "Eklenti Hatası - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -493,96 +497,96 @@ "%s Eklenti Hatası! %s eklentisi bulunamıyor ya da bozuk:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "" "Varsayılan eklentiyi kullanmak için Tamam'a basın veya %s'yi kapatmak için " "Ä°ptal'e basın. " -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 Hatası: Donanım Yetersiz" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "%s'yi kapatmak için Tamam'a basın." -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s Kritik Hatası" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "Tamam" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "&Tamam" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "Ä°ptal" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "&Ä°ptal" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "&Uygula" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "&Ä°leri >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< &Geri" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "&Geri" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "&Bitir" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "Evet" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "Hayır" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "Göz at" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "&Kaydet" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "&Farklı Kaydet..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "&Yardım" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "Ana Sayfa" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "Hakkında iletiÅŸim kutusunu göster" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -592,41 +596,46 @@ "\n" "Eklenti Yapılandırma Paneli'ne gitmek için Tamam'a basın." -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "Dikkat! Sistem eklentileri yüklenemedi. PCSX2 çalışmayabilir." -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s Komut Dizini Seçenekleri" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS Hatası" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "BIOS Yapılandırma Paneli'ne gitmek için Tamam'a basın." -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "Dikkat! Sistem eklentileri yüklenemedi. PCSX2 çalışmayabilir." + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s Komut Dizini Seçenekleri" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 Yanıt Vermeyen Ä°ÅŸlem" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "Sonlandır" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "Sanal PS2 çalıştırılıyor..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "Son kullanılan ISO listesinde olmayan bir dosyayı seç." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "Göz at..." @@ -670,51 +679,52 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "Yeni ayarlar uygulanamıyor; ayarlardan biri yanlış yapılmış." -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "Günlük sorgulamasını kaydet" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "Birçok günlüğü ufak bir alana sığdırır." -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "Küçük" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "Benim kullandığım (programcı)" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "Normal" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "Okunabilir ve güzeldir." -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "Büyük" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "Çok Büyük" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "Çok yüksek bir çözünürlüğe sahip monitörünüz varsa." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "Varsayılan yumuÅŸak tonlu renk ÅŸeması." -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "Aydınlık Tema" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." @@ -722,138 +732,144 @@ "Yazıların göz sinirlerine kadar girmesini sevenler için klasik siyah renk " "ÅŸeması." -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "Karanlık Tema" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "Her zaman üstte" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "SeçildiÄŸinde günlük penceresi diÄŸer pencerelerin üstünde gözükür." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "Kaydet..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "Günlüğü bir dosyaya kaydet" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "Temizle" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "Günlük penceresinin içeriÄŸini temizle" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "Görünüm" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "&Kapat" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "Günlük penceresini kapat; içerik silinmeyecek" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "GeliÅŸtirici/Ayrıntılı" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "PCSX2 geliÅŸtirici günlüklerini gösterir" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD okumaları" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "Disk okuma etkinliÄŸini göster" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "Tümünü etkinleÅŸtir" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "Tüm günlük kaynak filtrelerini etkinleÅŸtirir." -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "Tümünü devre dışı bırak" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "Tüm günlük kaynak filtrelerini devre dışı bırakır." -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "Varsayılan Ayarları Yükle" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "Tüm günlük kaynak filtrelerini etkinleÅŸtirir." + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "&Günlük" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "&Kaynaklar" #: pcsx2/gui/Debugger/DisassemblyDialog.cpp:223 msgid "panel" -msgstr "" +msgstr "panel" #: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:35 #, c-format msgid "About %s" msgstr "%s Hakkında" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Betatesting" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "Önceki sürümler" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "Site Yöneticileri" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "Eklenti Uzmanları" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "Özel teÅŸekkür" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "GeliÅŸtiriciler" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "Katkıda Bulunanlar" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Playstation 2 Emülatörü" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 Resmi Web sitesi ve Forumu" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 -#, fuzzy +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" -msgstr "PCSX2'nin GitHub'daki Resmi SVN Sayfası" +msgstr "PCSX2'nin GitHub'daki Resmi Git Deposu" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "Peki..." @@ -861,23 +877,19 @@ msgid "Assertion Failure - " msgstr "Onaylama Ä°ÅŸlemi Hatası -" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "Bu ayarlar panelini bir PNG dosyasına kaydeder." -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "Ä°letiÅŸim kutusu ekran görüntülerini ÅŸu klasöre kaydet..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS Seçici" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "Bu iletiyi bir daha gösterme." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." @@ -885,7 +897,7 @@ "Bu pencerenin gösterilmesini engeller ve bundan sonra hep bu seçim geçerli " "olarak kullanılır." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." @@ -893,16 +905,89 @@ "Bu pencere bir daha gösterilmeyecek. Bu ayar ayarlar panelinden " "deÄŸiÅŸtirilebilir." -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "Yoksay" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "Yeniden BaÅŸlat" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "Klasörler" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "Hata (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "Hafıza kartı oluÅŸtur" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "Hafıza kartı oluÅŸtur" @@ -924,30 +1009,30 @@ msgid "Select file name: " msgstr "Dosya adı seçiniz:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "Hata (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "Hafıza kartı oluÅŸtur" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "Hata: Hafıza kartı oluÅŸturulamadı." + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "Hata: Hafıza kartı oluÅŸturulamadı." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "Kartı oluÅŸtururken NTFS sıkıştırması kullan" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [en uyumlusu]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." @@ -955,7 +1040,7 @@ "Sony'nin ürettiÄŸi standart boyut. Tüm BIOS sürümleri ve oyunlar tarafından " "desteklenir." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." @@ -963,32 +1048,32 @@ "En güvenli ve uyumlu hafıza kartı davranışını istiyorsanız her zaman bu " "seçeneÄŸi kullanın." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "" "3. taraf hafıza kartlarının genel boyutu. ÇoÄŸu oyunda sorun çıkarmaması " "gerekir." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 ve 32 MB kartlar aÅŸağı yukarı aynı uyumluluk oranına sahiptir." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." @@ -996,7 +1081,7 @@ "Düşük uyumluluk uyarısı: Evet hız artışı çok fazla olabilir ancak bu özellik " "çoÄŸu oyunla uyumlu deÄŸildir." -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." @@ -1004,6 +1089,22 @@ "Riski size ait olmak üzere kullanın. Hafıza kartınız dengesiz çalışabilir " "(olacağını pek sanmam)." +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -1014,6 +1115,7 @@ msgstr "Ayarlar" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "Dil seçici" @@ -1067,15 +1169,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "Kayıt dosyalarını yüklerken hafıza kartlarını otomatik olarak çıkart." -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "Hafıza Kartı Yöneticisi" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "Hafıza kartlarını PS2'ye tak ya da çıkart" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1140,24 +1246,24 @@ msgid "Game Fixes" msgstr "Oyun Düzeltmeleri" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "BileÅŸen Seçicileri - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "Eklentiler" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "Klasörler" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "Görünüm/Temalar -%s" @@ -1179,47 +1285,51 @@ msgid "Terminate App" msgstr "Uygulamayı Sonlandır" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS Çıkışı devre dışı!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "Kayıt konumu" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "Oyun konumunu ÅŸimdiki slota kaydeder." -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "Konum yükle" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "Oyun konumunu ÅŸimdiki slottan yükler." -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "Konum YedeÄŸi Yükle" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "Oyun konumu yedeÄŸini ÅŸimdiki slottan yükler." -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "Bir sonraki slota geç" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "Kayıt iÅŸlemini sürekli bir sonraki slota kaydederek yapar." -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "Önceki slota geç" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "Kayıt iÅŸlemini sürekli bir önceki slota kaydederek yapar." @@ -1236,7 +1346,7 @@ "%s ekranına çok fazla dosya sürüklediÄŸinizde böyle bir hata oluÅŸur. Tek " "seferde tek dosya, teÅŸekkürler." -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "PS2'yi Yeniden BaÅŸlatmayı Onaylayın" @@ -1254,277 +1364,276 @@ msgid "You have dropped the following ISO image into %s:" msgstr "%s ISO dosyasını ÅŸuraya sürüklediniz:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "Slot %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "Yedek" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "Konsolu Göster" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "Konsoldan Stdio'ya" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "&Sistem" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CD&VD" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "&Yapılandırma" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "&DiÄŸer Ayarlar" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "&Hata Ayıklama" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "BaÅŸlatılıyor..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "ELF Dosyası Aç" -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "Ham PS2 kütüphanelerini doÄŸrudan yürütmek için" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "Kaydetmeden önce yedeÄŸini al" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "Otomatik Oyun Düzeltmeleri" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "Sorunlu olduÄŸu bilinen oyunlara düzeltmeleri otomatik olarak uygular" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "Hileleri EtkinleÅŸtir" -#: pcsx2/gui/MainFrame.cpp:429 -#, fuzzy +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" -msgstr "Yamaları EtkinleÅŸtir" +msgstr "GeniÅŸ Ekran Yamalarını EtkinleÅŸtir" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "Sunucu Dosya Sistemi EtkinleÅŸtir" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "Kapat" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "Tüm dahili SM konumlarını temizler ve eklentileri kapatır." -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "Çıkış" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "%s 'yi kapatmak saÄŸlığınız için zararlı olabilir" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Iso Seçici" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "Eklenti Menüsü" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "Seçili ISO dosyasını CDVD kaynağı olarak kullanır." -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "Eklenti" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "CDVD kaynağı olarak harici bir eklenti kullanır." -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "CD'siz" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "Sanal PS2'nin BIOS yapılandırmasını açmak için bu seçeneÄŸi kullanın." -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "E&mülatör Ayarları" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "&Hafıza Kartları" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "E&klenti/BIOS Seçici" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "Oyun Veritabanı Düzenleyici" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "&Görüntü (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "&Ses (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "&Kontroller (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "Multitap 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "Multitap 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "Tüm ayarları sil..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "Tüm %s ayarlarını siler ve baÅŸlangıç sihirbazını yeniden çalıştırır." -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "Hakkında..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "GeliÅŸtirici Ekranı Açılıyor..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "Günlükleniyor..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "Duraklat" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "Emülatörü güvenli bir ÅŸekilde duraklatır ve PS2 konumunu korur." -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "Devam Et" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "Emülatörün çalışmasını kaldığı yerden devam ettirir." -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "Duraklat/Devam Et" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "" "Geçerli bir emülatör konumu yok; duraklatma ya da devam etme mümkün deÄŸil." -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "Yeniden BaÅŸlat" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "PS2'deki yeniden baÅŸlatma iÅŸlevinin aynısını yapar." -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "Etkin bir emülatör konumu yok; önce bir ÅŸeyler baÅŸlatın." -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "CDVD'yi yeniden baÅŸlat (Tam)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "Seçili SM'yi tamamen yeniden baÅŸlatır." -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "CDVD'yi çalıştır (Tam)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "Seçili DVD ya da Iso ortamı kaynağını kullanarak SM'yi baÅŸlat" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "CDVD'yi yeniden baÅŸlat (Hızlı)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "GiriÅŸ ekranını atlayarak hızlı baÅŸlat" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "CDVD'yi çalıştır (Hızlı)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "PS2 baÅŸlangıc ekranlarını ve BIOS'u atlar" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "Yüklü eklenti yok" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "Temel GS Ayarları..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." @@ -1532,97 +1641,97 @@ "PCSX2 temel sanal makinesi tarafından yürütülen PS2 donanım taklidi " "seçeneklerini düzenleyin." -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "Pencere Ayarları..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "En-boy oranı gibi pencere ve görünüm seçeneklerini deÄŸiÅŸtirin." -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "Eklenti Ayarları..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "%s eklentisinin geliÅŸmiÅŸ ayarlar iletisini açar." -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "Tüm ayarları silmek istediÄŸinden emin misin?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "ISO kalıpı deÄŸiÅŸtirmeyi onayla" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "" "CD mi deÄŸiÅŸtirmek yoksa programı yeniden baÅŸlatarak yeni bir kalıp dosyası " "mı açmak istiyorsunuz?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "CD DeÄŸiÅŸtir" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "CDVD kaynak deÄŸiÅŸimini onayla" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "CDVD kaynağını %s 'dan %s 'a deÄŸiÅŸtirdiniz." -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "" "CD mi deÄŸiÅŸtirmek istiyorsunuz yoksa yeni bir kalıp dosyası açmak mı " "(yeniden baÅŸlatır)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "Tüm Desteklenenler (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "Disk Kalıpları (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "Yığınlar (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 -#, fuzzy, c-format +#: pcsx2/gui/MainMenuClicks.cpp:275 +#, c-format msgid "Compressed (%s)" -msgstr "Yığınlar (%s)" +msgstr "Sıkıştırılmış (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "Tüm Dosyalar (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "CDVD nin çalıştıracağı ISO'yu seçin..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "ELF dosyası seçin..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO dosyası bulunamadı!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "Dosyayı açmaya çalışırken bir hata oluÅŸtu:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." @@ -1630,7 +1739,7 @@ "Hata: Yapılandırılmış ISO dosyası bulunamıyor. CDVD için yeni bir ISO " "kaynağı seçmek için Tamam'a basın." -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1638,7 +1747,7 @@ "PCSX2 için ÅŸu ISO kalıbını seçtiniz:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1651,7 +1760,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1664,19 +1773,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "Dosya adı çok kısa ya da girilmemiÅŸ" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "Dosya adı gerekli klasörün dışında" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "Aynı ada sahip baÅŸka bir dosya var" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "Ä°ÅŸletim sistemi dosyanın oluÅŸturulmasını engelliyor" @@ -1684,27 +1793,27 @@ msgid "Cannot apply settings..." msgstr "Ayarlar uygulanamıyor..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS Klasörü:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "PS2 BIOS rom'larının olduÄŸu klasörü seçin" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "BaÅŸka bir BIOS klasörü seçmek için Göz at'a basın." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "Listeyi yenile" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "BIOS rom'u seçin:" @@ -1736,89 +1845,93 @@ msgid "None" msgstr "Hiçbiri" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "Normal" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU GeliÅŸmiÅŸ Derleyici Seçenekleri" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "Ekstra + Koruma Ä°ÅŸareti" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "Tam" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VUo / VU1 GeliÅŸmiÅŸ Derleyici Seçenekleri" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "Ekstra" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "Yorumlayıcı" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "Muhtemelen evrendeki en yavaÅŸ ÅŸey." -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "Derleyici" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "x86 iÅŸlemler için doÄŸru zamanlı 64 bit MIPS-IV kodu dönüşümü saÄŸlar." -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "Pretty slow; provided for diagnostic purposes only." -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "x86 iÅŸlemler için doÄŸru zamanlı 32 bit MIPS-IV kodu dönüşümü saÄŸlar." -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "EE Cache'yi aktifleÅŸtir (Daha yavaÅŸ)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "Yalnızca yorumlayıcı; test amaçlıdır." -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "Varsayılan Ayarları Yükle" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "" "VU Yorumlayıcısı. YavaÅŸ ve oldukça uyumsuzdur. Yalnızca test amaçlı kullanın." -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU Derleyicisi" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "Daha uyumlu olan yeni VU derleyicisi. Önerilir." -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU Derleyicisi [Eski]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "Yeni mVU derleyicisindeki hataları tanımlamak için." @@ -1981,22 +2094,24 @@ msgstr "VIF1 FIFO ön okumasını etkinleÅŸtir. YavaÅŸ yüklenen oyunlar içindir." #: pcsx2/gui/Panels/GameFixesPanel.cpp:92 -#, fuzzy msgid "" "Delay VIF1 Stalls (VIF1 FIFO) - For SOCOM 2 HUD & Spy Hunter loading hang." -msgstr "VIF1 Beklemelerini Geciktir (VIF1 FIFO) - SOCOM 2 HUD için." +msgstr "" +"VIF1 Beklemelerini Geciktir (VIF1 FIFO) - SOCOM 2 HUD ve Spy Hunter yükleme " +"ekranındaki donma için." #: pcsx2/gui/Panels/GameFixesPanel.cpp:96 msgid "Ignore Bus Direction on Path3 Transfer - Used for Hotwheels" msgstr "Path3 Transfer'daki Bus Direction'ı göz ardı et - Hot Wheels için." #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "FMV oynatılıekwn GSdx software rendering moduna geç" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" -msgstr "" +msgstr "Geomon'daki eksik TLB sorunun önlemek için TLB hack'ini önyükle" #: pcsx2/gui/Panels/GameFixesPanel.cpp:115 msgid "Enable manual game fixes [Not recommended]" @@ -2022,86 +2137,91 @@ "Dikkat: Ä°z günlükleme çoÄŸu zaman programı yavaÅŸlatır; sonra da \"Neden bu " "kadar az FPS alıyorum?\" gibi soruların sorulmasına neden olur. :)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "PS2 hafıza kartlarının bulunduÄŸu klasörü seçin" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "Çıkart" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "Kopyala ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "Yeniden adlandır ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "Yeni oluÅŸtur..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "Tak ..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "Kart:" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "Hafıza kartı oluÅŸtur." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "Hafıza kartını yeniden adlandır ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "Tak ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "Kartı bu porttan çıkart" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "Kartı bir porta takın ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "Bu hafıza kartının bir kopyasını oluÅŸtur ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "Sil" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "Seçili hafıza kartını siler (tüm içerik kaybedilir)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "Bu portta yeni bir hafıza kartı oluÅŸtur." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "Hafıza kartını silmek istediÄŸinizden emin misiniz?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "Hafıza kartını kopyala" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "BaÅŸarısız: Yalnızca mevcut bir kart kopyalanabilir." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2109,25 +2229,25 @@ "Kopyanın adını girin \n" "('.ps2' otomatik olarak eklenecektir)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "BaÅŸarısız: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "Kopyalama baÅŸarısız!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "'%s' hafıza kartı '%s' 'a kopyalandı." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "BaÅŸarılı" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2136,119 +2256,124 @@ "'%s' hafıza kartı için yeni bir ad seçin \n" "('.ps2' otomatik olarak eklenecektir)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "Hafıza kartını yeniden adlandır" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "Hata: Yeniden adlandırma tamamlanamadı.\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "Port-%u / Multitap-%u--Port-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " Multitap-%u--Port-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "BoÅŸ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "%s için hedef portu seçin" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "Kartı tak" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "Kartı çıkart" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "Kart tak ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "Kartı kopyala" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "Kartı yeniden adlandır ..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "Kartı sil" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "Kartı tak" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "Yeni hafıza kartı oluÅŸtur..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "Listeyi Yenile" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 Portu" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "Kart (dosya) adı" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "Kart boyutu" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "BiçimlendirilmiÅŸ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "Tür" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "Son DeÄŸiÅŸtirme" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "OluÅŸturulma" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "Hayır" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "Evet" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- Kullanılmayan kartlar --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- Kullanılmayan kart yok --]" @@ -2281,11 +2406,11 @@ msgid "Select a document root for %s" msgstr "%s için bir belge kökü seçin" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "Uygula" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "Bu dili ÅŸimdi varsayılan yap!" @@ -2364,56 +2489,56 @@ "Sebep: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "Görevler tamamlanıyor..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "Hız hacklerini etkinleÅŸtir" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "" "Tüm hız hacklerinin kapalı olduÄŸunu garantilemenin güvenilir ve kolay bir " "yolu." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "" "Hız hackleri seçeneklerini varsayılan ayarlarına döndürerek hepsini KAPATIR." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerate [Önerilmez]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealing [Önerilmez]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hackleri" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" "Hızı oldukça artırır ve uyumluluÄŸu yüksektir; görüntü hatalarına neden " "olabilir. [Önerilir]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (Çok-Ä°ÅŸlemli microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2421,35 +2546,35 @@ "Hızı oldukça artırır ve uyumluluÄŸu yüksektir; donmalara neden olabilir [3+ " "çekirdek için Önerilir]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "DiÄŸer Hackler" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "INTC Spin Tanımlamasını EtkinleÅŸtir" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" msgstr "" "Bazı oyunlarda hiçbir soruna yol açmadan büyük hız artışı saÄŸlar. [Önerilir]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Wait Loop Tanımlamasını EtkinleÅŸtir" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "Bazı oyunlarda hiçbir soruna yol açmadan hız artışı saÄŸlar. [Önerilir]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Hızlı CDVD'yi etkinleÅŸtir" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "CD'ye daha hızlı ulaÅŸarak yükleme süresini azaltır. [Önerilmez]" @@ -2472,42 +2597,42 @@ msgid "Select a visual theme:" msgstr "Tema seçiniz:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "Kare Sınırlamasını Devre Dışı Bırak" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "Donanım testi için kullanışlıdır. Oyun içinde F4'e basarak bu seçeneÄŸi açıp " "kapatabilirsiniz." -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "Oynatılacak Kare Hızı:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "Ağır Çekim Hızı:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "Turbo Hızı:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC Kare hızı:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL Kare hızı:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2515,49 +2640,49 @@ "NTSC ya da PAL kare hızı ayarlanırken bir hata oluÅŸtu. Ayarlar geçerli " "rakamlardan oluÅŸmalıdır." -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "Devre dışı [varsayılan]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "Yalnızca Turbo açıkken kare atla (EtkinleÅŸtirmek için TAB'ı tıklayın)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "Sürekli kare atlama" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." msgstr "" "Normal ve Turbo kare atlar. Ağır çekim modu kare atlamayı devre dışı bırakır." -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "Çizilecek Kare Sayısı" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "Atlanacak Kare Sayısı" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "Senkronize MTGS Kullan" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "" "Yalnızca MTGS'deki potansiyel hataların çözümü içindir; aşırı yavaÅŸtır." -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "Tüm GS çıkışını devre dışı bırak" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2565,11 +2690,11 @@ "Tüm görüntü eklentisi iÅŸlemlerini devre dışı bırakır; EEcore bileÅŸenlerini " "test etme amaçlıdır." -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "Kare Atlama" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "Kare Sınırlama" @@ -2608,7 +2733,7 @@ "Kayıt konumu bazı önemli bileÅŸenler eksik olduÄŸundan yüklenemedi. Ayrıntılar " "için günlük dosyasına bakın." -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "(varsayılan)" @@ -2630,22 +2755,31 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "Seçili BIOS dosyası bulunamıyor. Lütfen tekrar yapılandırın." -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 -#, fuzzy, c-format +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 +#, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " "SSE2 extensions." msgstr "" -"%s Uzantıları bulunamıyor. R5900-32 derleyicisi MMX, SSE ve SSE2 destekleyen " -"bir iÅŸlemci gerektirir." +"%s Uzantıları bulunamadı. R5900-32 derleyicisi SSE2 destekleyen bir ana " +"bilgisayar iÅŸlemcisi gerektirir." #: pcsx2/x86/microVU.cpp:28 -#, fuzzy, c-format +#, c-format msgid "" "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." msgstr "" -"%s Uzantıları bulunamıyor. microVU MMX, SSE ve SSE2 destekleyen bir iÅŸlemci " -"gerektirir." +"%s Uzantıları bulunamadı. microVU, SSE2 destekleyen bir ana bilgisayar " +"iÅŸlemcisi gerektirir." + +#~ msgid "Betatesting" +#~ msgstr "Betatesting" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS Seçici" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "CDVD nin çalıştıracağı ISO'yu seçin..." #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - SSE2 Önerilir" diff -Nru pcsx2-1.3.1+dfsg/locales/zh_CN/pcsx2_Iconized.po pcsx2-1.4.0/locales/zh_CN/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/zh_CN/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/zh_CN/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-12-13 23:54+0800\n" "Last-Translator: Wei Mingzhi \n" "Language-Team: \n" @@ -38,7 +38,7 @@ "PCSX2 ä¸æ”¯æŒ Playstation 1 游æˆã€‚如果您想模拟 PS1 游æˆè¯·ä¸‹è½½ä¸€ä¸ª PS1 模拟器," "如 ePSXe 或 PCSX。" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -48,20 +48,20 @@ "é‡ç¼–译器无法ä¿ç•™å†…部缓存所需的连续内存空间。此错误å¯èƒ½æ˜¯ç”±è™šæ‹Ÿå†…存资æºä¸è¶³å¼•" "起,如交æ¢æ–‡ä»¶è¿‡å°æˆ–未使用交æ¢æ–‡ä»¶ã€æŸä¸ªå…¶å®ƒç¨‹åºæ­£å ç”¨è¿‡å¤§å†…存。" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." msgstr "" "PCSX2 æ— æ³•åˆ†é… PS2 虚拟机所需内存。请关闭一些å ç”¨å†…存的åŽå°ä»»åŠ¡åŽé‡è¯•ã€‚" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "警告: 部分已é…置的 PS2 é‡ç¼–译器åˆå§‹åŒ–失败且已被ç¦ç”¨ã€‚" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -70,7 +70,7 @@ "注æ„: é‡ç¼–译器对 PCSX2 éžå¿…需,但是它们通常å¯å¤§å¤§æå‡æ¨¡æ‹Ÿé€Ÿåº¦ã€‚如错误已解决," "您å¯èƒ½è¦æ‰‹åŠ¨é‡æ–°å¯ç”¨ä»¥ä¸Šåˆ—出的é‡ç¼–译器。" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -79,7 +79,7 @@ "PCSX2 需è¦ä¸€ä¸ª PS2 BIOS æ‰å¯ä»¥è¿è¡Œã€‚由于法律问题,您必须从一å°å±žäºŽæ‚¨çš„ PS2 实" "机中å–得一个 BIOS 文件。请å‚考常è§é—®é¢˜åŠæ•™ç¨‹ä»¥èŽ·å–进一步的说明。" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -102,7 +102,36 @@ "æ–°è¿è¡Œ PCSX2 (å¯ä»¥ä½¿ PCSX2 能够自动建立必è¦çš„文件夹)。如果您没有此计算机的管" "ç†å‘˜æƒé™ï¼Œæ‚¨éœ€è¦åˆ‡æ¢è‡³ç”¨æˆ·æ–‡ä»¶æ¨¡å¼ (å•å‡»ä¸‹é¢çš„按钮)。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -174,6 +203,13 @@ "以强制游æˆåœ¨è¯»å–å³æ—¶å­˜æ¡£åŽé‡æ–°æ£€ç´¢è®°å¿†å¡å†…容的方å¼é¿å…记忆å¡æŸå。å¯èƒ½ä¸ä¸Žæ‰€" "有游æˆå…¼å®¹ (如 Guitar Hero 《å‰ä»–英雄》)。" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -241,7 +277,7 @@ "progress will be lost. Are you sure?" msgstr "此动作将å¤ä½å½“å‰çš„ PS2 虚拟机状æ€ï¼›å½“å‰è¿›åº¦å°†ä¸¢å¤±ã€‚是å¦ç¡®è®¤?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -260,7 +296,7 @@ "\n" "(注: æ’件设置将ä¸å—å½±å“)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -270,18 +306,23 @@ "%d æ’槽上的记忆å¡å·²è‡ªåŠ¨è¢«ç¦ç”¨ã€‚您å¯ä»¥éšæ—¶åœ¨ä¸»èœå•ä¸Šçš„é…ç½®:记忆å¡ä¸­æ”¹æ­£é—®é¢˜å¹¶" "é‡æ–°å¯ç”¨è®°å¿†å¡ã€‚" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." msgstr "" "请选择一个åˆæ³•çš„ BIOS。如果您ä¸èƒ½ä½œå‡ºåˆæ³•çš„选择请å•å‡»å–消æ¥å…³é—­é…ç½®é¢æ¿ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "注: 大多数游æˆä½¿ç”¨é»˜è®¤é€‰é¡¹å³å¯ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "注: 大多数游æˆä½¿ç”¨é»˜è®¤é€‰é¡¹å³å¯ã€‚" @@ -391,10 +432,12 @@ " * Transformers (å˜å½¢é‡‘刚)" #: pcsx2/gui/Panels/GameFixesPanel.cpp:116 +#, fuzzy msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "建议在主èœå•å¯ç”¨ '自动应用游æˆç‰¹æ®Šä¿®æ­£',ä¸å»ºè®®åœ¨æ­¤æ‰‹åŠ¨è®¾ç½® ('自动' å³é’ˆå¯¹ç‰¹" "定游æˆè‡ªåŠ¨åº”用对应修正)。" @@ -412,19 +455,19 @@ "\n" "最安全的方å¼æ˜¯ä¸å¯ç”¨ä»»ä½•æ¸¸æˆç‰¹æ®Šä¿®æ­£ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " "card will be lost! Are you absolutely and quite positively sure?" msgstr "å³å°†åˆ é™¤å·²æ ¼å¼åŒ–çš„è®°å¿†å¡ '%s'。此记忆å¡ä¸­æ‰€æœ‰æ•°æ®å°†ä¸¢å¤±! 是å¦ç¡®å®š?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "失败: åªå…许å¤åˆ¶åˆ°ä¸€ä¸ªç©ºçš„ PS2 端å£æˆ–文件系统。" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "失败: ç›®æ ‡è®°å¿†å¡ '%s' 正在被使用。" @@ -498,50 +541,66 @@ "è¦è¿è¡Œ %s,所有æ’件必须设定为åˆæ³•ã€‚如果由于æ’件缺失或ä¸å®Œæ•´çš„ %s 安装您ä¸èƒ½åš" "出åˆæ³•é€‰æ‹©ï¼Œè¯·å•å‡»å–消关闭é…ç½®é¢æ¿ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." -msgstr "1 - 默认周期频率。完全é‡çŽ° PS2 实机情感引擎的实际速度。" +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." +msgstr "" +"3 - å°† EE 周期频率å‡å°‘约 50%。中等æ速效果,但将导致很多 CG 动画中的音频出现" +"间断。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "2 - å°† EE 周期频率å‡å°‘约 33%。对大多数游æˆæœ‰è½»å¾®æ速效果,兼容性较高。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "1 - 默认周期频率。完全é‡çŽ° PS2 实机情感引擎的实际速度。" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." msgstr "" -"3 - å°† EE 周期频率å‡å°‘约 50%。中等æ速效果,但将导致很多 CG 动画中的音频出现" -"间断。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "0 - ç¦ç”¨ VU 周期挪用。兼容性最高!" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." msgstr "1 - 轻微 VU 周期挪用。兼容性较低,但对大多数游æˆæœ‰ä¸€å®šçš„æ速效果。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." msgstr "2 - 中等 VU 周期挪用。兼容性更低,但对一些游æˆæœ‰è¾ƒå¤§çš„æ速效果。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." msgstr "" "3 - 最大的 VU 周期挪用。对大多数游æˆå°†é€ æˆå›¾åƒé—ªçƒæˆ–速度拖慢,用途有é™ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -550,16 +609,20 @@ "速度 Hack 通常å¯ä»¥æå‡æ¨¡æ‹Ÿé€Ÿåº¦ï¼Œä½†ä¹Ÿå¯èƒ½å¯¼è‡´é”™è¯¯ã€å£°éŸ³é—®é¢˜æˆ–虚帧。如模拟有问" "题请先å°è¯•ç¦ç”¨æ­¤é¢æ¿ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "æ高此数值å¯å‡å°‘情感引擎的 R5900 CPU 的时钟速度,通常对于未完全使用 PS2 实机" "硬件全部潜能的游æˆæœ‰è¾ƒå¤§æ速效果。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -568,7 +631,7 @@ "此选项控制 VU å•å…ƒä»Žæƒ…感引擎挪用的时钟周期数目。较高数值将增加å„个被游æˆæ‰§è¡Œ" "çš„ VU 微程åºä»Ž EE 挪用的周期数目。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -577,7 +640,7 @@ "仅在标志ä½è¢«è¯»å–时更新,而ä¸æ˜¯æ€»æ˜¯æ›´æ–°ã€‚此选项通常是安全的,Super VU 默认会以" "相似的方å¼å¤„ç†ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -588,7 +651,7 @@ "项对大多数游æˆæ˜¯å®‰å…¨çš„,但一部分游æˆå¯èƒ½ä¸å…¼å®¹æˆ–导致没有å“应。对于å—é™äºŽ GS " "的游æˆï¼Œå¯èƒ½ä¼šé€ æˆæ€§èƒ½ä¸‹é™ (特别是在åŒæ ¸ CPU 上)。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -597,7 +660,7 @@ "此选项对于使用 INTC 状æ€å¯„存器æ¥ç­‰å¾…åž‚ç›´åŒæ­¥çš„游æˆæ•ˆæžœè¾ƒå¥½ï¼ŒåŒ…括一些主è¦çš„ " "3D RPG 游æˆã€‚对于ä¸ä½¿ç”¨æ­¤æ–¹æ³•çš„游æˆæ²¡æœ‰æ速效果。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -610,7 +673,7 @@ "的模拟å•å…ƒè®¡åˆ’的事件处ç†è¿‡ç¨‹ä¹‹å‰ä¸ä¿è¯äº§ç”Ÿç›¸åŒç»“果的循环。在一次循环体执行之" "åŽï¼Œå°†ä¸‹ä¸€äº‹ä»¶çš„时间或处ç†å™¨çš„时间片结æŸæ—¶é—´ (å­°æ—©) åšå‡ºæ›´æ–°ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -618,26 +681,26 @@ "请å‚看 HDLoader 兼容性列表以获å–å¯ç”¨æ­¤é¡¹ä¼šå‡ºçŽ°é—®é¢˜çš„游æˆåˆ—表。(通常标记为需" "è¦ 'mode 1' 或 '慢速 DVD')" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "注æ„: 如é™å¸§è¢«ç¦ç”¨ï¼Œå¿«é€Ÿæ¨¡å¼å’Œæ…¢åŠ¨ä½œæ¨¡å¼å°†ä¸å¯ç”¨ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." msgstr "" "注æ„: 由于 PS2 硬件设计,ä¸å¯èƒ½å‡†ç¡®è·³å¸§ã€‚å¯ç”¨æ­¤é€‰é¡¹å¯èƒ½åœ¨æ¸¸æˆä¸­å¯¼è‡´å›¾åƒé”™è¯¯ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." msgstr "如您认为 MTGS 线程åŒæ­¥å¯¼è‡´å´©æºƒæˆ–图åƒé”™è¯¯ï¼Œè¯·å¯ç”¨æ­¤é¡¹ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -651,7 +714,7 @@ "\n" "警告: 此选项å¯ä»¥å³æ—¶å¯ç”¨ä½†é€šå¸¸ä¸èƒ½å³æ—¶å…³é—­ (通常会导致图åƒæŸå)。" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/zh_CN/pcsx2_Main.po pcsx2-1.4.0/locales/zh_CN/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/zh_CN/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/zh_CN/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PCSX2 0.9.9\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" "PO-Revision-Date: 2014-12-13 23:51+0800\n" "Last-Translator: Wei Mingzhi \n" "Language-Team: \n" @@ -21,15 +21,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "æ— ç†ç”±ç»™å‡ºã€‚" -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "解æžé”™è¯¯" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "您的硬件ä¸å¯ä»¥è¿è¡Œ PCSX2。抱歉。" @@ -90,7 +90,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "包å«ç©ºé—²äº‹ä»¶å¤„ç†åŠä¸€äº›å…¶å®ƒçš„éžå¸¸è§äº‹ä»¶ä½¿ç”¨ã€‚" -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "无法识别的 ISO é•œåƒæ–‡ä»¶æ ¼å¼" @@ -106,18 +106,18 @@ "如从一个 ISO é•œåƒåŠ è½½ï¼Œæ­¤é”™è¯¯å¯èƒ½ç”±ä¸€ä¸ªä¸è¢«æ”¯æŒçš„ ISO é•œåƒç±»åž‹æˆ– PCSX2 ISO é•œ" "åƒæ”¯æŒçš„ bug 引起。" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "MTGS 线程在等待 GS æ’件打开时失去å“应。" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "å³æ—¶å­˜æ¡£æ— æ³•è¯»å–,文件å¯èƒ½å·²æŸå或ä¸å®Œæ•´ã€‚" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -125,24 +125,24 @@ msgstr "" "打开 %s æ’件失败。您的计算机å¯èƒ½æ²¡æœ‰å¯ç”¨èµ„æºï¼Œæˆ–ç”±ä¸å…¼å®¹çš„硬件/驱动程åºå¯¼è‡´ã€‚" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " "resources needed." msgstr "%s æ’件åˆå§‹åŒ–失败。您的系统å¯èƒ½æ²¡æœ‰è¶³å¤Ÿçš„内存或资æºã€‚" -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "é…置的 %s æ’件文件未找到" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "é…置的 %s æ’件文件ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„动æ€é“¾æŽ¥åº“" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " @@ -151,19 +151,19 @@ "é…置的 %s æ’件ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„ PCSX2 æ’件,或是为一个ä¸å—支æŒçš„ PCSX2 旧版本设" "计的。" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "æ’件报告您的硬件或软件/驱动程åºä¸å—支æŒã€‚" -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "" "é…置的æ’件ä¸æ˜¯ä¸€ä¸ª PCSX2 æ’件,或是为一个ä¸å—支æŒçš„ PCSX2 旧版本设计的。" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -172,11 +172,11 @@ "é…置的 %s æ’件ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„ PCSX2 æ’件,或是为一个ä¸å—支æŒçš„ PCSX2 旧版本设" "计的。" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "内置记忆å¡æ’件åˆå§‹åŒ–失败。" -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "å·²å¸è½½æ’件" @@ -321,41 +321,41 @@ msgid "Detailed logging of CDVD hardware." msgstr "详细记录 CDVD 硬件信æ¯ã€‚" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 消æ¯" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." msgstr "å³æ—¶å­˜æ¡£æœªæ­£ç¡®ä¿å­˜ã€‚临时文件建立æˆåŠŸä½†æ— æ³•ç§»è‡³å­˜æ¡£ä½ç½®ã€‚" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "最安全" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "安全 (较快)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "平衡" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "较激进" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "激进" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "ä¸ç¨³å®š" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "覆盖已存在文件失败;æƒé™è¢«æ‹’ç»ã€‚" @@ -363,97 +363,102 @@ msgid "Loading PS2 system plugins..." msgstr "正在加载 PS2 系统æ’件..." -#: pcsx2/gui/AppInit.cpp:49 +#: pcsx2/gui/AppInit.cpp:50 #, fuzzy msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." msgstr "SSE 扩展ä¸å¯ç”¨ã€‚PCSX2 需è¦ä¸€ä¸ªæ”¯æŒ SSE 指令集的 CPU。" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 é‡ç¼–译器错误" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "全部选项仅对当å‰ä¼šè¯æœ‰æ•ˆï¼Œä¸ä¼šè¢«ä¿å­˜ã€‚\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "Iso 文件" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "显示此命令行选项列表" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "强制程åºæ—¥å¿—/控制å°ä¸ºå¯è§çŠ¶æ€" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "使用全å±å¹• GS 模å¼" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "使用窗å£åŒ– GS 模å¼" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "è¿è¡Œæ¸¸æˆæ—¶ä¸æ˜¾ç¤ºå›¾å½¢ç•Œé¢" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "执行一个 ELF 映åƒ" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "å¯åŠ¨ç©ºçš„ DVD 托盘;用于进入 PS2 系统èœå•" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "从 CDVD æ’件å¯åŠ¨ (将覆盖 IsoFile å‚æ•°)" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "å–消所有速度 Hack" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "使用指定的逗å·æˆ–管é“符隔开的游æˆç‰¹æ®Šä¿®æ­£åˆ—表。" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "ç¦ç”¨å¿«é€Ÿå¯åŠ¨" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "更改é…置文件路径" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "指定使用的 PCSX2 é…置文件" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "强制 %s å¯åŠ¨é¦–次è¿è¡Œå‘导" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "å¯ç”¨ç»¿è‰²æ¨¡å¼ (需è¦ç®¡ç†å‘˜æƒé™)" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "指定用于 %s æ’件的文件" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "æ’件覆盖错误 - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -463,94 +468,94 @@ "%s æ’件覆盖错误! 以下文件ä¸å­˜åœ¨æˆ–ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„ %s æ’件:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "å•å‡»ç¡®å®šä½¿ç”¨é»˜è®¤é…置的æ’件,或å–消关闭 %s。" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 错误: 硬件缺陷" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "请å•å‡» \"确定\" æ¥å…³é—­ %s。" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s 严é‡é”™è¯¯" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "确定" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "确定(&O)" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "å–消" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "å–消(&C)" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "应用(&A)" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "下一步(&N) >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< 上一步(&B)" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "上一步(&B)" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "完æˆ(&F)" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "是(&Y)" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "å¦(&N)" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "æµè§ˆ" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "ä¿å­˜(&S)" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "å¦å­˜ä¸º(&A)..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "帮助(&H)" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "首页(&H)" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "显示关于对è¯æ¡†" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -560,41 +565,46 @@ "\n" "å•å‡»ç¡®å®šè¿›å…¥æ’件é…ç½®é¢æ¿ã€‚" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "警告! 系统æ’件未被加载。PCSX2 å¯èƒ½ä¸å¯ä½¿ç”¨ã€‚" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s 命令行选项" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS 错误" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "å•å‡»ç¡®å®šè¿›å…¥ BIOS 设置é¢æ¿ã€‚" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "警告! 系统æ’件未被加载。PCSX2 å¯èƒ½ä¸å¯ä½¿ç”¨ã€‚" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s 命令行选项" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 线程没有å“应" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "终止" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "正在执行 PS2 虚拟机..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "打开一个最近历å²è®°å½•ä¸­æ²¡æœ‰çš„ Iso 文件。" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "æµè§ˆ..." @@ -636,134 +646,145 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "无法应用新的设置选项,æŸä¸€ä¸ªè®¾ç½®é€‰é¡¹éžæ³•ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "ä¿å­˜æ—¥å¿—问题" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "在较å°åŒºåŸŸä¸­æ˜¾ç¤ºè¾ƒå¤šæ—¥å¿—内容。" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "å°" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "我使用的 (程åºå‘˜)。" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +#, fuzzy +msgid "Normal font" msgstr "正常" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "å¯è¯»æ€§è¾ƒé«˜ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "最大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "仅用于较高分辩率。" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "默认柔色调色彩主题。" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "亮色主题" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "ç»å…¸é»‘色主题。" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "暗色主题" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "总在最上é¢" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "如选中,日志窗å£å°†åœ¨å…¶å®ƒçª—å£ä¸Šé¢æ˜¾ç¤ºã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "ä¿å­˜(&S)..." -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "将日志内容ä¿å­˜è‡³æ–‡ä»¶" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "清除(&L)" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "清除日志窗å£å†…容" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "外观" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "关闭(&C)" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "关闭此日志窗å£ï¼›å†…容将被ä¿ç•™" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "å¼€å‘者/冗余" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "显示 PCSX2 å¼€å‘者日志记录" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "CDVD 读å–" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "显示光盘读å–活动" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "全部å¯ç”¨" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "å¯ç”¨å…¨éƒ¨æ—¥å¿—æ¥æºè¿‡æ»¤å™¨ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "全部ç¦ç”¨" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "ç¦ç”¨å…¨éƒ¨æ—¥å¿—æ¥æºè¿‡æ»¤å™¨ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore Default" +msgstr "æ¢å¤é»˜è®¤å€¼" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "å¯ç”¨å…¨éƒ¨æ—¥å¿—æ¥æºè¿‡æ»¤å™¨ã€‚" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "日志(&L)" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "æ¥æº(&S)" @@ -776,47 +797,44 @@ msgid "About %s" msgstr "关于 %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "Beta 测试" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "旧版本" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "网站管ç†" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "æ’件专家" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "特别感谢" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "å¼€å‘者" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "贡献者" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "一个 PlayStation 2 模拟器" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 官方网站和论å›" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" msgstr "ä½äºŽ GitHub çš„ PCSX2 官方 Git 仓库" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "关闭对è¯æ¡†" @@ -824,44 +842,113 @@ msgid "Assertion Failure - " msgstr "断言失败 - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "将此设置é¢æ¿çš„截图ä¿å­˜ä¸º PNG 文件。" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "将对è¯æ¡†æˆªå›¾ä¿å­˜åˆ°..." -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "BIOS 选择器" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "ä¸å†æ˜¾ç¤ºæ­¤å¯¹è¯æ¡†ã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "ç¦ç”¨å¼¹å‡ºæ示,以åŽä»»ä½•æ‚¨é€‰å®šçš„内容将被自动使用。" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "æ­¤æ示框将ä¸ä¼šå†è¢«æ˜¾ç¤ºã€‚此设定å¯ä»¥ä»Žè®¾ç½®é¢æ¿ä¸­æ’¤æ¶ˆã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "忽略" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "é‡ç½®" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +msgid "Convert" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +msgid "Convert: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "文件夹" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "错误 (%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "创建记忆å¡" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "创建新的记忆å¡" @@ -883,76 +970,92 @@ msgid "Select file name: " msgstr "选择文件å:" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "错误 (%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "创建记忆å¡" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "错误: 记忆å¡æ— æ³•åˆ›å»ºã€‚" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "错误: 记忆å¡æ— æ³•åˆ›å»ºã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "创建此记忆å¡æ—¶ä½¿ç”¨ NTFS 压缩。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MB [兼容性最高]" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "索尼的标准大å°ï¼Œæ”¯æŒæ‰€æœ‰æ¸¸æˆå’Œ BIOS 版本。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "如果您需è¦æœ€å®‰å…¨çš„记忆å¡è¡Œä¸ºï¼Œè¯·ä½¿ç”¨æ­¤é€‰é¡¹ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "一个通常的第三方记忆å¡å¤§å°ï¼Œåº”该å¯ä»¥å…¼å®¹å¤§å¤šæ•°æ¸¸æˆã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16MB 或 32MB 记忆å¡é€šå¸¸å…·æœ‰ç›¸åŒçš„兼容性。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "兼容性低: 容é‡è¾ƒå¤§ï¼Œä½†å¯èƒ½åœ¨å¾ˆå¤šæ¸¸æˆä¸­ä¸å¯ç”¨ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "å¯èƒ½å‡ºçŽ°é”™è¯¯çš„记忆å¡è¡Œä¸º (一般ä¸ä¼š)。" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -963,6 +1066,7 @@ msgstr "设置" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "语言选择器" @@ -1016,15 +1120,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "å³æ—¶è¯»æ¡£æ—¶è‡ªåŠ¨é€€å‡ºè®°å¿†å¡" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "记忆å¡ç®¡ç†å™¨" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "将记忆å¡æ‹–到到 PS2 端å£ä¸Šï¼Œæˆ–从 PS2 端å£æ‹–放出去" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1086,24 +1194,24 @@ msgid "Game Fixes" msgstr "游æˆç‰¹æ®Šä¿®æ­£" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "组件选择器 - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "æ’件" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "文件夹" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "外观/主题 - %s" @@ -1125,47 +1233,51 @@ msgid "Terminate App" msgstr "终止应用程åº" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "GS 输出已ç¦ç”¨!" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "å³æ—¶å­˜æ¡£" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "将虚拟机的状æ€ä¿å­˜è‡³å½“å‰å­˜æ¡£ä½ç½®ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "å³æ—¶è¯»æ¡£" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "从当å‰å­˜æ¡£ä½ç½®è¯»å–虚拟机状æ€ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "读å–å³æ—¶å­˜æ¡£å¤‡ä»½" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "从当å‰å­˜æ¡£ä½ç½®è¯»å–虚拟机状æ€çš„备份。" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "切æ¢è‡³ä¸‹ä¸€ä½ç½®" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "切æ¢è‡³ä¸‹ä¸€ä½ç½®ã€‚" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "切æ¢è‡³ä¸Šä¸€ä½ç½®" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "切æ¢è‡³ä¸Šä¸€ä½ç½®ã€‚" @@ -1180,7 +1292,7 @@ "please, thank you." msgstr "ä¸å¯ä»¥å°†å¤šä¸ªæ–‡ä»¶åŒæ—¶æ‹–到到 %s 窗å£ä¸Šã€‚一次åªèƒ½æ‹–动一个文件。" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "确认 PS2 é‡å¯" @@ -1198,373 +1310,373 @@ msgid "You have dropped the following ISO image into %s:" msgstr "您已将以下 ISO é•œåƒæ‹–放至 %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "ä½ç½® %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "备份" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "显示控制å°" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "将标准输入输出用于控制å°" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "系统(&S)" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "CDVD(&V)" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "é…ç½®(&C)" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "æ‚项(&M)" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "调试(&D)" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "正在åˆå§‹åŒ–..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "è¿è¡Œ ELF..." -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "直接è¿è¡Œ PS2 二进制文件" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "存档å‰å¤‡ä»½" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "自动应用游æˆç‰¹æ®Šä¿®æ­£" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "自动对已知有问题的游æˆåº”用对应的特殊修正。" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "å¯ç”¨ä½œå¼Šç " -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "å¯ç”¨å®½å±è¡¥ä¸" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "å¯ç”¨ä¸»æœºæ–‡ä»¶ç³»ç»Ÿ" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "关闭" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "消除所有内部 VM 状æ€å¹¶å…³é—­æ’件。" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "退出" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "关闭 %s å¯èƒ½æœ‰å®³æ‚¨çš„å¥åº·" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "Iso 选择器" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "æ’件èœå•" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "Iso" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "将指定的 ISO é•œåƒæŒ‡å®šä¸º CDVD æºã€‚" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "æ’件" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "使用一个外部æ’件åšä¸º CDVD æºã€‚" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "无光盘" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "使用此项å¯åŠ¨è‡³è™šæ‹Ÿ PS2 çš„é…ç½®å±å¹•ã€‚" -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "模拟设置(&S)" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "记忆å¡(&M)" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "æ’件/BIOS 选择器(&P)" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "游æˆæ•°æ®åº“编辑器" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "视频 (GS) (&V)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "音频 (SPU2) (&A)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "控制器 (PAD) (&C)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "ç«çº¿" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "å¤šåˆ†æ’ 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "å¤šåˆ†æ’ 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "清除所有设置..." -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "清除所有的 %s 设置并é‡æ–°è¿è¡Œå¯åŠ¨å‘导。" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "关于..." -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "打开调试窗å£..." -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "正在记录..." -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "æš‚åœ" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "安全地暂åœæ¨¡æ‹Ÿå¹¶ä¿ç•™ PS2 状æ€ã€‚" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "æ¢å¤" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "从挂起的模拟状æ€ä¸­æ¢å¤ã€‚" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "æš‚åœ/æ¢å¤" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "模拟器未è¿è¡Œï¼›æ— æ³•æŒ‚起或æ¢å¤ã€‚" -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "é‡æ–°å¯åŠ¨" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "仿真 PS2 虚拟机的硬件å¤ä½ã€‚" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "没有活跃的模拟状æ€ï¼›è¯·å…ˆå¯åŠ¨ä¸€äº›ä¸œè¥¿ã€‚" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "é‡æ–°å¯åŠ¨ CDVD (完整模å¼)" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "硬å¤ä½å½“å‰æ´»åŠ¨çš„ VM。" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "å¯åŠ¨ CDVD (完整模å¼)" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "使用当å‰é€‰æ‹©çš„ DVD 或 Iso æºåª’体å¯åŠ¨ VM。" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "é‡æ–°å¯åŠ¨ CDVD (快速模å¼)" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "快速é‡å¯ (跳过 PS2 å¯åŠ¨ç”»é¢)" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "å¯åŠ¨ CDVD (快速模å¼)" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "使用快速å¯åŠ¨æ¨¡å¼æ¥è·³è¿‡ PS2 å¯åŠ¨ç”»é¢" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "未加载æ’件" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "核心 GS 设置..." -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "修改 PCSX2 核心虚拟机相关的硬件模拟设置。" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "窗å£è®¾ç½®..." -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "修改窗å£åŠå¤–观选项,包è¯çºµæ¨ªæ¯”。" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "æ’件设置..." -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "打开 %s æ’件的高级设置对è¯æ¡†ã€‚" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "é‡ç½®æ‰€æœ‰è®¾ç½®?" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "确认 ISO é•œåƒæ›´æ”¹" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "是å¦è¦æ›´æ¢å…‰ç›˜æˆ–å¯åŠ¨æ–°å…‰ç›˜é•œåƒ (通过系统å¤ä½)?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "æ›´æ¢å…‰ç›˜" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "确认 CDVD æºæ›´æ”¹" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "您已ç»é€‰æ‹©å°† CDVD æºç”± %s æ›´æ¢åˆ° %s。" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "您是å¦è¦æ›´æ¢å…‰ç›˜æˆ–å¯åŠ¨æ–°å…‰ç›˜é•œåƒ (系统å¤ä½)?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "全部支æŒçš„ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "å…‰ç›˜æ˜ åƒ (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "å—转储 (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 +#: pcsx2/gui/MainMenuClicks.cpp:275 #, c-format msgid "Compressed (%s)" msgstr "压缩的 (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "全部文件 (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "选择 CDVD æºå…‰ç›˜é•œåƒ..." +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "选择 ELF 文件..." -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "ISO 文件未找到!" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "打开文件时出现一个错误:" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." msgstr "错误: é…置的 ISO 文件ä¸å­˜åœ¨ã€‚å•å‡»ç¡®å®šä¸º CDVD 选择一个新的 ISO æºã€‚" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1572,7 +1684,7 @@ "您已为 PCSX2 选择了以下 ISO é•œåƒ:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1585,7 +1697,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1598,19 +1710,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "文件å为空或过短" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "文件å在所需目录之外" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "文件å已存在" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "æ“作系统ä¸å…许建立此文件" @@ -1618,27 +1730,27 @@ msgid "Cannot apply settings..." msgstr "无法应用设置..." -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS æœç´¢è·¯å¾„:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "选择 PS2 BIOS 文件所在文件夹" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "å•å‡»æµè§ˆæŒ‰é’®å¯é€‰æ‹©ä¸€ä¸ª PS2 BIOS 所在的ä¸åŒæ–‡ä»¶å¤¹ã€‚" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "刷新列表" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "选择一个 BIOS 文件:" @@ -1670,88 +1782,92 @@ msgid "None" msgstr "æ— " -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "正常" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU 高级é‡ç¼–译器选项" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "é¢å¤– + ä¿ç•™ç¬¦å·" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "完全" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 高级é‡ç¼–译器选项" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "é¢å¤–" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "解释器" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "很有å¯èƒ½æ˜¯å®‡å®™ä¸­æœ€æ…¢çš„东西。" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "é‡ç¼–译器" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "进行从 64 ä½ MIPS-IV 机器代ç åˆ° x86 çš„å³æ—¶ä»£ç ç¿»è¯‘。" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "很慢;仅供诊断用途。" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "进行从 32 ä½ MIPS-IV 机器代ç åˆ° x86 çš„å³æ—¶ä»£ç ç¿»è¯‘。" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "å¯ç”¨ EE 缓存 (较慢)" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "很慢;仅供诊断用途。" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "æ¢å¤é»˜è®¤å€¼" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "矢é‡å•å…ƒè§£é‡Šå™¨ã€‚速度慢且兼容性低。仅供诊断用途。" -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU é‡ç¼–译器" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "新版矢é‡å•å…ƒé‡ç¼–译器,兼容性有较大æå‡ã€‚推è。" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU é‡ç¼–译器 [æ—§å¼]" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "å¯ç”¨äºŽè¯Šæ–­æ–°çš„ mVU é‡ç¼–译器的 bug 或é™å€¼é—®é¢˜ã€‚" @@ -1917,7 +2033,8 @@ msgstr "忽略 Path3 ä¼ è¾“ä¸­çš„æ€»çº¿æ–¹å‘ - 用于 Hotwheels" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +#, fuzzy +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "播放 FMV 时,切æ¢åˆ° GSdx 软件渲染模å¼" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 @@ -1944,86 +2061,91 @@ "of 'What happened to my FPS?' problems. :)" msgstr "警告: å¯ç”¨è·Ÿè¸ªè®°å½•é€šå¸¸éžå¸¸æ…¢ï¼Œä¸”å¯èƒ½å¯¼è‡´ \"FPS 怎么回事\" 类问题。:)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "选择 PS2 记忆å¡æ‰€åœ¨æ–‡ä»¶å¤¹" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "弹出" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "å¤åˆ¶..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "é‡å‘½å..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "创建..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +#, fuzzy +msgid "Convert ..." +msgstr "æ’å…¥..." + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "记忆å¡: " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "创建一个新的记忆å¡ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "é‡å‘½å此记忆å¡..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "æ’å…¥..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "从此端å£å¼¹å‡ºè®°å¿†å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "æ’入记忆å¡è‡³æ­¤ç«¯å£..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "创建此记忆å¡çš„一个å¤æœ¬..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "删除" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "从ç£ç›˜ä¸Šæ°¸ä¹…åˆ é™¤æ­¤è®°å¿†å¡ (将丢失所有内容)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "创建一个新的记忆å¡å¹¶å°†å…¶åˆ†é…至此端å£ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "删除记忆å¡æ–‡ä»¶?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "å¤åˆ¶è®°å¿†å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "失败: åªèƒ½å¤åˆ¶å·²æœ‰çš„记忆å¡æ–‡ä»¶ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2031,25 +2153,25 @@ "选择一个新记忆å¡æ–‡ä»¶å¤æœ¬çš„文件å\n" "('.ps2' 将被自动添加)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "失败: %s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "å¤åˆ¶å¤±è´¥!" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "记忆å¡æ–‡ä»¶ '%s' 已被å¤åˆ¶åˆ° '%s'。" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "æˆåŠŸ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2058,119 +2180,124 @@ "ä¸ºè®°å¿†å¡ '%s' 选择一个新åå­—\n" "('.ps2' 扩展å将被自动添加)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "é‡å‘½å记忆å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "错误: 无法完æˆé‡å‘½åæ“作。\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "端å£-%u / 多分æ’-%u--端å£-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " 多分æ’-%u--端å£-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "空" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "为 '%s' 选择一个目标端å£" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "æ’入记忆å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "弹出记忆å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "æ’入记忆å¡..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "å¤åˆ¶è®°å¿†å¡..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "é‡å‘½å记忆å¡..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "删除记忆å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "æ’入记忆å¡" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "新建记忆å¡..." -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "刷新列表" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "PS2 端å£" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "记忆å¡æ–‡ä»¶å" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "记忆å¡å¤§å°" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "已格å¼åŒ–" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "类型" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "最åŽä¿®æ”¹æ—¥æœŸ" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "创建日期" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "å¦" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "是" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PS1" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- æœªä½¿ç”¨è®°å¿†å¡ --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- æ— æœªä½¿ç”¨è®°å¿†å¡ --]" @@ -2201,11 +2328,11 @@ msgid "Select a document root for %s" msgstr "为 %s 选择一个文档根目录" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "应用" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "ç«‹å³å°†æ­¤è¯­è¨€è®¾ä¸ºé»˜è®¤è¯­è¨€!" @@ -2283,84 +2410,84 @@ "ç†ç”±: %s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "正在完æˆä»»åŠ¡..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "å¯ç”¨é€Ÿåº¦ Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "确认全部速度 Hack 被ç¦ç”¨çš„一个安全简易的方法。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "将所有速度 Hack 选项é‡ç½®åˆ°é»˜è®¤å€¼ï¼Œå³å…³é—­æ‰€æœ‰é€‰é¡¹ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE 周期频率 [ä¸æŽ¨è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU 周期挪用 [ä¸æŽ¨è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU æ ‡å¿—ä½ Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "æ速效果较好,兼容性较高;å¯èƒ½å¯¼è‡´å›¾åƒé”™è¯¯ç­‰ã€‚[推è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU (多线程 microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" msgstr "æ速效果较好,兼容性较高;å¯èƒ½å¯¼è‡´æ¨¡æ‹Ÿå™¨æ²¡æœ‰å“应等。[三核以上用户推è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "其它 Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "å¯ç”¨ INTC Spin 检测" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" msgstr "对部分游æˆæœ‰æ˜¾è‘—æ速,基本无副作用。[推è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "å¯ç”¨ç­‰å¾…循环检测" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "对部分游æˆæœ‰ä¸­ç­‰æ速,无已知副作用。[推è]" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "å¯ç”¨å¿«é€Ÿ CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "加速光盘访问,缩短加载时间。[ä¸æŽ¨è]" @@ -2382,96 +2509,96 @@ msgid "Select a visual theme:" msgstr "选择视觉主题:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "ç¦ç”¨é™å¸§" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "在进行评测时有用。游æˆä¸­å¯æŒ‰ F4 开关此选项。" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "基准帧率调整:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "慢动作速率调整:" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "快速模å¼é€ŸçŽ‡è°ƒæ•´:" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC 帧率:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL 帧率:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." msgstr "è§£æž NTSC 或 PAL 帧率时出错。设定值必须是一个åˆæ³•çš„浮点数值。" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "ç¦ç”¨ [默认]" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "仅在快速模å¼ä¸­è·³å¸§ (按 TAB é”®å¯ç”¨)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "常数跳帧" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." msgstr "正常åŠåŠ é€Ÿæ¨¡å¼å¸§çŽ‡è·³å¸§ã€‚慢动作模å¼ä»å°†ç¦ç”¨è·³å¸§ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "绘制帧数" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "跳过帧数" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "使用åŒæ­¥ MTGS" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." msgstr "仅供诊断 MTGS 中å¯èƒ½çš„错误,å¯èƒ½ä¼šéžå¸¸æ…¢ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "ç¦ç”¨æ‰€æœ‰ GS 输出" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." msgstr "彻底ç¦ç”¨æ‰€æœ‰çš„ GS æ’件活动;å¯ç”¨äºŽè¯„测 EE 内核组件性能。" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "跳帧" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "é™å¸§" @@ -2506,7 +2633,7 @@ "log file for details." msgstr "æ­¤å³æ—¶å­˜æ¡£æ— æ³•åŠ è½½ã€‚关键组件缺失。请å‚看日志文件以获å–详细信æ¯ã€‚" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr " (默认)" @@ -2524,7 +2651,7 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "é…置的 BIOS 文件ä¸å­˜åœ¨ã€‚请é‡æ–°é…置。" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 #, fuzzy, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " @@ -2539,6 +2666,15 @@ "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." msgstr "%s 扩展未找到。microVU 需è¦ä¸€ä¸ªå¸¦æœ‰ MMX, SSE åŠ SSE2 扩展的主机 CPU。" +#~ msgid "Betatesting" +#~ msgstr "Beta 测试" + +#~ msgid "BIOS Selector" +#~ msgstr "BIOS 选择器" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "选择 CDVD æºå…‰ç›˜é•œåƒ..." + #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - 推è使用 SSE2" diff -Nru pcsx2-1.3.1+dfsg/locales/zh_TW/pcsx2_Iconized.po pcsx2-1.4.0/locales/zh_TW/pcsx2_Iconized.po --- pcsx2-1.3.1+dfsg/locales/zh_TW/pcsx2_Iconized.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/zh_TW/pcsx2_Iconized.po 2016-01-05 17:28:08.000000000 +0000 @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: PCSX2 1.1.0 Rev 5863\n" +"Project-Id-Version: PCSX2 1.3.1 1201\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-03-04 08:55+0800\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-10-05 12:17+0800\n" "Last-Translator: 呆丸北拜\n" "Language-Team: pcsx2fan\n" "Language: \n" @@ -35,7 +35,7 @@ "PCSX2 ä¸æ”¯æ´ Playstation éŠæˆ²å…‰ç¢Ÿã€‚\n" "若您想è¦æ¨¡æ“¬ PS éŠæˆ²ï¼Œæ‚¨å¿…須下載 PS 模擬器,譬如 ePSXe 或 PCSX。" -#: pcsx2/System.cpp:114 +#: pcsx2/System.cpp:129 msgid "" "This recompiler was unable to reserve contiguous memory required for " "internal caches. This error can be caused by low virtual memory resources, " @@ -46,7 +46,7 @@ "此錯誤å¯èƒ½ç”±ä½Žæ°´å¹³çš„虛擬記憶體資æºå¼•èµ·ï¼Œè­¬å¦‚分é æª”案å°æˆ–沒有分é æª”案,\n" "或由å¦ä¸€å€‹ç¨å å¤§é‡è¨˜æ†¶é«”的程å¼å¼•èµ·ã€‚" -#: pcsx2/System.cpp:354 +#: pcsx2/System.cpp:374 msgid "" "PCSX2 is unable to allocate memory needed for the PS2 virtual machine. Close " "out some memory hogging background tasks and try again." @@ -54,13 +54,13 @@ "PCSX2 ç„¡æ³•åˆ†é… PS2 虛擬機需è¦çš„記憶體。\n" "關閉一些ç¨å è¨˜æ†¶é«”的背景工作並å†æ¬¡å˜—試。" -#: pcsx2/gui/AppInit.cpp:146 +#: pcsx2/gui/AppInit.cpp:147 msgid "" "Warning: Some of the configured PS2 recompilers failed to initialize and " "have been disabled:" msgstr "警告:æŸäº›æŒ‡å®šçš„ PS2 å編譯è£ç½®åˆå§‹åŒ–失敗,並且被åœç”¨ï¼š" -#: pcsx2/gui/AppInit.cpp:194 +#: pcsx2/gui/AppInit.cpp:205 msgid "" "Note: Recompilers are not necessary for PCSX2 to run, however they typically " "improve emulation speed substantially. You may have to manually re-enable " @@ -69,7 +69,7 @@ "注æ„:å編譯è£ç½®ä¸¦éžåŸ·è¡Œ PCSX2 所必須的,但å編譯è£ç½®å¤§å¹…æå‡éŠæˆ²é€Ÿåº¦ã€‚\n" "若錯誤已經解決,您å¯èƒ½å¿…須手動é‡æ–°å•Ÿç”¨ä¸Šé¢åˆ—出的å編譯è£ç½®ã€‚" -#: pcsx2/gui/AppMain.cpp:539 +#: pcsx2/gui/AppMain.cpp:148 msgid "" "PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* " "obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't " @@ -78,7 +78,7 @@ "PCSX2 éœ€è¦ PS2 BIOS æ‰èƒ½é‹è¡ŒéŠæˆ²ã€‚出於法律上的原因,您「必須ã€å¾žæ‚¨è‡ªå·±çš„ PS2 " "真實éŠæˆ²ä¸»æ©Ÿç²å– BIOS(借的 PS2 ä¸ç®—)。進一步的說明請洽 FAQ 和指å—。" -#: pcsx2/gui/AppMain.cpp:619 +#: pcsx2/gui/AppMain.cpp:674 msgid "" "'Ignore' to continue waiting for the thread to respond.\n" "'Cancel' to attempt to cancel the thread.\n" @@ -102,7 +102,36 @@ "若您在這å°é›»è…¦ä¸Šæ²’有更高的權é™ï¼Œå‰‡éœ€è¦åˆ‡æ›è‡³ã€æˆ‘的文件】模å¼ï¼ˆæŒ‰ä¸‹æ–¹çš„按" "鈕)。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:181 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:66 +msgid "" +"Please note that the resulting file may not actually contain all saves, " +"depending on how many are in the source memory card." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:68 +msgid "" +"WARNING: Converting a memory card may take a while! Please do not close the " +"emulator during the conversion process, even if the emulator is no longer " +"responding to input." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "Convert this memory card to a standard 8 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "Convert this memory card to a 16 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "Convert this memory card to a 32 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "Convert this memory card to a 64 MB Memory Card .ps2 file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:197 msgid "" "NTFS compression can be changed manually at any time by using file " "properties from Windows Explorer." @@ -177,6 +206,14 @@ "讀å–å³æ™‚存檔之後,é€éŽå¼·è¡Œè®“éŠæˆ²é‡æ–°ç´¢å¼•è¨˜æ†¶å¡çš„內容,é¿å…記憶å¡æ壞。\n" "å¯èƒ½ç„¡æ³•å’Œæ‰€æœ‰éŠæˆ²éƒ½ç›¸å®¹ï¼ˆå·²çŸ¥ã€Œå‰ä»–英雄ã€ä¸ç›¸å®¹ï¼‰ã€‚" +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:45 +msgid "" +"(Folder type only) Re-index memory card content every time the running " +"software changes. This prevents the memory card from running out of space " +"for saves." +msgstr "" +"(類型é™è³‡æ–™å¤¾ï¼‰æ¯æ¬¡æ›´æ›éŠæˆ²é‡æ–°ç´¢å¼•è¨˜æ†¶å¡çš„內容,防止出ç¾è¨˜æ†¶å¡å®¹é‡ä¸è¶³ã€‚" + #: pcsx2/gui/Dialogs/StuckThreadDialog.cpp:33 #, c-format msgid "" @@ -243,7 +280,7 @@ "é‡ç½®ç•¶å‰çš„ PS2 虛擬機狀態;\n" "所有當å‰çš„éŠæˆ²é€²å±•å°‡æœƒä¸Ÿå¤±ã€‚您確定嗎?" -#: pcsx2/gui/MainMenuClicks.cpp:107 +#: pcsx2/gui/MainMenuClicks.cpp:115 #, c-format msgid "" "This command clears %s settings and allows you to re-run the First-Time " @@ -262,7 +299,7 @@ "\n" "(注æ„:å„個æ’件自身的設定ä¸å—影響)" -#: pcsx2/gui/MemoryCardFile.cpp:80 +#: pcsx2/gui/MemoryCardFile.cpp:84 pcsx2/gui/MemoryCardFolder.h:522 #, c-format msgid "" "The PS2-slot %d has been automatically disabled. You can correct the " @@ -273,7 +310,12 @@ "您å¯ä»¥åœ¨ä»»ä½•æ™‚候,é€éŽã€ŒPCSX2 主é¸å–® => 設定 => 記憶å¡ã€ç³¾æ­£é€™ä¸€å•é¡Œä¸¦é‡æ–°å•Ÿ" "用記憶å¡ã€‚" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:142 +#: pcsx2/gui/MemoryCardFolder.h:527 +#, c-format +msgid "(FolderMcd) Memory Card is full, could not add: %s" +msgstr "" + +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:138 msgid "" "Please select a valid BIOS. If you are unable to make a valid selection " "then press Cancel to close the Configuration panel." @@ -281,11 +323,11 @@ "è«‹é¸æ“‡ä¸€å€‹æœ‰æ•ˆçš„ BIOS。\n" "若您無法作出有效的é¸æ“‡ï¼Œé‚£å°±æŒ‰ã€å–消】關閉設定視窗。" -#: pcsx2/gui/Panels/CpuPanel.cpp:111 +#: pcsx2/gui/Panels/CpuPanel.cpp:112 msgid "Notice: Most games are fine with the default options. " msgstr "注æ„:大多數éŠæˆ²åªéœ€ä½¿ç”¨é è¨­è¨­å®šå³å¯ã€‚" -#: pcsx2/gui/Panels/CpuPanel.cpp:177 +#: pcsx2/gui/Panels/CpuPanel.cpp:179 msgid "Notice: Most games are fine with the default options." msgstr "注æ„:大多數éŠæˆ²åªéœ€ä½¿ç”¨é è¨­è¨­å®šå³å¯ã€‚" @@ -401,39 +443,32 @@ " * 變形金剛" #: pcsx2/gui/Panels/GameFixesPanel.cpp:116 -#, fuzzy msgid "" "It's better to enable 'Automatic game fixes' at the main menu instead, and " "leave this page empty. ('Automatic' means: selectively use specific tested " -"fixes for specific games)" +"fixes for specific games). Manual game fixes will NOT increase your " +"performance. In fact they may decrease it." msgstr "" "因為é è¨­å‹¾é¸ã€Ž 主é¸å–® -> 檔案 -> 自動使用éŠæˆ²ä¿®æ­£ ã€ï¼Œåœ¨é‹è¡Œç›¸æ‡‰çš„éŠæˆ²æ™‚會自" -"動套用相應的éŠæˆ²ä¿®æ­£ï¼Œ\n" -"所以ä¸æŽ¨è–¦æ‰‹å‹•è¨­å®šéŠæˆ²ä¿®æ­£ã€‚\n" +"動套用相應的éŠæˆ²ä¿®æ­£ï¼Œæ‰€ä»¥ä¸æŽ¨è–¦æ‰‹å‹•è¨­å®šéŠæˆ²ä¿®æ­£ã€‚手動設定éŠæˆ²ä¿®æ­£ä¸æœƒæ高éŠ" +"戲速度,實際上å¯èƒ½æœƒé™ä½ŽéŠæˆ²é€Ÿåº¦ã€‚\n" "\n" -"éŠæˆ²ä¿®æ­£èƒ½å¤ ä¿®å¾©åœ¨ä¸€äº›éŠæˆ²è£¡ä¸æ­£ç¢ºçš„模擬。但會引起其他éŠæˆ²å‡ºç¾ç›¸å®¹æ€§æˆ–效能å•" -"題。\n" "如果是手動設定éŠæˆ²ä¿®æ­£ï¼Œè®Šæ›´æ‰€çŽ©çš„éŠæˆ²å¾Œï¼Œæ‚¨éœ€è¦æ‰‹å‹•é—œé–‰å·²å•Ÿç”¨çš„éŠæˆ²ä¿®æ­£ã€æˆ–" "乾脆關閉手動設定éŠæˆ²ä¿®æ­£ã€‚" #: pcsx2/gui/Panels/GameFixesPanel.cpp:120 -#, fuzzy msgid "" "Gamefixes can work around wrong emulation in some titles. \n" "They may also cause compatibility or performance issues.\n" "\n" "The safest way is to make sure that all game fixes are completely disabled." msgstr "" -"因為é è¨­å‹¾é¸ã€Ž 主é¸å–® -> 檔案 -> 自動使用éŠæˆ²ä¿®æ­£ ã€ï¼Œåœ¨é‹è¡Œç›¸æ‡‰çš„éŠæˆ²æ™‚會自" -"動套用相應的éŠæˆ²ä¿®æ­£ï¼Œ\n" -"所以ä¸æŽ¨è–¦æ‰‹å‹•è¨­å®šéŠæˆ²ä¿®æ­£ã€‚\n" +"éŠæˆ²ä¿®æ­£èƒ½å¤ ä¿®å¾©åœ¨ä¸€äº›éŠæˆ²è£¡ä¸æ­£ç¢ºçš„模擬。\n" +"但會引起其他éŠæˆ²å‡ºç¾ç›¸å®¹æ€§æˆ–效能å•é¡Œã€‚\n" "\n" -"éŠæˆ²ä¿®æ­£èƒ½å¤ ä¿®å¾©åœ¨ä¸€äº›éŠæˆ²è£¡ä¸æ­£ç¢ºçš„模擬。但會引起其他éŠæˆ²å‡ºç¾ç›¸å®¹æ€§æˆ–效能å•" -"題。\n" -"如果是手動設定éŠæˆ²ä¿®æ­£ï¼Œè®Šæ›´æ‰€çŽ©çš„éŠæˆ²å¾Œï¼Œæ‚¨éœ€è¦æ‰‹å‹•é—œé–‰å·²å•Ÿç”¨çš„éŠæˆ²ä¿®æ­£ã€æˆ–" -"乾脆關閉手動設定éŠæˆ²ä¿®æ­£ã€‚" +"最安全的狀態就是確ä¿å®Œå…¨åœç”¨æ‰€æœ‰éŠæˆ²ä¿®æ­£ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:745 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:686 #, c-format msgid "" "You are about to delete the formatted memory card '%s'. All data on this " @@ -442,12 +477,12 @@ "您å³å°‡åˆªé™¤å·²æ ¼å¼åŒ–çš„è¨˜æ†¶å¡ %s。\n" "該記憶å¡çš„全部資料將會丟失ï¼æ‚¨çœŸçš„確定嗎?" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:781 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:725 msgid "" "Failed: Duplicate is only allowed to an empty PS2-Port or to the file system." msgstr "失敗:僅å…許建立副本至空的記憶å¡æ’å£æˆ–檔案系統。" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:823 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:767 #, c-format msgid "Failed: Destination memory card '%s' is in use." msgstr "å¤±æ•—ï¼šç›®æ¨™è¨˜æ†¶å¡ %s 使用中。" @@ -526,39 +561,55 @@ "若由於æ’件丟失或 %s 未能完整安è£ï¼Œä»¤æ‚¨ç„¡æ³•ä½œå‡ºæœ‰æ•ˆçš„é¸æ“‡ï¼Œ\n" "那就按ã€å–消】關閉設定視窗。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:27 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:29 +#, fuzzy msgid "" -"1 - Default cyclerate. This closely matches the actual speed of a real PS2 " -"EmotionEngine." +"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " +"cause stuttering audio on many FMVs." msgstr "" -"1 - é è¨­å€¼ã€‚\n" -"緊密地匹é…正港 PS2 CPU 的實際速度。" +"3 - å°‡ EE cyclerate 減少大約 50%。\n" +"é©åº¦çš„速度æå‡ï¼›\n" +"許多éŠæˆ²å‹•ç•«çš„è²éŸ³çµçµå·´å·´ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:31 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:34 +#, fuzzy msgid "" -"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " +"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games " "with high compatibility." msgstr "" "2 - å°‡ EE cyclerate 減少大約 33%。\n" "å°æ–¼å¤§å¤šæ•¸éŠæˆ²æœ‰æº«å’Œçš„速度æå‡ï¼›\n" "相容性高。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:35 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:39 +#, fuzzy msgid "" -"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* " -"cause stuttering audio on many FMVs." +"0 - Default cyclerate. This closely matches the actual speed of a real PS2 " +"EmotionEngine." +msgstr "" +"1 - é è¨­å€¼ã€‚\n" +"緊密地匹é…正港 PS2 CPU 的實際速度。" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:44 +msgid "" +"1 - Increases the EE's cyclerate by about 33%. Increases hardware " +"requirements, may increase in-game FPS." +msgstr "" + +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:49 +msgid "" +"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware " +"requirements, may noticeably increase in-game FPS.\n" +"This setting can cause games to FAIL TO BOOT." msgstr "" -"3 - å°‡ EE cyclerate 減少大約 50%。\n" -"é©åº¦çš„速度æå‡ï¼›\n" -"許多éŠæˆ²å‹•ç•«çš„è²éŸ³çµçµå·´å·´ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:50 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:65 msgid "0 - Disables VU Cycle Stealing. Most compatible setting!" msgstr "" "0 - åœç”¨ VU Cycle Stealing。\n" "相容性最佳ï¼" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:54 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:70 msgid "" "1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most " "games." @@ -567,7 +618,7 @@ "相容性é™ä½Žï¼›\n" "å°æ–¼å¤§å¤šæ•¸éŠæˆ²èƒ½å¤ æå‡ä¸€äº›é€Ÿåº¦ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:58 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:75 msgid "" "2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant " "speedups in some games." @@ -576,7 +627,7 @@ "相容性更低;\n" "å°æ–¼ä¸€äº›éŠæˆ²æœ‰å·¨å¤§çš„速度æå‡ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:63 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:81 msgid "" "3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause " "flickering visuals or slowdown in most games." @@ -585,7 +636,7 @@ "實用性有é™ï¼Œå› ç‚ºæœƒå°Žè‡´å¤§å¤šæ•¸éŠæˆ²\n" "ç•«é¢é–ƒçˆæˆ–速度變慢。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:88 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:106 msgid "" "Speedhacks usually improve emulation speed, but can cause glitches, broken " "audio, and false FPS readings. When having emulation problems, disable this " @@ -595,16 +646,20 @@ "顯示。\n" "當éŠæˆ²å‡ºç¾å•é¡Œæ™‚,首先åœç”¨é€Ÿåº¦é§­å®¢ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:135 +#, fuzzy msgid "" -"Setting higher values on this slider effectively reduces the clock speed of " +"Setting lower values on this slider effectively reduces the clock speed of " "the EmotionEngine's R5900 core cpu, and typically brings big speedups to " -"games that fail to utilize the full potential of the real PS2 hardware." +"games that fail to utilize the full potential of the real PS2 hardware. " +"Conversely, higher values effectively increase the clock speed which may " +"bring about an increase in in-game FPS while also making games more " +"demanding and possibly causing glitches." msgstr "" "數值愈高,就愈能有效é™ä½Ž EE çš„ CPU 核心 R5900 的時脈。\n" "å°æ–¼é‚£äº›ç„¡æ³•åˆ©ç”¨çœŸå¯¦ PS2 硬體全部潛能的éŠæˆ²ï¼Œèƒ½å¤ å¤§å¹…æå‡éŠæˆ²é€Ÿåº¦ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:136 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:152 msgid "" "This slider controls the amount of cycles the VU unit steals from the " "EmotionEngine. Higher values increase the number of cycles stolen from the " @@ -613,7 +668,7 @@ "滑桿控制著 VU 從 EE å·ç«Šçš„週期的數目。\n" "數值愈高,éŠæˆ²åŸ·è¡Œçš„æ¯ä¸€å€‹ VU 微程å¼å¾ž EE å·çš„就愈多。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:153 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:169 msgid "" "Updates Status Flags only on blocks which will read them, instead of all the " "time. This is safe most of the time, and Super VU does something similar by " @@ -622,7 +677,7 @@ "僅å°è®€å–狀態旗標的塊,更新狀態旗標,å–代一直更新狀態旗標。\n" "大部分時間是安全的,Super VU é è¨­åšé¡žä¼¼çš„事情。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:156 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:172 msgid "" "Runs VU1 on its own thread (microVU1-only). Generally a speedup on CPUs with " "3 or more cores. This is safe for most games, but a few games are " @@ -633,7 +688,7 @@ "å°æ–¼å¤§å¤šæ•¸éŠæˆ²æ˜¯å®‰å…¨çš„。但是少數éŠæˆ²ä¸ç›¸å®¹å¯èƒ½æœƒéŠæˆ²åœæ­¢å›žæ‡‰ã€‚\n" "å°é¡¯ç¤ºå¡è¦æ±‚高的éŠæˆ²ï¼Œå¯èƒ½æœƒé™ä½ŽéŠæˆ²é€Ÿåº¦ï¼ˆå°¤å…¶åœ¨é›™æ ¸å¿ƒ CPU 上)。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:174 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:190 msgid "" "This hack works best for games that use the INTC Status register to wait for " "vsyncs, which includes primarily non-3D RPG titles. Games that do not use " @@ -643,7 +698,7 @@ "主è¦åŒ…æ‹¬éž 3D çš„ RPG éŠæˆ²ã€‚\n" "ä¸ä½¿ç”¨æ­¤åž‚ç›´åŒæ­¥æ–¹å¼çš„éŠæˆ²ï¼Œå°‡æœƒæœ‰å°‘é‡æˆ–沒有速度æå‡ã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:177 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:193 msgid "" "Primarily targetting the EE idle loop at address 0x81FC0 in the kernel, this " "hack attempts to detect loops whose bodies are guaranteed to result in the " @@ -658,7 +713,7 @@ "這樣的循環é‡è¤‡ä¸€æ¬¡ä¹‹å¾Œï¼Œå–決於哪個先到:\n" "我們å‰é€²åˆ°ä¸‹æ¬¡äº‹ä»¶æˆ–處ç†å™¨æ™‚間片段的çµæŸã€‚" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:196 msgid "" "Check HDLoader compatibility lists for known games that have issues with " "this. (Often marked as needing 'mode 1' or 'slow DVD'" @@ -666,13 +721,13 @@ "查閱 HDLoader 相容性列表,以確定已知使用這個é¸é …會出ç¾å•é¡Œçš„éŠæˆ²ã€‚\n" "é€šå¸¸æ˜¯æœ‰æ³¨æ˜Žéœ€è¦ mode 1ï¼ˆæ¨¡å¼ 1)或 slow DVD(慢速 DVD)的éŠæˆ²ã€‚" -#: pcsx2/gui/Panels/VideoPanel.cpp:37 +#: pcsx2/gui/Panels/VideoPanel.cpp:35 msgid "" "Note that when Framelimiting is disabled, Turbo and SlowMotion modes will " "not be available either." msgstr "注æ„:當畫框é™åˆ¶åœç”¨æ™‚,渦輪加速和慢動作無法使用。" -#: pcsx2/gui/Panels/VideoPanel.cpp:225 +#: pcsx2/gui/Panels/VideoPanel.cpp:216 msgid "" "Notice: Due to PS2 hardware design, precise frame skipping is impossible. " "Enabling it will cause severe graphical errors in some games." @@ -681,7 +736,7 @@ "由於 PS2 的硬體設計,精確的跳框是ä¸å¯èƒ½çš„。\n" "啟用跳框將導致一些éŠæˆ²å‡ºç¾åš´é‡çš„圖形錯誤。" -#: pcsx2/gui/Panels/VideoPanel.cpp:302 +#: pcsx2/gui/Panels/VideoPanel.cpp:293 msgid "" "Enable this if you think MTGS thread sync is causing crashes or graphical " "errors." @@ -689,7 +744,7 @@ "啟用這個é¸é …,若您èªç‚ºå¤šåŸ·è¡Œç·’圖形模å¼åŸ·è¡Œç·’çš„åŒæ­¥æ­£åœ¨å°Žè‡´æ¨¡æ“¬å™¨ç•¶æŽ‰æˆ–圖形錯" "誤。" -#: pcsx2/gui/Panels/VideoPanel.cpp:305 +#: pcsx2/gui/Panels/VideoPanel.cpp:296 msgid "" "Removes any benchmark noise caused by the MTGS thread or GPU overhead. This " "option is best used in conjunction with savestates: save a state at an ideal " @@ -705,7 +760,7 @@ "警告:這個é¸é …在éŠæˆ²é‹è¡Œæ™‚啟用å³å¯ç”Ÿæ•ˆï¼Œä½†ç„¡æ³•åœ¨éŠæˆ²é‹è¡Œæ™‚åœç”¨ï¼ˆåœ–åƒè®Šå¾—垃" "圾)。" -#: pcsx2/vtlb.cpp:832 +#: pcsx2/vtlb.cpp:826 msgid "" "Your system is too low on virtual resources for PCSX2 to run. This can be " "caused by having a small or disabled swapfile, or by other programs that are " diff -Nru pcsx2-1.3.1+dfsg/locales/zh_TW/pcsx2_Main.po pcsx2-1.4.0/locales/zh_TW/pcsx2_Main.po --- pcsx2-1.3.1+dfsg/locales/zh_TW/pcsx2_Main.po 2014-12-23 18:51:03.000000000 +0000 +++ pcsx2-1.4.0/locales/zh_TW/pcsx2_Main.po 2016-01-05 17:28:08.000000000 +0000 @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: PCSX2 1.1.0 Rev 5863\n" +"Project-Id-Version: PCSX2 1.3.1 1201\n" "Report-Msgid-Bugs-To: https://github.com/PCSX2/pcsx2/issues\n" -"POT-Creation-Date: 2014-12-23 19:50+0100\n" -"PO-Revision-Date: 2014-03-04 10:56+0800\n" +"POT-Creation-Date: 2015-12-22 16:57+0100\n" +"PO-Revision-Date: 2015-10-05 11:58+0800\n" "Last-Translator: 呆丸北拜\n" "Language-Team: pcsx2fan\n" "Language: \n" @@ -18,15 +18,15 @@ "X-Poedit-SearchPath-0: pcsx2\n" "X-Poedit-SearchPath-1: common\n" -#: common/include/Utilities/Exceptions.h:190 +#: common/include/Utilities/Exceptions.h:202 msgid "No reason given." msgstr "未給出原因。" -#: common/include/Utilities/Exceptions.h:229 +#: common/include/Utilities/Exceptions.h:241 msgid "Parse error" msgstr "解æžéŒ¯èª¤" -#: common/include/Utilities/Exceptions.h:253 +#: common/include/Utilities/Exceptions.h:265 msgid "Your machine's hardware is incapable of running PCSX2. Sorry dood." msgstr "è€å…„,ä¸å¥½æ„æ€ã€‚您電腦的硬體沒有能力é‹è¡Œ PCSX2。" @@ -87,7 +87,7 @@ msgid "Includes idle event processing and some other uncommon event usages." msgstr "包å«é–’置的事件處ç†å’Œä¸€äº›å…¶ä»–ä¸å°‹å¸¸çš„事件使用。" -#: pcsx2/CDVD/InputIsoFile.cpp:238 +#: pcsx2/CDVD/InputIsoFile.cpp:252 msgid "Unrecognized ISO image file format" msgstr "無法辨識的 ISO 映åƒæª”æ ¼å¼ã€‚" @@ -104,18 +104,18 @@ "那麼這個錯誤å¯èƒ½ç”±æœªæ”¯æ´çš„光碟映åƒæª”類型引起,\n" "或者由功能 PCSX2 光碟映åƒæª”支æ´ï¼Œå®ƒçš„程å¼éŒ¯èª¤æ‰€å¼•èµ·ã€‚" -#: pcsx2/MTGS.cpp:871 +#: pcsx2/MTGS.cpp:859 msgid "" "The MTGS thread has become unresponsive while waiting for the GS plugin to " "open." msgstr "當等候圖形æ’件開啟時,多執行緒圖形模å¼çš„執行緒åœæ­¢å›žæ‡‰ã€‚" -#: pcsx2/PluginManager.cpp:716 +#: pcsx2/PluginManager.cpp:725 msgid "" "The savestate cannot be loaded, as it appears to be corrupt or incomplete." msgstr "無法讀å–å³æ™‚存檔,檔案似乎æ壞或ä¸å®Œæ•´ã€‚" -#: pcsx2/PluginManager.cpp:726 +#: pcsx2/PluginManager.cpp:735 #, c-format msgid "" "%s plugin failed to open. Your computer may have insufficient resources, or " @@ -124,42 +124,42 @@ "é–‹å•Ÿã€%s】æ’件失敗。您的電腦å¯èƒ½æ²’有足夠的資æºï¼Œ\n" "或是有ä¸ç›¸å®¹çš„硬體或驅動程å¼ã€‚" -#: pcsx2/PluginManager.cpp:733 +#: pcsx2/PluginManager.cpp:742 #, c-format msgid "" "%s plugin failed to initialize. Your system may have insufficient memory or " "resources needed." msgstr "åˆå§‹åŒ–ã€%s】æ’件失敗。您的系統å¯èƒ½æ²’有足夠的記憶體或資æºã€‚" -#: pcsx2/PluginManager.cpp:839 +#: pcsx2/PluginManager.cpp:848 #, c-format msgid "The configured %s plugin file was not found" msgstr "未找到所é¸ã€%s】æ’件的檔案" -#: pcsx2/PluginManager.cpp:843 +#: pcsx2/PluginManager.cpp:852 #, c-format msgid "The configured %s plugin file is not a valid dynamic library" msgstr "所é¸ã€%s】æ’件的檔案ä¸æ˜¯æœ‰æ•ˆçš„動態連çµå‡½å¼åº«" -#: pcsx2/PluginManager.cpp:865 +#: pcsx2/PluginManager.cpp:869 #, c-format msgid "" "The configured %s plugin is not a PCSX2 plugin, or is for an older " "unsupported version of PCSX2." msgstr "所é¸æ“‡çš„ %s æ’件ä¸æ˜¯ PCSX2 çš„æ’件,或者是ä¸å†æ”¯æ´çš„舊版 PCSX2 çš„æ’件。" -#: pcsx2/PluginManager.cpp:890 +#: pcsx2/PluginManager.cpp:902 msgid "" "The plugin reports that your hardware or software/drivers are not supported." msgstr "æ’件報告ä¸æ”¯æ´æ‚¨çš„硬體或軟體 / 驅動程å¼ã€‚" -#: pcsx2/PluginManager.cpp:911 +#: pcsx2/PluginManager.cpp:923 msgid "" "Configured plugin is not a PCSX2 plugin, or is for an older unsupported " "version of PCSX2." msgstr "所é¸æ“‡çš„æ’件ä¸æ˜¯ PCSX2 çš„æ’件,或者是ä¸å†æ”¯æ´çš„舊版 PCSX2 çš„æ’件。" -#: pcsx2/PluginManager.cpp:937 +#: pcsx2/PluginManager.cpp:949 #, c-format msgid "" "Configured %s plugin is not a valid PCSX2 plugin, or is for an older " @@ -167,11 +167,11 @@ msgstr "" "所é¸æ“‡çš„ %s æ’件ä¸æ˜¯æœ‰æ•ˆçš„ PCSX2 æ’件,或者是ä¸å†æ”¯æ´çš„舊版 PCSX2 çš„æ’件。" -#: pcsx2/PluginManager.cpp:1366 +#: pcsx2/PluginManager.cpp:1378 msgid "Internal Memorycard Plugin failed to initialize." msgstr "åˆå§‹åŒ–內部記憶å¡æ’件失敗。" -#: pcsx2/PluginManager.cpp:1763 +#: pcsx2/PluginManager.cpp:1775 msgid "Unloaded Plugin" msgstr "未載入的æ’件" @@ -316,41 +316,41 @@ msgid "Detailed logging of CDVD hardware." msgstr "CDVD 硬體的詳細日誌紀錄。" -#: pcsx2/System.h:221 pcsx2/System.h:222 pcsx2/System.h:223 +#: pcsx2/System.h:223 pcsx2/System.h:224 pcsx2/System.h:225 msgid "PCSX2 Message" msgstr "PCSX2 訊æ¯" -#: pcsx2/ZipTools/thread_gzip.cpp:82 +#: pcsx2/ZipTools/thread_gzip.cpp:85 msgid "" "The savestate was not properly saved. The temporary file was created " "successfully but could not be moved to its final resting place." msgstr "å³æ™‚存檔未能正確地儲存。æˆåŠŸå»ºç«‹æš«å­˜æª”,但是無法將其移至目的地。" -#: pcsx2/gui/AppConfig.cpp:909 +#: pcsx2/gui/AppConfig.cpp:969 msgid "Safest" msgstr "最安全" -#: pcsx2/gui/AppConfig.cpp:910 +#: pcsx2/gui/AppConfig.cpp:970 msgid "Safe (faster)" msgstr "安全(速度更快)" -#: pcsx2/gui/AppConfig.cpp:911 +#: pcsx2/gui/AppConfig.cpp:971 msgid "Balanced" msgstr "平衡" -#: pcsx2/gui/AppConfig.cpp:912 +#: pcsx2/gui/AppConfig.cpp:972 msgid "Aggressive" msgstr "激進" -#: pcsx2/gui/AppConfig.cpp:913 +#: pcsx2/gui/AppConfig.cpp:973 msgid "Aggressive plus" msgstr "更加激進" -#: pcsx2/gui/AppConfig.cpp:914 +#: pcsx2/gui/AppConfig.cpp:974 msgid "Mostly Harmful" msgstr "基本上有害" -#: pcsx2/gui/AppConfig.cpp:1074 pcsx2/gui/AppConfig.cpp:1080 +#: pcsx2/gui/AppConfig.cpp:1134 pcsx2/gui/AppConfig.cpp:1140 msgid "Failed to overwrite existing settings file; permission was denied." msgstr "覆寫ç¾å­˜çš„設定檔失敗;沒有權é™ã€‚" @@ -358,97 +358,101 @@ msgid "Loading PS2 system plugins..." msgstr "載入 PS2 系統æ’件..." -#: pcsx2/gui/AppInit.cpp:49 -#, fuzzy +#: pcsx2/gui/AppInit.cpp:50 msgid "" "SSE2 extensions are not available. PCSX2 requires a cpu that supports the " "SSE2 instruction set." -msgstr "SSE ä¸å¯ç”¨ã€‚PCSX2 è¦æ±‚ CPU æ”¯æ´ SSE。" +msgstr "SSE2 ä¸å¯ç”¨ã€‚PCSX2 è¦æ±‚ CPU æ”¯æ´ SSE2。" -#: pcsx2/gui/AppInit.cpp:138 +#: pcsx2/gui/AppInit.cpp:139 msgid "PCSX2 Recompiler Error(s)" msgstr "PCSX2 å編譯錯誤" -#: pcsx2/gui/AppInit.cpp:208 +#: pcsx2/gui/AppInit.cpp:218 msgid "All options are for the current session only and will not be saved.\n" msgstr "全部é¸é …僅用於當å‰çš„作業並且ä¸æœƒè¢«å„²å­˜ã€‚\n" -#: pcsx2/gui/AppInit.cpp:218 pcsx2/gui/AppMain.cpp:305 +#: pcsx2/gui/AppInit.cpp:228 pcsx2/gui/AppMain.cpp:358 msgid "IsoFile" msgstr "ISO 檔案" -#: pcsx2/gui/AppInit.cpp:219 +#: pcsx2/gui/AppInit.cpp:229 msgid "displays this list of command line options" msgstr "顯示此命令列é¸é …的列表" -#: pcsx2/gui/AppInit.cpp:220 +#: pcsx2/gui/AppInit.cpp:230 msgid "forces the program log/console to be visible" msgstr "強制程å¼æ—¥èªŒ / 主控å°å¯è¦‹" -#: pcsx2/gui/AppInit.cpp:221 +#: pcsx2/gui/AppInit.cpp:231 msgid "use fullscreen GS mode" msgstr "使用全螢幕模å¼" -#: pcsx2/gui/AppInit.cpp:222 +#: pcsx2/gui/AppInit.cpp:232 msgid "use windowed GS mode" msgstr "使用視窗模å¼" -#: pcsx2/gui/AppInit.cpp:224 +#: pcsx2/gui/AppInit.cpp:234 msgid "disables display of the gui while running games" msgstr "é‹è¡ŒéŠæˆ²æ™‚,ä¸é¡¯ç¤ºæ¨¡æ“¬å™¨ä»‹é¢" -#: pcsx2/gui/AppInit.cpp:225 +#: pcsx2/gui/AppInit.cpp:235 +msgid "when nogui - prompt before exiting on suspend" +msgstr "" + +#: pcsx2/gui/AppInit.cpp:237 msgid "executes an ELF image" msgstr "執行 ELF 映åƒ" -#: pcsx2/gui/AppInit.cpp:226 -msgid "boots an empty dvd tray; use to enter the PS2 system menu" +#: pcsx2/gui/AppInit.cpp:238 +#, fuzzy +msgid "boots an empty DVD tray; use to enter the PS2 system menu" msgstr "從空的 dvd 托盤啟動;用於進入 PS2 系統é¸å–®" -#: pcsx2/gui/AppInit.cpp:227 +#: pcsx2/gui/AppInit.cpp:239 msgid "boots from the CDVD plugin (overrides IsoFile parameter)" msgstr "從光碟æ’件啟動(覆寫ã€ISO 檔案】åƒæ•¸ï¼‰" -#: pcsx2/gui/AppInit.cpp:229 +#: pcsx2/gui/AppInit.cpp:241 msgid "disables all speedhacks" msgstr "åœç”¨å…¨éƒ¨ speedhacks" -#: pcsx2/gui/AppInit.cpp:230 +#: pcsx2/gui/AppInit.cpp:242 msgid "use the specified comma or pipe-delimited list of gamefixes." msgstr "使用指定的éŠæˆ²ä¿®æ­£åˆ—表以逗號或豎線分隔。" -#: pcsx2/gui/AppInit.cpp:231 +#: pcsx2/gui/AppInit.cpp:243 msgid "disables fast booting" msgstr "åœç”¨å¿«é€Ÿå•Ÿå‹•" -#: pcsx2/gui/AppInit.cpp:233 +#: pcsx2/gui/AppInit.cpp:245 msgid "changes the configuration file path" msgstr "變更設定檔的路徑" -#: pcsx2/gui/AppInit.cpp:234 +#: pcsx2/gui/AppInit.cpp:246 msgid "specifies the PCSX2 configuration file to use" msgstr "指定欲使用的 PCSX2 設定檔" -#: pcsx2/gui/AppInit.cpp:235 +#: pcsx2/gui/AppInit.cpp:247 #, c-format msgid "forces %s to start the First-time Wizard" msgstr "強制 %s 啟動首次執行精éˆ" -#: pcsx2/gui/AppInit.cpp:236 +#: pcsx2/gui/AppInit.cpp:248 msgid "enables portable mode operation (requires admin/root access)" msgstr "å¯æ”œå¼è»Ÿé«”模å¼ï¼ˆéœ€è¦ç®¡ç†å“¡æ¬Šé™ï¼‰" -#: pcsx2/gui/AppInit.cpp:240 +#: pcsx2/gui/AppInit.cpp:252 #, c-format msgid "specify the file to use as the %s plugin" msgstr "指定欲使用的檔案作為 %s æ’件" -#: pcsx2/gui/AppInit.cpp:288 +#: pcsx2/gui/AppInit.cpp:300 #, c-format msgid "Plugin Override Error - %s" msgstr "æ’件覆寫錯誤 - %s" -#: pcsx2/gui/AppInit.cpp:291 +#: pcsx2/gui/AppInit.cpp:303 #, c-format msgid "" "%s Plugin Override Error! The following file does not exist or is not a " @@ -458,94 +462,94 @@ "%s æ’件覆寫錯誤ï¼ä¸‹åˆ—檔案ä¸å­˜åœ¨æˆ–ä¸æ˜¯æœ‰æ•ˆçš„ %s æ’件:\n" "\n" -#: pcsx2/gui/AppInit.cpp:298 +#: pcsx2/gui/AppInit.cpp:310 #, c-format msgid "Press OK to use the default configured plugin, or Cancel to close %s." msgstr "按ã€ç¢ºå®šã€‘使用é è¨­æ‰€é¸æ“‡çš„æ’件,或按ã€å–消】關閉 %s。" -#: pcsx2/gui/AppInit.cpp:477 +#: pcsx2/gui/AppInit.cpp:515 msgid "PCSX2 Error: Hardware Deficiency" msgstr "PCSX2 錯誤:硬體缺陷" -#: pcsx2/gui/AppInit.cpp:477 pcsx2/gui/AppInit.cpp:489 +#: pcsx2/gui/AppInit.cpp:515 pcsx2/gui/AppInit.cpp:527 #, c-format msgid "Press OK to close %s." msgstr "按ã€ç¢ºå®šã€‘關閉 %s。" -#: pcsx2/gui/AppInit.cpp:490 +#: pcsx2/gui/AppInit.cpp:528 #, c-format msgid "%s Critical Error" msgstr "%s åš´é‡éŒ¯èª¤" -#: pcsx2/gui/AppInit.cpp:660 +#: pcsx2/gui/AppInit.cpp:698 msgid "OK" msgstr "確定" -#: pcsx2/gui/AppInit.cpp:661 +#: pcsx2/gui/AppInit.cpp:699 msgid "&OK" msgstr "確定" -#: pcsx2/gui/AppInit.cpp:662 +#: pcsx2/gui/AppInit.cpp:700 msgid "Cancel" msgstr "å–消" -#: pcsx2/gui/AppInit.cpp:663 +#: pcsx2/gui/AppInit.cpp:701 msgid "&Cancel" msgstr "å–消" -#: pcsx2/gui/AppInit.cpp:664 +#: pcsx2/gui/AppInit.cpp:702 msgid "&Apply" msgstr "套用" -#: pcsx2/gui/AppInit.cpp:665 +#: pcsx2/gui/AppInit.cpp:703 msgid "&Next >" msgstr "下一步 >" -#: pcsx2/gui/AppInit.cpp:666 +#: pcsx2/gui/AppInit.cpp:704 msgid "< &Back" msgstr "< 上一步" -#: pcsx2/gui/AppInit.cpp:667 +#: pcsx2/gui/AppInit.cpp:705 msgid "&Back" msgstr "上一步" -#: pcsx2/gui/AppInit.cpp:668 +#: pcsx2/gui/AppInit.cpp:706 msgid "&Finish" msgstr "完æˆ" -#: pcsx2/gui/AppInit.cpp:669 +#: pcsx2/gui/AppInit.cpp:707 msgid "&Yes" msgstr "是" -#: pcsx2/gui/AppInit.cpp:670 +#: pcsx2/gui/AppInit.cpp:708 msgid "&No" msgstr "å¦" -#: pcsx2/gui/AppInit.cpp:671 +#: pcsx2/gui/AppInit.cpp:709 msgid "Browse" msgstr "ç€è¦½" -#: pcsx2/gui/AppInit.cpp:672 +#: pcsx2/gui/AppInit.cpp:710 msgid "&Save" msgstr "儲存檔案" -#: pcsx2/gui/AppInit.cpp:673 +#: pcsx2/gui/AppInit.cpp:711 msgid "Save &As..." msgstr "å¦å­˜æ–°æª”..." -#: pcsx2/gui/AppInit.cpp:674 +#: pcsx2/gui/AppInit.cpp:712 msgid "&Help" msgstr "說明" -#: pcsx2/gui/AppInit.cpp:675 +#: pcsx2/gui/AppInit.cpp:713 msgid "&Home" msgstr "家" -#: pcsx2/gui/AppInit.cpp:677 +#: pcsx2/gui/AppInit.cpp:715 msgid "Show about dialog" msgstr "顯示關於視窗" -#: pcsx2/gui/AppMain.cpp:93 +#: pcsx2/gui/AppMain.cpp:68 msgid "" "\n" "\n" @@ -555,41 +559,46 @@ "\n" "按ã€ç¢ºå®šã€‘é–‹å•Ÿæ’件設定視窗。" -#: pcsx2/gui/AppMain.cpp:146 pcsx2/gui/AppMain.cpp:160 +#: pcsx2/gui/AppMain.cpp:125 pcsx2/gui/AppMain.cpp:139 msgid "" "Warning! System plugins have not been loaded. PCSX2 may be inoperable." msgstr "警告ï¼æ’件未載入。PCSX2 å¯èƒ½ç„¡æ³•ä½¿ç”¨ã€‚" -#: pcsx2/gui/AppMain.cpp:315 -#, c-format -msgid "%s Commandline Options" -msgstr "%s 命令列é¸é …" - -#: pcsx2/gui/AppMain.cpp:563 +#: pcsx2/gui/AppMain.cpp:173 pcsx2/gui/AppMain.cpp:178 msgid "PS2 BIOS Error" msgstr "PS2 BIOS 錯誤" -#: pcsx2/gui/AppMain.cpp:564 +#: pcsx2/gui/AppMain.cpp:173 msgid "Press Ok to go to the BIOS Configuration Panel." msgstr "按ã€ç¢ºå®šã€‘é–‹å•Ÿ BIOS 設定視窗。" -#: pcsx2/gui/AppMain.cpp:616 +#: pcsx2/gui/AppMain.cpp:196 +#, fuzzy +msgid "Warning! Valid BIOS has not been selected. PCSX2 may be inoperable." +msgstr "警告ï¼æ’件未載入。PCSX2 å¯èƒ½ç„¡æ³•ä½¿ç”¨ã€‚" + +#: pcsx2/gui/AppMain.cpp:370 +#, c-format +msgid "%s Commandline Options" +msgstr "%s 命令列é¸é …" + +#: pcsx2/gui/AppMain.cpp:671 msgid "PCSX2 Unresponsive Thread" msgstr "PCSX2 åœæ­¢å›žæ‡‰çš„執行緒" -#: pcsx2/gui/AppMain.cpp:623 +#: pcsx2/gui/AppMain.cpp:678 msgid "Terminate" msgstr "終止" -#: pcsx2/gui/AppMain.cpp:990 +#: pcsx2/gui/AppMain.cpp:1054 msgid "Executing PS2 Virtual Machine..." msgstr "正在執行 PS2 虛擬機..." -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse for an Iso that is not in your recent history." msgstr "é¸æ“‡ä¸€å€‹ä¸åœ¨æœ€è¿‘æ­·å²è¨˜éŒ„中的éŠæˆ²æª”" -#: pcsx2/gui/AppRes.cpp:72 +#: pcsx2/gui/AppRes.cpp:65 msgid "Browse..." msgstr "ç€è¦½..." @@ -631,188 +640,193 @@ msgid "Cannot apply new settings, one of the settings is invalid." msgstr "無法套用新的設定,其中有無效的設定。" -#: pcsx2/gui/ConsoleLogger.cpp:120 +#: pcsx2/gui/ConsoleLogger.cpp:126 msgid "Save log question" msgstr "儲存日誌的æå•" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Fits a lot of log in a microcosmically small area." msgstr "在åŒç­‰å€åŸŸä¸­é¡¯ç¤ºè¼ƒå¤šæ—¥èªŒ" -#: pcsx2/gui/ConsoleLogger.cpp:417 +#: pcsx2/gui/ConsoleLogger.cpp:439 msgid "Small" msgstr "最å°" -#: pcsx2/gui/ConsoleLogger.cpp:419 +#: pcsx2/gui/ConsoleLogger.cpp:441 msgid "It's what I use (the programmer guy)." msgstr "這是 PCSX2 程å¼è¨­è¨ˆå¸«å€‘使用的字型大å°" -#: pcsx2/gui/ConsoleLogger.cpp:419 pcsx2/gui/Panels/CpuPanel.cpp:38 -msgid "Normal" +#: pcsx2/gui/ConsoleLogger.cpp:441 +msgid "Normal font" msgstr "普通" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Its nice and readable." msgstr "令人心曠神怡而且便於閱讀" -#: pcsx2/gui/ConsoleLogger.cpp:421 +#: pcsx2/gui/ConsoleLogger.cpp:443 msgid "Large" msgstr "較大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "Huge" msgstr "最大" -#: pcsx2/gui/ConsoleLogger.cpp:423 +#: pcsx2/gui/ConsoleLogger.cpp:445 msgid "In case you have a really high res display." msgstr "é©ç”¨æ–¼é«˜èž¢å¹•è§£æžåº¦" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Default soft-tone color scheme." msgstr "é è¨­çš„軟色調é¡è‰²ä¸»é¡Œ" -#: pcsx2/gui/ConsoleLogger.cpp:427 +#: pcsx2/gui/ConsoleLogger.cpp:449 msgid "Light theme" msgstr "明亮背景主題(需é‡å•Ÿ PCSX2)" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "" "Classic black color scheme for people who enjoy having text seared into " "their optic nerves." msgstr "經典的黑色主題,ç»çµ¦å–œæ­¡è®“文字ç¼ç‡’視神經的人。" -#: pcsx2/gui/ConsoleLogger.cpp:428 +#: pcsx2/gui/ConsoleLogger.cpp:450 msgid "Dark theme" msgstr "暗黑背景主題(需é‡å•Ÿ PCSX2)" -#: pcsx2/gui/ConsoleLogger.cpp:431 +#: pcsx2/gui/ConsoleLogger.cpp:453 msgid "Always on Top" msgstr "視窗總在最å‰" -#: pcsx2/gui/ConsoleLogger.cpp:432 +#: pcsx2/gui/ConsoleLogger.cpp:454 msgid "" "When checked the log window will be visible over other foreground windows." msgstr "當勾é¸æ™‚,日誌視窗總是ä¿æŒåœ¨æœ€å‰ç«¯ã€‚" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "&Save..." msgstr "儲存" -#: pcsx2/gui/ConsoleLogger.cpp:434 +#: pcsx2/gui/ConsoleLogger.cpp:456 msgid "Save log contents to file" msgstr "將日誌內容儲存到檔案中" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "C&lear" msgstr "清空" -#: pcsx2/gui/ConsoleLogger.cpp:435 +#: pcsx2/gui/ConsoleLogger.cpp:457 msgid "Clear the log window contents" msgstr "清除日誌視窗中的全部內容" -#: pcsx2/gui/ConsoleLogger.cpp:437 pcsx2/gui/Dialogs/SysConfigDialog.cpp:264 +#: pcsx2/gui/ConsoleLogger.cpp:459 pcsx2/gui/Dialogs/SysConfigDialog.cpp:268 msgid "Appearance" msgstr "å­—åž‹" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "&Close" msgstr "關閉" -#: pcsx2/gui/ConsoleLogger.cpp:439 +#: pcsx2/gui/ConsoleLogger.cpp:461 msgid "Close this log window; contents are preserved" msgstr "關閉日誌視窗(日誌內容ä¿ç•™ï¼‰" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Dev/Verbose" msgstr "開發 / 冗長" -#: pcsx2/gui/ConsoleLogger.cpp:443 +#: pcsx2/gui/ConsoleLogger.cpp:465 msgid "Shows PCSX2 developer logs" msgstr "顯示 PCSX2 開發人員日誌" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "CDVD reads" msgstr "光碟讀å–" -#: pcsx2/gui/ConsoleLogger.cpp:444 +#: pcsx2/gui/ConsoleLogger.cpp:466 msgid "Shows disk read activity" msgstr "顯示光碟讀å–日誌" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enable all" msgstr "啟用全部" -#: pcsx2/gui/ConsoleLogger.cpp:461 +#: pcsx2/gui/ConsoleLogger.cpp:483 msgid "Enables all log source filters." msgstr "啟用全部日誌來æº" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disable all" msgstr "åœç”¨å…¨éƒ¨" -#: pcsx2/gui/ConsoleLogger.cpp:462 +#: pcsx2/gui/ConsoleLogger.cpp:484 msgid "Disables all log source filters." msgstr "åœç”¨å…¨éƒ¨æ—¥èªŒä¾†æº" -#: pcsx2/gui/ConsoleLogger.cpp:464 +#: pcsx2/gui/ConsoleLogger.cpp:485 +msgid "Restore Default" +msgstr "還原æˆé è¨­å€¼" + +#: pcsx2/gui/ConsoleLogger.cpp:485 +#, fuzzy +msgid "Restore default source filters." +msgstr "啟用全部日誌來æº" + +#: pcsx2/gui/ConsoleLogger.cpp:487 msgid "&Log" msgstr "日誌" -#: pcsx2/gui/ConsoleLogger.cpp:465 +#: pcsx2/gui/ConsoleLogger.cpp:488 msgid "&Sources" msgstr "來æº" #: pcsx2/gui/Debugger/DisassemblyDialog.cpp:223 msgid "panel" -msgstr "" +msgstr "視窗" #: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:35 #, c-format msgid "About %s" msgstr "關於 %s" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 -msgid "Betatesting" -msgstr "測試人員" - -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Previous versions" msgstr "早期版本的開發人員" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:55 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:54 msgid "Webmasters" msgstr "網站管ç†å“¡" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Plugin Specialists" msgstr "æ’件作者" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:66 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:63 msgid "Special thanks to" msgstr "特別感è¬" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:82 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:75 msgid "Developers" msgstr "開發人員" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:84 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:77 msgid "Contributors" msgstr "有貢ç»çš„人" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 -msgid "A Playstation 2 Emulator" +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:86 +#, fuzzy +msgid "PlayStation 2 Emulator" msgstr "Playstation 2 模擬器" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:102 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:89 msgid "PCSX2 Official Website and Forums" msgstr "PCSX2 官方網站和官方討論å€" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:106 -#, fuzzy +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:93 msgid "PCSX2 Official Git Repository at GitHub" -msgstr "PCSX2 官方 SVN 檔案庫ä½æ–¼ GitHub" +msgstr "PCSX2 官方 GitHub" -#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:110 +#: pcsx2/gui/Dialogs/AboutBoxDialog.cpp:98 msgid "I've seen enough" msgstr "確定" @@ -820,45 +834,116 @@ msgid "Assertion Failure - " msgstr "程å¼æ–·è¨€å¤±æ•— - " -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:194 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:188 msgid "Saves a snapshot of this settings panel to a PNG file." msgstr "將當å‰è¨­å®šè¦–窗的擷圖儲存為 PNG 圖片" -#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:309 +#: pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp:294 msgid "Save dialog screenshots to..." msgstr "儲存設定視窗的螢幕擷圖" -#: pcsx2/gui/Dialogs/BiosSelectorDialog.cpp:31 -msgid "BIOS Selector" -msgstr "é¸æ“‡ BIOS" - -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:193 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:195 msgid "Do not show this dialog again." msgstr "ä¸è¦å†é¡¯ç¤ºæ­¤å°è©±æ–¹å¡Š" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:199 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 msgid "" "Disables this popup and whatever response you select here will be " "automatically used from now on." msgstr "" "åœç”¨é€™å€‹å½ˆå‡ºåž‹è¦–窗。無論您在這裡é¸æ“‡å“ªç¨®å›žæ‡‰æ–¹å¼ï¼Œå®ƒéƒ½æœƒå¾žä»Šä»¥å¾Œè‡ªå‹•ä½¿ç”¨ã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:201 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:203 msgid "" "The popup will not be shown again. This setting can be undone from the " "settings panels." msgstr "ä¸å†é¡¯ç¤ºæ­¤å½ˆå‡ºåž‹è¦–窗。這項設定å¯ä»¥å¾žè¨­å®šé¢æ¿å¾©åŽŸã€‚" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:247 -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:292 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:249 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:294 msgid "Ignore" msgstr "忽略" -#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:278 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:267 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:276 +msgid "Retry" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:270 +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:273 +msgid "Abort" +msgstr "" + +#: pcsx2/gui/Dialogs/ConfirmationDialogs.cpp:280 msgid "Reset" msgstr "é‡æ–°å•Ÿå‹•éŠæˆ²" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:40 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:36 +msgid "Convert a memory card to a different format" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:47 +#, fuzzy +msgid "Convert" +msgstr "轉æ›" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:53 +#, fuzzy +msgid "Convert: " +msgstr "轉æ›" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:56 +msgid "To: " +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:87 +msgid "8MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:89 +msgid "16MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:91 +msgid "32MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:93 +msgid "64MB File" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +msgid "Convert this memory card to a folder of individual saves." +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:95 +#, fuzzy +msgid "Folder" +msgstr "資料夾" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:122 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:151 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:818 +#, c-format +msgid "Error (%s)" +msgstr "錯誤(%s)" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:123 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +#, fuzzy +msgid "Convert memory card" +msgstr "新增記憶å¡" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:153 +msgid "This target type is not supported!" +msgstr "" + +#: pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp:159 +msgid "Memory Card conversion failed for unknown reasons." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:41 msgid "Create a new memory card" msgstr "建立一個新的記憶å¡" @@ -880,76 +965,92 @@ msgid "Select file name: " msgstr "給記憶å¡å–å: " -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:149 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:876 -#, c-format -msgid "Error (%s)" -msgstr "錯誤(%s)" - -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:150 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:152 #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:164 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:179 msgid "Create memory card" msgstr "新增記憶å¡" #: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:163 +#, fuzzy +msgid "Error: The directory for the memory card could not be created." +msgstr "錯誤:無法新增記憶å¡ã€‚" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:178 msgid "Error: The memory card could not be created." msgstr "錯誤:無法新增記憶å¡ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:177 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:193 msgid "Use NTFS compression when creating this card." msgstr "å°æ–°å¢žçš„記憶å¡å•Ÿç”¨ NTFS 壓縮" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "8 MB [most compatible]" msgstr "8 MBã€ç›¸å®¹æ€§æœ€å¥½ã€‘" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:194 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:210 msgid "" "This is the standard Sony-provisioned size, and is supported by all games " "and BIOS versions." msgstr "標準的 Sony æ供的大å°ï¼Œæ‰€æœ‰éŠæˆ²å’Œ BIOS 版本都支æ´ã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:195 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:211 msgid "" "Always use this option if you want the safest and surest memory card " "behavior." msgstr "如果您想è¦æœ€å®‰å…¨å¯é çš„記憶å¡è¡Œç‚ºï¼Œå°±ä¸€ç›´ä½¿ç”¨é€™å€‹é¸é …。" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 msgid "16 MB" msgstr "16 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:198 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:214 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "" "A typical size for 3rd-party memory cards which should work with most games." msgstr "典型的第三方記憶å¡çš„大å°ï¼Œåœ¨å¤§å¤šæ•¸éŠæˆ²ä¸­æ‡‰è©²èƒ½å¤ æ­£å¸¸å·¥ä½œã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:199 -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:203 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:215 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:219 msgid "16 and 32 MB cards have roughly the same compatibility factor." msgstr "16 MB å’Œ 32 MB 記憶å¡çš„相容性係數大致相åŒã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:202 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:218 msgid "32 MB" msgstr "32 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "64 MB" msgstr "64 MB" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:206 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:222 msgid "" "Low compatibility warning: Yes it's very big, but may not work with many " "games." msgstr "低相容性警告:是的,檔案éžå¸¸å¤§ã€‚但æ怕在許多éŠæˆ²ä¸­ä¸èƒ½æ­£å¸¸å·¥ä½œã€‚" -#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:207 +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:223 msgid "" "Use at your own risk. Erratic memory card behavior is possible (though " "unlikely)." msgstr "使用者自擔風險。å¯èƒ½å‡ºç¾ä¸ç¢ºå®šçš„記憶å¡è¡Œç‚ºï¼ˆå„˜ç®¡å¯èƒ½æ€§ä¸å¤§ï¼‰" +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Folder [experimental]" +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:226 +msgid "Store memory card contents in the host filesystem instead of a file." +msgstr "" + +#: pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp:227 +msgid "" +"Automatically manages memory card contents so that the console only sees " +"files related to the currently running software. Allows you to drag-and-drop " +"files in and out of the memory card with your standard file explorer. This " +"is still experimental, so use at your own risk!" +msgstr "" + #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:47 #, c-format msgid "Select a folder for %s settings" @@ -960,6 +1061,7 @@ msgstr "設定檔的ä½ç½®" #: pcsx2/gui/Dialogs/FirstTimeWizard.cpp:83 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:278 msgid "Language selector" msgstr "é¸æ“‡èªžè¨€" @@ -1013,15 +1115,19 @@ msgid "Auto-eject memory cards when loading savestates" msgstr "讀å–å³æ™‚存檔時,自動退出記憶å¡" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:92 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:44 +msgid "Automatically manage saves based on running game" +msgstr "基於正在é‹è¡Œçš„éŠæˆ²ï¼Œè‡ªå‹•ç®¡ç†éŠæˆ²å­˜æª”" + +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:101 msgid "MemoryCard Manager" msgstr "管ç†è¨˜æ†¶å¡" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:108 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:116 msgid "Drag cards to or from PS2-ports" msgstr "å¯ä»¥ç”¨æ»‘鼠拖曳列表中的記憶å¡ï¼Œå®ŒæˆæŸäº›æ“作。" -#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:109 +#: pcsx2/gui/Dialogs/McdConfigDialog.cpp:117 msgid "" "\n" "Note: Duplicate/Rename/Create/Delete will NOT be reverted with 'Cancel'." @@ -1084,24 +1190,24 @@ msgid "Game Fixes" msgstr "éŠæˆ²ä¿®æ­£" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:237 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:239 #, c-format msgid "Components Selectors - %s" msgstr "æ’件 / BIOS - %s" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:244 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 msgid "Plugins" msgstr "æ’件" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:245 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:247 msgid "BIOS" msgstr "BIOS" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:246 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:248 msgid "Folders" msgstr "資料夾" -#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:257 +#: pcsx2/gui/Dialogs/SysConfigDialog.cpp:261 #, c-format msgid "Appearance/Themes - %s" msgstr "外觀 / 主題 - %s" @@ -1123,47 +1229,51 @@ msgid "Terminate App" msgstr "終止" -#: pcsx2/gui/FrameForGS.cpp:388 +#: pcsx2/gui/FrameForGS.cpp:411 msgid "GS Output is Disabled!" msgstr "ç•«é¢è¼¸å‡ºè¢«åœç”¨ï¼" -#: pcsx2/gui/GlobalCommands.cpp:386 pcsx2/gui/MainFrame.cpp:416 +#: pcsx2/gui/GlobalCommands.cpp:308 +msgid "Exit PCSX2?" +msgstr "" + +#: pcsx2/gui/GlobalCommands.cpp:461 pcsx2/gui/MainFrame.cpp:425 msgid "Save state" msgstr "å³æ™‚存檔" -#: pcsx2/gui/GlobalCommands.cpp:387 +#: pcsx2/gui/GlobalCommands.cpp:462 msgid "Saves the virtual machine state to the current slot." msgstr "將虛擬機狀態儲存到當å‰çš„å³æ™‚存檔æ’槽。" -#: pcsx2/gui/GlobalCommands.cpp:392 pcsx2/gui/MainFrame.cpp:415 +#: pcsx2/gui/GlobalCommands.cpp:467 pcsx2/gui/MainFrame.cpp:424 msgid "Load state" msgstr "å³æ™‚讀檔" -#: pcsx2/gui/GlobalCommands.cpp:393 +#: pcsx2/gui/GlobalCommands.cpp:468 msgid "Loads a virtual machine state from the current slot." msgstr "從當å‰çš„å³æ™‚存檔æ’槽讀å–虛擬機狀態。" -#: pcsx2/gui/GlobalCommands.cpp:398 +#: pcsx2/gui/GlobalCommands.cpp:473 msgid "Load State Backup" msgstr "讀å–狀態備份" -#: pcsx2/gui/GlobalCommands.cpp:399 +#: pcsx2/gui/GlobalCommands.cpp:474 msgid "Loads virtual machine state backup for current slot." msgstr "當å‰çš„å³æ™‚存檔æ’槽讀å–虛擬機狀態備份。" -#: pcsx2/gui/GlobalCommands.cpp:404 +#: pcsx2/gui/GlobalCommands.cpp:479 msgid "Cycle to next slot" msgstr "循環至下一個å³æ™‚存檔æ’槽" -#: pcsx2/gui/GlobalCommands.cpp:405 +#: pcsx2/gui/GlobalCommands.cpp:480 msgid "Cycles the current save slot in +1 fashion!" msgstr "將當å‰çš„å³æ™‚存檔æ’槽以 +1 çš„å¼æ¨£å¾ªç’°ï¼" -#: pcsx2/gui/GlobalCommands.cpp:410 +#: pcsx2/gui/GlobalCommands.cpp:485 msgid "Cycle to prev slot" msgstr "循環至上一個å³æ™‚存檔æ’槽" -#: pcsx2/gui/GlobalCommands.cpp:411 +#: pcsx2/gui/GlobalCommands.cpp:486 msgid "Cycles the current save slot in -1 fashion!" msgstr "將當å‰çš„å³æ™‚存檔æ’槽以 -1 çš„å¼æ¨£å¾ªç’°ï¼" @@ -1178,7 +1288,7 @@ "please, thank you." msgstr "拖曳多個檔案至 %s 視窗是一個錯誤。請一次一個檔案,è¬è¬ã€‚" -#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:342 +#: pcsx2/gui/IsoDropTarget.cpp:87 pcsx2/gui/MainMenuClicks.cpp:350 msgid "Confirm PS2 Reset" msgstr "確èªé‡æ–°å•Ÿå‹• PS2" @@ -1196,373 +1306,373 @@ msgid "You have dropped the following ISO image into %s:" msgstr "您已經拖曳下列 ISO 檔案至 %s:" -#: pcsx2/gui/MainFrame.cpp:36 +#: pcsx2/gui/MainFrame.cpp:39 #, c-format msgid "Slot %d" msgstr "æ’槽 %d" -#: pcsx2/gui/MainFrame.cpp:42 pcsx2/gui/Saveslots.cpp:150 +#: pcsx2/gui/MainFrame.cpp:45 pcsx2/gui/Saveslots.cpp:150 msgid "Backup" msgstr "備份" -#: pcsx2/gui/MainFrame.cpp:324 +#: pcsx2/gui/MainFrame.cpp:327 msgid "Show Console" msgstr "顯示主控å°" -#: pcsx2/gui/MainFrame.cpp:325 +#: pcsx2/gui/MainFrame.cpp:328 msgid "Console to Stdio" msgstr "顯示主控å°è‡³æ¨™æº–輸入輸出" -#: pcsx2/gui/MainFrame.cpp:338 +#: pcsx2/gui/MainFrame.cpp:341 msgid "&System" msgstr "檔案" -#: pcsx2/gui/MainFrame.cpp:339 +#: pcsx2/gui/MainFrame.cpp:342 msgid "CD&VD" msgstr "光碟" -#: pcsx2/gui/MainFrame.cpp:340 +#: pcsx2/gui/MainFrame.cpp:343 msgid "&Config" msgstr "設定" -#: pcsx2/gui/MainFrame.cpp:341 +#: pcsx2/gui/MainFrame.cpp:344 msgid "&Misc" msgstr "其他" -#: pcsx2/gui/MainFrame.cpp:342 +#: pcsx2/gui/MainFrame.cpp:345 msgid "&Debug" msgstr "åµéŒ¯" -#: pcsx2/gui/MainFrame.cpp:401 pcsx2/gui/MainFrame.cpp:403 -#: pcsx2/gui/MainFrame.cpp:409 +#: pcsx2/gui/MainFrame.cpp:410 pcsx2/gui/MainFrame.cpp:412 +#: pcsx2/gui/MainFrame.cpp:418 msgid "Initializing..." msgstr "正在åˆå§‹åŒ–..." -#: pcsx2/gui/MainFrame.cpp:405 +#: pcsx2/gui/MainFrame.cpp:414 msgid "Run ELF..." msgstr "執行 ELF 檔案" -#: pcsx2/gui/MainFrame.cpp:406 +#: pcsx2/gui/MainFrame.cpp:415 msgid "For running raw PS2 binaries directly" msgstr "為了直接執行原始的 PS2 二進ä½æª”案" -#: pcsx2/gui/MainFrame.cpp:418 +#: pcsx2/gui/MainFrame.cpp:427 msgid "Backup before save" msgstr "自動備份å³æ™‚存檔" -#: pcsx2/gui/MainFrame.cpp:423 +#: pcsx2/gui/MainFrame.cpp:432 msgid "Automatic Gamefixes" msgstr "自動使用éŠæˆ²ä¿®æ­£" -#: pcsx2/gui/MainFrame.cpp:424 +#: pcsx2/gui/MainFrame.cpp:433 msgid "Automatically applies needed Gamefixes to known problematic games" msgstr "自動套用所需的éŠæˆ²ä¿®æ­£çµ¦å·²çŸ¥æœ‰å•é¡Œçš„éŠæˆ²" -#: pcsx2/gui/MainFrame.cpp:426 +#: pcsx2/gui/MainFrame.cpp:435 msgid "Enable Cheats" msgstr "啟用作弊" -#: pcsx2/gui/MainFrame.cpp:429 +#: pcsx2/gui/MainFrame.cpp:438 msgid "Enable Widescreen Patches" msgstr "啟用寬螢幕補ä¸" -#: pcsx2/gui/MainFrame.cpp:432 +#: pcsx2/gui/MainFrame.cpp:441 msgid "Enable Host Filesystem" msgstr "啟用主機檔案系統" -#: pcsx2/gui/MainFrame.cpp:437 +#: pcsx2/gui/MainFrame.cpp:446 msgid "Shutdown" msgstr "關閉éŠæˆ²" -#: pcsx2/gui/MainFrame.cpp:438 +#: pcsx2/gui/MainFrame.cpp:447 msgid "Wipes all internal VM states and shuts down plugins." msgstr "清除所有內部虛擬機狀態並關閉æ’件" -#: pcsx2/gui/MainFrame.cpp:440 +#: pcsx2/gui/MainFrame.cpp:449 msgid "Exit" msgstr "離開" -#: pcsx2/gui/MainFrame.cpp:441 +#: pcsx2/gui/MainFrame.cpp:450 #, c-format msgid "Closing %s may be hazardous to your health" msgstr "關閉 %s 或許有害å¥åº·" -#: pcsx2/gui/MainFrame.cpp:448 +#: pcsx2/gui/MainFrame.cpp:457 msgid "Iso Selector" msgstr "é¸æ“‡å…‰ç¢Ÿæ˜ åƒæª”" -#: pcsx2/gui/MainFrame.cpp:449 +#: pcsx2/gui/MainFrame.cpp:458 msgid "Plugin Menu" msgstr "光碟æ’件" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Iso" msgstr "使用光碟映åƒæª”" -#: pcsx2/gui/MainFrame.cpp:452 +#: pcsx2/gui/MainFrame.cpp:461 msgid "Makes the specified ISO image the CDVD source." msgstr "使用指定的光碟映åƒæª”作為éŠæˆ²ä¾†æº" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Plugin" msgstr "使用光碟æ’件" -#: pcsx2/gui/MainFrame.cpp:453 +#: pcsx2/gui/MainFrame.cpp:462 msgid "Uses an external plugin as the CDVD source." msgstr "使用外部的光碟æ’件作為éŠæˆ²ä¾†æº" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "No disc" msgstr "無光碟" -#: pcsx2/gui/MainFrame.cpp:454 +#: pcsx2/gui/MainFrame.cpp:463 msgid "Use this to boot into your virtual PS2's BIOS configuration." msgstr "進入 PS2 çš„ BIOS 設定" -#: pcsx2/gui/MainFrame.cpp:462 +#: pcsx2/gui/MainFrame.cpp:471 msgid "Emulation &Settings" msgstr "模擬器é¸é …" -#: pcsx2/gui/MainFrame.cpp:463 +#: pcsx2/gui/MainFrame.cpp:472 msgid "&Memory cards" msgstr "記憶å¡" -#: pcsx2/gui/MainFrame.cpp:464 +#: pcsx2/gui/MainFrame.cpp:473 msgid "&Plugin/BIOS Selector" msgstr "æ’件 / BIOS" -#: pcsx2/gui/MainFrame.cpp:465 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 +#: pcsx2/gui/MainFrame.cpp:474 pcsx2/gui/Panels/GameDatabasePanel.cpp:346 msgid "Game Database Editor" msgstr "éŠæˆ²è³‡æ–™åº«ç·¨è¼¯å™¨" -#: pcsx2/gui/MainFrame.cpp:471 +#: pcsx2/gui/MainFrame.cpp:480 msgid "&Video (GS)" msgstr "圖形 (GS)" -#: pcsx2/gui/MainFrame.cpp:472 +#: pcsx2/gui/MainFrame.cpp:481 msgid "&Audio (SPU2)" msgstr "è²éŸ³ (SPU2)" -#: pcsx2/gui/MainFrame.cpp:473 +#: pcsx2/gui/MainFrame.cpp:482 msgid "&Controllers (PAD)" msgstr "控制器 (PAD)" -#: pcsx2/gui/MainFrame.cpp:474 +#: pcsx2/gui/MainFrame.cpp:483 msgid "Dev9" msgstr "Dev9" -#: pcsx2/gui/MainFrame.cpp:475 +#: pcsx2/gui/MainFrame.cpp:484 msgid "USB" msgstr "USB" -#: pcsx2/gui/MainFrame.cpp:476 +#: pcsx2/gui/MainFrame.cpp:485 msgid "Firewire" msgstr "Firewire" -#: pcsx2/gui/MainFrame.cpp:482 +#: pcsx2/gui/MainFrame.cpp:491 msgid "Multitap 1" msgstr "手把擴充器 1" -#: pcsx2/gui/MainFrame.cpp:483 +#: pcsx2/gui/MainFrame.cpp:492 msgid "Multitap 2" msgstr "手把擴充器 2" -#: pcsx2/gui/MainFrame.cpp:486 +#: pcsx2/gui/MainFrame.cpp:495 msgid "Clear all settings..." msgstr "清除全部設定" -#: pcsx2/gui/MainFrame.cpp:487 +#: pcsx2/gui/MainFrame.cpp:496 #, c-format msgid "Clears all %s settings and re-runs the startup wizard." msgstr "清除全部 %s 設定,é‡æ–°åŸ·è¡Œã€Œ é¦–æ¬¡åŸ·è¡Œç²¾éˆ ã€" -#: pcsx2/gui/MainFrame.cpp:509 +#: pcsx2/gui/MainFrame.cpp:518 msgid "About..." msgstr "關於 PCSX2" -#: pcsx2/gui/MainFrame.cpp:514 +#: pcsx2/gui/MainFrame.cpp:523 msgid "Open Debug Window..." msgstr "é–‹å•ŸåµéŒ¯è¦–窗" -#: pcsx2/gui/MainFrame.cpp:517 +#: pcsx2/gui/MainFrame.cpp:526 msgid "Logging..." msgstr "日誌" -#: pcsx2/gui/MainFrame.cpp:595 +#: pcsx2/gui/MainFrame.cpp:608 msgid "Pause" msgstr "æš«åœéŠæˆ²" -#: pcsx2/gui/MainFrame.cpp:596 +#: pcsx2/gui/MainFrame.cpp:609 msgid "Safely pauses emulation and preserves the PS2 state." msgstr "安全地暫åœæ¨¡æ“¬ä¸¦ä¿ç•™ PS2 狀態" -#: pcsx2/gui/MainFrame.cpp:603 +#: pcsx2/gui/MainFrame.cpp:616 msgid "Resume" msgstr "繼續éŠæˆ²" -#: pcsx2/gui/MainFrame.cpp:604 +#: pcsx2/gui/MainFrame.cpp:617 msgid "Resumes the suspended emulation state." msgstr "從暫åœçš„模擬器狀態中æ¢å¾©éŠæˆ²" -#: pcsx2/gui/MainFrame.cpp:608 +#: pcsx2/gui/MainFrame.cpp:621 msgid "Pause/Resume" msgstr "æš«åœ / 繼續" -#: pcsx2/gui/MainFrame.cpp:609 +#: pcsx2/gui/MainFrame.cpp:622 msgid "No emulation state is active; cannot suspend or resume." msgstr "ç„¡ç¾å­˜çš„模擬器狀態,ä¸èƒ½æš«åœæˆ–繼續" -#: pcsx2/gui/MainFrame.cpp:618 +#: pcsx2/gui/MainFrame.cpp:631 msgid "Restart" msgstr "é‡æ–°å•Ÿå‹•" -#: pcsx2/gui/MainFrame.cpp:619 +#: pcsx2/gui/MainFrame.cpp:632 msgid "Simulates hardware reset of the PS2 virtual machine." msgstr "模擬 PS2 虛擬機的硬體é‡ç½®ã€‚" -#: pcsx2/gui/MainFrame.cpp:624 +#: pcsx2/gui/MainFrame.cpp:637 msgid "No emulation state is active; boot something first." msgstr "ç„¡ç¾å­˜çš„模擬器狀態,請先啟動些什麼" -#: pcsx2/gui/MainFrame.cpp:632 +#: pcsx2/gui/MainFrame.cpp:645 msgid "Reboot CDVD (full)" msgstr "é‡æ–°å•Ÿå‹•éŠæˆ²ï¼ˆå®Œæ•´ï¼‰" -#: pcsx2/gui/MainFrame.cpp:633 +#: pcsx2/gui/MainFrame.cpp:646 msgid "Hard reset of the active VM." msgstr "é‡æ–°å•Ÿå‹•éŠæˆ²æ™‚顯示 PS2 çš„å•Ÿå‹•ç•«é¢" -#: pcsx2/gui/MainFrame.cpp:637 +#: pcsx2/gui/MainFrame.cpp:650 msgid "Boot CDVD (full)" msgstr "å•Ÿå‹•éŠæˆ²ï¼ˆå®Œæ•´ï¼‰" -#: pcsx2/gui/MainFrame.cpp:638 +#: pcsx2/gui/MainFrame.cpp:651 msgid "Boot the VM using the current DVD or Iso source media" msgstr "å•Ÿå‹•éŠæˆ²æ™‚顯示 PS2 çš„å•Ÿå‹•ç•«é¢" -#: pcsx2/gui/MainFrame.cpp:646 +#: pcsx2/gui/MainFrame.cpp:659 msgid "Reboot CDVD (fast)" msgstr "é‡æ–°å•Ÿå‹•éŠæˆ²ï¼ˆå¿«é€Ÿï¼‰" -#: pcsx2/gui/MainFrame.cpp:647 +#: pcsx2/gui/MainFrame.cpp:660 msgid "Reboot using fast BOOT (skips splash screens)" msgstr "é‡æ–°å•Ÿå‹•éŠæˆ²æ™‚è·³éŽ PS2 çš„å•Ÿå‹•ç•«é¢" -#: pcsx2/gui/MainFrame.cpp:651 +#: pcsx2/gui/MainFrame.cpp:664 msgid "Boot CDVD (fast)" msgstr "å•Ÿå‹•éŠæˆ²ï¼ˆå¿«é€Ÿï¼‰" -#: pcsx2/gui/MainFrame.cpp:652 +#: pcsx2/gui/MainFrame.cpp:665 msgid "Use fast boot to skip PS2 startup and splash screens" msgstr "å•Ÿå‹•éŠæˆ²æ™‚è·³éŽ PS2 çš„å•Ÿå‹•ç•«é¢" -#: pcsx2/gui/MainFrame.cpp:714 pcsx2/gui/MainFrame.cpp:749 +#: pcsx2/gui/MainFrame.cpp:745 pcsx2/gui/MainFrame.cpp:780 msgid "No plugin loaded" msgstr "未載入æ’件" -#: pcsx2/gui/MainFrame.cpp:719 +#: pcsx2/gui/MainFrame.cpp:750 msgid "Core GS Settings..." msgstr "核心設定" -#: pcsx2/gui/MainFrame.cpp:720 +#: pcsx2/gui/MainFrame.cpp:751 msgid "" "Modify hardware emulation settings regulated by the PCSX2 core virtual " "machine." msgstr "變更 PCSX2 核心虛擬機控制的硬體模擬設定" -#: pcsx2/gui/MainFrame.cpp:722 +#: pcsx2/gui/MainFrame.cpp:753 msgid "Window Settings..." msgstr "éŠæˆ²è¦–窗" -#: pcsx2/gui/MainFrame.cpp:723 +#: pcsx2/gui/MainFrame.cpp:754 msgid "Modify window and appearance options, including aspect ratio." msgstr "視窗åŠè¦–窗外觀的é¸é …調節,包括ã€åœ–åƒç¸±æ©«æ¯”】" -#: pcsx2/gui/MainFrame.cpp:730 +#: pcsx2/gui/MainFrame.cpp:761 msgid "Plugin Settings..." msgstr "æ’件設定" -#: pcsx2/gui/MainFrame.cpp:731 +#: pcsx2/gui/MainFrame.cpp:762 #, c-format msgid "Opens the %s plugin's advanced settings dialog." msgstr "é–‹å•Ÿ %s æ’件的設定視窗" -#: pcsx2/gui/MainMenuClicks.cpp:109 +#: pcsx2/gui/MainMenuClicks.cpp:117 msgid "Reset all settings?" msgstr "é‡è¨­å…¨éƒ¨è¨­å®šï¼Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:137 +#: pcsx2/gui/MainMenuClicks.cpp:145 msgid "Confirm ISO image change" msgstr "確èªæ›´æ›å…‰ç¢Ÿæ˜ åƒæª”" -#: pcsx2/gui/MainMenuClicks.cpp:143 +#: pcsx2/gui/MainMenuClicks.cpp:151 msgid "Do you want to swap discs or boot the new image (via system reset)?" msgstr "您是想è¦æ›´æ›å…‰ç¢Ÿé‚„是啟動新的映åƒæª” ( é‡æ–°å•Ÿå‹•éŠæˆ² )?" -#: pcsx2/gui/MainMenuClicks.cpp:145 pcsx2/gui/MainMenuClicks.cpp:191 +#: pcsx2/gui/MainMenuClicks.cpp:153 pcsx2/gui/MainMenuClicks.cpp:199 msgid "Swap Disc" msgstr "æ›´æ›å…‰ç¢Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:181 +#: pcsx2/gui/MainMenuClicks.cpp:189 msgid "Confirm CDVD source change" msgstr "確èªæ›´æ›å…‰ç¢Ÿ" -#: pcsx2/gui/MainMenuClicks.cpp:184 +#: pcsx2/gui/MainMenuClicks.cpp:192 #, c-format msgid "You've selected to switch the CDVD source from %s to %s." msgstr "您已經é¸æ“‡å°‡éŠæˆ²ä¾†æºå¾žã€%s】更æ›åˆ°ã€%s】" -#: pcsx2/gui/MainMenuClicks.cpp:188 +#: pcsx2/gui/MainMenuClicks.cpp:196 msgid "Do you want to swap discs or boot the new image (system reset)?" msgstr "您是想è¦æ›´æ›å…‰ç¢Ÿé‚„是啟動新的映åƒæª” ( é‡æ–°å•Ÿå‹•éŠæˆ² )?" -#: pcsx2/gui/MainMenuClicks.cpp:258 +#: pcsx2/gui/MainMenuClicks.cpp:266 #, c-format msgid "All Supported (%s)" msgstr "所有支æ´çš„檔案類型 (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:261 +#: pcsx2/gui/MainMenuClicks.cpp:269 #, c-format msgid "Disc Images (%s)" msgstr "光碟映åƒæª” (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:264 +#: pcsx2/gui/MainMenuClicks.cpp:272 #, c-format msgid "Blockdumps (%s)" msgstr "å€å¡Šè½‰å­˜æª” (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:267 -#, fuzzy, c-format +#: pcsx2/gui/MainMenuClicks.cpp:275 +#, c-format msgid "Compressed (%s)" -msgstr "å€å¡Šè½‰å­˜æª” (%s)" +msgstr "壓縮 (%s)" -#: pcsx2/gui/MainMenuClicks.cpp:270 pcsx2/gui/MainMenuClicks.cpp:291 +#: pcsx2/gui/MainMenuClicks.cpp:278 pcsx2/gui/MainMenuClicks.cpp:299 msgid "All Files (*.*)" msgstr "所有檔案 (*.*)" -#: pcsx2/gui/MainMenuClicks.cpp:273 -msgid "Select CDVD source iso..." -msgstr "é¸æ“‡å…‰ç¢Ÿæ˜ åƒæª”" +#: pcsx2/gui/MainMenuClicks.cpp:281 +msgid "Select disc image, compressed disc image, or block-dump..." +msgstr "" -#: pcsx2/gui/MainMenuClicks.cpp:290 +#: pcsx2/gui/MainMenuClicks.cpp:298 msgid "Select ELF file..." msgstr "é¸æ“‡ ELF 檔案" -#: pcsx2/gui/MainMenuClicks.cpp:316 +#: pcsx2/gui/MainMenuClicks.cpp:324 msgid "ISO file not found!" msgstr "未找到光碟映åƒæª”ï¼" -#: pcsx2/gui/MainMenuClicks.cpp:318 +#: pcsx2/gui/MainMenuClicks.cpp:326 msgid "An error occurred while trying to open the file:" msgstr "當嘗試開啟這個檔案時出ç¾éŒ¯èª¤ï¼š" -#: pcsx2/gui/MainMenuClicks.cpp:319 +#: pcsx2/gui/MainMenuClicks.cpp:327 msgid "" "Error: The configured ISO file does not exist. Click OK to select a new ISO " "source for CDVD." msgstr "錯誤:指定的光碟映åƒæª”ä¸å­˜åœ¨ã€‚按ã€ç¢ºå®šã€‘é¸æ“‡ä¸€å€‹æ–°çš„光碟映åƒæª”。" -#: pcsx2/gui/MainMenuClicks.cpp:390 +#: pcsx2/gui/MainMenuClicks.cpp:398 msgid "" "You have selected the following ISO image into PCSX2:\n" "\n" @@ -1570,7 +1680,7 @@ "您已經é¸æ“‡ä»¥ä¸‹å…‰ç¢Ÿæ˜ åƒæª”:\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:183 +#: pcsx2/gui/MemoryCardFile.cpp:192 #, c-format msgid "" "Could not create a memory card: \n" @@ -1583,7 +1693,7 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:201 +#: pcsx2/gui/MemoryCardFile.cpp:210 #, c-format msgid "" "Access denied to memory card: \n" @@ -1596,19 +1706,19 @@ "%s\n" "\n" -#: pcsx2/gui/MemoryCardFile.cpp:586 +#: pcsx2/gui/MemoryCardFile.cpp:677 msgid "File name empty or too short" msgstr "檔案å稱是空的或太短" -#: pcsx2/gui/MemoryCardFile.cpp:591 +#: pcsx2/gui/MemoryCardFile.cpp:682 msgid "File name outside of required directory" msgstr "檔案å稱在所è¦æ±‚的資料夾之外" -#: pcsx2/gui/MemoryCardFile.cpp:597 +#: pcsx2/gui/MemoryCardFile.cpp:688 pcsx2/gui/MemoryCardFile.cpp:693 msgid "File name already exists" msgstr "檔案å稱已經存在" -#: pcsx2/gui/MemoryCardFile.cpp:604 +#: pcsx2/gui/MemoryCardFile.cpp:700 msgid "The Operating-System prevents this file from being created" msgstr "作業系統阻止建立這個檔案" @@ -1616,27 +1726,27 @@ msgid "Cannot apply settings..." msgstr "無法套用設定" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:107 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:103 msgid "BIOS Search Path:" msgstr "BIOS çš„æœå°‹è·¯å¾‘:" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:108 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:104 msgid "Select folder with PS2 BIOS roms" msgstr "é¸æ“‡å«æœ‰ PS2 BIOS 的資料夾" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:111 msgid "" "Click the Browse button to select a different folder where PCSX2 will look " "for PS2 BIOS roms." msgstr "按下ã€ç€è¦½ã€‘按鈕é¸æ“‡ä¸åŒçš„資料夾" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:117 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:171 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:196 #: pcsx2/gui/Panels/ThemeSelectorPanel.cpp:47 msgid "Refresh list" msgstr "é‡æ–°è¼‰å…¥åˆ—表" -#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:119 +#: pcsx2/gui/Panels/BiosSelectorPanel.cpp:115 msgid "Select a BIOS rom:" msgstr "é¸æ“‡ä¸€å€‹ BIOS:" @@ -1668,88 +1778,92 @@ msgid "None" msgstr "ç„¡" -#: pcsx2/gui/Panels/CpuPanel.cpp:85 +#: pcsx2/gui/Panels/CpuPanel.cpp:38 +msgid "Normal" +msgstr "普通" + +#: pcsx2/gui/Panels/CpuPanel.cpp:86 msgid "EE/FPU Advanced Recompiler Options" msgstr "EE/FPU 進階å編譯é¸é …" -#: pcsx2/gui/Panels/CpuPanel.cpp:87 pcsx2/gui/Panels/CpuPanel.cpp:102 +#: pcsx2/gui/Panels/CpuPanel.cpp:88 pcsx2/gui/Panels/CpuPanel.cpp:103 msgid "Extra + Preserve Sign" msgstr "é¡å¤– + ä¿ç•™æ¨™è¨˜" -#: pcsx2/gui/Panels/CpuPanel.cpp:88 +#: pcsx2/gui/Panels/CpuPanel.cpp:89 msgid "Full" msgstr "完整" -#: pcsx2/gui/Panels/CpuPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:100 msgid "VU0 / VU1 Advanced Recompiler Options" msgstr "VU0 / VU1 進階å編譯é¸é …" -#: pcsx2/gui/Panels/CpuPanel.cpp:101 +#: pcsx2/gui/Panels/CpuPanel.cpp:102 msgid "Extra" msgstr "é¡å¤–" -#: pcsx2/gui/Panels/CpuPanel.cpp:116 pcsx2/gui/Panels/CpuPanel.cpp:125 -#: pcsx2/gui/Panels/CpuPanel.cpp:182 +#: pcsx2/gui/Panels/CpuPanel.cpp:117 pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:184 msgid "Interpreter" msgstr "直譯器" -#: pcsx2/gui/Panels/CpuPanel.cpp:117 +#: pcsx2/gui/Panels/CpuPanel.cpp:118 msgid "Quite possibly the slowest thing in the universe." msgstr "很å¯èƒ½æ˜¯å®‡å®™ä¸­æœ€æ…¢çš„。" -#: pcsx2/gui/Panels/CpuPanel.cpp:119 pcsx2/gui/Panels/CpuPanel.cpp:128 +#: pcsx2/gui/Panels/CpuPanel.cpp:120 pcsx2/gui/Panels/CpuPanel.cpp:129 msgid "Recompiler" msgstr "å編譯" -#: pcsx2/gui/Panels/CpuPanel.cpp:120 +#: pcsx2/gui/Panels/CpuPanel.cpp:121 msgid "" "Performs just-in-time binary translation of 64-bit MIPS-IV machine code to " "x86." msgstr "é©æ™‚地將 64 ä½å…ƒ MIPS-IV 機器碼轉譯至 x86。" -#: pcsx2/gui/Panels/CpuPanel.cpp:126 +#: pcsx2/gui/Panels/CpuPanel.cpp:127 msgid "Pretty slow; provided for diagnostic purposes only." msgstr "éžå¸¸æ…¢ï¼›åƒ…用於診斷。" -#: pcsx2/gui/Panels/CpuPanel.cpp:129 +#: pcsx2/gui/Panels/CpuPanel.cpp:130 msgid "" "Performs just-in-time binary translation of 32-bit MIPS-I machine code to " "x86." msgstr "é©æ™‚地將 32 ä½å…ƒ MIPS-I 機器碼轉譯至 x86。" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Enable EE Cache (Slower)" msgstr "å•Ÿç”¨å¿«å– - 僅用於直譯器ï¼ï¼ˆé€Ÿåº¦æ›´æ…¢ï¼‰" -#: pcsx2/gui/Panels/CpuPanel.cpp:153 +#: pcsx2/gui/Panels/CpuPanel.cpp:154 msgid "Interpreter only; provided for diagnostic" msgstr "用於診斷" -#: pcsx2/gui/Panels/CpuPanel.cpp:169 pcsx2/gui/Panels/CpuPanel.cpp:221 -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:99 +#: pcsx2/gui/Panels/CpuPanel.cpp:170 pcsx2/gui/Panels/CpuPanel.cpp:225 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:117 msgid "Restore Defaults" msgstr "還原æˆé è¨­å€¼" -#: pcsx2/gui/Panels/CpuPanel.cpp:183 +#: pcsx2/gui/Panels/CpuPanel.cpp:185 msgid "" "Vector Unit Interpreter. Slow and not very compatible. Only use for " "diagnostics." msgstr "å‘é‡å–®å…ƒç›´è­¯å™¨ã€‚速度慢而且相容性ä¸æ˜¯éžå¸¸å¥½ã€‚僅用於診斷。" -#: pcsx2/gui/Panels/CpuPanel.cpp:185 +#: pcsx2/gui/Panels/CpuPanel.cpp:187 msgid "microVU Recompiler" msgstr "microVU å編譯" -#: pcsx2/gui/Panels/CpuPanel.cpp:186 +#: pcsx2/gui/Panels/CpuPanel.cpp:188 msgid "" "New Vector Unit recompiler with much improved compatibility. Recommended." msgstr "æ–°å¼çš„å‘é‡å–®å…ƒå編譯大幅改善相容性。推薦。" -#: pcsx2/gui/Panels/CpuPanel.cpp:188 +#: pcsx2/gui/Panels/CpuPanel.cpp:191 msgid "superVU Recompiler [legacy]" msgstr "superVU å編譯ã€èˆŠå¼ã€‘" -#: pcsx2/gui/Panels/CpuPanel.cpp:189 +#: pcsx2/gui/Panels/CpuPanel.cpp:192 msgid "" "Useful for diagnosing bugs or clamping issues in the new mVU recompiler." msgstr "å°æ–¼è¨ºæ–· microVU 的程å¼éŒ¯èª¤æˆ–夾æŒæ¨¡å¼çš„å•é¡Œæ˜¯æœ‰ç”¨çš„。" @@ -1916,23 +2030,23 @@ "é™è³½ï¼ˆTest Drive Unlimited)" #: pcsx2/gui/Panels/GameFixesPanel.cpp:92 -#, fuzzy msgid "" "Delay VIF1 Stalls (VIF1 FIFO) - For SOCOM 2 HUD & Spy Hunter loading hang." msgstr "" -"å»¶é² VIF1 åœé “(VIF1 FIFO)- 美國海豹特é£éšŠï¼’(SOCOM 2)的抬頭顯示器(HUD)" +"å»¶é² VIF1 åœé “(VIF1 FIFO)- 美國海豹特é£éšŠï¼’(SOCOM 2)的抬頭顯示器(HUD)ã€" +"間諜飛車(Spy Hunter)載入éŠæˆ²æ™‚當機" #: pcsx2/gui/Panels/GameFixesPanel.cpp:96 msgid "Ignore Bus Direction on Path3 Transfer - Used for Hotwheels" msgstr "忽略匯æµæŽ’æ–¼ Path3 的傳輸 - 風ç«è¼ªè³½è»Šï¼ˆHot Wheels)" #: pcsx2/gui/Panels/GameFixesPanel.cpp:100 -msgid "Switch to GSdx software rendering when a FMV plays" +msgid "Switch to GSdx software rendering when an FMV plays" msgstr "當播放éŠæˆ²å‹•ç•«æ™‚,切æ›è‡³ GSdx 的軟體渲染模å¼" #: pcsx2/gui/Panels/GameFixesPanel.cpp:104 msgid "Preload TLB hack to avoid tlb miss on Goemon" -msgstr "" +msgstr "é å…ˆè¼‰å…¥ TLB,é¿å…大盜五å³è¡›é–€ï¼ˆGoemonï¼‰å‡ºç¾ tlb miss" #: pcsx2/gui/Panels/GameFixesPanel.cpp:115 msgid "Enable manual game fixes [Not recommended]" @@ -1956,86 +2070,90 @@ "警告:啟用追蹤日誌會令éŠæˆ²é€Ÿåº¦éžå¸¸æ…¢ï¼Œè€Œä¸”是「我的 FPS 發生了什麼事?ã€å•é¡Œçš„" "最é‡è¦çš„原因。:)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:166 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:189 msgid "Select folder with PS2 memory cards" msgstr "é¸æ“‡å«æœ‰ PS2 記憶å¡çš„資料夾" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:473 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:393 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Eject" msgstr "退出" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:474 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:394 msgid "Duplicate ..." msgstr "建立副本" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:475 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:395 msgid "Rename ..." msgstr "é‡æ–°å‘½å" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:476 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:540 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:396 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:465 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Create ..." msgstr "新增" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:488 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:397 +msgid "Convert ..." +msgstr "轉æ›" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:409 msgid "Card: " msgstr "記憶å¡ï¼š " -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:541 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:574 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:466 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:502 msgid "Create a new memory card." msgstr "建立一個新的記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:554 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:480 msgid "Rename this memory card ..." msgstr "é‡æ–°å‘½å所é¸æ“‡çš„記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:558 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:484 msgid "Insert ..." msgstr "æ’å…¥" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Eject the card from this port" msgstr "退出所é¸æ“‡çš„記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:559 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:485 msgid "Insert this card to a port ..." msgstr "將所é¸æ“‡çš„記憶å¡æ’入記憶å¡æ’å£" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:563 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:489 msgid "Create a duplicate of this memory card ..." msgstr "建立所é¸è¨˜æ†¶å¡çš„副本" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:567 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:495 msgid "Delete" msgstr "刪除" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:570 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:498 msgid "Permanently delete this memory card from disk (all contents are lost)" msgstr "刪除所é¸æ“‡çš„記憶å¡ï¼ˆå¤±åŽ»æ‰€æœ‰éŠæˆ²å­˜æª”)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:572 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:500 msgid "Create a new memory card and assign it to this Port." msgstr "建立一個新的記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:690 msgid "Delete memory file?" msgstr "刪除記憶å¡ï¼Ÿ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:805 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:728 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:749 msgid "Duplicate memory card" msgstr "建立記憶å¡çš„副本" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:717 msgid "Failed: Can only duplicate an existing card." msgstr "失敗:僅能給已經存在的記憶å¡å»ºç«‹å‰¯æœ¬ã€‚" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:791 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:735 msgid "" "Select a name for the duplicate\n" "( '.ps2' will be added automatically)" @@ -2043,25 +2161,25 @@ "å–一個å字給副本記憶å¡\n" "(.ps2 副檔å會被自動添加)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:748 #, c-format msgid "Failed: %s" msgstr "失敗:%s" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:829 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:773 msgid "Copy failed!" msgstr "複製失敗ï¼" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:837 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:780 #, c-format msgid "Memory card '%s' duplicated to '%s'." msgstr "記憶å¡ã€Ž %s ã€çš„副本是『 %s ã€" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:841 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:784 msgid "Success" msgstr "æˆåŠŸ" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:862 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:804 #, c-format msgid "" "Select a new name for the memory card '%s'\n" @@ -2070,119 +2188,124 @@ "å–一個新å字給記憶å¡ã€Ž %s ã€\n" "(.ps2 副檔å會被自動添加)" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:865 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:877 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:807 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:819 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Rename memory card" msgstr "é‡æ–°å‘½å記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:893 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:833 msgid "Error: Rename could not be completed.\n" msgstr "錯誤:é‡æ–°å‘½å無法完æˆã€‚\n" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:983 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:143 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:933 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:134 #, c-format msgid "Port-%u / Multitap-%u--Port-1" msgstr "æ’å£-%u / 手把擴充器-%u--æ’å£-1" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:984 -#: pcsx2/gui/Panels/MemoryCardListView.cpp:144 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:934 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:135 #, c-format msgid " Multitap-%u--Port-%u" msgstr " 手把擴充器-%u--æ’å£-%u" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1009 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:959 msgid "Empty" msgstr "空æ’å£" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1015 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:965 #, c-format msgid "Select a target port for '%s'" msgstr "é¸æ“‡ä¸€å€‹è¨˜æ†¶å¡æ’å£ç”¨ä¾†æ’入記憶å¡ã€Ž %s ã€" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1016 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:966 msgid "Insert card" msgstr "æ’入記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Eject card" msgstr "退出記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1076 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1027 msgid "Insert card ..." msgstr "æ’入記憶å¡æ’å£" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1077 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1028 msgid "Duplicate card ..." msgstr "建立記憶å¡çš„副本" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1078 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1029 msgid "Rename card ..." msgstr "é‡æ–°å‘½å記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1079 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1030 msgid "Delete card" msgstr "刪除記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1082 -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1086 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1032 +#, fuzzy +msgid "Convert card" +msgstr "æ’入記憶å¡" + +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1036 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1040 msgid "Create a new card ..." msgstr "新增記憶å¡" -#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1090 +#: pcsx2/gui/Panels/MemoryCardListPanel.cpp:1044 msgid "Refresh List" msgstr "é‡æ–°è¼‰å…¥åˆ—表" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:108 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:99 msgid "PS2 Port" msgstr "記憶å¡æ’å£" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:110 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:101 msgid "Card (file) name" msgstr "檔案å稱" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:111 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:102 msgid "Card size" msgstr "大å°" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:112 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:103 msgid "Formatted" msgstr "已格å¼åŒ–" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:113 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:104 msgid "Type" msgstr "é¡žåž‹" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:114 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:105 msgid "Last Modified" msgstr "修改日期" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:115 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:106 msgid "Created on" msgstr "建立日期" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "No" msgstr "å¦" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:160 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:151 msgid "Yes" msgstr "是" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PS2" msgstr "PS2" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:161 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:152 msgid "PSX" msgstr "PSX" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:174 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:165 msgid "[-- Unused cards --]" msgstr "[-- æœªä½¿ç”¨çš„è¨˜æ†¶å¡ --]" -#: pcsx2/gui/Panels/MemoryCardListView.cpp:176 +#: pcsx2/gui/Panels/MemoryCardListView.cpp:167 msgid "[-- No unused cards --]" msgstr "[-- æ²’æœ‰æœªä½¿ç”¨çš„è¨˜æ†¶å¡ --]" @@ -2215,11 +2338,11 @@ msgid "Select a document root for %s" msgstr "é¸æ“‡ %s 的檔案根目錄" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:118 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:124 msgid "Apply" msgstr "套用" -#: pcsx2/gui/Panels/MiscPanelStuff.cpp:119 +#: pcsx2/gui/Panels/MiscPanelStuff.cpp:125 msgid "Make this language my default right now!" msgstr "ç«‹å³å¥—用所é¸æ“‡çš„語言作為é è¨­èªžè¨€ï¼" @@ -2297,42 +2420,42 @@ "原因:%s\n" "\n" -#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:723 +#: pcsx2/gui/Panels/PluginSelectorPanel.cpp:719 msgid "Completing tasks..." msgstr "正在完æˆä»»å‹™..." -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:87 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:105 msgid "Enable speedhacks" msgstr "啟用速度駭客" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:91 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 msgid "" "A safe and easy way to make sure that all speedhacks are completely disabled." msgstr "安全且舒é©çš„狀態就是確ä¿å®Œå…¨åœç”¨æ‰€æœ‰çš„速度駭客" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:100 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:118 msgid "" "Resets all speedhack options to their defaults, which consequently turns " "them all OFF." msgstr "所有的速度駭客é¸é …é‡è¨­ç‚ºé è¨­å€¼ï¼Œçµæžœæ˜¯é—œæŽ‰å…¨éƒ¨é€Ÿåº¦é§­å®¢é¸é …。" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:109 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 msgid "EE Cyclerate [Not Recommended]" msgstr "EE Cyclerateã€ä¸æŽ¨è–¦ã€‘" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:127 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:144 msgid "VU Cycle Stealing [Not Recommended]" msgstr "VU Cycle Stealingã€ä¸æŽ¨è–¦ã€‘" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:145 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:161 msgid "microVU Hacks" msgstr "microVU 駭客" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:147 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:163 msgid "mVU Flag Hack" msgstr "mVU Flag Hack" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:148 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 msgid "" "Good Speedup and High Compatibility; may cause bad graphics... [Recommended]" msgstr "" @@ -2340,11 +2463,11 @@ "圖åƒè®Šå¾—糟糕...\n" "ã€æŽ¨è–¦ã€‘" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:150 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:166 msgid "MTVU (Multi-Threaded microVU1)" msgstr "MTVU(多執行緒 microVU1)" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:151 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 msgid "" "Good Speedup and High Compatibility; may cause hanging... [Recommended if 3+ " "cores]" @@ -2353,15 +2476,15 @@ "éŠæˆ²åœæ­¢å›žæ‡‰...\n" "ã€æŽ¨è–¦ 3 核或更多核的 CPU 使用】" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:162 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:178 msgid "Other Hacks" msgstr "其他駭客" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:164 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:180 msgid "Enable INTC Spin Detection" msgstr "Enable INTC Spin Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:165 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:181 msgid "" "Huge speedup for some games, with almost no compatibility side effects. " "[Recommended]" @@ -2369,22 +2492,22 @@ "å°æ–¼ä¸€äº›éŠæˆ²æœ‰å·¨å¤§çš„速度æå‡ï¼Œ\n" "幾乎沒有相容性副作用ã€æŽ¨è–¦ã€‘" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:167 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:183 msgid "Enable Wait Loop Detection" msgstr "Enable Wait Loop Detection" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:168 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:184 msgid "" "Moderate speedup for some games, with no known side effects. [Recommended]" msgstr "" "å°æ–¼ä¸€äº›éŠæˆ²æœ‰é©åº¦çš„速度æå‡ï¼Œ\n" "沒有已知的副作用ã€æŽ¨è–¦ã€‘" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:170 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:186 msgid "Enable fast CDVD" msgstr "Enable fast CDVD" -#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:171 +#: pcsx2/gui/Panels/SpeedhacksPanel.cpp:187 msgid "Fast disc access, less loading times. [Not Recommended]" msgstr "快速讀å–光碟,減少載入時間ã€ä¸æŽ¨è–¦ã€‘" @@ -2406,42 +2529,42 @@ msgid "Select a visual theme:" msgstr "é¸æ“‡è¦–覺主題:" -#: pcsx2/gui/Panels/VideoPanel.cpp:34 +#: pcsx2/gui/Panels/VideoPanel.cpp:32 msgid "Disable Framelimiting" msgstr "åœç”¨ç•«æ¡†é™åˆ¶" -#: pcsx2/gui/Panels/VideoPanel.cpp:35 +#: pcsx2/gui/Panels/VideoPanel.cpp:33 msgid "" "Useful for running benchmarks. Toggle this option in-game by pressing F4." msgstr "" "å°æ–¼åŸ·è¡Œæ•ˆèƒ½æ¸¬è©¦æ˜¯æœ‰ç”¨çš„\n" "éŠæˆ²æ™‚按 F4 開啟或關閉畫框é™åˆ¶" -#: pcsx2/gui/Panels/VideoPanel.cpp:59 +#: pcsx2/gui/Panels/VideoPanel.cpp:57 msgid "Base Framerate Adjust:" msgstr "基本畫框速率:" -#: pcsx2/gui/Panels/VideoPanel.cpp:65 +#: pcsx2/gui/Panels/VideoPanel.cpp:63 msgid "Slow Motion Adjust:" msgstr "慢動作(Shift + TAB):" -#: pcsx2/gui/Panels/VideoPanel.cpp:71 +#: pcsx2/gui/Panels/VideoPanel.cpp:69 msgid "Turbo Adjust:" msgstr "渦輪加速(TAB):" -#: pcsx2/gui/Panels/VideoPanel.cpp:86 +#: pcsx2/gui/Panels/VideoPanel.cpp:78 msgid "NTSC Framerate:" msgstr "NTSC éŠæˆ²çš„畫框速率:" -#: pcsx2/gui/Panels/VideoPanel.cpp:89 pcsx2/gui/Panels/VideoPanel.cpp:95 +#: pcsx2/gui/Panels/VideoPanel.cpp:81 pcsx2/gui/Panels/VideoPanel.cpp:87 msgid "FPS" msgstr "FPS" -#: pcsx2/gui/Panels/VideoPanel.cpp:92 +#: pcsx2/gui/Panels/VideoPanel.cpp:84 msgid "PAL Framerate:" msgstr "PAL éŠæˆ²çš„畫框速率:" -#: pcsx2/gui/Panels/VideoPanel.cpp:164 +#: pcsx2/gui/Panels/VideoPanel.cpp:157 msgid "" "Error while parsing either NTSC or PAL framerate settings. Settings must be " "valid floating point numerics." @@ -2449,19 +2572,19 @@ "ç•¶è§£æž NTSC éŠæˆ²æˆ– PAL éŠæˆ²çš„畫框速率設定時出ç¾éŒ¯èª¤ã€‚設定值必須是有效的浮點" "數。" -#: pcsx2/gui/Panels/VideoPanel.cpp:182 +#: pcsx2/gui/Panels/VideoPanel.cpp:173 msgid "Disabled [default]" msgstr "åœç”¨ã€é è¨­ã€‘" -#: pcsx2/gui/Panels/VideoPanel.cpp:186 +#: pcsx2/gui/Panels/VideoPanel.cpp:177 msgid "Skip when on Turbo only (TAB to enable)" msgstr "僅在渦輪加速時跳框(按 TAB 啟動)" -#: pcsx2/gui/Panels/VideoPanel.cpp:190 +#: pcsx2/gui/Panels/VideoPanel.cpp:181 msgid "Constant skipping" msgstr "æ†å®šçš„跳框" -#: pcsx2/gui/Panels/VideoPanel.cpp:192 +#: pcsx2/gui/Panels/VideoPanel.cpp:183 msgid "" "Normal and Turbo limit rates skip frames. Slow motion mode will still " "disable frameskipping." @@ -2469,19 +2592,19 @@ "普通模å¼å’Œæ¸¦è¼ªåŠ é€Ÿæ¨¡å¼æœ‰é™åˆ¶é€Ÿåº¦ï¼Œèƒ½å¤ è·³æ¡†\n" "慢動作模å¼ä¾ç„¶æœƒåœç”¨è·³æ¡†" -#: pcsx2/gui/Panels/VideoPanel.cpp:215 +#: pcsx2/gui/Panels/VideoPanel.cpp:206 msgid "Frames to Draw" msgstr "繪製的畫框" -#: pcsx2/gui/Panels/VideoPanel.cpp:220 +#: pcsx2/gui/Panels/VideoPanel.cpp:211 msgid "Frames to Skip" msgstr "è·³éŽçš„畫框" -#: pcsx2/gui/Panels/VideoPanel.cpp:294 +#: pcsx2/gui/Panels/VideoPanel.cpp:285 msgid "Use Synchronized MTGS" msgstr "使用åŒæ­¥çš„多執行緒圖形模å¼" -#: pcsx2/gui/Panels/VideoPanel.cpp:295 +#: pcsx2/gui/Panels/VideoPanel.cpp:286 msgid "" "For troubleshooting potential bugs in the MTGS only, as it is potentially " "very slow." @@ -2489,11 +2612,11 @@ "僅用於排除多執行緒圖形模å¼æ½›åœ¨çš„程å¼éŒ¯èª¤ï¼Œ\n" "因為速度å¯èƒ½éžå¸¸æ…¢" -#: pcsx2/gui/Panels/VideoPanel.cpp:298 +#: pcsx2/gui/Panels/VideoPanel.cpp:289 msgid "Disable all GS output" msgstr "åœæ­¢è¼¸å‡ºéŠæˆ²ç•«é¢" -#: pcsx2/gui/Panels/VideoPanel.cpp:299 +#: pcsx2/gui/Panels/VideoPanel.cpp:290 msgid "" "Completely disables all GS plugin activity; ideal for benchmarking EEcore " "components." @@ -2501,11 +2624,11 @@ "完全åœæ­¢åœ–å½¢æ’件所有的活動;\n" "é©åˆç”¨ä¾†åš EEcore 的效能測試" -#: pcsx2/gui/Panels/VideoPanel.cpp:314 +#: pcsx2/gui/Panels/VideoPanel.cpp:305 msgid "Frame Skipping" msgstr "跳框" -#: pcsx2/gui/Panels/VideoPanel.cpp:317 +#: pcsx2/gui/Panels/VideoPanel.cpp:308 msgid "Framelimiter" msgstr "畫框é™åˆ¶" @@ -2540,7 +2663,7 @@ "log file for details." msgstr "由於缺失關éµå…ƒä»¶ï¼Œç„¡æ³•è®€å–這個å³æ™‚存檔。詳情請洽日誌檔案。" -#: pcsx2/gui/i18n.cpp:70 +#: pcsx2/gui/i18n.cpp:63 msgid " (default)" msgstr "( 正體中文 )" @@ -2558,18 +2681,30 @@ msgid "The configured BIOS file does not exist. Please re-configure." msgstr "指定的 BIOS 檔案ä¸å­˜åœ¨ã€‚è«‹é‡æ–°è¨­å®šã€‚" -#: pcsx2/x86/ix86-32/iR5900-32.cpp:580 -#, fuzzy, c-format +#: pcsx2/x86/ix86-32/iR5900-32.cpp:591 +#, c-format msgid "" "%s Extensions not found. The R5900-32 recompiler requires a host CPU with " "SSE2 extensions." -msgstr "%s 指令集未找到。R5900-32 å編譯è£ç½®è¦æ±‚ CPU æ”¯æ´ MMXã€SSEã€SSE2。" +msgstr "%s 指令集未找到。R5900-32 å編譯è£ç½®è¦æ±‚ CPU æ”¯æ´ SSE2。" #: pcsx2/x86/microVU.cpp:28 -#, fuzzy, c-format +#, c-format msgid "" "%s Extensions not found. microVU requires a host CPU with SSE2 extensions." -msgstr "%s 指令集未找到。microVU è¦æ±‚ CPU æ”¯æ´ MMXã€SSEã€SSE2。" +msgstr "%s 指令集未找到。microVU è¦æ±‚ CPU æ”¯æ´ SSE2。" + +#~ msgid "Betatesting" +#~ msgstr "測試人員" + +#~ msgid "BIOS Selector" +#~ msgstr "é¸æ“‡ BIOS" + +#~ msgid "Select CDVD source iso..." +#~ msgstr "é¸æ“‡å…‰ç¢Ÿæ˜ åƒæª”" + +#~ msgid "Switch to GSdx software rendering when a FMV plays" +#~ msgstr "當播放éŠæˆ²å‹•ç•«æ™‚,切æ›è‡³ GSdx 的軟體渲染模å¼" #~ msgid "PCSX2 - SSE2 Recommended" #~ msgstr "PCSX2 - 推薦 SSE2" diff -Nru pcsx2-1.3.1+dfsg/mscompile.cmd pcsx2-1.4.0/mscompile.cmd --- pcsx2-1.3.1+dfsg/mscompile.cmd 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/mscompile.cmd 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,65 @@ +@ECHO OFF +REM PCSX2 - PS2 Emulator for PCs +REM Copyright (C) 2002-2015 PCSX2 Dev Team +REM +REM PCSX2 is free software: you can redistribute it and/or modify it under the terms +REM of the GNU Lesser General Public License as published by the Free Software Found- +REM ation, either version 3 of the License, or (at your option) any later version. +REM +REM PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +REM without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +REM PURPOSE. See the GNU General Public License for more details. +REM +REM You should have received a copy of the GNU General Public License along with PCSX2. +REM If not, see . + +CLS +ECHO Select your Visual Studio version: +ECHO 1. Microsoft Visual Studio 2013 (default) +ECHO 2. Microsoft Visual Studio 2015 +ECHO Q. Exit the script. +CHOICE /C 12Q /T 10 /D 1 /M "Visual Studio version: " +IF ERRORLEVEL 3 GOTO END +IF ERRORLEVEL 2 SET "VCVARPATH=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" +IF ERRORLEVEL 1 SET "VCVARPATH=%VS120COMNTOOLS%..\..\VC\vcvarsall.bat" + +ECHO. +ECHO Select the desired configuration: +ECHO 1. Release 32bit (default) +ECHO 2. Devel 32bit +ECHO 3. Debug 32bit +ECHO 4. Release 64bit (WIP) +ECHO 5. Devel 64bit (WIP) +ECHO 6. Debug 64bit (WIP) +ECHO Q. Exit the script. +CHOICE /C 123456Q /T 10 /D 1 /M "Configuration: " +IF ERRORLEVEL 7 GOTO END +IF ERRORLEVEL 6 SET "SELARCH=amd64" && SET "SELCONF=DebugAll" +IF ERRORLEVEL 5 SET "SELARCH=amd64" && SET "SELCONF=DevelAll" +IF ERRORLEVEL 4 SET "SELARCH=amd64" && SET "SELCONF=ReleaseAll" +IF ERRORLEVEL 3 SET "SELARCH=x86" && SET "SELCONF=DebugAll" +IF ERRORLEVEL 2 SET "SELARCH=x86" && SET "SELCONF=DevelAll" +IF ERRORLEVEL 1 SET "SELARCH=x86" && SET "SELCONF=ReleaseAll" + +IF EXIST "%VCVARPATH%" (call "%VCVARPATH%" %SELARCH%) ELSE GOTO ERRORVS +cl > NUL 2>&1 +if %ERRORLEVEL% NEQ 0 GOTO ERRORVS + +ECHO. +ECHO Using: +cl 2>&1 | findstr "Version" +ECHO. + +SET "LOGOPTIONS=/v:m /fl1 /fl2 /flp1:logfile="%~dpn0-%SELARCH%-%SELCONF%-errors.log";errorsonly /flp2:logfile="%~dpn0-%SELARCH%-%SELCONF%-warnings.log";warningsonly" +msbuild "%~dp0\buildbot.xml" /m %LOGOPTIONS% /t:%SELCONF% +GOTO END + +:ERRORVS +ECHO. +ECHO The selected Visual Studio version was not found. + +:END +ECHO. +ECHO Bye! +ECHO. +timeout /t 10 diff -Nru pcsx2-1.3.1+dfsg/nsis/ApplyExeProps.nsh pcsx2-1.4.0/nsis/ApplyExeProps.nsh --- pcsx2-1.3.1+dfsg/nsis/ApplyExeProps.nsh 2014-07-08 00:38:06.000000000 +0000 +++ pcsx2-1.4.0/nsis/ApplyExeProps.nsh 2016-01-05 17:28:08.000000000 +0000 @@ -6,8 +6,8 @@ VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APP_NAME}" ;VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A test comment" -VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© 2014 PCSX2 Dev Team" +VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "© 2015 PCSX2 Dev Team" VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installs PCSX2, a Playstation 2 Emulator for the PC." VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${APP_VERSION}" -VIProductVersion "${APP_VERSION}" +VIProductVersion "${APP_VERSION}.0" diff -Nru pcsx2-1.3.1+dfsg/nsis/nsis_instructions.txt pcsx2-1.4.0/nsis/nsis_instructions.txt --- pcsx2-1.3.1+dfsg/nsis/nsis_instructions.txt 2013-12-31 10:59:17.000000000 +0000 +++ pcsx2-1.4.0/nsis/nsis_instructions.txt 2016-01-05 17:28:08.000000000 +0000 @@ -6,22 +6,9 @@ * Install NSIS Script: Advanced Uninstall Log (you can find it on NSIS wiki) ( Currently at http://nsis.sourceforge.net/Advanced_Uninstall_Log_NSIS_Header ) -/******* - -- Not needed as we now build using VS2013 --: -* Download the Visual C++ 2008 SP1 Redistributable and save it to this nsis/ folder under the name: - vcredist_2008_sp1_x86.exe ( http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe ) -*******/ - -/******* - -- Not needed as we now build using VS2013 --: - * Download the Visual C++ 2010 SP1 Redistributable and save it to this nsis/ folder. - ( http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe ) - Rename the download to "vcredist_2010_sp1_x86.exe". -*******/ - - * Download the Visual C++ 2013 Redistributable and save it to this nsis/ folder. - ( http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe ) - Rename the download to "vcredist_2013_x86.exe". + * Download the Visual C++ 2015 Redistributable and save it to this nsis/ folder. + ( https://www.microsoft.com/en-us/download/details.aspx?id=49984 ) + Rename the download to "vcredist_2015_Update_1_x86". * Download the DirectX Web Installer (dxwebsetup.exe) from Microsoft's website and save it to this nsis/ folder. (currently required, might be made optional later). @@ -33,12 +20,13 @@ * Release SSSE3 (only needed if packaging plugins) * Release SSE4 (only needed if packaging plugins) * Release AVX (only needed if packaging plugins) + * Release AVX2 (only needed if packaging plugins) * Devel (optional) /* not enabled in the installer either, so need to do that as well */ You may selectively unload plugins you do not wish to package prior to running the NSIS script. - * Compile scripts (pcsx2_web_install.nsi and pcsx2_full_install.nsi)! + * Compile script (pcsx2_full_install.nsi)! Output executables will be generated to the output/ folder. @@ -50,7 +38,7 @@ remove some (or all) plugins before running the nsis script, only PCSX2 and whatever remaining plugins will be packaged. -GSdx SSE2, SSSE3, SSE4 and AVX versions are all included into the installer *if* they are present. +GSdx SSE2, SSSE3, SSE4 and AVX/AVX2 versions are all included into the installer *if* they are present. You will need to follow the above instructions and compile all release targets to get all the GSdx DLLs. diff -Nru pcsx2-1.3.1+dfsg/nsis/pcsx2_full_install.nsi pcsx2-1.4.0/nsis/pcsx2_full_install.nsi --- pcsx2-1.3.1+dfsg/nsis/pcsx2_full_install.nsi 2014-07-15 16:30:49.000000000 +0000 +++ pcsx2-1.4.0/nsis/pcsx2_full_install.nsi 2016-01-05 17:28:08.000000000 +0000 @@ -2,22 +2,17 @@ ; PCSX2 Full/Complete Install Package! ; (a NSIS installer script) ; -; Copyright 2009-2014 PCSX2 Dev Team +; Copyright 2009-2015 PCSX2 Dev Team ; -!ifndef INC_CRT_2008 - ; Set to 0 to disable inclusion of Visual Studio 2008 SP1 CRT Redists - !define INC_CRT_2008 0 -!endif - -!ifndef INC_CRT_2010 - ; Set to 0 to disable inclusion of Visual Studio 2010 SP1 CRT Redists - !define INC_CRT_2010 0 +!ifndef INC_CRT_2013 + ; Set to 0 to disable inclusion of Visual Studio 2013 SP1 CRT Redists + !define INC_CRT_2013 0 !endif -!ifndef INC_CRT_2013 +!ifndef INC_CRT_2015 ; Set to 0 to disable inclusion of Visual Studio 2013 SP1 CRT Redists - !define INC_CRT_2013 1 + !define INC_CRT_2015 1 !endif ShowInstDetails nevershow @@ -80,7 +75,6 @@ File ..\bin\Plugins\cdvdGigaherz.dll File /nonfatal /oname=lilypad.dll ..\bin\Plugins\lilypad.dll - File ..\bin\Plugins\PadSSSPSX.dll File /nonfatal ..\bin\Plugins\padPokopom.dll !insertmacro UNINSTALL.LOG_CLOSE_INSTALL @@ -91,102 +85,79 @@ !include "SectionShortcuts.nsh" -; ----------------------------------------------------------------------- -; MSVC Redistributable - required if the user does not already have it -; Note: if your NSIS generates an error here it means you need to download the latest -; visual studio redist package from microsoft. -; -; IMPORTANT: Online references for how to detect the presence of the VS2008 redists LIE. -; None of the methods are reliable, because the registry keys placed by the MSI installer -; vary depending on operating system *and* MSI installer version (youch). -; -!if ${INC_CRT_2008} > 0 -Section "Microsoft Visual C++ 2008 SP1 Redist" SEC_CRT2008 - - SectionIn RO - - ; Downloaded from: - ; http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe - - SetOutPath "$TEMP" - File "vcredist_2008_sp1_x86.exe" - DetailPrint "Running Visual C++ 2008 SP1 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2008_sp1_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2008 SP1 Redistributable Setup" - - Delete "$TEMP\vcredist_2008_sp1_x86.exe" - -SectionEnd -!endif - -!if ${INC_CRT_2010} > 0 -Section "Microsoft Visual C++ 2010 SP1 Redist" SEC_CRT2010 +!if ${INC_CRT_2013} > 0 +Section "Microsoft Visual C++ 2013 Redist" SEC_CRT2013 ;SectionIn RO - ; Detection made easy: Unlike previous redists, VC2010 now generates a + ; Detection made easy: Unlike previous redists, VC2013 now generates a platform ; independent key for checking availability. + ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x64 Windows + ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x86 Windows - ; These locations are current as of Jan. 2014. The code below might not work anymore (rama) - ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\Runtimes\x86 for x64 Windows - ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x86 for x86 Windows ; Downloaded from: - ; http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe + ; http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe ClearErrors - ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86" "Installed" + + ${If} ${RunningX64} + ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" + ${Else} + ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" + ${EndIf} + IfErrors 0 +2 - DetailPrint "Visual C++ 2010 Redistributable registry key was not found; assumed to be uninstalled." + DetailPrint "Visual C++ 2013 Redistributable registry key was not found; assumed to be uninstalled." StrCmp $R0 "1" 0 +3 - DetailPrint "Visual C++ 2010 Redistributable is already installed; skipping!" + DetailPrint "Visual C++ 2013 Redistributable is already installed; skipping!" Goto done SetOutPath "$TEMP" - File "vcredist_2010_sp1_x86.exe" - DetailPrint "Running Visual C++ 2010 SP1 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2010_sp1_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2010 SP1 Redistributable Setup" + File "vcredist_2013_x86.exe" + DetailPrint "Running Visual C++ 2013 Redistributable Setup..." + ExecWait '"$TEMP\vcredist_2013_x86.exe" /qb' + DetailPrint "Finished Visual C++ 2013 Redistributable Setup" - Delete "$TEMP\vcredist_2010_sp1_x86.exe" + Delete "$TEMP\vcredist_2013_x86.exe" done: SectionEnd !endif -!if ${INC_CRT_2013} > 0 -Section "Microsoft Visual C++ 2013 Redist" SEC_CRT2013 +!if ${INC_CRT_2015} > 0 +Section "Microsoft Visual C++ 2015 Redist" SEC_CRT2015 ;SectionIn RO - ; Detection made easy: Unlike previous redists, VC2013 now generates a platform + ; Detection made easy: Unlike previous redists, VC2015 now generates a platform ; independent key for checking availability. - ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x64 Windows - ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x86 Windows + ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86 for x64 Windows + ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86 for x86 Windows ; Downloaded from: - ; http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe + ; https://www.microsoft.com/en-us/download/details.aspx?id=49984 ClearErrors ${If} ${RunningX64} - ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" + ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Installed" ${Else} - ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" + ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x86" "Installed" ${EndIf} IfErrors 0 +2 - DetailPrint "Visual C++ 2013 Redistributable registry key was not found; assumed to be uninstalled." + DetailPrint "Visual C++ 2015 Redistributable registry key was not found; assumed to be uninstalled." StrCmp $R0 "1" 0 +3 - DetailPrint "Visual C++ 2013 Redistributable is already installed; skipping!" + DetailPrint "Visual C++ 2015 Redistributable is already installed; skipping!" Goto done SetOutPath "$TEMP" - File "vcredist_2013_x86.exe" - DetailPrint "Running Visual C++ 2013 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2013_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2013 Redistributable Setup" + File "vcredist_2015_Update_1_x86.exe" + DetailPrint "Running Visual C++ 2015 Redistributable Setup..." + ExecWait '"$TEMP\vcredist_2015_Update_1_x86.exe" /qb' + DetailPrint "Finished Visual C++ 2015 Redistributable Setup" - Delete "$TEMP\vcredist_2013_x86.exe" + Delete "$TEMP\vcredist_2015_Update_1_x86.exe" done: SectionEnd @@ -220,9 +191,8 @@ LangString DESC_STARTMENU ${LANG_ENGLISH} "Adds shortcuts for PCSX2 to the start menu (all users)." LangString DESC_DESKTOP ${LANG_ENGLISH} "Adds a shortcut for PCSX2 to the desktop (all users)." -LangString DESC_CRT2008 ${LANG_ENGLISH} "Required by the PCSX2 binaries packaged in this installer." -LangString DESC_CRT2010 ${LANG_ENGLISH} "Required by the PCSX2 binaries packaged in this installer." LangString DESC_CRT2013 ${LANG_ENGLISH} "Required by the PCSX2 binaries packaged in this installer." +LangString DESC_CRT2015 ${LANG_ENGLISH} "Required by the PCSX2 binaries packaged in this installer." LangString DESC_DIRECTX ${LANG_ENGLISH} "Only uncheck this if you are quite certain your Direct3D runtimes are up to date." !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN @@ -230,18 +200,14 @@ !insertmacro MUI_DESCRIPTION_TEXT ${SEC_STARTMENU} $(DESC_STARTMENU) !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $(DESC_DESKTOP) -!if ${INC_CRT_2008} > 0 - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2008} $(DESC_CRT2008) -!endif - -!if ${INC_CRT_2010} > 0 - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2010} $(DESC_CRT2010) -!endif - !if ${INC_CRT_2013} > 0 !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2013} $(DESC_CRT2013) !endif +!if ${INC_CRT_2015} > 0 + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2015} $(DESC_CRT2015) +!endif + !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DIRECTX} $(DESC_DIRECTX) !insertmacro MUI_FUNCTION_DESCRIPTION_END diff -Nru pcsx2-1.3.1+dfsg/nsis/pcsx2_web_install.nsi pcsx2-1.4.0/nsis/pcsx2_web_install.nsi --- pcsx2-1.3.1+dfsg/nsis/pcsx2_web_install.nsi 2014-07-16 10:46:01.000000000 +0000 +++ pcsx2-1.4.0/nsis/pcsx2_web_install.nsi 1970-01-01 00:00:00.000000000 +0000 @@ -1,337 +0,0 @@ - -; PCSX2 Web-based Install Package! -; (a NSIS installer script) -; -; Copyright 2009-2014 PCSX2 Dev Team -; -; The installer generated by this script will download all relevant components for -; PCSX2 from a variety of mirror hosts. Packages are only downloaded on an as-needed -; basis; this most importantly applies to the very bulky VS 2008 and VS2010 packages. - -!ifndef INC_ZZOGL - ; Includes ZZOGL and CG Toolkit (via web install). Currently not supported (work in progress) - !define INC_ZZOGL 0 -!endif - -!define OUTFILE_POSTFIX "websetup" -!include "SharedBase.nsh" -!include "x64.nsh" - -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES - -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_COMPONENTS -!insertmacro MUI_UNPAGE_INSTFILES - -!insertmacro MUI_LANGUAGE "English" - -!include "ApplyExeProps.nsh" -!include "SharedRedtape.nsh" - -; ======================================================================= -; Installer Sections -; ======================================================================= - -; ----------------------------------------------------------------------- -; Basic section (emulation proper) -Section "!${APP_NAME} (required)" SEC_CORE - - SectionIn RO - -!include "SectionCoreReqs.nsh" - - ; ------------------------------------------ - ; -- Plugins Section -- - ; ------------------------------------------ - -!if ${INC_PLUGINS} > 0 - - ; [TODO] : Eventually the 'latest' plugin packages should be downloaded from one - ; of our mirrors. For now plugins are included in the web installer. - - SetOutPath "$INSTDIR\Plugins" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - - File /nonfatal /oname=gsdx32-sse2.dll ..\bin\Plugins\gsdx32-sse2.dll - File /nonfatal /oname=gsdx32-ssse3.dll ..\bin\Plugins\gsdx32-ssse3.dll - File /nonfatal /oname=gsdx32-sse4.dll ..\bin\Plugins\gsdx32-sse4.dll - File /nonfatal /oname=gsdx32-avx.dll ..\bin\Plugins\gsdx32-avx.dll - File /nonfatal /oname=zerogs.dll ..\bin\Plugins\zerogs.dll - - File /nonfatal /oname=spu2-x.dll ..\bin\Plugins\spu2-x.dll - File /nonfatal /oname=zerospu2.dll ..\bin\Plugins\zerospu2.dll - - File /nonfatal /oname=cdvdiso.dll ..\bin\Plugins\cdvdiso.dll - File ..\bin\Plugins\cdvdGigaherz.dll - - File /nonfatal /oname=lilypad.dll ..\bin\Plugins\lilypad.dll - File ..\bin\Plugins\PadSSSPSX.dll - File /nonfatal ..\bin\Plugins\padPokopom.dll - - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - -!endif - -SectionEnd - -!include "SectionShortcuts.nsh" - -!if ${INC_ZZOGL} > 0 -Section "ZZogl Plugin (requires OpenGL)" - - SetOutPath "$INSTDIR\Plugins" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - File /oname=zzogl-pg.dll ..\bin\Plugins\zzogl-pg.dll - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - -SectionEnd - -Section "Nvidia's CG Toolkit" - - ; This section is required by anything using OpenGL, typically. - ; It should be automatically checked when ZZogl is enabled. - - ; CG Toolkit would be downloaded from here: - ; http://developer.download.nvidia.com/cg/Cg_2.2/Cg-2.2_February2010_Setup.exe - -SectionEnd -!endif - -; ----------------------------------------------------------------------- -; MSVC Redistributable - required if the user does not already have it -; Note: if your NSIS generates an error here it means you need to download the latest -; visual studio redist package from microsoft. -; -; IMPORTANT: Online references for how to detect the presence of the VS2008 redists LIE. -; None of the methods are reliable, because the registry keys placed by the MSI installer -; vary depending on operating system *and* MSI installer version (youch). -; -!if 0 ; Not required anymore, we're compiling with vs2010 (there's another commented out section below. search "SEC_CRT2008"). -Section "Microsoft Visual C++ 2008 SP1 Redist" SEC_CRT2008 - - ;SectionIn RO - - ; Downloaded from: - ; http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe - - SetOutPath "$TEMP" - - DetailPrint "Downloading Visual C++ 2008 SP1 Redistributable Setup..." - DetailPrint "Contacting Microsoft.com..." - NSISdl::download /TIMEOUT=15000 "http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe" "vcredist_2008_sp1_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" OnSuccess - DetailPrint "Cound not contact Microsoft.com, or the file has been (re)moved!" - DetailPrint "Contacting Googlecode.com..." - NSISdl::download /TIMEOUT=20000 "http://pcsx2.googlecode.com/files/vcredist_2008_sp1_x86.exe" "vcredist_2008_sp1_x86.exe" - - ; [TODO] Provide a mirror for this file hosted from pcsx2.net .. ? or emudev.net .. ? - ;Pop $R0 ;Get the return value - ;StrCmp $R0 "success" +2 - ;NSISdl::download /TIMEOUT=15000 "http://www.pcsx2.net/vcredist_x86.exe" "vcredist_2008_sp1_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" +2 - MessageBox MB_OK "Could not download Visual Studio 2008 Redist; none of the mirrors appear to be functional." - Goto done - -OnSuccess: - DetailPrint "Running Visual C++ 2008 SP1 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2008_sp1_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2008 SP1 Redistributable Setup" - Delete "$TEMP\vcredist_2008_sp1_x86.exe" - -done: -SectionEnd - -Section "Microsoft Visual C++ 2010 SP1 Redist" SEC_CRT2010 - - ; Make this required on the web installer, since it has a fully reliable check to - ; see if it needs to be downloaded and installed or not. - SectionIn RO - - ; Detection made easy: Unlike previous redists, VC2010 now generates a - ; independent key for checking availability. - - ; These locations are current as of Jan. 2014. The code below might not work anymore (rama) - ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\10.0\VC\Runtimes\x86 for x64 Windows - ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\VC\Runtimes\x86 for x86 Windows - - ; Downloaded from: - ; http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe - - ClearErrors - ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86" "Installed" - IfErrors 0 +2 - DetailPrint "Visual C++ 2010 Redistributable registry key was not found; assumed to be uninstalled." - StrCmp $R0 "1" 0 +3 - DetailPrint "Visual C++ 2010 Redistributable is already installed; skipping!" - Goto done - - SetOutPath "$TEMP" - - DetailPrint "Downloading Visual C++ 2010 SP1 Redistributable Setup..." - DetailPrint "Contacting Microsoft.com..." - NSISdl::download /TIMEOUT=15000 "http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe" "vcredist_2010_sp1_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" OnSuccess - DetailPrint "Cound not contact Microsoft.com, or the file has been (re)moved!" - DetailPrint "Contacting Googlecode.com..." - NSISdl::download /TIMEOUT=20000 "http://pcsx2.googlecode.com/files/vcredist_2010_sp1_x86.exe" "vcredist_2010_sp1_x86.exe" - - ; [TODO] Provide a mirror for this file hosted from pcsx2.net .. ? or emudev.net .. ? - ;Pop $R0 ;Get the return value - ;StrCmp $R0 "success" +2 - ;NSISdl::download /TIMEOUT=30000 "http://www.pcsx2.net/vcredist_x86.exe" "vcredist_2010_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" +2 - MessageBox MB_OK "Could not download Visual Studio 2010 SP1 Redist; none of the mirrors appear to be functional." - Goto done - -OnSuccess: - DetailPrint "Running Visual C++ 2010 SP1 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2010_sp1_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2010 SP1 Redistributable Setup" - - Delete "$TEMP\vcredist_2010_sp1_x86.exe" - -done: -SectionEnd -!endif - -Section "Microsoft Visual C++ 2013 SP1 Redist" SEC_CRT2013 - - ; Make this required on the web installer, since it has a fully reliable check to - ; see if it needs to be downloaded and installed or not. - SectionIn RO - - ; Detection made easy: Unlike previous redists, VC2013 now generates a platform - ; independent key for checking availability. - ; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x64 Windows - ; HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86 for x86 Windows - - ; Download from: - ; http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe - - ClearErrors - - ${If} ${RunningX64} - ReadRegDword $R0 HKLM "SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" - ${Else} - ReadRegDword $R0 HKLM "SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" "Installed" - ${EndIf} - - IfErrors 0 +2 - DetailPrint "Visual C++ 2013 Redistributable registry key was not found; assumed to be uninstalled." - StrCmp $R0 "1" 0 +3 - DetailPrint "Visual C++ 2013 Redistributable is already installed; skipping!" - Goto done - - SetOutPath "$TEMP" - - DetailPrint "Downloading Visual C++ 2013 Redistributable Setup..." - DetailPrint "Contacting Microsoft.com..." - NSISdl::download /TIMEOUT=15000 "http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe" "vcredist_2013_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" OnSuccess - DetailPrint "Could not contact Microsoft.com, or the file has been (re)moved!" - DetailPrint "Contacting Googlecode.com..." - NSISdl::download /TIMEOUT=20000 "http://pcsx2.googlecode.com/files/vcredist_2013_x86.exe" "vcredist_2013_x86.exe" - - ; [TODO] Provide a mirror for this file hosted from pcsx2.net .. ? or emudev.net .. ? - ;Pop $R0 ;Get the return value - ;StrCmp $R0 "success" +2 - ;NSISdl::download /TIMEOUT=30000 "http://www.pcsx2.net/vcredist_x86.exe" "vcredist_2013_x86.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" +2 - MessageBox MB_OK "Could not download Visual Studio 2013 Redist; none of the mirrors appear to be functional." - Goto done - -OnSuccess: - DetailPrint "Running Visual C++ 2013 Redistributable Setup..." - ExecWait '"$TEMP\vcredist_2013_x86.exe" /qb' - DetailPrint "Finished Visual C++ 2013 SP1 Redistributable Setup" - - Delete "$TEMP\vcredist_2013_x86.exe" - -done: -SectionEnd - -; ----------------------------------------------------------------------- -; This section needs to be last, so that in case it fails, the rest of the program will -; be installed cleanly. -; -; This section could be optional, but why not? It's pretty painless to double-check that -; all the libraries are up-to-date. -; -Section "DirectX Web Setup" SEC_DIRECTX - - ;SectionIn RO - - SetOutPath "$TEMP" - - DetailPrint "Downloading DirectX Web Setup..." - DetailPrint "Contacting Microsoft.com..." - NSISdl::download /TIMEOUT=15000 "http://download.microsoft.com/download/1/7/1/1718CCC4-6315-4D8E-9543-8E28A4E18C4C/dxwebsetup.exe" dxwebsetup.exe - - ; No mirrors provided for the dx web setup. Either we get it from Microsoft, or we don't bother. - ; (this is done because there's a good chance the dxwebsetup we provide won't work anyway, if Microsoft - ; has in fact re-arranged their website (again)). - - ;Pop $R0 ;Get the return value - ;StrCmp $R0 "success" OnSuccess - ;DetailPrint "Could not contact Microsoft.com, or the file has been (re)moved!" - ;DetailPrint "Contacting Googlecode.com..." - ;NSISdl::download /TIMEOUT=20000 "http://code.google.com/dxwebsetup01.exe" "dxwebsetup.exe" - - Pop $R0 ;Get the return value - StrCmp $R0 "success" OnSuccess - DetailPrint "Could not contact Microsoft.com, or the file has been (re)moved!" - MessageBox MB_OK "Could not download the DirectX Web Setup. Microsoft probably rearranged their website. Please do an internet search for 'DirectX Setup' and download and install it yourself after this installer has finished." - Goto done - - ;Pop $R0 ;Get the return value - ;StrCmp $R0 "success" +2 - ;NSISdl::download /TIMEOUT=30000 "http://www.pcsx2.net/dxwebsetup.exe" "dxwebsetup.exe" - -OnSuccess: - DetailPrint "Running DirectX Web Setup..." - ExecWait '"$TEMP\dxwebsetup.exe" /Q' $DirectXSetupError - DetailPrint "Finished DirectX Web Setup" - Delete "$TEMP\dxwebsetup.exe" - -done: - -SectionEnd - -!include "SectionUninstaller.nsh" - -LangString DESC_CORE ${LANG_ENGLISH} "Core components (binaries, plugins, languages, etc)." - -LangString DESC_STARTMENU ${LANG_ENGLISH} "Adds shortcuts for PCSX2 to the start menu (all users)." -LangString DESC_DESKTOP ${LANG_ENGLISH} "Adds a shortcut for PCSX2 to the desktop (all users)." - -LangString DESC_CRT2008 ${LANG_ENGLISH} "Required! Only uncheck if you are certain this component is already installed." -LangString DESC_CRT2010 ${LANG_ENGLISH} "Will only be downloaded if you don't already have it installed." -LangString DESC_CRT2013 ${LANG_ENGLISH} "Will only be downloaded if you don't already have it installed." -LangString DESC_DIRECTX ${LANG_ENGLISH} "Only uncheck this if you are quite certain your Direct3D runtimes are up to date." - -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CORE} $(DESC_CORE) - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_STARTMENU} $(DESC_STARTMENU) - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DESKTOP} $(DESC_DESKTOP) - -!if 0 - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2008} $(DESC_CRT2008) - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2010} $(DESC_CRT2010) -!endif - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRT2013} $(DESC_CRT2013) - !insertmacro MUI_DESCRIPTION_TEXT ${SEC_DIRECTX} $(DESC_DIRECTX) -!insertmacro MUI_FUNCTION_DESCRIPTION_END diff -Nru pcsx2-1.3.1+dfsg/nsis/SectionCoreReqs.nsh pcsx2-1.4.0/nsis/SectionCoreReqs.nsh --- pcsx2-1.3.1+dfsg/nsis/SectionCoreReqs.nsh 2014-07-16 10:46:01.000000000 +0000 +++ pcsx2-1.4.0/nsis/SectionCoreReqs.nsh 2016-01-05 17:28:08.000000000 +0000 @@ -1,84 +1,84 @@ - - ; --- UAC NIGHTMARES --- - ; Ideally this would default to 'current' for user-level installs and 'all' for admin-level installs. - ; There are problems to be aware of, however! - ; - ; * If the user is an admin, Windows Vista/7 will DEFAULT to an "all" shell context (installing shortcuts - ; for all users), even if we don't want it to (which causes the uninstaller to fail!) - ; * If the user is not an admin, setting Shell Context to all will cause the installer to fail because the - ; user won't have permission enough to install it at all (sigh). - ; - ; For now we just require Admin rights to install PCSX2. An ideal solution would be to use our IsUserAdmin - ; function to auto-detect and modify nsis installer behavior accordingly. - ; - ; (note! the SetShellVarContext use in the uninstaller section must match this one!) - - SetShellVarContext all - ;SetShellVarContext current - - SetOutPath "$INSTDIR" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - File /oname=${APP_EXE} ..\bin\pcsx2.exe - ;File /nonfatal /oname=pcsx2-dev.exe ..\bin\pcsx2-dev.exe - - ; ------------------------------------------ - ; -- Shared Core Components -- - ; ------------------------------------------ - ; (Binaries, shared DLLs, null plugins, game database, languages, etc) - - ; Note that v3 pthreads is compatible with v4 pthreads, so we just copy v4 over both - ; filenames. This allows many older plugin versions to continue to work. - - File ..\bin\w32pthreads.v4.dll - ; See above comment. - File /oname=w32pthreads.v3.dll ..\bin\w32pthreads.v4.dll - File ..\bin\GameIndex.dbf - File ..\bin\cheats_ws.zip - - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - - SetOutPath "$INSTDIR\Cheats" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - File ..\bin\Cheats\* - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - - SetOutPath "$INSTDIR\Docs" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - File ..\bin\docs\* - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - - SetOutPath "$INSTDIR\Plugins" - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - ; NULL plugins are required, because the PCSX2 plugin selector needs a dummy plugin in every slot - ; in order to run (including CDVD!) -- and really there should be more but we don't have working - ; SPU2 null plugins right now. - - File ..\bin\Plugins\GSnull.dll - ;File ..\bin\Plugins\SPU2null.dll - File ..\bin\Plugins\USBnull.dll - File ..\bin\Plugins\DEV9null.dll - File ..\bin\Plugins\FWnull.dll - File ..\bin\Plugins\CDVDnull.dll - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - - !if ${INC_LANGS} > 0 - SetOutPath $INSTDIR\Langs - !insertmacro UNINSTALL.LOG_OPEN_INSTALL - File /nonfatal /r ..\bin\Langs\*.mo - !insertmacro UNINSTALL.LOG_CLOSE_INSTALL - !endif - - - ; ------------------------------------------ - ; -- Registry Section -- - ; ------------------------------------------ - - ; Write the installation path into the registry - WriteRegStr HKLM Software\PCSX2 "Install_Dir" "$INSTDIR" - - ; Write the uninstall keys for Windows - WriteRegStr HKLM "${INSTDIR_REG_KEY}" "DisplayName" "PCSX2 - Playstation 2 Emulator" - WriteRegStr HKLM "${INSTDIR_REG_KEY}" "UninstallString" "${UNINST_EXE}" - WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoModify" 1 - WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoRepair" 1 - WriteUninstaller "${UNINST_EXE}" + + ; --- UAC NIGHTMARES --- + ; Ideally this would default to 'current' for user-level installs and 'all' for admin-level installs. + ; There are problems to be aware of, however! + ; + ; * If the user is an admin, Windows Vista/7 will DEFAULT to an "all" shell context (installing shortcuts + ; for all users), even if we don't want it to (which causes the uninstaller to fail!) + ; * If the user is not an admin, setting Shell Context to all will cause the installer to fail because the + ; user won't have permission enough to install it at all (sigh). + ; + ; For now we just require Admin rights to install PCSX2. An ideal solution would be to use our IsUserAdmin + ; function to auto-detect and modify nsis installer behavior accordingly. + ; + ; (note! the SetShellVarContext use in the uninstaller section must match this one!) + + SetShellVarContext all + ;SetShellVarContext current + + SetOutPath "$INSTDIR" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /oname=${APP_EXE} ..\bin\pcsx2.exe + ;File /nonfatal /oname=pcsx2-dev.exe ..\bin\pcsx2-dev.exe + + ; ------------------------------------------ + ; -- Shared Core Components -- + ; ------------------------------------------ + ; (Binaries, shared DLLs, null plugins, game database, languages, etc) + + File ..\bin\GameIndex.dbf + File ..\bin\cheats_ws.zip + File ..\bin\PCSX2_keys.ini.default + + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + + SetOutPath "$INSTDIR\Cheats" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File ..\bin\Cheats\* + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + + SetOutPath "$INSTDIR\Docs" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File ..\bin\docs\* + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + + SetOutPath "$INSTDIR\Shaders" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File ..\bin\shaders\* + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + + SetOutPath "$INSTDIR\Plugins" + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + ; NULL plugins are required, because the PCSX2 plugin selector needs a dummy plugin in every slot + ; in order to run (including CDVD!) -- and really there should be more but we don't have working + ; SPU2 null plugins right now. + + File ..\bin\Plugins\GSnull.dll + ;File ..\bin\Plugins\SPU2null.dll + File ..\bin\Plugins\USBnull.dll + File ..\bin\Plugins\DEV9null.dll + File ..\bin\Plugins\FWnull.dll + File ..\bin\Plugins\CDVDnull.dll + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + + !if ${INC_LANGS} > 0 + SetOutPath $INSTDIR\Langs + !insertmacro UNINSTALL.LOG_OPEN_INSTALL + File /nonfatal /r ..\bin\Langs\*.mo + !insertmacro UNINSTALL.LOG_CLOSE_INSTALL + !endif + + + ; ------------------------------------------ + ; -- Registry Section -- + ; ------------------------------------------ + + ; Write the installation path into the registry + WriteRegStr HKLM Software\PCSX2 "Install_Dir" "$INSTDIR" + + ; Write the uninstall keys for Windows + WriteRegStr HKLM "${INSTDIR_REG_KEY}" "DisplayName" "PCSX2 - Playstation 2 Emulator" + WriteRegStr HKLM "${INSTDIR_REG_KEY}" "UninstallString" "${UNINST_EXE}" + WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoModify" 1 + WriteRegDWORD HKLM "${INSTDIR_REG_KEY}" "NoRepair" 1 + WriteUninstaller "${UNINST_EXE}" diff -Nru pcsx2-1.3.1+dfsg/nsis/SectionUninstaller.nsh pcsx2-1.4.0/nsis/SectionUninstaller.nsh --- pcsx2-1.3.1+dfsg/nsis/SectionUninstaller.nsh 2014-01-26 18:00:14.000000000 +0000 +++ pcsx2-1.4.0/nsis/SectionUninstaller.nsh 2016-01-05 17:28:08.000000000 +0000 @@ -1,8 +1,7 @@ ; ======================================================================= ; Un.Installer Sections ; ======================================================================= -; (currently web and main installers share the same uninstaller behavior. This -; may change in the future, though I doubt it.) + ; ----------------------------------------------------------------------- Section "Un.Program and Plugins ${APP_NAME}" @@ -23,6 +22,7 @@ !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\Plugins" !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\Docs" !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\Cheats" + !insertmacro UNINSTALL.LOG_UNINSTALL "$INSTDIR\Shaders" ; Remove files and registry key that store PCSX2 paths configurations SetShellVarContext current Delete $DOCUMENTS\PCSX2\inis\PCSX2_ui.ini @@ -42,6 +42,7 @@ SetShellVarContext current RMDir /r "$DOCUMENTS\PCSX2\Cheats_ws\" + RMDir /r "$DOCUMENTS\PCSX2\cheats\" RMDir /r "$DOCUMENTS\PCSX2\inis\" RMDir /r "$DOCUMENTS\PCSX2\logs\" RMDir /r "$DOCUMENTS\PCSX2\memcards\" diff -Nru pcsx2-1.3.1+dfsg/nsis/SharedBase.nsh pcsx2-1.4.0/nsis/SharedBase.nsh --- pcsx2-1.3.1+dfsg/nsis/SharedBase.nsh 2014-07-08 00:38:06.000000000 +0000 +++ pcsx2-1.4.0/nsis/SharedBase.nsh 2016-01-05 17:28:08.000000000 +0000 @@ -30,7 +30,7 @@ ; uninstall folders. !ifndef APP_VERSION - !define APP_VERSION "1.2.1.0" + !define APP_VERSION "1.4.0" !endif !define APP_NAME "PCSX2 ${APP_VERSION}" diff -Nru pcsx2-1.3.1+dfsg/old_plugins_2013.sln pcsx2-1.4.0/old_plugins_2013.sln --- pcsx2-1.3.1+dfsg/old_plugins_2013.sln 2014-12-13 11:24:41.000000000 +0000 +++ pcsx2-1.4.0/old_plugins_2013.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,893 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" - ProjectSection(SolutionItems) = preProject - 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" - ProjectSection(SolutionItems) = preProject - common\svn_readme.txt = common\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" - ProjectSection(SolutionItems) = preProject - common\include\afxresmw.h = common\include\afxresmw.h - common\include\intrin_x86.h = common\include\intrin_x86.h - common\include\Pcsx2Api.h = common\include\Pcsx2Api.h - common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h - common\include\Pcsx2Types.h = common\include\Pcsx2Types.h - common\include\PluginCallbacks.h = common\include\PluginCallbacks.h - common\include\PS2Etypes.h = common\include\PS2Etypes.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" - ProjectSection(SolutionItems) = preProject - common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZeroGS", "plugins\zerogs\dx\Windows\zerogs_vs2013.vcxproj", "{5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}" - ProjectSection(ProjectDependencies) = postProject - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDiso", "plugins\CDVDiso\src\Windows\CDVDiso_vs2013.vcxproj", "{5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch_vs2013.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib_vs2013.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "3rdparty\bzip2\bzip2_vs2013.vcxproj", "{F4EB4AB2-C595-4B05-8BC0-059024BC796C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads.v4", "3rdparty\w32pthreads\pthreads_vs2013.vcxproj", "{26511268-2902-4997-8421-ECD7055F9E28}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZeroSPU2", "plugins\zerospu2\Windows\ZeroSPU2_vs2013.vcxproj", "{7F059854-568D-4E08-9D00-1E78E203E4DC}" - ProjectSection(ProjectDependencies) = postProject - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} - {26511268-2902-4997-8421-ECD7055F9E28} = {26511268-2902-4997-8421-ECD7055F9E28} - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} = {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDolio", "plugins\CDVDolio\cdvd_vs2013.vcxproj", "{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "3rdparty\wxWidgets\build\msw\wx_base_vs2013.vcxproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "3rdparty\wxWidgets\build\msw\wx_core_vs2013.vcxproj", "{0318BA30-EF48-441A-9E10-DC85EFAE39F0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig28", "3rdparty\wxWidgets\build\msw\wx_config_vs2013.vcxproj", "{C34487AF-228A-4D11-8E50-27803DF76873}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x86emitter", "common\build\x86emitter\x86emitter_vs2013.vcxproj", "{A51123F5-9505-4EAE-85E7-D320290A272C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities_vs2013.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "3rdparty\wxWidgets\build\msw\wx_adv_vs2013.vcxproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg_vs2013.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads_lib", "3rdparty\w32pthreads\pthreads_lib_vs2013.vcxproj", "{7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PadSSSPSX", "plugins\SSSPSXPAD\PadSSSPSX_vs2013.vcxproj", "{6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZZOgl", "plugins\zzogl-pg\opengl\Win32\zerogsogl_vs2013.vcxproj", "{2D4E85B2-F47F-4D65-B091-701E5C031DAC}" - ProjectSection(ProjectDependencies) = postProject - {4639972E-424E-4E13-8B07-CA403C481346} = {4639972E-424E-4E13-8B07-CA403C481346} - {BC236261-77E8-4567-8D09-45CD02965EB6} = {BC236261-77E8-4567-8D09-45CD02965EB6} - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu_vs2013.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug AVX|Win32 = Debug AVX|Win32 - Debug AVX|x64 = Debug AVX|x64 - Debug AVX2|Win32 = Debug AVX2|Win32 - Debug AVX2|x64 = Debug AVX2|x64 - Debug SSE2|Win32 = Debug SSE2|Win32 - Debug SSE2|x64 = Debug SSE2|x64 - Debug SSE4|Win32 = Debug SSE4|Win32 - Debug SSE4|x64 = Debug SSE4|x64 - Debug SSSE3|Win32 = Debug SSSE3|Win32 - Debug SSSE3|x64 = Debug SSSE3|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Devel|Win32 = Devel|Win32 - Devel|x64 = Devel|x64 - Release AVX|Win32 = Release AVX|Win32 - Release AVX|x64 = Release AVX|x64 - Release AVX2|Win32 = Release AVX2|Win32 - Release AVX2|x64 = Release AVX2|x64 - Release SSE2|Win32 = Release SSE2|Win32 - Release SSE2|x64 = Release SSE2|x64 - Release SSE4|Win32 = Release SSE4|Win32 - Release SSE4|x64 = Release SSE4|x64 - Release SSSE3|Win32 = Release SSSE3|Win32 - Release SSSE3|x64 = Release SSSE3|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|Win32.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|Win32.Build.0 = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|x64.ActiveCfg = Debug|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|Win32.ActiveCfg = Devel|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|Win32.Build.0 = Devel|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|x64.ActiveCfg = Devel|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX|Win32.Build.0 = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX|x64.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX2|Win32.Build.0 = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE2|Win32.Build.0 = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE4|Win32.Build.0 = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release|Win32.ActiveCfg = Release|Win32 - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|Win32.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|Win32.Build.0 = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|x64.ActiveCfg = Debug|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|Win32.ActiveCfg = Devel|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|Win32.Build.0 = Devel|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|x64.ActiveCfg = Devel|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX2|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE2|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE4|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|Win32.ActiveCfg = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|Win32.Build.0 = Release|Win32 - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|Win32.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|Win32.Build.0 = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|x64.ActiveCfg = Debug|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|Win32.ActiveCfg = Devel|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|Win32.Build.0 = Devel|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|x64.ActiveCfg = Devel|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX2|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE2|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE4|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|Win32.ActiveCfg = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|Win32.Build.0 = Release|Win32 - {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.Build.0 = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|x64.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|Win32.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|Win32.Build.0 = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|x64.ActiveCfg = Debug|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|Win32.ActiveCfg = Devel|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|Win32.Build.0 = Devel|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|x64.ActiveCfg = Devel|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX|Win32.Build.0 = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX2|Win32.Build.0 = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release AVX2|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE2|Win32.Build.0 = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE4|Win32.Build.0 = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release|Win32.ActiveCfg = Release|Win32 - {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release|x64.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug AVX|x64.ActiveCfg = Debug|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.Build.0 = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|x64.ActiveCfg = Debug|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX2|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release AVX2|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE2|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE2|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE4|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSE4|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSSE3|Win32.Build.0 = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release SSSE3|x64.ActiveCfg = Release|x64 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|Win32.ActiveCfg = Release|Win32 - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|x64.ActiveCfg = Release|x64 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.Build.0 = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|x64.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.Build.0 = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|x64.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.ActiveCfg = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.Build.0 = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.Build.0 = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|x64.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.Build.0 = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|x64.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.Build.0 = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|x64.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|Win32.Build.0 = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|Win32.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|Win32.Build.0 = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|x64.ActiveCfg = Debug|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX|Win32.Build.0 = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX2|Win32.Build.0 = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release AVX2|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE2|Win32.Build.0 = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE2|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE4|Win32.Build.0 = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSE4|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release|Win32.ActiveCfg = Release|Win32 - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.Build.0 = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|x64.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.ActiveCfg = Devel|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.Build.0 = Devel|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|x64.ActiveCfg = Devel|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX|Win32.Build.0 = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX2|Win32.Build.0 = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release AVX2|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE2|Win32.Build.0 = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE4|Win32.Build.0 = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug|Win32.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug|Win32.Build.0 = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Debug|x64.ActiveCfg = Debug|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Devel|Win32.ActiveCfg = Devel|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Devel|Win32.Build.0 = Devel|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Devel|x64.ActiveCfg = Devel|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX2|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release AVX2|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE2|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE2|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE4|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSE4|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSSE3|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release|Win32.ActiveCfg = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release|Win32.Build.0 = Release|Win32 - {019773FA-2DAA-4C12-9511-BD2D4EB2A718}.Release|x64.ActiveCfg = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} - {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {F4EB4AB2-C595-4B05-8BC0-059024BC796C} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {26511268-2902-4997-8421-ECD7055F9E28} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {7F059854-568D-4E08-9D00-1E78E203E4DC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {C34487AF-228A-4D11-8E50-27803DF76873} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {A51123F5-9505-4EAE-85E7-D320290A272C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {2D4E85B2-F47F-4D65-B091-701E5C031DAC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {E613DA9F-41B4-4613-9911-E418EF5533BC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {019773FA-2DAA-4C12-9511-BD2D4EB2A718} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/old_plugins.sln pcsx2-1.4.0/old_plugins.sln --- pcsx2-1.3.1+dfsg/old_plugins.sln 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/old_plugins.sln 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,274 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" + ProjectSection(SolutionItems) = preProject + 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" + ProjectSection(SolutionItems) = preProject + common\svn_readme.txt = common\svn_readme.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" + ProjectSection(SolutionItems) = preProject + common\include\afxresmw.h = common\include\afxresmw.h + common\include\intrin_x86.h = common\include\intrin_x86.h + common\include\Pcsx2Api.h = common\include\Pcsx2Api.h + common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h + common\include\Pcsx2Types.h = common\include\Pcsx2Types.h + common\include\PluginCallbacks.h = common\include\PluginCallbacks.h + common\include\PS2Etypes.h = common\include\PS2Etypes.h + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" + ProjectSection(SolutionItems) = preProject + common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZeroGS", "plugins\zerogs\dx\Windows\zerogs.vcxproj", "{5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDiso", "plugins\CDVDiso\src\Windows\CDVDiso.vcxproj", "{5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bzip2", "3rdparty\bzip2\bzip2.vcxproj", "{F4EB4AB2-C595-4B05-8BC0-059024BC796C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZeroSPU2", "plugins\zerospu2\Windows\ZeroSPU2.vcxproj", "{7F059854-568D-4E08-9D00-1E78E203E4DC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDolio", "plugins\CDVDolio\CDVDolio.vcxproj", "{FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PadSSSPSX", "plugins\SSSPSXPAD\PadSSSPSX.vcxproj", "{6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZZOgl", "plugins\zzogl-pg\opengl\Win32\zerogsogl.vcxproj", "{2D4E85B2-F47F-4D65-B091-701E5C031DAC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase30", "3rdparty\wxwidgets3.0\build\msw\wx30_base.vcxproj", "{3FCC50C2-81E9-5DB2-B8D8-2129427568B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig30", "3rdparty\wxwidgets3.0\build\msw\wx30_config.vcxproj", "{01F4CE10-2CFB-41A8-B41F-E54337868A1D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore30", "3rdparty\wxwidgets3.0\build\msw\wx30_core.vcxproj", "{6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "3rdparty\libpng\projects\vstudio\libpng\libpng.vcxproj", "{D6973076-9317-4EF2-A0B8-B7A18AC0713E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pthreads4w", "3rdparty\pthreads4w\build\pthreads4w.vcxproj", "{0FAE817D-9A32-4830-857E-81DA57246E16}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Devel|Win32 = Devel|Win32 + Devel|x64 = Devel|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|Win32.ActiveCfg = Debug|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|Win32.Build.0 = Debug|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Debug|x64.ActiveCfg = Debug|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|Win32.ActiveCfg = Devel|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|Win32.Build.0 = Devel|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Devel|x64.ActiveCfg = Devel|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release|Win32.ActiveCfg = Release|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release|Win32.Build.0 = Release|Win32 + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8}.Release|x64.ActiveCfg = Release|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|Win32.ActiveCfg = Debug|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|Win32.Build.0 = Debug|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Debug|x64.ActiveCfg = Debug|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|Win32.ActiveCfg = Devel|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|Win32.Build.0 = Devel|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Devel|x64.ActiveCfg = Devel|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|Win32.ActiveCfg = Release|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|Win32.Build.0 = Release|Win32 + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3}.Release|x64.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.Build.0 = Debug|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.Build.0 = Devel|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.Build.0 = Release|x64 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|Win32.ActiveCfg = Debug|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|Win32.Build.0 = Debug|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Debug|x64.ActiveCfg = Debug|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|Win32.ActiveCfg = Devel|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|Win32.Build.0 = Devel|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Devel|x64.ActiveCfg = Devel|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|Win32.ActiveCfg = Release|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|Win32.Build.0 = Release|Win32 + {F4EB4AB2-C595-4B05-8BC0-059024BC796C}.Release|x64.ActiveCfg = Release|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|Win32.ActiveCfg = Debug|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|Win32.Build.0 = Debug|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Debug|x64.ActiveCfg = Debug|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|Win32.ActiveCfg = Devel|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|Win32.Build.0 = Devel|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Devel|x64.ActiveCfg = Devel|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release|Win32.ActiveCfg = Release|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release|Win32.Build.0 = Release|Win32 + {7F059854-568D-4E08-9D00-1E78E203E4DC}.Release|x64.ActiveCfg = Release|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.ActiveCfg = Debug|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|Win32.Build.0 = Debug|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|x64.ActiveCfg = Debug|x64 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Debug|x64.Build.0 = Debug|x64 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.ActiveCfg = Release|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|Win32.Build.0 = Release|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|x64.ActiveCfg = Release|x64 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Devel|x64.Build.0 = Release|x64 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|Win32.ActiveCfg = Release|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|Win32.Build.0 = Release|Win32 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|x64.ActiveCfg = Release|x64 + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB}.Release|x64.Build.0 = Release|x64 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|Win32.ActiveCfg = Debug|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|Win32.Build.0 = Debug|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Debug|x64.ActiveCfg = Debug|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|Win32.ActiveCfg = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|Win32.Build.0 = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Devel|x64.ActiveCfg = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release|Win32.ActiveCfg = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release|Win32.Build.0 = Release|Win32 + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9}.Release|x64.ActiveCfg = Release|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.ActiveCfg = Debug|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.Build.0 = Debug|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|x64.ActiveCfg = Debug|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.ActiveCfg = Devel|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.Build.0 = Devel|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|x64.ActiveCfg = Devel|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|Win32.ActiveCfg = Release|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|Win32.Build.0 = Release|Win32 + {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|x64.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|Win32.ActiveCfg = Devel|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|Win32.Build.0 = Devel|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|x64.ActiveCfg = Devel|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|x64.Build.0 = Devel|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|Win32.Build.0 = Debug|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|x64.ActiveCfg = Debug|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|x64.Build.0 = Debug|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|Win32.ActiveCfg = Devel|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|Win32.Build.0 = Devel|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|x64.ActiveCfg = Devel|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|x64.Build.0 = Devel|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.ActiveCfg = Debug|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.Build.0 = Debug|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|x64.ActiveCfg = Debug|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|x64.Build.0 = Debug|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|Win32.ActiveCfg = Devel|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|Win32.Build.0 = Devel|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|x64.ActiveCfg = Devel|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|x64.Build.0 = Devel|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|x64.Build.0 = Release|x64 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|Win32.ActiveCfg = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|Win32.Build.0 = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|x64.ActiveCfg = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|Win32.ActiveCfg = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|Win32.Build.0 = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|x64.ActiveCfg = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|x64.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|Win32.Build.0 = Debug|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|x64.ActiveCfg = Debug|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|x64.Build.0 = Debug|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|Win32.ActiveCfg = Devel|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|Win32.Build.0 = Devel|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|x64.ActiveCfg = Devel|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|x64.Build.0 = Devel|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} + {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} + {5C6B7D28-E73D-4F71-8FC0-17ADA640EBD8} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {5F78E90B-BD22-47B1-9CA5-7A80F4DF5EF3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {F4EB4AB2-C595-4B05-8BC0-059024BC796C} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {7F059854-568D-4E08-9D00-1E78E203E4DC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {FCDF5AE2-EA47-4CC6-9F20-23A0517FEBCB} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} + {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {6C8D28E4-447E-4856-BD9E-6B8F5E7C58C9} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {2D4E85B2-F47F-4D65-B091-701E5C031DAC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {E613DA9F-41B4-4613-9911-E418EF5533BC} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {01F4CE10-2CFB-41A8-B41F-E54337868A1D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {D6973076-9317-4EF2-A0B8-B7A18AC0713E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {0FAE817D-9A32-4830-857E-81DA57246E16} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + EndGlobalSection +EndGlobal diff -Nru pcsx2-1.3.1+dfsg/pcsx2/AsyncFileReader.h pcsx2-1.4.0/pcsx2/AsyncFileReader.h --- pcsx2-1.3.1+dfsg/pcsx2/AsyncFileReader.h 2014-08-15 20:48:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/AsyncFileReader.h 2016-01-05 17:28:08.000000000 +0000 @@ -25,7 +25,7 @@ class AsyncFileReader { protected: - AsyncFileReader() : m_dataoffset(0) {} + AsyncFileReader() : m_dataoffset(0), m_blocksize(0) {} wxString m_filename; @@ -97,22 +97,6 @@ virtual void SetDataOffset(int bytes) { m_dataoffset = bytes; } }; -// Factory - creates an AsyncFileReader derived instance which can read a compressed file -class CompressedFileReader { -public: - // Checks if any of the available compressed file handlers can open this - static bool DetectCompressed(AsyncFileReader* pReader); - - // fileName is only used to choose the compressed reader. - // If no matching handler is found then an arbitrary handlers will be returned. - // The returned instance still needs ->Open(filename) before usage. - // Open(filename) may still fail. - static AsyncFileReader* GetNewReader(const wxString& fileName); - -private: - virtual ~CompressedFileReader() = 0; -}; - class MultipartFileReader : public AsyncFileReader { DeclareNoncopyableObject( MultipartFileReader ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/BlockdumpFileReader.cpp pcsx2-1.4.0/pcsx2/CDVD/BlockdumpFileReader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/BlockdumpFileReader.cpp 2014-07-20 20:09:46.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/BlockdumpFileReader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -45,7 +45,12 @@ return isbd; } -BlockdumpFileReader::BlockdumpFileReader(void) +BlockdumpFileReader::BlockdumpFileReader(void) : + m_file(NULL), + m_blocks(0), + m_blockofs(0), + m_dtablesize(0), + m_lresult(0) { } @@ -85,20 +90,19 @@ m_file->SeekI(BlockDumpHeaderSize); - ScopedPtr buffer; u32 bs = 1024*1024; u32 off = 0; u32 has = 0; int i = 0; - buffer = new u8[bs]; + ScopedArray buffer(bs); do { - m_file->Read(buffer, bs); + m_file->Read(buffer.GetPtr(), bs); has = m_file->LastRead(); while (i < m_dtablesize && off < has) { - m_dtable[i++] = *(u32*)(buffer + off); + m_dtable[i++] = *(u32*)(buffer.GetPtr() + off); off += 4; off += m_blocksize; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CDVD.cpp pcsx2-1.4.0/pcsx2/CDVD/CDVD.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CDVD.cpp 2014-09-21 15:15:54.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CDVD.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1026,32 +1026,26 @@ case 0x04: // NCOMMAND CDVD_LOG("cdvdRead04(NCMD) %x", cdvd.nCommand); return cdvd.nCommand; - break; case 0x05: // N-READY CDVD_LOG("cdvdRead05(NReady) %x", cdvd.Ready); return cdvd.Ready; - break; case 0x06: // ERROR CDVD_LOG("cdvdRead06(Error) %x", cdvd.Error); return cdvd.Error; - break; case 0x07: // BREAK CDVD_LOG("cdvdRead07(Break) %x", 0); return 0; - break; case 0x08: // STATUS CDVD_LOG("cdvdRead08(Status) %x", cdvd.Status); return cdvd.Status; - break; case 0x0A: // STATUS CDVD_LOG("cdvdRead0A(Status) %x", cdvd.Status); return cdvd.Status; - break; case 0x0B: // TRAY-STATE (if tray has been opened) { @@ -1060,52 +1054,42 @@ return 1; else return 0; - break; } case 0x0C: // CRT MINUTE CDVD_LOG("cdvdRead0C(Min) %x", itob((u8)(cdvd.Sector/(60*75)))); return itob((u8)(cdvd.Sector/(60*75))); - break; case 0x0D: // CRT SECOND CDVD_LOG("cdvdRead0D(Sec) %x", itob((u8)((cdvd.Sector/75)%60)+2)); return itob((u8)((cdvd.Sector/75)%60)+2); - break; case 0x0E: // CRT FRAME CDVD_LOG("cdvdRead0E(Frame) %x", itob((u8)(cdvd.Sector%75))); return itob((u8)(cdvd.Sector%75)); - break; case 0x0F: // TYPE CDVD_LOG("cdvdRead0F(Disc Type) %x", cdvd.Type); cdvdGetDiskType(); return cdvd.Type; - break; case 0x13: // UNKNOWN CDVD_LOG("cdvdRead13(Unknown) %x", 4); return 4; - break; case 0x15: // RSV CDVD_LOG("cdvdRead15(RSV)"); return 0x01; // | 0x80 for ATAPI mode - break; case 0x16: // SCOMMAND CDVD_LOG("cdvdRead16(SCMD) %x", cdvd.sCommand); return cdvd.sCommand; - break; case 0x17: // SREADY CDVD_LOG("cdvdRead17(SReady) %x", cdvd.sDataIn); return cdvd.sDataIn; - break; case 0x18: return cdvdRead18(); - break; case 0x20: case 0x21: @@ -1117,7 +1101,6 @@ CDVD_LOG("cdvdRead%d(Key%d) %x", key, temp, cdvd.Key[temp]); return cdvd.Key[temp]; - break; } case 0x28: case 0x29: @@ -1129,7 +1112,6 @@ CDVD_LOG("cdvdRead%d(Key%d) %x", key, temp, cdvd.Key[temp]); return cdvd.Key[temp]; - break; } case 0x30: @@ -1142,33 +1124,28 @@ CDVD_LOG("cdvdRead%d(Key%d) %x", key, temp, cdvd.Key[temp]); return cdvd.Key[temp]; - break; } case 0x38: // valid parts of key data (first and last are valid) CDVD_LOG("cdvdRead38(KeysValid) %x", cdvd.Key[15]); return cdvd.Key[15]; - break; case 0x39: // KEY-XOR CDVD_LOG("cdvdRead39(KeyXor) %x", cdvd.KeyXor); return cdvd.KeyXor; - break; case 0x3A: // DEC_SET CDVD_LOG("cdvdRead3A(DecSet) %x", cdvd.decSet); return cdvd.decSet; - break; default: // note: notify the console since this is a potentially serious emulation problem: PSXHW_LOG("*Unknown 8bit read at address 0x1f4020%x", key); Console.Error( "IOP Unknown 8bit read from addr 0x1f4020%x", key ); return 0; - break; } } @@ -1232,7 +1209,7 @@ cdvd.Sector, cdvd.SeekToSector, cdvd.nSectors, cdvd.RetryCnt, cdvd.Speed, cdvd.Param[9], cdvd.ReadMode, cdvd.Param[10], psxHu32(0x1074)); if( EmuConfig.CdvdVerboseReads ) - Console.WriteLn( Color_Gray, L"CdRead: Reading Sector %d(%d Blocks of Size %d) at Speed=%dx", + Console.WriteLn( Color_Gray, L"CdRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx", cdvd.SeekToSector, cdvd.nSectors,cdvd.BlockSize,cdvd.Speed); cdvd.ReadTime = cdvdBlockReadTime( MODE_CDROM ); @@ -1280,7 +1257,7 @@ cdvd.Sector, cdvd.nSectors, cdvd.RetryCnt, cdvd.Speed, cdvd.Param[9], cdvd.ReadMode, cdvd.Param[10], psxHu32(0x1074)); if( EmuConfig.CdvdVerboseReads ) - Console.WriteLn( Color_Gray, L"CdAudioRead: Reading Sector %d(%d Blocks of Size %d) at Speed=%dx", + Console.WriteLn( Color_Gray, L"CdAudioRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx", cdvd.Sector, cdvd.nSectors,cdvd.BlockSize,cdvd.Speed); cdvd.ReadTime = cdvdBlockReadTime( MODE_CDROM ); @@ -1316,7 +1293,7 @@ cdvd.Sector, cdvd.SeekToSector, cdvd.nSectors, cdvd.RetryCnt, cdvd.Speed, cdvd.Param[9], cdvd.ReadMode, cdvd.Param[10], psxHu32(0x1074)); if( EmuConfig.CdvdVerboseReads ) - Console.WriteLn( Color_Gray, L"DvdRead: Reading Sector %d(%d Blocks of Size %d) at Speed=%dx", + Console.WriteLn( Color_Gray, L"DvdRead: Reading Sector %07d (%03d Blocks of Size %d) at Speed=%dx", cdvd.SeekToSector, cdvd.nSectors,cdvd.BlockSize,cdvd.Speed); cdvd.ReadTime = cdvdBlockReadTime( MODE_DVDROM ); @@ -1767,7 +1744,7 @@ cdvdGetMechaVer(&cdvd.Result[1]); cdvdReadRegionParams(&cdvd.Result[3]);//size==8 - DevCon.WriteLn("REGION PARAMS = %s %s", mg_zones[cdvd.Result[1]], &cdvd.Result[3]); + DevCon.WriteLn("REGION PARAMS = %s %s", mg_zones[cdvd.Result[1] & 7], &cdvd.Result[3]); cdvd.Result[1] = 1 << cdvd.Result[1]; //encryption zone; see offset 0x1C in encrypted headers ////////////////////////////////////////// cdvd.Result[2] = 0; //?? diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CDVDisoReader.cpp pcsx2-1.4.0/pcsx2/CDVD/CDVDisoReader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CDVDisoReader.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CDVDisoReader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -401,10 +401,10 @@ switch (mode) { - case CDVD_MODE_2352: + //case CDVD_MODE_2352: // Unreachable due to shortcut above. - pxAssume(false); - break; + // pxAssume(false); + // break; case CDVD_MODE_2340: pbuffer += 12; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/ChunksCache.cpp pcsx2-1.4.0/pcsx2/CDVD/ChunksCache.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/ChunksCache.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/ChunksCache.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,52 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#include "PrecompiledHeader.h" +#include "ChunksCache.h" + +void ChunksCache::SetLimit(uint megabytes) { + m_limit = (PX_off_t)megabytes * 1024 * 1024; + MatchLimit(); +} + +void ChunksCache::MatchLimit(bool removeAll) { + std::list::reverse_iterator rit; + while (m_entries.size() && (removeAll || m_size > m_limit)) { + rit = m_entries.rbegin(); + m_size -= (*rit)->size; + delete(*rit); + m_entries.pop_back(); + } +} + +void ChunksCache::Take(void* pMallocedSrc, PX_off_t offset, int length, int coverage) { + m_entries.push_front(new CacheEntry(pMallocedSrc, offset, length, coverage)); + m_size += length; + MatchLimit(); +} + +// By design, succeed only if the entire request is in a single cached chunk +int ChunksCache::Read(void* pDest, PX_off_t offset, int length) { + for (auto it = m_entries.begin(); it != m_entries.end(); it++) { + CacheEntry* e = *it; + if (e && offset >= e->offset && (offset + length) <= (e->offset + e->coverage)) { + if (it != m_entries.begin()) + m_entries.splice(m_entries.begin(), m_entries, it); // Move to top (MRU) + return CopyAvailable(e->data, e->offset, e->size, pDest, offset, length); + } + } + return -1; +} + diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/ChunksCache.h pcsx2-1.4.0/pcsx2/CDVD/ChunksCache.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/ChunksCache.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/ChunksCache.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,63 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#pragma once + +#include "zlib_indexed.h" + +#define CLAMP(val, minval, maxval) (std::min(maxval, std::max(minval, val))) + +class ChunksCache { +public: + ChunksCache(uint initialLimitMb) : m_entries(0), m_size(0), m_limit(initialLimitMb * 1024 * 1024) {}; + ~ChunksCache() { Clear(); }; + void SetLimit(uint megabytes); + void Clear() { MatchLimit(true); }; + + void Take(void* pMallocedSrc, PX_off_t offset, int length, int coverage); + int Read(void* pDest, PX_off_t offset, int length); + + static int CopyAvailable(void* pSrc, PX_off_t srcOffset, int srcSize, + void* pDst, PX_off_t dstOffset, int maxCopySize) { + int available = CLAMP(maxCopySize, 0, (int)(srcOffset + srcSize - dstOffset)); + memcpy(pDst, (char*)pSrc + (dstOffset - srcOffset), available); + return available; + }; + +private: + class CacheEntry { + public: + CacheEntry(void* pMallocedSrc, PX_off_t offset, int length, int coverage) : + data(pMallocedSrc), + offset(offset), + coverage(coverage), + size(length) + {}; + + ~CacheEntry() { if (data) free(data); }; + + void* data; + PX_off_t offset; + int coverage; + int size; + }; + + std::list m_entries; + void MatchLimit(bool removeAll = false); + PX_off_t m_size; + PX_off_t m_limit; +}; + +#undef CLAMP diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReader.cpp pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReader.cpp 2015-01-09 10:07:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -14,523 +14,19 @@ */ #include "PrecompiledHeader.h" -#include -#include "AppConfig.h" #include "AsyncFileReader.h" +#include "CompressedFileReader.h" +#include "CsoFileReader.h" +#include "GzippedFileReader.h" -#include "zlib_indexed.h" - -/////////// Some complementary utilities for zlib_indexed.c ////////// - -#include - -static s64 fsize(const wxString& filename) { - if (!wxFileName::FileExists(filename)) - return -1; - - std::ifstream f(filename.mbc_str(), std::ifstream::binary); - f.seekg(0, f.end); - s64 size = f.tellg(); - f.close(); - - return size; -} - -#define GZIP_ID "PCSX2.index.gzip.v1|" -#define GZIP_ID_LEN (sizeof(GZIP_ID) - 1) /* sizeof includes the \0 terminator */ - -// File format is: -// - [GZIP_ID_LEN] GZIP_ID (no \0) -// - [sizeof(Access)] index (should be allocated, contains various sizes) -// - [rest] the indexed data points (should be allocated, index->list should then point to it) -static Access* ReadIndexFromFile(const wxString& filename) { - s64 size = fsize(filename); - if (size <= 0) { - Console.Error(L"Error: Can't open index file: '%s'", WX_STR(filename)); - return 0; - } - std::ifstream infile(filename.mbc_str(), std::ifstream::binary); - - char fileId[GZIP_ID_LEN + 1] = { 0 }; - infile.read(fileId, GZIP_ID_LEN); - if (wxString::From8BitData(GZIP_ID) != wxString::From8BitData(fileId)) { - Console.Error(L"Error: Incompatible gzip index, please delete it manually: '%s'", WX_STR(filename)); - infile.close(); - return 0; - } - - Access* index = (Access*)malloc(sizeof(Access)); - infile.read((char*)index, sizeof(Access)); - - s64 datasize = size - GZIP_ID_LEN - sizeof(Access); - if (datasize != index->have * sizeof(Point)) { - Console.Error(L"Error: unexpected size of gzip index, please delete it manually: '%s'.", WX_STR(filename)); - infile.close(); - free(index); - return 0; - } - - char* buffer = (char*)malloc(datasize); - infile.read(buffer, datasize); - infile.close(); - index->list = (Point*)buffer; // adjust list pointer - return index; -} - -static void WriteIndexToFile(Access* index, const wxString filename) { - if (wxFileName::FileExists(filename)) { - Console.Warning(L"WARNING: Won't write index - file name exists (please delete it manually): '%s'", WX_STR(filename)); - return; - } - - std::ofstream outfile(filename.mbc_str(), std::ofstream::binary); - outfile.write(GZIP_ID, GZIP_ID_LEN); - - Point* tmp = index->list; - index->list = 0; // current pointer is useless on disk, normalize it as 0. - outfile.write((char*)index, sizeof(Access)); - index->list = tmp; - - outfile.write((char*)index->list, sizeof(Point) * index->have); - outfile.close(); - - // Verify - if (fsize(filename) != (s64)GZIP_ID_LEN + sizeof(Access) + sizeof(Point) * index->have) { - Console.Warning(L"Warning: Can't write index file to disk: '%s'", WX_STR(filename)); - } else { - Console.WriteLn(Color_Green, L"OK: Gzip quick access index file saved to disk: '%s'", WX_STR(filename)); - } -} - -/////////// End of complementary utilities for zlib_indexed.c ////////// -#define CLAMP(val, minval, maxval) (std::min(maxval, std::max(minval, val))) - -class ChunksCache { -public: - ChunksCache(uint initialLimitMb) : m_entries(0), m_size(0), m_limit(initialLimitMb * 1024 * 1024) {}; - ~ChunksCache() { Clear(); }; - void SetLimit(uint megabytes); - void Clear() { MatchLimit(true); }; - - void Take(void* pMallocedSrc, PX_off_t offset, int length, int coverage); - int Read(void* pDest, PX_off_t offset, int length); - - static int CopyAvailable(void* pSrc, PX_off_t srcOffset, int srcSize, - void* pDst, PX_off_t dstOffset, int maxCopySize) { - int available = CLAMP(maxCopySize, 0, (int)(srcOffset + srcSize - dstOffset)); - memcpy(pDst, (char*)pSrc + (dstOffset - srcOffset), available); - return available; - }; -private: - class CacheEntry { - public: - CacheEntry(void* pMallocedSrc, PX_off_t offset, int length, int coverage) : - data(pMallocedSrc), - offset(offset), - coverage(coverage), - size(length) - {}; - - ~CacheEntry() { if (data) free(data); }; - - void* data; - PX_off_t offset; - int coverage; - int size; - }; - - std::list m_entries; - void MatchLimit(bool removeAll = false); - PX_off_t m_size; - PX_off_t m_limit; -}; - -void ChunksCache::SetLimit(uint megabytes) { - m_limit = (PX_off_t)megabytes * 1024 * 1024; - MatchLimit(); -} - -void ChunksCache::MatchLimit(bool removeAll) { - std::list::reverse_iterator rit; - while (m_entries.size() && (removeAll || m_size > m_limit)) { - rit = m_entries.rbegin(); - m_size -= (*rit)->size; - delete(*rit); - m_entries.pop_back(); - } -} - -void ChunksCache::Take(void* pMallocedSrc, PX_off_t offset, int length, int coverage) { - m_entries.push_front(new CacheEntry(pMallocedSrc, offset, length, coverage)); - m_size += length; - MatchLimit(); -} - -// By design, succeed only if the entire request is in a single cached chunk -int ChunksCache::Read(void* pDest, PX_off_t offset, int length) { - for (auto it = m_entries.begin(); it != m_entries.end(); it++) { - CacheEntry* e = *it; - if (e && offset >= e->offset && (offset + length) <= (e->offset + e->coverage)) { - if (it != m_entries.begin()) - m_entries.splice(m_entries.begin(), m_entries, it); // Move to top (MRU) - return CopyAvailable(e->data, e->offset, e->size, pDest, offset, length); - } - } - return -1; -} - -static wxString INDEX_TEMPLATE_KEY(L"$(f)"); -// template: -// must contain one and only one instance of '$(f)' (without the quotes) -// if if !canEndWithKey -> must not end with $(f) -// if starts with $(f) then it expands to the full path + file name. -// if doesn't start with $(f) then it's expanded to file name only (with extension) -// if doesn't start with $(f) and ends up relative, -// then it's relative to base (not to cwd) -// No checks are performed if the result file name can be created. -// If this proves useful, we can move it into Path:: . Right now there's no need. -static wxString ApplyTemplate(const wxString &name, const wxDirName &base, - const wxString &fileTemplate, const wxString &filename, - bool canEndWithKey) -{ - wxString tem(fileTemplate); - wxString key = INDEX_TEMPLATE_KEY; - tem = tem.Trim(true).Trim(false); // both sides - - int first = tem.find(key); - if (first < 0 // not found - || first != tem.rfind(key) // more than one instance - || !canEndWithKey && first == tem.length() - key.length()) - { - Console.Error(L"Invalid %s template '%s'.\n" - L"Template must contain exactly one '%s' and must not end with it. Abotring.", - WX_STR(name), WX_STR(tem), WX_STR(key)); - return L""; - } - - wxString fname(filename); - if (first > 0) - fname = Path::GetFilename(fname); // without path - - tem.Replace(key, fname); - if (first > 0) - tem = Path::Combine(base, tem); // ignores appRoot if tem is absolute - - return tem; -} - -/* -static void TestTemplate(const wxDirName &base, const wxString &fname, bool canEndWithKey) -{ - const char *ins[] = { - "$(f).pindex.tmp", // same folder as the original file - " $(f).pindex.tmp ", // same folder as the original file (trimmed silently) - "cache/$(f).pindex", // relative to base - "../$(f).pindex", // relative to base - "%appdata%/pcsx2/cache/$(f).pindex", // c:/Users//AppData/Roaming/pcsx2/cache/ ... - "c:\\pcsx2-cache/$(f).pindex", // absolute - "~/.cache/$(f).pindex", // TODO: check if this works on *nix. It should... - // (on windows ~ isn't recognized as special) - "cache/$(f)/$(f).index", // invalid: appears twice - "hello", // invalid: doesn't contain $(f) - "hello$(f)", // invalid, can't end with $(f) - NULL - }; - - for (int i = 0; ins[i]; i++) { - wxString tem(wxString::From8BitData(ins[i])); - Console.WriteLn(Color_Green, L"test: '%s' -> '%s'", - WX_STR(tem), - WX_STR(ApplyTemplate(L"test", base, tem, fname, canEndWithKey))); - } -} -*/ - -static wxString iso2indexname(const wxString& isoname) { - //testTemplate(isoname); - wxDirName appRoot = // TODO: have only one of this in PCSX2. Right now have few... - (wxDirName)(wxFileName(wxStandardPaths::Get().GetExecutablePath()).GetPath()); - //TestTemplate(appRoot, isoname, false); - return ApplyTemplate(L"gzip index", appRoot, g_Conf->GzipIsoIndexTemplate, isoname, false); -} - -#define SPAN_DEFAULT (1048576L * 4) /* distance between direct access points when creating a new index */ -#define READ_CHUNK_SIZE (256 * 1024) /* zlib extraction chunks size (at 0-based boundaries) */ -#define CACHE_SIZE_MB 200 /* cache size for extracted data. must be at least READ_CHUNK_SIZE (in MB)*/ - -class GzippedFileReader : public AsyncFileReader -{ - DeclareNoncopyableObject(GzippedFileReader); -public: - GzippedFileReader(void) : - m_pIndex(0), - m_zstates(0), - m_src(0), - m_cache(CACHE_SIZE_MB) { - m_blocksize = 2048; - }; - - virtual ~GzippedFileReader(void) { Close(); }; - - static bool CanHandle(const wxString& fileName); - virtual bool Open(const wxString& fileName); - - virtual int ReadSync(void* pBuffer, uint sector, uint count); - - virtual void BeginRead(void* pBuffer, uint sector, uint count); - virtual int FinishRead(void); - virtual void CancelRead(void) {}; - - virtual void Close(void); - - virtual uint GetBlockCount(void) const { - // type and formula copied from FlatFileReader - // FIXME? : Shouldn't it be uint and (size - m_dataoffset) / m_blocksize ? - return (int)((m_pIndex ? m_pIndex->uncompressed_size : 0) / m_blocksize); - }; - - virtual void SetBlockSize(uint bytes) { m_blocksize = bytes; } - virtual void SetDataOffset(int bytes) { m_dataoffset = bytes; } -private: - class Czstate { - public: - Czstate() { state.isValid = 0; }; - ~Czstate() { Kill(); }; - void Kill() { - if (state.isValid) - inflateEnd(&state.strm); - state.isValid = 0; - } - Zstate state; - }; - - bool OkIndex(); // Verifies that we have an index, or try to create one - PX_off_t GetOptimalExtractionStart(PX_off_t offset); - int _ReadSync(void* pBuffer, PX_off_t offset, uint bytesToRead); - void InitZstates(); - - int mBytesRead; // Temp sync read result when simulating async read - Access* m_pIndex; // Quick access index - Czstate* m_zstates; - FILE* m_src; - - ChunksCache m_cache; -}; - -void GzippedFileReader::InitZstates() { - if (m_zstates) { - delete[] m_zstates; - m_zstates = 0; - } - if (!m_pIndex) - return; - - // having another extra element helps avoiding logic for last (so 2+ instead of 1+) - int size = 2 + m_pIndex->uncompressed_size / m_pIndex->span; - m_zstates = new Czstate[size](); -} - -// TODO: do better than just checking existance and extension -bool GzippedFileReader::CanHandle(const wxString& fileName) { - return wxFileName::FileExists(fileName) && fileName.Lower().EndsWith(L".gz"); -} - -bool GzippedFileReader::OkIndex() { - if (m_pIndex) - return true; - - // Try to read index from disk - wxString indexfile = iso2indexname(m_filename); - if (indexfile.length() == 0) - return false; // iso2indexname(...) will print errors if it can't apply the template - - if (wxFileName::FileExists(indexfile) && (m_pIndex = ReadIndexFromFile(indexfile))) { - Console.WriteLn(Color_Green, L"OK: Gzip quick access index read from disk: '%s'", WX_STR(indexfile)); - if (m_pIndex->span != SPAN_DEFAULT) { - Console.Warning(L"Note: This index has %1.1f MB intervals, while the current default for new indexes is %1.1f MB.", - (float)m_pIndex->span / 1024 / 1024, (float)SPAN_DEFAULT / 1024 / 1024); - Console.Warning(L"It will work fine, but if you want to generate a new index with default intervals, delete this index file."); - Console.Warning(L"(smaller intervals mean bigger index file and quicker but more frequent decompressions)"); - } - InitZstates(); - return true; - } - - // No valid index file. Generate an index - Console.Warning(L"This may take a while (but only once). Scanning compressed file to generate a quick access index..."); - - Access *index; - FILE* infile = fopen(m_filename.mbc_str(), "rb"); - int len = build_index(infile, SPAN_DEFAULT, &index); - printf("\n"); // build_index prints progress without \n's - fclose(infile); - - if (len >= 0) { - m_pIndex = index; - WriteIndexToFile((Access*)m_pIndex, indexfile); - } else { - Console.Error(L"ERROR (%d): index could not be generated for file '%s'", len, WX_STR(m_filename)); - InitZstates(); - return false; - } - - InitZstates(); - return true; -} - -bool GzippedFileReader::Open(const wxString& fileName) { - Close(); - m_filename = fileName; - if (!(m_src = fopen(m_filename.mbc_str(), "rb")) || !CanHandle(fileName) || !OkIndex()) { - Close(); - return false; - }; - - return true; -}; - -void GzippedFileReader::BeginRead(void* pBuffer, uint sector, uint count) { - // No a-sync support yet, implement as sync - mBytesRead = ReadSync(pBuffer, sector, count); - return; -}; - -int GzippedFileReader::FinishRead(void) { - int res = mBytesRead; - mBytesRead = -1; - return res; -}; - -#define PTT clock_t -#define NOW() (clock() / (CLOCKS_PER_SEC / 1000)) - -int GzippedFileReader::ReadSync(void* pBuffer, uint sector, uint count) { - PX_off_t offset = (s64)sector * m_blocksize + m_dataoffset; - int bytesToRead = count * m_blocksize; - int res = _ReadSync(pBuffer, offset, bytesToRead); - if (res < 0) - Console.Error(L"Error: iso-gzip read unsuccessful."); - return res; -} - -// If we have a valid and adequate zstate for this span, use it, else, use the index -PX_off_t GzippedFileReader::GetOptimalExtractionStart(PX_off_t offset) { - int span = m_pIndex->span; - Czstate& cstate = m_zstates[offset / span]; - PX_off_t stateOffset = cstate.state.isValid ? cstate.state.out_offset : 0; - if (stateOffset && stateOffset <= offset) - return stateOffset; // state is faster than indexed - - // If span is not exact multiples of READ_CHUNK_SIZE (because it was configured badly), - // we fallback to always READ_CHUNK_SIZE boundaries - if (span % READ_CHUNK_SIZE) - return offset / READ_CHUNK_SIZE * READ_CHUNK_SIZE; - - return span * (offset / span); // index direct access boundaries -} - -int GzippedFileReader::_ReadSync(void* pBuffer, PX_off_t offset, uint bytesToRead) { - if (!OkIndex()) - return -1; - - // Without all the caching, chunking and states, this would be enough: - // return extract(m_src, m_pIndex, offset, (unsigned char*)pBuffer, bytesToRead); - - // Split request to READ_CHUNK_SIZE chunks at READ_CHUNK_SIZE boundaries - uint maxInChunk = READ_CHUNK_SIZE - offset % READ_CHUNK_SIZE; - if (bytesToRead > maxInChunk) { - int first = _ReadSync(pBuffer, offset, maxInChunk); - if (first != maxInChunk) - return first; // EOF or failure - - int rest = _ReadSync((char*)pBuffer + maxInChunk, offset + maxInChunk, bytesToRead - maxInChunk); - if (rest < 0) - return rest; - - return first + rest; - } - - // From here onwards it's guarenteed that the request is inside a single READ_CHUNK_SIZE boundaries - - int res = m_cache.Read(pBuffer, offset, bytesToRead); - if (res >= 0) - return res; - - // Not available from cache. Decompress from optimal starting - // point in READ_CHUNK_SIZE chunks and cache each chunk. - PTT s = NOW(); - PX_off_t extractOffset = GetOptimalExtractionStart(offset); // guaranteed in READ_CHUNK_SIZE boundaries - int size = offset + maxInChunk - extractOffset; - unsigned char* extracted = (unsigned char*)malloc(size); - - int span = m_pIndex->span; - int spanix = extractOffset / span; - res = extract(m_src, m_pIndex, extractOffset, extracted, size, &(m_zstates[spanix].state)); - if (res < 0) { - free(extracted); - return res; - } - int copied = ChunksCache::CopyAvailable(extracted, extractOffset, res, pBuffer, offset, bytesToRead); - - if (m_zstates[spanix].state.isValid && (extractOffset + res) / span != offset / span) { - // The state no longer matches this span. - // move the state to the appropriate span because it will be faster than using the index - int targetix = (extractOffset + res) / span; - m_zstates[targetix].Kill(); - m_zstates[targetix] = m_zstates[spanix]; // We have elements for the entire file, and another one. - m_zstates[spanix].state.isValid = 0; // Not killing because we need the state. - } - - if (size <= READ_CHUNK_SIZE) - m_cache.Take(extracted, extractOffset, res, size); - else { // split into cacheable chunks - for (int i = 0; i < size; i += READ_CHUNK_SIZE) { - int available = CLAMP(res - i, 0, READ_CHUNK_SIZE); - void* chunk = available ? malloc(available) : 0; - if (available) - memcpy(chunk, extracted + i, available); - m_cache.Take(chunk, extractOffset + i, available, std::min(size - i, READ_CHUNK_SIZE)); - } - free(extracted); - } - - int duration = NOW() - s; - if (duration > 10) - Console.WriteLn(Color_Gray, L"gunzip: chunk #%5d-%2d : %1.2f MB - %d ms", - (int)(offset / 4 / 1024 / 1024), - (int)(offset % (4 * 1024 * 1024) / READ_CHUNK_SIZE), - (float)size / 1024 / 1024, - duration); - - return copied; -} - -void GzippedFileReader::Close() { - m_filename.Empty(); - if (m_pIndex) { - free_index((Access*)m_pIndex); - m_pIndex = 0; +// CompressedFileReader factory. +AsyncFileReader* CompressedFileReader::GetNewReader(const wxString& fileName) { + if (GzippedFileReader::CanHandle(fileName)) { + return new GzippedFileReader(); } - - InitZstates(); // results in delete because no index - m_cache.Clear(); - - if (m_src) { - fclose(m_src); - m_src = 0; + if (CsoFileReader::CanHandle(fileName)) { + return new CsoFileReader(); } -} - - -// CompressedFileReader factory - currently there's only GzippedFileReader - -// Go through available compressed readers -bool CompressedFileReader::DetectCompressed(AsyncFileReader* pReader) { - return GzippedFileReader::CanHandle(pReader->GetFilename()); -} - -// Return a new reader which can handle, or any reader otherwise (which will fail on open) -AsyncFileReader* CompressedFileReader::GetNewReader(const wxString& fileName) { - //if (GzippedFileReader::CanHandle(pReader)) - return new GzippedFileReader(); + // This is the one which will fail on open. + return NULL; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReader.h pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReader.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReader.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReader.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,29 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2014 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once + +// Factory - creates an AsyncFileReader derived instance which can read a compressed file +class CompressedFileReader { +public: + // fileName and its contents may be used to choose the compressed reader. + // If no matching handler is found, NULL is returned. + // The returned instance still needs ->Open(filename) before usage. + // Open(filename) may still fail. + static AsyncFileReader* GetNewReader(const wxString& fileName); + +private: + virtual ~CompressedFileReader() = 0; +}; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReaderUtils.h pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReaderUtils.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CompressedFileReaderUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CompressedFileReaderUtils.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,44 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#pragma once + +#include + +/////////// Some complementary utilities for zlib_indexed.c ////////// + +// This is ugly, but it's hard to find something which will work/compile for both +// windows and *nix and work with non-english file names. +// Maybe some day we'll convert all file related ops to wxWidgets, which means also the +// instances at zlib_indexed.h (which use plain stdio FILE*) +#ifdef WIN32 +# define PX_wfilename(name_wxstr) (name_wxstr.wc_str()) +# define PX_fopen_rb(name_wxstr) (_wfopen(PX_wfilename(name_wxstr), L"rb")) +#else +# define PX_wfilename(name_wxstr) (name_wxstr.mbc_str()) +# define PX_fopen_rb(name_wxstr) (fopen(PX_wfilename(name_wxstr), "rb")) +#endif + +#ifdef WIN32 +# define PX_fseeko _fseeki64 +# define PX_ftello _ftelli64 +# define PX_off_t s64 /* __int64 */ +#else +# define PX_fseeko fseeko +# define PX_ftello ftello +# define PX_off_t off_t +#endif + +/////////// End of complementary utilities for zlib_indexed.c ////////// diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CsoFileReader.cpp pcsx2-1.4.0/pcsx2/CDVD/CsoFileReader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CsoFileReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CsoFileReader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,313 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#include "PrecompiledHeader.h" +#include "AsyncFileReader.h" +#include "CompressedFileReaderUtils.h" +#include "CsoFileReader.h" +#include "Pcsx2Types.h" +#ifdef __linux__ +#include +#else +#include +#endif + +// Implementation of CSO compressed ISO reading, based on: +// https://github.com/unknownbrackets/maxcso/blob/master/README_CSO.md +struct CsoHeader { + u8 magic[4]; + u32 header_size; + u64 total_bytes; + u32 frame_size; + u8 ver; + u8 align; + u8 reserved[2]; +}; + +static const u32 CSO_READ_BUFFER_SIZE = 256 * 1024; + +bool CsoFileReader::CanHandle(const wxString& fileName) { + bool supported = false; + if (wxFileName::FileExists(fileName) && fileName.Lower().EndsWith(L".cso")) { + FILE* fp = PX_fopen_rb(fileName); + CsoHeader hdr; + if (fp) { + if (fread(&hdr, 1, sizeof(hdr), fp) == sizeof(hdr)) { + supported = ValidateHeader(hdr); + } + fclose(fp); + } + } + return supported; +} + +bool CsoFileReader::ValidateHeader(const CsoHeader& hdr) { + if (hdr.magic[0] != 'C' || hdr.magic[1] != 'I' || hdr.magic[2] != 'S' || hdr.magic[3] != 'O') { + // Invalid magic, definitely a bad file. + return false; + } + if (hdr.ver > 1) { + Console.Error(L"Only CSOv1 files are supported."); + return false; + } + if ((hdr.frame_size & (hdr.frame_size - 1)) != 0) { + Console.Error(L"CSO frame size must be a power of two."); + return false; + } + if (hdr.frame_size < 2048) { + Console.Error(L"CSO frame size must be at least one sector."); + return false; + } + + // All checks passed, this is a good CSO header. + return true; +} + +bool CsoFileReader::Open(const wxString& fileName) { + Close(); + m_filename = fileName; + m_src = PX_fopen_rb(m_filename); + + bool success = false; + if (m_src && ReadFileHeader() && InitializeBuffers()) { + success = true; + } + + if (!success) { + Close(); + return false; + } + return true; +} + +bool CsoFileReader::ReadFileHeader() { + CsoHeader hdr = {}; + + PX_fseeko(m_src, m_dataoffset, SEEK_SET); + if (fread(&hdr, 1, sizeof(hdr), m_src) != sizeof(hdr)) { + Console.Error(L"Failed to read CSO file header."); + return false; + } + + if (!ValidateHeader(hdr)) { + Console.Error(L"CSO has invalid header."); + return false; + } + + m_frameSize = hdr.frame_size; + // Determine the translation from bytes to frame. + m_frameShift = 0; + for (u32 i = m_frameSize; i > 1; i >>= 1) { + ++m_frameShift; + } + + // This is the index alignment (index values need shifting by this amount.) + m_indexShift = hdr.align; + m_totalSize = hdr.total_bytes; + + return true; +} + +bool CsoFileReader::InitializeBuffers() { + // Round up, since part of a frame requires a full frame. + u32 numFrames = (u32)((m_totalSize + m_frameSize - 1) / m_frameSize); + + // We might read a bit of alignment too, so be prepared. + if (m_frameSize + (1 << m_indexShift) < CSO_READ_BUFFER_SIZE) { + m_readBuffer = new u8[CSO_READ_BUFFER_SIZE]; + } else { + m_readBuffer = new u8[m_frameSize + (1 << m_indexShift)]; + } + + // This is a buffer for the most recently decompressed frame. + m_zlibBuffer = new u8[m_frameSize + (1 << m_indexShift)]; + m_zlibBufferFrame = numFrames; + + const u32 indexSize = numFrames + 1; + m_index = new u32[indexSize]; + if (fread(m_index, sizeof(u32), indexSize, m_src) != indexSize) { + Console.Error(L"Unable to read index data from CSO."); + return false; + } + + m_z_stream = new z_stream; + m_z_stream->zalloc = Z_NULL; + m_z_stream->zfree = Z_NULL; + m_z_stream->opaque = Z_NULL; + if (inflateInit2(m_z_stream, -15) != Z_OK) { + Console.Error("Unable to initialize zlib for CSO decompression."); + return false; + } + + return true; +} + +void CsoFileReader::Close() { + m_filename.Empty(); +#if CSO_USE_CHUNKSCACHE + m_cache.Clear(); +#endif + + if (m_src) { + fclose(m_src); + m_src = NULL; + } + if (m_z_stream) { + inflateEnd(m_z_stream); + m_z_stream = NULL; + } + + if (m_readBuffer) { + delete[] m_readBuffer; + m_readBuffer = NULL; + } + if (m_zlibBuffer) { + delete[] m_zlibBuffer; + m_zlibBuffer = NULL; + } + if (m_index) { + delete[] m_index; + m_index = NULL; + } +} + +int CsoFileReader::ReadSync(void* pBuffer, uint sector, uint count) { + if (!m_src) { + return 0; + } + + // Note that, in practice, count will always be 1. It seems one sector is read + // per interrupt, even if multiple are requested by the application. + + u8* dest = (u8*)pBuffer; + // We do it this way in case m_blocksize is not well aligned to our frame size. + u64 pos = (u64)sector * (u64)m_blocksize; + int remaining = count * m_blocksize; + int bytes = 0; + + while (remaining > 0) { + int readBytes; + +#if CSO_USE_CHUNKSCACHE + // Try first to read from the cache. + readBytes = m_cache.Read(dest + bytes, pos + bytes, remaining); +#else + readBytes = -1; +#endif + if (readBytes < 0) { + readBytes = ReadFromFrame(dest + bytes, pos + bytes, remaining); + if (readBytes == 0) { + // We hit EOF. + break; + } + +#if CSO_USE_CHUNKSCACHE + // Add the bytes into the cache. We need to allocate a buffer for it. + void *cached = malloc(readBytes); + memcpy(cached, dest + bytes, readBytes); + m_cache.Take(cached, pos + bytes, readBytes, readBytes); +#endif + } + + bytes += readBytes; + remaining -= readBytes; + } + + return bytes; +} + +int CsoFileReader::ReadFromFrame(u8 *dest, u64 pos, int maxBytes) { + if (pos >= m_totalSize) { + // Can't read anything passed the end. + return 0; + } + + const u32 frame = (u32)(pos >> m_frameShift); + const u32 offset = (u32)(pos - (frame << m_frameShift)); + // This is how many bytes we will actually be reading from this frame. + const u32 bytes = (u32)(std::min(m_blocksize, static_cast(m_frameSize - offset))); + + // Grab the index data for the frame we're about to read. + const bool compressed = (m_index[frame + 0] & 0x80000000) == 0; + const u32 index0 = m_index[frame + 0] & 0x7FFFFFFF; + const u32 index1 = m_index[frame + 1] & 0x7FFFFFFF; + + // Calculate where the compressed payload is (if compressed.) + const u64 frameRawPos = (u64)index0 << m_indexShift; + const u64 frameRawSize = (u64)(index1 - index0) << m_indexShift; + + if (!compressed) { + // Just read directly, easy. + if (PX_fseeko(m_src, m_dataoffset + frameRawPos + offset, SEEK_SET) != 0) { + Console.Error("Unable to seek to uncompressed CSO data."); + return 0; + } + return fread(dest, 1, bytes, m_src); + } else { + // We don't need to decompress if we already did this same frame last time. + if (m_zlibBufferFrame != frame) { + if (PX_fseeko(m_src, m_dataoffset + frameRawPos, SEEK_SET) != 0) { + Console.Error("Unable to seek to compressed CSO data."); + return 0; + } + // This might be less bytes than frameRawSize in case of padding on the last frame. + // This is because the index positions must be aligned. + const u32 readRawBytes = fread(m_readBuffer, 1, frameRawSize, m_src); + if (!DecompressFrame(frame, readRawBytes)) { + return 0; + } + } + + // Now we just copy the offset data from the cache. + memcpy(dest, m_zlibBuffer + offset, bytes); + } + + return bytes; +} + +bool CsoFileReader::DecompressFrame(u32 frame, u32 readBufferSize) { + m_z_stream->next_in = m_readBuffer; + m_z_stream->avail_in = readBufferSize; + m_z_stream->next_out = m_zlibBuffer; + m_z_stream->avail_out = m_frameSize; + + int status = inflate(m_z_stream, Z_FINISH); + bool success = status == Z_STREAM_END && m_z_stream->total_out == m_frameSize; + if (success) { + // Our buffer now contains this frame. + m_zlibBufferFrame = frame; + } else { + Console.Error("Unable to decompress CSO frame using zlib."); + m_zlibBufferFrame = (u32)-1; + } + + inflateReset(m_z_stream); + return success; +} + +void CsoFileReader::BeginRead(void* pBuffer, uint sector, uint count) { + // TODO: No async support yet, implement as sync. + m_bytesRead = ReadSync(pBuffer, sector, count); +} + +int CsoFileReader::FinishRead() { + int res = m_bytesRead; + m_bytesRead = -1; + return res; +} + +void CsoFileReader::CancelRead() { + // TODO: No async read support yet. +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/CsoFileReader.h pcsx2-1.4.0/pcsx2/CDVD/CsoFileReader.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/CsoFileReader.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/CsoFileReader.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,102 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#pragma once + +// Based on testing, the overhead of using this cache is high. +// +// The test was done with CSO files using a block size of 16KB. +// Cache hit rates were observed in the range of 25%. +// Cache overhead added 35% to the overall read time. +// +// For this reason, it's currently disabled. +#define CSO_USE_CHUNKSCACHE 0 + +#include "AsyncFileReader.h" +#include "ChunksCache.h" + +struct CsoHeader; +typedef struct z_stream_s z_stream; + +static const uint CSO_CHUNKCACHE_SIZE_MB = 200; + +class CsoFileReader : public AsyncFileReader +{ + DeclareNoncopyableObject(CsoFileReader); +public: + CsoFileReader(void) : + m_frameSize(0), + m_frameShift(0), + m_indexShift(0), + m_readBuffer(0), + m_zlibBuffer(0), + m_zlibBufferFrame(0), + m_index(0), + m_totalSize(0), + m_src(0), + m_z_stream(0), +#if CSO_USE_CHUNKSCACHE + m_cache(CSO_CHUNKCACHE_SIZE_MB), +#endif + m_bytesRead(0) { + m_blocksize = 2048; + }; + + virtual ~CsoFileReader(void) { Close(); }; + + static bool CanHandle(const wxString& fileName); + virtual bool Open(const wxString& fileName); + + virtual int ReadSync(void* pBuffer, uint sector, uint count); + + virtual void BeginRead(void* pBuffer, uint sector, uint count); + virtual int FinishRead(void); + virtual void CancelRead(void); + + virtual void Close(void); + + virtual uint GetBlockCount(void) const { + return (m_totalSize - m_dataoffset) / m_blocksize; + }; + + virtual void SetBlockSize(uint bytes) { m_blocksize = bytes; } + virtual void SetDataOffset(int bytes) { m_dataoffset = bytes; } + +private: + static bool ValidateHeader(const CsoHeader& hdr); + bool ReadFileHeader(); + bool InitializeBuffers(); + int ReadFromFrame(u8 *dest, u64 pos, int maxBytes); + bool DecompressFrame(u32 frame, u32 readBufferSize); + + u32 m_frameSize; + u8 m_frameShift; + u8 m_indexShift; + u8* m_readBuffer; + u8 *m_zlibBuffer; + u32 m_zlibBufferFrame; + u32 *m_index; + u64 m_totalSize; + // The actual source cso file handle. + FILE* m_src; + z_stream* m_z_stream; + +#if CSO_USE_CHUNKSCACHE + ChunksCache m_cache; +#endif + + // The result of a read is stored here between BeginRead() and FinishRead(). + int m_bytesRead; +}; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/GzippedFileReader.cpp pcsx2-1.4.0/pcsx2/CDVD/GzippedFileReader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/GzippedFileReader.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/GzippedFileReader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,476 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#include "PrecompiledHeader.h" +#include +#include +#include "AppConfig.h" +#include "ChunksCache.h" +#include "CompressedFileReaderUtils.h" +#include "GzippedFileReader.h" +#include "zlib_indexed.h" + +#define CLAMP(val, minval, maxval) (std::min(maxval, std::max(minval, val))) + +static s64 fsize(const wxString& filename) { + if (!wxFileName::FileExists(filename)) + return -1; + + std::ifstream f(PX_wfilename(filename), std::ifstream::binary); + f.seekg(0, f.end); + s64 size = f.tellg(); + f.close(); + + return size; +} + +#define GZIP_ID "PCSX2.index.gzip.v1|" +#define GZIP_ID_LEN (sizeof(GZIP_ID) - 1) /* sizeof includes the \0 terminator */ + +// File format is: +// - [GZIP_ID_LEN] GZIP_ID (no \0) +// - [sizeof(Access)] index (should be allocated, contains various sizes) +// - [rest] the indexed data points (should be allocated, index->list should then point to it) +static Access* ReadIndexFromFile(const wxString& filename) { + s64 size = fsize(filename); + if (size <= 0) { + Console.Error(L"Error: Can't open index file: '%s'", WX_STR(filename)); + return 0; + } + std::ifstream infile(PX_wfilename(filename), std::ifstream::binary); + + char fileId[GZIP_ID_LEN + 1] = { 0 }; + infile.read(fileId, GZIP_ID_LEN); + if (wxString::From8BitData(GZIP_ID) != wxString::From8BitData(fileId)) { + Console.Error(L"Error: Incompatible gzip index, please delete it manually: '%s'", WX_STR(filename)); + infile.close(); + return 0; + } + + Access* index = (Access*)malloc(sizeof(Access)); + infile.read((char*)index, sizeof(Access)); + + s64 datasize = size - GZIP_ID_LEN - sizeof(Access); + if (datasize != (s64)index->have * sizeof(Point)) { + Console.Error(L"Error: unexpected size of gzip index, please delete it manually: '%s'.", WX_STR(filename)); + infile.close(); + free(index); + return 0; + } + + char* buffer = (char*)malloc(datasize); + infile.read(buffer, datasize); + infile.close(); + index->list = (Point*)buffer; // adjust list pointer + return index; +} + +static void WriteIndexToFile(Access* index, const wxString filename) { + if (wxFileName::FileExists(filename)) { + Console.Warning(L"WARNING: Won't write index - file name exists (please delete it manually): '%s'", WX_STR(filename)); + return; + } + + std::ofstream outfile(PX_wfilename(filename), std::ofstream::binary); + outfile.write(GZIP_ID, GZIP_ID_LEN); + + Point* tmp = index->list; + index->list = 0; // current pointer is useless on disk, normalize it as 0. + outfile.write((char*)index, sizeof(Access)); + index->list = tmp; + + outfile.write((char*)index->list, sizeof(Point) * index->have); + outfile.close(); + + // Verify + if (fsize(filename) != (s64)GZIP_ID_LEN + sizeof(Access) + sizeof(Point) * index->have) { + Console.Warning(L"Warning: Can't write index file to disk: '%s'", WX_STR(filename)); + } else { + Console.WriteLn(Color_Green, L"OK: Gzip quick access index file saved to disk: '%s'", WX_STR(filename)); + } +} + +static wxString INDEX_TEMPLATE_KEY(L"$(f)"); +// template: +// must contain one and only one instance of '$(f)' (without the quotes) +// if if !canEndWithKey -> must not end with $(f) +// if starts with $(f) then it expands to the full path + file name. +// if doesn't start with $(f) then it's expanded to file name only (with extension) +// if doesn't start with $(f) and ends up relative, +// then it's relative to base (not to cwd) +// No checks are performed if the result file name can be created. +// If this proves useful, we can move it into Path:: . Right now there's no need. +static wxString ApplyTemplate(const wxString &name, const wxDirName &base, + const wxString &fileTemplate, const wxString &filename, + bool canEndWithKey) +{ + wxString tem(fileTemplate); + wxString key = INDEX_TEMPLATE_KEY; + tem = tem.Trim(true).Trim(false); // both sides + + int first = tem.find(key); + if (first < 0 // not found + || first != tem.rfind(key) // more than one instance + || !canEndWithKey && first == tem.length() - key.length()) + { + Console.Error(L"Invalid %s template '%s'.\n" + L"Template must contain exactly one '%s' and must not end with it. Abotring.", + WX_STR(name), WX_STR(tem), WX_STR(key)); + return L""; + } + + wxString fname(filename); + if (first > 0) + fname = Path::GetFilename(fname); // without path + + tem.Replace(key, fname); + if (first > 0) + tem = Path::Combine(base, tem); // ignores appRoot if tem is absolute + + return tem; +} + +/* +static void TestTemplate(const wxDirName &base, const wxString &fname, bool canEndWithKey) +{ + const char *ins[] = { + "$(f).pindex.tmp", // same folder as the original file + " $(f).pindex.tmp ", // same folder as the original file (trimmed silently) + "cache/$(f).pindex", // relative to base + "../$(f).pindex", // relative to base + "%appdata%/pcsx2/cache/$(f).pindex", // c:/Users//AppData/Roaming/pcsx2/cache/ ... + "c:\\pcsx2-cache/$(f).pindex", // absolute + "~/.cache/$(f).pindex", // TODO: check if this works on *nix. It should... + // (on windows ~ isn't recognized as special) + "cache/$(f)/$(f).index", // invalid: appears twice + "hello", // invalid: doesn't contain $(f) + "hello$(f)", // invalid, can't end with $(f) + NULL + }; + + for (int i = 0; ins[i]; i++) { + wxString tem(wxString::From8BitData(ins[i])); + Console.WriteLn(Color_Green, L"test: '%s' -> '%s'", + WX_STR(tem), + WX_STR(ApplyTemplate(L"test", base, tem, fname, canEndWithKey))); + } +} +*/ + +static wxString iso2indexname(const wxString& isoname) { + //testTemplate(isoname); + wxDirName appRoot = // TODO: have only one of this in PCSX2. Right now have few... + (wxDirName)(wxFileName(wxStandardPaths::Get().GetExecutablePath()).GetPath()); + //TestTemplate(appRoot, isoname, false); + return ApplyTemplate(L"gzip index", appRoot, g_Conf->GzipIsoIndexTemplate, isoname, false); +} + +GzippedFileReader::GzippedFileReader(void) : + mBytesRead(0), + m_pIndex(0), + m_zstates(0), + m_src(0), + m_cache(GZFILE_CACHE_SIZE_MB) { + m_blocksize = 2048; + AsyncPrefetchReset(); +}; + +void GzippedFileReader::InitZstates() { + if (m_zstates) { + delete[] m_zstates; + m_zstates = 0; + } + if (!m_pIndex) + return; + + // having another extra element helps avoiding logic for last (so 2+ instead of 1+) + int size = 2 + m_pIndex->uncompressed_size / m_pIndex->span; + m_zstates = new Czstate[size](); +} + +#ifndef WIN32 +void GzippedFileReader::AsyncPrefetchReset() {}; +void GzippedFileReader::AsyncPrefetchOpen() {}; +void GzippedFileReader::AsyncPrefetchClose() {}; +void GzippedFileReader::AsyncPrefetchChunk(PX_off_t dummy) {}; +void GzippedFileReader::AsyncPrefetchCancel() {}; +#else +// AsyncPrefetch works as follows: +// ater extracting a chunk from the compressed file, ask the OS to asynchronously +// read the next chunk from the file, and then completely ignore the result and +// cancel the async read before the next extract. the next extract then reads the +// data from the disk buf if it's overlapping/contained within the chunk we've +// asked the OS to prefetch, then the OS is likely to already have it cached. +// This procedure is frequently able to overcome seek time due to fragmentation of the +// compressed file on disk without any meaningful penalty. +// This system is only enabled for win32 where we have this async read request. +void GzippedFileReader::AsyncPrefetchReset() { + hOverlappedFile = INVALID_HANDLE_VALUE; + asyncInProgress = false; +} + +void GzippedFileReader::AsyncPrefetchOpen() { + hOverlappedFile = CreateFile( + m_filename, + GENERIC_READ, + FILE_SHARE_READ, + NULL, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_OVERLAPPED, + NULL); +}; + +void GzippedFileReader::AsyncPrefetchClose() +{ + AsyncPrefetchCancel(); + + if (hOverlappedFile != INVALID_HANDLE_VALUE) + CloseHandle(hOverlappedFile); + + AsyncPrefetchReset(); +}; + +void GzippedFileReader::AsyncPrefetchChunk(PX_off_t start) +{ + if (hOverlappedFile == INVALID_HANDLE_VALUE || asyncInProgress) { + Console.Warning(L"Unexpected file handle or progress state. Aborting prefetch."); + return; + } + + LARGE_INTEGER offset; + offset.QuadPart = start; + + DWORD bytesToRead = GZFILE_READ_CHUNK_SIZE; + + ZeroMemory(&asyncOperationContext, sizeof(asyncOperationContext)); + asyncOperationContext.hEvent = 0; + asyncOperationContext.Offset = offset.LowPart; + asyncOperationContext.OffsetHigh = offset.HighPart; + + ReadFile(hOverlappedFile, mDummyAsyncPrefetchTarget, bytesToRead, NULL, &asyncOperationContext); + asyncInProgress = true; +}; + +void GzippedFileReader::AsyncPrefetchCancel() +{ + if (!asyncInProgress) + return; + + if (!CancelIo(hOverlappedFile)) { + Console.Warning("canceling gz prefetch failed. following prefetching will not work."); + return; + } + + asyncInProgress = false; +}; +#endif /* WIN32 */ + +// TODO: do better than just checking existance and extension +bool GzippedFileReader::CanHandle(const wxString& fileName) { + return wxFileName::FileExists(fileName) && fileName.Lower().EndsWith(L".gz"); +} + +bool GzippedFileReader::OkIndex() { + if (m_pIndex) + return true; + + // Try to read index from disk + wxString indexfile = iso2indexname(m_filename); + if (indexfile.length() == 0) + return false; // iso2indexname(...) will print errors if it can't apply the template + + if (wxFileName::FileExists(indexfile) && (m_pIndex = ReadIndexFromFile(indexfile))) { + Console.WriteLn(Color_Green, L"OK: Gzip quick access index read from disk: '%s'", WX_STR(indexfile)); + if (m_pIndex->span != GZFILE_SPAN_DEFAULT) { + Console.Warning(L"Note: This index has %1.1f MB intervals, while the current default for new indexes is %1.1f MB.", + (float)m_pIndex->span / 1024 / 1024, (float)GZFILE_SPAN_DEFAULT / 1024 / 1024); + Console.Warning(L"It will work fine, but if you want to generate a new index with default intervals, delete this index file."); + Console.Warning(L"(smaller intervals mean bigger index file and quicker but more frequent decompressions)"); + } + InitZstates(); + return true; + } + + // No valid index file. Generate an index + Console.Warning(L"This may take a while (but only once). Scanning compressed file to generate a quick access index..."); + + Access *index; + FILE* infile = PX_fopen_rb(m_filename); + int len = build_index(infile, GZFILE_SPAN_DEFAULT, &index); + printf("\n"); // build_index prints progress without \n's + fclose(infile); + + if (len >= 0) { + m_pIndex = index; + WriteIndexToFile((Access*)m_pIndex, indexfile); + } else { + Console.Error(L"ERROR (%d): index could not be generated for file '%s'", len, WX_STR(m_filename)); + free_index(index); + InitZstates(); + return false; + } + + InitZstates(); + return true; +} + +bool GzippedFileReader::Open(const wxString& fileName) { + Close(); + m_filename = fileName; + if (!(m_src = PX_fopen_rb(m_filename)) || !CanHandle(fileName) || !OkIndex()) { + Close(); + return false; + }; + + AsyncPrefetchOpen(); + return true; +}; + +void GzippedFileReader::BeginRead(void* pBuffer, uint sector, uint count) { + // No a-sync support yet, implement as sync + mBytesRead = ReadSync(pBuffer, sector, count); + return; +}; + +int GzippedFileReader::FinishRead(void) { + int res = mBytesRead; + mBytesRead = -1; + return res; +}; + +#define PTT clock_t +#define NOW() (clock() / (CLOCKS_PER_SEC / 1000)) + +int GzippedFileReader::ReadSync(void* pBuffer, uint sector, uint count) { + PX_off_t offset = (s64)sector * m_blocksize + m_dataoffset; + int bytesToRead = count * m_blocksize; + int res = _ReadSync(pBuffer, offset, bytesToRead); + if (res < 0) + Console.Error(L"Error: iso-gzip read unsuccessful."); + return res; +} + +// If we have a valid and adequate zstate for this span, use it, else, use the index +PX_off_t GzippedFileReader::GetOptimalExtractionStart(PX_off_t offset) { + int span = m_pIndex->span; + Czstate& cstate = m_zstates[offset / span]; + PX_off_t stateOffset = cstate.state.isValid ? cstate.state.out_offset : 0; + if (stateOffset && stateOffset <= offset) + return stateOffset; // state is faster than indexed + + // If span is not exact multiples of GZFILE_READ_CHUNK_SIZE (because it was configured badly), + // we fallback to always GZFILE_READ_CHUNK_SIZE boundaries + if (span % GZFILE_READ_CHUNK_SIZE) + return offset / GZFILE_READ_CHUNK_SIZE * GZFILE_READ_CHUNK_SIZE; + + return span * (offset / span); // index direct access boundaries +} + +int GzippedFileReader::_ReadSync(void* pBuffer, PX_off_t offset, uint bytesToRead) { + if (!OkIndex()) + return -1; + + // Without all the caching, chunking and states, this would be enough: + // return extract(m_src, m_pIndex, offset, (unsigned char*)pBuffer, bytesToRead); + + // Split request to GZFILE_READ_CHUNK_SIZE chunks at GZFILE_READ_CHUNK_SIZE boundaries + uint maxInChunk = GZFILE_READ_CHUNK_SIZE - offset % GZFILE_READ_CHUNK_SIZE; + if (bytesToRead > maxInChunk) { + int first = _ReadSync(pBuffer, offset, maxInChunk); + if (first != maxInChunk) + return first; // EOF or failure + + int rest = _ReadSync((char*)pBuffer + maxInChunk, offset + maxInChunk, bytesToRead - maxInChunk); + if (rest < 0) + return rest; + + return first + rest; + } + + // From here onwards it's guarenteed that the request is inside a single GZFILE_READ_CHUNK_SIZE boundaries + + int res = m_cache.Read(pBuffer, offset, bytesToRead); + if (res >= 0) + return res; + + // Not available from cache. Decompress from optimal starting + // point in GZFILE_READ_CHUNK_SIZE chunks and cache each chunk. + PTT s = NOW(); + PX_off_t extractOffset = GetOptimalExtractionStart(offset); // guaranteed in GZFILE_READ_CHUNK_SIZE boundaries + int size = offset + maxInChunk - extractOffset; + unsigned char* extracted = (unsigned char*)malloc(size); + + int span = m_pIndex->span; + int spanix = extractOffset / span; + AsyncPrefetchCancel(); + res = extract(m_src, m_pIndex, extractOffset, extracted, size, &(m_zstates[spanix].state)); + if (res < 0) { + free(extracted); + return res; + } + AsyncPrefetchChunk(getInOffset(&(m_zstates[spanix].state))); + + int copied = ChunksCache::CopyAvailable(extracted, extractOffset, res, pBuffer, offset, bytesToRead); + + if (m_zstates[spanix].state.isValid && (extractOffset + res) / span != offset / span) { + // The state no longer matches this span. + // move the state to the appropriate span because it will be faster than using the index + int targetix = (extractOffset + res) / span; + m_zstates[targetix].Kill(); + m_zstates[targetix] = m_zstates[spanix]; // We have elements for the entire file, and another one. + m_zstates[spanix].state.isValid = 0; // Not killing because we need the state. + } + + if (size <= GZFILE_READ_CHUNK_SIZE) + m_cache.Take(extracted, extractOffset, res, size); + else { // split into cacheable chunks + for (int i = 0; i < size; i += GZFILE_READ_CHUNK_SIZE) { + int available = CLAMP(res - i, 0, GZFILE_READ_CHUNK_SIZE); + void* chunk = available ? malloc(available) : 0; + if (available) + memcpy(chunk, extracted + i, available); + m_cache.Take(chunk, extractOffset + i, available, std::min(size - i, GZFILE_READ_CHUNK_SIZE)); + } + free(extracted); + } + + int duration = NOW() - s; + if (duration > 10) + Console.WriteLn(Color_Gray, L"gunzip: chunk #%5d-%2d : %1.2f MB - %d ms", + (int)(offset / 4 / 1024 / 1024), + (int)(offset % (4 * 1024 * 1024) / GZFILE_READ_CHUNK_SIZE), + (float)size / 1024 / 1024, + duration); + + return copied; +} + +void GzippedFileReader::Close() { + m_filename.Empty(); + if (m_pIndex) { + free_index((Access*)m_pIndex); + m_pIndex = 0; + } + + InitZstates(); // results in delete because no index + m_cache.Clear(); + + if (m_src) { + fclose(m_src); + m_src = 0; + } + + AsyncPrefetchClose(); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/GzippedFileReader.h pcsx2-1.4.0/pcsx2/CDVD/GzippedFileReader.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/GzippedFileReader.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/GzippedFileReader.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,93 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2014 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#pragma once + +typedef struct zstate Zstate; + +#include "AsyncFileReader.h" +#include "ChunksCache.h" +#include "zlib_indexed.h" + +#define GZFILE_SPAN_DEFAULT (1048576L * 4) /* distance between direct access points when creating a new index */ +#define GZFILE_READ_CHUNK_SIZE (256 * 1024) /* zlib extraction chunks size (at 0-based boundaries) */ +#define GZFILE_CACHE_SIZE_MB 200 /* cache size for extracted data. must be at least GZFILE_READ_CHUNK_SIZE (in MB)*/ + +class GzippedFileReader : public AsyncFileReader +{ + DeclareNoncopyableObject(GzippedFileReader); +public: + GzippedFileReader(void); + + virtual ~GzippedFileReader(void) { Close(); }; + + static bool CanHandle(const wxString& fileName); + virtual bool Open(const wxString& fileName); + + virtual int ReadSync(void* pBuffer, uint sector, uint count); + + virtual void BeginRead(void* pBuffer, uint sector, uint count); + virtual int FinishRead(void); + virtual void CancelRead(void) {}; + + virtual void Close(void); + + virtual uint GetBlockCount(void) const { + // type and formula copied from FlatFileReader + // FIXME? : Shouldn't it be uint and (size - m_dataoffset) / m_blocksize ? + return (int)((m_pIndex ? m_pIndex->uncompressed_size : 0) / m_blocksize); + }; + + virtual void SetBlockSize(uint bytes) { m_blocksize = bytes; } + virtual void SetDataOffset(int bytes) { m_dataoffset = bytes; } +private: + class Czstate { + public: + Czstate() { state.isValid = 0; }; + ~Czstate() { Kill(); }; + void Kill() { + if (state.isValid) + inflateEnd(&state.strm); + state.isValid = 0; + } + Zstate state; + }; + + bool OkIndex(); // Verifies that we have an index, or try to create one + PX_off_t GetOptimalExtractionStart(PX_off_t offset); + int _ReadSync(void* pBuffer, PX_off_t offset, uint bytesToRead); + void InitZstates(); + + int mBytesRead; // Temp sync read result when simulating async read + Access* m_pIndex; // Quick access index + Czstate* m_zstates; + FILE* m_src; + + ChunksCache m_cache; + +#ifdef WIN32 + // Used by async prefetch + HANDLE hOverlappedFile; + OVERLAPPED asyncOperationContext; + bool asyncInProgress; + byte mDummyAsyncPrefetchTarget[GZFILE_READ_CHUNK_SIZE]; +#endif + + void AsyncPrefetchReset(); + void AsyncPrefetchOpen(); + void AsyncPrefetchClose(); + void AsyncPrefetchChunk(PX_off_t dummy); + void AsyncPrefetchCancel(); +}; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/InputIsoFile.cpp pcsx2-1.4.0/pcsx2/CDVD/InputIsoFile.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/InputIsoFile.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/InputIsoFile.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,351 +1,365 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - - -#include "PrecompiledHeader.h" -#include "IopCommon.h" -#include "IsoFileFormats.h" - -#include - -static const char* nameFromType(int type) -{ - switch(type) - { - case ISOTYPE_CD: return "CD"; - case ISOTYPE_DVD: return "DVD"; - case ISOTYPE_AUDIO: return "Audio CD"; - case ISOTYPE_DVDDL: return "DVD9 (dual-layer)"; - case ISOTYPE_ILLEGAL: return "Illegal media"; - default: return "Unknown or corrupt"; - } -} - -int InputIsoFile::ReadSync(u8* dst, uint lsn) -{ - if (lsn > m_blocks) - { - FastFormatUnicode msg; - msg.Write("isoFile error: Block index is past the end of file! (%u > %u).", lsn, m_blocks); - - pxAssertDev(false, msg); - Console.Error(msg.c_str()); - return -1; - } - - return m_reader->ReadSync(dst+m_blockofs, lsn, 1); -} - -void InputIsoFile::BeginRead2(uint lsn) -{ - if (lsn > m_blocks) - { - FastFormatUnicode msg; - msg.Write("isoFile error: Block index is past the end of file! (%u > %u).", lsn, m_blocks); - - pxAssertDev(false, msg); - Console.Error(msg.c_str()); - - // [TODO] : Throw exception? - // Typically an error like this is bad; indicating an invalid dump or corrupted - // iso file. - - m_current_lsn = -1; - return; - } - - m_current_lsn = lsn; - - if(lsn >= m_read_lsn && lsn < (m_read_lsn+m_read_count)) - { - // Already buffered - return; - } - - m_read_lsn = lsn; - m_read_count = 1; - - if(ReadUnit > 1) - { - //m_read_lsn = lsn - (lsn % ReadUnit); - - m_read_count = std::min(ReadUnit, m_blocks - m_read_lsn); - } - - m_reader->BeginRead(m_readbuffer, m_read_lsn, m_read_count); - m_read_inprogress = true; -} - -int InputIsoFile::FinishRead3(u8* dst, uint mode) -{ - int _offset, length; - int ret = 0; - - if(m_current_lsn < 0) - return -1; - - if(m_read_inprogress) - { - ret = m_reader->FinishRead(); - m_read_inprogress = false; - - if(ret < 0) - return ret; - } - - switch (mode) - { - case CDVD_MODE_2352: - _offset = 0; - length = 2352; - break; - case CDVD_MODE_2340: - _offset = 12; - length = 2340; - break; - case CDVD_MODE_2328: - _offset = 24; - length = 2328; - break; - case CDVD_MODE_2048: - _offset = 24; - length = 2048; - break; - } - - int end1 = m_blockofs + m_blocksize; - int end2 = _offset + length; - int end = std::min(end1, end2); - - int diff = m_blockofs - _offset; - int ndiff = 0; - if(diff > 0) - { - memset(dst, 0, diff); - _offset = m_blockofs; - } - else - { - ndiff = -diff; - diff = 0; - } - - length = end - _offset; - - uint read_offset = (m_current_lsn - m_read_lsn) * m_blocksize; - memcpy(dst + diff, m_readbuffer + ndiff + read_offset, length); - - if (m_type == ISOTYPE_CD && diff >= 12) - { - lsn_to_msf(dst + diff - 12, m_current_lsn); - dst[diff - 9] = 2; - } - - return 0; -} - -InputIsoFile::InputIsoFile() -{ - _init(); -} - -InputIsoFile::~InputIsoFile() throw() -{ - Close(); -} - -void InputIsoFile::_init() -{ - m_type = ISOTYPE_ILLEGAL; - m_flags = 0; - - m_offset = 0; - m_blockofs = 0; - m_blocksize = 0; - m_blocks = 0; - - m_read_inprogress = false; - m_read_count = 0; - m_read_lsn = -1; -} - -// Tests the specified filename to see if it is a supported ISO type. This function typically -// executes faster than IsoFile::Open since it does not do the following: -// * check for multi-part ISOs. I tests for header info in the main/root ISO only. -// * load blockdump indexes. -// -// Note that this is a member method, and that it will clobber any existing ISO state. -// (assertions are generated in debug mode if the object state is not already closed). -bool InputIsoFile::Test( const wxString& srcfile ) -{ - Close(); - m_filename = srcfile; - - return Open(srcfile, true); -} - -bool InputIsoFile::Open( const wxString& srcfile, bool testOnly ) -{ - Close(); - m_filename = srcfile; - - // Allow write sharing of the iso based on the ini settings. - // Mostly useful for romhacking, where the disc is frequently - // changed and the emulator would block modifications - m_reader = new FlatFileReader(EmuConfig.CdvdShareWrite); - m_reader->Open(m_filename); - - bool isBlockdump, isCompressed = false; - if(isBlockdump = BlockdumpFileReader::DetectBlockdump(m_reader)) - { - delete m_reader; - - BlockdumpFileReader *bdr = new BlockdumpFileReader();; - - bdr->Open(m_filename); - - m_blockofs = bdr->GetBlockOffset(); - m_blocksize = bdr->GetBlockSize(); - - m_reader = bdr; - - ReadUnit = 1; - } else if (isCompressed = CompressedFileReader::DetectCompressed(m_reader)) { - delete m_reader; - m_reader = CompressedFileReader::GetNewReader(m_filename); - m_reader->Open(m_filename); - } - - bool detected = Detect(); - - if(testOnly) - return detected; - - if (!detected) - throw Exception::BadStream() - .SetUserMsg(_("Unrecognized ISO image file format")) - .SetDiagMsg(L"ISO mounting failed: PCSX2 is unable to identify the ISO image type."); - - if(!isBlockdump && !isCompressed) - { - ReadUnit = MaxReadUnit; - - m_reader->SetDataOffset(m_offset); - m_reader->SetBlockSize(m_blocksize); - - // Returns the original reader if single-part or a Multipart reader otherwise - AsyncFileReader* m_reader_old = m_reader; - m_reader = MultipartFileReader::DetectMultipart(m_reader); - if (m_reader != m_reader_old) // Not the same object the old one need to be deleted - delete m_reader_old; - } - - m_blocks = m_reader->GetBlockCount(); - - Console.WriteLn(Color_StrongBlue, L"isoFile open ok: %s", WX_STR(m_filename)); - - ConsoleIndentScope indent; - - Console.WriteLn("Image type = %s", nameFromType(m_type)); - //Console.WriteLn("Fileparts = %u", m_numparts); // Pointless print, it's 1 unless it says otherwise above - DevCon.WriteLn ("blocks = %u", m_blocks); - DevCon.WriteLn ("offset = %d", m_offset); - DevCon.WriteLn ("blocksize = %u", m_blocksize); - DevCon.WriteLn ("blockoffset = %d", m_blockofs); - - return true; -} - -void InputIsoFile::Close() -{ - delete m_reader; - m_reader = NULL; - - _init(); -} - -bool InputIsoFile::IsOpened() const -{ - return m_reader != NULL; -} - -bool InputIsoFile::tryIsoType(u32 _size, s32 _offset, s32 _blockofs) -{ - static u8 buf[2456]; - - m_blocksize = _size; - m_offset = _offset; - m_blockofs = _blockofs; - - m_reader->SetDataOffset(_offset); - m_reader->SetBlockSize(_size); - - if(ReadSync(buf, 16) < 0) - return false; - - if (strncmp((char*)(buf+25), "CD001", 5)) // Not ISO 9660 compliant - return false; - - m_type = (*(u16*)(buf+190) == 2048) ? ISOTYPE_CD : ISOTYPE_DVD; - - return true; // We can deal with this. -} - -// based on florin's CDVDbin detection code :) -// Parameter: -// -// -// Returns true if the image is valid/known/supported, or false if not (type == ISOTYPE_ILLEGAL). -bool InputIsoFile::Detect( bool readType ) -{ - m_type = ISOTYPE_ILLEGAL; - - AsyncFileReader* headpart = m_reader; - - // First sanity check: no sane CD image has less than 16 sectors, since that's what - // we need simply to contain a TOC. So if the file size is not large enough to - // accommodate that, it is NOT a CD image ---> - - int sectors = headpart->GetBlockCount(); - - if (sectors < 17) - return false; - - m_blocks = 17; - - if (tryIsoType(2048, 0, 24)) return true; // ISO 2048 - if (tryIsoType(2336, 0, 16)) return true; // RAW 2336 - if (tryIsoType(2352, 0, 0)) return true; // RAW 2352 - if (tryIsoType(2448, 0, 0)) return true; // RAWQ 2448 - - if (tryIsoType(2048, 150 * 2048, 24)) return true; // NERO ISO 2048 - if (tryIsoType(2352, 150 * 2048, 0)) return true; // NERO RAW 2352 - if (tryIsoType(2448, 150 * 2048, 0)) return true; // NERO RAWQ 2448 - - if (tryIsoType(2048, -8, 24)) return true; // ISO 2048 - if (tryIsoType(2352, -8, 0)) return true; // RAW 2352 - if (tryIsoType(2448, -8, 0)) return true; // RAWQ 2448 - - m_offset = 0; - m_blocksize = CD_FRAMESIZE_RAW; - m_blockofs = 0; - m_type = ISOTYPE_AUDIO; - - m_reader->SetDataOffset(m_offset); - m_reader->SetBlockSize(m_blocksize); - - //BUG: This also detects a memory-card-file as a valid Audio-CD ISO... -avih - return true; -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + + +#include "PrecompiledHeader.h" +#include "IopCommon.h" +#include "IsoFileFormats.h" + +#include + +static const char* nameFromType(int type) +{ + switch(type) + { + case ISOTYPE_CD: return "CD"; + case ISOTYPE_DVD: return "DVD"; + case ISOTYPE_AUDIO: return "Audio CD"; + case ISOTYPE_DVDDL: return "DVD9 (dual-layer)"; + case ISOTYPE_ILLEGAL: return "Illegal media"; + default: return "Unknown or corrupt"; + } +} + +int InputIsoFile::ReadSync(u8* dst, uint lsn) +{ + if (lsn > m_blocks) + { + FastFormatUnicode msg; + msg.Write("isoFile error: Block index is past the end of file! (%u > %u).", lsn, m_blocks); + + pxAssertDev(false, msg); + Console.Error(msg.c_str()); + return -1; + } + + return m_reader->ReadSync(dst+m_blockofs, lsn, 1); +} + +void InputIsoFile::BeginRead2(uint lsn) +{ + if (lsn > m_blocks) + { + FastFormatUnicode msg; + msg.Write("isoFile error: Block index is past the end of file! (%u > %u).", lsn, m_blocks); + + pxAssertDev(false, msg); + Console.Error(msg.c_str()); + + // [TODO] : Throw exception? + // Typically an error like this is bad; indicating an invalid dump or corrupted + // iso file. + + m_current_lsn = -1; + return; + } + + m_current_lsn = lsn; + + if(lsn >= m_read_lsn && lsn < (m_read_lsn+m_read_count)) + { + // Already buffered + return; + } + + m_read_lsn = lsn; + m_read_count = 1; + + if(ReadUnit > 1) + { + //m_read_lsn = lsn - (lsn % ReadUnit); + + m_read_count = std::min(ReadUnit, m_blocks - m_read_lsn); + } + + m_reader->BeginRead(m_readbuffer, m_read_lsn, m_read_count); + m_read_inprogress = true; +} + +int InputIsoFile::FinishRead3(u8* dst, uint mode) +{ + int _offset = 0; + int length = 0; + int ret = 0; + + if(m_current_lsn < 0) + return -1; + + if(m_read_inprogress) + { + ret = m_reader->FinishRead(); + m_read_inprogress = false; + + if(ret < 0) + return ret; + } + + switch (mode) + { + case CDVD_MODE_2352: + _offset = 0; + length = 2352; + break; + case CDVD_MODE_2340: + _offset = 12; + length = 2340; + break; + case CDVD_MODE_2328: + _offset = 24; + length = 2328; + break; + case CDVD_MODE_2048: + _offset = 24; + length = 2048; + break; + } + + int end1 = m_blockofs + m_blocksize; + int end2 = _offset + length; + int end = std::min(end1, end2); + + int diff = m_blockofs - _offset; + int ndiff = 0; + if(diff > 0) + { + memset(dst, 0, diff); + _offset = m_blockofs; + } + else + { + ndiff = -diff; + diff = 0; + } + + length = end - _offset; + + uint read_offset = (m_current_lsn - m_read_lsn) * m_blocksize; + memcpy(dst + diff, m_readbuffer + ndiff + read_offset, length); + + if (m_type == ISOTYPE_CD && diff >= 12) + { + lsn_to_msf(dst + diff - 12, m_current_lsn); + dst[diff - 9] = 2; + } + + return 0; +} + +InputIsoFile::InputIsoFile() +{ + _init(); +} + +InputIsoFile::~InputIsoFile() throw() +{ + Close(); +} + +void InputIsoFile::_init() +{ + m_type = ISOTYPE_ILLEGAL; + m_flags = 0; + + m_offset = 0; + m_blockofs = 0; + m_blocksize = 0; + m_blocks = 0; + + m_read_inprogress = false; + m_read_count = 0; + ReadUnit = 0; + m_current_lsn = -1; + m_read_lsn = -1; + m_reader = NULL; +} + +// Tests the specified filename to see if it is a supported ISO type. This function typically +// executes faster than IsoFile::Open since it does not do the following: +// * check for multi-part ISOs. I tests for header info in the main/root ISO only. +// * load blockdump indexes. +// +// Note that this is a member method, and that it will clobber any existing ISO state. +// (assertions are generated in debug mode if the object state is not already closed). +bool InputIsoFile::Test( const wxString& srcfile ) +{ + Close(); + m_filename = srcfile; + + return Open(srcfile, true); +} + +bool InputIsoFile::Open( const wxString& srcfile, bool testOnly ) +{ + Close(); + m_filename = srcfile; + m_reader = NULL; + + bool isBlockdump = false; + bool isCompressed = false; + + // First try using a compressed reader. If it works, go with it. + m_reader = CompressedFileReader::GetNewReader(m_filename); + isCompressed = m_reader != NULL; + + // If it wasn't compressed, let's open it has a FlatFileReader. + if (!isCompressed) + { + // Allow write sharing of the iso based on the ini settings. + // Mostly useful for romhacking, where the disc is frequently + // changed and the emulator would block modifications + m_reader = new FlatFileReader(EmuConfig.CdvdShareWrite); + } + + m_reader->Open(m_filename); + + // It might actually be a blockdump file. + // Check that before continuing with the FlatFileReader. + isBlockdump = BlockdumpFileReader::DetectBlockdump(m_reader); + if (isBlockdump) + { + delete m_reader; + + BlockdumpFileReader *bdr = new BlockdumpFileReader(); + bdr->Open(m_filename); + + m_blockofs = bdr->GetBlockOffset(); + m_blocksize = bdr->GetBlockSize(); + + m_reader = bdr; + + ReadUnit = 1; + } + + bool detected = Detect(); + + if(testOnly) + return detected; + + if (!detected) + throw Exception::BadStream() + .SetUserMsg(_("Unrecognized ISO image file format")) + .SetDiagMsg(L"ISO mounting failed: PCSX2 is unable to identify the ISO image type."); + + if(!isBlockdump && !isCompressed) + { + ReadUnit = MaxReadUnit; + + m_reader->SetDataOffset(m_offset); + m_reader->SetBlockSize(m_blocksize); + + // Returns the original reader if single-part or a Multipart reader otherwise + AsyncFileReader* m_reader_old = m_reader; + m_reader = MultipartFileReader::DetectMultipart(m_reader); + if (m_reader != m_reader_old) // Not the same object the old one need to be deleted + delete m_reader_old; + } + + m_blocks = m_reader->GetBlockCount(); + + Console.WriteLn(Color_StrongBlue, L"isoFile open ok: %s", WX_STR(m_filename)); + + ConsoleIndentScope indent; + + Console.WriteLn("Image type = %s", nameFromType(m_type)); + //Console.WriteLn("Fileparts = %u", m_numparts); // Pointless print, it's 1 unless it says otherwise above + DevCon.WriteLn ("blocks = %u", m_blocks); + DevCon.WriteLn ("offset = %d", m_offset); + DevCon.WriteLn ("blocksize = %u", m_blocksize); + DevCon.WriteLn ("blockoffset = %d", m_blockofs); + + return true; +} + +void InputIsoFile::Close() +{ + delete m_reader; + m_reader = NULL; + + _init(); +} + +bool InputIsoFile::IsOpened() const +{ + return m_reader != NULL; +} + +bool InputIsoFile::tryIsoType(u32 _size, s32 _offset, s32 _blockofs) +{ + static u8 buf[2456]; + + m_blocksize = _size; + m_offset = _offset; + m_blockofs = _blockofs; + + m_reader->SetDataOffset(_offset); + m_reader->SetBlockSize(_size); + + if(ReadSync(buf, 16) < 0) + return false; + + if (strncmp((char*)(buf+25), "CD001", 5)) // Not ISO 9660 compliant + return false; + + m_type = (*(u16*)(buf+190) == 2048) ? ISOTYPE_CD : ISOTYPE_DVD; + + return true; // We can deal with this. +} + +// based on florin's CDVDbin detection code :) +// Parameter: +// +// +// Returns true if the image is valid/known/supported, or false if not (type == ISOTYPE_ILLEGAL). +bool InputIsoFile::Detect( bool readType ) +{ + m_type = ISOTYPE_ILLEGAL; + + AsyncFileReader* headpart = m_reader; + + // First sanity check: no sane CD image has less than 16 sectors, since that's what + // we need simply to contain a TOC. So if the file size is not large enough to + // accommodate that, it is NOT a CD image ---> + + int sectors = headpart->GetBlockCount(); + + if (sectors < 17) + return false; + + m_blocks = 17; + + if (tryIsoType(2048, 0, 24)) return true; // ISO 2048 + if (tryIsoType(2336, 0, 16)) return true; // RAW 2336 + if (tryIsoType(2352, 0, 0)) return true; // RAW 2352 + if (tryIsoType(2448, 0, 0)) return true; // RAWQ 2448 + + if (tryIsoType(2048, 150 * 2048, 24)) return true; // NERO ISO 2048 + if (tryIsoType(2352, 150 * 2048, 0)) return true; // NERO RAW 2352 + if (tryIsoType(2448, 150 * 2048, 0)) return true; // NERO RAWQ 2448 + + if (tryIsoType(2048, -8, 24)) return true; // ISO 2048 + if (tryIsoType(2352, -8, 0)) return true; // RAW 2352 + if (tryIsoType(2448, -8, 0)) return true; // RAWQ 2448 + + m_offset = 0; + m_blocksize = CD_FRAMESIZE_RAW; + m_blockofs = 0; + m_type = ISOTYPE_AUDIO; + + m_reader->SetDataOffset(m_offset); + m_reader->SetBlockSize(m_blocksize); + + //BUG: This also detects a memory-card-file as a valid Audio-CD ISO... -avih + return true; +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/IsoFileFormats.h pcsx2-1.4.0/pcsx2/CDVD/IsoFileFormats.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/IsoFileFormats.h 2013-07-03 18:42:05.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/IsoFileFormats.h 2016-01-05 17:28:08.000000000 +0000 @@ -18,6 +18,7 @@ #include "CDVD.h" #include "wx/wfstream.h" #include "AsyncFileReader.h" +#include "CompressedFileReader.h" enum isoType { @@ -47,7 +48,6 @@ AsyncFileReader* m_reader; s32 m_current_lsn; - uint m_current_count; isoType m_type; u32 m_flags; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/IsoFS/IsoFS.cpp pcsx2-1.4.0/pcsx2/CDVD/IsoFS/IsoFS.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/IsoFS/IsoFS.cpp 2011-03-22 01:38:13.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/IsoFS/IsoFS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -105,6 +105,7 @@ IsoDirectory::IsoDirectory(SectorSource& r, IsoFileDescriptor directoryEntry) : internalReader(r) { + m_fstype = FStype_ISO9660; Init(directoryEntry); } @@ -209,9 +210,10 @@ IsoFileDescriptor::IsoFileDescriptor() { - lba = 0; - size = 0; + lba = 0; + size = 0; flags = 0; + memset(&date, 0, sizeof(date)); } IsoFileDescriptor::IsoFileDescriptor(const u8* data, int length) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/OutputIsoFile.cpp pcsx2-1.4.0/pcsx2/CDVD/OutputIsoFile.cpp --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/OutputIsoFile.cpp 2014-06-29 07:05:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/OutputIsoFile.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,140 +1,140 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - - -#include "PrecompiledHeader.h" -#include "IopCommon.h" -#include "IsoFileFormats.h" - -#include - -void pxStream_OpenCheck( const wxStreamBase& stream, const wxString& fname, const wxString& mode ) -{ - if (stream.IsOk()) return; - - ScopedExcept ex(Exception::FromErrno(fname, errno)); - ex->SetDiagMsg( pxsFmt(L"Unable to open the file for %s: %s", WX_STR(mode), WX_STR(ex->DiagMsg())) ); - ex->Rethrow(); -} - -OutputIsoFile::OutputIsoFile() -{ - _init(); -} - -OutputIsoFile::~OutputIsoFile() throw() -{ - Close(); -} - -void OutputIsoFile::_init() -{ - m_version = 0; - - m_offset = 0; - m_blockofs = 0; - m_blocksize = 0; - m_blocks = 0; - - m_dtable = 0; - m_dtablesize = 0; -} - -void OutputIsoFile::Create(const wxString& filename, int version) -{ - Close(); - m_filename = filename; - - m_version = version; - m_offset = 0; - m_blockofs = 24; - m_blocksize = 2048; - - m_outstream = new wxFileOutputStream( m_filename ); - pxStream_OpenCheck( *m_outstream, m_filename, L"writing" ); - - Console.WriteLn("isoFile create ok: %s ", WX_STR(m_filename)); -} - -// Generates format header information for blockdumps. -void OutputIsoFile::WriteHeader(int _blockofs, uint _blocksize, uint _blocks) -{ - m_blocksize = _blocksize; - m_blocks = _blocks; - m_blockofs = _blockofs; - - Console.WriteLn("blockoffset = %d", m_blockofs); - Console.WriteLn("blocksize = %u", m_blocksize); - Console.WriteLn("blocks = %u", m_blocks); - - if (m_version == 2) - { - WriteBuffer("BDV2", 4); - WriteValue(m_blocksize); - WriteValue(m_blocks); - WriteValue(m_blockofs); - } -} - -void OutputIsoFile::WriteSector(const u8* src, uint lsn) -{ - if (m_version == 2) - { - // Find and ignore blocks that have already been dumped: - for (int i=0; i( lsn ); - } - else - { - wxFileOffset ofs = (wxFileOffset)lsn * m_blocksize + m_offset; - - m_outstream->SeekO( ofs ); - } - - WriteBuffer( src + m_blockofs, m_blocksize ); -} - -void OutputIsoFile::Close() -{ - m_dtable.Delete(); - - _init(); -} - -void OutputIsoFile::WriteBuffer( const void* src, size_t size ) -{ - m_outstream->Write(src, size); - if(m_outstream->GetLastError() == wxSTREAM_WRITE_ERROR) - { - int err = errno; - if (!err) - throw Exception::BadStream(m_filename).SetDiagMsg(pxsFmt(L"An error occurred while writing %u bytes to file", size)); - - ScopedExcept ex(Exception::FromErrno(m_filename, err)); - ex->SetDiagMsg( pxsFmt(L"An error occurred while writing %u bytes to file: %s", size, WX_STR(ex->DiagMsg())) ); - ex->Rethrow(); - } -} - -bool OutputIsoFile::IsOpened() const -{ - return m_outstream && m_outstream->IsOk(); -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + + +#include "PrecompiledHeader.h" +#include "IopCommon.h" +#include "IsoFileFormats.h" + +#include + +void pxStream_OpenCheck( const wxStreamBase& stream, const wxString& fname, const wxString& mode ) +{ + if (stream.IsOk()) return; + + ScopedExcept ex(Exception::FromErrno(fname, errno)); + ex->SetDiagMsg( pxsFmt(L"Unable to open the file for %s: %s", WX_STR(mode), WX_STR(ex->DiagMsg())) ); + ex->Rethrow(); +} + +OutputIsoFile::OutputIsoFile() +{ + _init(); +} + +OutputIsoFile::~OutputIsoFile() throw() +{ + Close(); +} + +void OutputIsoFile::_init() +{ + m_version = 0; + + m_offset = 0; + m_blockofs = 0; + m_blocksize = 0; + m_blocks = 0; + + m_dtable = 0; + m_dtablesize = 0; +} + +void OutputIsoFile::Create(const wxString& filename, int version) +{ + Close(); + m_filename = filename; + + m_version = version; + m_offset = 0; + m_blockofs = 24; + m_blocksize = 2048; + + m_outstream = new wxFileOutputStream( m_filename ); + pxStream_OpenCheck( *m_outstream, m_filename, L"writing" ); + + Console.WriteLn("isoFile create ok: %s ", WX_STR(m_filename)); +} + +// Generates format header information for blockdumps. +void OutputIsoFile::WriteHeader(int _blockofs, uint _blocksize, uint _blocks) +{ + m_blocksize = _blocksize; + m_blocks = _blocks; + m_blockofs = _blockofs; + + Console.WriteLn("blockoffset = %d", m_blockofs); + Console.WriteLn("blocksize = %u", m_blocksize); + Console.WriteLn("blocks = %u", m_blocks); + + if (m_version == 2) + { + WriteBuffer("BDV2", 4); + WriteValue(m_blocksize); + WriteValue(m_blocks); + WriteValue(m_blockofs); + } +} + +void OutputIsoFile::WriteSector(const u8* src, uint lsn) +{ + if (m_version == 2) + { + // Find and ignore blocks that have already been dumped: + for (int i=0; i( lsn ); + } + else + { + wxFileOffset ofs = (wxFileOffset)lsn * m_blocksize + m_offset; + + m_outstream->SeekO( ofs ); + } + + WriteBuffer( src + m_blockofs, m_blocksize ); +} + +void OutputIsoFile::Close() +{ + m_dtable.Delete(); + + _init(); +} + +void OutputIsoFile::WriteBuffer( const void* src, size_t size ) +{ + m_outstream->Write(src, size); + if(m_outstream->GetLastError() == wxSTREAM_WRITE_ERROR) + { + int err = errno; + if (!err) + throw Exception::BadStream(m_filename).SetDiagMsg(pxsFmt(L"An error occurred while writing %u bytes to file", size)); + + ScopedExcept ex(Exception::FromErrno(m_filename, err)); + ex->SetDiagMsg( pxsFmt(L"An error occurred while writing %u bytes to file: %s", size, WX_STR(ex->DiagMsg())) ); + ex->Rethrow(); + } +} + +bool OutputIsoFile::IsOpened() const +{ + return m_outstream && m_outstream->IsOk(); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CDVD/zlib_indexed.h pcsx2-1.4.0/pcsx2/CDVD/zlib_indexed.h --- pcsx2-1.3.1+dfsg/pcsx2/CDVD/zlib_indexed.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CDVD/zlib_indexed.h 2016-01-05 17:28:08.000000000 +0000 @@ -107,16 +107,7 @@ #include #endif -#include -#ifdef WIN32 -# define PX_fseeko _fseeki64 -# define PX_ftello _ftelli64 -# define PX_off_t s64 /* __int64 */ -#else -# define PX_fseeko fseeko -# define PX_ftello ftello -# define PX_off_t off_t -#endif +#include "CompressedFileReaderUtils.h" #define local static @@ -312,6 +303,11 @@ } } while (ret != Z_STREAM_END); + if (index == NULL) { + // Could happen if the start of the stream in Z_STREAM_END + return 0; + } + /* clean up and return index (release unused entries in list) */ (void)inflateEnd(&strm); index->list = (Point*)realloc(index->list, sizeof(struct point) * index->have); @@ -336,6 +332,10 @@ int isValid; } Zstate; +static inline PX_off_t getInOffset(zstate *state) { + return state->in_offset; +} + /* Use the index to read len bytes from offset into buf, return bytes read or negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past the end of the uncompressed data, then extract() will return a value less diff -Nru pcsx2-1.3.1+dfsg/pcsx2/CMakeLists.txt pcsx2-1.4.0/pcsx2/CMakeLists.txt --- pcsx2-1.3.1+dfsg/pcsx2/CMakeLists.txt 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -12,12 +12,7 @@ endif() -# set common flags set(CommonFlags - # GCC-4.6 crash pcsx2 during the binding of plugins at startup... - # Disable this optimization for the moment - -fno-omit-frame-pointer - # END GCC-4.6 -fno-strict-aliasing -Wno-parentheses -Wstrict-aliasing # Allow to track strict aliasing issue. @@ -27,64 +22,26 @@ -DWX_PRECOMP ) -# set optimization flags -set(OptimizationFlags - -falign-functions - -falign-jumps - -falign-labels - -falign-loops - -fcaller-saves - -fcprop-registers - -fcrossjumping - -fcse-follow-jumps - -fcse-skip-blocks - -fdefer-pop - -fdelete-null-pointer-checks - -fgcse - -fgcse-lm - -fif-conversion - -fif-conversion2 - -fmerge-constants - -foptimize-sibling-calls - -fpeephole2 - -fregmove - -freorder-blocks - -freorder-functions - -frerun-cse-after-loop - -fsched-interblock - -fsched-spec - -fstrict-overflow - -fthread-jumps - -ftree-ccp - -ftree-ch - -ftree-copyrename - -ftree-dce - -ftree-dominator-opts - -ftree-fre - -ftree-lrs - -ftree-pre - -ftree-sra - -ftree-ter - -ftree-vrp - -funit-at-a-time) - #Clang doesn't support a few common flags that GCC does. if(NOT USE_CLANG) set(pcsx2FinalFlags ${CommonFlags} -fno-guess-branch-probability -fno-dse -fno-tree-dse) endif() +if ("${PGO}" STREQUAL "generate") + set(pcsx2FinalFlags ${pcsx2FinalFlags} -fprofile-generate) +elseif("${PGO}" STREQUAL "use") + set(pcsx2FinalFlags ${pcsx2FinalFlags} -fprofile-use) +endif() + # Debug - Build if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(Output pcsx2-dbg) set(pcsx2FinalFlags ${pcsx2FinalFlags} ${CommonFlags} -DPCSX2_DEVBUILD -DPCSX2_DEBUG) elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(Output pcsx2-dev) - set(pcsx2FinalFlags ${pcsx2FinalFlags} ${CommonFlags} ${OptimizationFlags} -DPCSX2_DEVBUILD) + set(pcsx2FinalFlags ${pcsx2FinalFlags} ${CommonFlags} -DPCSX2_DEVBUILD) elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(Output pcsx2) - set(pcsx2FinalFlags ${pcsx2FinalFlags} ${CommonFlags} ${OptimizationFlags}) + set(pcsx2FinalFlags ${pcsx2FinalFlags} ${CommonFlags}) endif() @@ -95,10 +52,7 @@ ) endif() -# In package mode always use pcsx2 -if(PACKAGE_MODE) - set(Output pcsx2) -endif() +set(Output PCSX2) # Main pcsx2 source set(pcsx2Sources @@ -236,7 +190,10 @@ CDVD/CDVDisoReader.cpp CDVD/InputIsoFile.cpp CDVD/OutputIsoFile.cpp + CDVD/ChunksCache.cpp CDVD/CompressedFileReader.cpp + CDVD/CsoFileReader.cpp + CDVD/GzippedFileReader.cpp CDVD/IsoFS/IsoFile.cpp CDVD/IsoFS/IsoFSCDVD.cpp CDVD/IsoFS/IsoFS.cpp @@ -314,8 +271,8 @@ gui/Panels/MemoryCardListView.cpp gui/Panels/ThemeSelectorPanel.cpp gui/Dialogs/BaseConfigurationDialog.cpp - gui/Dialogs/BiosSelectorDialog.cpp gui/Dialogs/ConfirmationDialogs.cpp + gui/Dialogs/ConvertMemoryCardDialog.cpp gui/Dialogs/CreateMemoryCardDialog.cpp gui/Dialogs/FirstTimeWizard.cpp gui/Dialogs/GameDatabaseDialog.cpp @@ -340,6 +297,7 @@ gui/MainFrame.cpp gui/MainMenuClicks.cpp gui/MemoryCardFile.cpp + gui/MemoryCardFolder.cpp gui/Panels/BaseApplicableConfigPanel.cpp gui/Panels/MemoryCardListPanel.cpp gui/MessageBoxes.cpp @@ -392,6 +350,7 @@ gui/IsoDropTarget.h gui/MainFrame.h gui/MemoryCardFile.h + gui/MemoryCardFolder.h gui/MSWstuff.h gui/Panels/ConfigurationPanels.h gui/Panels/LogOptionsPanels.h @@ -418,7 +377,7 @@ ${res_bin}/ConfigIcon_Plugins.h ${res_bin}/ConfigIcon_Speedhacks.h ${res_bin}/ConfigIcon_Video.h - ${res_bin}/Dualshock.h + ${res_bin}/Logo.h ${res_bin}/Breakpoint_Active.h ${res_bin}/Breakpoint_Inactive.h ) @@ -441,6 +400,7 @@ # Linux sources set(pcsx2LinuxSources + Linux/LnxConsolePipe.cpp Linux/LnxKeyCodes.cpp Linux/LnxFlatFileReader.cpp ) @@ -674,28 +634,27 @@ ) set(pcsx2FinalLibs - Utilities - x86emitter - ${wxWidgets_LIBRARIES} - ${GTK2_LIBRARIES} - ${ZLIB_LIBRARIES} + Utilities + x86emitter + ${wxWidgets_LIBRARIES} + ${GTK2_LIBRARIES} + ${ZLIB_LIBRARIES} ${AIO_LIBRARIES} + ${GCOV_LIBRARIES} ) # additonal include directories include_directories( - gui - x86 - ${CMAKE_BINARY_DIR}/pcsx2/gui + gui + x86 + ${CMAKE_BINARY_DIR}/pcsx2/gui ) ### Generate the resources files file(MAKE_DIRECTORY ${res_bin}) -add_custom_command(OUTPUT "${res_bin}/Dualshock.h" COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/hex2h.pl "${res_src}/Dualshock.jpg" "${res_bin}/Dualshock" ) - foreach(res_file IN ITEMS - AppIcon16 AppIcon32 AppIcon64 BackgroundLogo ButtonIcon_Camera + AppIcon16 AppIcon32 AppIcon64 BackgroundLogo Logo ButtonIcon_Camera ConfigIcon_Appearance ConfigIcon_Cpu ConfigIcon_Gamefixes ConfigIcon_MemoryCard ConfigIcon_Paths ConfigIcon_Plugins ConfigIcon_Speedhacks ConfigIcon_Video Breakpoint_Active Breakpoint_Inactive) add_custom_command(OUTPUT "${res_bin}/${res_file}.h" COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/hex2h.pl "${res_src}/${res_file}.png" "${res_bin}/${res_file}" ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Config.h pcsx2-1.4.0/pcsx2/Config.h --- pcsx2-1.3.1+dfsg/pcsx2/Config.h 2014-08-15 22:31:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Config.h 2016-01-05 17:28:08.000000000 +0000 @@ -34,7 +34,8 @@ // time. So it's placed afer PluginId_Count so that it doesn't show up in the conf // screens or other plugin tables. - PluginId_Mcd + PluginId_Mcd, + PluginId_AllocCount // Extra value for correct array allocation }; enum GamefixId @@ -386,7 +387,7 @@ vuThread :1; // Enable Threaded VU1 BITFIELD_END - u8 EECycleRate; // EE cycle rate selector (1.0, 1.5, 2.0) + s8 EECycleRate; // EE cycle rate selector (1.0, 1.5, 2.0) u8 VUCycleSteal; // VU Cycle Stealer factor (0, 1, 2, or 3) SpeedhackOptions(); @@ -413,13 +414,16 @@ u8 FontWidth; u8 FontHeight; + u32 WindowWidth; + u32 WindowHeight; DebugOptions(); void LoadSave( IniInterface& conf ); bool operator ==( const DebugOptions& right ) const { - return OpEqu( bitset ) && OpEqu( FontWidth ) && OpEqu( FontHeight ); + return OpEqu( bitset ) && OpEqu( FontWidth ) && OpEqu( FontHeight ) + && OpEqu( WindowWidth ) && OpEqu( WindowHeight ); } bool operator !=( const DebugOptions& right ) const @@ -441,6 +445,7 @@ BackupSavestate :1, // enables simulated ejection of memory cards when loading savestates McdEnableEjection :1, + McdFolderAutoManage :1, MultitapPort0_Enabled:1, MultitapPort1_Enabled:1, diff -Nru pcsx2-1.3.1+dfsg/pcsx2/COP0.cpp pcsx2-1.4.0/pcsx2/COP0.cpp --- pcsx2-1.3.1+dfsg/pcsx2/COP0.cpp 2014-12-07 11:20:59.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/COP0.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,6 +16,7 @@ #include "PrecompiledHeader.h" #include "Common.h" +#include "COP0.h" u32 s_iLastCOP0Cycle = 0; u32 s_iLastPERFCycle[2] = { 0, 0 }; @@ -508,7 +509,7 @@ } int CPCOND0() { - return ((dmacRegs.stat.CIS | ~dmacRegs.pcr.CPC) == 0x3ff); + return (((dmacRegs.stat.CIS | ~dmacRegs.pcr.CPC) & 0x3FF) == 0x3ff); } //#define CPCOND0 1 diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Counters.cpp pcsx2-1.4.0/pcsx2/Counters.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Counters.cpp 2014-08-15 04:32:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Counters.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -29,6 +29,8 @@ #include "ps2/HwInternal.h" +#include "Sio.h" + using namespace Threading; extern u8 psxhblankgate; @@ -171,6 +173,7 @@ struct vSyncTimingInfo { Fixed100 Framerate; // frames per second (8 bit fixed) + GS_RegionMode RegionMode; // used to detect change (interlaced/progressive) u32 Render; // time from vblank end to vblank start (cycles) u32 Blank; // time from vblank start to vblank end (cycles) @@ -184,15 +187,15 @@ static vSyncTimingInfo vSyncInfo; -static void vSyncInfoCalc( vSyncTimingInfo* info, Fixed100 framesPerSecond, u32 scansPerFrame ) +static void vSyncInfoCalc(vSyncTimingInfo* info, Fixed100 framesPerSecond, u32 scansPerFrame) { // I use fixed point math here to have strict control over rounding errors. --air // NOTE: mgs3 likes a /4 vsync, but many games prefer /2. This seems to indicate a // problem in the counters vsync gates somewhere. - u64 Frame = ((u64)PS2CLK * 1000000ULL) / (framesPerSecond*100).ToIntRounded(); - u64 HalfFrame = Frame / 2; + u64 Frame = ((u64)PS2CLK * 1000000ULL) / (framesPerSecond * 100).ToIntRounded(); + u64 HalfFrame = Frame / 2; // One test we have shows that VBlank lasts for ~22 HBlanks, another we have show that is the time it's off. // There exists a game (Legendz Gekitou! Saga Battle) Which runs REALLY slowly if VBlank is ~22 HBlanks, so the other test wins. @@ -202,38 +205,38 @@ //I would have suspected this to be Frame - Blank, but that seems to completely freak it out //and the test results are completely wrong. It seems 100% the same as the PS2 test on this, //So let's roll with it :P - u64 Render = HalfFrame - Blank; // so use the half-frame value for these... + u64 Render = HalfFrame - Blank; // so use the half-frame value for these... // Important! The hRender/hBlank timers should be 50/50 for best results. // (this appears to be what the real EE's timing crystal does anyway) - u64 Scanline = Frame / scansPerFrame; - u64 hBlank = Scanline / 2; - u64 hRender = Scanline - hBlank; - - if ( gsRegionMode == Region_NTSC_PROGRESSIVE ) + u64 Scanline = Frame / scansPerFrame; + u64 hBlank = Scanline / 2; + u64 hRender = Scanline - hBlank; + + if (gsRegionMode == Region_NTSC_PROGRESSIVE) { hBlank /= 2; hRender /= 2; } - info->Framerate = framesPerSecond; - info->Render = (u32)(Render/10000); - info->Blank = (u32)(Blank/10000); + info->Framerate = framesPerSecond; + info->Render = (u32)(Render / 10000); + info->Blank = (u32)(Blank / 10000); - info->hRender = (u32)(hRender/10000); - info->hBlank = (u32)(hBlank/10000); + info->hRender = (u32)(hRender / 10000); + info->hBlank = (u32)(hBlank / 10000); info->hScanlinesPerFrame = scansPerFrame; // Apply rounding: - if( ( Render - info->Render ) >= 5000 ) info->Render++; - else if( ( Blank - info->Blank ) >= 5000 ) info->Blank++; + if ((Render - info->Render) >= 5000) info->Render++; + else if ((Blank - info->Blank) >= 5000) info->Blank++; - if( ( hRender - info->hRender ) >= 5000 ) info->hRender++; - else if( ( hBlank - info->hBlank ) >= 5000 ) info->hBlank++; + if ((hRender - info->hRender) >= 5000) info->hRender++; + else if ((hBlank - info->hBlank) >= 5000) info->hBlank++; // Calculate accumulative hSync rounding error per half-frame: - if ( gsRegionMode != Region_NTSC_PROGRESSIVE ) // gets off the chart in that mode + if (gsRegionMode != Region_NTSC_PROGRESSIVE) // gets off the chart in that mode { u32 hSyncCycles = ((info->hRender + info->hBlank) * scansPerFrame) / 2; u32 vSyncCycles = (info->Render + info->Blank); @@ -255,9 +258,9 @@ // the GS's output circuit. It is the same regardless if the GS is outputting interlace // or progressive scan content. - Fixed100 framerate; - u32 scanlines; - bool isCustom; + Fixed100 framerate = 0; + u32 scanlines = 0; + bool isCustom = false; if( gsRegionMode == Region_PAL ) { @@ -276,18 +279,19 @@ else if ( gsRegionMode == Region_NTSC_PROGRESSIVE ) { isCustom = (EmuConfig.GS.FramerateNTSC != 59.94); - framerate = 30; // Cheating here to avoid a complex change to the below "vSyncInfo.Framerate != framerate" branch + framerate = EmuConfig.GS.FramerateNTSC / 2; scanlines = SCANLINES_TOTAL_NTSC; } - if( vSyncInfo.Framerate != framerate ) + if (vSyncInfo.Framerate != framerate || vSyncInfo.RegionMode != gsRegionMode) { + vSyncInfo.RegionMode = gsRegionMode; vSyncInfoCalc( &vSyncInfo, framerate, scanlines ); Console.WriteLn( Color_Green, "(UpdateVSyncRate) Mode Changed to %s.", ( gsRegionMode == Region_PAL ) ? "PAL" : - ( gsRegionMode == Region_NTSC ) ? "NTSC" : "Progressive Scan" ); + ( gsRegionMode == Region_NTSC ) ? "NTSC" : "NTSC Progressive Scan" ); if( isCustom ) - Console.Indent().WriteLn( Color_StrongGreen, "... with user configured refresh rate: %.02f Hz", framerate.ToFloat() ); + Console.Indent().WriteLn( Color_StrongGreen, "... with user configured refresh rate: %.02f Hz", 2 * framerate.ToFloat() ); hsyncCounter.CycleT = vSyncInfo.hRender; // Amount of cycles before the counter will be updated vsyncCounter.CycleT = vSyncInfo.Render; // Amount of cycles before the counter will be updated @@ -428,6 +432,12 @@ hwIntcIrq(INTC_VBLANK_E); // HW Irq psxVBlankEnd(); // psxCounters vBlank End if (gates) rcntEndGate(true, sCycle); // Counters End Gate Code + + // FolderMemoryCard needs information on how much time has passed since the last write + // Call it every 60 frames + if (!(g_FrameCount % 60)) + sioNextFrame(); + frameLimit(); // limit FPS //Do this here, breaks Dynasty Warriors otherwise. @@ -645,7 +655,8 @@ // Just set the start cycle (sCycleT) -- counting will be done as needed // for events (overflows, targets, mode changes, and the gate off below) - counters[i].mode.IsCounting = 1; + counters[i].count = rcntRcount(i); + counters[i].mode.IsCounting = 0; counters[i].sCycleT = sCycle; EECNT_LOG("EE Counter[%d] %s StartGate Type0, count = %x", i, isVblank ? "vblank" : "hblank", counters[i].count ); @@ -690,10 +701,9 @@ // Set the count here. Since the timer is being turned off it's // important to record its count at this point (it won't be counted by // calls to rcntUpdate). - - counters[i].count = rcntRcount(i); - counters[i].mode.IsCounting = 0; - counters[i].sCycleT = sCycle; + counters[i].mode.IsCounting = 1; + counters[i].sCycleT = cpuRegs.cycle; + EECNT_LOG("EE Counter[%d] %s EndGate Type0, count = %x", i, isVblank ? "vblank" : "hblank", counters[i].count ); break; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Breakpoints.cpp pcsx2-1.4.0/pcsx2/DebugTools/Breakpoints.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Breakpoints.cpp 2014-05-06 07:25:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/Breakpoints.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -45,7 +45,14 @@ return addr; } -MemCheck::MemCheck() +MemCheck::MemCheck() : + start(0), + end(0), + cond(MEMCHECK_READWRITE), + result(MEMCHECK_BOTH), + lastPC(0), + lastAddr(0), + lastSize(0) { numHits = 0; } @@ -385,6 +392,7 @@ if (resume) r5900Debug.resumeCpu(); - - wxGetApp().GetDisassemblyPtr()->update(); + auto disassembly_window = wxGetApp().GetDisassemblyPtr(); + if (disassembly_window) // make sure that valid pointer is recieved to prevent potential NULL dereference. + disassembly_window->update(); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Breakpoints.h pcsx2-1.4.0/pcsx2/DebugTools/Breakpoints.h --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Breakpoints.h 2014-08-21 11:01:07.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/Breakpoints.h 2016-01-05 17:28:08.000000000 +0000 @@ -43,7 +43,8 @@ struct BreakPoint { - BreakPoint() : hasCond(false) {} + BreakPoint() : addr(0), enabled(false), temporary(false), hasCond(false) + {} u32 addr; bool enabled; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Debug.h pcsx2-1.4.0/pcsx2/DebugTools/Debug.h --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/Debug.h 2014-11-14 21:52:27.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/Debug.h 2016-01-05 17:28:08.000000000 +0000 @@ -66,9 +66,6 @@ class SysTraceLog : public TextFileTraceLog { public: - const char* PrePrefix; - -public: TraceLog_ImplementBaseAPI(SysTraceLog) // Pass me a NULL and you *will* suffer! Muahahaha. @@ -77,12 +74,6 @@ void DoWrite( const char *fmt ) const; - SysTraceLog& SetPrefix( const char* name ) - { - PrePrefix = name; - return *this; - } - }; class SysTraceLog_EE : public SysTraceLog diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisassemblyManager.cpp pcsx2-1.4.0/pcsx2/DebugTools/DisassemblyManager.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisassemblyManager.cpp 2014-08-19 13:43:38.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisassemblyManager.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -444,8 +444,10 @@ }; LaneInfo lanes[NUM_LANES]; - for (int i = 0; i < NUM_LANES; i++) + for (int i = 0; i < NUM_LANES; i++) { lanes[i].used = false; + lanes[i].end = 0; + } u32 end = address+size; @@ -643,6 +645,7 @@ macro = new DisassemblyMacro(cpu,opAddress); macro->setMacroMemory("sh",immediate,rt,2); funcPos += 4; + break; case 0x2B: // sw macro = new DisassemblyMacro(cpu,opAddress); macro->setMacroMemory("sw",immediate,rt,4); @@ -989,6 +992,8 @@ } break; default: + // Avoid a call to strlen with random data + buffer[0] = 0; break; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisassemblyManager.h pcsx2-1.4.0/pcsx2/DebugTools/DisassemblyManager.h --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisassemblyManager.h 2014-07-12 10:47:35.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisassemblyManager.h 2016-01-05 17:28:08.000000000 +0000 @@ -206,7 +206,7 @@ private: DisassemblyEntry* getEntry(u32 address); std::map entries; - DebugInterface* cpu; + DebugInterface* cpu = NULL; static int maxParamChars; }; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisR3000A.cpp pcsx2-1.4.0/pcsx2/DebugTools/DisR3000A.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisR3000A.cpp 2014-07-04 11:35:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisR3000A.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -28,7 +28,8 @@ "r0", "at", "v0", "v1", "a0", "a1","a2", "a3", "t0", "t1", "t2", "t3", "t4", "t5","t6", "t7", "s0", "s1", "s2", "s3", "s4", "s5","s6", "s7", - "t8", "t9", "k0", "k1", "gp", "sp","fp", "ra"}; + "t8", "t9", "k0", "k1", "gp", "sp","fp", "ra", + "HI", "LO" }; const char * const disRNameCP0[] = { "Index" , "Random" , "EntryLo0", "EntryLo1", "Context" , "PageMask" , "Wired" , "*Check me*", diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisR5900asm.cpp pcsx2-1.4.0/pcsx2/DebugTools/DisR5900asm.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisR5900asm.cpp 2014-12-07 16:21:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisR5900asm.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -650,9 +650,9 @@ void label_decode( std::string& output, u32 addr ) { - std::string buf; - ssprintf(buf, "->$0x%08X", addr); - output += buf; + char buffer[32]; + sprintf(buffer, "->$0x%08X", addr); + output += std::string(buffer); } void jump_decode( std::string& output ) @@ -783,7 +783,7 @@ else if (disSimplify && rs != 0 && rt == 0) disBranch(output, "bnez", rs); else - disBranch(output, "bne", rt, rs); + disBranch(output, "bne", rs, rt); } void BLEZ( std::string& output ) { disBranch(output, "blez", DECODE_RS); } @@ -847,7 +847,7 @@ else if (disSimplify && rs != 0 && rt == 0) disBranch(output, "bnezl", rs); else - disBranch(output, "bnel", rt, rs); + disBranch(output, "bnel", rs, rt); } void BLEZL( std::string& output ) { disBranch(output, "blezl", DECODE_RS); } @@ -869,6 +869,9 @@ case 2: rt = COP2_REG_FP[DECODE_FT]; break; + default: + rt = "???"; + break; } const char* rs = GPR_REG[DECODE_RS]; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVU0Micro.cpp pcsx2-1.4.0/pcsx2/DebugTools/DisVU0Micro.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVU0Micro.cpp 2014-08-15 13:19:56.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisVU0Micro.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,6 +19,7 @@ #include "Debug.h" static char ostr[1024]; +#define ostrA (ostr + strlen(ostr)) // Type deffinition of our functions #define DisFInterface (u32 code, u32 pc) @@ -31,7 +32,8 @@ #define MakeDisF(fn, b) \ char* fn DisFInterface { \ sprintf (ostr, "%8.8x %8.8x:", pc, code); \ - b; /*ostr[(strlen(ostr) - 1)] = 0;*/ return ostr; \ + b; \ + return ostr; \ } //Lower/Upper instructions can use that.. @@ -42,22 +44,22 @@ #define _Is_ (_Fs_ & 15) #define _Id_ (_Fd_ & 15) -#define dName(i) sprintf(ostr, "%s %-7s,", ostr, i) -#define dNameU(i) { char op[256]; sprintf(op, "%s.%s%s%s%s", i, _X ? "x" : "", _Y ? "y" : "", _Z ? "z" : "", _W ? "w" : ""); sprintf(ostr, "%s %-7s,", ostr, op); } +#define dName(i) sprintf(ostrA, " %-7s,", i) +#define dNameU(i) { char op[256]; sprintf(op, "%s.%s%s%s%s", i, _X ? "x" : "", _Y ? "y" : "", _Z ? "z" : "", _W ? "w" : ""); sprintf(ostrA, " %-7s,", op); } -#define dCP2128f(i) sprintf(ostr, "%s w=%f z=%f y=%f x=%f (%s),", ostr, VU0.VF[i].f.w, VU0.VF[i].f.z, VU0.VF[i].f.y, VU0.VF[i].f.x, R5900::COP2_REG_FP[i]) -#define dCP232x(i) sprintf(ostr, "%s x=%f (%s),", ostr, VU0.VF[i].f.x, R5900::COP2_REG_FP[i]) -#define dCP232y(i) sprintf(ostr, "%s y=%f (%s),", ostr, VU0.VF[i].f.y, R5900::COP2_REG_FP[i]) -#define dCP232z(i) sprintf(ostr, "%s z=%f (%s),", ostr, VU0.VF[i].f.z, R5900::COP2_REG_FP[i]) -#define dCP232w(i) sprintf(ostr, "%s w=%f (%s),", ostr, VU0.VF[i].f.w, R5900::COP2_REG_FP[i]) -#define dCP2ACCf() sprintf(ostr, "%s w=%f z=%f y=%f x=%f (ACC),", ostr, VU0.ACC.f.w, VU0.ACC.f.z, VU0.ACC.f.y, VU0.ACC.f.x) -#define dCP232i(i) sprintf(ostr, "%s %8.8x (%s),", ostr, VU0.VI[i].UL, R5900::COP2_REG_CTL[i]) -#define dCP232iF(i) sprintf(ostr, "%s %f (%s),", ostr, VU0.VI[i].F, R5900::COP2_REG_CTL[i]) -#define dCP232f(i, j) sprintf(ostr, "%s Q %s=%f (%s),", ostr, R5900::COP2_VFnames[j], VU0.VF[i].F[j], R5900::COP2_REG_FP[i]) -#define dImm5() sprintf(ostr, "%s %d,", ostr, (code >> 6) & 0x1f) -#define dImm11() sprintf(ostr, "%s %d,", ostr, code & 0x7ff) -#define dImm15() sprintf(ostr, "%s %d,", ostr, ( ( code >> 10 ) & 0x7800 ) | ( code & 0x7ff )) +#define dCP2128f(i) sprintf(ostrA, " w=%f z=%f y=%f x=%f (%s),", VU0.VF[i].f.w, VU0.VF[i].f.z, VU0.VF[i].f.y, VU0.VF[i].f.x, R5900::COP2_REG_FP[i]) +#define dCP232x(i) sprintf(ostrA, " x=%f (%s),", VU0.VF[i].f.x, R5900::COP2_REG_FP[i]) +#define dCP232y(i) sprintf(ostrA, " y=%f (%s),", VU0.VF[i].f.y, R5900::COP2_REG_FP[i]) +#define dCP232z(i) sprintf(ostrA, " z=%f (%s),", VU0.VF[i].f.z, R5900::COP2_REG_FP[i]) +#define dCP232w(i) sprintf(ostrA, " w=%f (%s),", VU0.VF[i].f.w, R5900::COP2_REG_FP[i]) +#define dCP2ACCf() sprintf(ostrA, " w=%f z=%f y=%f x=%f (ACC),", VU0.ACC.f.w, VU0.ACC.f.z, VU0.ACC.f.y, VU0.ACC.f.x) +#define dCP232i(i) sprintf(ostrA, " %8.8x (%s),", VU0.VI[i].UL, R5900::COP2_REG_CTL[i]) +#define dCP232iF(i) sprintf(ostrA, " %f (%s),", VU0.VI[i].F, R5900::COP2_REG_CTL[i]) +#define dCP232f(i, j) sprintf(ostrA, " Q %s=%f (%s),", R5900::COP2_VFnames[j], VU0.VF[i].F[j], R5900::COP2_REG_FP[i]) +#define dImm5() sprintf(ostrA, " %d,", (code >> 6) & 0x1f) +#define dImm11() sprintf(ostrA, " %d,", code & 0x7ff) +#define dImm15() sprintf(ostrA, " %d,", ( ( code >> 10 ) & 0x7800 ) | ( code & 0x7ff )) #define _X ((code>>24) & 0x1) #define _Y ((code>>23) & 0x1) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVU1Micro.cpp pcsx2-1.4.0/pcsx2/DebugTools/DisVU1Micro.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVU1Micro.cpp 2014-08-15 13:19:56.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisVU1Micro.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,7 @@ #include "VUmicro.h" static char ostr[1024]; +#define ostrA (ostr + strlen(ostr)) // Type deffinition of our functions #define DisFInterface (u32 code, u32 pc) @@ -33,7 +34,8 @@ char* fn DisFInterface { \ if( !!CpuVU1->IsInterpreter ) sprintf (ostr, "%8.8x %8.8x:", pc, code); \ else ostr[0] = 0; \ - b; /*ostr[(strlen(ostr) - 1)] = 0;*/ return ostr; \ + b; \ + return ostr; \ } //Lower/Upper instructions can use that.. @@ -44,61 +46,61 @@ #define _Is_ (_Fs_ & 15) #define _Id_ (_Fd_ & 15) -#define dName(i) sprintf(ostr, "%s %-12s", ostr, i); \ +#define dName(i) sprintf(ostrA, " %-12s", i); \ #define dNameU(i) { \ char op[256]; sprintf(op, "%s.%s%s%s%s", i, _X ? "x" : "", _Y ? "y" : "", _Z ? "z" : "", _W ? "w" : ""); \ - sprintf(ostr, "%s %-12s", ostr, op); \ + sprintf(ostrA, " %-12s", op); \ } #define dCP2128f(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_FP[i]); \ - else sprintf(ostr, "%s w=%f (%8.8x) z=%f (%8.8x) y=%f (%8.8xl) x=%f (%8.8x) (%s),", ostr, VU1.VF[i].f.w, VU1.VF[i].UL[3], VU1.VF[i].f.z, VU1.VF[i].UL[2], VU1.VF[i].f.y, VU1.VF[i].UL[1], VU1.VF[i].f.x, VU1.VF[i].UL[0], R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_FP[i]); \ + else sprintf(ostrA, " w=%f (%8.8x) z=%f (%8.8x) y=%f (%8.8xl) x=%f (%8.8x) (%s),", VU1.VF[i].f.w, VU1.VF[i].UL[3], VU1.VF[i].f.z, VU1.VF[i].UL[2], VU1.VF[i].f.y, VU1.VF[i].UL[1], VU1.VF[i].f.x, VU1.VF[i].UL[0], R5900::COP2_REG_FP[i]); \ } \ #define dCP232x(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_FP[i]); \ - else sprintf(ostr, "%s x=%f (%s),", ostr, VU1.VF[i].f.x, R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_FP[i]); \ + else sprintf(ostrA, " x=%f (%s),", VU1.VF[i].f.x, R5900::COP2_REG_FP[i]); \ } \ #define dCP232y(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_FP[i]); \ - else sprintf(ostr, "%s y=%f (%s),", ostr, VU1.VF[i].f.y, R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_FP[i]); \ + else sprintf(ostrA, " y=%f (%s),", VU1.VF[i].f.y, R5900::COP2_REG_FP[i]); \ } \ #define dCP232z(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_FP[i]); \ - else sprintf(ostr, "%s z=%f (%s),", ostr, VU1.VF[i].f.z, R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_FP[i]); \ + else sprintf(ostrA, " z=%f (%s),", VU1.VF[i].f.z, R5900::COP2_REG_FP[i]); \ } #define dCP232w(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_FP[i]); \ - else sprintf(ostr, "%s w=%f (%s),", ostr, VU1.VF[i].f.w, R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_FP[i]); \ + else sprintf(ostrA, " w=%f (%s),", VU1.VF[i].f.w, R5900::COP2_REG_FP[i]); \ } #define dCP2ACCf() { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s ACC,", ostr); \ - else sprintf(ostr, "%s w=%f z=%f y=%f x=%f (ACC),", ostr, VU1.ACC.f.w, VU1.ACC.f.z, VU1.ACC.f.y, VU1.ACC.f.x); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " ACC,"); \ + else sprintf(ostrA, " w=%f z=%f y=%f x=%f (ACC),", VU1.ACC.f.w, VU1.ACC.f.z, VU1.ACC.f.y, VU1.ACC.f.x); \ } \ #define dCP232i(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_CTL[i]); \ - else sprintf(ostr, "%s %8.8x (%s),", ostr, VU1.VI[i].UL, R5900::COP2_REG_CTL[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_CTL[i]); \ + else sprintf(ostrA, " %8.8x (%s),", VU1.VI[i].UL, R5900::COP2_REG_CTL[i]); \ } #define dCP232iF(i) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s,", ostr, R5900::COP2_REG_CTL[i]); \ - else sprintf(ostr, "%s %f (%s),", ostr, VU1.VI[i].F, R5900::COP2_REG_CTL[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s,", R5900::COP2_REG_CTL[i]); \ + else sprintf(ostrA, " %f (%s),", VU1.VI[i].F, R5900::COP2_REG_CTL[i]); \ } #define dCP232f(i, j) { \ - if( !CpuVU1->IsInterpreter ) sprintf(ostr, "%s %s%s,", ostr, R5900::COP2_REG_FP[i], R5900::COP2_VFnames[j]); \ - else sprintf(ostr, "%s %s=%f (%s),", ostr, R5900::COP2_VFnames[j], VU1.VF[i].F[j], R5900::COP2_REG_FP[i]); \ + if( !CpuVU1->IsInterpreter ) sprintf(ostrA, " %s%s,", R5900::COP2_REG_FP[i], R5900::COP2_VFnames[j]); \ + else sprintf(ostrA, " %s=%f (%s),", R5900::COP2_VFnames[j], VU1.VF[i].F[j], R5900::COP2_REG_FP[i]); \ } -#define dImm5() sprintf(ostr, "%s %d,", ostr, (s16)((code >> 6) & 0x10 ? 0xfff0 | ((code >> 6) & 0xf) : (code >> 6) & 0xf)) -#define dImm11() sprintf(ostr, "%s %d,", ostr, (s16)(code & 0x400 ? 0xfc00 | (code & 0x3ff) : code & 0x3ff)) -#define dImm15() sprintf(ostr, "%s %d,", ostr, ( ( code >> 10 ) & 0x7800 ) | ( code & 0x7ff )) +#define dImm5() sprintf(ostrA, " %d,", (s16)((code >> 6) & 0x10 ? 0xfff0 | ((code >> 6) & 0xf) : (code >> 6) & 0xf)) +#define dImm11() sprintf(ostrA, " %d,", (s16)(code & 0x400 ? 0xfc00 | (code & 0x3ff) : code & 0x3ff)) +#define dImm15() sprintf(ostrA, " %d,", ( ( code >> 10 ) & 0x7800 ) | ( code & 0x7ff )) #define _X ((code>>24) & 0x1) #define _Y ((code>>23) & 0x1) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVUops.h pcsx2-1.4.0/pcsx2/DebugTools/DisVUops.h --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/DisVUops.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/DisVUops.h 2016-01-05 17:28:08.000000000 +0000 @@ -50,17 +50,17 @@ MakeDisF(dis##VU##MI_RNEXT, dNameU("RNEXT"); dCP232i(REG_R); dCP2128f(_Ft_);) \ MakeDisF(dis##VU##MI_RXOR, dNameU("RXOR"); dCP232i(REG_R); dCP232f(_Fs_, _Fsf_);) \ MakeDisF(dis##VU##MI_WAITQ, dName("WAITQ"); ) \ -MakeDisF(dis##VU##MI_FSAND, dName("FSAND"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostr, "%s %.3x,", ostr, code&0xfff); ) \ -MakeDisF(dis##VU##MI_FSEQ, dName("FSEQ"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostr, "%s %.3x,", ostr, code&0xfff);) \ -MakeDisF(dis##VU##MI_FSOR, dName("FSOR"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostr, "%s %.3x,", ostr, code&0xfff);) \ +MakeDisF(dis##VU##MI_FSAND, dName("FSAND"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostrA, " %.3x,", code&0xfff); ) \ +MakeDisF(dis##VU##MI_FSEQ, dName("FSEQ"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostrA, " %.3x,", code&0xfff);) \ +MakeDisF(dis##VU##MI_FSOR, dName("FSOR"); dCP232i(_It_); dCP232i(REG_STATUS_FLAG); sprintf(ostrA, " %.3x,", code&0xfff);) \ MakeDisF(dis##VU##MI_FSSET, dName("FSSET"); dCP232i(REG_STATUS_FLAG);) \ MakeDisF(dis##VU##MI_FMAND, dName("FMAND"); dCP232i(_It_); dCP232i(REG_MAC_FLAG); dCP232i(_Is_);) \ MakeDisF(dis##VU##MI_FMEQ, dName("FMEQ"); dCP232i(_It_); dCP232i(REG_MAC_FLAG); dCP232i(_Is_);) \ MakeDisF(dis##VU##MI_FMOR, dName("FMOR"); dCP232i(_It_); dCP232i(REG_MAC_FLAG); dCP232i(_Is_);) \ -MakeDisF(dis##VU##MI_FCAND, dName("FCAND"); dCP232i(1); sprintf(ostr, "%s %8.8x,", ostr, code&0xffffff); ) \ +MakeDisF(dis##VU##MI_FCAND, dName("FCAND"); dCP232i(1); sprintf(ostrA, " %8.8x,", code&0xffffff); ) \ MakeDisF(dis##VU##MI_FCEQ, dName("FCEQ"); dCP232i(1); dCP232i(REG_CLIP_FLAG);) \ MakeDisF(dis##VU##MI_FCOR, dName("FCOR"); dCP232i(1); dCP232i(REG_CLIP_FLAG);) \ -MakeDisF(dis##VU##MI_FCSET, dName("FCSET"); dCP232i(REG_CLIP_FLAG); sprintf(ostr, "%s %.6x,", ostr, code&0xffffff); ) \ +MakeDisF(dis##VU##MI_FCSET, dName("FCSET"); dCP232i(REG_CLIP_FLAG); sprintf(ostrA, " %.6x,", code&0xffffff); ) \ MakeDisF(dis##VU##MI_FCGET, dName("FCGET"); dCP232i(_It_); dCP232i(REG_CLIP_FLAG);) \ MakeDisF(dis##VU##MI_IBEQ, dName("IBEQ"); dImm11(); dCP232i(_It_); dCP232i(_Is_);) \ MakeDisF(dis##VU##MI_IBGEZ, dName("IBEZ"); dImm11(); dCP232i(_It_); dCP232i(_Is_);) \ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/ExpressionParser.cpp pcsx2-1.4.0/pcsx2/DebugTools/ExpressionParser.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/ExpressionParser.cpp 2014-04-06 13:11:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/ExpressionParser.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -413,8 +413,8 @@ size_t num = 0; u64 opcode; std::vector valueStack; - u64 arg[5]; - float fArg[5]; + u64 arg[5] = {0}; + float fArg[5] = {0}; bool useFloat = false; while (num < exp.size()) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/MipsAssembler.cpp pcsx2-1.4.0/pcsx2/DebugTools/MipsAssembler.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/MipsAssembler.cpp 2014-10-28 07:20:32.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/MipsAssembler.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -691,6 +691,8 @@ switch (immediateType) { + case MIPS_NOIMMEDIATE: + break; case MIPS_IMMEDIATE5: case MIPS_IMMEDIATE20: encoding |= immediate.value << 6; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/DebugTools/SymbolMap.cpp pcsx2-1.4.0/pcsx2/DebugTools/SymbolMap.cpp --- pcsx2-1.3.1+dfsg/pcsx2/DebugTools/SymbolMap.cpp 2014-04-06 13:11:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/DebugTools/SymbolMap.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -241,6 +241,7 @@ ModuleEntry mod; strncpy(mod.name, name, ARRAY_SIZE(mod.name)); + mod.name[ARRAY_SIZE(mod.name) - 1] = 0; mod.start = address; mod.size = size; mod.index = (int)modules.size() + 1; @@ -340,11 +341,8 @@ if (existing != functions.end()) { existing->second.size = size; if (existing->second.module != moduleIndex) { - FunctionEntry func = existing->second; - func.start = relAddress; - func.module = moduleIndex; - functions.erase(existing); - functions[symbolKey] = func; + existing->second.start = relAddress; + existing->second.module = moduleIndex; } // Refresh the active item if it exists. @@ -539,11 +537,8 @@ // We leave an existing label alone, rather than overwriting. // But we'll still upgrade it to the correct module / relative address. if (existing->second.module != moduleIndex) { - LabelEntry label = existing->second; - label.addr = relAddress; - label.module = moduleIndex; - labels.erase(existing); - labels[symbolKey] = label; + existing->second.addr = relAddress; + existing->second.module = moduleIndex; // Refresh the active item if it exists. auto active = activeLabels.find(address); @@ -575,8 +570,8 @@ auto symbolKey = std::make_pair(labelInfo->second.module, labelInfo->second.addr); auto label = labels.find(symbolKey); if (label != labels.end()) { - strcpy(label->second.name,name); - label->second.name[127] = 0; + strncpy(label->second.name, name, ARRAY_SIZE(label->second.name)); + label->second.name[ARRAY_SIZE(label->second.name) - 1] = 0; // Allow the caller to skip this as it causes extreme startup slowdown // when this gets called for every function identified by the function replacement code. @@ -645,11 +640,8 @@ existing->second.size = size; existing->second.type = type; if (existing->second.module != moduleIndex) { - DataEntry entry = existing->second; - entry.module = moduleIndex; - entry.start = relAddress; - data.erase(existing); - data[symbolKey] = entry; + existing->second.module = moduleIndex; + existing->second.start = relAddress; } // Refresh the active item if it exists. diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Docs/GPL.txt pcsx2-1.4.0/pcsx2/Docs/GPL.txt --- pcsx2-1.3.1+dfsg/pcsx2/Docs/GPL.txt 2009-09-08 12:08:10.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Docs/GPL.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - 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. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -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. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - 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 -state 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program 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, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU 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. But first, please read + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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. But first, please read . \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Docs/License.txt pcsx2-1.4.0/pcsx2/Docs/License.txt --- pcsx2-1.3.1+dfsg/pcsx2/Docs/License.txt 2012-08-04 14:58:36.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Docs/License.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - -[This file contains the template for the PCSX2 code rights license. For the full - rant-like preamble of the GPL, see GPL.txt] - - -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2012 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ + +[This file contains the template for the PCSX2 code rights license. For the full + rant-like preamble of the GPL, see GPL.txt] + + +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2012 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Elfheader.cpp pcsx2-1.4.0/pcsx2/Elfheader.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Elfheader.cpp 2014-08-15 17:56:42.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Elfheader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,7 @@ wxString LastELF; // All of ElfObjects functions. -ElfObject::ElfObject(const wxString& srcfile, IsoFile isofile) +ElfObject::ElfObject(const wxString& srcfile, IsoFile& isofile) : data( wxULongLong(isofile.getLength()).GetLo(), L"ELF headers" ) , proghead( NULL ) , secthead( NULL ) @@ -138,7 +138,7 @@ return std::make_pair(0,0); } -void ElfObject::readIso(IsoFile file) +void ElfObject::readIso(IsoFile& file) { int rsize = file.read(data.GetPtr(), data.GetSizeInBytes()); if (rsize < data.GetSizeInBytes()) throw Exception::EndOfStream(filename); @@ -150,7 +150,7 @@ FILE *f; f = fopen( filename.ToUTF8(), "rb" ); - if (f == NULL) Exception::FileNotFound( filename ); + if (f == NULL) throw Exception::FileNotFound( filename ); fseek(f, 0, SEEK_SET); rsize = fread(data.GetPtr(), 1, data.GetSizeInBytes(), f); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Elfheader.h pcsx2-1.4.0/pcsx2/Elfheader.h --- pcsx2-1.3.1+dfsg/pcsx2/Elfheader.h 2014-02-21 14:29:13.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Elfheader.h 2016-01-05 17:28:08.000000000 +0000 @@ -132,7 +132,7 @@ wxString filename; void initElfHeaders(); - void readIso(IsoFile file); + void readIso(IsoFile& file); void readFile(); void checkElfSize(s64 elfsize); @@ -144,7 +144,7 @@ // C++ does all the cleanup automagically for us. virtual ~ElfObject() throw() { } - ElfObject(const wxString& srcfile, IsoFile isofile); + ElfObject(const wxString& srcfile, IsoFile& isofile); ElfObject( const wxString& srcfile, uint hdrsize ); void loadProgramHeaders(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Gif_Logger.cpp pcsx2-1.4.0/pcsx2/Gif_Logger.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Gif_Logger.cpp 2011-08-12 02:31:49.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Gif_Logger.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,87 +1,87 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "Common.h" -#include "Gif_Unit.h" - -#define GIF_PARSE DevCon.WriteLn - -static const char GifTag_ModeStr[4][16] = { - "Packed", "Reglist", "Image", "Image2" -}; - -static const char GifTag_RegStr[16][16] = { - "PRIM", "RGBA", "STQ", "UV", - "XYZF2", "XYZ2", "TEX0_1", "TEX0_2", - "CLAMP_1", "CLAMP_2", "FOG", "INVALID", - "XYZF3", "XYZ3", "A+D", "NOP" -}; - -void Gif_ParsePacket(u8* data, u32 size, GIF_PATH path) { - Gif_Tag gifTag; - u8* buffer = data; - u32 offset = 0; - GIF_PARSE("Path %d Transfer", path+1); - for(;;) { - if (!gifTag.isValid) { // Need new Gif Tag - if (offset + 16 > size) return; - - gifTag.setTag(&buffer[offset], 1); - - GIF_PARSE("--Gif Tag [mode=%s][pre=%d][prim=%d][nregs=%d][nloop=%d][qwc=%d][EOP=%d]", - GifTag_ModeStr[gifTag.tag.FLG], gifTag.tag.PRE, gifTag.tag.PRIM, - gifTag.nRegs, gifTag.nLoop, gifTag.len/16, gifTag.tag.EOP); - - if (offset + 16 + gifTag.len > size) return; - offset += 16; - } - - switch(gifTag.tag.FLG) { - case GIF_FLG_PACKED: - for(u32 i = 0; i < gifTag.tag.NLOOP; i++) { - for(u32 j = 0; j < gifTag.nRegs; j++) { - if (gifTag.regs[j] == GIF_REG_A_D) { - GIF_PARSE("----[Reg=A+D(0x%x)][nreg=%d][nloop=%d]", - buffer[offset+8], j, i); - } - else { - GIF_PARSE("----[Reg=%s][nreg=%d][nloop=%d]", - GifTag_RegStr[gifTag.regs[j]&0xf], j, i); - } - offset += 16; // 1 QWC - }} - break; - case GIF_FLG_REGLIST: - for(u32 j = 0; j < gifTag.nRegs; j++) { - GIF_PARSE("----[Reg=%s][nreg=%d]", GifTag_RegStr[gifTag.regs[j]&0xf], j); - } - offset += gifTag.len; // Data length - break; - case GIF_FLG_IMAGE: - case GIF_FLG_IMAGE2: - offset += gifTag.len; // Data length - break; - jNO_DEFAULT; - } - - // Reload gif tag next loop - gifTag.isValid = false; - } -} - -void Gif_ParsePacket(GS_Packet& gsPack, GIF_PATH path) { - Gif_ParsePacket(&gifUnit.gifPath[path].buffer[gsPack.offset], gsPack.size, path); -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "Common.h" +#include "Gif_Unit.h" + +#define GIF_PARSE DevCon.WriteLn + +static const char GifTag_ModeStr[4][16] = { + "Packed", "Reglist", "Image", "Image2" +}; + +static const char GifTag_RegStr[16][16] = { + "PRIM", "RGBA", "STQ", "UV", + "XYZF2", "XYZ2", "TEX0_1", "TEX0_2", + "CLAMP_1", "CLAMP_2", "FOG", "INVALID", + "XYZF3", "XYZ3", "A+D", "NOP" +}; + +void Gif_ParsePacket(u8* data, u32 size, GIF_PATH path) { + Gif_Tag gifTag; + u8* buffer = data; + u32 offset = 0; + GIF_PARSE("Path %d Transfer", path+1); + for(;;) { + if (!gifTag.isValid) { // Need new Gif Tag + if (offset + 16 > size) return; + + gifTag.setTag(&buffer[offset], 1); + + GIF_PARSE("--Gif Tag [mode=%s][pre=%d][prim=%d][nregs=%d][nloop=%d][qwc=%d][EOP=%d]", + GifTag_ModeStr[gifTag.tag.FLG], gifTag.tag.PRE, gifTag.tag.PRIM, + gifTag.nRegs, gifTag.nLoop, gifTag.len/16, gifTag.tag.EOP); + + if (offset + 16 + gifTag.len > size) return; + offset += 16; + } + + switch(gifTag.tag.FLG) { + case GIF_FLG_PACKED: + for(u32 i = 0; i < gifTag.tag.NLOOP; i++) { + for(u32 j = 0; j < gifTag.nRegs; j++) { + if (gifTag.regs[j] == GIF_REG_A_D) { + GIF_PARSE("----[Reg=A+D(0x%x)][nreg=%d][nloop=%d]", + buffer[offset+8], j, i); + } + else { + GIF_PARSE("----[Reg=%s][nreg=%d][nloop=%d]", + GifTag_RegStr[gifTag.regs[j]&0xf], j, i); + } + offset += 16; // 1 QWC + }} + break; + case GIF_FLG_REGLIST: + for(u32 j = 0; j < gifTag.nRegs; j++) { + GIF_PARSE("----[Reg=%s][nreg=%d]", GifTag_RegStr[gifTag.regs[j]&0xf], j); + } + offset += gifTag.len; // Data length + break; + case GIF_FLG_IMAGE: + case GIF_FLG_IMAGE2: + offset += gifTag.len; // Data length + break; + jNO_DEFAULT; + } + + // Reload gif tag next loop + gifTag.isValid = false; + } +} + +void Gif_ParsePacket(GS_Packet& gsPack, GIF_PATH path) { + Gif_ParsePacket(&gifUnit.gifPath[path].buffer[gsPack.offset], gsPack.size, path); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Gif_Unit.cpp pcsx2-1.4.0/pcsx2/Gif_Unit.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Gif_Unit.cpp 2014-07-31 03:44:04.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Gif_Unit.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,176 +1,178 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "Common.h" - -#include "GS.h" -#include "Gif_Unit.h" -#include "Vif_Dma.h" -#include "MTVU.h" - -Gif_Unit gifUnit; - -// Returns true on stalling SIGNAL -bool Gif_HandlerAD(u8* pMem) { - u32 reg = pMem[8]; - u32* data = (u32*)pMem; - if (reg == 0x50) { - vif1.BITBLTBUF._u64 = *(u64*)pMem; - } - else if (reg == 0x52) { - vif1.TRXREG._u64 = *(u64*)pMem; - } - else if (reg == 0x53) { // TRXDIR - if ((pMem[0] & 3) == 1) { // local -> host - u8 bpp = 32; // Onimusha does TRXDIR without BLTDIVIDE first, assume 32bit - switch(vif1.BITBLTBUF.SPSM & 7) { - case 0: bpp = 32; break; - case 1: bpp = 24; break; - case 2: bpp = 16; break; - case 3: bpp = 8; break; - default: // 4 is 4 bit but this is forbidden - Console.Error("Illegal format for GS upload: SPSM=0%02o", vif1.BITBLTBUF.SPSM); - break; - } - // qwords, rounded down; any extra bits are lost - // games must take care to ensure transfer rectangles are exact multiples of a qword - vif1.GSLastDownloadSize = vif1.TRXREG.RRW * vif1.TRXREG.RRH * bpp >> 7; - } - } - else if (reg == 0x60) { // SIGNAL - if (CSRreg.SIGNAL) { // Time to ignore all subsequent drawing operations. - GUNIT_WARN(Color_Orange, "GIF Handler - Stalling SIGNAL"); - if(!gifUnit.gsSIGNAL.queued) { - gifUnit.gsSIGNAL.queued = true; - gifUnit.gsSIGNAL.data[0] = data[0]; - gifUnit.gsSIGNAL.data[1] = data[1]; - return true; // Stalling SIGNAL - } - } - else { - GUNIT_WARN("GIF Handler - SIGNAL"); - GSSIGLBLID.SIGID = (GSSIGLBLID.SIGID&~data[1])|(data[0]&data[1]); - if (!(GSIMR&0x100)) gsIrq(); - CSRreg.SIGNAL = true; - } - } - else if (reg == 0x61) { // FINISH - GUNIT_WARN("GIF Handler - FINISH"); - CSRreg.FINISH = true; - } - else if (reg == 0x62) { // LABEL - GUNIT_WARN("GIF Handler - LABEL"); - GSSIGLBLID.LBLID = (GSSIGLBLID.LBLID&~data[1])|(data[0]&data[1]); - } - else if (reg >= 0x63 && reg != 0x7f) { - //DevCon.Warning("GIF Handler - Write to unknown register! [reg=%x]", reg); - } - return false; -} - -// Returns true if pcsx2 needed to process the packet... -bool Gif_HandlerAD_Debug(u8* pMem) { - u32 reg = pMem[8]; - if (reg == 0x50) { Console.Error("GIF Handler Debug - BITBLTBUF"); return 1; } - else if (reg == 0x52) { Console.Error("GIF Handler Debug - TRXREG"); return 1; } - else if (reg == 0x53) { Console.Error("GIF Handler Debug - TRXDIR"); return 1; } - else if (reg == 0x60) { Console.Error("GIF Handler Debug - SIGNAL"); return 1; } - else if (reg == 0x61) { Console.Error("GIF Handler Debug - FINISH"); return 1; } - else if (reg == 0x62) { Console.Error("GIF Handler Debug - LABEL"); return 1; } - else if (reg >= 0x63 && reg != 0x7f) { - DevCon.Warning("GIF Handler Debug - Write to unknown register! [reg=%x]", reg); - } - return 0; -} - -void Gif_FinishIRQ() { - if (CSRreg.FINISH && !(GSIMR&0x200)) { - gsIrq(); - } -} - -// Used in MTVU mode... MTVU will later complete a real packet -void Gif_AddGSPacketMTVU(GS_Packet& gsPack, GIF_PATH path) { - GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_MTVU_GSPACKET, 0, 0, path); -} - -void Gif_AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path) { - //DevCon.WriteLn("Adding Completed Gif Packet [size=%x]", gsPack.size); - if (COPY_GS_PACKET_TO_MTGS) { - GetMTGS().PrepDataPacket(path, gsPack.size/16); - MemCopy_WrappedDest((u128*)&gifUnit.gifPath[path].buffer[gsPack.offset], RingBuffer.m_Ring, - GetMTGS().m_packet_writepos, RingBufferSize, gsPack.size/16); - GetMTGS().SendDataPacket(); - } - else { - pxAssertDev(!gsPack.readAmount, "Gif Unit - gsPack.readAmount only valid for MTVU path 1!"); - AtomicExchangeAdd(gifUnit.gifPath[path].readAmount, gsPack.size); - GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_GSPACKET, gsPack.offset, gsPack.size, path); - } -} - -void Gif_AddBlankGSPacket(u32 size, GIF_PATH path) { - //DevCon.WriteLn("Adding Blank Gif Packet [size=%x]", size); - AtomicExchangeAdd(gifUnit.gifPath[path].readAmount, size); - GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_GSPACKET, ~0u, size, path); -} - -void Gif_MTGS_Wait(bool isMTVU) { - GetMTGS().WaitGS(false, true, isMTVU); -} - -void SaveStateBase::gifPathFreeze(u32 path) { - - Gif_Path& gifPath = gifUnit.gifPath[path]; - pxAssertDev(!gifPath.readAmount, "Gif Path readAmount should be 0!"); - pxAssertDev(!gifPath.gsPack.readAmount, "GS Pack readAmount should be 0!"); - pxAssertDev(!gifPath.GetPendingGSPackets(), "MTVU GS Pack Queue should be 0!"); - - if (!gifPath.isMTVU()) { // FixMe: savestate freeze bug (Gust games) with MTVU enabled - if (IsSaving()) { // Move all the buffered data to the start of buffer - gifPath.RealignPacket(); // May add readAmount which we need to clear on load - } - } - u8* bufferPtr = gifPath.buffer; // Backup current buffer ptr - Freeze(gifPath.mtvu.fakePackets); - FreezeMem(&gifPath, sizeof(gifPath) - sizeof(gifPath.mtvu)); - FreezeMem(bufferPtr, gifPath.curSize); - gifPath.buffer = bufferPtr; - if(!IsSaving()) { - gifPath.readAmount = 0; - gifPath.gsPack.readAmount = 0; - } -} - -void SaveStateBase::gifFreeze() { - bool mtvuMode = THREAD_VU1; - pxAssert(vu1Thread.IsDone()); - GetMTGS().WaitGS(); - FreezeTag("Gif Unit"); - Freeze(mtvuMode); - Freeze(gifUnit.stat); - Freeze(gifUnit.gsSIGNAL); - Freeze(gifUnit.lastTranType); - gifPathFreeze(GIF_PATH_1); - gifPathFreeze(GIF_PATH_2); - gifPathFreeze(GIF_PATH_3); - if (!IsSaving()) { - if (mtvuMode != THREAD_VU1) { - DevCon.Warning("gifUnit: MTVU Mode has switched between save/load state"); - // ToDo: gifUnit.SwitchMTVU(mtvuMode); - } - } -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "Common.h" + +#include "GS.h" +#include "Gif_Unit.h" +#include "Vif_Dma.h" +#include "MTVU.h" + +Gif_Unit gifUnit; + +// Returns true on stalling SIGNAL +bool Gif_HandlerAD(u8* pMem) { + u32 reg = pMem[8]; + u32* data = (u32*)pMem; + if (reg == 0x50) { + vif1.BITBLTBUF._u64 = *(u64*)pMem; + } + else if (reg == 0x52) { + vif1.TRXREG._u64 = *(u64*)pMem; + } + else if (reg == 0x53) { // TRXDIR + if ((pMem[0] & 3) == 1) { // local -> host + u8 bpp = 32; // Onimusha does TRXDIR without BLTDIVIDE first, assume 32bit + switch(vif1.BITBLTBUF.SPSM & 7) { + case 0: bpp = 32; break; + case 1: bpp = 24; break; + case 2: bpp = 16; break; + case 3: bpp = 8; break; + default: // 4 is 4 bit but this is forbidden + Console.Error("Illegal format for GS upload: SPSM=0%02o", vif1.BITBLTBUF.SPSM); + break; + } + // qwords, rounded down; any extra bits are lost + // games must take care to ensure transfer rectangles are exact multiples of a qword + vif1.GSLastDownloadSize = vif1.TRXREG.RRW * vif1.TRXREG.RRH * bpp >> 7; + } + } + else if (reg == 0x60) { // SIGNAL + if (CSRreg.SIGNAL) { // Time to ignore all subsequent drawing operations. + GUNIT_WARN(Color_Orange, "GIF Handler - Stalling SIGNAL"); + if(!gifUnit.gsSIGNAL.queued) { + gifUnit.gsSIGNAL.queued = true; + gifUnit.gsSIGNAL.data[0] = data[0]; + gifUnit.gsSIGNAL.data[1] = data[1]; + return true; // Stalling SIGNAL + } + } + else { + GUNIT_WARN("GIF Handler - SIGNAL"); + GSSIGLBLID.SIGID = (GSSIGLBLID.SIGID&~data[1])|(data[0]&data[1]); + if (!(GSIMR&0x100)) gsIrq(); + CSRreg.SIGNAL = true; + } + } + else if (reg == 0x61) { // FINISH + GUNIT_WARN("GIF Handler - FINISH"); + CSRreg.FINISH = true; + } + else if (reg == 0x62) { // LABEL + GUNIT_WARN("GIF Handler - LABEL"); + GSSIGLBLID.LBLID = (GSSIGLBLID.LBLID&~data[1])|(data[0]&data[1]); + } + else if (reg >= 0x63 && reg != 0x7f) { + //DevCon.Warning("GIF Handler - Write to unknown register! [reg=%x]", reg); + } + return false; +} + +// Returns true if pcsx2 needed to process the packet... +bool Gif_HandlerAD_Debug(u8* pMem) { + u32 reg = pMem[8]; + if (reg == 0x50) { Console.Error("GIF Handler Debug - BITBLTBUF"); return 1; } + else if (reg == 0x52) { Console.Error("GIF Handler Debug - TRXREG"); return 1; } + else if (reg == 0x53) { Console.Error("GIF Handler Debug - TRXDIR"); return 1; } + else if (reg == 0x60) { Console.Error("GIF Handler Debug - SIGNAL"); return 1; } + else if (reg == 0x61) { Console.Error("GIF Handler Debug - FINISH"); return 1; } + else if (reg == 0x62) { Console.Error("GIF Handler Debug - LABEL"); return 1; } + else if (reg >= 0x63 && reg != 0x7f) { + DevCon.Warning("GIF Handler Debug - Write to unknown register! [reg=%x]", reg); + } + return 0; +} + +void Gif_FinishIRQ() { + if (CSRreg.FINISH && !(GSIMR & 0x200) && gifUnit.gsFINISH.gsFINISHFired == false) { + gsIrq(); + gifUnit.gsFINISH.gsFINISHFired = true; + } +} + +// Used in MTVU mode... MTVU will later complete a real packet +void Gif_AddGSPacketMTVU(GS_Packet& gsPack, GIF_PATH path) { + GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_MTVU_GSPACKET, 0, 0, path); +} + +void Gif_AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path) { + //DevCon.WriteLn("Adding Completed Gif Packet [size=%x]", gsPack.size); + if (COPY_GS_PACKET_TO_MTGS) { + GetMTGS().PrepDataPacket(path, gsPack.size/16); + MemCopy_WrappedDest((u128*)&gifUnit.gifPath[path].buffer[gsPack.offset], RingBuffer.m_Ring, + GetMTGS().m_packet_writepos, RingBufferSize, gsPack.size/16); + GetMTGS().SendDataPacket(); + } + else { + pxAssertDev(!gsPack.readAmount, "Gif Unit - gsPack.readAmount only valid for MTVU path 1!"); + AtomicExchangeAdd(gifUnit.gifPath[path].readAmount, gsPack.size); + GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_GSPACKET, gsPack.offset, gsPack.size, path); + } +} + +void Gif_AddBlankGSPacket(u32 size, GIF_PATH path) { + //DevCon.WriteLn("Adding Blank Gif Packet [size=%x]", size); + AtomicExchangeAdd(gifUnit.gifPath[path].readAmount, size); + GetMTGS().SendSimpleGSPacket(GS_RINGTYPE_GSPACKET, ~0u, size, path); +} + +void Gif_MTGS_Wait(bool isMTVU) { + GetMTGS().WaitGS(false, true, isMTVU); +} + +void SaveStateBase::gifPathFreeze(u32 path) { + + Gif_Path& gifPath = gifUnit.gifPath[path]; + pxAssertDev(!gifPath.readAmount, "Gif Path readAmount should be 0!"); + pxAssertDev(!gifPath.gsPack.readAmount, "GS Pack readAmount should be 0!"); + pxAssertDev(!gifPath.GetPendingGSPackets(), "MTVU GS Pack Queue should be 0!"); + + if (!gifPath.isMTVU()) { // FixMe: savestate freeze bug (Gust games) with MTVU enabled + if (IsSaving()) { // Move all the buffered data to the start of buffer + gifPath.RealignPacket(); // May add readAmount which we need to clear on load + } + } + u8* bufferPtr = gifPath.buffer; // Backup current buffer ptr + Freeze(gifPath.mtvu.fakePackets); + FreezeMem(&gifPath, sizeof(gifPath) - sizeof(gifPath.mtvu)); + FreezeMem(bufferPtr, gifPath.curSize); + gifPath.buffer = bufferPtr; + if(!IsSaving()) { + gifPath.readAmount = 0; + gifPath.gsPack.readAmount = 0; + } +} + +void SaveStateBase::gifFreeze() { + bool mtvuMode = THREAD_VU1; + pxAssert(vu1Thread.IsDone()); + GetMTGS().WaitGS(); + FreezeTag("Gif Unit"); + Freeze(mtvuMode); + Freeze(gifUnit.stat); + Freeze(gifUnit.gsSIGNAL); + Freeze(gifUnit.gsFINISH); + Freeze(gifUnit.lastTranType); + gifPathFreeze(GIF_PATH_1); + gifPathFreeze(GIF_PATH_2); + gifPathFreeze(GIF_PATH_3); + if (!IsSaving()) { + if (mtvuMode != THREAD_VU1) { + DevCon.Warning("gifUnit: MTVU Mode has switched between save/load state"); + // ToDo: gifUnit.SwitchMTVU(mtvuMode); + } + } +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Gif_Unit.h pcsx2-1.4.0/pcsx2/Gif_Unit.h --- pcsx2-1.3.1+dfsg/pcsx2/Gif_Unit.h 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Gif_Unit.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,675 +1,683 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#pragma once -#include -#include "System/SysThreads.h" -#include "Gif.h" -struct GS_Packet; -extern void Gif_MTGS_Wait(bool isMTVU); -extern void Gif_FinishIRQ(); -extern bool Gif_HandlerAD(u8* pMem); -extern bool Gif_HandlerAD_Debug(u8* pMem); -extern void Gif_AddBlankGSPacket(u32 size, GIF_PATH path); -extern void Gif_AddGSPacketMTVU (GS_Packet& gsPack, GIF_PATH path); -extern void Gif_AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path); -extern void Gif_ParsePacket(u8* data, u32 size, GIF_PATH path); -extern void Gif_ParsePacket(GS_Packet& gsPack, GIF_PATH path); - -struct Gif_Tag { - struct HW_Gif_Tag { - u16 NLOOP : 15; - u16 EOP : 1; - u16 _dummy0 : 16; - u32 _dummy1 : 14; - u32 PRE : 1; - u32 PRIM : 11; - u32 FLG : 2; - u32 NREG : 4; - u32 REGS[2]; - } tag; - - u32 nLoop; // NLOOP left to process - u32 nRegs; // NREG (1~16) - u32 nRegIdx; // Current nReg Index (packed mode processing) - u32 len; // Packet Length in Bytes (not including tag) - u32 cycles; // Time needed to process packet data in ee-cycles - u8 regs[16]; // Regs - bool hasAD; // Has an A+D Write - bool isValid; // Tag is valid - - Gif_Tag() { Reset(); } - Gif_Tag(u8* pMem, bool analyze = false) { - setTag (pMem, analyze); - } - - void Reset() { memzero(*this); } - u8 curReg() { return regs[nRegIdx&0xf]; } - - void packedStep() { - if (nLoop > 0) { - nRegIdx++; - if (nRegIdx >= nRegs) { - nRegIdx = 0; - nLoop--; - } - } - } - - void setTag(u8* pMem, bool analyze = false) { - tag = *(HW_Gif_Tag*)pMem; - nLoop = tag.NLOOP; - hasAD = false; - nRegIdx = 0; - isValid = 1; - switch(tag.FLG) { - case GIF_FLG_PACKED: - nRegs = ((tag.NREG-1)&0xf) + 1; - len = (nRegs * tag.NLOOP)* 16; - cycles = len << 1; // Packed Mode takes 2 ee-cycles - if (analyze) analyzeTag(); - break; - case GIF_FLG_REGLIST: - nRegs = ((tag.NREG-1)&0xf) + 1; - len =((nRegs * tag.NLOOP + 1) >> 1) * 16; - cycles = len << 2; // Reg-list Mode takes 4 ee-cycles - break; - case GIF_FLG_IMAGE: - case GIF_FLG_IMAGE2: - nRegs = 0; - len = tag.NLOOP * 16; - cycles = len << 2; // Image Mode takes 4 ee-cycles - tag.FLG = GIF_FLG_IMAGE; - break; - jNO_DEFAULT; - } - } - - void analyzeTag() { - hasAD = false; - u32 t = tag.REGS[0]; - u32 i = 0; - u32 j = std::min(nRegs, 8); - for(; i < j; i++) { - regs[i] = t & 0xf; - hasAD |= (regs[i] == GIF_REG_A_D); - t >>= 4; - } - t = tag.REGS[1]; - j = nRegs; - for(; i < j; i++) { - regs[i] = t & 0xf; - hasAD |= (regs[i] == GIF_REG_A_D); - t >>= 4; - } - } -}; - -struct GS_Packet { - u32 offset; // Path buffer offset for start of packet - u32 size; // Full size of GS-Packet - s32 cycles; // EE Cycles taken to process this GS packet - s32 readAmount; // Dummy read-amount data needed for proper buffer calculations - bool done; // 0 = Incomplete, 1 = Complete - GS_Packet() { Reset(); } - void Reset() { memzero(*this); } -}; - -struct GS_SIGNAL { - u32 data[2]; - bool queued; - void Reset() { memzero(*this); } -}; - -static __fi void incTag(u32& offset, u32& size, u32 incAmount) { - size += incAmount; - offset += incAmount; -} - -struct Gif_Path_MTVU { - u32 fakePackets; // Fake packets pending to be sent to MTGS - Mutex gsPackMutex; // Used for atomic access to gsPackQueue - std::deque gsPackQueue; // VU1 programs' XGkick(s) - Gif_Path_MTVU() { Reset(); } - void Reset() { fakePackets = 0; gsPackQueue.clear(); } -}; - -struct Gif_Path { - __aligned(4) volatile s32 readAmount; // Amount of data MTGS still needs to read - u8* buffer; // Path packet buffer - u32 buffSize; // Full size of buffer - u32 buffLimit; // Cut off limit to wrap around - u32 curSize; // Used buffer in bytes - u32 curOffset; // Offset of current gifTag - u32 dmaRewind; // Used by path3 when only part of a DMA chain is used - Gif_Tag gifTag; // Current GS Primitive tag - GS_Packet gsPack; // Current GS Packet info - GIF_PATH idx; // Gif Path Index - GIF_PATH_STATE state; // Path State - Gif_Path_MTVU mtvu; // Must be last for saved states - - Gif_Path() {} - ~Gif_Path() { _aligned_free(buffer); } - - void Init(GIF_PATH _idx, u32 _buffSize, u32 _buffSafeZone) { - idx = _idx; - buffSize = _buffSize; - buffLimit = _buffSize - _buffSafeZone; - buffer = (u8*)_aligned_malloc(buffSize, 16); - Reset(); - } - - void Reset(bool softReset = false) { - state = GIF_PATH_IDLE; - if (softReset) { - GUNIT_WARN("Gif Path %d - Soft Reset", idx+1); - //gifTag.Reset(); - //gsPack.Reset(); - //curOffset = curSize; - return; - } - mtvu.Reset(); - curSize = 0; - curOffset = 0; - readAmount = 0; - gifTag.Reset(); - gsPack.Reset(); - } - - bool isMTVU() const { return !idx && THREAD_VU1; } - s32 getReadAmount() { return AtomicRead(readAmount) + gsPack.readAmount; } - bool hasDataRemaining() const { return curOffset < curSize; } - bool isDone() const { return isMTVU() ? !mtvu.fakePackets : (!hasDataRemaining() && (state == GIF_PATH_IDLE || state == GIF_PATH_WAIT)); } - - // Waits on the MTGS to process gs packets - void mtgsReadWait() { - if (IsDevBuild) { - DevCon.WriteLn(Color_Red, "Gif Path[%d] - MTGS Wait! [r=0x%x]", idx+1, getReadAmount()); - Gif_MTGS_Wait(isMTVU()); - DevCon.WriteLn(Color_Green, "Gif Path[%d] - MTGS Wait! [r=0x%x]", idx+1, getReadAmount()); - return; - } - Gif_MTGS_Wait(isMTVU()); - } - - // Moves packet data to start of buffer - void RealignPacket() { - GUNIT_LOG("Path Buffer: Realigning packet!"); - s32 offset = curOffset - gsPack.size; - s32 sizeToAdd = curSize - offset; - s32 intersect = sizeToAdd - offset; - if (intersect < 0) intersect = 0; - for(;;) { - s32 frontFree = offset - getReadAmount(); - if (frontFree >= sizeToAdd - intersect) break; - mtgsReadWait(); - } - if (offset < (s32)buffLimit) { // Needed for correct readAmount values - if (isMTVU()) gsPack.readAmount += buffLimit - offset; - else Gif_AddBlankGSPacket(buffLimit - offset, idx); - } - //DevCon.WriteLn("Realign Packet [%d]", curSize - offset); - if (intersect) memmove(buffer, &buffer[offset], curSize - offset); - else memcpy(buffer, &buffer[offset], curSize - offset); - curSize -= offset; - curOffset = gsPack.size; - gsPack.offset = 0; - } - - void CopyGSPacketData(u8* pMem, u32 size, bool aligned = false) { - if (curSize + size > buffSize) { // Move gsPack to front of buffer - GUNIT_LOG("CopyGSPacketData: Realigning packet!"); - RealignPacket(); - } - for(;;) { - s32 offset = curOffset - gsPack.size; - s32 readPos = offset - getReadAmount(); - if (readPos >= 0) break; // MTGS is reading in back of curOffset - if ((s32)buffLimit + readPos > (s32)curSize + (s32)size) break; // Enough free front space - mtgsReadWait(); // Let MTGS run to free up buffer space - } - pxAssertDev(curSize+size<=buffSize, "Gif Path Buffer Overflow!"); - memcpy (&buffer[curSize], pMem, size); - curSize += size; - } - - // If completed a GS packet (with EOP) then returned GS_Packet.done = 1 - // MTVU: This function only should be called called on EE thread - GS_Packet ExecuteGSPacket() { - if (mtvu.fakePackets) { // For MTVU mode... - mtvu.fakePackets--; - GS_Packet fakePack; - fakePack.done = 1; // Fake packets don't get processed by pcsx2 - fakePack.size =~0u; // Used to indicate that its a fake packet - return fakePack; - } - pxAssert(!isMTVU()); - for(;;) { - if (!gifTag.isValid) { // Need new Gif Tag - // We don't have enough data for a Gif Tag - if (curOffset + 16 > curSize) { - //GUNIT_LOG("Path Buffer: Not enough data for gif tag! [%d]", curSize-curOffset); - return gsPack; - } - - // Move packet to start of buffer - if (curOffset > buffLimit) { - RealignPacket(); - } - - gifTag.setTag(&buffer[curOffset], 1); - state = (GIF_PATH_STATE)(gifTag.tag.FLG + 1); - - // We don't have enough data for a complete GS packet - if(!gifTag.hasAD && curOffset + 16 + gifTag.len > curSize) { - gifTag.isValid = false; // So next time we test again - return gsPack; - } - - incTag(curOffset, gsPack.size, 16); // Tag Size - gsPack.cycles += 2 + gifTag.cycles; // Tag + Len ee-cycles - } - - if (gifTag.hasAD) { // Only can be true if GIF_FLG_PACKED - bool dblSIGNAL = false; - while(gifTag.nLoop && !dblSIGNAL) { - if (curOffset + 16 > curSize) return gsPack; // Exit Early - if (gifTag.curReg() == GIF_REG_A_D) { - if (!isMTVU()) dblSIGNAL = Gif_HandlerAD(&buffer[curOffset]); - } - incTag(curOffset, gsPack.size, 16); // 1 QWC - gifTag.packedStep(); - } - if (dblSIGNAL && !(gifTag.tag.EOP && !gifTag.nLoop)) return gsPack; // Exit Early - } - else incTag(curOffset, gsPack.size, gifTag.len); // Data length - - // Reload gif tag next loop - gifTag.isValid = false; - - if (gifTag.tag.EOP) { - GS_Packet t = gsPack; - t.done = 1; - - - dmaRewind = 0; - - gsPack.Reset(); - gsPack.offset = curOffset; - - //Path 3 Masking is timing sensitive, we need to simulate its length! (NFSU2/Outrun 2006) - - if((gifRegs.stat.APATH-1) == GIF_PATH_3) - { - state = GIF_PATH_WAIT; - - if(curSize - curOffset > 0 && (gifRegs.stat.M3R || gifRegs.stat.M3P)) - { - //Including breaking packets early (Rewind DMA to pick up where left off) - //but only do this when the path is masked, else we're pointlessly slowing things down. - dmaRewind = curSize - curOffset; - curSize = curOffset; - } - } - else - state = GIF_PATH_IDLE; - - return t; // Complete GS packet - } - } - } - - // MTVU: Gets called on VU XGkicks on MTVU thread - void ExecuteGSPacketMTVU() { - // Move packet to start of buffer - if (curOffset > buffLimit) { - RealignPacket(); - } - if (IsDevBuild) { // We check the packet to see if it actually - for(;;) { // needed to be processed by pcsx2... - if (curOffset + 16 > curSize) break; - gifTag.setTag(&buffer[curOffset], 1); - - if(!gifTag.hasAD && curOffset + 16 + gifTag.len > curSize) break; - incTag(curOffset, gsPack.size, 16); // Tag Size - - if (gifTag.hasAD) { // Only can be true if GIF_FLG_PACKED - while(gifTag.nLoop) { - if (curOffset + 16 > curSize) break; // Exit Early - if (gifTag.curReg() == GIF_REG_A_D) { - pxAssert(!Gif_HandlerAD_Debug(&buffer[curOffset])); - } - incTag(curOffset, gsPack.size, 16); // 1 QWC - gifTag.packedStep(); - } - } - else incTag(curOffset, gsPack.size, gifTag.len); // Data length - if (curOffset >= curSize) break; - if (gifTag.tag.EOP) break; - } - pxAssert(curOffset == curSize); - gifTag.isValid = false; - } - else { - // We assume every packet is a full GS Packet - // And we don't process anything on pcsx2 side - gsPack.size += curSize - curOffset; - curOffset = curSize; - } - } - - // MTVU: Gets called after VU1 execution on MTVU thread - void FinishGSPacketMTVU() { - if (1) { - ScopedLock lock(mtvu.gsPackMutex); - AtomicExchangeAdd(readAmount, gsPack.size + gsPack.readAmount); - mtvu.gsPackQueue.push_back(gsPack); - } - gsPack.Reset(); - gsPack.offset = curOffset; - } - - // MTVU: Gets called by MTGS thread - GS_Packet GetGSPacketMTVU() { - ScopedLock lock(mtvu.gsPackMutex); - if (mtvu.gsPackQueue.size()) { - GS_Packet t = mtvu.gsPackQueue[0]; - return t; // XGkick GS packet(s) - } - Console.Error("MTVU: Expected gsPackQueue to have elements!"); - pxAssert(0); - return GS_Packet(); // gsPack.size will be 0 - } - - // MTVU: Gets called by MTGS thread - void PopGSPacketMTVU() { - ScopedLock lock(mtvu.gsPackMutex); - if (mtvu.gsPackQueue.size()) { - mtvu.gsPackQueue.pop_front(); - } - } - - // MTVU: Returns the amount of pending - // GS Packets that MTGS hasn't yet processed - u32 GetPendingGSPackets() { - ScopedLock lock(mtvu.gsPackMutex); - u32 t = mtvu.gsPackQueue.size(); - return t; - } -}; - -struct Gif_Unit { - Gif_Path gifPath[3]; - GS_SIGNAL gsSIGNAL; // Stalling Signal - tGIF_STAT& stat; - GIF_TRANSFER_TYPE lastTranType; // Last Transfer Type - - Gif_Unit() : stat(gifRegs.stat) { - gifPath[0].Init(GIF_PATH_1, _1mb*9, _1mb + _1kb); - gifPath[1].Init(GIF_PATH_2, _1mb*9, _1mb + _1kb); - gifPath[2].Init(GIF_PATH_3, _1mb*9, _1mb + _1kb); - } - - // Enable softReset when resetting during game emulation - void Reset(bool softReset = false) { - GUNIT_WARN(Color_Red, "Gif Unit Reset!!! [soft=%d]", softReset); - ResetRegs(); - gsSIGNAL.Reset(); - gifPath[0].Reset(softReset); - gifPath[1].Reset(softReset); - gifPath[2].Reset(softReset); - if(!softReset) { - lastTranType = GIF_TRANS_INVALID; - } - } - - // Resets Gif HW Regs - void ResetRegs() { - gifRegs.stat.reset(); - gifRegs.ctrl.reset(); - gifRegs.mode.reset(); - } - - // Adds a finished GS Packet to the MTGS ring buffer - __fi void AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path) { - if (gsPack.size==~0u) Gif_AddGSPacketMTVU (gsPack, path); - else Gif_AddCompletedGSPacket(gsPack, path); - if (PRINT_GIF_PACKET) Gif_ParsePacket(gsPack, path); - } - - // Returns GS Packet Size in bytes - u32 GetGSPacketSize(GIF_PATH pathIdx, u8* pMem, u32 offset = 0, u32 size = ~0u) { - u32 memMask = pathIdx ? ~0u : 0x3fffu; - u32 curSize = 0; - for(;;) { - Gif_Tag gifTag(&pMem[offset & memMask]); - incTag(offset, curSize, 16 + gifTag.len); // Tag + Data length - if (pathIdx == GIF_PATH_1 && curSize >= 0x4000) { - DevCon.Warning("Gif Unit - GS packet size exceeded VU memory size!"); - return 0; // Bios does this... (Fixed if you delay vu1's xgkick by 103 vu cycles) - } - if (curSize >= size) return size; - if (gifTag.tag.EOP) return curSize; - } - } - - // Specify the transfer type you are initiating - // The return value is the amount of data (in bytes) that was processed - // If transfer cannot take place at this moment the return value is 0 - u32 TransferGSPacketData(GIF_TRANSFER_TYPE tranType, u8* pMem, u32 size, bool aligned=false) { - - if (THREAD_VU1) { - Gif_Path& path1 = gifPath[GIF_PATH_1]; - if (tranType == GIF_TRANS_XGKICK) { // This is on the MTVU thread - path1.CopyGSPacketData(pMem, size, aligned); - path1.ExecuteGSPacketMTVU(); - return size; - } - if (tranType == GIF_TRANS_MTVU) { // This is on the EE thread - path1.mtvu.fakePackets++; - if (CanDoGif()) Execute(false, true); - return 0; - } - } - - GUNIT_LOG("%s - [path=%d][size=%d]", Gif_TransferStr[(tranType>>8)&0xf], (tranType&3)+1, size); - if (size == 0) { GUNIT_WARN("Gif Unit - Size == 0"); return 0; } - if(!CanDoGif()) { GUNIT_WARN("Gif Unit - Signal or PSE Set or Dir = GS to EE"); } - //pxAssertDev((stat.APATH==0) || checkPaths(1,1,1), "Gif Unit - APATH wasn't cleared?"); - lastTranType = tranType; - - if (tranType == GIF_TRANS_FIFO) { - if(!CanDoPath3()) DevCon.Warning("Gif Unit - Path 3 FIFO transfer while !CanDoPath3()"); - } - if (tranType == GIF_TRANS_DMA) { - if(!CanDoPath3()) { if (!Path3Masked()) stat.P3Q = 1; return 0; } // DMA Stall - //if (stat.P2Q) DevCon.WriteLn("P2Q while path 3"); - } - if (tranType == GIF_TRANS_XGKICK) { - if(!CanDoPath1()) { stat.P1Q = 1; } // We always buffer path1 packets - } - if (tranType == GIF_TRANS_DIRECT) { - if(!CanDoPath2()) { stat.P2Q = 1; return 0; } // Direct Stall - } - if (tranType == GIF_TRANS_DIRECTHL) { - if(!CanDoPath2HL()) { stat.P2Q = 1; return 0; } // DirectHL Stall - } - - gifPath[tranType&3].CopyGSPacketData(pMem, size, aligned); - size -= Execute(tranType == GIF_TRANS_DMA, false); - return size; - } - - // Checks path activity for the given paths - // Returns an int with a bit enabled if the corresponding - // path is not finished (needs more data/processing for an EOP) - __fi int checkPaths(bool p1, bool p2, bool p3, bool checkQ=false) { - int ret = 0; - ret |= (p1 && !gifPath[GIF_PATH_1].isDone()) << 0; - ret |= (p2 && !gifPath[GIF_PATH_2].isDone()) << 1; - ret |= (p3 && !gifPath[GIF_PATH_3].isDone()) << 2; - return ret | (checkQ ? checkQueued(p1,p2,p3) : 0); - } - - __fi int checkQueued(bool p1, bool p2, bool p3) { - int ret = 0; - ret |= (p1 && stat.P1Q) << 0; - ret |= (p2 && stat.P2Q) << 1; - ret |= (p3 && stat.P3Q) << 2; - return ret; - } - - // Send processed GS Primitive(s) to the MTGS thread - // Note: Only does so if current path fully completed all - // of its given gs primitives (but didn't upload them yet) - void FlushToMTGS() { - if (!stat.APATH) return; - Gif_Path& path = gifPath[stat.APATH-1]; - if (path.gsPack.size && !path.gifTag.isValid) { - AddCompletedGSPacket(path.gsPack, (GIF_PATH)(stat.APATH-1)); - path.gsPack.offset = path.curOffset; - path.gsPack.size = 0; - } - } - - // Processes gif packets and performs path arbitration - // on EOPs or on Path 3 Images when IMT is set. - int Execute(bool isPath3, bool isResume) { - if (!CanDoGif()) { DevCon.Error("Gif Unit - Signal or PSE Set or Dir = GS to EE"); return 0; } - bool didPath3 = false; - int curPath = stat.APATH > 0 ? stat.APATH-1 : 0; //Init to zero if no path is already set. - gifPath[2].dmaRewind = 0; - stat.OPH = 1; - - for(;;) { - if (stat.APATH) { // Some Transfer is happening - Gif_Path& path = gifPath[stat.APATH-1]; - GS_Packet gsPack = path.ExecuteGSPacket(); - if(!gsPack.done) { - if (stat.APATH == 3 && CanDoP3Slice() && !gsSIGNAL.queued) { - if(!didPath3 && /*!Path3Masked() &&*/ checkPaths(1,1,0)) { // Path3 slicing - didPath3 = true; - stat.APATH = 0; - stat.IP3 = 1; - GUNIT_LOG(Color_Magenta, "Gif Unit - Path 3 slicing arbitration"); - if (gsPack.size > 16) { // Packet had other tags which we already processed - u32 subOffset = path.gifTag.isValid ? 16 : 0; // if isValid, image-primitive not finished - gsPack.size -= subOffset; // Remove the image-tag (should be last thing read) - AddCompletedGSPacket(gsPack, GIF_PATH_3); // Consider current packet complete - path.gsPack.Reset(); // Reset gs packet info - path.curOffset -= subOffset; // Start the next GS packet at the image-tag - path.gsPack.offset = path.curOffset; // Set to image-tag - path.gifTag.isValid = false; // Reload tag next ExecuteGSPacket() - pxAssert((s32)path.curOffset >= 0); - pxAssert(path.state == GIF_PATH_IMAGE); - GUNIT_LOG(Color_Magenta, "Gif Unit - Sending path 3 sliced gs packet!"); - } - continue; - } - } - //FlushToMTGS(); - //DevCon.WriteLn("Incomplete GS Packet for path %d, size=%d", stat.APATH, gsPack.size); - break; // Not finished with GS packet - } - //DevCon.WriteLn("Adding GS Packet for path %d", stat.APATH); - AddCompletedGSPacket(gsPack, (GIF_PATH)(stat.APATH-1)); - } - - if (!gsSIGNAL.queued && !gifPath[0].isDone()) { - stat.APATH = 1; - stat.P1Q = 0; - curPath = 0; - } - else if (!gsSIGNAL.queued && !gifPath[1].isDone()) { - stat.APATH = 2; - stat.P2Q = 0; - curPath = 1; - } - else if (!gsSIGNAL.queued && !gifPath[2].isDone() && !Path3Masked()) { - stat.APATH = 3; - stat.P3Q = 0; - stat.IP3 = 0; - curPath = 2; - } - else { - if(isResume || curPath == 0) { - stat.APATH = 0; - stat.OPH = 0; - } - - break; - } - } - - //Some loaders/Refresh Rate selectors and things dont issue "End of Packet" commands - //So we look and see if the end of the last tag is all there, if so, stick it in the buffer for the GS :) - //(Invisible Screens on Terminator 3 and Growlanser 2/3) - if(gifPath[curPath].curOffset == gifPath[curPath].curSize) - { - FlushToMTGS(); - } - - Gif_FinishIRQ(); - - //Path3 can rewind the DMA, so we send back the amount we go back! - if(isPath3) - return gifPath[2].dmaRewind; - else - return 0; - } - - // XGkick - bool CanDoPath1() const { - return (stat.APATH == 0 || stat.APATH == 1 || (stat.APATH == 3 && CanDoP3Slice())) && CanDoGif(); - } - // Direct - bool CanDoPath2() const { - return (stat.APATH == 0 || stat.APATH == 2 || (stat.APATH == 3 && CanDoP3Slice())) && CanDoGif(); - } - // DirectHL - bool CanDoPath2HL() const { - return (stat.APATH == 0 || stat.APATH == 2) && CanDoGif(); - } - // Gif DMA - CHECK_GIFREVERSEHACK is a hack for Hot Wheels. - bool CanDoPath3() const { - return((stat.APATH == 0 && !Path3Masked()) || stat.APATH == 3) && CanDoGif(); - } - - bool CanDoP3Slice()const { return stat.IMT == 1 && gifPath[GIF_PATH_3].state == GIF_PATH_IMAGE; } - bool CanDoGif() const { return stat.PSE == 0 && (CHECK_GIFREVERSEHACK ? 1 : stat.DIR == 0) && gsSIGNAL.queued == 0; } - //Mask stops the next packet which hasnt started from transferring - bool Path3Masked() const { return ((stat.M3R || stat.M3P) && (gifPath[GIF_PATH_3].state == GIF_PATH_IDLE || gifPath[GIF_PATH_3].state == GIF_PATH_WAIT)); } - - void PrintInfo(bool printP1=1, bool printP2=1, bool printP3=1) { - u32 a = checkPaths(1,1,1), b = checkQueued(1,1,1); - GUNIT_LOG("Gif Unit - LastTransfer = %s, Paths = [%d,%d,%d], Queued = [%d,%d,%d]", - Gif_TransferStr[(lastTranType>>8)&0xf], - !!(a&1),!!(a&2),!!(a&4),!!(b&1),!!(b&2),!!(b&4)); - GUNIT_LOG("Gif Unit - [APATH = %d][Signal = %d][PSE = %d][DIR = %d]", - stat.APATH, gsSIGNAL.queued, stat.PSE, stat.DIR); - GUNIT_LOG("Gif Unit - [CanDoGif = %d][CanDoPath3 = %d][CanDoP3Slice = %d]", - CanDoGif(), CanDoPath3(), CanDoP3Slice()); - if (printP1) PrintPathInfo(GIF_PATH_1); - if (printP2) PrintPathInfo(GIF_PATH_2); - if (printP3) PrintPathInfo(GIF_PATH_3); - } - - void PrintPathInfo(GIF_PATH path) { - GUNIT_LOG("Gif Path %d - [hasData = %d][state = %d]", path, - gifPath[path].hasDataRemaining(), gifPath[path].state); - } -}; - -extern Gif_Unit gifUnit; +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once +#include +#include "System/SysThreads.h" +#include "Gif.h" +struct GS_Packet; +extern void Gif_MTGS_Wait(bool isMTVU); +extern void Gif_FinishIRQ(); +extern bool Gif_HandlerAD(u8* pMem); +extern bool Gif_HandlerAD_Debug(u8* pMem); +extern void Gif_AddBlankGSPacket(u32 size, GIF_PATH path); +extern void Gif_AddGSPacketMTVU (GS_Packet& gsPack, GIF_PATH path); +extern void Gif_AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path); +extern void Gif_ParsePacket(u8* data, u32 size, GIF_PATH path); +extern void Gif_ParsePacket(GS_Packet& gsPack, GIF_PATH path); + +struct Gif_Tag { + struct HW_Gif_Tag { + u16 NLOOP : 15; + u16 EOP : 1; + u16 _dummy0 : 16; + u32 _dummy1 : 14; + u32 PRE : 1; + u32 PRIM : 11; + u32 FLG : 2; + u32 NREG : 4; + u32 REGS[2]; + } tag; + + u32 nLoop; // NLOOP left to process + u32 nRegs; // NREG (1~16) + u32 nRegIdx; // Current nReg Index (packed mode processing) + u32 len; // Packet Length in Bytes (not including tag) + u32 cycles; // Time needed to process packet data in ee-cycles + u8 regs[16]; // Regs + bool hasAD; // Has an A+D Write + bool isValid; // Tag is valid + + Gif_Tag() { Reset(); } + Gif_Tag(u8* pMem, bool analyze = false) { + setTag (pMem, analyze); + } + + void Reset() { memzero(*this); } + u8 curReg() { return regs[nRegIdx&0xf]; } + + void packedStep() { + if (nLoop > 0) { + nRegIdx++; + if (nRegIdx >= nRegs) { + nRegIdx = 0; + nLoop--; + } + } + } + + void setTag(u8* pMem, bool analyze = false) { + tag = *(HW_Gif_Tag*)pMem; + nLoop = tag.NLOOP; + hasAD = false; + nRegIdx = 0; + isValid = 1; + switch(tag.FLG) { + case GIF_FLG_PACKED: + nRegs = ((tag.NREG-1)&0xf) + 1; + len = (nRegs * tag.NLOOP)* 16; + cycles = len << 1; // Packed Mode takes 2 ee-cycles + if (analyze) analyzeTag(); + break; + case GIF_FLG_REGLIST: + nRegs = ((tag.NREG-1)&0xf) + 1; + len =((nRegs * tag.NLOOP + 1) >> 1) * 16; + cycles = len << 2; // Reg-list Mode takes 4 ee-cycles + break; + case GIF_FLG_IMAGE: + case GIF_FLG_IMAGE2: + nRegs = 0; + len = tag.NLOOP * 16; + cycles = len << 2; // Image Mode takes 4 ee-cycles + tag.FLG = GIF_FLG_IMAGE; + break; + jNO_DEFAULT; + } + } + + void analyzeTag() { + hasAD = false; + u32 t = tag.REGS[0]; + u32 i = 0; + u32 j = std::min(nRegs, 8); + for(; i < j; i++) { + regs[i] = t & 0xf; + hasAD |= (regs[i] == GIF_REG_A_D); + t >>= 4; + } + t = tag.REGS[1]; + j = nRegs; + for(; i < j; i++) { + regs[i] = t & 0xf; + hasAD |= (regs[i] == GIF_REG_A_D); + t >>= 4; + } + } +}; + +struct GS_Packet { + u32 offset; // Path buffer offset for start of packet + u32 size; // Full size of GS-Packet + s32 cycles; // EE Cycles taken to process this GS packet + s32 readAmount; // Dummy read-amount data needed for proper buffer calculations + bool done; // 0 = Incomplete, 1 = Complete + GS_Packet() { Reset(); } + void Reset() { memzero(*this); } +}; + +struct GS_SIGNAL { + u32 data[2]; + bool queued; + void Reset() { memzero(*this); } +}; + +struct GS_FINISH { + bool gsFINISHFired; + + void Reset() { memzero(*this); } +}; + +static __fi void incTag(u32& offset, u32& size, u32 incAmount) { + size += incAmount; + offset += incAmount; +} + +struct Gif_Path_MTVU { + u32 fakePackets; // Fake packets pending to be sent to MTGS + Mutex gsPackMutex; // Used for atomic access to gsPackQueue + std::deque gsPackQueue; // VU1 programs' XGkick(s) + Gif_Path_MTVU() { Reset(); } + void Reset() { fakePackets = 0; gsPackQueue.clear(); } +}; + +struct Gif_Path { + __aligned(4) volatile s32 readAmount; // Amount of data MTGS still needs to read + u8* buffer; // Path packet buffer + u32 buffSize; // Full size of buffer + u32 buffLimit; // Cut off limit to wrap around + u32 curSize; // Used buffer in bytes + u32 curOffset; // Offset of current gifTag + u32 dmaRewind; // Used by path3 when only part of a DMA chain is used + Gif_Tag gifTag; // Current GS Primitive tag + GS_Packet gsPack; // Current GS Packet info + GIF_PATH idx; // Gif Path Index + GIF_PATH_STATE state; // Path State + Gif_Path_MTVU mtvu; // Must be last for saved states + + Gif_Path() {} + ~Gif_Path() { _aligned_free(buffer); } + + void Init(GIF_PATH _idx, u32 _buffSize, u32 _buffSafeZone) { + idx = _idx; + buffSize = _buffSize; + buffLimit = _buffSize - _buffSafeZone; + buffer = (u8*)_aligned_malloc(buffSize, 16); + Reset(); + } + + void Reset(bool softReset = false) { + state = GIF_PATH_IDLE; + if (softReset) { + GUNIT_WARN("Gif Path %d - Soft Reset", idx+1); + //gifTag.Reset(); + //gsPack.Reset(); + //curOffset = curSize; + return; + } + mtvu.Reset(); + curSize = 0; + curOffset = 0; + readAmount = 0; + gifTag.Reset(); + gsPack.Reset(); + } + + bool isMTVU() const { return !idx && THREAD_VU1; } + s32 getReadAmount() { return AtomicRead(readAmount) + gsPack.readAmount; } + bool hasDataRemaining() const { return curOffset < curSize; } + bool isDone() const { return isMTVU() ? !mtvu.fakePackets : (!hasDataRemaining() && (state == GIF_PATH_IDLE || state == GIF_PATH_WAIT)); } + + // Waits on the MTGS to process gs packets + void mtgsReadWait() { + if (IsDevBuild) { + DevCon.WriteLn(Color_Red, "Gif Path[%d] - MTGS Wait! [r=0x%x]", idx+1, getReadAmount()); + Gif_MTGS_Wait(isMTVU()); + DevCon.WriteLn(Color_Green, "Gif Path[%d] - MTGS Wait! [r=0x%x]", idx+1, getReadAmount()); + return; + } + Gif_MTGS_Wait(isMTVU()); + } + + // Moves packet data to start of buffer + void RealignPacket() { + GUNIT_LOG("Path Buffer: Realigning packet!"); + s32 offset = curOffset - gsPack.size; + s32 sizeToAdd = curSize - offset; + s32 intersect = sizeToAdd - offset; + if (intersect < 0) intersect = 0; + for(;;) { + s32 frontFree = offset - getReadAmount(); + if (frontFree >= sizeToAdd - intersect) break; + mtgsReadWait(); + } + if (offset < (s32)buffLimit) { // Needed for correct readAmount values + if (isMTVU()) gsPack.readAmount += buffLimit - offset; + else Gif_AddBlankGSPacket(buffLimit - offset, idx); + } + //DevCon.WriteLn("Realign Packet [%d]", curSize - offset); + if (intersect) memmove(buffer, &buffer[offset], curSize - offset); + else memcpy(buffer, &buffer[offset], curSize - offset); + curSize -= offset; + curOffset = gsPack.size; + gsPack.offset = 0; + } + + void CopyGSPacketData(u8* pMem, u32 size, bool aligned = false) { + if (curSize + size > buffSize) { // Move gsPack to front of buffer + GUNIT_LOG("CopyGSPacketData: Realigning packet!"); + RealignPacket(); + } + for(;;) { + s32 offset = curOffset - gsPack.size; + s32 readPos = offset - getReadAmount(); + if (readPos >= 0) break; // MTGS is reading in back of curOffset + if ((s32)buffLimit + readPos > (s32)curSize + (s32)size) break; // Enough free front space + mtgsReadWait(); // Let MTGS run to free up buffer space + } + pxAssertDev(curSize+size<=buffSize, "Gif Path Buffer Overflow!"); + memcpy (&buffer[curSize], pMem, size); + curSize += size; + } + + // If completed a GS packet (with EOP) then returned GS_Packet.done = 1 + // MTVU: This function only should be called called on EE thread + GS_Packet ExecuteGSPacket() { + if (mtvu.fakePackets) { // For MTVU mode... + mtvu.fakePackets--; + GS_Packet fakePack; + fakePack.done = 1; // Fake packets don't get processed by pcsx2 + fakePack.size =~0u; // Used to indicate that its a fake packet + return fakePack; + } + pxAssert(!isMTVU()); + for(;;) { + if (!gifTag.isValid) { // Need new Gif Tag + // We don't have enough data for a Gif Tag + if (curOffset + 16 > curSize) { + //GUNIT_LOG("Path Buffer: Not enough data for gif tag! [%d]", curSize-curOffset); + return gsPack; + } + + // Move packet to start of buffer + if (curOffset > buffLimit) { + RealignPacket(); + } + + gifTag.setTag(&buffer[curOffset], 1); + state = (GIF_PATH_STATE)(gifTag.tag.FLG + 1); + + // We don't have enough data for a complete GS packet + if(!gifTag.hasAD && curOffset + 16 + gifTag.len > curSize) { + gifTag.isValid = false; // So next time we test again + return gsPack; + } + + incTag(curOffset, gsPack.size, 16); // Tag Size + gsPack.cycles += 2 + gifTag.cycles; // Tag + Len ee-cycles + } + + if (gifTag.hasAD) { // Only can be true if GIF_FLG_PACKED + bool dblSIGNAL = false; + while(gifTag.nLoop && !dblSIGNAL) { + if (curOffset + 16 > curSize) return gsPack; // Exit Early + if (gifTag.curReg() == GIF_REG_A_D) { + if (!isMTVU()) dblSIGNAL = Gif_HandlerAD(&buffer[curOffset]); + } + incTag(curOffset, gsPack.size, 16); // 1 QWC + gifTag.packedStep(); + } + if (dblSIGNAL && !(gifTag.tag.EOP && !gifTag.nLoop)) return gsPack; // Exit Early + } + else incTag(curOffset, gsPack.size, gifTag.len); // Data length + + // Reload gif tag next loop + gifTag.isValid = false; + + if (gifTag.tag.EOP) { + GS_Packet t = gsPack; + t.done = 1; + + + dmaRewind = 0; + + gsPack.Reset(); + gsPack.offset = curOffset; + + //Path 3 Masking is timing sensitive, we need to simulate its length! (NFSU2/Outrun 2006) + + if((gifRegs.stat.APATH-1) == GIF_PATH_3) + { + state = GIF_PATH_WAIT; + + if(curSize - curOffset > 0 && (gifRegs.stat.M3R || gifRegs.stat.M3P)) + { + //Including breaking packets early (Rewind DMA to pick up where left off) + //but only do this when the path is masked, else we're pointlessly slowing things down. + dmaRewind = curSize - curOffset; + curSize = curOffset; + } + } + else + state = GIF_PATH_IDLE; + + return t; // Complete GS packet + } + } + } + + // MTVU: Gets called on VU XGkicks on MTVU thread + void ExecuteGSPacketMTVU() { + // Move packet to start of buffer + if (curOffset > buffLimit) { + RealignPacket(); + } + if (IsDevBuild) { // We check the packet to see if it actually + for(;;) { // needed to be processed by pcsx2... + if (curOffset + 16 > curSize) break; + gifTag.setTag(&buffer[curOffset], 1); + + if(!gifTag.hasAD && curOffset + 16 + gifTag.len > curSize) break; + incTag(curOffset, gsPack.size, 16); // Tag Size + + if (gifTag.hasAD) { // Only can be true if GIF_FLG_PACKED + while(gifTag.nLoop) { + if (curOffset + 16 > curSize) break; // Exit Early + if (gifTag.curReg() == GIF_REG_A_D) { + pxAssert(!Gif_HandlerAD_Debug(&buffer[curOffset])); + } + incTag(curOffset, gsPack.size, 16); // 1 QWC + gifTag.packedStep(); + } + } + else incTag(curOffset, gsPack.size, gifTag.len); // Data length + if (curOffset >= curSize) break; + if (gifTag.tag.EOP) break; + } + pxAssert(curOffset == curSize); + gifTag.isValid = false; + } + else { + // We assume every packet is a full GS Packet + // And we don't process anything on pcsx2 side + gsPack.size += curSize - curOffset; + curOffset = curSize; + } + } + + // MTVU: Gets called after VU1 execution on MTVU thread + void FinishGSPacketMTVU() { + if (1) { + ScopedLock lock(mtvu.gsPackMutex); + AtomicExchangeAdd(readAmount, gsPack.size + gsPack.readAmount); + mtvu.gsPackQueue.push_back(gsPack); + } + gsPack.Reset(); + gsPack.offset = curOffset; + } + + // MTVU: Gets called by MTGS thread + GS_Packet GetGSPacketMTVU() { + ScopedLock lock(mtvu.gsPackMutex); + if (mtvu.gsPackQueue.size()) { + GS_Packet t = mtvu.gsPackQueue[0]; + return t; // XGkick GS packet(s) + } + Console.Error("MTVU: Expected gsPackQueue to have elements!"); + pxAssert(0); + return GS_Packet(); // gsPack.size will be 0 + } + + // MTVU: Gets called by MTGS thread + void PopGSPacketMTVU() { + ScopedLock lock(mtvu.gsPackMutex); + if (mtvu.gsPackQueue.size()) { + mtvu.gsPackQueue.pop_front(); + } + } + + // MTVU: Returns the amount of pending + // GS Packets that MTGS hasn't yet processed + u32 GetPendingGSPackets() { + ScopedLock lock(mtvu.gsPackMutex); + u32 t = mtvu.gsPackQueue.size(); + return t; + } +}; + +struct Gif_Unit { + Gif_Path gifPath[3]; + GS_SIGNAL gsSIGNAL; // Stalling Signal + GS_FINISH gsFINISH; // Finish Signal + tGIF_STAT& stat; + GIF_TRANSFER_TYPE lastTranType; // Last Transfer Type + + Gif_Unit() : stat(gifRegs.stat) { + gifPath[0].Init(GIF_PATH_1, _1mb*9, _1mb + _1kb); + gifPath[1].Init(GIF_PATH_2, _1mb*9, _1mb + _1kb); + gifPath[2].Init(GIF_PATH_3, _1mb*9, _1mb + _1kb); + } + + // Enable softReset when resetting during game emulation + void Reset(bool softReset = false) { + GUNIT_WARN(Color_Red, "Gif Unit Reset!!! [soft=%d]", softReset); + ResetRegs(); + gsSIGNAL.Reset(); + gsFINISH.Reset(); + gifPath[0].Reset(softReset); + gifPath[1].Reset(softReset); + gifPath[2].Reset(softReset); + if(!softReset) { + lastTranType = GIF_TRANS_INVALID; + } + } + + // Resets Gif HW Regs + void ResetRegs() { + gifRegs.stat.reset(); + gifRegs.ctrl.reset(); + gifRegs.mode.reset(); + } + + // Adds a finished GS Packet to the MTGS ring buffer + __fi void AddCompletedGSPacket(GS_Packet& gsPack, GIF_PATH path) { + if (gsPack.size==~0u) Gif_AddGSPacketMTVU (gsPack, path); + else Gif_AddCompletedGSPacket(gsPack, path); + if (PRINT_GIF_PACKET) Gif_ParsePacket(gsPack, path); + } + + // Returns GS Packet Size in bytes + u32 GetGSPacketSize(GIF_PATH pathIdx, u8* pMem, u32 offset = 0, u32 size = ~0u) { + u32 memMask = pathIdx ? ~0u : 0x3fffu; + u32 curSize = 0; + for(;;) { + Gif_Tag gifTag(&pMem[offset & memMask]); + incTag(offset, curSize, 16 + gifTag.len); // Tag + Data length + if (pathIdx == GIF_PATH_1 && curSize >= 0x4000) { + DevCon.Warning("Gif Unit - GS packet size exceeded VU memory size!"); + return 0; // Bios does this... (Fixed if you delay vu1's xgkick by 103 vu cycles) + } + if (curSize >= size) return size; + if (gifTag.tag.EOP) return curSize; + } + } + + // Specify the transfer type you are initiating + // The return value is the amount of data (in bytes) that was processed + // If transfer cannot take place at this moment the return value is 0 + u32 TransferGSPacketData(GIF_TRANSFER_TYPE tranType, u8* pMem, u32 size, bool aligned=false) { + + if (THREAD_VU1) { + Gif_Path& path1 = gifPath[GIF_PATH_1]; + if (tranType == GIF_TRANS_XGKICK) { // This is on the MTVU thread + path1.CopyGSPacketData(pMem, size, aligned); + path1.ExecuteGSPacketMTVU(); + return size; + } + if (tranType == GIF_TRANS_MTVU) { // This is on the EE thread + path1.mtvu.fakePackets++; + if (CanDoGif()) Execute(false, true); + return 0; + } + } + + GUNIT_LOG("%s - [path=%d][size=%d]", Gif_TransferStr[(tranType>>8)&0xf], (tranType&3)+1, size); + if (size == 0) { GUNIT_WARN("Gif Unit - Size == 0"); return 0; } + if(!CanDoGif()) { GUNIT_WARN("Gif Unit - Signal or PSE Set or Dir = GS to EE"); } + //pxAssertDev((stat.APATH==0) || checkPaths(1,1,1), "Gif Unit - APATH wasn't cleared?"); + lastTranType = tranType; + + if (tranType == GIF_TRANS_FIFO) { + if(!CanDoPath3()) DevCon.Warning("Gif Unit - Path 3 FIFO transfer while !CanDoPath3()"); + } + if (tranType == GIF_TRANS_DMA) { + if(!CanDoPath3()) { if (!Path3Masked()) stat.P3Q = 1; return 0; } // DMA Stall + //if (stat.P2Q) DevCon.WriteLn("P2Q while path 3"); + } + if (tranType == GIF_TRANS_XGKICK) { + if(!CanDoPath1()) { stat.P1Q = 1; } // We always buffer path1 packets + } + if (tranType == GIF_TRANS_DIRECT) { + if(!CanDoPath2()) { stat.P2Q = 1; return 0; } // Direct Stall + } + if (tranType == GIF_TRANS_DIRECTHL) { + if(!CanDoPath2HL()) { stat.P2Q = 1; return 0; } // DirectHL Stall + } + + gifPath[tranType&3].CopyGSPacketData(pMem, size, aligned); + size -= Execute(tranType == GIF_TRANS_DMA, false); + return size; + } + + // Checks path activity for the given paths + // Returns an int with a bit enabled if the corresponding + // path is not finished (needs more data/processing for an EOP) + __fi int checkPaths(bool p1, bool p2, bool p3, bool checkQ=false) { + int ret = 0; + ret |= (p1 && !gifPath[GIF_PATH_1].isDone()) << 0; + ret |= (p2 && !gifPath[GIF_PATH_2].isDone()) << 1; + ret |= (p3 && !gifPath[GIF_PATH_3].isDone()) << 2; + return ret | (checkQ ? checkQueued(p1,p2,p3) : 0); + } + + __fi int checkQueued(bool p1, bool p2, bool p3) { + int ret = 0; + ret |= (p1 && stat.P1Q) << 0; + ret |= (p2 && stat.P2Q) << 1; + ret |= (p3 && stat.P3Q) << 2; + return ret; + } + + // Send processed GS Primitive(s) to the MTGS thread + // Note: Only does so if current path fully completed all + // of its given gs primitives (but didn't upload them yet) + void FlushToMTGS() { + if (!stat.APATH) return; + Gif_Path& path = gifPath[stat.APATH-1]; + if (path.gsPack.size && !path.gifTag.isValid) { + AddCompletedGSPacket(path.gsPack, (GIF_PATH)(stat.APATH-1)); + path.gsPack.offset = path.curOffset; + path.gsPack.size = 0; + } + } + + // Processes gif packets and performs path arbitration + // on EOPs or on Path 3 Images when IMT is set. + int Execute(bool isPath3, bool isResume) { + if (!CanDoGif()) { DevCon.Error("Gif Unit - Signal or PSE Set or Dir = GS to EE"); return 0; } + bool didPath3 = false; + int curPath = stat.APATH > 0 ? stat.APATH-1 : 0; //Init to zero if no path is already set. + gifPath[2].dmaRewind = 0; + stat.OPH = 1; + + for(;;) { + if (stat.APATH) { // Some Transfer is happening + Gif_Path& path = gifPath[stat.APATH-1]; + GS_Packet gsPack = path.ExecuteGSPacket(); + if(!gsPack.done) { + if (stat.APATH == 3 && CanDoP3Slice() && !gsSIGNAL.queued) { + if(!didPath3 && /*!Path3Masked() &&*/ checkPaths(1,1,0)) { // Path3 slicing + didPath3 = true; + stat.APATH = 0; + stat.IP3 = 1; + GUNIT_LOG(Color_Magenta, "Gif Unit - Path 3 slicing arbitration"); + if (gsPack.size > 16) { // Packet had other tags which we already processed + u32 subOffset = path.gifTag.isValid ? 16 : 0; // if isValid, image-primitive not finished + gsPack.size -= subOffset; // Remove the image-tag (should be last thing read) + AddCompletedGSPacket(gsPack, GIF_PATH_3); // Consider current packet complete + path.gsPack.Reset(); // Reset gs packet info + path.curOffset -= subOffset; // Start the next GS packet at the image-tag + path.gsPack.offset = path.curOffset; // Set to image-tag + path.gifTag.isValid = false; // Reload tag next ExecuteGSPacket() + pxAssert((s32)path.curOffset >= 0); + pxAssert(path.state == GIF_PATH_IMAGE); + GUNIT_LOG(Color_Magenta, "Gif Unit - Sending path 3 sliced gs packet!"); + } + continue; + } + } + //FlushToMTGS(); + //DevCon.WriteLn("Incomplete GS Packet for path %d, size=%d", stat.APATH, gsPack.size); + break; // Not finished with GS packet + } + //DevCon.WriteLn("Adding GS Packet for path %d", stat.APATH); + AddCompletedGSPacket(gsPack, (GIF_PATH)(stat.APATH-1)); + } + + if (!gsSIGNAL.queued && !gifPath[0].isDone()) { + stat.APATH = 1; + stat.P1Q = 0; + curPath = 0; + } + else if (!gsSIGNAL.queued && !gifPath[1].isDone()) { + stat.APATH = 2; + stat.P2Q = 0; + curPath = 1; + } + else if (!gsSIGNAL.queued && !gifPath[2].isDone() && !Path3Masked()) { + stat.APATH = 3; + stat.P3Q = 0; + stat.IP3 = 0; + curPath = 2; + } + else { + if(isResume || curPath == 0) { + stat.APATH = 0; + stat.OPH = 0; + } + + break; + } + } + + //Some loaders/Refresh Rate selectors and things dont issue "End of Packet" commands + //So we look and see if the end of the last tag is all there, if so, stick it in the buffer for the GS :) + //(Invisible Screens on Terminator 3 and Growlanser 2/3) + if(gifPath[curPath].curOffset == gifPath[curPath].curSize) + { + FlushToMTGS(); + } + + Gif_FinishIRQ(); + + //Path3 can rewind the DMA, so we send back the amount we go back! + if(isPath3) + return gifPath[2].dmaRewind; + else + return 0; + } + + // XGkick + bool CanDoPath1() const { + return (stat.APATH == 0 || stat.APATH == 1 || (stat.APATH == 3 && CanDoP3Slice())) && CanDoGif(); + } + // Direct + bool CanDoPath2() const { + return (stat.APATH == 0 || stat.APATH == 2 || (stat.APATH == 3 && CanDoP3Slice())) && CanDoGif(); + } + // DirectHL + bool CanDoPath2HL() const { + return (stat.APATH == 0 || stat.APATH == 2) && CanDoGif(); + } + // Gif DMA - CHECK_GIFREVERSEHACK is a hack for Hot Wheels. + bool CanDoPath3() const { + return((stat.APATH == 0 && !Path3Masked()) || stat.APATH == 3) && CanDoGif(); + } + + bool CanDoP3Slice()const { return stat.IMT == 1 && gifPath[GIF_PATH_3].state == GIF_PATH_IMAGE; } + bool CanDoGif() const { return stat.PSE == 0 && (CHECK_GIFREVERSEHACK ? 1 : stat.DIR == 0) && gsSIGNAL.queued == 0; } + //Mask stops the next packet which hasnt started from transferring + bool Path3Masked() const { return ((stat.M3R || stat.M3P) && (gifPath[GIF_PATH_3].state == GIF_PATH_IDLE || gifPath[GIF_PATH_3].state == GIF_PATH_WAIT)); } + + void PrintInfo(bool printP1=1, bool printP2=1, bool printP3=1) { + u32 a = checkPaths(1,1,1), b = checkQueued(1,1,1); + GUNIT_LOG("Gif Unit - LastTransfer = %s, Paths = [%d,%d,%d], Queued = [%d,%d,%d]", + Gif_TransferStr[(lastTranType>>8)&0xf], + !!(a&1),!!(a&2),!!(a&4),!!(b&1),!!(b&2),!!(b&4)); + GUNIT_LOG("Gif Unit - [APATH = %d][Signal = %d][PSE = %d][DIR = %d]", + stat.APATH, gsSIGNAL.queued, stat.PSE, stat.DIR); + GUNIT_LOG("Gif Unit - [CanDoGif = %d][CanDoPath3 = %d][CanDoP3Slice = %d]", + CanDoGif(), CanDoPath3(), CanDoP3Slice()); + if (printP1) PrintPathInfo(GIF_PATH_1); + if (printP2) PrintPathInfo(GIF_PATH_2); + if (printP3) PrintPathInfo(GIF_PATH_3); + } + + void PrintPathInfo(GIF_PATH path) { + GUNIT_LOG("Gif Path %d - [hasData = %d][state = %d]", path, + gifPath[path].hasDataRemaining(), gifPath[path].state); + } +}; + +extern Gif_Unit gifUnit; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/GS.cpp pcsx2-1.4.0/pcsx2/GS.cpp --- pcsx2-1.3.1+dfsg/pcsx2/GS.cpp 2014-08-15 04:17:35.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/GS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -108,7 +108,10 @@ gifUnit.Execute(false, true); // Resume paused transfers } - if(csr.FINISH) CSRreg.FINISH = false; + if (csr.FINISH) { + CSRreg.FINISH = false; + gifUnit.gsFINISH.gsFINISHFired = false; //Clear the previously fired FINISH (YS, Indiecar 2005, MGS3) + } if(csr.HSINT) CSRreg.HSINT = false; if(csr.VSINT) CSRreg.VSINT = false; if(csr.EDWINT) CSRreg.EDWINT = false; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppConfig.cpp pcsx2-1.4.0/pcsx2/gui/AppConfig.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppConfig.cpp 2015-01-02 00:51:13.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppConfig.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -56,7 +56,8 @@ const wxDirName& Settings() { - static const wxDirName retval( L"inis" ); + static const wxDirName retval(wxsFormat(L"inis_%d.%d.%d", + PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo)); return retval; } @@ -72,6 +73,18 @@ return retval; } + const wxDirName& Bios() + { + static const wxDirName retval(L"bios"); + return retval; + } + + const wxDirName& Cheats() + { + static const wxDirName retval(L"cheats"); + return retval; + } + const wxDirName& CheatsWS() { static const wxDirName retval(L"cheats_ws"); @@ -184,12 +197,12 @@ wxDirName GetBios() { - return GetDocuments() + wxDirName( L"bios" ); + return GetDocuments() + Base::Bios();; } wxDirName GetCheats() { - return AppRoot() + wxDirName( L"cheats" ); + return GetDocuments() + Base::Cheats(); } wxDirName GetCheatsWS() @@ -227,7 +240,7 @@ wxDirName GetThemes() { - return AppRoot() + Base::Themes(); + return GetDocuments() + Base::Themes(); } wxDirName GetSettings() @@ -533,8 +546,8 @@ EnableSpeedHacks = true; EnableGameFixes = false; - EnablePresets = false; - PresetIndex = 0; + EnablePresets = true; + PresetIndex = 1; CdvdSource = CDVDsrc_Iso; @@ -674,6 +687,7 @@ BaseFilenames .LoadSave( ini ); GSWindow .LoadSave( ini ); Framerate .LoadSave( ini ); + Templates .LoadSave( ini ); ini.Flush(); } @@ -722,6 +736,7 @@ , MemoryCards ( PathDefs::GetMemoryCards() ) , Langs ( PathDefs::GetLangs() ) , Logs ( PathDefs::GetLogs() ) + , Cheats ( PathDefs::GetCheats() ) , CheatsWS ( PathDefs::GetCheatsWS() ) , RunIso( PathDefs::GetDocuments() ) // raw default is always the Documents folder. @@ -915,6 +930,34 @@ IniEntry( SkipOnTurbo ); } +AppConfig::UiTemplateOptions::UiTemplateOptions() +{ + LimiterUnlimited = L"Max"; + LimiterTurbo = L"Turbo"; + LimiterSlowmo = L"Slowmo"; + LimiterNormal = L"Normal"; + OutputFrame = L"Frame"; + OutputField = L"Field"; + OutputProgressive = L"Progressive"; + OutputInterlaced = L"Interlaced"; + TitleTemplate = L"Slot: ${slot} | Speed: ${speed} (${vfps}) | Limiter: ${limiter} | ${gsdx} | ${omodei} | ${cpuusage}"; +} + +void AppConfig::UiTemplateOptions::LoadSave(IniInterface& ini) +{ + ScopedIniGroup path(ini, L"UiTemplates"); + + IniEntry(LimiterUnlimited); + IniEntry(LimiterTurbo); + IniEntry(LimiterSlowmo); + IniEntry(LimiterNormal); + IniEntry(OutputFrame); + IniEntry(OutputField); + IniEntry(OutputProgressive); + IniEntry(OutputInterlaced); + IniEntry(TitleTemplate); +} + int AppConfig::GetMaxPresetIndex() { return 5; @@ -1006,7 +1049,7 @@ vuUsed?0:(vuUsed=true, EmuOptions.Speedhacks.VUCycleSteal = 2); case 4 : //set EE cyclerate to 2 clicks (maximum) - eeUsed?0:(eeUsed=true, EmuOptions.Speedhacks.EECycleRate = 2); + eeUsed?0:(eeUsed=true, EmuOptions.Speedhacks.EECycleRate = -2); case 3 : //Set VU cycle steal to 1 click, set VU clamp mode to 'none' vuUsed?0:(vuUsed=true, EmuOptions.Speedhacks.VUCycleSteal = 1); @@ -1016,7 +1059,7 @@ //best balanced hacks combo? case 2 : //set EE cyclerate to 1 click. - eeUsed?0:(eeUsed=true, EmuOptions.Speedhacks.EECycleRate = 1); + eeUsed?0:(eeUsed=true, EmuOptions.Speedhacks.EECycleRate = -1); // EE timing hack appears to break the BIOS text and cause slowdowns in a few titles. //EnableGameFixes = true; //EmuOptions.Gamefixes.EETimingHack = true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppConfig.h pcsx2-1.4.0/pcsx2/gui/AppConfig.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppConfig.h 2015-01-02 00:51:13.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppConfig.h 2016-01-05 17:28:08.000000000 +0000 @@ -98,6 +98,14 @@ AspectRatio_MaxCount }; +enum MemoryCardType +{ + MemoryCard_None, + MemoryCard_File, + MemoryCard_Folder, + MemoryCard_MaxCount +}; + // ===================================================================================================== // Pcsx2 Application Configuration. // ===================================================================================================== @@ -182,6 +190,7 @@ { wxFileName Filename; // user-configured location of this memory card bool Enabled; // memory card enabled (if false, memcard will not show up in-game) + MemoryCardType Type; // the memory card implementation that should be used }; // ------------------------------------------------------------------------ @@ -232,6 +241,21 @@ void SanityCheck(); }; + struct UiTemplateOptions { + UiTemplateOptions(); + void LoadSave(IniInterface& conf); + + wxString LimiterUnlimited; + wxString LimiterTurbo; + wxString LimiterSlowmo; + wxString LimiterNormal; + wxString OutputFrame; + wxString OutputField; + wxString OutputProgressive; + wxString OutputInterlaced; + wxString TitleTemplate; + }; + public: wxPoint MainGuiPosition; @@ -302,6 +326,7 @@ FilenameOptions BaseFilenames; GSWindowOptions GSWindow; FramerateOptions Framerate; + UiTemplateOptions Templates; // PCSX2-core emulation options, which are passed to the emu core prior to initiating // an emulation session. Note these are the options saved into the GUI ini file and diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppCoreThread.cpp pcsx2-1.4.0/pcsx2/gui/AppCoreThread.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppCoreThread.cpp 2015-01-19 08:12:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppCoreThread.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -31,6 +31,7 @@ #include "Elfheader.h" #include "Patch.h" #include "R5900Exceptions.h" +#include "Sio.h" __aligned16 SysMtgsThread mtgsThread; __aligned16 AppCoreThread CoreThread; @@ -88,7 +89,10 @@ AppCoreThread::~AppCoreThread() throw() { - _parent::Cancel(); // use parent's, skips thread affinity check. + try { + _parent::Cancel(); // use parent's, skips thread affinity check. + } + DESTRUCTOR_CATCHALL } static void _Cancel() @@ -213,7 +217,7 @@ // Load Game Settings found in database // (game fixes, round modes, clamp modes, etc...) // Returns number of gamefixes set -static int loadGameSettings(Pcsx2Config& dest, const Game_Data& game, bool verbose = true) { +static int loadGameSettings(Pcsx2Config& dest, const Game_Data& game) { if( !game.IsOk() ) return 0; int gf = 0; @@ -223,7 +227,7 @@ SSE_RoundMode eeRM = (SSE_RoundMode)game.getInt("eeRoundMode"); if (EnumIsValid(eeRM)) { - if(verbose) Console.WriteLn("(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRM, EnumToString(eeRM)); + PatchesCon->WriteLn("(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRM, EnumToString(eeRM)); dest.Cpu.sseMXCSR.SetRoundMode(eeRM); ++gf; } @@ -234,7 +238,7 @@ SSE_RoundMode vuRM = (SSE_RoundMode)game.getInt("vuRoundMode"); if (EnumIsValid(vuRM)) { - if(verbose) Console.WriteLn("(GameDB) Changing VU0/VU1 roundmode to %d [%s]", vuRM, EnumToString(vuRM)); + PatchesCon->WriteLn("(GameDB) Changing VU0/VU1 roundmode to %d [%s]", vuRM, EnumToString(vuRM)); dest.Cpu.sseVUMXCSR.SetRoundMode(vuRM); ++gf; } @@ -242,7 +246,7 @@ if (game.keyExists("eeClampMode")) { int clampMode = game.getInt("eeClampMode"); - if(verbose) Console.WriteLn("(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode); + PatchesCon->WriteLn("(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode); dest.Cpu.Recompiler.fpuOverflow = (clampMode >= 1); dest.Cpu.Recompiler.fpuExtraOverflow = (clampMode >= 2); dest.Cpu.Recompiler.fpuFullMode = (clampMode >= 3); @@ -251,7 +255,7 @@ if (game.keyExists("vuClampMode")) { int clampMode = game.getInt("vuClampMode"); - if(verbose) Console.WriteLn("(GameDB) Changing VU0/VU1 clamp mode [mode=%d]", clampMode); + PatchesCon->WriteLn("(GameDB) Changing VU0/VU1 clamp mode [mode=%d]", clampMode); dest.Cpu.Recompiler.vuOverflow = (clampMode >= 1); dest.Cpu.Recompiler.vuExtraOverflow = (clampMode >= 2); dest.Cpu.Recompiler.vuSignOverflow = (clampMode >= 3); @@ -261,7 +265,7 @@ if (game.keyExists("mvuFlagSpeedHack")) { bool vuFlagHack = game.getInt("mvuFlagSpeedHack") ? 1 : 0; - if(verbose) Console.WriteLn("(GameDB) Changing mVU flag speed hack [mode=%d]", vuFlagHack); + PatchesCon->WriteLn("(GameDB) Changing mVU flag speed hack [mode=%d]", vuFlagHack); dest.Speedhacks.vuFlagHack = vuFlagHack; gf++; } @@ -275,7 +279,7 @@ { bool enableIt = game.getBool(key); dest.Gamefixes.Set(id, enableIt); - if(verbose) Console.WriteLn(L"(GameDB) %s Gamefix: " + key, enableIt ? L"Enabled" : L"Disabled" ); + PatchesCon->WriteLn(L"(GameDB) %s Gamefix: " + key, enableIt ? L"Enabled" : L"Disabled"); gf++; // The LUT is only used for 1 game so we allocate it only when the gamefix is enabled (save 4MB) @@ -293,6 +297,24 @@ // File scope since it gets reset externally when rebooting static wxString curGameKey; +// PatchesCon points to either Console or ConsoleWriter_Null, such that if we're in Devel mode +// or the user enabled the devel/verbose console it prints all patching info whenever it's applied, +// else it prints the patching info only once - right after boot. +const IConsoleWriter *PatchesCon = &Console; + +static void SetupPatchesCon(bool verbose) +{ + bool devel = false; +#ifdef PCSX2_DEVBUILD + devel = true; +#endif + + if (verbose || DevConWriterEnabled || devel) + PatchesCon = &Console; + else + PatchesCon = &ConsoleWriter_Null; +} + void AppCoreThread::ApplySettings( const Pcsx2Config& src ) { // 'fixup' is the EmuConfig we're going to upload to the emulator, which very well may @@ -326,6 +348,7 @@ wxString gameName; wxString gameCompat; + wxString gameMemCardFilter; int numberLoadedCheats; int numberLoadedWideScreenPatches; @@ -336,6 +359,8 @@ const wxString newGameKey( SysGetDiscID() ); const bool verbose( newGameKey != curGameKey ); + SetupPatchesCon(verbose); + curGameKey = newGameKey; if (!curGameKey.IsEmpty()) @@ -348,20 +373,27 @@ gameName = game.getString("Name"); gameName += L" (" + game.getString("Region") + L")"; gameCompat = L" [Status = "+compatToStringWX(compat)+L"]"; + gameMemCardFilter = game.getString("MemCardFilter"); } if (EmuConfig.EnablePatches) { if (int patches = InitPatches(gameCRC, game)) { gamePatch.Printf(L" [%d Patches]", patches); - if (verbose) Console.WriteLn(Color_Green, "(GameDB) Patches Loaded: %d", patches); + PatchesCon->WriteLn(Color_Green, "(GameDB) Patches Loaded: %d", patches); } - if (int fixes = loadGameSettings(fixup, game, verbose)) { + if (int fixes = loadGameSettings(fixup, game)) { gameFixes.Printf(L" [%d Fixes]", fixes); } } } } + if (!gameMemCardFilter.IsEmpty()) { + sioSetGameSerial(gameMemCardFilter); + } else { + sioSetGameSerial(curGameKey); + } + if (gameName.IsEmpty() && gameSerial.IsEmpty() && gameCRC.IsEmpty()) { // if all these conditions are met, it should mean that we're currently running BIOS code. @@ -398,8 +430,7 @@ wxString cheats_ws_archive = Path::Combine(PathDefs::GetProgramDataDir(), wxFileName(L"cheats_ws.zip")); if (numberDbfCheatsLoaded = LoadCheatsFromZip(gameCRC, cheats_ws_archive)) { - if (verbose || DevConWriterEnabled) - Console.WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", numberDbfCheatsLoaded); + PatchesCon->WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", numberDbfCheatsLoaded); gameWsHacks.Printf(L" [%d widescreen hacks]", numberDbfCheatsLoaded); } } @@ -494,6 +525,7 @@ m_ExecMode = ExecMode_Paused; OnResumeReady(); _reset_stuff_as_needed(); + ClearMcdEjectTimeoutNow(); // probably safe to do this when a game boots, eliminates annoying prompts m_ExecMode = ExecMode_Opened; _parent::GameStartingInThread(); @@ -705,8 +737,11 @@ ScopedCoreThreadClose::~ScopedCoreThreadClose() throw() { if( m_alreadyScoped ) return; - _parent::DoResume(); - ScopedCore_IsFullyClosed = false; + try { + _parent::DoResume(); + ScopedCore_IsFullyClosed = false; + } + DESTRUCTOR_CATCHALL } ScopedCoreThreadPause::ScopedCoreThreadPause( BaseSysExecEvent_ScopedCore* abuse_me ) @@ -732,8 +767,11 @@ ScopedCoreThreadPause::~ScopedCoreThreadPause() throw() { if( m_alreadyScoped ) return; - _parent::DoResume(); - ScopedCore_IsPaused = false; + try { + _parent::DoResume(); + ScopedCore_IsPaused = false; + } + DESTRUCTOR_CATCHALL } ScopedCoreThreadPopup::ScopedCoreThreadPopup() diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppGameDatabase.cpp pcsx2-1.4.0/pcsx2/gui/AppGameDatabase.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppGameDatabase.cpp 2014-08-10 20:07:31.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppGameDatabase.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -209,7 +209,7 @@ const uint endidx = (blockidx == m_BlockTableWritePos) ? m_CurBlockWritePos : m_GamesPerBlock; - for( uint gameidx=0; gameidx<=endidx; ++gameidx ) + for( uint gameidx=0; gameidx ToolbarImages; ScopedPtr IconBundle; ScopedPtr Bitmap_Logo; + ScopedPtr ScreenshotBitmap; ScopedPtr GameDB; pxAppResources(); @@ -261,8 +265,6 @@ int m_fpsqueue_writepos; uint m_initpause; - uint m_FrameCounter; - public: FramerateManager() { Reset(); } virtual ~FramerateManager() throw() {} @@ -288,11 +290,14 @@ // is set to ISO. wxString IsoFile; + wxString ElfFile; + // Specifies the CDVD source type to use when AutoRunning CDVD_SourceType CdvdSource; // Indicates if PCSX2 should autorun the configured CDVD source and/or ISO file. bool SysAutoRun; + bool SysAutoRunElf; StartupOptions() { @@ -301,6 +306,7 @@ PortableMode = false; NoFastBoot = false; SysAutoRun = false; + SysAutoRunElf = false; CdvdSource = CDVDsrc_NoDisc; } }; @@ -512,7 +518,7 @@ GSFrame* GetGsFramePtr() const { return (GSFrame*)wxWindow::FindWindowById( m_id_GsFrame ); } MainEmuFrame* GetMainFramePtr() const { return (MainEmuFrame*)wxWindow::FindWindowById( m_id_MainFrame ); } - DisassemblyDialog* GetDisassemblyPtr() const { return m_id_Disassembler ? (DisassemblyDialog*)wxWindow::FindWindowById( m_id_Disassembler ) : NULL; } + DisassemblyDialog* GetDisassemblyPtr() const { return (DisassemblyDialog*)wxWindow::FindWindowById(m_id_Disassembler); } void enterDebugMode(); void leaveDebugMode(); @@ -559,6 +565,7 @@ pxAppResources& GetResourceCache(); const wxIconBundle& GetIconBundle(); const wxBitmap& GetLogoBitmap(); + const wxBitmap& GetScreenshotBitmap(); wxImageList& GetImgList_Config(); wxImageList& GetImgList_Toolbars(); @@ -688,6 +695,42 @@ return window; } +// -------------------------------------------------------------------------------------- +// AppOpenModalDialog +// -------------------------------------------------------------------------------------- +// Returns the ID of the button used to close the dialog. +// +template +int AppOpenModalDialog(wxString panel_name, wxWindow* parent = NULL) +{ + if (wxWindow* window = wxFindWindowByName(L"Dialog:" + DialogType::GetNameStatic())) + { + window->SetFocus(); + if (wxDialog* dialog = wxDynamicCast(window, wxDialog)) + { + // Switch to the requested panel. + if (panel_name != wxEmptyString) { + wxCommandEvent evt(pxEvt_SetSettingsPage); + evt.SetString(panel_name); + dialog->GetEventHandler()->ProcessEvent(evt); + } + + // It's legal to call ShowModal on a non-modal dialog, therefore making + // it modal in nature for the needs of whatever other thread of action wants + // to block against it: + if (!dialog->IsModal()) + { + int result = dialog->ShowModal(); + dialog->Destroy(); + return result; + } + } + pxFailDev("Can only show wxDialog class windows as modal!"); + return wxID_CANCEL; + } else + return DialogType(parent).ShowModal(); +} + extern pxDoAssertFnType AppDoAssert; // -------------------------------------------------------------------------------------- diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppInit.cpp pcsx2-1.4.0/pcsx2/gui/AppInit.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppInit.cpp 2015-01-17 11:08:24.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppInit.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -18,6 +18,7 @@ #include "AppAccelerators.h" #include "ConsoleLogger.h" #include "MSWstuff.h" +#include "MTVU.h" // for thread cancellation on shutdown #include "Utilities/IniInterface.h" #include "DebugTools/Debug.h" @@ -345,6 +346,14 @@ Startup.IsoFile = parser.GetParam( 0 ); Startup.SysAutoRun = true; } + else + { + wxString elf_file; + if (parser.Found(L"elf", &elf_file) && !elf_file.IsEmpty()) { + Startup.SysAutoRunElf = true; + Startup.ElfFile = elf_file; + } + } if( parser.Found(L"usecd") ) { @@ -374,7 +383,10 @@ virtual ~GameDatabaseLoaderThread() throw() { - _parent::Cancel(); + try { + _parent::Cancel(); + } + DESTRUCTOR_CATCHALL } protected: @@ -410,7 +422,12 @@ wxInitAllImageHandlers(); Console.WriteLn("Applying operating system default language..."); - i18n_SetLanguage( wxLANGUAGE_DEFAULT ); + { + // The PCSX2 log system hasn't been set up yet, so error messages might + // pop up that could cause some alarm amongst users. Let's avoid that. + wxDoNotLogInThisScope please; + i18n_SetLanguage(wxLANGUAGE_DEFAULT); + } Console.WriteLn("Command line parsing..."); if( !_parent::OnInit() ) return false; @@ -476,6 +493,15 @@ SysUpdateIsoSrcFile( Startup.IsoFile ); sApp.SysExecute( Startup.CdvdSource ); } + else if ( Startup.SysAutoRunElf ) + { + g_Conf->EmuOptions.UseBOOT2Injection = true; + // Enable iop/ee logging + SysConsole.eeConsole.Enabled = true; + SysConsole.iopConsole.Enabled = true; + + sApp.SysExecute( Startup.CdvdSource, Startup.ElfFile ); + } } // ---------------------------------------------------------------------------- catch( Exception::StartupAborted& ex ) // user-aborted, no popups needed. @@ -692,10 +718,13 @@ m_PendingSaves = 0; m_ScheduledTermination = false; + m_UseGUI = true; + m_NoGuiExitPrompt = true; m_id_MainFrame = wxID_ANY; m_id_GsFrame = wxID_ANY; m_id_ProgramLogBox = wxID_ANY; + m_id_Disassembler = wxID_ANY; m_ptr_ProgramLog = NULL; SetAppName( L"PCSX2" ); @@ -704,7 +733,11 @@ Pcsx2App::~Pcsx2App() { - pxDoAssert = pxAssertImpl_LogIt; + pxDoAssert = pxAssertImpl_LogIt; + try { + vu1Thread.Cancel(); + } + DESTRUCTOR_CATCHALL } void Pcsx2App::CleanUp() diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppMain.cpp pcsx2-1.4.0/pcsx2/gui/AppMain.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppMain.cpp 2014-12-31 01:37:24.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppMain.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -14,6 +14,7 @@ */ #include "PrecompiledHeader.h" +#include "App.h" #include "MainFrame.h" #include "GSFrame.h" #include "GS.h" @@ -59,47 +60,25 @@ ScopedPtr g_Conf; -template -int AppOpenModalDialog( wxWindow* parent=NULL ) -{ - if( wxWindow* window = wxFindWindowByName( L"Dialog:" + DialogType::GetNameStatic() ) ) - { - window->SetFocus(); - if( wxDialog* dialog = wxDynamicCast( window, wxDialog ) ) - { - // It's legal to call ShowModal on a non-modal dialog, therefore making - // it modal in nature for the needs of whatever other thread of action wants - // to block against it: - - if( !dialog->IsModal() ) - { - int result = dialog->ShowModal(); - dialog->Destroy(); - return result; - } - } - pxFailDev( "Can only show wxDialog class windows as modal!" ); - return wxID_CANCEL; - } - else - return DialogType( parent ).ShowModal(); -} - static bool HandlePluginError( BaseException& ex ) { - if( !pxDialogExists( L"CoreSettings" ) ) + if (!pxDialogExists(L"Dialog:" + Dialogs::ComponentsConfigDialog::GetNameStatic())) { if( !Msgbox::OkCancel( ex.FormatDisplayMessage() + _("\n\nPress Ok to go to the Plugin Configuration Panel.") ) ) return false; } + else + { + Msgbox::Alert(ex.FormatDisplayMessage()); + } - g_Conf->SysSettingsTabName = L"Plugins"; + g_Conf->ComponentsTabName = L"Plugins"; // TODO: Send a message to the panel to select the failed plugin. - return AppOpenModalDialog() != wxID_CANCEL; + return AppOpenModalDialog(L"Plugins") != wxID_CANCEL; } class PluginErrorEvent : public pxExceptionEvent @@ -161,6 +140,63 @@ } } +// Returns a string message telling the user to consult guides for obtaining a legal BIOS. +// This message is in a function because it's used as part of several dialogs in PCSX2 (there +// are multiple variations on the BIOS and BIOS folder checks). +wxString BIOS_GetMsg_Required() +{ + return pxE(L"PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't count). Please consult the FAQs and Guides for further instructions." + ); +} + +class BIOSLoadErrorEvent : public pxExceptionEvent +{ + typedef pxExceptionEvent _parent; + +public: + BIOSLoadErrorEvent(BaseException* ex = NULL) : _parent(ex) {} + BIOSLoadErrorEvent(const BaseException& ex) : _parent(ex) {} + + virtual ~BIOSLoadErrorEvent() throw() { } + virtual BIOSLoadErrorEvent *Clone() const { return new BIOSLoadErrorEvent(*this); } + +protected: + void InvokeEvent(); + +}; + +static bool HandleBIOSError(BaseException& ex) +{ + if (!pxDialogExists(L"Dialog:" + Dialogs::ComponentsConfigDialog::GetNameStatic())) + { + if (!Msgbox::OkCancel(ex.FormatDisplayMessage() + L"\n\n" + BIOS_GetMsg_Required() + + L"\n\n" + _("Press Ok to go to the BIOS Configuration Panel."), _("PS2 BIOS Error"))) + return false; + } + else + { + Msgbox::Alert(ex.FormatDisplayMessage() + L"\n\n" + BIOS_GetMsg_Required(), _("PS2 BIOS Error")); + } + + g_Conf->ComponentsTabName = L"BIOS"; + + return AppOpenModalDialog(L"BIOS") != wxID_CANCEL; +} + +void BIOSLoadErrorEvent::InvokeEvent() +{ + if (!m_except) return; + + ScopedExcept deleteMe(m_except); + m_except = NULL; + + if (!HandleBIOSError(*deleteMe)) + { + Console.Warning("User canceled BIOS configuration."); + Msgbox::Alert(_("Warning! Valid BIOS has not been selected. PCSX2 may be inoperable.")); + } +} + // Allows for activating menu actions from anywhere in PCSX2. // And it's Thread Safe! void Pcsx2App::PostMenuAction( MenuIdentifiers menu_id ) const @@ -227,7 +263,9 @@ IMPLEMENT_DYNAMIC_CLASS( Pcsx2AppMethodEvent, pxActionEvent ) -#ifdef __WXGTK__ +#ifdef __WXMSW__ +extern int TranslateVKToWXK( u32 keysym ); +#elif defined( __WXGTK__ ) extern int TranslateGDKtoWXK( u32 keysym ); #endif @@ -236,8 +274,9 @@ m_kevt.SetEventType( ( ev.evt == KEYPRESS ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ); const bool isDown = (ev.evt == KEYPRESS); +//returns 0 for normal keys and a WXK_* value for special keys #ifdef __WXMSW__ - const int vkey = wxCharCodeMSWToWX( ev.key ); //returns 0 if plain ascii value or a WXK_... (<=32 or >=300) if a special key + const int vkey = TranslateVKToWXK(ev.key); #elif defined( __WXGTK__ ) const int vkey = TranslateGDKtoWXK( ev.key ); #else @@ -255,6 +294,18 @@ m_kevt.m_keyCode = vkey? vkey : ev.key; + if (DevConWriterEnabled && m_kevt.GetEventType() == wxEVT_KEY_DOWN) { + wxString strFromCode = wxAcceleratorEntry( + (m_kevt.m_shiftDown ? wxACCEL_SHIFT : 0) | (m_kevt.m_controlDown ? wxACCEL_CTRL : 0) | (m_kevt.m_altDown ? wxACCEL_ALT : 0), + m_kevt.m_keyCode + ).ToString(); + + if (strFromCode.EndsWith(L"\\")) + strFromCode += L"\\"; // If copied into PCSX2_keys.ini, \ needs escaping + + Console.WriteLn(wxString(L"> Key: %s (Code: %ld)"), WX_STR(strFromCode), m_kevt.m_keyCode); + } + if( m_kevt.GetEventType() == wxEVT_KEY_DOWN ) { if( GSFrame* gsFrame = wxGetApp().GetGsFramePtr() ) @@ -277,12 +328,19 @@ // displaying a readable --help command line list, so I replace it here with a custom one // that formats things nicer. // + +// This is only used in Windows. It's not possible to have wxWidgets show a localised +// command line help message in cmd/powershell/mingw bash. It can be done in English +// locales ( using AttachConsole, WriteConsole, FreeConsole combined with +// wxMessageOutputStderr), but completely fails for some other languages (i.e. Japanese). +#ifdef _WIN32 class pxMessageOutputMessageBox : public wxMessageOutput { public: pxMessageOutputMessageBox() { } - virtual void Printf(const wxChar* format, ...); + // DoPrintf in wxMessageOutputBase (wxWidgets 3.0) uses this. + virtual void Output(const wxString &out); }; // EXTRAORDINARY HACK! wxWidgets does not provide a clean way of overriding the commandline options @@ -291,21 +349,18 @@ // wxMessageOutputMessageBox::PrintF is only used in like two places, so we can just check for the // commandline window using an identifier we know is contained in it, and then format our own window // display. :D --air -void pxMessageOutputMessageBox::Printf(const wxChar* format, ...) + +void pxMessageOutputMessageBox::Output(const wxString& out) { using namespace pxSizerFlags; - va_list args; - va_start(args, format); - wxString out; - out.PrintfV(format, args); - va_end(args); - - FastFormatUnicode isoFormatted; - isoFormatted.Write( L"[%s]", _("IsoFile") ); - int pos = out.Find( isoFormatted.c_str() ); - - if(pos == wxNOT_FOUND) + wxString isoFormatted; + isoFormatted.Printf(L"[%s]", _("IsoFile")); + + int pos = out.Find(isoFormatted.c_str()); + + // I've no idea when this is true. + if (pos == wxNOT_FOUND) { Msgbox::Alert( out ); return; } @@ -337,6 +392,7 @@ pxIssueConfirmation(popup, MsgButtons().Close() ); } +#endif wxMessageOutput* Pcsx2AppTraits::CreateMessageOutput() { @@ -430,8 +486,6 @@ void FramerateManager::DoFrame() { - ++m_FrameCounter; - m_fpsqueue_writepos = (m_fpsqueue_writepos + 1) % FramerateQueueDepth; m_fpsqueue[m_fpsqueue_writepos] = GetCPUTicks(); @@ -531,16 +585,6 @@ cmd->Invoke(); } -// Returns a string message telling the user to consult guides for obtaining a legal BIOS. -// This message is in a function because it's used as part of several dialogs in PCSX2 (there -// are multiple variations on the BIOS and BIOS folder checks). -wxString BIOS_GetMsg_Required() -{ - return pxE( L"PCSX2 requires a PS2 BIOS in order to run. For legal reasons, you *must* obtain a BIOS from an actual PS2 unit that you own (borrowing doesn't count). Please consult the FAQs and Guides for further instructions." - ); -} - - void Pcsx2App::HandleEvent(wxEvtHandler* handler, wxEventFunction func, wxEvent& event) const { const_cast(this)->HandleEvent( handler, func, event ); @@ -560,17 +604,15 @@ // ---------------------------------------------------------------------------- catch( Exception::BiosLoadFailed& ex ) { - wxDialogWithHelpers dialog( NULL, _("PS2 BIOS Error") ); - dialog += dialog.Heading( ex.FormatDisplayMessage() + L"\n\n" + BIOS_GetMsg_Required() + L"\n\n" + _("Press Ok to go to the BIOS Configuration Panel.") ); - dialog += new ModalButtonPanel( &dialog, MsgButtons().OKCancel() ); - - if( dialog.ShowModal() == wxID_CANCEL ) - Console.Warning( "User denied option to re-configure BIOS." ); + // Commandline 'nogui' users will not receive an error message, but at least PCSX2 will + // terminate properly. + GSFrame* gsframe = wxGetApp().GetGsFramePtr(); + gsframe->Close(); - if( AppOpenModalDialog() != wxID_CANCEL ) - SysExecute(); - else - Console.Warning( "User canceled BIOS configuration." ); + Console.Error(ex.FormatDiagnosticMessage()); + + if (wxGetApp().HasGUI()) + AddIdleEvent(BIOSLoadErrorEvent(ex)); } // ---------------------------------------------------------------------------- catch( Exception::SaveStateLoadError& ex) @@ -583,10 +625,23 @@ // ---------------------------------------------------------------------------- catch( Exception::PluginOpenError& ex ) { - // Should need to do much here -- all systems should be in an inert and (sorta safe!) state. - - Console.Error( ex.FormatDiagnosticMessage() ); - AddIdleEvent( PluginInitErrorEvent(ex) ); + // It might be possible for there to be no GS Frame, but I don't really know. This does + // prevent PCSX2 from locking up on a Windows wxWidgets 3.0 build. My conjecture is this: + // 1. Messagebox appears + // 2. Either a close or hide signal for gsframe gets sent to messagebox. + // 3. Message box hides itself without exiting the modal event loop, therefore locking up + // PCSX2. This probably happened in the BIOS error case above as well. + // So the idea is to explicitly close the gsFrame before the modal MessageBox appears and + // intercepts the close message. Only for wx3.0 though - it sometimes breaks linux wx2.8. +#if wxMAJOR_VERSION >= 3 + if (GSFrame* gsframe = wxGetApp().GetGsFramePtr()) + gsframe->Close(); +#endif + Console.Error(ex.FormatDiagnosticMessage()); + + // Make sure it terminates properly for nogui users. + if (wxGetApp().HasGUI()) + AddIdleEvent(PluginInitErrorEvent(ex)); } // ---------------------------------------------------------------------------- catch( Exception::PluginInitError& ex ) @@ -649,8 +704,15 @@ // Runtime errors which have been unhandled should still be safe to recover from, // so lets issue a message to the user and then continue the message pump. + // Test case (Windows only, Linux has an uncaught exception for some + // reason): Run PSX ISO using fast boot + if (GSFrame* gsframe = wxGetApp().GetGsFramePtr()) + gsframe->Close(); + Console.Error( ex.FormatDiagnosticMessage() ); - Msgbox::Alert( ex.FormatDisplayMessage() ); + // I should probably figure out how to have the error message as well. + if (wxGetApp().HasGUI()) + Msgbox::Alert( ex.FormatDisplayMessage() ); } } @@ -744,6 +806,7 @@ g_Conf->Folders.MemoryCards.Mkdir(); g_Conf->Folders.Savestates.Mkdir(); g_Conf->Folders.Snapshots.Mkdir(); + g_Conf->Folders.Cheats.Mkdir(); g_Conf->Folders.CheatsWS.Mkdir(); g_Conf->EmuOptions.BiosFilename = g_Conf->FullpathToBios(); @@ -837,7 +900,7 @@ GSFrame* gsFrame = GetGsFramePtr(); if( gsFrame == NULL ) { - gsFrame = new GSFrame( GetMainFramePtr(), GetAppName() ); + gsFrame = new GSFrame(GetAppName() ); m_id_GsFrame = gsFrame->GetId(); switch( wxGetApp().Overrides.GsWindowMode ) @@ -894,7 +957,7 @@ #if wxMAJOR_VERSION < 3 GtkWidget *child_window = gtk_bin_get_child(GTK_BIN(gsFrame->GetViewport()->GetHandle())); #else - GtkWidget *child_window = (GtkWidget*)GTK_BIN(gsFrame->GetViewport()->GetHandle()); + GtkWidget *child_window = GTK_WIDGET(gsFrame->GetViewport()->GetHandle()); #endif gtk_widget_realize(child_window); // create the widget to allow to use GDK_WINDOW_* macro @@ -994,6 +1057,7 @@ SysExecEvent_Execute() : m_UseCDVDsrc(false) , m_UseELFOverride(false) + , m_cdvdsrc_type(CDVDsrc_Iso) { } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppRes.cpp pcsx2-1.4.0/pcsx2/gui/AppRes.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppRes.cpp 2011-03-07 16:58:24.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppRes.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,8 +21,11 @@ #include #include +#include "MSWstuff.h" + #include "Resources/EmbeddedImage.h" #include "Resources/BackgroundLogo.h" +#include "Resources/ButtonIcon_Camera.h" #include "Resources/ConfigIcon_Cpu.h" #include "Resources/ConfigIcon_Video.h" @@ -40,26 +43,16 @@ const wxImage& LoadImageAny( wxImage& dest, bool useTheme, wxFileName& base, const wxChar* filename, IEmbeddedImage& onFail ) { - if( useTheme ) + if (useTheme && base.DirExists()) { - base.SetName( filename ); - - base.SetExt( L"png" ); - if( base.FileExists() ) - { - if( dest.LoadFile( base.GetFullPath() ) ) return dest; - } + wxFileName pathname(base.GetFullPath(), filename); - base.SetExt( L"jpg" ); - if( base.FileExists() ) + const wxChar* extensions[3] = {L"png", L"jpg", L"bmp"}; + for (size_t i = 0; i < sizeof(extensions)/sizeof(extensions[0]); ++i) { - if( dest.LoadFile( base.GetFullPath() ) ) return dest; - } - - base.SetExt( L"bmp" ); - if( base.FileExists() ) - { - if( dest.LoadFile( base.GetFullPath() ) ) return dest; + pathname.SetExt(extensions[i]); + if (pathname.FileExists() && dest.LoadFile(pathname.GetFullPath())) + return dest; } } @@ -119,13 +112,14 @@ ScopedPtr& logo( GetResourceCache().Bitmap_Logo ); if( logo ) return *logo; - wxFileName mess; + wxFileName themeDirectory; bool useTheme = (g_Conf->DeskTheme != L"default"); if( useTheme ) { - wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme ); - wxFileName zipped( theme.GetFilename() ); + themeDirectory.Assign(wxFileName(PathDefs::GetThemes().ToString()).GetFullPath(), g_Conf->DeskTheme); +#if 0 + wxFileName zipped(themeDirectory); zipped.SetExt( L"zip" ); if( zipped.FileExists() ) @@ -136,46 +130,72 @@ Console.Error( "Loading themes from zipfile is not supported yet.\nFalling back on default theme." ); } - - // Overrides zipfile settings (fix when zipfile support added) - mess = theme.ToString(); +#endif } wxImage img; EmbeddedImage temp; // because gcc can't allow non-const temporaries. - LoadImageAny( img, useTheme, mess, L"BackgroundLogo", temp ); - logo = new wxBitmap( img ); + LoadImageAny(img, useTheme, themeDirectory, L"BackgroundLogo", temp); + float scale = MSW_GetDPIScale(); // 1.0 for non-Windows + logo = new wxBitmap(img.Scale(img.GetWidth() * scale, img.GetHeight() * scale, wxIMAGE_QUALITY_HIGH)); return *logo; } +const wxBitmap& Pcsx2App::GetScreenshotBitmap() +{ + ScopedPtr& screenshot(GetResourceCache().ScreenshotBitmap); + if (screenshot) return *screenshot; + + wxFileName themeDirectory; + bool useTheme = (g_Conf->DeskTheme != L"default"); + + if (useTheme) + { + themeDirectory.Assign(wxFileName(PathDefs::GetThemes().ToString()).GetFullPath(), g_Conf->DeskTheme); + } + + wxImage img; + EmbeddedImage temp; // because gcc can't allow non-const temporaries. + LoadImageAny(img, useTheme, themeDirectory, L"ButtonIcon_Camera", temp); + float scale = MSW_GetDPIScale(); // 1.0 for non-Windows + screenshot = new wxBitmap(img.Scale(img.GetWidth() * scale, img.GetHeight() * scale, wxIMAGE_QUALITY_HIGH)); + + return *screenshot; +} + wxImageList& Pcsx2App::GetImgList_Config() { ScopedPtr& images( GetResourceCache().ConfigImages ); if( !images ) { - images = new wxImageList(32, 32); - wxFileName mess; + int image_size = MSW_GetDPIScale() * g_Conf->Listbook_ImageSize; + images = new wxImageList(image_size, image_size); + wxFileName themeDirectory; bool useTheme = (g_Conf->DeskTheme != L"default"); if( useTheme ) { - wxDirName theme( PathDefs::GetThemes() + g_Conf->DeskTheme ); - mess = theme.ToString(); + themeDirectory.Assign(wxFileName(PathDefs::GetThemes().ToString()).GetFullPath(), g_Conf->DeskTheme); } wxImage img; // GCC Specific: wxT() macro is required when using string token pasting. For some // reason L generates syntax errors. >_< + // TODO: This can be fixed with something like + // #define L_STR(x) L_STR2(x) + // #define L_STR2(x) L ## x + // but it's probably best to do it everywhere at once. wxWidgets + // recommends not to use it since v2.9.0. #undef FancyLoadMacro #define FancyLoadMacro( name ) \ { \ - EmbeddedImage temp( g_Conf->Listbook_ImageSize, g_Conf->Listbook_ImageSize ); \ - m_Resources->ImageId.Config.name = images->Add( LoadImageAny( \ - img, useTheme, mess, L"ConfigIcon_" wxT(#name), temp ) \ - ); \ + EmbeddedImage temp; \ + LoadImageAny(img, useTheme, themeDirectory, L"ConfigIcon_" wxT(#name), temp); \ + img.Rescale(image_size, image_size, wxIMAGE_QUALITY_HIGH); \ + m_Resources->ImageId.Config.name = images->Add(img); \ } FancyLoadMacro( Paths ); @@ -190,6 +210,7 @@ return *images; } +// This stuff seems unused? wxImageList& Pcsx2App::GetImgList_Toolbars() { ScopedPtr& images( GetResourceCache().ToolbarImages ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/AppUserMode.cpp pcsx2-1.4.0/pcsx2/gui/AppUserMode.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/AppUserMode.cpp 2014-06-29 07:05:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/AppUserMode.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -289,13 +289,15 @@ // Wizard is only run once. The status of the wizard having been run is stored in // the installation ini file, which can be either the portable install (useful for admins) // or the registry/user local documents position. - + int version; + conf_install->Read(L"Version", &version, 0); bool runWiz; conf_install->Read( L"RunWizard", &runWiz, true ); App_LoadInstallSettings( conf_install ); + int pcsx2Ver = PCSX2_VersionHi * 100 + PCSX2_VersionMid * 10 + PCSX2_VersionLo; - if( !Startup.ForceWizard && !runWiz ) + if( !Startup.ForceWizard && !runWiz && version == pcsx2Ver) { AppConfig_OnChangedSettingsFolder( false ); return; @@ -310,5 +312,6 @@ // Wizard completed successfully, so let's not torture the user with this crap again! conf_install->Write( L"RunWizard", false ); + conf_install->Write(L"Version", pcsx2Ver); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/ConsoleLogger.cpp pcsx2-1.4.0/pcsx2/gui/ConsoleLogger.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/ConsoleLogger.cpp 2014-12-30 03:29:39.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/ConsoleLogger.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -42,8 +42,14 @@ // ---------------------------------------------------------------------------- // +#if wxMAJOR_VERSION < 3 void pxLogConsole::DoLog( wxLogLevel level, const wxChar *szString, time_t t ) { + wxString message(szString); +#else +void pxLogConsole::DoLogRecord(wxLogLevel level, const wxString &message, const wxLogRecordInfo &info) +{ +#endif switch ( level ) { case wxLOG_Trace: @@ -51,7 +57,7 @@ { wxString str; TimeStamp( &str ); - MSW_OutputDebugString( str + szString + L"\n" ); + MSW_OutputDebugString( str + message + L"\n" ); } break; @@ -70,15 +76,15 @@ // fallthrough! case wxLOG_Message: - Console.WriteLn( L"[wx] %ls", szString ); + Console.WriteLn( L"[wx] %s", WX_STR(message)); break; case wxLOG_Error: - Console.Error( L"[wx] %ls", szString ); + Console.Error(L"[wx] %s", WX_STR(message)); break; case wxLOG_Warning: - Console.Warning( L"[wx] %ls", szString ); + Console.Warning(L"[wx] %s", WX_STR(message)); break; } } @@ -157,7 +163,10 @@ ConsoleLogFrame::ColorArray::~ColorArray() throw() { - Cleanup(); + try { + Cleanup(); + } + DESTRUCTOR_CATCHALL } void ConsoleLogFrame::ColorArray::Create( int fontsize ) @@ -350,6 +359,13 @@ false }; +// Typically on startup (or during first time wizard when choosing "import"), the +// settings are loaded from ini and if the ini doesn't exist then from ConLogDefaults, +// but during first time wizard when choosing "overwrite", the first action is "save", +// which ends up saving before applying ConLogDefaults, therefore all conlog sources +// are saved as disabled. ConLogInitialized is used to detect and avoid this issue. +static bool ConLogInitialized = false; + void ConLog_LoadSaveSettings( IniInterface& ini ) { ScopedIniGroup path(ini, L"ConsoleLogSources"); @@ -361,9 +377,14 @@ { if (ConsoleLogSource* log = ConLogSources[i]) { + // IsSaving() is for clarity only, since log->Enabled initial value is ignored when loading. + if (ini.IsSaving() && !ConLogInitialized) + log->Enabled = ConLogDefaults[i]; ini.Entry( log->GetCategory() + L"." + log->GetShortName(), log->Enabled, ConLogDefaults[i] ); } } + + ConLogInitialized = true; } @@ -417,7 +438,7 @@ menuFontSizes.Append( MenuId_FontSize_Small, _("Small"), _t("Fits a lot of log in a microcosmically small area."), wxITEM_RADIO )->Check( options.FontSize == 7 ); - menuFontSizes.Append( MenuId_FontSize_Normal, _("Normal"),_t("It's what I use (the programmer guy)."), + menuFontSizes.Append( MenuId_FontSize_Normal, _("Normal font"),_t("It's what I use (the programmer guy)."), wxITEM_RADIO )->Check( options.FontSize == 8 ); menuFontSizes.Append( MenuId_FontSize_Large, _("Large"), _t("Its nice and readable."), wxITEM_RADIO )->Check( options.FontSize == 10 ); @@ -746,10 +767,9 @@ // instead of closing just hide the window to be able to Show() it later Show( false ); - // Can't do this via a Connect() on the MainFrame because Close events are not commands, - // and thus do not propagate up/down the event chain. - if( wxWindow* main = GetParent() ) - wxStaticCast( main, MainEmuFrame )->OnLogBoxHidden(); + // In the nogui case there might not be a Main frame window. + if (MainEmuFrame* mainframe = GetMainFramePtr()) + mainframe->OnLogBoxHidden(); } else { @@ -931,7 +951,10 @@ } while( --m_WaitingThreadsForFlush > 0 ); int count = m_sem_QueueFlushed.Count(); - while( count < 0 ) m_sem_QueueFlushed.Post(); + while( count < 0 ) { + m_sem_QueueFlushed.Post(); + count = m_sem_QueueFlushed.Count(); + } } m_pendingFlushMsg = isPending; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/ConsoleLogger.h pcsx2-1.4.0/pcsx2/gui/ConsoleLogger.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/ConsoleLogger.h 2014-12-30 03:29:39.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/ConsoleLogger.h 2016-01-05 17:28:08.000000000 +0000 @@ -57,7 +57,11 @@ pxLogConsole() {} protected: +#if wxMAJOR_VERSION >= 3 + virtual void DoLogRecord(wxLogLevel level, const wxString &message, const wxLogRecordInfo &info); +#else virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); +#endif }; @@ -161,7 +165,7 @@ ConsoleColors color; int startpoint; - ColorSection() {} + ColorSection() : color(Color_Default), startpoint(0) {} ColorSection( ConsoleColors _color, int msgptr ) : color(_color), startpoint(msgptr) { } }; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlDisassemblyView.cpp pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlDisassemblyView.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlDisassemblyView.cpp 2014-08-23 08:45:53.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlDisassemblyView.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,6 +23,7 @@ #include "BreakpointWindow.h" #include "AppConfig.h" #include "System.h" +#include "DisassemblyDialog.h" #include #include @@ -126,7 +127,7 @@ textControl->SetFocus(); textControl->SetFocusFromKbd(); } - wxString getText() { return textControl->GetLabel(); } + wxString getText() { return textControl->GetValue(); } private: NonAutoSelectTextCtrl* textControl; @@ -147,8 +148,8 @@ { manager.setCpu(cpu); windowStart = 0x100000; - rowHeight = g_Conf->EmuOptions.Debugger.FontHeight+2; - charWidth = g_Conf->EmuOptions.Debugger.FontWidth; + rowHeight = getDebugFontHeight()+2; + charWidth = getDebugFontWidth(); displaySymbols = true; visibleRows = 1; @@ -827,6 +828,7 @@ return; gotoAddress(addr); } + break; default: evt.Skip(); break; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlMemView.cpp pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlMemView.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlMemView.cpp 2014-07-29 19:06:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlMemView.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,7 @@ #include "BreakpointWindow.h" #include "DebugEvents.h" +#include "DisassemblyDialog.h" #include #include @@ -55,8 +56,8 @@ CtrlMemView::CtrlMemView(wxWindow* parent, DebugInterface* _cpu) : wxWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxWANTS_CHARS|wxVSCROLL), cpu(_cpu) { - rowHeight = g_Conf->EmuOptions.Debugger.FontHeight; - charWidth = g_Conf->EmuOptions.Debugger.FontWidth; + rowHeight = getDebugFontHeight(); + charWidth = getDebugFontWidth(); windowStart = 0x480000; curAddress = windowStart; rowSize = 16; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlRegisterList.cpp pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlRegisterList.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlRegisterList.cpp 2014-07-29 19:06:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlRegisterList.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,9 +19,10 @@ #include "DebugEvents.h" #include "AppConfig.h" +#include "DisassemblyDialog.h" BEGIN_EVENT_TABLE(CtrlRegisterList, wxWindow) - EVT_PAINT(CtrlRegisterList::paintEvent) + EVT_SIZE(CtrlRegisterList::sizeEvent) EVT_LEFT_DOWN(CtrlRegisterList::mouseEvent) EVT_RIGHT_DOWN(CtrlRegisterList::mouseEvent) EVT_RIGHT_UP(CtrlRegisterList::mouseEvent) @@ -41,12 +42,13 @@ CtrlRegisterList::CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu) - : wxWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxWANTS_CHARS|wxBORDER_NONE), cpu(_cpu) + : wxScrolledWindow(parent,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxWANTS_CHARS|wxBORDER_NONE|wxVSCROLL), cpu(_cpu) { - rowHeight = g_Conf->EmuOptions.Debugger.FontHeight+2; - charWidth = g_Conf->EmuOptions.Debugger.FontWidth; - category = 0; - maxBits = 128; + rowHeight = getDebugFontHeight()+2; + charWidth = getDebugFontWidth(); + category = 0; + maxBits = 128; + lastPc = 0xFFFFFFFF; for (int i = 0; i < cpu->getRegisterCategoryCount(); i++) { @@ -62,13 +64,42 @@ maxLen = std::max(maxLen,strlen(cpu->getRegisterName(i,k))); } - int x = 17+(maxLen+3)*charWidth; + int x = 17+(maxLen+2)*charWidth; startPositions.push_back(x); currentRows.push_back(0); } SetDoubleBuffered(true); SetInitialSize(ClientToWindowSize(GetMinClientSize())); + + wxSize actualSize = getOptimalSize(); + SetVirtualSize(actualSize); + SetScrollbars(1, rowHeight, actualSize.x, actualSize.y / rowHeight, 0, 0); +} + +wxSize CtrlRegisterList::getOptimalSize() const +{ + int columnChars = 0; + int maxWidth = 0; + int maxRows = 0; + + for (int i = 0; i < cpu->getRegisterCategoryCount(); i++) + { + int bits = std::min(maxBits, cpu->getRegisterSize(i)); + int start = startPositions[i]; + + int w = start + (bits / 4) * charWidth; + if (bits > 32) + w += (bits / 32) * 2 - 2; + + maxWidth = std::max(maxWidth, w); + columnChars += strlen(cpu->getRegisterCategoryName(i)) + 1; + maxRows = std::max(maxRows, cpu->getRegisterCount(i)); + } + + maxWidth = std::max(columnChars*charWidth, maxWidth + 4); + + return wxSize(maxWidth, (maxRows + 1)*rowHeight); } void CtrlRegisterList::postEvent(wxEventType type, wxString text) @@ -134,16 +165,15 @@ lastPc = cpu->getPC(); } -void CtrlRegisterList::paintEvent(wxPaintEvent & evt) +void CtrlRegisterList::redraw() { - wxPaintDC dc(this); - render(dc); + Update(); } -void CtrlRegisterList::redraw() +void CtrlRegisterList::sizeEvent(wxSizeEvent& evt) { - wxClientDC dc(this); - render(dc); + Refresh(); + evt.Skip(); } void drawU32Text(wxDC& dc, u32 value, int x, int y) @@ -153,7 +183,7 @@ dc.DrawText(wxString(str,wxConvUTF8),x,y); } -void CtrlRegisterList::render(wxDC& dc) +void CtrlRegisterList::OnDraw(wxDC& dc) { #ifdef WIN32 wxFont font = wxFont(wxSize(charWidth,rowHeight-2),wxFONTFAMILY_DEFAULT,wxFONTSTYLE_NORMAL,wxFONTWEIGHT_NORMAL,false,L"Lucida Console"); @@ -163,48 +193,51 @@ #endif dc.SetFont(font); - // clear background - wxColor white = wxColor(0xFFFFFFFF); - - dc.SetBrush(wxBrush(white)); - dc.SetPen(wxPen(white)); - - wxSize size = GetSize(); - dc.DrawRectangle(0,0,size.x,size.y); - refreshChangedRegs(); wxColor colorChanged = wxColor(0xFF0000FF); wxColor colorUnchanged = wxColor(0xFF004000); wxColor colorNormal = wxColor(0xFF600000); + int startRow; + GetViewStart(nullptr,&startRow); + int endRow = startRow + ceil(float(GetClientSize().y) / rowHeight); + // draw categories - int piece = size.x/cpu->getRegisterCategoryCount(); - for (int i = 0; i < cpu->getRegisterCategoryCount(); i++) + int width = GetClientSize().x; + if (startRow == 0) { - const char* name = cpu->getRegisterCategoryName(i); + int piece = width /cpu->getRegisterCategoryCount(); + for (int i = 0; i < cpu->getRegisterCategoryCount(); i++) + { + const char* name = cpu->getRegisterCategoryName(i); - int x = i*piece; + int x = i*piece; - if (i == category) - { - dc.SetBrush(wxBrush(wxColor(0xFF70FF70))); - dc.SetPen(wxPen(wxColor(0xFF000000))); - } else { - dc.SetBrush(wxBrush(wxColor(0xFFFFEFE8))); - dc.SetPen(wxPen(wxColor(0xFF000000))); - } + if (i == category) + { + dc.SetBrush(wxBrush(wxColor(0xFF70FF70))); + dc.SetPen(wxPen(wxColor(0xFF000000))); + } else { + dc.SetBrush(wxBrush(wxColor(0xFFFFEFE8))); + dc.SetPen(wxPen(wxColor(0xFF000000))); + } - if (i == cpu->getRegisterCategoryCount()-1) - piece += size.x-piece*cpu->getRegisterCategoryCount()-1; + if (i == cpu->getRegisterCategoryCount()-1) + piece += width-piece*cpu->getRegisterCategoryCount()-1; - dc.DrawRectangle(x,0,piece+1,rowHeight); + dc.DrawRectangle(x,0,piece+1,rowHeight); - // center text - x += (piece-strlen(name)*charWidth)/2; - dc.DrawText(wxString(name,wxConvUTF8),x,2); + // center text + x += (piece-strlen(name)*charWidth)/2; + dc.DrawText(wxString(name,wxConvUTF8),x,2); + } } + // skip the tab row + startRow = std::max(0,startRow-1); + endRow = std::min(cpu->getRegisterCount(category)-1,endRow-1); + int nameStart = 17; int valueStart = startPositions[category]; @@ -212,17 +245,22 @@ int registerBits = cpu->getRegisterSize(category); DebugInterface::RegisterType type = cpu->getRegisterType(category); - for (int i = 0; i < cpu->getRegisterCount(category); i++) + for (int i = startRow; i <= endRow; i++) { int x = valueStart; int y = rowHeight*(i+1); + wxColor backgroundColor; if (currentRows[category] == i) - { - dc.SetBrush(wxBrush(wxColor(0xFFFFEFE8))); - dc.SetPen(wxPen(wxColor(0xFFFFEFE8))); - dc.DrawRectangle(0,y,size.x,rowHeight); - } + backgroundColor = wxColor(0xFFFFCFC8); + else if (i % 2) + backgroundColor = wxColor(237, 242, 255, 255); + else + backgroundColor = wxColor(0xFFFFFFFF); + + dc.SetBrush(backgroundColor); + dc.SetPen(backgroundColor); + dc.DrawRectangle(0, y, width, rowHeight); const char* name = cpu->getRegisterName(category,i); dc.SetTextForeground(colorNormal); @@ -239,7 +277,7 @@ case 128: { int startIndex = std::min(3,maxBits/32-1); - int actualX = size.x-4-(startIndex+1)*(8*charWidth+2); + int actualX = width-4-(startIndex+1)*(8*charWidth+2); x = std::max(actualX,x); if (startIndex != 3) @@ -341,10 +379,10 @@ oldValue._u64[0] = newValue; break; case UPPER64: - oldValue._u64[1] = newValue; + oldValue._u64[1] = newValue; break; case CHANGE32: - oldValue._u32[0] = newValue; + oldValue._u32[0] = newValue; break; } @@ -434,10 +472,16 @@ void CtrlRegisterList::mouseEvent(wxMouseEvent& evt) { + int xOffset, yOffset; + ((wxScrolledWindow*) this)->GetViewStart(&xOffset, &yOffset); + + wxClientDC dc(this); + wxPoint pos = evt.GetPosition(); + int x = dc.DeviceToLogicalX(pos.x) + xOffset; + int y = dc.DeviceToLogicalY(pos.y) + yOffset * rowHeight; + if (evt.GetEventType() == wxEVT_RIGHT_UP) { - int y = evt.GetPosition().y; - if (y >= rowHeight) { int row = (y-rowHeight)/rowHeight; @@ -481,9 +525,6 @@ if (evt.ButtonIsDown(wxMOUSE_BTN_LEFT) || evt.ButtonIsDown(wxMOUSE_BTN_RIGHT)) { - int x = evt.GetPosition().x; - int y = evt.GetPosition().y; - if (y < rowHeight) { int piece = GetSize().x/cpu->getRegisterCategoryCount(); @@ -513,7 +554,7 @@ setCurrentRow(std::max(currentRows[category]-1,0)); break; case WXK_DOWN: - setCurrentRow(std::min(currentRows[category]+1,cpu->getRegisterCount(category))); + setCurrentRow(std::min(currentRows[category]+1,cpu->getRegisterCount(category)-1)); break; case WXK_TAB: category = (category+1) % cpu->getRegisterCategoryCount(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlRegisterList.h pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlRegisterList.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/CtrlRegisterList.h 2014-04-06 13:11:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/CtrlRegisterList.h 2016-01-05 17:28:08.000000000 +0000 @@ -19,41 +19,25 @@ #include "DebugTools/DebugInterface.h" #include "DebugTools/DisassemblyManager.h" -class CtrlRegisterList: public wxWindow +class CtrlRegisterList: public wxScrolledWindow { public: CtrlRegisterList(wxWindow* parent, DebugInterface* _cpu); - void paintEvent(wxPaintEvent & evt); void mouseEvent(wxMouseEvent& evt); void keydownEvent(wxKeyEvent& evt); void onPopupClick(wxCommandEvent& evt); + void sizeEvent(wxSizeEvent& evt); void redraw(); DECLARE_EVENT_TABLE() - + virtual wxSize GetMinClientSize() const { - int columnChars = 0; - int maxWidth = 0; - int maxRows = 0; - - for (int i = 0; i < cpu->getRegisterCategoryCount(); i++) - { - int bits = std::min(maxBits,cpu->getRegisterSize(i)); - int start = startPositions[i]; - - int w = start+(bits/4) * charWidth; - if (bits > 32) - w += (bits/32)*2-2; - - maxWidth = std::max(maxWidth,w); - columnChars += strlen(cpu->getRegisterCategoryName(i))+1; - maxRows = std::max(maxRows,cpu->getRegisterCount(i)); - } - - maxWidth = std::max(columnChars*charWidth,maxWidth+4); + wxSize optimalSize = getOptimalSize(); + if (GetWindowStyle() & wxVSCROLL) + optimalSize.x += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); - return wxSize(maxWidth,(maxRows+1)*rowHeight); + return wxSize(optimalSize.x,0); } virtual wxSize DoGetBestClientSize() const @@ -63,10 +47,11 @@ private: enum RegisterChangeMode { LOWER64, UPPER64, CHANGE32 }; - void render(wxDC& dc); + void OnDraw(wxDC& dc); void refreshChangedRegs(); void setCurrentRow(int row); void changeValue(RegisterChangeMode mode); + wxSize getOptimalSize() const; void postEvent(wxEventType type, wxString text); void postEvent(wxEventType type, int value); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DebuggerLists.cpp pcsx2-1.4.0/pcsx2/gui/Debugger/DebuggerLists.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DebuggerLists.cpp 2014-10-28 03:44:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/DebuggerLists.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -73,6 +73,7 @@ void GenericListView::sizeEvent(wxSizeEvent& evt) { resizeColumns(GetClientSize().x); + evt.Skip(); } void GenericListView::keydownEvent(wxKeyEvent& evt) @@ -178,11 +179,6 @@ BreakpointList::BreakpointList(wxWindow* parent, DebugInterface* _cpu, CtrlDisassemblyView* _disassembly) : GenericListView(parent,breakpointColumns,BPL_COLUMNCOUNT), cpu(_cpu),disasm(_disassembly) { -#ifdef __linux__ - // On linux wx failed to resize properly the page. I don't know why so for the moment I just create a static size page - // Far from ideal but at least I can use the memory window! - this->SetSize(wxSize(1000, 200)); -#endif } int BreakpointList::getRowCount() @@ -513,11 +509,6 @@ ThreadList::ThreadList(wxWindow* parent, DebugInterface* _cpu) : GenericListView(parent,threadColumns,TL_COLUMNCOUNT), cpu(_cpu) { -#ifdef __linux__ - // On linux wx failed to resize properly the page. I don't know why so for the moment I just create a static size page - // Far from ideal but at least I can use the memory window! - this->SetSize(wxSize(1000, 200)); -#endif } void ThreadList::reloadThreads() @@ -658,11 +649,6 @@ StackFramesList::StackFramesList(wxWindow* parent, DebugInterface* _cpu, CtrlDisassemblyView* _disassembly) : GenericListView(parent,stackFrameolumns,SF_COLUMNCOUNT), cpu(_cpu), disassembly(_disassembly) { -#ifdef __linux__ - // On linux wx failed to resize properly the page. I don't know why so for the moment I just create a static size page - // Far from ideal but at least I can use the memory window! - this->SetSize(wxSize(1000, 200)); -#endif } void StackFramesList::loadStackFrames(EEThread& currentThread) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DisassemblyDialog.cpp pcsx2-1.4.0/pcsx2/gui/Debugger/DisassemblyDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DisassemblyDialog.cpp 2014-08-23 08:45:53.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/DisassemblyDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -39,6 +39,7 @@ EVT_COMMAND( wxID_ANY, debEVT_UPDATE, DisassemblyDialog::onDebuggerEvent ) EVT_COMMAND( wxID_ANY, debEVT_BREAKPOINTWINDOW, DisassemblyDialog::onDebuggerEvent ) EVT_COMMAND( wxID_ANY, debEVT_MAPLOADED, DisassemblyDialog::onDebuggerEvent ) + EVT_SIZE(DisassemblyDialog::onSizeEvent) EVT_CLOSE( DisassemblyDialog::onClose ) END_EVENT_TABLE() @@ -176,7 +177,7 @@ { breakpointList->reloadBreakpoints(); - if (threadList != NULL) + if (threadList != NULL && cpu->isAlive()) { threadList->reloadThreads(); @@ -217,6 +218,8 @@ wxFrame( parent, wxID_ANY, L"Debugger", wxDefaultPosition,wxDefaultSize,wxRESIZE_BORDER|wxCLOSE_BOX|wxCAPTION|wxSYSTEM_MENU ), currentCpu(NULL) { + int width = g_Conf->EmuOptions.Debugger.WindowWidth; + int height = g_Conf->EmuOptions.Debugger.WindowHeight; topSizer = new wxBoxSizer( wxVERTICAL ); wxPanel *panel = new wxPanel(this, wxID_ANY, @@ -252,7 +255,7 @@ topSizer->Add(topRowSizer,0,wxLEFT|wxRIGHT|wxTOP,3); // create middle part of the window - wxNotebook* middleBook = new wxNotebook(panel,wxID_ANY); + middleBook = new wxNotebook(panel,wxID_ANY); middleBook->SetBackgroundColour(wxColour(0xFFF0F0F0)); eeTab = new CpuTabPage(middleBook,&r5900Debug); iopTab = new CpuTabPage(middleBook,&r3000Debug); @@ -267,9 +270,23 @@ SetMinSize(wxSize(1000,600)); panel->GetSizer()->Fit(this); + if (width != 0 && height != 0) + SetSize(width,height); + setDebugMode(true,true); } +void DisassemblyDialog::onSizeEvent(wxSizeEvent& event) +{ + if (event.GetEventType() == wxEVT_SIZE) + { + g_Conf->EmuOptions.Debugger.WindowWidth = event.GetSize().x; + g_Conf->EmuOptions.Debugger.WindowHeight = event.GetSize().y; + } + + event.Skip(); +} + #ifdef WIN32 WXLRESULT DisassemblyDialog::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { @@ -469,7 +486,7 @@ if (type == debEVT_SETSTATUSBARTEXT) { DebugInterface* cpu = reinterpret_cast(evt.GetClientData()); - if (cpu != NULL && cpu == currentCpu->getCpu()) + if (cpu != NULL && currentCpu != NULL && cpu == currentCpu->getCpu()) GetStatusBar()->SetLabel(evt.GetString()); } else if (type == debEVT_UPDATELAYOUT) { @@ -568,6 +585,19 @@ if (running) { + if (currentCpu == NULL) + { + wxWindow* currentPage = middleBook->GetCurrentPage(); + + if (currentPage == eeTab) + currentCpu = eeTab; + else if (currentPage == iopTab) + currentCpu = iopTab; + + if (currentCpu != NULL) + currentCpu->update(); + } + if (debugMode) { CBreakPoints::ClearTemporaryBreakPoints(); @@ -596,6 +626,12 @@ stepOverButton->Enable(false); stepOutButton->Enable(false); } + } else { + breakRunButton->SetLabel(L"Run"); + stepIntoButton->Enable(false); + stepOverButton->Enable(false); + stepOutButton->Enable(false); + currentCpu = NULL; } update(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DisassemblyDialog.h pcsx2-1.4.0/pcsx2/gui/Debugger/DisassemblyDialog.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Debugger/DisassemblyDialog.h 2014-08-23 08:45:53.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Debugger/DisassemblyDialog.h 2016-01-05 17:28:08.000000000 +0000 @@ -23,6 +23,7 @@ #include "CtrlMemView.h" #include "DebugEvents.h" #include "DebuggerLists.h" +#include "../MSWstuff.h" class DebuggerHelpDialog: public wxDialog { @@ -30,6 +31,16 @@ DebuggerHelpDialog(wxWindow* parent); }; +inline int getDebugFontWidth() +{ + return (int) ceil(g_Conf->EmuOptions.Debugger.FontWidth*MSW_GetDPIScale()); +} + +inline int getDebugFontHeight() +{ + return (int)ceil(g_Conf->EmuOptions.Debugger.FontHeight*MSW_GetDPIScale()); +} + class CpuTabPage: public wxPanel { public: @@ -91,6 +102,7 @@ void onDebuggerEvent(wxCommandEvent& evt); void onPageChanging(wxCommandEvent& evt); void onBreakpointClick(wxCommandEvent& evt); + void onSizeEvent(wxSizeEvent& event); void onClose(wxCloseEvent& evt); void stepOver(); void stepInto(); @@ -100,12 +112,12 @@ CpuTabPage* eeTab; CpuTabPage* iopTab; CpuTabPage* currentCpu; + wxNotebook* middleBook; wxBoxSizer* topSizer; - wxStatusBar* statusBar; wxButton* breakRunButton; wxButton* stepIntoButton; wxButton* stepOverButton; wxButton* stepOutButton; wxButton* breakpointButton; -}; \ No newline at end of file +}; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/AboutBoxDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/AboutBoxDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/AboutBoxDialog.cpp 2014-04-05 16:38:41.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/AboutBoxDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,7 +20,7 @@ #include "Dialogs/ModalPopups.h" #include "Resources/EmbeddedImage.h" -#include "Resources/Dualshock.h" +#include "Resources/Logo.h" #include #include @@ -31,85 +31,73 @@ // AboutBoxDialog Implementation // -------------------------------------------------------------------------------------- -Dialogs::AboutBoxDialog::AboutBoxDialog( wxWindow* parent ) - : wxDialogWithHelpers( parent, AddAppName(_("About %s")), pxDialogFlags().Resize().MinWidth( 460 ) ) - , m_bitmap_dualshock( this, wxID_ANY, wxBitmap( EmbeddedImage().Get() ), - wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN - ) +Dialogs::AboutBoxDialog::AboutBoxDialog(wxWindow* parent) + : wxDialogWithHelpers(parent, AddAppName(_("About %s")), pxDialogFlags()) + , m_bitmap_logo(this, wxID_ANY, wxBitmap(EmbeddedImage().Get()), + wxDefaultPosition, wxDefaultSize + ) { // [TODO] : About box should be upgraded to use scrollable read-only text boxes. - - wxString LabelAuthors = wxsFormat( - L"Arcum42, avih, Refraction, drk||raziel, cottonvibes, gigaherz, " - L"rama, Jake.Stine, saqib, pseudonym, gregory.hainaut" + + wxString developsString = wxsFormat( + L"avih, Refraction, rama, pseudonym, gregory.hainaut" L"\n\n" - L"%s: Alexey silinov, Aumatt, " + L"%s: \n" + L"Arcum42, Aumatt, drk||raziel, " + L"cottonvibes, gigaherz, saqib, " + L"Alexey silinov, Aumatt, " L"Florin, goldfinger, Linuzappz, loser, " - L"Nachbrenner, shadow, Zerofrog, tmkk" - L"\n\n" - L"%s: Bositman, ChaosCode, " - L"CKemu, crushtest, GeneralPlot, " - L"Krakatos, Parotaku, prafull, Rudy_X" - L"\n\n" - L"%s: CKemu, Falcon4ever", - _("Previous versions"), _("Betatesting"), _("Webmasters")); - - - wxString LabelGreets = wxsFormat( - L"Hiryu and Sjeep (libcdvd / iso filesystem), nneeve (fpu and vu), n1ckname (compilation guides), Shadow Lady" + L"Nachbrenner, shadow, Zerofrog, tmkk, Jake.Stine" L"\n\n" - L"%s: ChickenLiver (Lilypad), Efp (efp), " - L"Gabest (Gsdx, Cdvdolio, Xpad), Zeydlitz (ZZogl)" + L"%s:\n" + L"Falcon4ever, Bositman", + _("Previous versions"), _("Webmasters")); + + wxString contribsString = wxsFormat( + L"%s: \n" + L"ChickenLiver(Lilypad), Gabest (Gsdx, Cdvdolio, Xpad)" L"\n\n" - L"%s: black_wd, Belmont, BGome, _Demo_, Dreamtime, " - L"F|RES, Jake.Stine, MrBrown, razorblade, Seta-san, Skarmeth, feal87, Athos", - _("Plugin Specialists"), _("Special thanks to")); - - // This sizer holds text of the authors and a logo! - wxFlexGridSizer& AuthLogoSizer = *new wxFlexGridSizer( 2, 0, StdPadding ); - AuthLogoSizer.AddGrowableCol(0, 4); - AuthLogoSizer.AddGrowableCol(1, 3); + L"%s: \n" + L"Ckemu, Prafull, General Plot, KrossX, Devina, ssakash, turtleli, Blyss Sarania, micove, black_wd, Belmont, BGome," + L" _Demo_, Dreamtime, Hiryu and Sjeep, nneeve, Shadow Lady, F|RES, Jake.Stine, MrBrown, razorblade, Seta-san, Skarmeth, feal87, Athos", + _("Plugin Specialists"), _("Special thanks to")); - // this sizer holds text of the contributors/testers, and a ps2 image! - wxBoxSizer& ContribSizer = *new wxBoxSizer( wxHORIZONTAL ); + wxFlexGridSizer& boxesContainer = *new wxFlexGridSizer(2, 0, StdPadding); + boxesContainer.AddGrowableCol(0, 1); + boxesContainer.AddGrowableCol(1, 1); - wxStaticBoxSizer& aboutUs = *new wxStaticBoxSizer( wxVERTICAL, this ); - wxStaticBoxSizer& contribs = *new wxStaticBoxSizer( wxVERTICAL, this ); + wxStaticBoxSizer& developsBox = *new wxStaticBoxSizer(wxVERTICAL, this); + wxStaticBoxSizer& contribsBox = *new wxStaticBoxSizer(wxVERTICAL, this); - pxStaticText& label_auth = Text( LabelAuthors ).SetMinWidth(240); - pxStaticText& label_greets = Text( LabelGreets ).SetMinWidth(200); + pxStaticText& developsText = Text(developsString).SetMinWidth(240); + pxStaticText& contribsText = Text(contribsString).SetMinWidth(240); - aboutUs += Heading(_("Developers")).Bold() | StdExpand(); - aboutUs += label_auth | StdExpand(); - contribs += Heading(_("Contributors")).Bold() | StdExpand(); - contribs += label_greets | StdExpand(); + developsBox += Heading(_("Developers")).Bold() | StdExpand(); + developsBox += developsText | StdExpand(); + contribsBox += Heading(_("Contributors")).Bold() | StdExpand(); + contribsBox += contribsText | StdExpand(); - AuthLogoSizer += aboutUs | StdExpand(); - AuthLogoSizer += contribs | StdExpand(); + boxesContainer += developsBox | StdExpand(); + boxesContainer += contribsBox | StdExpand(); - ContribSizer += pxStretchSpacer( 1 ); - ContribSizer += m_bitmap_dualshock | StdSpace(); - ContribSizer += pxStretchSpacer( 1 ); + // Main layout + *this += m_bitmap_logo | StdCenter(); - // Main (top-level) layout + *this += Text(_("PlayStation 2 Emulator")); - *this += StdPadding; - *this += Text(wxGetApp().GetAppName()).Bold(); - *this += Text(_("A Playstation 2 Emulator")); - *this += AuthLogoSizer | StdExpand(); - - *this += new wxHyperlinkCtrl( this, wxID_ANY, + *this += new wxHyperlinkCtrl(this, wxID_ANY, _("PCSX2 Official Website and Forums"), L"http://www.pcsx2.net" - ) | pxProportion(1).Center().Border( wxALL, 3 ); + ) | pxProportion(1).Center().Border(wxALL, 3); - *this += new wxHyperlinkCtrl( this, wxID_ANY, + *this += new wxHyperlinkCtrl(this, wxID_ANY, _("PCSX2 Official Git Repository at GitHub"), L"https://github.com/PCSX2/pcsx2" - ) | pxProportion(1).Center().Border( wxALL, 3 ); + ) | pxProportion(1).Center().Border(wxALL, 3); + + *this += boxesContainer | StdCenter(); - *this += ContribSizer | StdExpand(); - *this += new wxButton( this, wxID_OK, _("I've seen enough")) | StdCenter(); + wxButton& closeButton = *new wxButton(this, wxID_OK, _("I've seen enough")); + closeButton.SetFocus(); + *this += closeButton | StdCenter(); - int bestHeight = GetBestSize().GetHeight(); - if( bestHeight < 400 ) bestHeight = 400; - SetMinHeight( bestHeight ); + SetSizerAndFit(GetSizer()); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp 2014-06-29 07:09:07.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/BaseConfigurationDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,9 +22,6 @@ #include "ModalPopups.h" #include "Panels/ConfigurationPanels.h" -#include "Resources/EmbeddedImage.h" -#include "Resources/ButtonIcon_Camera.h" - #include #include #include @@ -37,12 +34,9 @@ using namespace Panels; // configure the orientation of the listbox based on the platform +// For now, they're all on the left. +static const int s_orient = wxLB_LEFT; -#if defined(__WXMAC__) || defined(__WXMSW__) - static const int s_orient = wxBK_TOP; -#else - static const int s_orient = wxBK_LEFT; -#endif class ScopedOkButtonDisabler { @@ -135,7 +129,9 @@ Dialogs::BaseConfigurationDialog::BaseConfigurationDialog( wxWindow* parent, const wxString& title, int idealWidth ) : _parent( parent, title ) { - SetMinWidth( idealWidth ); + float scale = MSW_GetDPIScale(); + + SetMinWidth( scale * idealWidth ); m_listbook = NULL; m_allowApplyActivation = true; @@ -144,8 +140,6 @@ Connect( wxID_APPLY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnApply_Click ) ); Connect( wxID_SAVE, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BaseConfigurationDialog::OnScreenshot_Click ) ); - Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler(BaseConfigurationDialog::OnCloseWindow) ); - Connect( pxEvt_SetSettingsPage, wxCommandEventHandler( BaseConfigurationDialog::OnSetSettingsPage ) ); // ---------------------------------------------------------------------------- @@ -190,7 +184,7 @@ if( wxWindow* apply = FindWindow( wxID_APPLY ) ) apply->Disable(); SomethingChanged_StateModified_IsChanged(); - wxBitmapButton& screenshotButton( *new wxBitmapButton( this, wxID_SAVE, EmbeddedImage().Get() ) ); + wxBitmapButton& screenshotButton(*new wxBitmapButton(this, wxID_SAVE, wxGetApp().GetScreenshotBitmap())); screenshotButton.SetToolTip( _("Saves a snapshot of this settings panel to a PNG file.") ); *m_extraButtonSizer += screenshotButton|pxMiddle; @@ -230,14 +224,6 @@ SomethingChanged(); } - -void Dialogs::BaseConfigurationDialog::OnCloseWindow( wxCloseEvent& evt ) -{ - if( !IsModal() ) Destroy(); - evt.Skip(); -} - - void Dialogs::BaseConfigurationDialog::AllowApplyActivation( bool allow ) { m_allowApplyActivation = allow; @@ -280,7 +266,6 @@ SomethingChanged_StateModified_IsChanged(); } -//avih: FIXME: ? for some reason, this OnCancel_Click is called twice when clicking cancel or closing the dialog (Jake's code?). void Dialogs::BaseConfigurationDialog::OnCancel_Click( wxCommandEvent& evt ) { //same as for Ok/Apply: let SysConfigDialog clean-up the presets and derivatives (menu system) if needed. @@ -312,12 +297,15 @@ if( !filename.IsEmpty() ) { ScopedBusyCursor busy( Cursor_ReallyBusy ); +#ifdef __WXMSW__ + // HACK: This works around an actual wx3.0 bug at the cost of icon + // quality. See http://trac.wxwidgets.org/ticket/14403 . + wxImage image = memBmp.ConvertToImage(); + if (image.HasAlpha()) + image.ClearAlpha(); + image.SaveFile( filename, wxBITMAP_TYPE_PNG ); +#else memBmp.SaveFile( filename, wxBITMAP_TYPE_PNG ); +#endif } } - -void Dialogs::BaseConfigurationDialog::OnSettingsApplied( wxCommandEvent& evt ) -{ - evt.Skip(); - MSW_ListView_SetIconSpacing( m_listbook, GetClientSize().GetWidth() ); -} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/BiosSelectorDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/BiosSelectorDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/BiosSelectorDialog.cpp 2010-09-28 20:00:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/BiosSelectorDialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "System.h" -#include "App.h" - -#include "ConfigurationDialog.h" -#include "ModalPopups.h" -#include "Panels/ConfigurationPanels.h" - -#include - -using namespace Panels; -using namespace pxSizerFlags; - -// ---------------------------------------------------------------------------- -Dialogs::BiosSelectorDialog::BiosSelectorDialog( wxWindow* parent ) - : BaseApplicableDialog( parent, _("BIOS Selector") ) -{ - m_selpan = new Panels::BiosSelectorPanel( this ); - - *this += m_selpan | StdExpand(); - AddOkCancel(); - - Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BiosSelectorDialog::OnOk_Click) ); - Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler(BiosSelectorDialog::OnDoubleClicked) ); -} - -bool Dialogs::BiosSelectorDialog::Show( bool show ) -{ - if( show && m_selpan ) - m_selpan->OnShown(); - - return _parent::Show( show ); -} - -int Dialogs::BiosSelectorDialog::ShowModal() -{ - if( m_selpan ) - m_selpan->OnShown(); - - return _parent::ShowModal(); -} - -void Dialogs::BiosSelectorDialog::OnOk_Click( wxCommandEvent& evt ) -{ - wxWindowDisabler disableOk( FindWindow( wxID_OK ) ); - if( m_ApplyState.ApplyAll() ) - { - Close(); - evt.Skip(); - } -} - -void Dialogs::BiosSelectorDialog::OnDoubleClicked( wxCommandEvent& evt ) -{ - wxWindow* forwardButton = FindWindow( wxID_OK ); - if( forwardButton == NULL ) return; - - wxCommandEvent nextpg( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ); - nextpg.SetEventObject( forwardButton ); - forwardButton->GetEventHandler()->ProcessEvent( nextpg ); -} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConfigurationDialog.h pcsx2-1.4.0/pcsx2/gui/Dialogs/ConfigurationDialog.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConfigurationDialog.h 2014-12-30 17:31:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/ConfigurationDialog.h 2016-01-05 17:28:08.000000000 +0000 @@ -30,7 +30,6 @@ } BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE( pxEvt_SetSettingsPage, -1 ) DECLARE_EVENT_TYPE( pxEvt_SomethingChanged, -1 ); END_DECLARE_EVENT_TYPES() @@ -70,13 +69,10 @@ } protected: - void OnSettingsApplied( wxCommandEvent& evt ); - void OnOk_Click( wxCommandEvent& evt ); void OnCancel_Click( wxCommandEvent& evt ); void OnApply_Click( wxCommandEvent& evt ); void OnScreenshot_Click( wxCommandEvent& evt ); - void OnCloseWindow( wxCloseEvent& evt ); void OnSetSettingsPage( wxCommandEvent& evt ); void OnSomethingChanged( wxCommandEvent& evt ); @@ -159,7 +155,6 @@ protected: Panels::BaseMcdListPanel* m_panel_mcdlist; - bool m_needs_suspending; public: virtual ~McdConfigDialog() throw() {} @@ -167,9 +162,6 @@ static wxString GetNameStatic() { return L"McdConfig"; } wxString GetDialogName() const { return GetNameStatic(); } - virtual bool Show( bool show=true ); - virtual int ShowModal(); - protected: virtual wxString& GetConfSettingsTabName() const { return g_Conf->McdSettingsTabName; } //void OnMultitapClicked( wxCommandEvent& evt ); @@ -208,31 +200,6 @@ }; // -------------------------------------------------------------------------------------- - // BiosSelectorDialog - // -------------------------------------------------------------------------------------- - class BiosSelectorDialog : public BaseApplicableDialog - { - typedef BaseApplicableDialog _parent; - - protected: - Panels::BaseSelectorPanel* m_selpan; - - public: - virtual ~BiosSelectorDialog() throw() {} - BiosSelectorDialog( wxWindow* parent=NULL ); - - static wxString GetNameStatic() { return L"BiosSelector"; } - wxString GetDialogName() const { return GetNameStatic(); } - - virtual bool Show( bool show=true ); - virtual int ShowModal(); - - protected: - void OnOk_Click( wxCommandEvent& evt ); - void OnDoubleClicked( wxCommandEvent& evt ); - }; - - // -------------------------------------------------------------------------------------- // CreateMemoryCardDialog // -------------------------------------------------------------------------------------- class CreateMemoryCardDialog : public wxDialogWithHelpers @@ -263,4 +230,26 @@ void CreateControls(); void OnOk_Click( wxCommandEvent& evt ); }; + + // -------------------------------------------------------------------------------------- + // ConvertMemoryCardDialog + // -------------------------------------------------------------------------------------- + class ConvertMemoryCardDialog : public wxDialogWithHelpers + { + protected: + wxDirName m_mcdPath; + wxString m_mcdSourceFilename; + wxTextCtrl* m_text_filenameInput; + pxRadioPanel* m_radio_CardType; + + public: + virtual ~ConvertMemoryCardDialog() throw() {} + ConvertMemoryCardDialog( wxWindow* parent, const wxDirName& mcdPath, const AppConfig::McdOptions& mcdSourceConfig ); + + protected: + void CreateControls( const MemoryCardType sourceType ); + void OnOk_Click( wxCommandEvent& evt ); + bool ConvertToFile( const wxFileName& sourcePath, const wxFileName& targetPath, const u32 sizeInMB ); + bool ConvertToFolder( const wxFileName& sourcePath, const wxFileName& targetPath ); + }; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConfirmationDialogs.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/ConfirmationDialogs.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConfirmationDialogs.cpp 2013-06-28 17:32:37.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/ConfirmationDialogs.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,6 +16,7 @@ #include "PrecompiledHeader.h" #include "System.h" #include "App.h" +#include "MSWstuff.h" #include "ModalPopups.h" #include "Utilities/StringHelpers.h" @@ -143,10 +144,11 @@ wxWindowID pxIssueConfirmation( wxDialogWithHelpers& confirmDlg, const MsgButtons& buttons ) { - if( confirmDlg.GetMinWidth() <= 0 ) confirmDlg.SetMinWidth( 400 ); + if( confirmDlg.GetMinWidth() <= 0 ) confirmDlg.SetMinWidth( 400 * MSW_GetDPIScale()); confirmDlg += new ModalButtonPanel( &confirmDlg, buttons ) | pxCenter.Border( wxTOP, 8 ); buttons.SetBestFocus( confirmDlg ); + confirmDlg.SetSizerAndFit(confirmDlg.GetSizer()); return confirmDlg.ShowModal(); } @@ -204,7 +206,7 @@ int modalResult = pxIssueConfirmation( confirmDlg, buttons ); - if( cfg != NULL ) + if( modalResult != wxID_CANCEL && cfg != NULL ) { wxString cfgResult = ResultToString( modalResult, buttons ); if( DisablerCtrl->IsChecked() && !cfgResult.IsEmpty() ) @@ -262,16 +264,16 @@ #ifdef __WXGTK__ if( buttons.HasRetry() ) - AddActionButton( wxID_RETRY ); + AddCustomButton( wxID_RETRY, _("Retry") ); if( buttons.HasAbort() ) - AddActionButton( wxID_ABORT ); + AddCustomButton( wxID_ABORT, _("Abort") ); #else if( buttons.HasAbort() ) - AddActionButton( wxID_ABORT ); + AddCustomButton( wxID_ABORT, _("Abort") ); if( buttons.HasRetry() ) - AddActionButton( wxID_RETRY ); + AddCustomButton( wxID_RETRY, _("Retry") ); #endif if( buttons.HasReset() ) @@ -298,10 +300,11 @@ void ModalButtonPanel::OnActionButtonClicked( wxCommandEvent& evt ) { - evt.Skip(); wxWindow* toplevel = wxGetTopLevelParent( this ); if( wxDialog* dialog = wxDynamicCast( toplevel, wxDialog ) ) dialog->EndModal( evt.GetId() ); + // If the dialog doesn't close, and you're using it for a modeless dialog - hint: + // read the name of the class. ;) } void ModalButtonPanel::AddCustomButton( wxWindowID id, const wxString& label ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/ConvertMemoryCardDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,239 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2015 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "ConfigurationDialog.h" +#include "System.h" + +#include "MSWstuff.h" + +#include "MemoryCardFile.h" +#include "MemoryCardFolder.h" +#include + +enum MemoryCardConversionType { + MemoryCardConversion_File_8MB, + MemoryCardConversion_File_16MB, + MemoryCardConversion_File_32MB, + MemoryCardConversion_File_64MB, + MemoryCardConversion_Folder, + MemoryCardConversion_MaxCount +}; + +Dialogs::ConvertMemoryCardDialog::ConvertMemoryCardDialog( wxWindow* parent, const wxDirName& mcdPath, const AppConfig::McdOptions& mcdSourceConfig ) + : wxDialogWithHelpers( parent, _( "Convert a memory card to a different format" ) ) + , m_mcdPath( mcdPath ) + , m_mcdSourceFilename( mcdSourceConfig.Filename.GetFullName() ) +{ + SetMinWidth( 472 * MSW_GetDPIScale()); + + CreateControls( mcdSourceConfig.Type ); + + if ( m_radio_CardType ) m_radio_CardType->Realize(); + + wxBoxSizer& s_buttons( *new wxBoxSizer( wxHORIZONTAL ) ); + s_buttons += new wxButton( this, wxID_OK, _( "Convert" ) ) | pxProportion( 2 ); + s_buttons += pxStretchSpacer( 3 ); + s_buttons += new wxButton( this, wxID_CANCEL ) | pxProportion( 2 ); + + wxBoxSizer& s_padding( *new wxBoxSizer( wxVERTICAL ) ); + + s_padding += Heading( wxString( _( "Convert: " ) ) + ( mcdPath + m_mcdSourceFilename ).GetFullPath() ).Unwrapped() | pxSizerFlags::StdExpand(); + + wxBoxSizer& s_filename( *new wxBoxSizer( wxHORIZONTAL ) ); + s_filename += Heading( _( "To: " ) ).Unwrapped().Align(wxALIGN_RIGHT) | pxProportion(1); + m_text_filenameInput->SetValue( wxFileName( m_mcdSourceFilename ).GetName() + L"_converted" ); + s_filename += m_text_filenameInput | pxProportion(2); + s_filename += Heading( L".ps2" ).Align(wxALIGN_LEFT) | pxProportion(1); + + s_padding += s_filename | pxSizerFlags::StdExpand(); + + s_padding += m_radio_CardType | pxSizerFlags::StdExpand(); + + if ( mcdSourceConfig.Type != MemoryCardType::MemoryCard_File ) { + s_padding += Heading( pxE( L"Please note that the resulting file may not actually contain all saves, depending on how many are in the source memory card." ) ); + } + s_padding += Heading( pxE( L"WARNING: Converting a memory card may take a while! Please do not close the emulator during the conversion process, even if the emulator is no longer responding to input." ) ); + + s_padding += 12; + s_padding += s_buttons | pxSizerFlags::StdCenter(); + + *this += s_padding | pxSizerFlags::StdExpand(); + + Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( ConvertMemoryCardDialog::OnOk_Click ) ); + Connect( m_text_filenameInput->GetId(), wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( ConvertMemoryCardDialog::OnOk_Click ) ); + + SetSizerAndFit(GetSizer()); + + m_text_filenameInput->SetFocus(); + m_text_filenameInput->SelectAll(); +} + +void Dialogs::ConvertMemoryCardDialog::CreateControls( const MemoryCardType sourceType ) { + m_text_filenameInput = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); + + RadioPanelItem toFile8MB = RadioPanelItem( _( "8MB File" ), pxE( L"Convert this memory card to a standard 8 MB Memory Card .ps2 file." ) ) + .SetInt( MemoryCardConversionType::MemoryCardConversion_File_8MB ); + RadioPanelItem toFile16MB = RadioPanelItem( _( "16MB File" ), pxE( L"Convert this memory card to a 16 MB Memory Card .ps2 file." ) ) + .SetInt( MemoryCardConversionType::MemoryCardConversion_File_16MB ); + RadioPanelItem toFile32MB = RadioPanelItem( _( "32MB File" ), pxE( L"Convert this memory card to a 32 MB Memory Card .ps2 file." ) ) + .SetInt( MemoryCardConversionType::MemoryCardConversion_File_32MB ); + RadioPanelItem toFile64MB = RadioPanelItem( _( "64MB File" ), pxE( L"Convert this memory card to a 64 MB Memory Card .ps2 file." ) ) + .SetInt( MemoryCardConversionType::MemoryCardConversion_File_64MB ); + RadioPanelItem toFolder = RadioPanelItem( _( "Folder" ), _( "Convert this memory card to a folder of individual saves." ) ) + .SetInt( MemoryCardConversionType::MemoryCardConversion_Folder ); + + const RadioPanelItem tblForFile[] = { toFolder }; + const RadioPanelItem tblForFolder[] = { toFile8MB, toFile16MB, toFile32MB, toFile64MB }; + + switch ( sourceType ) { + case MemoryCardType::MemoryCard_File: + m_radio_CardType = new pxRadioPanel( this, tblForFile ); + break; + case MemoryCardType::MemoryCard_Folder: + m_radio_CardType = new pxRadioPanel( this, tblForFolder ); + break; + default: + Console.Error( L"Memory Card Conversion: Invalid source type!" ); + return; + } + + m_radio_CardType->SetDefaultItem( 0 ); +} + +void Dialogs::ConvertMemoryCardDialog::OnOk_Click( wxCommandEvent& evt ) { + wxString composedName = m_text_filenameInput->GetValue().Trim() + L".ps2"; + + wxString errMsg; + if ( !isValidNewFilename( composedName, m_mcdPath, errMsg, 5 ) ) { + wxString message; + message.Printf( _( "Error (%s)" ), errMsg.c_str() ); + Msgbox::Alert( message, _( "Convert memory card" ) ); + m_text_filenameInput->SetFocus(); + m_text_filenameInput->SelectAll(); + return; + } + + bool success = false; + + wxFileName sourcePath = ( m_mcdPath + m_mcdSourceFilename ); + wxFileName targetPath = ( m_mcdPath + composedName ); + if ( m_radio_CardType ) { + MemoryCardConversionType targetType = (MemoryCardConversionType)m_radio_CardType->SelectedItem().SomeInt; + + switch ( targetType ) { + case MemoryCardConversionType::MemoryCardConversion_File_8MB: + success = ConvertToFile( sourcePath, targetPath, 8 ); + break; + case MemoryCardConversionType::MemoryCardConversion_File_16MB: + success = ConvertToFile( sourcePath, targetPath, 16 ); + break; + case MemoryCardConversionType::MemoryCardConversion_File_32MB: + success = ConvertToFile( sourcePath, targetPath, 32 ); + break; + case MemoryCardConversionType::MemoryCardConversion_File_64MB: + success = ConvertToFile( sourcePath, targetPath, 64 ); + break; + case MemoryCardConversionType::MemoryCardConversion_Folder: + success = ConvertToFolder( sourcePath, targetPath ); + break; + default: + Msgbox::Alert( _( "This target type is not supported!" ), _( "Convert memory card" ) ); + return; + } + } + + if ( !success ) { + Msgbox::Alert( _( "Memory Card conversion failed for unknown reasons." ), _( "Convert memory card" ) ); + return; + } + + EndModal( wxID_OK ); +} + +bool Dialogs::ConvertMemoryCardDialog::ConvertToFile( const wxFileName& sourcePath, const wxFileName& targetPath, const u32 sizeInMB ) { + // Conversion method: Open FolderMcd as usual, then read the raw data from it and write it to a file stream + + wxFFile targetFile( targetPath.GetFullPath(), L"wb" ); + if ( !targetFile.IsOpened() ) { + return false; + } + + FolderMemoryCard sourceFolderMemoryCard; + AppConfig::McdOptions config; + config.Enabled = true; + config.Type = MemoryCardType::MemoryCard_Folder; + sourceFolderMemoryCard.Open( sourcePath.GetFullPath(), config, ( sizeInMB * 1024 * 1024 ) / FolderMemoryCard::ClusterSize, false, L"" ); + + u8 buffer[FolderMemoryCard::PageSizeRaw]; + u32 adr = 0; + while ( adr < sourceFolderMemoryCard.GetSizeInClusters() * FolderMemoryCard::ClusterSizeRaw ) { + sourceFolderMemoryCard.Read( buffer, adr, FolderMemoryCard::PageSizeRaw ); + targetFile.Write( buffer, FolderMemoryCard::PageSizeRaw ); + adr += FolderMemoryCard::PageSizeRaw; + } + + targetFile.Close(); + sourceFolderMemoryCard.Close( false ); + + return true; +} + +bool Dialogs::ConvertMemoryCardDialog::ConvertToFolder( const wxFileName& sourcePath, const wxFileName& targetPath ) { + // Conversion method: Read all pages of the FileMcd into a FolderMcd, then just write that out with the regular methods + + wxFFile sourceFile( sourcePath.GetFullPath(), L"rb" ); + if ( !sourceFile.IsOpened() ) { + return false; + } + + u8 buffer[FolderMemoryCard::PageSizeRaw]; + FolderMemoryCard targetFolderMemoryCard; + AppConfig::McdOptions config; + config.Enabled = true; + config.Type = MemoryCardType::MemoryCard_Folder; + u32 adr = 0; + + for ( int i = 0; i < 2; ++i ) { + // Before writing the data, we first simulate the entire process without actual writes to the file system. + // This ensures that if we crash/fail due to a corrupted memory card file system or similar, we do so during + // the simulation run, and don't actually write out any partial data to the host file system. + bool simulateWrites = i == 0; + targetFolderMemoryCard.Open( targetPath.GetFullPath(), config, 0, false, L"", simulateWrites ); + + adr = 0; + sourceFile.Seek( 0 ); + while ( !sourceFile.Eof() ) { + int size = sourceFile.Read( buffer, FolderMemoryCard::PageSizeRaw ); + if ( size > 0 ) { + targetFolderMemoryCard.Save( buffer, adr, size ); + adr += size; + } + } + + targetFolderMemoryCard.Close(); + } + + sourceFile.Close(); + + if ( adr != FolderMemoryCard::TotalSizeRaw ) { + // reset memory card metrics in superblock to the default 8MB, since the converted card was different + targetFolderMemoryCard.Open( targetPath.GetFullPath(), config, 0, true, L"" ); + targetFolderMemoryCard.SetSizeInMB( 8 ); + targetFolderMemoryCard.Close(); + } + + return true; +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp 2014-06-29 07:05:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/CreateMemoryCardDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,6 +16,7 @@ #include "PrecompiledHeader.h" #include "ConfigurationDialog.h" #include "System.h" +#include "MSWstuff.h" #include "MemoryCardFile.h" //#include @@ -41,8 +42,7 @@ , m_mcdpath( mcdpath ) , m_mcdfile( suggested_mcdfileName )//suggested_and_result_mcdfileName.IsEmpty() ? g_Conf->Mcd[slot].Filename.GetFullName() { - - SetMinWidth( 472 ); + SetMinWidth( 472 * MSW_GetDPIScale()); //m_filepicker = NULL; CreateControls(); @@ -72,13 +72,12 @@ s_padding += Heading( wxString(_("At folder: ")) + (m_mcdpath + m_mcdfile).GetPath() ).Unwrapped() | StdExpand(); wxBoxSizer& s_filename( *new wxBoxSizer(wxHORIZONTAL) ); - s_filename += Heading( _("Select file name: ")).SetMinWidth(150); - m_text_filenameInput->SetMinSize(wxSize(150,20)); + s_filename += Heading( _("Select file name: ")).Unwrapped().Align(wxALIGN_RIGHT) | pxProportion(1); m_text_filenameInput->SetValue ((m_mcdpath + m_mcdfile).GetName()); - s_filename += m_text_filenameInput; - s_filename += Heading( L".ps2" ); + s_filename += m_text_filenameInput | pxProportion(2); + s_filename += Heading( L".ps2" ).Align(wxALIGN_LEFT) | pxProportion(1); - s_padding += s_filename | wxALIGN_LEFT; + s_padding += s_filename | StdExpand(); } @@ -96,6 +95,9 @@ Connect( wxID_OK, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CreateMemoryCardDialog::OnOk_Click ) ); Connect( m_text_filenameInput->GetId(), wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler( CreateMemoryCardDialog::OnOk_Click ) ); + // ...Typical solution to everything? Or are we doing something weird? + SetSizerAndFit(GetSizer()); + m_text_filenameInput->SetFocus(); m_text_filenameInput->SelectAll(); } @@ -153,17 +155,31 @@ return; } - wxString fullPath=(m_mcdpath + composedName).GetFullPath(); - if( !CreateIt( - fullPath, - m_radio_CardSize ? m_radio_CardSize->SelectedItem().SomeInt : 8 - ) ) - { - Msgbox::Alert( - _("Error: The memory card could not be created."), - _("Create memory card") - ); - return; + wxString fullPath = ( m_mcdpath + composedName ).GetFullPath(); + if ( m_radio_CardSize && m_radio_CardSize->SelectedItem().SomeInt == 0 ) { + // user selected to create a folder memory card + if ( !wxFileName::Mkdir( fullPath ) ) { + Msgbox::Alert( + _( "Error: The directory for the memory card could not be created." ), + _( "Create memory card" ) + ); + } else { + // also create an empty superblock so we can recognize memory card folders based on if they have a superblock + wxFFile superblock( wxFileName( fullPath, L"_pcsx2_superblock" ).GetFullPath(), L"wb" ); + superblock.Close(); + } + } else { + // otherwise create a file + if ( !CreateIt( + fullPath, + m_radio_CardSize ? m_radio_CardSize->SelectedItem().SomeInt : 8 + ) ) { + Msgbox::Alert( + _( "Error: The memory card could not be created." ), + _( "Create memory card" ) + ); + return; + } } result_createdMcdFilename = composedName; @@ -205,7 +221,11 @@ RadioPanelItem(_("64 MB"), _("Low compatibility warning: Yes it's very big, but may not work with many games.")) . SetToolTip(_t("Use at your own risk. Erratic memory card behavior is possible (though unlikely).")) - . SetInt(64) + . SetInt(64), + + RadioPanelItem(_("Folder [experimental]"), _("Store memory card contents in the host filesystem instead of a file.")) + . SetToolTip(_t("Automatically manages memory card contents so that the console only sees files related to the currently running software. Allows you to drag-and-drop files in and out of the memory card with your standard file explorer. This is still experimental, so use at your own risk!")) + . SetInt(0) }; m_radio_CardSize = new pxRadioPanel( this, tbl_CardSizes ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/GameDatabaseDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/GameDatabaseDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/GameDatabaseDialog.cpp 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/GameDatabaseDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,4 +26,6 @@ ScopedBusyCursor busy( Cursor_ReallyBusy ); *this += new GameDatabasePanel(this) | StdExpand(); AddOkCancel(); + + SetSizerAndFit(GetSizer()); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/LogOptionsDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/LogOptionsDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/LogOptionsDialog.cpp 2010-09-28 20:00:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/LogOptionsDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -28,4 +28,6 @@ { *this += new LogOptionsPanel( this ) | StdExpand(); AddOkCancel(); + + SetSizerAndFit(GetSizer()); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/McdConfigDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/McdConfigDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/McdConfigDialog.cpp 2013-06-28 17:32:37.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/McdConfigDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -40,6 +40,12 @@ ) ); + m_folderAutoIndex = new pxCheckBox( this, + _( "Automatically manage saves based on running game" ), + pxE( L"(Folder type only) Re-index memory card content every time the running software changes. This prevents the memory card from running out of space for saves." + ) + ); + //m_check_SavestateBackup = new pxCheckBox( this, pxsFmt(_("Backup existing Savestate when creating a new one")) ); /* for( uint i=0; i<2; ++i ) @@ -63,7 +69,8 @@ *this += 4; *this += new wxStaticLine( this ) | StdExpand(); - *this += m_check_Ejection; + *this += m_check_Ejection | StdExpand(); + *this += m_folderAutoIndex | StdExpand(); } void Panels::McdConfigPanel_Toggles::Apply() @@ -73,6 +80,7 @@ //g_Conf->EmuOptions.BackupSavestate = m_check_SavestateBackup->GetValue(); g_Conf->EmuOptions.McdEnableEjection = m_check_Ejection->GetValue(); + g_Conf->EmuOptions.McdFolderAutoManage = m_folderAutoIndex->GetValue(); } void Panels::McdConfigPanel_Toggles::AppStatusEvent_OnSettingsApplied() @@ -82,6 +90,7 @@ //m_check_SavestateBackup ->SetValue( g_Conf->EmuOptions.BackupSavestate ); m_check_Ejection ->SetValue( g_Conf->EmuOptions.McdEnableEjection ); + m_folderAutoIndex ->SetValue( g_Conf->EmuOptions.McdFolderAutoManage ); } @@ -92,7 +101,6 @@ : BaseConfigurationDialog( parent, _("MemoryCard Manager"), 600 ) { m_panel_mcdlist = new MemoryCardListPanel_Simple( this ); - m_needs_suspending = false; wxFlexGridSizer* s_flex=new wxFlexGridSizer(3,1, 0, 0); s_flex->AddGrowableCol(0); @@ -143,30 +151,3 @@ m_panel_mcdlist->SetMultitapEnabled( (int)box->GetClientData(), box->IsChecked() ); } */ -bool Dialogs::McdConfigDialog::Show( bool show ) -{ - // Suspend the emulation before any file operations on the memory cards can be done. - if( show && CoreThread.IsRunning() ) - { - m_needs_suspending = true; - CoreThread.Suspend(); - } - else if( !show && m_needs_suspending == true ) - { - m_needs_suspending = false; - CoreThread.Resume(); - } - - if( show && m_panel_mcdlist ) - m_panel_mcdlist->OnShown(); - - return _parent::Show( show ); -} - -int Dialogs::McdConfigDialog::ShowModal() -{ - if( m_panel_mcdlist ) - m_panel_mcdlist->OnShown(); - - return _parent::ShowModal(); -} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ModalPopups.h pcsx2-1.4.0/pcsx2/gui/Dialogs/ModalPopups.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/ModalPopups.h 2011-01-12 17:13:21.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/ModalPopups.h 2016-01-05 17:28:08.000000000 +0000 @@ -61,8 +61,7 @@ class AboutBoxDialog: public wxDialogWithHelpers { protected: - //wxStaticBitmap m_bitmap_logo; - wxStaticBitmap m_bitmap_dualshock; + wxStaticBitmap m_bitmap_logo; public: AboutBoxDialog( wxWindow* parent=NULL ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/SysConfigDialog.cpp pcsx2-1.4.0/pcsx2/gui/Dialogs/SysConfigDialog.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Dialogs/SysConfigDialog.cpp 2014-12-31 10:29:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Dialogs/SysConfigDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -147,7 +147,7 @@ m_msg_preset->Bold(); //I'm unable to do without the next 2 rows.. what am I missing? - m_msg_preset->SetMinWidth(150); + m_msg_preset->SetMinWidth(250); m_msg_preset->Unwrapped(); @@ -229,12 +229,14 @@ AddOkCancel(); AddPresetsControl(); + SetSizerAndFit(GetSizer()); + if( wxGetApp().Overrides.HasCustomHacks() ) wxGetApp().PostMethod( CheckHacksOverrides ); } Dialogs::ComponentsConfigDialog::ComponentsConfigDialog(wxWindow* parent) - : BaseConfigurationDialog( parent, AddAppName(_("Components Selectors - %s")), 650 ) + : BaseConfigurationDialog( parent, AddAppName(_("Components Selectors - %s")), 750 ) { ScopedBusyCursor busy( Cursor_ReallyBusy ); @@ -248,11 +250,13 @@ AddListbook(); AddOkCancel(); + SetSizerAndFit(GetSizer()); + if( wxGetApp().Overrides.HasPluginsOverride() ) wxGetApp().PostMethod( CheckPluginsOverrides ); } - +// FIXME: Purge? It's unused and does nothing. Dialogs::InterfaceConfigDialog::InterfaceConfigDialog(wxWindow *parent) : BaseConfigurationDialog( parent, AddAppName(_("Appearance/Themes - %s")), 400 ) { @@ -281,6 +285,8 @@ *this += new Panels::LanguageSelectionPanel(this, false) | StdCenter(); AddOkCancel(); + + SetSizerAndFit(GetSizer()); } // ------------------------------------------------------------------------ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/FrameForGS.cpp pcsx2-1.4.0/pcsx2/gui/FrameForGS.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/FrameForGS.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/FrameForGS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -30,8 +30,10 @@ void GSPanel::InitDefaultAccelerators() { - // Note! These don't really work yet due to some hacks to get things working for - // old legacy PAD plugins. (the global accelerator tables are used instead) --air + // Note: these override GlobalAccels ( Pcsx2App::InitDefaultGlobalAccelerators() ) + // For plain letters or symbols, replace e.g. WXK_F1 with e.g. wxKeyCode('q') or wxKeyCode('-') + // For plain letter keys with shift, use e.g. AAC( wxKeyCode('q') ).Shift() and NOT wxKeyCode('Q') + // For a symbol with shift (e.g. '_' which is '-' with shift) use AAC( wxKeyCode('-') ).Shift() typedef KeyAcceleratorCode AAC; @@ -65,9 +67,7 @@ m_Accels->Map( AAC( WXK_NUMPAD_DIVIDE ).Cmd().Alt(), "GSwindow_OffsetReset" ); m_Accels->Map( AAC( WXK_ESCAPE ), "Sys_Suspend" ); - m_Accels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot" ); - m_Accels->Map( AAC( WXK_F8 ).Shift(), "Sys_TakeSnapshot"); - m_Accels->Map( AAC( WXK_F8 ).Shift().Cmd(), "Sys_TakeSnapshot"); + m_Accels->Map( AAC( WXK_F8 ), "Sys_TakeSnapshot" ); // also shift and ctrl-shift will be added automatically m_Accels->Map( AAC( WXK_F9 ), "Sys_RenderswitchToggle"); m_Accels->Map( AAC( WXK_F10 ), "Sys_LoggingToggle" ); @@ -80,6 +80,7 @@ GSPanel::GSPanel( wxWindow* parent ) : wxWindow() , m_HideMouseTimer( this ) + , m_coreRunning(false) { m_CursorShown = true; m_HasFocus = false; @@ -91,6 +92,7 @@ InitDefaultAccelerators(); + SetBackgroundColour(wxColour((unsigned long)0)); if( g_Conf->GSWindow.AlwaysHideMouse ) { SetCursor( wxCursor(wxCURSOR_BLANK) ); @@ -312,6 +314,13 @@ DirectKeyCommand(KeyAcceleratorCode( evt )); } +void GSPanel::UpdateScreensaver() +{ + bool prevent = g_Conf->GSWindow.DisableScreenSaver + && m_HasFocus && m_coreRunning; + ScreensaverAllow(!prevent); +} + void GSPanel::OnFocus( wxFocusEvent& evt ) { evt.Skip(); @@ -334,6 +343,8 @@ } #endif //Console.Warning("GS frame > focus set"); + + UpdateScreensaver(); } void GSPanel::OnFocusLost( wxFocusEvent& evt ) @@ -350,6 +361,20 @@ } #endif //Console.Warning("GS frame > focus lost"); + + UpdateScreensaver(); +} + +void GSPanel::CoreThread_OnResumed() +{ + m_coreRunning = true; + UpdateScreensaver(); +} + +void GSPanel::CoreThread_OnSuspended() +{ + m_coreRunning = false; + UpdateScreensaver(); } void GSPanel::AppStatusEvent_OnSettingsApplied() @@ -369,8 +394,6 @@ DirectKeyCommand(FULLSCREEN_TOGGLE_ACCELERATOR_GSPANEL); } - - // -------------------------------------------------------------------------------------- // GSFrame Implementation // -------------------------------------------------------------------------------------- @@ -378,8 +401,8 @@ static const uint TitleBarUpdateMs = 333; -GSFrame::GSFrame(wxWindow* parent, const wxString& title) - : wxFrame(parent, wxID_ANY, title, g_Conf->GSWindow.WindowPos) +GSFrame::GSFrame( const wxString& title) + : wxFrame(NULL, wxID_ANY, title, g_Conf->GSWindow.WindowPos) , m_timer_UpdateTitle( this ) { SetIcons( wxGetApp().GetIconBundle() ); @@ -418,12 +441,12 @@ Hide(); // and don't close it. } -bool GSFrame::ShowFullScreen(bool show, long style) +bool GSFrame::ShowFullScreen(bool show, bool updateConfig) { /*if( show != IsFullScreen() ) Console.WriteLn( Color_StrongMagenta, "(gsFrame) Switching to %s mode...", show ? "Fullscreen" : "Windowed" );*/ - if( g_Conf->GSWindow.IsFullscreen != show ) + if (updateConfig && g_Conf->GSWindow.IsFullscreen != show) { g_Conf->GSWindow.IsFullscreen = show; wxGetApp().PostIdleMethod( AppSaveSettings ); @@ -532,49 +555,56 @@ // an intermediate white screen appears too which leads to a very annoying flickering. if (IsFullScreen()) return; #endif + AppConfig::UiTemplateOptions& templates = g_Conf->Templates; double fps = wxGetApp().FpsManager.GetFramerate(); + // The "not PAL" case covers both Region_NTSC and Region_NTSC_PROGRESSIVE + float per = gsRegionMode == Region_PAL ? (fps * 100) / EmuConfig.GS.FrameratePAL.ToFloat() : (fps * 100) / EmuConfig.GS.FramerateNTSC.ToFloat(); char gsDest[128]; + gsDest[0] = 0; // No need to set whole array to NULL. GSgetTitleInfo2( gsDest, sizeof(gsDest) ); - const wxChar* limiterStr = L"None"; + wxString limiterStr = templates.LimiterUnlimited; if( g_Conf->EmuOptions.GS.FrameLimitEnable ) { switch( g_LimiterMode ) { - case Limit_Nominal: limiterStr = L"Normal"; break; - case Limit_Turbo: limiterStr = L"Turbo"; break; - case Limit_Slomo: limiterStr = L"Slomo"; break; + case Limit_Nominal: limiterStr = templates.LimiterNormal; break; + case Limit_Turbo: limiterStr = templates.LimiterTurbo; break; + case Limit_Slomo: limiterStr = templates.LimiterSlowmo; break; } } FastFormatUnicode cpuUsage; if (m_CpuUsage.IsImplemented()) { m_CpuUsage.UpdateStats(); - if (THREAD_VU1) { // Display VU thread's usage - cpuUsage.Write(L" | EE: %3d%% | GS: %3d%% | VU: %3d%% | UI: %3d%%", - m_CpuUsage.GetEEcorePct(), m_CpuUsage.GetGsPct(), - m_CpuUsage.GetVUPct(), m_CpuUsage.GetGuiPct()); - } - else { - cpuUsage.Write(L" | EE: %3d%% | GS: %3d%% | UI: %3d%%", - m_CpuUsage.GetEEcorePct(), m_CpuUsage.GetGsPct(), - m_CpuUsage.GetGuiPct()); - } + + cpuUsage.Write(L"EE: %3d%%", m_CpuUsage.GetEEcorePct()); + cpuUsage.Write(L" | GS: %3d%%", m_CpuUsage.GetGsPct()); + + if (THREAD_VU1) + cpuUsage.Write(L" | VU: %3d%%", m_CpuUsage.GetVUPct()); + + pxNonReleaseCode(cpuUsage.Write(L" | UI: %3d%%", m_CpuUsage.GetGuiPct())); } const u64& smode2 = *(u64*)PS2GS_BASE(GS_SMODE2); + wxString omodef = (smode2 & 2) ? templates.OutputFrame : templates.OutputField; + wxString omodei = (smode2 & 1) ? templates.OutputInterlaced : templates.OutputProgressive; - SetTitle( pxsFmt( L"%s | %ls (%ls) | Limiter: %ls | fps: %6.02f%ls | State %d", - WX_STR(fromUTF8(gsDest)), - (smode2 & 1) ? L"Interlaced" : L"Progressive", - (smode2 & 2) ? L"frame" : L"field", - limiterStr, fps, cpuUsage.c_str(), States_GetCurrentSlot() ) - ); + wxString title = templates.TitleTemplate; + title.Replace(L"${slot}", pxsFmt(L"%d", States_GetCurrentSlot())); + title.Replace(L"${limiter}", limiterStr); + title.Replace(L"${speed}", pxsFmt(L"%3d%%", lround(per))); + title.Replace(L"${vfps}", pxsFmt(L"%.02f", fps)); + title.Replace(L"${cpuusage}", cpuUsage); + title.Replace(L"${omodef}", omodef); + title.Replace(L"${omodei}", omodei); + title.Replace(L"${gsdx}", fromUTF8(gsDest)); - //States_GetCurrentSlot() + SetTitle(title); } void GSFrame::OnActivate( wxActivateEvent& evt ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/GlobalCommands.cpp pcsx2-1.4.0/pcsx2/gui/GlobalCommands.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/GlobalCommands.cpp 2014-12-31 01:37:24.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/GlobalCommands.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -282,6 +282,19 @@ void Sys_Suspend() { GSFrame* gsframe = wxGetApp().GetGsFramePtr(); + if (gsframe && gsframe->IsShown() && gsframe->IsFullScreen()) { + // On some cases, probably due to driver bugs, if we don't exit fullscreen then + // the content stays on screen. Try to prevent that by first exiting fullscreen, + // but don't update the internal PCSX2 state/config, and PCSX2 will restore + // fullscreen correctly when emulation resumes according to its state/config. + // This is similar to what LilyPad's "Safe fullscreen exit on escape" hack does, + // and thus hopefully makes LilyPad's hack redundant. + gsframe->ShowFullScreen(false, false); + } + + CoreThread.Suspend(); + + gsframe = wxGetApp().GetGsFramePtr(); // just in case suspend removes this window if (gsframe && !wxGetApp().HasGUI() && g_Conf->GSWindow.CloseOnEsc) { // When we run with --nogui, PCSX2 only knows to exit when the gs window closes. // However, by default suspend just hides the gs window, so PCSX2 will not exit @@ -291,8 +304,8 @@ // So if we're set to close on esc and nogui: // If the user didn't specify --noguiprompt - exit immediately. // else prompt to either exit or abort the suspend. - if (!wxGetApp().ExitPromptWithNoGUI() // the user specified to exit immediately - || (wxOK == wxMessageBox(_("Exit PCSX2?"), + if (!wxGetApp().ExitPromptWithNoGUI() // configured to exit without a dialog + || (wxOK == wxMessageBox(_("Exit PCSX2?"), // or confirmed exit at the dialog L"PCSX2", wxICON_WARNING | wxOK | wxCANCEL))) { @@ -303,16 +316,17 @@ else { // aborting suspend request - // TODO: It's likely that if we were full screen before showing the - // prompt then we're now not in full screen anymore. It would have - // been ideal to restore full screen, but the full screen flow is complex - // and specifically gsframe->IsFullScreen() is always false when we enter - // this function - even if we were full screen before displaying the prompt. + // Note: if we didn't want to suspend emulation for this confirmation dialog, + // and if LilyPad has "Safe fullscreen exit on ESC", then pressing ESC would + // have exited fullscreen without PCSX2 knowing about it, and since it's not + // suspended it would not re-init the fullscreen state if the confirmation is + // aborted. On such case we'd have needed to set the gsframe fullscreen mode + // here according to g_Conf->GSWindow.IsFullscreen + CoreThread.Resume(); return; } } - CoreThread.Suspend(); sMainFrame.SetFocus(); } @@ -383,8 +397,38 @@ g_Pcsx2Recording ^= 1; GetMTGS().WaitGS(); // make sure GS is in sync with the audio stream when we start. - if( GSsetupRecording != NULL ) GSsetupRecording(g_Pcsx2Recording, NULL); - if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL); + if (g_Pcsx2Recording) { + // start recording + + // make the recording setup dialog[s] pseudo-modal also for the main PCSX2 window + // (the GSdx dialog is already properly modal for the GS window) + bool needsMainFrameEnable = false; + if (GetMainFramePtr() && GetMainFramePtr()->IsEnabled()) { + needsMainFrameEnable = true; + GetMainFramePtr()->Disable(); + } + + if (GSsetupRecording) { + // GSsetupRecording can be aborted/canceled by the user. Don't go on to record the audio if that happens. + if (GSsetupRecording(g_Pcsx2Recording, NULL)) { + if (SPU2setupRecording) SPU2setupRecording(g_Pcsx2Recording, NULL); + } else { + // recording dialog canceled by the user. align our state + g_Pcsx2Recording ^= 1; + } + } else { + // the GS doesn't support recording. + if (SPU2setupRecording) SPU2setupRecording(g_Pcsx2Recording, NULL); + } + + if (GetMainFramePtr() && needsMainFrameEnable) + GetMainFramePtr()->Enable(); + + } else { + // stop recording + if (GSsetupRecording) GSsetupRecording(g_Pcsx2Recording, NULL); + if (SPU2setupRecording) SPU2setupRecording(g_Pcsx2Recording, NULL); + } } void Cpu_DumpRegisters() @@ -566,6 +610,16 @@ { // ini file contains alternative parsable key combination for current 'searchfor'. acode = codeParser; + if (acode.keycode >= 'A' && acode.keycode <= 'Z') { + // Note that this needs to match the key event codes at Pcsx2App::PadKeyDispatch + // Our canonical representation is the char code (at lower case if + // applicable) with a separate modifier indicator, including shift. + // The parser deviates from this by setting the keycode to upper case if + // modifiers are used with plain letters. Luckily, it sets the modifiers + // correctly, including shift (for letters without modifiers it parses lower case). + // So we only need to change upper case letters to lower case. + acode.keycode += 'a' - 'A'; + } if (_acode.ToString() != acode.ToString()) { Console.WriteLn(Color_StrongGreen, L"Overriding '%s': assigning %s (instead of %s)", WX_STR(fromUTF8(searchfor)), WX_STR(acode.ToString()), WX_STR(_acode.ToString())); @@ -607,7 +661,39 @@ } else { - operator[](acode.val32) = result; + if (!strcmp("Sys_TakeSnapshot", searchfor)) { + // Sys_TakeSnapshot is special in a bad way. On its own it creates a screenshot + // but GSdx also checks whether shift or ctrl are held down, and for each of + // them it does a different thing (gs dumps). So we need to map a shortcut and + // also the same shortcut with shift and the same with ctrl to the same function. + // So make sure the shortcut doesn't include shift or ctrl, and then add two more + // which are derived from it. + // Also, looking at the GSdx code, it seems that it never cares about both shift + // and ctrl held together, but PCSX2 traditionally mapped f8, shift-f8 and ctrl-shift-f8 + // to Sys_TakeSnapshot, so let's not change it - we'll keep adding only shift and + // ctrl-shift to the base shortcut. + if (acode.cmd || acode.shift) { + Console.Error(L"Cannot map %s to Sys_TakeSnapshot - must not include Shift or Ctrl - these modifiers will be added automatically.", + WX_STR(acode.ToString())); + } + else { + KeyAcceleratorCode shifted(acode); shifted.Shift(); + KeyAcceleratorCode controlledShifted(shifted); controlledShifted.Cmd(); + operator[](acode.val32) = result; + operator[](shifted.val32) = result; + operator[](controlledShifted.val32) = result; + + if (_acode.val32 != acode.val32) { // overriding default + Console.WriteLn(Color_Green, L"Sys_TakeSnapshot: automatically mapping also %s and %s", + WX_STR(shifted.ToString()), + WX_STR(controlledShifted.ToString()) + ); + } + } + } + else { + operator[](acode.val32) = result; + } } } @@ -629,6 +715,9 @@ if( !GlobalAccels ) GlobalAccels = new AcceleratorDictionary; + // Why do we even have those here? all of them seem to be overridden + // by GSPanel::m_Accels ( GSPanel::InitDefaultAccelerators() ) + GlobalAccels->Map( AAC( WXK_F1 ), "States_FreezeCurrentSlot" ); GlobalAccels->Map( AAC( WXK_F3 ), "States_DefrostCurrentSlot" ); GlobalAccels->Map( AAC( WXK_F2 ), "States_CycleSlotForward" ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/GSFrame.h pcsx2-1.4.0/pcsx2/gui/GSFrame.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/GSFrame.h 2011-06-12 14:48:36.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/GSFrame.h 2016-01-05 17:28:08.000000000 +0000 @@ -34,6 +34,7 @@ // -------------------------------------------------------------------------------------- class GSPanel : public wxWindow , public EventListener_AppStatus + , public EventListener_CoreThread { typedef wxWindow _parent; @@ -43,6 +44,7 @@ wxTimer m_HideMouseTimer; bool m_CursorShown; bool m_HasFocus; + bool m_coreRunning; public: GSPanel( wxWindow* parent ); @@ -55,11 +57,6 @@ protected: void AppStatusEvent_OnSettingsApplied(); - -#ifdef __WXMSW__ - virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); -#endif - void InitDefaultAccelerators(); void OnCloseWindow( wxCloseEvent& evt ); @@ -69,9 +66,12 @@ void OnKeyDown( wxKeyEvent& evt ); void OnFocus( wxFocusEvent& evt ); void OnFocusLost( wxFocusEvent& evt ); + void CoreThread_OnResumed(); + void CoreThread_OnSuspended(); void OnLeftDclick( wxMouseEvent& evt ); + void UpdateScreensaver(); }; @@ -95,7 +95,7 @@ CpuUsageProvider m_CpuUsage; public: - GSFrame(wxWindow* parent, const wxString& title); + GSFrame( const wxString& title); virtual ~GSFrame() throw(); GSPanel* GetViewport(); @@ -103,7 +103,7 @@ bool Show( bool shown=true ); wxStaticText* GetLabel_OutputDisabled() const; - bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); + bool ShowFullScreen(bool show, bool updateConfig = true); protected: void OnCloseWindow( wxCloseEvent& evt ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/i18n.cpp pcsx2-1.4.0/pcsx2/gui/i18n.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/i18n.cpp 2015-01-03 14:52:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/i18n.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -59,14 +59,7 @@ LangPackEnumeration::LangPackEnumeration() { wxLangId = wxLANGUAGE_DEFAULT; -#if wxMAJOR_VERSION < 3 - englishName = L"_System Default"; // left-side space forces it to sort to the front of the lists -#else - // It seems wx change its sort algo... It seems non alphanumeric character are removed - englishName = L"0) System Default"; // left-side 0) forces it to sort to the front of the lists - // This one can work too - //englishName = L"A default"; -#endif + englishName = L"System Default"; englishName += _(" (default)"); canonicalName = L"default"; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MainFrame.cpp pcsx2-1.4.0/pcsx2/gui/MainFrame.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MainFrame.cpp 2014-09-17 20:36:44.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MainFrame.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -24,6 +24,9 @@ #include +#include +#include "AppAccelerators.h" + #include "svnrev.h" // ------------------------------------------------------------------------ @@ -106,12 +109,12 @@ CoreThread.Suspend(); - bool isClosing = false; + //bool isClosing = false; if( !evt.CanVeto() ) { // Mandatory destruction... - isClosing = true; + //isClosing = true; } else { @@ -345,7 +348,9 @@ // ------------------------------------------------------------------------ - wxSize backsize( m_background.GetSize() ); + // The background logo and its window size are different on Windows. Use the + // background logo size, which is what it'll eventually be resized to. + wxSize backsize(m_background.GetBitmap().GetWidth(), m_background.GetBitmap().GetHeight()); wxString wintitle; if( PCSX2_isReleaseVersion ) @@ -356,7 +361,7 @@ else { // beta / development editions, which feature revision number and compile date. -#ifndef openSUSE +#ifndef DISABLE_BUILD_DATE wintitle.Printf( L"%s %d.%d.%d-%lld%s (git) %s", pxGetAppName().c_str(), PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, SVN_REV, SVN_MODS ? L"m" : wxEmptyString, fromUTF8(__DATE__).c_str() ); #else @@ -382,6 +387,10 @@ wxBoxSizer& joe( *new wxBoxSizer( wxVERTICAL ) ); joe.Add( &m_background ); SetSizerAndFit( &joe ); + // Makes no sense, but this is needed for the window size to be correct for + // 200% DPI on Windows. The SetSizerAndFit is supposed to be doing the exact + // same thing. + GetSizer()->SetSizeHints(this); // Use default window position if the configured windowpos is invalid (partially offscreen) if( g_Conf->MainGuiPosition == wxDefaultPosition || !pxIsValidWindowPosition( *this, g_Conf->MainGuiPosition) ) @@ -530,16 +539,20 @@ ApplyCoreStatus(); ApplySettings(); + AppendKeycodeNamesToMenuOptions(); } MainEmuFrame::~MainEmuFrame() throw() { - if( m_RestartEmuOnDelete ) - { - sApp.SetExitOnFrameDelete( false ); - sApp.PostAppMethod( &Pcsx2App::DetectCpuAndUserMode ); - sApp.WipeUserModeSettings(); + try { + if( m_RestartEmuOnDelete ) + { + sApp.SetExitOnFrameDelete( false ); + sApp.PostAppMethod( &Pcsx2App::DetectCpuAndUserMode ); + sApp.WipeUserModeSettings(); + } } + DESTRUCTOR_CATCHALL } void MainEmuFrame::DoGiveHelp(const wxString& text, bool show) @@ -696,6 +709,24 @@ g_Conf->EmuOptions.EnablePatches = menubar.IsChecked( MenuId_EnablePatches ); } +static void AppendShortcutToMenuOption( wxMenuItem& item, const char* id ) { + // this is NOT how a dictionary works but it has like 30 entries so this should still perform okay + auto* dict = &wxGetApp().GlobalAccels; + for ( auto it = ( *dict )->begin(); it != ( *dict )->end(); ++it ) { + if ( strcmp( it->second->Id, id ) == 0 ) { + wxString text = item.GetItemLabel(); + size_t tabPos = text.rfind( L'\t' ); + KeyAcceleratorCode keycode( (wxKeyCode)it->first ); + item.SetItemLabel( text.Mid( 0, tabPos ) + L"\t" + keycode.ToString() ); + } + } +} + +void MainEmuFrame::AppendKeycodeNamesToMenuOptions() { + AppendShortcutToMenuOption( *m_menuSys.FindChildItem( MenuId_Sys_LoadStates ), "States_DefrostCurrentSlot" ); + AppendShortcutToMenuOption( *m_menuSys.FindChildItem( MenuId_Sys_SaveStates ), "States_FreezeCurrentSlot" ); +} + // ------------------------------------------------------------------------ // "Extensible" Plugin Menus diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MainFrame.h pcsx2-1.4.0/pcsx2/gui/MainFrame.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/MainFrame.h 2013-08-14 09:48:36.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MainFrame.h 2016-01-05 17:28:08.000000000 +0000 @@ -47,22 +47,12 @@ // A list of menu items belonging to this plugin's menu. MenuItemAddonList m_PluginMenuItems; - // Base index for inserting items, usually points to the position - // after the heading entry and separator. - int m_InsertIndexBase; - - // Current index for inserting menu items; increments with each item - // added by a plugin. - int m_InsertIndexCur; - public: - PluginsEnum_t PluginId; wxMenu& MyMenu; + PluginsEnum_t PluginId; public: - PerPluginMenuInfo() : MyMenu( *new wxMenu() ) - { - } + PerPluginMenuInfo() : MyMenu(*new wxMenu()), PluginId (PluginId_Count) {} virtual ~PerPluginMenuInfo() throw(); @@ -150,6 +140,7 @@ void ApplyConfigToGui( AppConfig& configToApply, int flags=0 ); //flags are: AppConfig::APPLY_CONFIG_FROM_PRESET and (currently unused) AppConfig::APPLY_CONFIG_MANUALLY PROPAGATE void CommitPreset_noTrigger(); + void AppendKeycodeNamesToMenuOptions(); protected: void DoGiveHelp(const wxString& text, bool show); @@ -225,4 +216,4 @@ friend class Pcsx2App; }; -extern int GetPluginMenuId_Settings( PluginsEnum_t pid ); \ No newline at end of file +extern int GetPluginMenuId_Settings( PluginsEnum_t pid ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MainMenuClicks.cpp pcsx2-1.4.0/pcsx2/gui/MainMenuClicks.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MainMenuClicks.cpp 2014-12-30 17:31:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MainMenuClicks.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -15,6 +15,7 @@ #include "PrecompiledHeader.h" +#include "App.h" #include "CDVD/CDVD.h" #include "GS.h" @@ -37,7 +38,9 @@ void MainEmuFrame::Menu_McdSettings_Click(wxCommandEvent &event) { - AppOpenDialog( this ); + ScopedCoreThreadClose closed_core; + closed_core.AllowResume(); + AppOpenModalDialog(wxEmptyString, this); } void MainEmuFrame::Menu_GameDatabase_Click(wxCommandEvent &event) @@ -147,7 +150,7 @@ dialog += dialog.GetCharHeight(); dialog += dialog.Heading(_("Do you want to swap discs or boot the new image (via system reset)?")); - result = pxIssueConfirmation( dialog, MsgButtons().Reset().Cancel().Custom(_("Swap Disc"), "swap"), L"DragDrop.BootSwapIso" ); + result = pxIssueConfirmation( dialog, MsgButtons().Reset().Cancel().Custom(_("Swap Disc"), "swap")); if( result == wxID_CANCEL ) { core_control.AllowResume(); @@ -193,7 +196,7 @@ _("Do you want to swap discs or boot the new image (system reset)?") ); - result = pxIssueConfirmation( dialog, MsgButtons().Reset().Cancel().Custom(_("Swap Disc"), "swap"), L"DragDrop.BootSwapIso" ); + result = pxIssueConfirmation( dialog, MsgButtons().Reset().Cancel().Custom(_("Swap Disc"), "swap")); if( result == wxID_CANCEL ) { @@ -260,8 +263,8 @@ wxArrayString isoFilterTypes; - isoFilterTypes.Add(pxsFmt(_("All Supported (%s)"), WX_STR((isoSupportedLabel + L" .dump" + L" .gz")))); - isoFilterTypes.Add(isoSupportedList + L";*.dump" + L";*.gz"); + isoFilterTypes.Add(pxsFmt(_("All Supported (%s)"), WX_STR((isoSupportedLabel + L" .dump" + L" .gz" + L" .cso")))); + isoFilterTypes.Add(isoSupportedList + L";*.dump" + L";*.gz" + L";*.cso"); isoFilterTypes.Add(pxsFmt(_("Disc Images (%s)"), WX_STR(isoSupportedLabel) )); isoFilterTypes.Add(isoSupportedList); @@ -269,13 +272,13 @@ isoFilterTypes.Add(pxsFmt(_("Blockdumps (%s)"), L".dump" )); isoFilterTypes.Add(L"*.dump"); - isoFilterTypes.Add(pxsFmt(_("Compressed (%s)"), L".gz")); - isoFilterTypes.Add(L"*.gz"); + isoFilterTypes.Add(pxsFmt(_("Compressed (%s)"), L".gz .cso")); + isoFilterTypes.Add(L"*.gz;*.cso"); isoFilterTypes.Add(_("All Files (*.*)")); isoFilterTypes.Add(L"*.*"); - wxFileDialog ctrl( this, _("Select CDVD source iso..."), g_Conf->Folders.RunIso.ToString(), wxEmptyString, + wxFileDialog ctrl( this, _("Select disc image, compressed disc image, or block-dump..."), g_Conf->Folders.RunIso.ToString(), wxEmptyString, JoinString(isoFilterTypes, L"|"), wxFD_OPEN | wxFD_FILE_MUST_EXIST ); if( ctrl.ShowModal() != wxID_CANCEL ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFile.cpp pcsx2-1.4.0/pcsx2/gui/MemoryCardFile.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFile.cpp 2014-06-29 06:48:32.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MemoryCardFile.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,8 +16,8 @@ #include "PrecompiledHeader.h" #include "Utilities/SafeArray.inl" #include - -#include "MemoryCardFile.h" +#include +#include // IMPORTANT! If this gets a macro redefinition error it means PluginCallbacks.h is included // in a global-scope header, and that's a BAD THING. Include it only into modules that need @@ -26,12 +26,16 @@ struct Component_FileMcd; #define PS2E_THISPTR Component_FileMcd* +#include "MemoryCardFile.h" +#include "MemoryCardFolder.h" + #include "System.h" #include "AppConfig.h" #include "svnrev.h" #include +#include static const int MCD_SIZE = 1024 * 8 * 16; // Legacy PSX card default size @@ -70,7 +74,7 @@ s32 Save ( uint slot, const u8 *src, u32 adr, int size ); s32 EraseBlock ( uint slot, u32 adr ); u64 GetCRC ( uint slot ); - + protected: bool Seek( wxFFile& f, u32 adr ); bool Create( const wxString& mcdFile, uint sizeInMB ); @@ -167,7 +171,12 @@ cont = true; } - Console.WriteLn( cont ? Color_Gray : Color_Green, L"McdSlot %u: " + str, slot ); + if ( g_Conf->Mcd[slot].Type != MemoryCardType::MemoryCard_File ) { + str = L"[is not memcard file]"; + cont = true; + } + + Console.WriteLn( cont ? Color_Gray : Color_Green, L"McdSlot %u [File]: " + str, slot ); if( cont ) continue; const wxULongLong fsz = fname.GetSize(); @@ -403,8 +412,9 @@ struct Component_FileMcd { - PS2E_ComponentAPI_Mcd api; // callbacks the plugin provides back to the emulator - FileMemoryCard impl; // class-based implementations we refer to when API is invoked + PS2E_ComponentAPI_Mcd api; // callbacks the plugin provides back to the emulator + FileMemoryCard impl; // class-based implementations we refer to when API is invoked + FolderMemoryCardAggregator implFolder; Component_FileMcd(); }; @@ -418,47 +428,152 @@ static void PS2E_CALLBACK FileMcd_EmuOpen( PS2E_THISPTR thisptr, const PS2E_SessionInfo *session ) { + // detect inserted memory card types + for ( uint slot = 0; slot < 8; ++slot ) { + if ( g_Conf->Mcd[slot].Enabled ) { + MemoryCardType type = MemoryCardType::MemoryCard_File; // default to file if we can't find anything at the path so it gets auto-generated + + const wxString path = g_Conf->FullpathToMcd( slot ); + if ( wxFileExists( path ) ) { + type = MemoryCardType::MemoryCard_File; + } else if ( wxDirExists( path ) ) { + type = MemoryCardType::MemoryCard_Folder; + } + + g_Conf->Mcd[slot].Type = type; + } + } + thisptr->impl.Open(); + thisptr->implFolder.SetFiltering( g_Conf->EmuOptions.McdFolderAutoManage ); + thisptr->implFolder.Open(); } static void PS2E_CALLBACK FileMcd_EmuClose( PS2E_THISPTR thisptr ) { + thisptr->implFolder.Close(); thisptr->impl.Close(); } static s32 PS2E_CALLBACK FileMcd_IsPresent( PS2E_THISPTR thisptr, uint port, uint slot ) { - return thisptr->impl.IsPresent( FileMcd_ConvertToSlot( port, slot ) ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.IsPresent( combinedSlot ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.IsPresent( combinedSlot ); + default: + return false; + } } static void PS2E_CALLBACK FileMcd_GetSizeInfo( PS2E_THISPTR thisptr, uint port, uint slot, PS2E_McdSizeInfo* outways ) { - thisptr->impl.GetSizeInfo( FileMcd_ConvertToSlot( port, slot ), *outways ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + thisptr->impl.GetSizeInfo( combinedSlot, *outways ); + break; + case MemoryCardType::MemoryCard_Folder: + thisptr->implFolder.GetSizeInfo( combinedSlot, *outways ); + break; + default: + return; + } } static bool PS2E_CALLBACK FileMcd_IsPSX( PS2E_THISPTR thisptr, uint port, uint slot ) { - return thisptr->impl.IsPSX( FileMcd_ConvertToSlot( port, slot ) ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.IsPSX( combinedSlot ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.IsPSX( combinedSlot ); + default: + return false; + } } static s32 PS2E_CALLBACK FileMcd_Read( PS2E_THISPTR thisptr, uint port, uint slot, u8 *dest, u32 adr, int size ) { - return thisptr->impl.Read( FileMcd_ConvertToSlot( port, slot ), dest, adr, size ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.Read( combinedSlot, dest, adr, size ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.Read( combinedSlot, dest, adr, size ); + default: + return 0; + } } static s32 PS2E_CALLBACK FileMcd_Save( PS2E_THISPTR thisptr, uint port, uint slot, const u8 *src, u32 adr, int size ) { - return thisptr->impl.Save( FileMcd_ConvertToSlot( port, slot ), src, adr, size ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.Save( combinedSlot, src, adr, size ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.Save( combinedSlot, src, adr, size ); + default: + return 0; + } } static s32 PS2E_CALLBACK FileMcd_EraseBlock( PS2E_THISPTR thisptr, uint port, uint slot, u32 adr ) { - return thisptr->impl.EraseBlock( FileMcd_ConvertToSlot( port, slot ), adr ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.EraseBlock( combinedSlot, adr ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.EraseBlock( combinedSlot, adr ); + default: + return 0; + } } static u64 PS2E_CALLBACK FileMcd_GetCRC( PS2E_THISPTR thisptr, uint port, uint slot ) { - return thisptr->impl.GetCRC( FileMcd_ConvertToSlot( port, slot ) ); + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + case MemoryCardType::MemoryCard_File: + return thisptr->impl.GetCRC( combinedSlot ); + case MemoryCardType::MemoryCard_Folder: + return thisptr->implFolder.GetCRC( combinedSlot ); + default: + return 0; + } +} + +static void PS2E_CALLBACK FileMcd_NextFrame( PS2E_THISPTR thisptr, uint port, uint slot ) { + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + //case MemoryCardType::MemoryCard_File: + // thisptr->impl.NextFrame( combinedSlot ); + // break; + case MemoryCardType::MemoryCard_Folder: + thisptr->implFolder.NextFrame( combinedSlot ); + break; + default: + return; + } +} + +static void PS2E_CALLBACK FileMcd_ReIndex( PS2E_THISPTR thisptr, uint port, uint slot, const wxString& filter ) { + const uint combinedSlot = FileMcd_ConvertToSlot( port, slot ); + switch ( g_Conf->Mcd[combinedSlot].Type ) { + //case MemoryCardType::MemoryCard_File: + // thisptr->impl.ReIndex( combinedSlot, filter ); + // break; + case MemoryCardType::MemoryCard_Folder: + thisptr->implFolder.ReIndex( combinedSlot, g_Conf->EmuOptions.McdFolderAutoManage, filter ); + break; + default: + return; + } } Component_FileMcd::Component_FileMcd() @@ -475,6 +590,8 @@ api.McdSave = FileMcd_Save; api.McdEraseBlock = FileMcd_EraseBlock; api.McdGetCRC = FileMcd_GetCRC; + api.McdNextFrame = FileMcd_NextFrame; + api.McdReIndex = FileMcd_ReIndex; } @@ -547,32 +664,6 @@ return &FileMcd_Library; } -// -------------------------------------------------------------------------------------- -// Currently Unused Superblock Header Struct -// -------------------------------------------------------------------------------------- -// (provided for reference purposes) - -struct superblock -{ - char magic[28]; // 0x00 - char version[12]; // 0x1c - u16 page_len; // 0x28 - u16 pages_per_cluster; // 0x2a - u16 pages_per_block; // 0x2c - u16 unused; // 0x2e - u32 clusters_per_card; // 0x30 - u32 alloc_offset; // 0x34 - u32 alloc_end; // 0x38 - u32 rootdir_cluster; // 0x3c - u32 backup_block1; // 0x40 - u32 backup_block2; // 0x44 - u32 ifc_list[32]; // 0x50 - u32 bad_block_list[32]; // 0xd0 - u8 card_type; // 0x150 - u8 card_flags; // 0x151 -}; - - //Tests if a string is a valid name for a new file within a specified directory. //returns true if: // - the file name has a minimum length of minNumCharacters chars (default is 5 chars: at least 1 char + '.' + 3-chars extension) @@ -597,6 +688,11 @@ out_errorMessage = _("File name already exists"); return false; } + if ( wxDirExists( (atBasePath + wxFileName(filenameStringToTest)).GetFullPath() )) + { + out_errorMessage = _( "File name already exists" ); + return false; + } wxFile fp; if( !fp.Create( (atBasePath + wxFileName(filenameStringToTest)).GetFullPath() )) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFolder.cpp pcsx2-1.4.0/pcsx2/gui/MemoryCardFolder.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFolder.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MemoryCardFolder.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,1639 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2015 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "Utilities/SafeArray.inl" + +#include "MemoryCardFile.h" +#include "MemoryCardFolder.h" + +#include "System.h" +#include "AppConfig.h" + +#include "svnrev.h" + +bool RemoveDirectory( const wxString& dirname ); + +FolderMemoryCard::FolderMemoryCard() { + m_slot = 0; + m_isEnabled = false; + m_performFileWrites = false; + m_framesUntilFlush = 0; + m_timeLastWritten = 0; +} + +void FolderMemoryCard::InitializeInternalData() { + memset( &m_superBlock, 0xFF, sizeof( m_superBlock ) ); + memset( &m_indirectFat, 0xFF, sizeof( m_indirectFat ) ); + memset( &m_fat, 0xFF, sizeof( m_fat ) ); + memset( &m_backupBlock1, 0xFF, sizeof( m_backupBlock1 ) ); + memset( &m_backupBlock2, 0xFF, sizeof( m_backupBlock2 ) ); + m_cache.clear(); + m_oldDataCache.clear(); + m_fileMetadataQuickAccess.clear(); + m_timeLastWritten = 0; + m_isEnabled = false; + m_framesUntilFlush = 0; + m_lastAccessedFile.CloseAll(); + m_performFileWrites = true; +} + +bool FolderMemoryCard::IsFormatted() const { + // this should be a good enough arbitrary check, if someone can think of a case where this doesn't work feel free to change + return m_superBlock.raw[0x16] == 0x6F; +} + +void FolderMemoryCard::Open( const bool enableFiltering, const wxString& filter ) { + Open( g_Conf->FullpathToMcd( m_slot ), g_Conf->Mcd[m_slot], 0, enableFiltering, filter, false ); +} + +void FolderMemoryCard::Open( const wxString& fullPath, const AppConfig::McdOptions& mcdOptions, const u32 sizeInClusters, const bool enableFiltering, const wxString& filter, bool simulateFileWrites ) { + InitializeInternalData(); + m_performFileWrites = !simulateFileWrites; + + wxFileName configuredFileName( fullPath ); + m_folderName = wxFileName( configuredFileName.GetFullPath() + L"/" ); + wxString str( configuredFileName.GetFullPath() ); + bool disabled = false; + + if ( mcdOptions.Enabled && mcdOptions.Type == MemoryCardType::MemoryCard_Folder ) { + if ( configuredFileName.GetFullName().IsEmpty() ) { + str = L"[empty filename]"; + disabled = true; + } + if ( !disabled && configuredFileName.FileExists() ) { + str = L"[is file, should be folder]"; + disabled = true; + } + + // if nothing exists at a valid location, create a directory for the memory card + if ( !disabled && m_performFileWrites && !m_folderName.DirExists() ) { + if ( !m_folderName.Mkdir() ) { + str = L"[couldn't create folder]"; + disabled = true; + } + } + } else { + // if the user has disabled this slot or is using a different memory card type, just return without a console log + return; + } + + Console.WriteLn( disabled ? Color_Gray : Color_Green, L"McdSlot %u: [Folder] " + str, m_slot ); + if ( disabled ) return; + + m_isEnabled = true; + LoadMemoryCardData( sizeInClusters, enableFiltering, filter ); + + SetTimeLastWrittenToNow(); + m_framesUntilFlush = 0; +} + +void FolderMemoryCard::Close( bool flush ) { + if ( !m_isEnabled ) { return; } + + if ( flush ) { + Flush(); + } + + m_cache.clear(); + m_oldDataCache.clear(); + m_lastAccessedFile.CloseAll(); + m_fileMetadataQuickAccess.clear(); +} + +void FolderMemoryCard::LoadMemoryCardData( const u32 sizeInClusters, const bool enableFiltering, const wxString& filter ) { + bool formatted = false; + + // read superblock if it exists + wxFileName superBlockFileName( m_folderName.GetPath(), L"_pcsx2_superblock" ); + if ( superBlockFileName.FileExists() ) { + wxFFile superBlockFile( superBlockFileName.GetFullPath().c_str(), L"rb" ); + if ( superBlockFile.IsOpened() && superBlockFile.Read( &m_superBlock.raw, sizeof( m_superBlock.raw ) ) >= sizeof( m_superBlock.data ) ) { + formatted = IsFormatted(); + } + } + + if ( sizeInClusters > 0 && sizeInClusters != GetSizeInClusters() ) { + SetSizeInClusters( sizeInClusters ); + FlushBlock( 0 ); + } + + // if superblock was valid, load folders and files + if ( formatted ) { + if ( enableFiltering ) { + Console.WriteLn( Color_Green, L"(FolderMcd) Indexing slot %u with filter \"%s\".", m_slot, WX_STR( filter ) ); + } else { + Console.WriteLn( Color_Green, L"(FolderMcd) Indexing slot %u without filter.", m_slot ); + } + + CreateFat(); + CreateRootDir(); + MemoryCardFileEntry* const rootDirEntry = &m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0]; + AddFolder( rootDirEntry, m_folderName.GetPath(), nullptr, enableFiltering, filter ); + + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_load.ps2" ); + #endif + } +} + +void FolderMemoryCard::CreateFat() { + const u32 totalClusters = m_superBlock.data.clusters_per_card; + const u32 clusterSize = m_superBlock.data.page_len * m_superBlock.data.pages_per_cluster; + const u32 fatEntriesPerCluster = clusterSize / 4; + const u32 countFatClusters = ( totalClusters % fatEntriesPerCluster ) != 0 ? ( totalClusters / fatEntriesPerCluster + 1 ) : ( totalClusters / fatEntriesPerCluster ); + const u32 countDataClusters = m_superBlock.data.alloc_end; + + // create indirect FAT + for ( unsigned int i = 0; i < countFatClusters; ++i ) { + m_indirectFat.data[0][i] = GetFreeSystemCluster(); + } + + // fill FAT with default values + for ( unsigned int i = 0; i < countDataClusters; ++i ) { + m_fat.data[0][0][i] = 0x7FFFFFFFu; + } +} + +void FolderMemoryCard::CreateRootDir() { + MemoryCardFileEntryCluster* const rootCluster = &m_fileEntryDict[m_superBlock.data.rootdir_cluster]; + memset( &rootCluster->entries[0].entry.raw[0], 0x00, sizeof( rootCluster->entries[0].entry.raw ) ); + rootCluster->entries[0].entry.data.mode = MemoryCardFileEntry::Mode_Read | MemoryCardFileEntry::Mode_Write | MemoryCardFileEntry::Mode_Execute + | MemoryCardFileEntry::Mode_Directory | MemoryCardFileEntry::Mode_Unknown0x0400 | MemoryCardFileEntry::Mode_Used; + rootCluster->entries[0].entry.data.length = 2; + rootCluster->entries[0].entry.data.name[0] = '.'; + + memset( &rootCluster->entries[1].entry.raw[0], 0x00, sizeof( rootCluster->entries[1].entry.raw ) ); + rootCluster->entries[1].entry.data.mode = MemoryCardFileEntry::Mode_Write | MemoryCardFileEntry::Mode_Execute | MemoryCardFileEntry::Mode_Directory + | MemoryCardFileEntry::Mode_Unknown0x0400 | MemoryCardFileEntry::Mode_Unknown0x2000 | MemoryCardFileEntry::Mode_Used; + rootCluster->entries[1].entry.data.name[0] = '.'; + rootCluster->entries[1].entry.data.name[1] = '.'; + + // mark root dir cluster as used + m_fat.data[0][0][m_superBlock.data.rootdir_cluster] = LastDataCluster | DataClusterInUseMask; +} + +u32 FolderMemoryCard::GetFreeSystemCluster() const { + // first block is reserved for superblock + u32 highestUsedCluster = ( m_superBlock.data.pages_per_block / m_superBlock.data.pages_per_cluster ) - 1; + + // can't use any of the indirect fat clusters + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + highestUsedCluster = std::max( highestUsedCluster, m_superBlock.data.ifc_list[i] ); + } + + // or fat clusters + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + for ( int j = 0; j < ClusterSize / 4; ++j ) { + if ( m_indirectFat.data[i][j] != IndirectFatUnused ) { + highestUsedCluster = std::max( highestUsedCluster, m_indirectFat.data[i][j] ); + } + } + } + + return highestUsedCluster + 1; +} + +u32 FolderMemoryCard::GetAmountDataClusters() const { + // BIOS reports different cluster values than what the memory card actually has, match that when adding files + // 8mb card -> BIOS: 7999 clusters / Superblock: 8135 clusters + // 16mb card -> BIOS: 15999 clusters / Superblock: 16295 clusters + // 32mb card -> BIOS: 31999 clusters / Superblock: 32615 clusters + // 64mb card -> BIOS: 64999 clusters / Superblock: 65255 clusters + return ( m_superBlock.data.alloc_end / 1000 ) * 1000 - 1; +} + +u32 FolderMemoryCard::GetFreeDataCluster() const { + const u32 countDataClusters = GetAmountDataClusters(); + + for ( unsigned int i = 0; i < countDataClusters; ++i ) { + const u32 cluster = m_fat.data[0][0][i]; + + if ( ( cluster & DataClusterInUseMask ) == 0 ) { + return i; + } + } + + return 0xFFFFFFFFu; +} + +u32 FolderMemoryCard::GetAmountFreeDataClusters() const { + const u32 countDataClusters = GetAmountDataClusters(); + u32 countFreeDataClusters = 0; + + for ( unsigned int i = 0; i < countDataClusters; ++i ) { + const u32 cluster = m_fat.data[0][0][i]; + + if ( ( cluster & DataClusterInUseMask ) == 0 ) { + ++countFreeDataClusters; + } + } + + return countFreeDataClusters; +} + +u32 FolderMemoryCard::GetLastClusterOfData( const u32 cluster ) const { + u32 entryCluster; + u32 nextCluster = cluster; + do { + entryCluster = nextCluster; + nextCluster = m_fat.data[0][0][entryCluster] & NextDataClusterMask; + } while ( nextCluster != LastDataCluster ); + return entryCluster; +} + +MemoryCardFileEntry* FolderMemoryCard::AppendFileEntryToDir( const MemoryCardFileEntry* const dirEntry ) { + u32 entryCluster = GetLastClusterOfData( dirEntry->entry.data.cluster ); + + MemoryCardFileEntry* newFileEntry; + if ( dirEntry->entry.data.length % 2 == 0 ) { + // need new cluster + u32 newCluster = GetFreeDataCluster(); + if ( newCluster == 0xFFFFFFFFu ) { return nullptr; } + m_fat.data[0][0][entryCluster] = newCluster | DataClusterInUseMask; + m_fat.data[0][0][newCluster] = LastDataCluster | DataClusterInUseMask; + newFileEntry = &m_fileEntryDict[newCluster].entries[0]; + } else { + // can use last page of existing clusters + newFileEntry = &m_fileEntryDict[entryCluster].entries[1]; + } + + return newFileEntry; +} + +bool FilterMatches( const wxString& fileName, const wxString& filter ) { + size_t start = 0; + size_t len = filter.Len(); + while ( start < len ) { + size_t end = filter.find( '/', start ); + if ( end == wxString::npos ) { + end = len; + } + + wxString singleFilter = filter.Mid( start, end - start ); + if ( fileName.Contains( singleFilter ) ) { + return true; + } + + start = end + 1; + } + + return false; +} + +bool FolderMemoryCard::AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, MemoryCardFileMetadataReference* parent, const bool enableFiltering, const wxString& filter ) { + wxDir dir( dirPath ); + if ( dir.IsOpened() ) { + const u32 dirStartCluster = dirEntry->entry.data.cluster; + + wxString fileName; + bool hasNext; + + wxString localFilter; + if ( enableFiltering ) { + bool hasFilter = !filter.IsEmpty(); + if ( hasFilter ) { + localFilter = L"DATA-SYSTEM/BWNETCNF/" + filter; + } else { + localFilter = L"DATA-SYSTEM/BWNETCNF"; + } + } + + int entryNumber = 2; // include . and .. + hasNext = dir.GetFirst( &fileName ); + while ( hasNext ) { + if ( fileName.StartsWith( L"_pcsx2_" ) ) { + hasNext = dir.GetNext( &fileName ); + continue; + } + + wxFileName fileInfo( dirPath, fileName ); + bool isFile = wxFile::Exists( fileInfo.GetFullPath() ); + + if ( isFile ) { + // don't load files in the root dir if we're filtering; no official software stores files there + if ( enableFiltering && parent == nullptr ) { + hasNext = dir.GetNext( &fileName ); + continue; + } + if ( AddFile( dirEntry, dirPath, fileName, parent ) ) { + ++entryNumber; + } + } else { + // if possible filter added directories by game serial + // this has the effective result of only files relevant to the current game being loaded into the memory card + // which means every game essentially sees the memory card as if no other files exist + if ( enableFiltering && !FilterMatches( fileName, localFilter ) ) { + hasNext = dir.GetNext( &fileName ); + continue; + } + + // make sure we have enough space on the memcard for the directory + const u32 newNeededClusters = CalculateRequiredClustersOfDirectory( dirPath + L"/" + fileName ) + ( ( dirEntry->entry.data.length % 2 ) == 0 ? 1 : 0 ); + if ( newNeededClusters > GetAmountFreeDataClusters() ) { + Console.Warning( GetCardFullMessage( fileName ) ); + hasNext = dir.GetNext( &fileName ); + continue; + } + + // is a subdirectory + wxDateTime creationTime, modificationTime; + fileInfo.AppendDir( fileInfo.GetFullName() ); + fileInfo.SetName( L"" ); + fileInfo.ClearExt(); + fileInfo.GetTimes( NULL, &modificationTime, &creationTime ); + + // add entry for subdir in parent dir + MemoryCardFileEntry* newDirEntry = AppendFileEntryToDir( dirEntry ); + dirEntry->entry.data.length++; + + // set metadata + wxFileName metaFileName( dirPath, L"_pcsx2_meta_directory" ); + metaFileName.AppendDir( fileName ); + wxFFile metaFile; + if ( metaFileName.FileExists() && metaFile.Open( metaFileName.GetFullPath(), L"rb" ) ) { + size_t bytesRead = metaFile.Read( &newDirEntry->entry.raw, sizeof( newDirEntry->entry.raw ) ); + metaFile.Close(); + if ( bytesRead < 0x60 ) { + strcpy( (char*)&newDirEntry->entry.data.name[0], fileName.mbc_str() ); + } + } else { + newDirEntry->entry.data.mode = MemoryCardFileEntry::DefaultDirMode; + newDirEntry->entry.data.timeCreated = MemoryCardFileEntryDateTime::FromWxDateTime( creationTime ); + newDirEntry->entry.data.timeModified = MemoryCardFileEntryDateTime::FromWxDateTime( modificationTime ); + strcpy( (char*)&newDirEntry->entry.data.name[0], fileName.mbc_str() ); + } + + // create new cluster for . and .. entries + newDirEntry->entry.data.length = 2; + u32 newCluster = GetFreeDataCluster(); + m_fat.data[0][0][newCluster] = LastDataCluster | DataClusterInUseMask; + newDirEntry->entry.data.cluster = newCluster; + + MemoryCardFileEntryCluster* const subDirCluster = &m_fileEntryDict[newCluster]; + memset( &subDirCluster->entries[0].entry.raw[0], 0x00, sizeof( subDirCluster->entries[0].entry.raw ) ); + subDirCluster->entries[0].entry.data.mode = MemoryCardFileEntry::DefaultDirMode; + subDirCluster->entries[0].entry.data.dirEntry = entryNumber; + subDirCluster->entries[0].entry.data.name[0] = '.'; + + memset( &subDirCluster->entries[1].entry.raw[0], 0x00, sizeof( subDirCluster->entries[1].entry.raw ) ); + subDirCluster->entries[1].entry.data.mode = MemoryCardFileEntry::DefaultDirMode; + subDirCluster->entries[1].entry.data.name[0] = '.'; + subDirCluster->entries[1].entry.data.name[1] = '.'; + + MemoryCardFileMetadataReference* dirRef = AddDirEntryToMetadataQuickAccess( newDirEntry, parent ); + + ++entryNumber; + + // and add all files in subdir + AddFolder( newDirEntry, fileInfo.GetFullPath(), dirRef ); + } + + hasNext = dir.GetNext( &fileName ); + } + + return true; + } + + return false; +} + +bool FolderMemoryCard::AddFile( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const wxString& fileName, MemoryCardFileMetadataReference* parent ) { + wxFileName relativeFilePath( dirPath, fileName ); + relativeFilePath.MakeRelativeTo( m_folderName.GetPath() ); + + wxFileName fileInfo( dirPath, fileName ); + wxFFile file( fileInfo.GetFullPath(), L"rb" ); + if ( file.IsOpened() ) { + // make sure we have enough space on the memcard to hold the data + const u32 clusterSize = m_superBlock.data.pages_per_cluster * m_superBlock.data.page_len; + const u32 filesize = file.Length(); + const u32 countClusters = ( filesize % clusterSize ) != 0 ? ( filesize / clusterSize + 1 ) : ( filesize / clusterSize ); + const u32 newNeededClusters = ( dirEntry->entry.data.length % 2 ) == 0 ? countClusters + 1 : countClusters; + if ( newNeededClusters > GetAmountFreeDataClusters() ) { + Console.Warning( GetCardFullMessage( relativeFilePath.GetFullPath() ) ); + file.Close(); + return false; + } + + MemoryCardFileEntry* newFileEntry = AppendFileEntryToDir( dirEntry ); + wxDateTime creationTime, modificationTime; + fileInfo.GetTimes( NULL, &modificationTime, &creationTime ); + + // set file entry metadata + memset( &newFileEntry->entry.raw[0], 0x00, sizeof( newFileEntry->entry.raw ) ); + + wxFileName metaFileName( dirPath, fileName ); + metaFileName.AppendDir( L"_pcsx2_meta" ); + wxFFile metaFile; + if ( metaFileName.FileExists() && metaFile.Open( metaFileName.GetFullPath(), L"rb" ) ) { + size_t bytesRead = metaFile.Read( &newFileEntry->entry.raw, sizeof( newFileEntry->entry.raw ) ); + metaFile.Close(); + if ( bytesRead < 0x60 ) { + strcpy( (char*)&newFileEntry->entry.data.name[0], fileName.mbc_str() ); + } + } else { + newFileEntry->entry.data.mode = MemoryCardFileEntry::DefaultFileMode; + newFileEntry->entry.data.timeCreated = MemoryCardFileEntryDateTime::FromWxDateTime( creationTime ); + newFileEntry->entry.data.timeModified = MemoryCardFileEntryDateTime::FromWxDateTime( modificationTime ); + strcpy( (char*)&newFileEntry->entry.data.name[0], fileName.mbc_str() ); + } + + newFileEntry->entry.data.length = filesize; + if ( filesize != 0 ) { + u32 fileDataStartingCluster = GetFreeDataCluster(); + newFileEntry->entry.data.cluster = fileDataStartingCluster; + + // mark the appropriate amount of clusters as used + u32 dataCluster = fileDataStartingCluster; + m_fat.data[0][0][dataCluster] = LastDataCluster | DataClusterInUseMask; + for ( unsigned int i = 0; i < countClusters - 1; ++i ) { + u32 newCluster = GetFreeDataCluster(); + m_fat.data[0][0][dataCluster] = newCluster | DataClusterInUseMask; + m_fat.data[0][0][newCluster] = LastDataCluster | DataClusterInUseMask; + dataCluster = newCluster; + } + } else { + newFileEntry->entry.data.cluster = MemoryCardFileEntry::EmptyFileCluster; + } + + file.Close(); + + MemoryCardFileMetadataReference* fileRef = AddFileEntryToMetadataQuickAccess( newFileEntry, parent ); + if ( fileRef != nullptr ) { + // acquire a handle on the file so nothing else can change the file contents while the memory card is open + m_lastAccessedFile.ReOpen( m_folderName, fileRef ); + } + + // and finally, increase file count in the directory entry + dirEntry->entry.data.length++; + + return true; + } else { + Console.WriteLn( L"(FolderMcd) Could not open file: %s", WX_STR( relativeFilePath.GetFullPath() ) ); + return false; + } +} + +u32 FolderMemoryCard::CalculateRequiredClustersOfDirectory( const wxString& dirPath ) const { + const u32 clusterSize = m_superBlock.data.pages_per_cluster * m_superBlock.data.page_len; + u32 requiredFileEntryPages = 2; + u32 requiredClusters = 0; + + wxDir dir( dirPath ); + wxString fileName; + bool hasNext = dir.GetFirst( &fileName ); + while ( hasNext ) { + if ( fileName.StartsWith( L"_pcsx2_" ) ) { + hasNext = dir.GetNext( &fileName ); + continue; + } + + ++requiredFileEntryPages; + wxFileName file( dirPath, fileName ); + wxString path = file.GetFullPath(); + bool isFile = wxFile::Exists( path ); + + if ( isFile ) { + const u32 filesize = file.GetSize().GetValue(); + const u32 countClusters = ( filesize % clusterSize ) != 0 ? ( filesize / clusterSize + 1 ) : ( filesize / clusterSize ); + requiredClusters += countClusters; + } else { + requiredClusters += CalculateRequiredClustersOfDirectory( path ); + } + + hasNext = dir.GetNext( &fileName ); + } + + return requiredClusters + requiredFileEntryPages / 2 + ( requiredFileEntryPages % 2 == 0 ? 0 : 1 ); +} + +MemoryCardFileMetadataReference* FolderMemoryCard::AddDirEntryToMetadataQuickAccess( MemoryCardFileEntry* const entry, MemoryCardFileMetadataReference* const parent ) { + MemoryCardFileMetadataReference* ref = &m_fileMetadataQuickAccess[entry->entry.data.cluster]; + ref->parent = parent; + ref->entry = entry; + ref->consecutiveCluster = 0xFFFFFFFFu; + return ref; +} + +MemoryCardFileMetadataReference* FolderMemoryCard::AddFileEntryToMetadataQuickAccess( MemoryCardFileEntry* const entry, MemoryCardFileMetadataReference* const parent ) { + const u32 firstFileCluster = entry->entry.data.cluster; + u32 fileCluster = firstFileCluster; + + // zero-length files have no file clusters + if ( fileCluster == 0xFFFFFFFFu ) { + return nullptr; + } + + u32 clusterNumber = 0; + do { + MemoryCardFileMetadataReference* ref = &m_fileMetadataQuickAccess[fileCluster & NextDataClusterMask]; + ref->parent = parent; + ref->entry = entry; + ref->consecutiveCluster = clusterNumber; + ++clusterNumber; + } while ( ( fileCluster = m_fat.data[0][0][fileCluster] ) != ( LastDataCluster | DataClusterInUseMask ) ); + + return &m_fileMetadataQuickAccess[firstFileCluster & NextDataClusterMask]; +} + +s32 FolderMemoryCard::IsPresent() const { + return m_isEnabled; +} + +void FolderMemoryCard::GetSizeInfo( PS2E_McdSizeInfo& outways ) const { + outways.SectorSize = PageSize; + outways.EraseBlockSizeInSectors = BlockSize / PageSize; + outways.McdSizeInSectors = GetSizeInClusters() * 2; + + u8 *pdata = (u8*)&outways.McdSizeInSectors; + outways.Xor = 18; + outways.Xor ^= pdata[0] ^ pdata[1] ^ pdata[2] ^ pdata[3]; +} + +bool FolderMemoryCard::IsPSX() const { + return false; +} + +u8* FolderMemoryCard::GetSystemBlockPointer( const u32 adr ) { + const u32 block = adr / BlockSizeRaw; + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 cluster = adr / ClusterSizeRaw; + + const u32 startDataCluster = m_superBlock.data.alloc_offset; + const u32 endDataCluster = startDataCluster + m_superBlock.data.alloc_end; + if ( cluster >= startDataCluster && cluster < endDataCluster ) { + // trying to access a file entry? + const u32 fatCluster = cluster - m_superBlock.data.alloc_offset; + // if this cluster is unused according to FAT, we can assume we won't find anything + if ( ( m_fat.data[0][0][fatCluster] & DataClusterInUseMask ) == 0 ) { + return nullptr; + } + return GetFileEntryPointer( fatCluster, page % 2, offset ); + } + + if ( block == 0 ) { + return &m_superBlock.raw[page * PageSize + offset]; + } else if ( block == m_superBlock.data.backup_block1 ) { + return &m_backupBlock1[( page % 16 ) * PageSize + offset]; + } else if ( block == m_superBlock.data.backup_block2 ) { + return &m_backupBlock2.raw[( page % 16 ) * PageSize + offset]; + } else { + // trying to access indirect FAT? + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + if ( cluster == m_superBlock.data.ifc_list[i] ) { + return &m_indirectFat.raw[i][( page % 2 ) * PageSize + offset]; + } + } + // trying to access FAT? + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + for ( int j = 0; j < ClusterSize / 4; ++j ) { + const u32 fatCluster = m_indirectFat.data[i][j]; + if ( fatCluster != IndirectFatUnused && fatCluster == cluster ) { + return &m_fat.raw[i][j][( page % 2 ) * PageSize + offset]; + } + } + } + } + + return nullptr; +} + +u8* FolderMemoryCard::GetFileEntryPointer( const u32 searchCluster, const u32 entryNumber, const u32 offset ) { + const u32 fileCount = m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0].entry.data.length; + MemoryCardFileEntryCluster* ptr = GetFileEntryCluster( m_superBlock.data.rootdir_cluster, searchCluster, fileCount ); + if ( ptr != nullptr ) { + return &ptr->entries[entryNumber].entry.raw[offset]; + } + + return nullptr; +} + +MemoryCardFileEntryCluster* FolderMemoryCard::GetFileEntryCluster( const u32 currentCluster, const u32 searchCluster, const u32 fileCount ) { + // we found the correct cluster, return pointer to it + if ( currentCluster == searchCluster ) { + return &m_fileEntryDict[currentCluster]; + } + + // check other clusters of this directory + const u32 nextCluster = m_fat.data[0][0][currentCluster] & NextDataClusterMask; + if ( nextCluster != LastDataCluster ) { + MemoryCardFileEntryCluster* ptr = GetFileEntryCluster( nextCluster, searchCluster, fileCount - 2 ); + if ( ptr != nullptr ) { return ptr; } + } + + // check subdirectories + auto it = m_fileEntryDict.find( currentCluster ); + if ( it != m_fileEntryDict.end() ) { + const u32 filesInThisCluster = std::min( fileCount, 2u ); + for ( unsigned int i = 0; i < filesInThisCluster; ++i ) { + const MemoryCardFileEntry* const entry = &it->second.entries[i]; + if ( entry->IsValid() && entry->IsUsed() && entry->IsDir() && !entry->IsDotDir() ) { + const u32 newFileCount = entry->entry.data.length; + MemoryCardFileEntryCluster* ptr = GetFileEntryCluster( entry->entry.data.cluster, searchCluster, newFileCount ); + if ( ptr != nullptr ) { return ptr; } + } + } + } + + return nullptr; +} + +// This method is actually unused since the introduction of m_fileMetadataQuickAccess. +// I'll leave it here anyway though to show how you traverse the file system. +MemoryCardFileEntry* FolderMemoryCard::GetFileEntryFromFileDataCluster( const u32 currentCluster, const u32 searchCluster, wxFileName* fileName, const size_t originalDirCount, u32* outClusterNumber ) { + // check both entries of the current cluster if they're the file we're searching for, and if yes return it + for ( int i = 0; i < 2; ++i ) { + MemoryCardFileEntry* const entry = &m_fileEntryDict[currentCluster].entries[i]; + if ( entry->IsValid() && entry->IsUsed() && entry->IsFile() ) { + u32 fileCluster = entry->entry.data.cluster; + u32 clusterNumber = 0; + do { + if ( fileCluster == searchCluster ) { + fileName->SetName( wxString::FromAscii( (const char*)entry->entry.data.name ) ); + *outClusterNumber = clusterNumber; + return entry; + } + ++clusterNumber; + } while ( ( fileCluster = m_fat.data[0][0][fileCluster] & NextDataClusterMask ) != LastDataCluster ); + } + } + + // check other clusters of this directory + // this can probably be solved more efficiently by looping through nextClusters instead of recursively calling + const u32 nextCluster = m_fat.data[0][0][currentCluster] & NextDataClusterMask; + if ( nextCluster != LastDataCluster ) { + MemoryCardFileEntry* ptr = GetFileEntryFromFileDataCluster( nextCluster, searchCluster, fileName, originalDirCount, outClusterNumber ); + if ( ptr != nullptr ) { return ptr; } + } + + // check subdirectories + for ( int i = 0; i < 2; ++i ) { + MemoryCardFileEntry* const entry = &m_fileEntryDict[currentCluster].entries[i]; + if ( entry->IsValid() && entry->IsUsed() && entry->IsDir() && !entry->IsDotDir() ) { + MemoryCardFileEntry* ptr = GetFileEntryFromFileDataCluster( entry->entry.data.cluster, searchCluster, fileName, originalDirCount, outClusterNumber ); + if ( ptr != nullptr ) { + fileName->InsertDir( originalDirCount, wxString::FromAscii( (const char*)entry->entry.data.name ) ); + return ptr; + } + } + } + + return nullptr; +} + +bool FolderMemoryCard::ReadFromFile( u8 *dest, u32 adr, u32 dataLength ) { + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 cluster = adr / ClusterSizeRaw; + const u32 fatCluster = cluster - m_superBlock.data.alloc_offset; + + // if the cluster is unused according to FAT, just return + if ( ( m_fat.data[0][0][fatCluster] & DataClusterInUseMask ) == 0 ) { + return false; + } + + // figure out which file to read from + auto it = m_fileMetadataQuickAccess.find( fatCluster ); + if ( it != m_fileMetadataQuickAccess.end() ) { + const u32 clusterNumber = it->second.consecutiveCluster; + wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second ); + if ( file->IsOpened() ) { + const u32 clusterOffset = ( page % 2 ) * PageSize + offset; + const u32 fileOffset = clusterNumber * ClusterSize + clusterOffset; + + if ( fileOffset != file->Tell() ) { + file->Seek( fileOffset ); + } + size_t bytesRead = file->Read( dest, dataLength ); + + // if more bytes were requested than actually exist, fill the rest with 0xFF + if ( bytesRead < dataLength ) { + memset( &dest[bytesRead], 0xFF, dataLength - bytesRead ); + } + + return bytesRead > 0; + } + } + + return false; +} + +s32 FolderMemoryCard::Read( u8 *dest, u32 adr, int size ) { + const u32 block = adr / BlockSizeRaw; + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 cluster = adr / ClusterSizeRaw; + const u32 end = offset + size; + + if ( end > PageSizeRaw ) { + // is trying to read more than one page at a time + // do this recursively so that each function call only has to care about one page + const u32 toNextPage = PageSizeRaw - offset; + Read( dest + toNextPage, adr + toNextPage, size - toNextPage ); + size = toNextPage; + } + + if ( offset < PageSize ) { + // is trying to read (part of) an actual data block + const u32 dataOffset = 0; + const u32 dataLength = std::min( (u32)size, (u32)( PageSize - offset ) ); + + // if we have a cache for this page, just load from that + auto it = m_cache.find( page ); + if ( it != m_cache.end() ) { + memcpy( dest, &it->second.raw[offset], dataLength ); + } else { + ReadDataWithoutCache( dest, adr, dataLength ); + } + } + + if ( end > PageSize ) { + // is trying to (partially) read the ECC + const u32 eccOffset = PageSize - offset; + const u32 eccLength = std::min( (u32)( size - offset ), (u32)EccSize ); + const u32 adrStart = page * PageSizeRaw; + + u8 data[PageSize]; + Read( data, adrStart, PageSize ); + + u8 ecc[EccSize]; + memset( ecc, 0xFF, EccSize ); + + for ( int i = 0; i < PageSize / 0x80; ++i ) { + FolderMemoryCard::CalculateECC( ecc + ( i * 3 ), &data[i * 0x80] ); + } + + memcpy( dest + eccOffset, ecc, eccLength ); + } + + SetTimeLastReadToNow(); + + // return 0 on fail, 1 on success? + return 1; +} + +void FolderMemoryCard::ReadDataWithoutCache( u8* const dest, const u32 adr, const u32 dataLength ) { + u8* src = GetSystemBlockPointer( adr ); + if ( src != nullptr ) { + memcpy( dest, src, dataLength ); + } else { + if ( !ReadFromFile( dest, adr, dataLength ) ) { + memset( dest, 0xFF, dataLength ); + } + } +} + +s32 FolderMemoryCard::Save( const u8 *src, u32 adr, int size ) { + const u32 block = adr / BlockSizeRaw; + const u32 cluster = adr / ClusterSizeRaw; + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 end = offset + size; + + if ( end > PageSizeRaw ) { + // is trying to store more than one page at a time + // do this recursively so that each function call only has to care about one page + const u32 toNextPage = PageSizeRaw - offset; + Save( src + toNextPage, adr + toNextPage, size - toNextPage ); + size = toNextPage; + } + + if ( offset < PageSize ) { + // is trying to store (part of) an actual data block + const u32 dataLength = std::min( (u32)size, PageSize - offset ); + + // if cache page has not yet been touched, fill it with the data from our memory card + auto it = m_cache.find( page ); + MemoryCardPage* cachePage; + if ( it == m_cache.end() ) { + cachePage = &m_cache[page]; + const u32 adrLoad = page * PageSizeRaw; + ReadDataWithoutCache( &cachePage->raw[0], adrLoad, PageSize ); + memcpy( &m_oldDataCache[page].raw[0], &cachePage->raw[0], PageSize ); + } else { + cachePage = &it->second; + } + + // then just write to the cache + memcpy( &cachePage->raw[offset], src, dataLength ); + + SetTimeLastWrittenToNow(); + } + + return 1; +} + +void FolderMemoryCard::NextFrame() { + if ( m_framesUntilFlush > 0 && --m_framesUntilFlush == 0 ) { + Flush(); + } +} + +void FolderMemoryCard::Flush() { + if ( m_cache.empty() ) { return; } + + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_pre-flush.ps2" ); + #endif + + Console.WriteLn( L"(FolderMcd) Writing data for slot %u to file system...", m_slot ); + const u64 timeFlushStart = wxGetLocalTimeMillis().GetValue(); + + // Keep a copy of the old file entries so we can figure out which files and directories, if any, have been deleted from the memory card. + std::vector oldFileEntryTree; + if ( IsFormatted() ) { + CopyEntryDictIntoTree( &oldFileEntryTree, m_superBlock.data.rootdir_cluster, m_fileEntryDict[m_superBlock.data.rootdir_cluster].entries[0].entry.data.length ); + } + + // first write the superblock if necessary + FlushSuperBlock(); + if ( !IsFormatted() ) { return; } + + // check if we were interrupted in the middle of a save operation, if yes abort + FlushBlock( m_superBlock.data.backup_block1 ); + FlushBlock( m_superBlock.data.backup_block2 ); + if ( m_backupBlock2.programmedBlock != 0xFFFFFFFFu ) { + Console.Warning( L"(FolderMcd) Aborting flush of slot %u, emulation was interrupted during save process!", m_slot ); + return; + } + + const u32 clusterCount = GetSizeInClusters(); + const u32 pageCount = clusterCount * 2; + + // then write the indirect FAT + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + const u32 cluster = m_superBlock.data.ifc_list[i]; + if ( cluster > 0 && cluster < clusterCount ) { + FlushCluster( cluster ); + } + } + + // and the FAT + for ( int i = 0; i < IndirectFatClusterCount; ++i ) { + for ( int j = 0; j < ClusterSize / 4; ++j ) { + const u32 cluster = m_indirectFat.data[i][j]; + if ( cluster > 0 && cluster < clusterCount ) { + FlushCluster( cluster ); + } + } + } + + // then all directory and file entries + FlushFileEntries(); + + // Now we have the new file system, compare it to the old one and "delete" any files that were in it before but aren't anymore. + FlushDeletedFilesAndRemoveUnchangedDataFromCache( oldFileEntryTree ); + + // and finally, flush everything that hasn't been flushed yet + for ( uint i = 0; i < pageCount; ++i ) { + FlushPage( i ); + } + + m_lastAccessedFile.FlushAll(); + m_lastAccessedFile.ClearMetadataWriteState(); + m_oldDataCache.clear(); + + const u64 timeFlushEnd = wxGetLocalTimeMillis().GetValue(); + Console.WriteLn( L"(FolderMcd) Done! Took %u ms.", timeFlushEnd - timeFlushStart ); + + #ifdef DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + WriteToFile( m_folderName.GetFullPath().RemoveLast() + L"-debug_" + wxDateTime::Now().Format( L"%Y-%m-%d-%H-%M-%S" ) + L"_post-flush.ps2" ); + #endif +} + +bool FolderMemoryCard::FlushPage( const u32 page ) { + auto it = m_cache.find( page ); + if ( it != m_cache.end() ) { + WriteWithoutCache( &it->second.raw[0], page * PageSizeRaw, PageSize ); + m_cache.erase( it ); + return true; + } + return false; +} + +bool FolderMemoryCard::FlushCluster( const u32 cluster ) { + const u32 page = cluster * 2; + bool flushed = false; + if ( FlushPage( page ) ) { flushed = true; } + if ( FlushPage( page + 1 ) ) { flushed = true; } + return flushed; +} + +bool FolderMemoryCard::FlushBlock( const u32 block ) { + const u32 page = block * 16; + bool flushed = false; + for ( int i = 0; i < 16; ++i ) { + if ( FlushPage( page + i ) ) { flushed = true; } + } + return flushed; +} + +void FolderMemoryCard::FlushSuperBlock() { + if ( FlushBlock( 0 ) && m_performFileWrites ) { + wxFileName superBlockFileName( m_folderName.GetPath(), L"_pcsx2_superblock" ); + wxFFile superBlockFile( superBlockFileName.GetFullPath().c_str(), L"wb" ); + if ( superBlockFile.IsOpened() ) { + superBlockFile.Write( &m_superBlock.raw, sizeof( m_superBlock.raw ) ); + } + } +} + +void FolderMemoryCard::FlushFileEntries() { + // Flush all file entry data from the cache into m_fileEntryDict. + const u32 rootDirCluster = m_superBlock.data.rootdir_cluster; + FlushCluster( rootDirCluster + m_superBlock.data.alloc_offset ); + MemoryCardFileEntryCluster* rootEntries = &m_fileEntryDict[rootDirCluster]; + if ( rootEntries->entries[0].IsValid() && rootEntries->entries[0].IsUsed() ) { + FlushFileEntries( rootDirCluster, rootEntries->entries[0].entry.data.length ); + } +} + +void FolderMemoryCard::FlushFileEntries( const u32 dirCluster, const u32 remainingFiles, const wxString& dirPath, MemoryCardFileMetadataReference* parent ) { + // flush the current cluster + FlushCluster( dirCluster + m_superBlock.data.alloc_offset ); + + // if either of the current entries is a subdir, flush that too + MemoryCardFileEntryCluster* entries = &m_fileEntryDict[dirCluster]; + const u32 filesInThisCluster = std::min( remainingFiles, 2u ); + for ( unsigned int i = 0; i < filesInThisCluster; ++i ) { + MemoryCardFileEntry* entry = &entries->entries[i]; + if ( entry->IsValid() && entry->IsUsed() && entry->IsDir() ) { + if ( !entry->IsDotDir() ) { + char cleanName[sizeof( entry->entry.data.name )]; + memcpy( cleanName, (const char*)entry->entry.data.name, sizeof( cleanName ) ); + bool filenameCleaned = FileAccessHelper::CleanMemcardFilename( cleanName ); + const wxString subDirName = wxString::FromAscii( (const char*)cleanName ); + const wxString subDirPath = dirPath + L"/" + subDirName; + + if ( m_performFileWrites ) { + // if this directory has nonstandard metadata, write that to the file system + wxFileName metaFileName( m_folderName.GetFullPath() + subDirPath + L"/_pcsx2_meta_directory" ); + if ( filenameCleaned || entry->entry.data.mode != MemoryCardFileEntry::DefaultDirMode || entry->entry.data.attr != 0 ) { + if ( !metaFileName.DirExists() ) { + metaFileName.Mkdir(); + } + wxFFile metaFile( metaFileName.GetFullPath(), L"wb" ); + if ( metaFile.IsOpened() ) { + metaFile.Write( entry->entry.raw, sizeof( entry->entry.raw ) ); + metaFile.Close(); + } + } else { + // if metadata is standard make sure to remove a possibly existing metadata file + if ( metaFileName.FileExists() ) { + wxRemoveFile( metaFileName.GetFullPath() ); + } + } + } + + MemoryCardFileMetadataReference* dirRef = AddDirEntryToMetadataQuickAccess( entry, parent ); + + FlushFileEntries( entry->entry.data.cluster, entry->entry.data.length, subDirPath, dirRef ); + } + } else if ( entry->IsValid() && entry->IsUsed() && entry->IsFile() ) { + AddFileEntryToMetadataQuickAccess( entry, parent ); + if ( entry->entry.data.length == 0 ) { + // empty files need to be explicitly created, as there will be no data cluster referencing it later + char cleanName[sizeof( entry->entry.data.name )]; + memcpy( cleanName, (const char*)entry->entry.data.name, sizeof( cleanName ) ); + bool filenameCleaned = FileAccessHelper::CleanMemcardFilename( cleanName ); + const wxString filePath = dirPath + L"/" + wxString::FromAscii( (const char*)cleanName ); + + if ( m_performFileWrites ) { + wxFileName fn( m_folderName.GetFullPath() + filePath ); + if ( !fn.FileExists() ) { + if ( !fn.DirExists() ) { + fn.Mkdir( 0777, wxPATH_MKDIR_FULL ); + } + wxFFile createEmptyFile( fn.GetFullPath(), L"wb" ); + createEmptyFile.Close(); + } + } + } + } + } + + // continue to the next cluster of this directory + const u32 nextCluster = m_fat.data[0][0][dirCluster]; + if ( nextCluster != ( LastDataCluster | DataClusterInUseMask ) ) { + FlushFileEntries( nextCluster & NextDataClusterMask, remainingFiles - 2, dirPath, parent ); + } +} + +void FolderMemoryCard::FlushDeletedFilesAndRemoveUnchangedDataFromCache( const std::vector& oldFileEntries ) { + const u32 newRootDirCluster = m_superBlock.data.rootdir_cluster; + const u32 newFileCount = m_fileEntryDict[newRootDirCluster].entries[0].entry.data.length; + wxString path = L""; + FlushDeletedFilesAndRemoveUnchangedDataFromCache( oldFileEntries, newRootDirCluster, newFileCount, path ); +} + +void FolderMemoryCard::FlushDeletedFilesAndRemoveUnchangedDataFromCache( const std::vector& oldFileEntries, const u32 newCluster, const u32 newFileCount, const wxString& dirPath ) { + // go through all file entires of the current directory of the old data + for ( auto it = oldFileEntries.cbegin(); it != oldFileEntries.cend(); ++it ) { + const MemoryCardFileEntry* entry = &it->entry; + if ( entry->IsValid() && entry->IsUsed() && !entry->IsDotDir() ) { + // check if an equivalent entry exists in m_fileEntryDict + const MemoryCardFileEntry* newEntry = FindEquivalent( entry, newCluster, newFileCount ); + if ( newEntry == nullptr ) { + // file/dir doesn't exist anymore, remove! + char cleanName[sizeof( entry->entry.data.name )]; + memcpy( cleanName, (const char*)entry->entry.data.name, sizeof( cleanName ) ); + FileAccessHelper::CleanMemcardFilename( cleanName ); + const wxString fileName = wxString::FromAscii( cleanName ); + const wxString filePath = m_folderName.GetFullPath() + dirPath + L"/" + fileName; + m_lastAccessedFile.CloseMatching( filePath ); + const wxString newFilePath = m_folderName.GetFullPath() + dirPath + L"/_pcsx2_deleted_" + fileName; + if ( wxFileName::DirExists( newFilePath ) ) { + // wxRenameFile doesn't overwrite directories, so we have to remove the old one first + RemoveDirectory( newFilePath ); + } + wxRenameFile( filePath, newFilePath ); + } else if ( entry->IsDir() ) { + // still exists and is a directory, recursive call for subdir + char cleanName[sizeof( entry->entry.data.name )]; + memcpy( cleanName, (const char*)entry->entry.data.name, sizeof( cleanName ) ); + FileAccessHelper::CleanMemcardFilename( cleanName ); + const wxString subDirName = wxString::FromAscii( cleanName ); + const wxString subDirPath = dirPath + L"/" + subDirName; + FlushDeletedFilesAndRemoveUnchangedDataFromCache( it->subdir, newEntry->entry.data.cluster, newEntry->entry.data.length, subDirPath ); + } else if ( entry->IsFile() ) { + // still exists and is a file, see if we can remove unchanged data from m_cache + RemoveUnchangedDataFromCache( entry, newEntry ); + } + } + } +} + +void FolderMemoryCard::RemoveUnchangedDataFromCache( const MemoryCardFileEntry* const oldEntry, const MemoryCardFileEntry* const newEntry ) { + // Disclaimer: Technically, to actually prove that file data has not changed and still belongs to the same file, we'd need to keep a copy + // of the old FAT cluster chain and compare that as well, and only acknowledge the file as unchanged if none of those have changed. However, + // the chain of events that leads to a file having the exact same file contents as a deleted old file while also being placed in the same + // data clusters as the deleted file AND matching this condition here, in a quick enough succession that no flush has occurred yet since the + // deletion of that old file is incredibly unlikely, so I'm not sure if it's actually worth coding for. + if ( oldEntry->entry.data.timeModified != newEntry->entry.data.timeModified || oldEntry->entry.data.timeCreated != newEntry->entry.data.timeCreated + || oldEntry->entry.data.length != newEntry->entry.data.length || oldEntry->entry.data.cluster != newEntry->entry.data.cluster ) { + return; + } + + u32 cluster = newEntry->entry.data.cluster & NextDataClusterMask; + const u32 alloc_offset = m_superBlock.data.alloc_offset; + while ( cluster != LastDataCluster ) { + for ( int i = 0; i < 2; ++i ) { + const u32 page = ( cluster + alloc_offset ) * 2 + i; + auto newIt = m_cache.find( page ); + if ( newIt == m_cache.end() ) { continue; } + auto oldIt = m_oldDataCache.find( page ); + if ( oldIt == m_oldDataCache.end() ) { continue; } + + if ( memcmp( &oldIt->second.raw[0], &newIt->second.raw[0], PageSize ) == 0 ) { + m_cache.erase( newIt ); + } + } + + cluster = m_fat.data[0][0][cluster] & NextDataClusterMask; + } +} + +s32 FolderMemoryCard::WriteWithoutCache( const u8 *src, u32 adr, int size ) { + const u32 block = adr / BlockSizeRaw; + const u32 cluster = adr / ClusterSizeRaw; + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 end = offset + size; + + if ( end > PageSizeRaw ) { + // is trying to store more than one page at a time + // do this recursively so that each function call only has to care about one page + const u32 toNextPage = PageSizeRaw - offset; + Save( src + toNextPage, adr + toNextPage, size - toNextPage ); + size = toNextPage; + } + + if ( offset < PageSize ) { + // is trying to store (part of) an actual data block + const u32 dataLength = std::min( (u32)size, PageSize - offset ); + + u8* dest = GetSystemBlockPointer( adr ); + if ( dest != nullptr ) { + memcpy( dest, src, dataLength ); + } else { + WriteToFile( src, adr, dataLength ); + } + } + + if ( end > PageSize ) { + // is trying to store ECC + // simply ignore this, is automatically generated when reading + } + + // return 0 on fail, 1 on success? + return 1; +} + +bool FolderMemoryCard::WriteToFile( const u8* src, u32 adr, u32 dataLength ) { + const u32 cluster = adr / ClusterSizeRaw; + const u32 page = adr / PageSizeRaw; + const u32 offset = adr % PageSizeRaw; + const u32 fatCluster = cluster - m_superBlock.data.alloc_offset; + + // if the cluster is unused according to FAT, just skip all this, we're not gonna find anything anyway + if ( ( m_fat.data[0][0][fatCluster] & DataClusterInUseMask ) == 0 ) { + return false; + } + + // figure out which file to write to + auto it = m_fileMetadataQuickAccess.find( fatCluster ); + if ( it != m_fileMetadataQuickAccess.end() ) { + const MemoryCardFileEntry* const entry = it->second.entry; + const u32 clusterNumber = it->second.consecutiveCluster; + + if ( m_performFileWrites ) { + wxFFile* file = m_lastAccessedFile.ReOpen( m_folderName, &it->second, true ); + if ( file->IsOpened() ) { + const u32 clusterOffset = ( page % 2 ) * PageSize + offset; + const u32 fileSize = entry->entry.data.length; + const u32 fileOffsetStart = std::min( clusterNumber * ClusterSize + clusterOffset, fileSize ); + const u32 fileOffsetEnd = std::min( fileOffsetStart + dataLength, fileSize ); + const u32 bytesToWrite = fileOffsetEnd - fileOffsetStart; + + wxFileOffset actualFileSize = file->Length(); + if ( actualFileSize < fileOffsetStart ) { + file->Seek( actualFileSize ); + const u32 diff = fileOffsetStart - actualFileSize; + u8 temp = 0xFF; + for ( u32 i = 0; i < diff; ++i ) { + file->Write( &temp, 1 ); + } + } + + const wxFileOffset fileOffset = file->Tell(); + if ( fileOffset != fileOffsetStart ) { + file->Seek( fileOffsetStart ); + } + if ( bytesToWrite > 0 ) { + file->Write( src, bytesToWrite ); + } + } else { + return false; + } + } + + return true; + } + + return false; +} + +void FolderMemoryCard::CopyEntryDictIntoTree( std::vector* fileEntryTree, const u32 cluster, const u32 fileCount ) { + const MemoryCardFileEntryCluster* entryCluster = &m_fileEntryDict[cluster]; + u32 fileCluster = cluster; + + for ( size_t i = 0; i < fileCount; ++i ) { + const MemoryCardFileEntry* entry = &entryCluster->entries[i % 2]; + + if ( entry->IsValid() && entry->IsUsed() ) { + fileEntryTree->emplace_back( *entry ); + + if ( entry->IsDir() && !entry->IsDotDir() ) { + MemoryCardFileEntryTreeNode* treeEntry = &fileEntryTree->back(); + CopyEntryDictIntoTree( &treeEntry->subdir, entry->entry.data.cluster, entry->entry.data.length ); + } + } + + if ( i % 2 == 1 ) { + fileCluster = m_fat.data[0][0][fileCluster] & 0x7FFFFFFFu; + if ( fileCluster == 0x7FFFFFFFu ) { return; } + entryCluster = &m_fileEntryDict[fileCluster]; + } + } +} + +const MemoryCardFileEntry* FolderMemoryCard::FindEquivalent( const MemoryCardFileEntry* searchEntry, const u32 cluster, const u32 fileCount ) { + const MemoryCardFileEntryCluster* entryCluster = &m_fileEntryDict[cluster]; + u32 fileCluster = cluster; + + for ( size_t i = 0; i < fileCount; ++i ) { + const MemoryCardFileEntry* entry = &entryCluster->entries[i % 2]; + + if ( entry->IsValid() && entry->IsUsed() ) { + if ( entry->IsFile() == searchEntry->IsFile() && entry->IsDir() == searchEntry->IsDir() + && strncmp( (const char*)searchEntry->entry.data.name, (const char*)entry->entry.data.name, sizeof( entry->entry.data.name ) ) == 0 ) { + return entry; + } + } + + if ( i % 2 == 1 ) { + fileCluster = m_fat.data[0][0][fileCluster] & 0x7FFFFFFFu; + if ( fileCluster == 0x7FFFFFFFu ) { return nullptr; } + entryCluster = &m_fileEntryDict[fileCluster]; + } + } + + return nullptr; +} + +s32 FolderMemoryCard::EraseBlock( u32 adr ) { + const u32 block = adr / BlockSizeRaw; + + u8 eraseData[PageSize]; + memset( eraseData, 0xFF, PageSize ); + for ( int page = 0; page < 16; ++page ) { + const u32 adr = block * BlockSizeRaw + page * PageSizeRaw; + Save( eraseData, adr, PageSize ); + } + + // return 0 on fail, 1 on success? + return 1; +} + +u64 FolderMemoryCard::GetCRC() const { + // Since this is just used as integrity check for savestate loading, + // give a timestamp of the last time the memory card was written to + return m_timeLastWritten; +} + +void FolderMemoryCard::SetSlot( uint slot ) { + pxAssert( slot < 8 ); + m_slot = slot; +} + +u32 FolderMemoryCard::GetSizeInClusters() const { + const u32 clusters = m_superBlock.data.clusters_per_card; + if ( clusters > 0 && clusters < 0xFFFFFFFFu ) { + return clusters; + } else { + return TotalClusters; + } +} + +void FolderMemoryCard::SetSizeInClusters( u32 clusters ) { + superBlockUnion newSuperBlock; + memcpy( &newSuperBlock.raw[0], &m_superBlock.raw[0], sizeof( newSuperBlock.raw ) ); + + newSuperBlock.data.clusters_per_card = clusters; + + const u32 alloc_offset = clusters / 0x100 + 9; + newSuperBlock.data.alloc_offset = alloc_offset; + newSuperBlock.data.alloc_end = clusters - 0x10 - alloc_offset; + + const u32 blocks = clusters / 8; + newSuperBlock.data.backup_block1 = blocks - 1; + newSuperBlock.data.backup_block2 = blocks - 2; + + for ( size_t i = 0; i < sizeof( newSuperBlock.raw ) / PageSize; ++i ) { + Save( &newSuperBlock.raw[i * PageSize], i * PageSizeRaw, PageSize ); + } +} + +void FolderMemoryCard::SetSizeInMB( u32 megaBytes ) { + SetSizeInClusters( ( megaBytes * 1024 * 1024 ) / ClusterSize ); +} + +void FolderMemoryCard::SetTimeLastReadToNow() { + m_framesUntilFlush = FramesAfterWriteUntilFlush; +} + +void FolderMemoryCard::SetTimeLastWrittenToNow() { + m_timeLastWritten = wxGetLocalTimeMillis().GetValue(); + m_framesUntilFlush = FramesAfterWriteUntilFlush; +} + +// from http://www.oocities.org/siliconvalley/station/8269/sma02/sma02.html#ECC +void FolderMemoryCard::CalculateECC( u8* ecc, const u8* data ) { + static const u8 Table[] = { + 0x00, 0x87, 0x96, 0x11, 0xa5, 0x22, 0x33, 0xb4, 0xb4, 0x33, 0x22, 0xa5, 0x11, 0x96, 0x87, 0x00, + 0xc3, 0x44, 0x55, 0xd2, 0x66, 0xe1, 0xf0, 0x77, 0x77, 0xf0, 0xe1, 0x66, 0xd2, 0x55, 0x44, 0xc3, + 0xd2, 0x55, 0x44, 0xc3, 0x77, 0xf0, 0xe1, 0x66, 0x66, 0xe1, 0xf0, 0x77, 0xc3, 0x44, 0x55, 0xd2, + 0x11, 0x96, 0x87, 0x00, 0xb4, 0x33, 0x22, 0xa5, 0xa5, 0x22, 0x33, 0xb4, 0x00, 0x87, 0x96, 0x11, + 0xe1, 0x66, 0x77, 0xf0, 0x44, 0xc3, 0xd2, 0x55, 0x55, 0xd2, 0xc3, 0x44, 0xf0, 0x77, 0x66, 0xe1, + 0x22, 0xa5, 0xb4, 0x33, 0x87, 0x00, 0x11, 0x96, 0x96, 0x11, 0x00, 0x87, 0x33, 0xb4, 0xa5, 0x22, + 0x33, 0xb4, 0xa5, 0x22, 0x96, 0x11, 0x00, 0x87, 0x87, 0x00, 0x11, 0x96, 0x22, 0xa5, 0xb4, 0x33, + 0xf0, 0x77, 0x66, 0xe1, 0x55, 0xd2, 0xc3, 0x44, 0x44, 0xc3, 0xd2, 0x55, 0xe1, 0x66, 0x77, 0xf0, + 0xf0, 0x77, 0x66, 0xe1, 0x55, 0xd2, 0xc3, 0x44, 0x44, 0xc3, 0xd2, 0x55, 0xe1, 0x66, 0x77, 0xf0, + 0x33, 0xb4, 0xa5, 0x22, 0x96, 0x11, 0x00, 0x87, 0x87, 0x00, 0x11, 0x96, 0x22, 0xa5, 0xb4, 0x33, + 0x22, 0xa5, 0xb4, 0x33, 0x87, 0x00, 0x11, 0x96, 0x96, 0x11, 0x00, 0x87, 0x33, 0xb4, 0xa5, 0x22, + 0xe1, 0x66, 0x77, 0xf0, 0x44, 0xc3, 0xd2, 0x55, 0x55, 0xd2, 0xc3, 0x44, 0xf0, 0x77, 0x66, 0xe1, + 0x11, 0x96, 0x87, 0x00, 0xb4, 0x33, 0x22, 0xa5, 0xa5, 0x22, 0x33, 0xb4, 0x00, 0x87, 0x96, 0x11, + 0xd2, 0x55, 0x44, 0xc3, 0x77, 0xf0, 0xe1, 0x66, 0x66, 0xe1, 0xf0, 0x77, 0xc3, 0x44, 0x55, 0xd2, + 0xc3, 0x44, 0x55, 0xd2, 0x66, 0xe1, 0xf0, 0x77, 0x77, 0xf0, 0xe1, 0x66, 0xd2, 0x55, 0x44, 0xc3, + 0x00, 0x87, 0x96, 0x11, 0xa5, 0x22, 0x33, 0xb4, 0xb4, 0x33, 0x22, 0xa5, 0x11, 0x96, 0x87, 0x00 + }; + + int i, c; + + ecc[0] = ecc[1] = ecc[2] = 0; + + for ( i = 0; i < 0x80; i++ ) { + c = Table[data[i]]; + + ecc[0] ^= c; + if ( c & 0x80 ) { + ecc[1] ^= ~i; + ecc[2] ^= i; + } + } + ecc[0] = ~ecc[0]; + ecc[0] &= 0x77; + + ecc[1] = ~ecc[1]; + ecc[1] &= 0x7f; + + ecc[2] = ~ecc[2]; + ecc[2] &= 0x7f; + + return; +} + +void FolderMemoryCard::WriteToFile( const wxString& filename ) { + wxFFile targetFile( filename, L"wb" ); + + u8 buffer[FolderMemoryCard::PageSizeRaw]; + u32 adr = 0; + while ( adr < GetSizeInClusters() * FolderMemoryCard::ClusterSizeRaw ) { + Read( buffer, adr, FolderMemoryCard::PageSizeRaw ); + targetFile.Write( buffer, FolderMemoryCard::PageSizeRaw ); + adr += FolderMemoryCard::PageSizeRaw; + } + + targetFile.Close(); +} + + +FileAccessHelper::FileAccessHelper() { + m_files.clear(); + m_lastWrittenFileRef = nullptr; +} + +FileAccessHelper::~FileAccessHelper() { + m_lastWrittenFileRef = nullptr; + this->CloseAll(); +} + +wxFFile* FileAccessHelper::Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata ) { + wxFileName fn( folderName ); + bool cleanedFilename = fileRef->GetPath( &fn ); + wxString filename( fn.GetFullPath() ); + + if ( !fn.FileExists() ) { + if ( !fn.DirExists() ) { + fn.Mkdir( 0777, wxPATH_MKDIR_FULL ); + } + wxFFile createEmptyFile( filename, L"wb" ); + createEmptyFile.Close(); + } + + const MemoryCardFileEntry* const entry = fileRef->entry; + wxFFile* file = new wxFFile( filename, L"r+b" ); + + std::string internalPath; + fileRef->GetInternalPath( &internalPath ); + MemoryCardFileHandleStructure handleStruct; + handleStruct.fileHandle = file; + handleStruct.fileRef = fileRef; + m_files.emplace( internalPath, handleStruct ); + + if ( writeMetadata ) { + fn.AppendDir( L"_pcsx2_meta" ); + const bool metadataIsNonstandard = cleanedFilename || entry->entry.data.mode != MemoryCardFileEntry::DefaultFileMode || entry->entry.data.attr != 0; + WriteMetadata( metadataIsNonstandard, fn, entry ); + } + + return file; +} + +void FileAccessHelper::WriteMetadata( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef ) { + wxFileName fn( folderName ); + bool cleanedFilename = fileRef->GetPath( &fn ); + fn.AppendDir( L"_pcsx2_meta" ); + + const MemoryCardFileEntry* const entry = fileRef->entry; + const bool metadataIsNonstandard = cleanedFilename || entry->entry.data.mode != MemoryCardFileEntry::DefaultFileMode || entry->entry.data.attr != 0; + + WriteMetadata( metadataIsNonstandard, fn, entry ); +} + +void FileAccessHelper::WriteMetadata( bool metadataIsNonstandard, wxFileName& metadataFilename, const MemoryCardFileEntry* const entry ) { + if ( metadataIsNonstandard ) { + // write metadata of file if it's nonstandard + if ( !metadataFilename.DirExists() ) { + metadataFilename.Mkdir(); + } + wxFFile metaFile( metadataFilename.GetFullPath(), L"wb" ); + if ( metaFile.IsOpened() ) { + metaFile.Write( entry->entry.raw, sizeof( entry->entry.raw ) ); + metaFile.Close(); + } + } else { + // if metadata is standard remove metadata file if it exists + if ( metadataFilename.FileExists() ) { + wxRemoveFile( metadataFilename.GetFullPath() ); + + // and remove the metadata dir if it's now empty + wxDir metaDir( metadataFilename.GetPath() ); + if ( metaDir.IsOpened() && !metaDir.HasFiles() ) { + wxRmdir( metadataFilename.GetPath() ); + } + } + } +} + +wxFFile* FileAccessHelper::ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata ) { + std::string internalPath; + fileRef->GetInternalPath( &internalPath ); + auto it = m_files.find( internalPath ); + if ( it != m_files.end() ) { + // we already have a handle to this file + + // if the caller wants to write metadata and we haven't done this recently, do so and remember that we did + if ( writeMetadata ) { + if ( m_lastWrittenFileRef != fileRef ) { + WriteMetadata( folderName, fileRef ); + m_lastWrittenFileRef = fileRef; + } + } else { + if ( m_lastWrittenFileRef != nullptr ) { + m_lastWrittenFileRef = nullptr; + } + } + + // update the fileRef in the map since it might have been modified or deleted + it->second.fileRef = fileRef; + + return it->second.fileHandle; + } else { + return this->Open( folderName, fileRef, writeMetadata ); + } +} + +void FileAccessHelper::CloseFileHandle( wxFFile* file, const MemoryCardFileEntry* entry ) { + file->Close(); + + if ( entry != nullptr ) { + wxFileName fn( file->GetName() ); + wxDateTime modified = entry->entry.data.timeModified.ToWxDateTime(); + wxDateTime created = entry->entry.data.timeCreated.ToWxDateTime(); + fn.SetTimes( nullptr, &modified, &created ); + } + + delete file; +} + +void FileAccessHelper::CloseMatching( const wxString& path ) { + wxFileName fn( path ); + fn.Normalize(); + wxString pathNormalized = fn.GetFullPath(); + for ( auto it = m_files.begin(); it != m_files.end(); ) { + wxString openPath = it->second.fileHandle->GetName(); + if ( openPath.StartsWith( pathNormalized ) ) { + CloseFileHandle( it->second.fileHandle, it->second.fileRef->entry ); + it = m_files.erase( it ); + } else { + ++it; + } + } +} + +void FileAccessHelper::CloseAll() { + for ( auto it = m_files.begin(); it != m_files.end(); ++it ) { + CloseFileHandle( it->second.fileHandle, it->second.fileRef->entry ); + } + m_files.clear(); +} + +void FileAccessHelper::FlushAll() { + for ( auto it = m_files.begin(); it != m_files.end(); ++it ) { + it->second.fileHandle->Flush(); + } +} + +void FileAccessHelper::ClearMetadataWriteState() { + m_lastWrittenFileRef = nullptr; +} + +bool FileAccessHelper::CleanMemcardFilename( char* name ) { + // invalid characters for filenames in the PS2 file system: { '/', '?', '*' } + // the following characters are valid in a PS2 memcard file system but invalid in Windows + // there's less restrictions on Linux but by cleaning them always we keep the folders cross-compatible + const char illegalChars[] = { '\\', '%', ':', '|', '"', '<', '>' }; + bool cleaned = false; + + for ( size_t i = 0; i < sizeof( illegalChars ); ++i ) { + // this sizeof looks really odd but I couldn't get MemoryCardFileEntry::entry.data.name (or variants) working, feel free to replace with something equivalent but nicer looking + for ( size_t j = 0; j < sizeof( ( (MemoryCardFileEntry*)0 )->entry.data.name ); ++j ) { + if ( name[j] == illegalChars[i] ) { + name[j] = '_'; + cleaned = true; + } + } + } + + return cleaned; +} + + +bool MemoryCardFileMetadataReference::GetPath( wxFileName* fileName ) const { + bool parentCleaned = false; + if ( parent ) { + parentCleaned = parent->GetPath( fileName ); + } + + char cleanName[sizeof( entry->entry.data.name )]; + memcpy( cleanName, (const char*)entry->entry.data.name, sizeof( cleanName ) ); + bool localCleaned = FileAccessHelper::CleanMemcardFilename( cleanName ); + + if ( entry->IsDir() ) { + fileName->AppendDir( wxString::FromAscii( cleanName ) ); + } else if ( entry->IsFile() ) { + fileName->SetName( wxString::FromAscii( cleanName ) ); + } + + return parentCleaned || localCleaned; +} + +void MemoryCardFileMetadataReference::GetInternalPath( std::string* fileName ) const { + if ( parent ) { + parent->GetInternalPath( fileName ); + } + + fileName->append( (const char*)entry->entry.data.name ); + + if ( entry->IsDir() ) { + fileName->append( "/" ); + } +} + +FolderMemoryCardAggregator::FolderMemoryCardAggregator() { + for ( uint i = 0; i < TotalCardSlots; ++i ) { + m_cards[i].SetSlot( i ); + } +} + +void FolderMemoryCardAggregator::Open() { + for ( int i = 0; i < TotalCardSlots; ++i ) { + m_cards[i].Open( m_enableFiltering, m_lastKnownFilter ); + } +} + +void FolderMemoryCardAggregator::Close() { + for ( int i = 0; i < TotalCardSlots; ++i ) { + m_cards[i].Close(); + } +} + +void FolderMemoryCardAggregator::SetFiltering( const bool enableFiltering ) { + m_enableFiltering = enableFiltering; +} + +s32 FolderMemoryCardAggregator::IsPresent( uint slot ) { + return m_cards[slot].IsPresent(); +} + +void FolderMemoryCardAggregator::GetSizeInfo( uint slot, PS2E_McdSizeInfo& outways ) { + m_cards[slot].GetSizeInfo( outways ); +} + +bool FolderMemoryCardAggregator::IsPSX( uint slot ) { + return m_cards[slot].IsPSX(); +} + +s32 FolderMemoryCardAggregator::Read( uint slot, u8 *dest, u32 adr, int size ) { + return m_cards[slot].Read( dest, adr, size ); +} + +s32 FolderMemoryCardAggregator::Save( uint slot, const u8 *src, u32 adr, int size ) { + return m_cards[slot].Save( src, adr, size ); +} + +s32 FolderMemoryCardAggregator::EraseBlock( uint slot, u32 adr ) { + return m_cards[slot].EraseBlock( adr ); +} + +u64 FolderMemoryCardAggregator::GetCRC( uint slot ) { + return m_cards[slot].GetCRC(); +} + +void FolderMemoryCardAggregator::NextFrame( uint slot ) { + m_cards[slot].NextFrame(); +} + +void FolderMemoryCardAggregator::ReIndex( uint slot, const bool enableFiltering, const wxString& filter ) { + m_cards[slot].Close(); + m_cards[slot].Open( enableFiltering, filter ); + + SetFiltering( enableFiltering ); + m_lastKnownFilter = filter; +} + diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFolder.h pcsx2-1.4.0/pcsx2/gui/MemoryCardFolder.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/MemoryCardFolder.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MemoryCardFolder.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,563 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2015 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include "PluginCallbacks.h" +#include "AppConfig.h" + +//#define DEBUG_WRITE_FOLDER_CARD_IN_MEMORY_TO_FILE_ON_CHANGE + +// -------------------------------------------------------------------------------------- +// Superblock Header Struct +// -------------------------------------------------------------------------------------- +#pragma pack(push, 1) +struct superblock { + char magic[28]; // 0x00 + char version[12]; // 0x1c + u16 page_len; // 0x28 + u16 pages_per_cluster; // 0x2a + u16 pages_per_block; // 0x2c + u16 unused; // 0x2e + u32 clusters_per_card; // 0x30 + u32 alloc_offset; // 0x34 + u32 alloc_end; // 0x38 + u32 rootdir_cluster; // 0x3c + u32 backup_block1; // 0x40 + u32 backup_block2; // 0x44 + u64 padding0x48; // 0x48 + u32 ifc_list[32]; // 0x50 + u32 bad_block_list[32]; // 0xd0 + u8 card_type; // 0x150 + u8 card_flags; // 0x151 +}; +#pragma pack(pop) + +#pragma pack(push, 1) +struct MemoryCardFileEntryDateTime { + u8 unused; + u8 second; + u8 minute; + u8 hour; + u8 day; + u8 month; + u16 year; + + static MemoryCardFileEntryDateTime FromWxDateTime( const wxDateTime& time ) { + MemoryCardFileEntryDateTime t; + + if ( time.IsValid() ) { + wxDateTime::Tm tm = time.GetTm( wxDateTime::GMT9 ); + + t.unused = 0; + t.second = tm.sec; + t.minute = tm.min; + t.hour = tm.hour; + t.day = tm.mday; + t.month = tm.mon + 1; + t.year = tm.year; + } else { + t.unused = 0; + t.second = 0; + t.minute = 0; + t.hour = 0; + t.day = 0; + t.month = 0; + t.year = 0; + } + + return t; + } + + wxDateTime ToWxDateTime() const { + wxDateTime::Tm tm; + tm.sec = this->second; + tm.min = this->minute; + tm.hour = this->hour; + tm.mday = this->day; + tm.mon = (wxDateTime::Month)(this->month - 1); + tm.year = this->year; + + wxDateTime time( tm ); + return time.FromTimezone( wxDateTime::GMT9 ); + } + + bool operator==( const MemoryCardFileEntryDateTime& other ) const { + return unused == other.unused && second == other.second && minute == other.minute && hour == other.hour + && day == other.day && month == other.month && year == other.year; + } + bool operator!=( const MemoryCardFileEntryDateTime& other ) const { + return !( *this == other ); + } +}; +#pragma pack(pop) + +// -------------------------------------------------------------------------------------- +// MemoryCardFileEntry +// -------------------------------------------------------------------------------------- +// Structure for directory and file relationships as stored on memory cards +#pragma pack(push, 1) +struct MemoryCardFileEntry { + enum MemoryCardFileModeFlags { + Mode_Read = 0x0001, + Mode_Write = 0x0002, + Mode_Execute = 0x0004, + Mode_CopyProtected = 0x0008, + Mode_File = 0x0010, + Mode_Directory = 0x0020, + Mode_Unknown0x0040 = 0x0040, + Mode_Unknown0x0080 = 0x0080, + Mode_Unknown0x0100 = 0x0100, + Mode_Unknown0x0200 = 0x0200, + Mode_Unknown0x0400 = 0x0400, // Maybe Mode_PS2_Save or something along those lines? + Mode_PocketStation = 0x0800, + Mode_PSX = 0x1000, + Mode_Unknown0x2000 = 0x2000, // Supposedly Mode_Hidden but files still show up in the PS2 browser with this set + Mode_Unknown0x4000 = 0x4000, + Mode_Used = 0x8000 + }; + + union { + struct MemoryCardFileEntryData { + u32 mode; + u32 length; // number of bytes for file, number of files for dir + MemoryCardFileEntryDateTime timeCreated; + u32 cluster; // cluster the start of referred file or folder can be found in + u32 dirEntry; // parent directory entry number, only used if "." entry of subdir + MemoryCardFileEntryDateTime timeModified; + u32 attr; + u8 padding[0x1C]; + u8 name[0x20]; + u8 unused[0x1A0]; + } data; + u8 raw[0x200]; + } entry; + + bool IsFile() const { return !!( entry.data.mode & Mode_File ); } + bool IsDir() const { return !!( entry.data.mode & Mode_Directory ); } + bool IsUsed() const { return !!( entry.data.mode & Mode_Used ); } + bool IsValid() const { return entry.data.mode != 0xFFFFFFFF; } + // checks if we're either "." or ".." + bool IsDotDir() const { return entry.data.name[0] == '.' && ( entry.data.name[1] == '\0' || ( entry.data.name[1] == '.' && entry.data.name[2] == '\0' ) ); } + + static const u32 DefaultDirMode = Mode_Read | Mode_Write | Mode_Execute | Mode_Directory | Mode_Unknown0x0400 | Mode_Used; + static const u32 DefaultFileMode = Mode_Read | Mode_Write | Mode_Execute | Mode_File | Mode_Unknown0x0080 | Mode_Unknown0x0400 | Mode_Used; + + // used in the cluster entry of empty files on real memory cards, as far as we know + static const u32 EmptyFileCluster = 0xFFFFFFFFu; +}; +#pragma pack(pop) + +#pragma pack(push, 1) +struct MemoryCardFileEntryCluster { + MemoryCardFileEntry entries[2]; +}; +#pragma pack(pop) + +#pragma pack(push, 1) +struct MemoryCardPage { + static const int PageSize = 0x200; + u8 raw[PageSize]; +}; +#pragma pack(pop) + +struct MemoryCardFileEntryTreeNode { + MemoryCardFileEntry entry; + std::vector subdir; + + MemoryCardFileEntryTreeNode( const MemoryCardFileEntry& entry ) : entry(entry) {} +}; + +// -------------------------------------------------------------------------------------- +// MemoryCardFileMetadataReference +// -------------------------------------------------------------------------------------- +// Helper structure to quickly access file entries from any file data FAT cluster +struct MemoryCardFileMetadataReference { + MemoryCardFileMetadataReference* parent; + MemoryCardFileEntry* entry; + u32 consecutiveCluster; + + // returns true if filename was modified and metadata containing the actual filename should be written + bool GetPath( wxFileName* fileName ) const; + + // gives the internal memory card file system path, not to be used for writes to the host file system + void GetInternalPath( std::string* fileName ) const; +}; + +struct MemoryCardFileHandleStructure { + MemoryCardFileMetadataReference* fileRef; + wxFFile* fileHandle; +}; + +// -------------------------------------------------------------------------------------- +// FileAccessHelper +// -------------------------------------------------------------------------------------- +// Small helper class to keep memory card files opened between calls to Read()/Save() +class FileAccessHelper { +protected: + std::map m_files; + MemoryCardFileMetadataReference* m_lastWrittenFileRef; // we remember this to reduce redundant metadata checks/writes + +public: + FileAccessHelper(); + ~FileAccessHelper(); + + // Get an already opened file if possible, or open a new one and remember it + wxFFile* ReOpen( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata = false ); + // Close all open files that start with the given path, so either a file if a filename is given or all files in a directory and its subdirectories when a directory is given + void CloseMatching( const wxString& path ); + // Close all open files + void CloseAll(); + // Flush the written data of all open files to the file system + void FlushAll(); + + // Force metadata to be written on next file access, not sure if this is necessary but it can't hurt. + void ClearMetadataWriteState(); + + // removes characters from a PS2 file name that would be illegal in a Windows file system + // returns true if any changes were made + static bool CleanMemcardFilename( char* name ); + +protected: + // Open a new file and remember it for later + wxFFile* Open( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef, bool writeMetadata = false ); + // Close a file and delete its handle + // If entry is given, it also attempts to set the created and modified timestamps of the file according to the entry + void CloseFileHandle( wxFFile* file, const MemoryCardFileEntry* entry = nullptr ); + + void WriteMetadata( const wxFileName& folderName, MemoryCardFileMetadataReference* fileRef ); + void WriteMetadata( bool metadataIsNonstandard, wxFileName& metadataFilename, const MemoryCardFileEntry* const entry ); +}; + +// -------------------------------------------------------------------------------------- +// FolderMemoryCard +// -------------------------------------------------------------------------------------- +// Fakes a memory card using a regular folder/file structure in the host file system +class FolderMemoryCard { +public: + // a few constants so we could in theory change the memory card size without too much effort + static const int IndirectFatClusterCount = 1; // should be 32 but only 1 is ever used + static const int PageSize = MemoryCardPage::PageSize; + static const int ClusterSize = PageSize * 2; + static const int BlockSize = ClusterSize * 8; + static const int EccSize = 0x10; + static const int PageSizeRaw = PageSize + EccSize; + static const int ClusterSizeRaw = PageSizeRaw * 2; + static const int BlockSizeRaw = ClusterSizeRaw * 8; + static const int TotalPages = 0x4000; + static const int TotalClusters = TotalPages / 2; + static const int TotalBlocks = TotalClusters / 8; + static const int TotalSizeRaw = TotalPages * PageSizeRaw; + + static const u32 IndirectFatUnused = 0xFFFFFFFFu; + static const u32 LastDataCluster = 0x7FFFFFFFu; + static const u32 NextDataClusterMask = 0x7FFFFFFFu; + static const u32 DataClusterInUseMask = 0x80000000u; + + static const int FramesAfterWriteUntilFlush = 2; + +protected: + union superBlockUnion { + superblock data; + u8 raw[BlockSize]; + } m_superBlock; + union indirectFatUnion { + u32 data[IndirectFatClusterCount][ClusterSize / 4]; + u8 raw[IndirectFatClusterCount][ClusterSize]; + } m_indirectFat; + union fatUnion { + u32 data[IndirectFatClusterCount][ClusterSize / 4][ClusterSize / 4]; + u8 raw[IndirectFatClusterCount][ClusterSize / 4][ClusterSize]; + } m_fat; + u8 m_backupBlock1[BlockSize]; + union backupBlock2Union { + u32 programmedBlock; + u8 raw[BlockSize]; + } m_backupBlock2; + + // stores directory and file metadata + std::map m_fileEntryDict; + // quick-access map of related file entry metadata for each memory card FAT cluster that contains file data + std::map m_fileMetadataQuickAccess; + + // holds a copy of modified pages of the memory card before they're flushed to the file system + std::map m_cache; + // contains the state of how the data looked before the first write to it + // used to reduce the amount of disk I/O by not re-writing unchanged data that just happened to be + // touched in memory due to how actual physical memory cards have to erase and rewrite in blocks + std::map m_oldDataCache; + // if > 0, the amount of frames until data is flushed to the file system + // reset to FramesAfterWriteUntilFlush on each write + int m_framesUntilFlush; + // used to figure out if contents were changed for savestate-related purposes, see GetCRC() + u64 m_timeLastWritten; + + // remembers and keeps the last accessed file open for further access + FileAccessHelper m_lastAccessedFile; + + // path to the folder that contains the files of this memory card + wxFileName m_folderName; + + // PS2 memory card slot this card is inserted into + uint m_slot; + + bool m_isEnabled; + + // if set to false, nothing is actually written to the file system while flushing, and data is discarded instead + bool m_performFileWrites; + +public: + FolderMemoryCard(); + virtual ~FolderMemoryCard() throw() {} + + void Lock(); + void Unlock(); + + // Initialize & Load Memory Card with values configured in the Memory Card Manager + void Open( const bool enableFiltering, const wxString& filter ); + // Initialize & Load Memory Card with provided custom values + void Open( const wxString& fullPath, const AppConfig::McdOptions& mcdOptions, const u32 sizeInClusters, const bool enableFiltering, const wxString& filter, bool simulateFileWrites = false ); + // Close the memory card and flush changes to the file system. Set flush to false to not store changes. + void Close( bool flush = true ); + + s32 IsPresent() const; + void GetSizeInfo( PS2E_McdSizeInfo& outways ) const; + bool IsPSX() const; + s32 Read( u8 *dest, u32 adr, int size ); + s32 Save( const u8 *src, u32 adr, int size ); + s32 EraseBlock( u32 adr ); + u64 GetCRC() const; + + void SetSlot( uint slot ); + + u32 GetSizeInClusters() const; + + // WARNING: The intended use-case for this is resetting back to 8MB if a differently-sized superblock was loaded + // setting to a different size is untested and will probably not work correctly + void SetSizeInClusters( u32 clusters ); + // see SetSizeInClusters() + void SetSizeInMB( u32 megaBytes ); + + // called once per frame, used for flushing data after FramesAfterWriteUntilFlush frames of no writes + void NextFrame(); + + static void CalculateECC( u8* ecc, const u8* data ); + + void WriteToFile( const wxString& filename ); + +protected: + // initializes memory card data, as if it was fresh from the factory + void InitializeInternalData(); + + bool IsFormatted() const; + + // returns the in-memory address of data the given memory card adr corresponds to + // returns nullptr if adr corresponds to a folder or file entry + u8* GetSystemBlockPointer( const u32 adr ); + + // returns in-memory address of file or directory metadata searchCluster corresponds to + // returns nullptr if searchCluster contains something else + // - searchCluster: the cluster that is being accessed, relative to alloc_offset in the superblock + // - entryNumber: page of cluster + // - offset: offset of page + u8* GetFileEntryPointer( const u32 searchCluster, const u32 entryNumber, const u32 offset ); + + // used by GetFileEntryPointer to find the correct cluster + // returns nullptr if searchCluster is not a file or directory metadata cluster + // - currentCluster: the cluster we're currently traversing + // - searchCluster: the cluster we want + // - fileCount: the number of files left in the directory currently traversed + MemoryCardFileEntryCluster* GetFileEntryCluster( const u32 currentCluster, const u32 searchCluster, const u32 fileCount ); + + // returns file entry of the file at the given searchCluster + // the passed fileName will be filled with a path to the file being accessed + // returns nullptr if searchCluster contains no file + // call by passing: + // - currentCluster: the root directory cluster as indicated in the superblock + // - searchCluster: the cluster that is being accessed, relative to alloc_offset in the superblock + // - fileName: wxFileName of the root directory of the memory card folder in the host file system (filename part doesn't matter) + // - originalDirCount: the point in fileName where to insert the found folder path, usually fileName->GetDirCount() + // - outClusterNumber: the cluster's sequential number of the file will be written to this pointer, + // which can be used to calculate the in-file offset of the address being accessed + MemoryCardFileEntry* GetFileEntryFromFileDataCluster( const u32 currentCluster, const u32 searchCluster, wxFileName* fileName, const size_t originalDirCount, u32* outClusterNumber ); + + + // loads files and folders from the host file system if a superblock exists in the root directory + // - sizeInClusters: total memory card size in clusters, 0 for default + // - enableFiltering: if set to true, only folders whose name contain the filter string are loaded + // - filter: can include multiple filters by separating them with "/" + void LoadMemoryCardData( const u32 sizeInClusters, const bool enableFiltering, const wxString& filter ); + + // creates the FAT and indirect FAT + void CreateFat(); + + // creates file entries for the root directory + void CreateRootDir(); + + + // returns the system cluster past the highest used one (will be the lowest free one under normal use) + // this is used for creating the FAT, don't call otherwise unless you know exactly what you're doing + u32 GetFreeSystemCluster() const; + + // returns the total amount of data clusters available on the memory card, both used and unused + u32 GetAmountDataClusters() const; + + // returns the lowest unused data cluster, relative to alloc_offset in the superblock + // returns 0xFFFFFFFFu when the memory card is full + u32 GetFreeDataCluster() const; + + // returns the amount of unused data clusters + u32 GetAmountFreeDataClusters() const; + + // returns the final cluster of the file or directory which is (partially) stored in the given cluster + u32 GetLastClusterOfData( const u32 cluster ) const; + + + // creates and returns a new file entry in the given directory entry, ready to be filled + // returns nullptr when the memory card is full + MemoryCardFileEntry* AppendFileEntryToDir( const MemoryCardFileEntry* const dirEntry ); + + // adds a folder in the host file system to the memory card, including all files and subdirectories + // - dirEntry: the entry of the directory in the parent directory, or the root "." entry + // - dirPath: the full path to the directory in the host file system + // - parent: pointer to the parent dir's quick-access reference element + // - enableFiltering and filter: filter loaded contents, see LoadMemoryCardData() + bool AddFolder( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, MemoryCardFileMetadataReference* parent = nullptr, const bool enableFiltering = false, const wxString& filter = L"" ); + + // adds a file in the host file sytem to the memory card + // - dirEntry: the entry of the directory in the parent directory, or the root "." entry + // - dirPath: the full path to the directory containing the file in the host file system + // - fileName: the name of the file, without path + // - parent: pointer to the parent dir's quick-access reference element + bool AddFile( MemoryCardFileEntry* const dirEntry, const wxString& dirPath, const wxString& fileName, MemoryCardFileMetadataReference* parent = nullptr ); + + // calculates the amount of clusters a directory would use up if put into a memory card + u32 CalculateRequiredClustersOfDirectory( const wxString& dirPath ) const; + + + // adds a file to the quick-access dictionary, so it can be accessed more efficiently (ie, without searching through the entire file system) later + // returns the MemoryCardFileMetadataReference of the first file cluster, or nullptr if the file is zero-length + MemoryCardFileMetadataReference* AddFileEntryToMetadataQuickAccess( MemoryCardFileEntry* const entry, MemoryCardFileMetadataReference* const parent ); + + // creates a reference to a directory entry, so it can be passed as parent to other files/directories + MemoryCardFileMetadataReference* AddDirEntryToMetadataQuickAccess( MemoryCardFileEntry* const entry, MemoryCardFileMetadataReference* const parent ); + + + // read data from the memory card, ignoring the cache + // do NOT attempt to read ECC with this method, it will not work + void ReadDataWithoutCache( u8* const dest, const u32 adr, const u32 dataLength ); + + + bool ReadFromFile( u8 *dest, u32 adr, u32 dataLength ); + bool WriteToFile( const u8* src, u32 adr, u32 dataLength ); + + + // flush the whole cache to the internal data and/or host file system + void Flush(); + + // flush a single page of the cache to the internal data and/or host file system + bool FlushPage( const u32 page ); + + // flush a memory card cluster of the cache to the internal data and/or host file system + bool FlushCluster( const u32 cluster ); + + // flush a whole memory card block of the cache to the internal data and/or host file system + bool FlushBlock( const u32 block ); + + // flush the superblock to the internal data and/or host file system + void FlushSuperBlock(); + + // flush all directory and file entries to the internal data + void FlushFileEntries(); + + // flush a directory's file entries and all its subdirectories to the internal data + void FlushFileEntries( const u32 dirCluster, const u32 remainingFiles, const wxString& dirPath = L"", MemoryCardFileMetadataReference* parent = nullptr ); + + // "delete" (prepend '_pcsx2_deleted_' to) any files that exist in oldFileEntries but no longer exist in m_fileEntryDict + // also calls RemoveUnchangedDataFromCache() since both operate on comparing with the old file entires + void FlushDeletedFilesAndRemoveUnchangedDataFromCache( const std::vector& oldFileEntries ); + + // recursive worker method of the above + // - newCluster: Current directory dotdir cluster of the new entries. + // - newFileCount: Number of file entries in the new directory. + // - dirPath: Path to the current directory relative to the root of the memcard. Must be identical for both entries. + void FlushDeletedFilesAndRemoveUnchangedDataFromCache( const std::vector& oldFileEntries, const u32 newCluster, const u32 newFileCount, const wxString& dirPath ); + + // try and remove unchanged data from m_cache + // oldEntry and newEntry should be equivalent entries found by FindEquivalent() + void RemoveUnchangedDataFromCache( const MemoryCardFileEntry* const oldEntry, const MemoryCardFileEntry* const newEntry ); + + // write data as Save() normally would, but ignore the cache; used for flushing + s32 WriteWithoutCache( const u8 *src, u32 adr, int size ); + + // copies the contents of m_fileEntryDict into the tree structure fileEntryTree + void CopyEntryDictIntoTree( std::vector* fileEntryTree, const u32 cluster, const u32 fileCount ); + + // find equivalent (same name and type) of searchEntry in m_fileEntryDict in the directory indicated by cluster + const MemoryCardFileEntry* FindEquivalent( const MemoryCardFileEntry* searchEntry, const u32 cluster, const u32 fileCount ); + + void SetTimeLastReadToNow(); + void SetTimeLastWrittenToNow(); + + + wxString GetDisabledMessage( uint slot ) const { + return wxsFormat( pxE( L"The PS2-slot %d has been automatically disabled. You can correct the problem\nand re-enable it at any time using Config:Memory cards from the main menu." + ), slot//TODO: translate internal slot index to human-readable slot description + ); + } + wxString GetCardFullMessage( const wxString& filePath ) const { + return wxsFormat( pxE( L"(FolderMcd) Memory Card is full, could not add: %s" ), WX_STR( filePath ) ); + } +}; + +// -------------------------------------------------------------------------------------- +// FolderMemoryCardAggregator +// -------------------------------------------------------------------------------------- +// Forwards the API's requests for specific memory card slots to the correct FolderMemoryCard. +class FolderMemoryCardAggregator { +protected: + static const int TotalCardSlots = 8; + FolderMemoryCard m_cards[TotalCardSlots]; + + // stores the specifics of the current filtering settings, so they can be + // re-applied automatically when memory cards are reloaded + bool m_enableFiltering = true; + wxString m_lastKnownFilter = L""; + +public: + FolderMemoryCardAggregator(); + virtual ~FolderMemoryCardAggregator() throw( ) {} + + void Open(); + void Close(); + + void SetFiltering( const bool enableFiltering ); + + s32 IsPresent( uint slot ); + void GetSizeInfo( uint slot, PS2E_McdSizeInfo& outways ); + bool IsPSX( uint slot ); + s32 Read( uint slot, u8 *dest, u32 adr, int size ); + s32 Save( uint slot, const u8 *src, u32 adr, int size ); + s32 EraseBlock( uint slot, u32 adr ); + u64 GetCRC( uint slot ); + void NextFrame( uint slot ); + void ReIndex( uint slot, const bool enableFiltering, const wxString& filter ); +}; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MessageBoxes.cpp pcsx2-1.4.0/pcsx2/gui/MessageBoxes.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MessageBoxes.cpp 2010-08-06 05:46:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MessageBoxes.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -15,6 +15,7 @@ #include "PrecompiledHeader.h" #include "App.h" +#include "MSWstuff.h" #include "Dialogs/ModalPopups.h" using namespace Threading; @@ -36,7 +37,7 @@ // And in either case the emulation should be paused/suspended for the user. wxDialogWithHelpers dialog( NULL, caption ); - dialog.SetMinWidth( (content.Length() > 256) ? 525 : 460 ); + dialog.SetMinWidth( ((content.Length() > 256) ? 525 : 460) * MSW_GetDPIScale() ); dialog += dialog.Heading( content ) | StdExpand(); return pxIssueConfirmation( dialog, buttons ); } @@ -181,30 +182,12 @@ // true if OK, false if cancel. bool OkCancel( const wxString& text, const wxString& caption, int icon ) { - MsgButtons buttons( MsgButtons().OKCancel() ); - - if( wxThread::IsMain() ) - { - return wxID_OK == pxMessageDialog( caption, text, buttons ); - } - else - { - return wxID_OK == ShowModal( caption, text, buttons ); - } + return ShowModal(caption, text, MsgButtons().OKCancel()) == wxID_OK; } bool YesNo( const wxString& text, const wxString& caption, int icon ) { - MsgButtons buttons( MsgButtons().YesNo() ); - - if( wxThread::IsMain() ) - { - return wxID_YES == pxMessageDialog( caption, text, buttons ); - } - else - { - return wxID_YES == ShowModal( caption, text, buttons ); - } + return ShowModal(caption, text, MsgButtons().YesNo()) == wxID_YES; } int Assertion( const wxString& text, const wxString& stacktrace ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MSWstuff.cpp pcsx2-1.4.0/pcsx2/gui/MSWstuff.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/MSWstuff.cpp 2010-12-14 07:18:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MSWstuff.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -14,15 +14,11 @@ */ #include "PrecompiledHeader.h" -#include "GSFrame.h" #include "MSWstuff.h" -#include -#include #ifdef __WXMSW__ # include // needed for OutputDebugString -# include #endif void MSW_SetWindowAfter( WXWidget hwnd, WXWidget hwndAfter ) @@ -32,43 +28,17 @@ #endif } -void MSW_ListView_SetIconSpacing( wxListbook& listbook, int width ) +// Text scales automatically on Windows but that's about it. The dialog widths +// and images need to be scaled manually. +float MSW_GetDPIScale() { #ifdef __WXMSW__ - // Depending on Windows version and user appearance settings, the default icon spacing can be - // way over generous. This little bit of Win32-specific code ensures proper icon spacing, scaled - // to the size of the frame's ideal width. - - if (listbook.GetPageCount()) - { - ListView_SetIconSpacing( (HWND)listbook.GetListView()->GetHWND(), - (width / listbook.GetPageCount()) - 4, g_Conf->Listbook_ImageSize+32 // y component appears to be ignored - ); - } + HDC screen = GetDC(0); + float scale = GetDeviceCaps(screen, LOGPIXELSX) / 96.0; // 96.0 dpi = 100% scale + ReleaseDC(NULL, screen); + + return scale; +#else + return 1.0; #endif } - -void MSW_ListView_SetIconSpacing( wxListbook* listbook, int width ) -{ - if( listbook == NULL ) return; - MSW_ListView_SetIconSpacing( *listbook, width ); -} - - -#ifdef __WXMSW__ -WXLRESULT GSPanel::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) -{ - switch ( message ) - { - case SC_SCREENSAVE: - case SC_MONITORPOWER: - if( m_HasFocus && g_Conf->GSWindow.DisableScreenSaver) - { - DevCon.WriteLn("Omg Screensaver adverted!"); - return 0; - } - break; - } - return _parent::MSWWindowProc(message, wParam, lParam); -} -#endif diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/MSWstuff.h pcsx2-1.4.0/pcsx2/gui/MSWstuff.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/MSWstuff.h 2010-05-20 12:23:13.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/MSWstuff.h 2016-01-05 17:28:08.000000000 +0000 @@ -15,12 +15,10 @@ #pragma once -class wxListbook; - +// FIXME: Missing some includes. extern void MSW_SetWindowAfter( WXWidget hwnd, WXWidget hwndAfter ); extern void MSW_OutputDebugString( const wxString& text ); -extern void MSW_ListView_SetIconSpacing( wxListbook& listbook, int width ); -extern void MSW_ListView_SetIconSpacing( wxListbook* listbook, int width ); +extern float MSW_GetDPIScale(); extern void pxDwm_Load(); extern void pxDwm_Unload(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/BiosSelectorPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/BiosSelectorPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/BiosSelectorPanel.cpp 2014-07-03 18:10:10.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/BiosSelectorPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -54,12 +54,8 @@ void Panels::BaseSelectorPanel::OnShow(wxShowEvent& evt) { evt.Skip(); -#if defined (_MSC_VER) && (wxMAJOR_VERSION < 3) - if( !evt.GetShow() ) return; -#else - if( !evt.IsShown() ) return; -#endif - OnShown(); + if( evt.IsShown() ) + OnShown(); } void Panels::BaseSelectorPanel::OnShown() diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/ConfigurationPanels.h pcsx2-1.4.0/pcsx2/gui/Panels/ConfigurationPanels.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/ConfigurationPanels.h 2014-12-31 10:29:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/ConfigurationPanels.h 2016-01-05 17:28:08.000000000 +0000 @@ -177,6 +177,7 @@ pxRadioPanel* m_panel_RecIOP; pxCheckBox* m_check_EECacheEnable; AdvancedOptionsFPU* m_advancedOptsFpu; + wxButton *m_button_RestoreDefaults; public: CpuPanelEE( wxWindow* parent ); @@ -196,6 +197,7 @@ pxRadioPanel* m_panel_VU0; pxRadioPanel* m_panel_VU1; Panels::AdvancedOptionsVU* m_advancedOptsVu; + wxButton *m_button_RestoreDefaults; public: CpuPanelVU( wxWindow* parent ); @@ -324,6 +326,8 @@ pxCheckBox* m_check_Enable; wxButton* m_button_Defaults; + wxPanelWithHelpers* m_eeSliderPanel; + wxPanelWithHelpers* m_vuSliderPanel; wxSlider* m_slider_eecycle; wxSlider* m_slider_vustealer; pxStaticText* m_msg_eecycle; @@ -351,7 +355,6 @@ void OnEnable_Toggled( wxCommandEvent& evt ); void Defaults_Click( wxCommandEvent& evt ); - void Slider_Click(wxScrollEvent &event); void EECycleRate_Scroll(wxScrollEvent &event); void VUCycleRate_Scroll(wxScrollEvent &event); }; @@ -560,7 +563,10 @@ public: virtual ~EnumThread() throw() { - pxThread::Cancel(); + try { + pxThread::Cancel(); + } + DESTRUCTOR_CATCHALL } EnumThread( PluginSelectorPanel& master ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/CpuPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/CpuPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/CpuPanel.cpp 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/CpuPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -74,8 +74,9 @@ void Panels::BaseAdvancedCpuOptions::RestoreDefaults() { - m_RoundModePanel->SetSelection( 3 ); // Roundmode chop - m_ClampModePanel->SetSelection( 1 ); // clamp mode normal + AppConfig def; // created with default values + def.EnablePresets = false; // disable presets otherwise it'll disable some widgets + ApplyConfigToGui(def); } Panels::AdvancedOptionsFPU::AdvancedOptionsFPU( wxWindow* parent ) @@ -166,7 +167,8 @@ *this += (m_advancedOptsFpu = new AdvancedOptionsFPU( this )) | StdExpand(); *this += 12; - *this += new wxButton( this, wxID_DEFAULT, _("Restore Defaults")) | StdButton(); + m_button_RestoreDefaults = new wxButton(this, wxID_DEFAULT, _("Restore Defaults")); + *this += m_button_RestoreDefaults | StdButton(); Connect( wxID_DEFAULT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CpuPanelEE::OnRestoreDefaults ) ); } @@ -220,7 +222,8 @@ *this += ( m_advancedOptsVu=new AdvancedOptionsVU( this )) | StdExpand(); *this += 12; - *this += new wxButton( this, wxID_DEFAULT, _("Restore Defaults") ) | StdButton(); + m_button_RestoreDefaults = new wxButton(this, wxID_DEFAULT, _("Restore Defaults")); + *this += m_button_RestoreDefaults | StdButton(); Connect( wxID_DEFAULT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CpuPanelVU::OnRestoreDefaults ) ); } @@ -249,8 +252,8 @@ m_panel_RecIOP->Enable(!configToApply.EnablePresets); m_check_EECacheEnable ->SetValue(recOps.EnableEECache); - - this->Enable(!configToApply.EnablePresets); + m_check_EECacheEnable->Enable(!configToApply.EnablePresets); + m_button_RestoreDefaults->Enable(!configToApply.EnablePresets); if( flags & AppConfig::APPLY_FLAG_MANUALLY_PROPAGATE ) { @@ -260,8 +263,9 @@ void Panels::CpuPanelEE::OnRestoreDefaults(wxCommandEvent &evt) { - m_panel_RecEE->SetSelection( m_panel_RecEE->GetButton(1)->IsEnabled() ? 1 : 0 ); - m_panel_RecIOP->SetSelection( m_panel_RecIOP->GetButton(1)->IsEnabled() ? 1 : 0 ); + AppConfig def; // created with default values + def.EnablePresets = false; // disable presets otherwise it'll disable some widgets + ApplyConfigToGui(def); if( BaseAdvancedCpuOptions* opts = (BaseAdvancedCpuOptions*)FindWindowByName(L"AdvancedOptionsFPU") ) opts->RestoreDefaults(); @@ -321,9 +325,9 @@ m_panel_VU1->SetSelection( recOps.EnableVU1 ? 1 : 0 ); #endif - this->Enable(!configToApply.EnablePresets); m_panel_VU0->Enable(!configToApply.EnablePresets); m_panel_VU1->Enable(!configToApply.EnablePresets); + m_button_RestoreDefaults->Enable(!configToApply.EnablePresets); if ( flags & AppConfig::APPLY_FLAG_MANUALLY_PROPAGATE ) { @@ -334,8 +338,9 @@ void Panels::CpuPanelVU::OnRestoreDefaults(wxCommandEvent &evt) { - m_panel_VU0->SetSelection( m_panel_VU0->GetButton(1)->IsEnabled() ? 1 : 0 ); - m_panel_VU1->SetSelection( m_panel_VU1->GetButton(1)->IsEnabled() ? 1 : 0 ); + AppConfig def; // created with default values + def.EnablePresets = false; // disable presets otherwise it'll disable some widgets + ApplyConfigToGui(def); if( BaseAdvancedCpuOptions* opts = (BaseAdvancedCpuOptions*)FindWindowByName(L"AdvancedOptionsVU") ) opts->RestoreDefaults(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/GameFixesPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/GameFixesPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/GameFixesPanel.cpp 2014-08-01 13:04:34.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/GameFixesPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -97,7 +97,7 @@ wxEmptyString }, { - _("Switch to GSdx software rendering when a FMV plays"), + _("Switch to GSdx software rendering when an FMV plays"), wxEmptyString }, { @@ -113,7 +113,7 @@ } m_check_Enable = new pxCheckBox( this, _("Enable manual game fixes [Not recommended]"), - pxE( L"It's better to enable 'Automatic game fixes' at the main menu instead, and leave this page empty. ('Automatic' means: selectively use specific tested fixes for specific games)" + pxE( L"It's better to enable 'Automatic game fixes' at the main menu instead, and leave this page empty. ('Automatic' means: selectively use specific tested fixes for specific games). Manual game fixes will NOT increase your performance. In fact they may decrease it." ) ); @@ -146,6 +146,8 @@ if( !configToUse ) configToUse = g_Conf; for (GamefixId i=GamefixId_FIRST; i < pxEnumEnd; ++i) m_checkbox[i]->Enable(m_check_Enable->GetValue() && !configToUse->EnablePresets); + + Layout(); } void Panels::GameFixesPanel::OnEnable_Toggled( wxCommandEvent& evt ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/LogOptionsPanels.h pcsx2-1.4.0/pcsx2/gui/Panels/LogOptionsPanels.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/LogOptionsPanels.h 2010-08-06 05:46:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/LogOptionsPanels.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,8 +28,8 @@ wxStaticBoxSizer* m_miscGroup; public: - BaseCpuLogOptionsPanel( wxWindow* parent, const wxString& title, wxOrientation orient=wxVERTICAL ) - : CheckedStaticBox( parent, orient, title ) {} + BaseCpuLogOptionsPanel(wxWindow* parent, const wxString& title, wxOrientation orient = wxVERTICAL) + : CheckedStaticBox(parent, orient, title), m_miscGroup(NULL){} virtual wxStaticBoxSizer* GetMiscGroup() const { return m_miscGroup; } virtual CheckedStaticBox* GetStaticBox( const wxString& subgroup ) const=0; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardListPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardListPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardListPanel.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardListPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -30,6 +30,11 @@ #include +static wxDataFormat drag_drop_format(L"PCSX2McdDragDrop"); + +bool CopyDirectory( const wxString& from, const wxString& to ); +bool RemoveDirectory( const wxString& dirname ); + using namespace pxSizerFlags; using namespace Panels; @@ -54,19 +59,48 @@ { dest.IsFormatted = false; dest.IsPresent = false; + dest.IsPSX = false; + dest.Type = MemoryCardType::MemoryCard_None; const wxString fullpath( filename.GetFullPath() ); - if( !filename.FileExists() ) return false; - //DevCon.WriteLn( fullpath ); - wxFFile mcdFile( fullpath ); - if( !mcdFile.IsOpened() ) return false; // wx should log the error for us. + if ( filename.FileExists() ) { + // might be a memory card file + wxFFile mcdFile( fullpath ); + if ( !mcdFile.IsOpened() ) { return false; } // wx should log the error for us. - wxFileOffset length = mcdFile.Length(); + wxFileOffset length = mcdFile.Length(); - if( length < (1024*528) && length != 0x20000 ) - { - Console.Warning( "... MemoryCard appears to be truncated. Ignoring." ); + if( length < (1024*528) && length != 0x20000 ) + { + Console.Warning( "... MemoryCard appears to be truncated. Ignoring." ); + return false; + } + + dest.SizeInMB = (uint)( length / ( 1024 * 528 * 2 ) ); + + if ( length == 0x20000 ) { + dest.IsPSX = true; // PSX memcard; + dest.SizeInMB = 1; // MegaBIT + } + + dest.Type = MemoryCardType::MemoryCard_File; + dest.IsFormatted = IsMcdFormatted( mcdFile ); + filename.GetTimes( NULL, &dest.DateModified, &dest.DateCreated ); + } else if ( filename.DirExists() ) { + // might be a memory card folder + wxFileName superBlockFileName( fullpath, L"_pcsx2_superblock" ); + if ( !superBlockFileName.FileExists() ) { return false; } + wxFFile mcdFile( superBlockFileName.GetFullPath() ); + if ( !mcdFile.IsOpened() ) { return false; } + + dest.SizeInMB = 0; + + dest.Type = MemoryCardType::MemoryCard_Folder; + dest.IsFormatted = IsMcdFormatted( mcdFile ); + superBlockFileName.GetTimes( NULL, &dest.DateModified, &dest.DateCreated ); + } else { + // is neither return false; } @@ -74,18 +108,7 @@ dest.Filename = filename; if( filename.GetFullPath() == (basePath+filename.GetFullName()).GetFullPath() ) dest.Filename = filename.GetFullName(); - - dest.SizeInMB = (uint)(length / (1024 * 528 * 2)); - - if(length == 0x20000) - { - dest.IsPSX = true; // PSX memcard; - dest.SizeInMB = 1; // MegaBIT - } - dest.IsFormatted = IsMcdFormatted( mcdFile ); - filename.GetTimes( NULL, &dest.DateModified, &dest.DateCreated ); - return true; } @@ -167,6 +190,8 @@ ); m_listview = NULL; + s_leftside_buttons = NULL; + s_rightside_buttons = NULL; m_btn_Refresh = new wxButton( this, wxID_ANY, _("Refresh list") ); @@ -240,76 +265,6 @@ } } -// -------------------------------------------------------------------------------------- -// McdDataObject -// -------------------------------------------------------------------------------------- -class WXDLLEXPORT McdDataObject : public wxDataObjectSimple -{ - DECLARE_NO_COPY_CLASS(McdDataObject) - -protected: - int m_viewIndex; - -public: - McdDataObject(int viewIndex = -1) -#ifdef __linux__ - // XXX: On linux drag and drop doesn't work. I think wxDF_PRIVATE is a MS extension. - // Besides it will raise on assertion on wx3.0. - // - // wxDF_FILENAME returns the filename of the memory card dropped. Maybe code can be updated - // to use it. However Model/view stuff is not my cup of tea so I will - // let others improve it on linux. --Greg - : wxDataObjectSimple( /*wxDF_FILENAME*/ ) -#else - : wxDataObjectSimple( wxDF_PRIVATE ) -#endif - { - m_viewIndex = viewIndex; - } - - uint GetViewIndex() const - { - pxAssertDev( m_viewIndex >= 0, "memory card view-Index is uninitialized (invalid drag&drop object state)" ); - return (uint)m_viewIndex; - } - - size_t GetDataSize() const - { - return sizeof(u32); - } - - bool GetDataHere(void *buf) const - { - *(u32*)buf = GetViewIndex(); - return true; - } - - virtual bool SetData(size_t len, const void *buf) - { - if( !pxAssertDev( len == sizeof(u32), "Data length mismatch on memory card drag&drop operation." ) ) return false; - - m_viewIndex = *(u32*)buf; - return true;//( (uint)m_viewIndex < 8 ); // sanity check (unsigned, so that -1 also is invalid) :) - } - - // Must provide overloads to avoid hiding them (and warnings about it) - virtual size_t GetDataSize(const wxDataFormat&) const - { - return GetDataSize(); - } - - virtual bool GetDataHere(const wxDataFormat&, void *buf) const - { - return GetDataHere(buf); - } - - virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) - { - return SetData(len, buf); - } -}; - - class McdDropTarget : public wxDropTarget { protected: @@ -319,52 +274,11 @@ McdDropTarget( BaseMcdListView* listview=NULL ) { m_listview = listview; - SetDataObject(new McdDataObject()); + SetDataObject(new wxCustomDataObject(drag_drop_format)); } - // these functions are called when data is moved over position (x, y) and - // may return either wxDragCopy, wxDragMove or wxDragNone depending on - // what would happen if the data were dropped here. - // - // the last parameter is what would happen by default and is determined by - // the platform-specific logic (for example, under Windows it's wxDragCopy - // if Ctrl key is pressed and wxDragMove otherwise) except that it will - // always be wxDragNone if the carried data is in an unsupported format. - - - // called when the mouse moves in the window - shouldn't take long to - // execute or otherwise mouse movement would be too slow. - virtual wxDragResult OnDragOver(wxCoord x, wxCoord y, wxDragResult def) - { - int flags = 0; - int viewIndex = m_listview->HitTest( wxPoint(x,y), flags); - m_listview->SetTargetedItem( viewIndex ); - - // can always drop. non item target is the filesystem placeholder. //if( wxNOT_FOUND == viewIndex ) return wxDragNone; - - return def; - } - - virtual void OnLeave() - { - m_listview->SetTargetedItem( wxNOT_FOUND ); - } - - // this function is called when data is dropped at position (x, y) - if it - // returns true, OnData() will be called immediately afterwards which will - // allow to retrieve the data dropped. - virtual bool OnDrop(wxCoord x, wxCoord y) - { - int flags = 0; - int viewIndex = m_listview->HitTest( wxPoint(x,y), flags); - return true;// can always drop. non item target is the filesystem placeholder.//( wxNOT_FOUND != viewIndex ); - } - - // may be called *only* from inside OnData() and will fill m_dataObject - // with the data from the drop source if it returns true virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def) { - m_listview->SetTargetedItem( wxNOT_FOUND ); int flags = 0; int destViewIndex = m_listview->HitTest( wxPoint(x,y), flags); @@ -374,8 +288,13 @@ if ( !GetData() ) return wxDragNone; - McdDataObject *dobj = (McdDataObject *)GetDataObject(); - int sourceViewIndex = dobj->GetViewIndex(); + wxCustomDataObject *dobj = static_cast(GetDataObject()); + + if (dobj->GetDataSize() != sizeof(int)) + return wxDragNone; + + int sourceViewIndex; + dobj->GetDataHere(&sourceViewIndex); wxDragResult result = OnDropMcd( m_listview->GetMcdProvider().GetCardForViewIndex( sourceViewIndex ), @@ -448,6 +367,7 @@ McdMenuId_RefreshList, McdMenuId_AssignUnassign, McdMenuId_Duplicate, + McdMenuId_Convert, }; @@ -474,6 +394,7 @@ m_button_Duplicate = new wxButton(this, wxID_ANY, _("Duplicate ...")); m_button_Rename = new wxButton(this, wxID_ANY, _("Rename ...")); m_button_Create = new wxButton(this, wxID_ANY, _("Create ...")); + m_button_Convert = new wxButton(this, wxID_ANY, _("Convert ...")); // ------------------------------------ // Sizer / Layout Section @@ -493,6 +414,8 @@ *s_leftside_buttons += m_button_Rename; *s_leftside_buttons += 2; *s_leftside_buttons += m_button_Create; + *s_leftside_buttons += 2; + *s_leftside_buttons += m_button_Convert; SetSizerAndFit(GetSizer()); parent->SetWindowStyle(parent->GetWindowStyle() | wxRESIZE_BORDER); @@ -508,12 +431,14 @@ // Connect( m_button_Mount->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnMountCard)); Connect( m_button_Create->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnCreateOrDeleteCard)); + Connect( m_button_Convert->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnConvertCard)); Connect( m_button_Rename->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnRenameFile)); Connect( m_button_Duplicate->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnDuplicateFile)); Connect( m_button_AssignUnassign->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnAssignUnassignFile)); // Popup Menu Connections! Connect( McdMenuId_Create, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnCreateOrDeleteCard) ); + Connect( McdMenuId_Convert, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnConvertCard) ); //Connect( McdMenuId_Mount, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnMountCard) ); Connect( McdMenuId_Rename, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnRenameFile) ); Connect( McdMenuId_AssignUnassign, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MemoryCardListPanel_Simple::OnAssignUnassignFile) ); @@ -544,6 +469,7 @@ m_button_Rename->Disable(); m_button_Duplicate->Disable(); m_button_AssignUnassign->Disable(); + m_button_Convert->Disable(); return; } @@ -563,6 +489,8 @@ wxString dupTip = _("Create a duplicate of this memory card ..."); pxSetToolTip( m_button_Duplicate, dupTip ); + m_button_Convert->Enable( card.IsPresent && card.IsFormatted && !card.IsPSX ); + //m_button_Create->Enable( card.Slot>=0 || card.IsPresent); m_button_Create->SetLabel( card.IsPresent ? _("Delete") : _("Create ...") ); @@ -588,13 +516,11 @@ { _parent::Apply(); - ScopedCoreThreadClose closed_core; - closed_core.AllowResume(); - int used=0; Console.WriteLn( L"Apply Memory cards:" ); for( uint slot=0; slot<8; ++slot ) { + g_Conf->Mcd[slot].Type = m_Cards[slot].Type; g_Conf->Mcd[slot].Enabled = m_Cards[slot].IsEnabled && m_Cards[slot].IsPresent; if (m_Cards[slot].IsPresent) g_Conf->Mcd[slot].Filename = m_Cards[slot].Filename; @@ -623,7 +549,7 @@ //automatically create the enabled but non-existing file such that it can be managed (else will get created anyway on boot) wxString targetFile = (GetMcdPath() + m_Cards[slot].Filename.GetFullName()).GetFullPath(); - if ( m_Cards[slot].IsEnabled && !wxFileExists( targetFile ) ) + if ( m_Cards[slot].IsEnabled && !( wxFileExists( targetFile ) || wxDirExists( targetFile ) ) ) { wxString errMsg; if (isValidNewFilename(m_Cards[slot].Filename.GetFullName(), GetMcdPath(), errMsg, 5)) @@ -639,7 +565,7 @@ } } - if ( !m_Cards[slot].IsEnabled || !wxFileExists( targetFile ) ) + if ( !m_Cards[slot].IsEnabled || !( wxFileExists( targetFile ) || wxDirExists( targetFile ) ) ) { m_Cards[slot].IsEnabled = false; m_Cards[slot].IsPresent = false; @@ -705,8 +631,6 @@ return; } - ScopedCoreThreadClose closed_core; - Dialogs::CreateMemoryCardDialog dialog( this, m_FolderPicker->GetPath(), L"my memory card" ); wxWindowID result = dialog.ShowModal(); @@ -725,9 +649,26 @@ Apply(); RefreshSelections(); - closed_core.AllowResume(); } +void Panels::MemoryCardListPanel_Simple::UiConvertCard( McdSlotItem& card ) { + if ( !card.IsPresent ) { + Console.WriteLn( "Error: Aborted: Convert mcd invoked but but a file is not associated." ); + return; + } + + AppConfig::McdOptions config; + config.Filename = card.Filename.GetFullName(); + config.Enabled = card.IsEnabled; + config.Type = card.Type; + Dialogs::ConvertMemoryCardDialog dialog( this, m_FolderPicker->GetPath(), config ); + wxWindowID result = dialog.ShowModal(); + + if ( result != wxID_CANCEL ) { + Apply(); + RefreshSelections(); + } +} void Panels::MemoryCardListPanel_Simple::UiDeleteCard( McdSlotItem& card ) { @@ -751,16 +692,19 @@ if( result ) { - ScopedCoreThreadClose closed_core; wxFileName fullpath( m_FolderPicker->GetPath() + card.Filename.GetFullName()); card.IsEnabled=false; Apply(); - wxRemoveFile( fullpath.GetFullPath() ); + + if ( fullpath.FileExists() ) { + wxRemoveFile( fullpath.GetFullPath() ); + } else { + RemoveDirectory( fullpath.GetFullPath() ); + } RefreshSelections(); - closed_core.AllowResume(); } } @@ -815,9 +759,9 @@ wxFileName destfile( basepath + dest.Filename); ScopedBusyCursor doh( Cursor_ReallyBusy ); - ScopedCoreThreadClose closed_core; - if( !wxCopyFile( srcfile.GetFullPath(), destfile.GetFullPath(), true ) ) + if( !( ( srcfile.FileExists() && wxCopyFile( srcfile.GetFullPath(), destfile.GetFullPath(), true ) ) + || ( !srcfile.FileExists() && CopyDirectory( srcfile.GetFullPath(), destfile.GetFullPath() ) ) ) ) { wxString heading; heading.Printf( pxE( L"Failed: Destination memory card '%s' is in use." ), @@ -827,8 +771,7 @@ wxString content; Msgbox::Alert( heading + L"\n\n" + content, _("Copy failed!") ); - - closed_core.AllowResume(); + return false; } @@ -844,7 +787,6 @@ Apply(); DoRefresh(); - closed_core.AllowResume(); return true; } @@ -881,8 +823,6 @@ break; } - ScopedCoreThreadClose closed_core; - bool origEnabled=card.IsEnabled; card.IsEnabled=false; Apply(); @@ -891,8 +831,7 @@ card.IsEnabled=origEnabled; Apply(); Msgbox::Alert( _("Error: Rename could not be completed.\n"), _("Rename memory card") ); - - closed_core.AllowResume(); + return; } @@ -901,7 +840,6 @@ Apply(); RefreshSelections(); - closed_core.AllowResume(); } void Panels::MemoryCardListPanel_Simple::OnCreateOrDeleteCard(wxCommandEvent& evt) @@ -918,6 +856,18 @@ UiCreateNewCard( card ); } +void Panels::MemoryCardListPanel_Simple::OnConvertCard(wxCommandEvent& evt) { + int selectedViewIndex = m_listview->GetFirstSelected(); + if ( wxNOT_FOUND == selectedViewIndex ) { + return; + } + + McdSlotItem& card( GetCardForViewIndex( selectedViewIndex ) ); + if ( card.IsPresent ) { + UiConvertCard( card ); + } +} + //enable/disapbe port /* void Panels::MemoryCardListPanel_Simple::OnMountCard(wxCommandEvent& evt) @@ -1050,11 +1000,12 @@ int selectionViewIndex = m_listview->GetFirstSelected(); if( selectionViewIndex < 0 ) return; - McdDataObject my_data( selectionViewIndex ); + wxCustomDataObject my_data(drag_drop_format); + my_data.SetData(sizeof(int), &selectionViewIndex); wxDropSource dragSource( m_listview ); dragSource.SetData( my_data ); - /*wxDragResult result = */dragSource.DoDragDrop( wxDrag_AllowMove ); + /*wxDragResult result = */dragSource.DoDragDrop( wxDrag_DefaultMove ); } void Panels::MemoryCardListPanel_Simple::OnListSelectionChanged(wxListEvent& evt) @@ -1077,6 +1028,9 @@ junk->Append( McdMenuId_Duplicate, _("Duplicate card ...") ); junk->Append( McdMenuId_Rename, _("Rename card ...") ); junk->Append( McdMenuId_Create, _("Delete card") ); + if (card.IsFormatted && !card.IsPSX) { + junk->Append( McdMenuId_Convert, _("Convert card") ); + } } else junk->Append( McdMenuId_Create, _("Create a new card ...") ); @@ -1106,9 +1060,26 @@ wxArrayString memcardList; - wxDir::GetAllFiles(m_FolderPicker->GetPath().ToString(), &memcardList, L"*.ps2", wxDIR_FILES); - wxDir::GetAllFiles(m_FolderPicker->GetPath().ToString(), &memcardList, L"*.mcd", wxDIR_FILES); - wxDir::GetAllFiles(m_FolderPicker->GetPath().ToString(), &memcardList, L"*.mcr", wxDIR_FILES); + wxString filename = m_FolderPicker->GetPath().ToString(); + wxDir memcardDir( filename ); + if ( memcardDir.IsOpened() ) { + // add memory card files + wxDir::GetAllFiles( filename, &memcardList, L"*.ps2", wxDIR_FILES ); + wxDir::GetAllFiles( filename, &memcardList, L"*.mcd", wxDIR_FILES ); + wxDir::GetAllFiles( filename, &memcardList, L"*.mcr", wxDIR_FILES ); + + // add memory card folders + wxString dirname; + if ( memcardDir.GetFirst( &dirname, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN ) ) { + do { + wxFileName superBlockFileName( wxFileName( filename, dirname ).GetFullPath(), L"_pcsx2_superblock" ); + if ( superBlockFileName.FileExists() ) { + memcardList.Add( superBlockFileName.GetPath() ); + } + } while ( memcardDir.GetNext( &dirname ) ); + } + } + for(uint i = 0; i < memcardList.size(); i++) { McdSlotItem currentCardFile; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardListView.cpp pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardListView.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardListView.cpp 2014-06-29 10:42:58.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardListView.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -40,15 +40,6 @@ return *m_CardProvider; } -void BaseMcdListView::SetTargetedItem( int sel ) -{ - if( m_TargetedItem == sel ) return; - - if( m_TargetedItem >= 0 ) RefreshItem( m_TargetedItem ); - m_TargetedItem = sel; - RefreshItem( sel ); -} - void BaseMcdListView::LoadSaveColumns( IniInterface& ini ) { FastFormatUnicode label; @@ -156,11 +147,11 @@ return prefix + res; } */ - case McdColS_Size: return prefix + ( !it.IsPresent ? L"" : (it.IsPSX? pxsFmt( L"%u MBit", it.SizeInMB ) : pxsFmt( L"%u MiB", it.SizeInMB )) ); + case McdColS_Size: return prefix + ( !it.IsPresent ? L"" : (it.IsPSX? pxsFmt( L"%u MBit", it.SizeInMB ) : ( it.SizeInMB > 0 ? pxsFmt( L"%u MiB", it.SizeInMB ) : L"Auto" ) ) ); case McdColS_Formatted: return prefix + ( !it.IsPresent ? L"" : ( it.IsFormatted ? _("Yes") : _("No")) ); case McdColS_Type: return prefix + ( !it.IsPresent ? L"" : ( it.IsPSX? _("PSX") : _("PS2")) ); - case McdColS_DateModified: return prefix + ( !it.IsPresent ? L"" : it.DateModified.FormatDate() ); - case McdColS_DateCreated: return prefix + ( !it.IsPresent ? L"" : it.DateCreated.FormatDate() ); + case McdColS_DateModified: return prefix + ( !it.IsPresent || !it.DateModified.IsValid() ? L"" : it.DateModified.FormatDate() ); + case McdColS_DateCreated: return prefix + ( !it.IsPresent || !it.DateCreated.IsValid() ? L"" : it.DateCreated.FormatDate() ); case McdColS_Filename: { @@ -218,9 +209,6 @@ if( it.Slot==-1 || it.IsPresent && !it.IsEnabled) m_ItemAttr.SetTextColour( *wxLIGHT_GREY ); -/* - if( m_TargetedItem == item ) - m_ItemAttr.SetBackgroundColour( wxColour(L"Wheat") ); -*/ + return &m_ItemAttr; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardPanels.h pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardPanels.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MemoryCardPanels.h 2013-04-27 16:24:02.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/MemoryCardPanels.h 2016-01-05 17:28:08.000000000 +0000 @@ -40,6 +40,7 @@ { int Slot; //0-7: internal slot. -1: unrelated to an internal slot (the rest of the files at the folder). bool IsPresent; //Whether or not a file is associated with this item (true/false when 0<=Slot<=7. Always true when Slot==-1) + MemoryCardType Type; //The implementation used for this memory card //Only meaningful when IsPresent==true (a file exists for this item): wxFileName Filename; // full pathname @@ -61,11 +62,14 @@ McdSlotItem() { - Slot = -1; + Slot = -1; + SizeInMB = 0; + Type = MemoryCard_None; IsPSX = false; IsPresent = false; IsEnabled = false; + IsFormatted = false; } }; @@ -98,9 +102,6 @@ protected: IMcdList* m_CardProvider; - // specifies the target of a drag&drop operation - int m_TargetedItem; - public: void (*m_externHandler)(void); void setExternHandler(void (*f)(void)){m_externHandler=f;}; @@ -123,7 +124,6 @@ virtual const ListViewColumnInfo& GetDefaultColumnInfo( uint idx ) const=0; virtual IMcdList& GetMcdProvider(); - virtual void SetTargetedItem( int sel ); }; // -------------------------------------------------------------------------------------- @@ -211,6 +211,8 @@ // Doubles as Create and Delete buttons wxButton* m_button_Create; + + wxButton* m_button_Convert; // Doubles as Mount and Unmount buttons ("Enable"/"Disable" port) // wxButton* m_button_Mount; @@ -236,6 +238,7 @@ protected: void OnCreateOrDeleteCard(wxCommandEvent& evt); + void OnConvertCard(wxCommandEvent& evt); void OnMountCard(wxCommandEvent& evt); // void OnRelocateCard(wxCommandEvent& evt); void OnRenameFile(wxCommandEvent& evt); @@ -269,6 +272,7 @@ virtual void UiRenameCard( McdSlotItem& card ); virtual void UiCreateNewCard( McdSlotItem& card ); + virtual void UiConvertCard( McdSlotItem& card ); virtual void UiDeleteCard( McdSlotItem& card ); virtual void UiAssignUnassignFile( McdSlotItem& card ); @@ -284,6 +288,7 @@ protected: //pxCheckBox* m_check_Multitap[2]; pxCheckBox* m_check_Ejection; + pxCheckBox* m_folderAutoIndex; //moved to the system menu, just below "Save State" //pxCheckBox* m_check_SavestateBackup; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MiscPanelStuff.cpp pcsx2-1.4.0/pcsx2/gui/Panels/MiscPanelStuff.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/MiscPanelStuff.cpp 2014-12-31 10:29:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/MiscPanelStuff.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -113,7 +113,7 @@ compiled[i].Printf( L"%s", m_langs[i].englishName.c_str() ); m_picker = new wxComboBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, - size, compiled.GetPtr(), wxCB_READONLY | wxCB_SORT ); + size, compiled.GetPtr(), wxCB_READONLY); *this += 5; *this += m_picker | pxSizerFlags::StdSpace(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/PluginSelectorPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/PluginSelectorPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/PluginSelectorPanel.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/PluginSelectorPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -227,7 +227,7 @@ IMPLEMENT_DYNAMIC_CLASS(ApplyPluginsDialog, WaitForTaskDialog) ApplyPluginsDialog::ApplyPluginsDialog( BaseApplicableConfigPanel* panel ) - : WaitForTaskDialog( _("Applying settings...") ) +: WaitForTaskDialog(_("Applying settings...")), m_panel(NULL) { GetSysExecutorThread().PostEvent( new SysExecEvent_ApplyPlugins( this, m_sync ) ); } @@ -546,7 +546,7 @@ wxCommandEvent evt( pxEVT_ShowStatusBar ); GetEventHandler()->AddPendingEvent( evt ); - m_EnumeratorThread.Delete() = new EnumThread( *this ); + m_EnumeratorThread.Reassign(new EnumThread( *this )); if( DisableThreading ) m_EnumeratorThread->DoNextPlugin( 0 ); @@ -642,20 +642,16 @@ ScopedCoreThreadPause paused_core( new SysExecEvent_SaveSinglePlugin(pid) ); if (!CorePlugins.AreLoaded()) { - typedef void (CALLBACK* SetDirFnptr)( const char* dir ); - - if( SetDirFnptr func = (SetDirFnptr)dynlib.GetSymbol( tbl_PluginInfo[pid].GetShortname() + L"setSettingsDir" ) ) - { - func( GetSettingsFolder().ToString().mb_str(wxConvFile) ); - } - - if( SetDirFnptr func = (SetDirFnptr)dynlib.GetSymbol( tbl_PluginInfo[pid].GetShortname() + L"setLogDir" ) ) - { - func( GetLogFolder().ToString().mb_str(wxConvFile) ); - } + CorePlugins.Load(pid, filename); + CorePlugins.SendLogFolder(); + CorePlugins.SendSettingsFolder(); + configfunc(); + CorePlugins.Unload(pid); + } + else + { + configfunc(); } - - configfunc(); } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/SpeedhacksPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/SpeedhacksPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/SpeedhacksPanel.cpp 2012-08-10 10:10:55.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/SpeedhacksPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,18 +23,31 @@ { switch( val ) { + case -2: + { + m_msg_eecycle->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"-2 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* cause stuttering audio on many FMVs."); + } + case -1: + { + m_msg_eecycle->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"-1 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games with high compatibility."); + } + case 0: + { + m_msg_eecycle->SetForegroundColour(wxColour(14,158,19)); // Dark Green + return pxEt(L"0 - Default cyclerate. This closely matches the actual speed of a real PS2 EmotionEngine."); + } case 1: - return pxEt( L"1 - Default cyclerate. This closely matches the actual speed of a real PS2 EmotionEngine." - ); - + { + m_msg_eecycle->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"1 - Increases the EE's cyclerate by about 33%. Increases hardware requirements, may increase in-game FPS."); + } case 2: - return pxEt( L"2 - Reduces the EE's cyclerate by about 33%. Mild speedup for most games with high compatibility." - ); - - case 3: - return pxEt( L"3 - Reduces the EE's cyclerate by about 50%. Moderate speedup, but *will* cause stuttering audio on many FMVs." - ); - + { + m_msg_eecycle->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"2 - Increases the EE's cyclerate by about 50%. Greatly increases hardware requirements, may noticeably increase in-game FPS.\nThis setting can cause games to FAIL TO BOOT."); + } default: break; } @@ -47,21 +60,26 @@ switch( val ) { case 0: - return pxEt( L"0 - Disables VU Cycle Stealing. Most compatible setting!" - ); - + { + m_msg_vustealer->SetForegroundColour(wxColour(14,158,19)); // Dark Green + return pxEt(L"0 - Disables VU Cycle Stealing. Most compatible setting!"); + } case 1: - return pxEt( L"1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most games." - ); - + { + m_msg_vustealer->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"1 - Mild VU Cycle Stealing. Lower compatibility, but some speedup for most games."); + } case 2: - return pxEt( L"2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant speedups in some games." - ); - + { + m_msg_vustealer->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"2 - Moderate VU Cycle Stealing. Even lower compatibility, but significant speedups in some games."); + } case 3: + { // TODO: Mention specific games that benefit from this setting here. - return pxEt( L"3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause flickering visuals or slowdown in most games." - ); + m_msg_vustealer->SetForegroundColour(wxColour(L"Red")); + return pxEt(L"3 - Maximum VU Cycle Stealing. Usefulness is limited, as this will cause flickering visuals or slowdown in most games."); + } default: break; } @@ -106,16 +124,15 @@ // Cycle stealing works by 'fast-forwarding' the EE by an arbitrary number of cycles whenever VU1 micro-programs // are run, which works as a rough-guess skipping of what would normally be idle time spent running on the EE. - wxPanelWithHelpers* eeSliderPanel = new wxPanelWithHelpers( left, wxVERTICAL, _("EE Cyclerate [Not Recommended]") ); + m_eeSliderPanel = new wxPanelWithHelpers( left, wxVERTICAL, _("EE Cyclerate [Not Recommended]") ); - m_slider_eecycle = new wxSlider( eeSliderPanel, wxID_ANY, 1, 1, 3, + m_slider_eecycle = new wxSlider( m_eeSliderPanel, wxID_ANY, 0, -2, 2, wxDefaultPosition, wxDefaultSize, wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS ); - m_msg_eecycle = new pxStaticHeading( eeSliderPanel ); - m_msg_eecycle->SetForegroundColour( wxColour( L"Red" ) ); - m_msg_eecycle->SetHeight(3); + m_msg_eecycle = new pxStaticHeading( m_eeSliderPanel ); + m_msg_eecycle->SetHeight(5); - const wxChar* ee_tooltip = pxEt( L"Setting higher values on this slider effectively reduces the clock speed of the EmotionEngine's R5900 core cpu, and typically brings big speedups to games that fail to utilize the full potential of the real PS2 hardware." + const wxChar* ee_tooltip = pxEt( L"Setting lower values on this slider effectively reduces the clock speed of the EmotionEngine's R5900 core cpu, and typically brings big speedups to games that fail to utilize the full potential of the real PS2 hardware. Conversely, higher values effectively increase the clock speed which may bring about an increase in in-game FPS while also making games more demanding and possibly causing glitches." ); pxSetToolTip( m_slider_eecycle, ee_tooltip ); @@ -124,14 +141,13 @@ // ------------------------------------------------------------------------ // VU Cycle Stealing Hack Section: - wxPanelWithHelpers* vuSliderPanel = new wxPanelWithHelpers( right, wxVERTICAL, _("VU Cycle Stealing [Not Recommended]") ); + m_vuSliderPanel = new wxPanelWithHelpers( right, wxVERTICAL, _("VU Cycle Stealing [Not Recommended]") ); - m_slider_vustealer = new wxSlider( vuSliderPanel, wxID_ANY, 0, 0, 3, wxDefaultPosition, wxDefaultSize, + m_slider_vustealer = new wxSlider(m_vuSliderPanel, wxID_ANY, 0, 0, 3, wxDefaultPosition, wxDefaultSize, wxHORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS ); - m_msg_vustealer = new pxStaticHeading( vuSliderPanel ); - m_msg_vustealer->SetForegroundColour( wxColour( L"Red" ) ); - m_msg_vustealer->SetHeight(3); + m_msg_vustealer = new pxStaticHeading(m_vuSliderPanel); + m_msg_vustealer->SetHeight(5); const wxChar* vu_tooltip = pxEt( L"This slider controls the amount of cycles the VU unit steals from the EmotionEngine. Higher values increase the number of cycles stolen from the EE for each VU microprogram the game runs." ); @@ -191,24 +207,24 @@ //DefEnableSizer += pxStretchSpacer(1); //DefEnableSizer += m_check_Enable | StdExpand().Align( wxALIGN_RIGHT ); - *eeSliderPanel += m_slider_eecycle | sliderFlags; - *eeSliderPanel += m_msg_eecycle | sliderFlags; + *m_eeSliderPanel += m_slider_eecycle | sliderFlags; + *m_eeSliderPanel += m_msg_eecycle | sliderFlags; - *vuSliderPanel += m_slider_vustealer | sliderFlags; - *vuSliderPanel += m_msg_vustealer | sliderFlags; + *m_vuSliderPanel += m_slider_vustealer | sliderFlags; + *m_vuSliderPanel += m_msg_vustealer | sliderFlags; - *vuHacksPanel += m_check_vuFlagHack; - *vuHacksPanel += m_check_vuThread; + *vuHacksPanel += m_check_vuFlagHack | StdExpand(); + *vuHacksPanel += m_check_vuThread | StdExpand(); //*vuHacksPanel += 57; // Aligns left and right boxes in default language and font size - *miscHacksPanel += m_check_intc; - *miscHacksPanel += m_check_waitloop; - *miscHacksPanel += m_check_fastCDVD; + *miscHacksPanel += m_check_intc | StdExpand(); + *miscHacksPanel += m_check_waitloop | StdExpand(); + *miscHacksPanel += m_check_fastCDVD | StdExpand(); - *left += eeSliderPanel | StdExpand(); + *left += m_eeSliderPanel | StdExpand(); *left += miscHacksPanel | StdExpand(); - *right += vuSliderPanel | StdExpand(); + *right += m_vuSliderPanel | StdExpand(); *right += vuHacksPanel | StdExpand(); *right += StdPadding; *right += m_button_Defaults| StdButton(); @@ -219,39 +235,49 @@ *s_table+= left | pxExpand; *s_table+= right | pxExpand; - *this += m_check_Enable; + *this += m_check_Enable | StdExpand(); *this += new wxStaticLine( this ) | pxExpand.Border(wxLEFT | wxRIGHT, 20); *this += StdPadding; *this += s_table | pxExpand; // ------------------------------------------------------------------------ - Connect( wxEVT_SCROLL_PAGEUP, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( wxEVT_SCROLL_LINEUP, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( wxEVT_SCROLL_LINEDOWN, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( wxEVT_SCROLL_TOP, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( wxEVT_SCROLL_BOTTOM, wxScrollEventHandler( SpeedHacksPanel::Slider_Click ) ); - Connect( m_slider_eecycle->GetId(), wxEVT_SCROLL_CHANGED, wxScrollEventHandler( SpeedHacksPanel::EECycleRate_Scroll ) ); Connect( m_slider_vustealer->GetId(), wxEVT_SCROLL_CHANGED, wxScrollEventHandler( SpeedHacksPanel::VUCycleRate_Scroll ) ); Connect( m_check_Enable->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( SpeedHacksPanel::OnEnable_Toggled ) ); Connect( wxID_DEFAULT, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( SpeedHacksPanel::Defaults_Click ) ); } +// Doesn't modify values - only locks(gray out)/unlocks as necessary. void Panels::SpeedHacksPanel::EnableStuff( AppConfig* configToUse ) { if( !configToUse ) configToUse = g_Conf; - wxSizerItemList& items( s_table->GetChildren() ); - wxSizerItemList::iterator it = items.begin(); - wxSizerItemList::iterator end = items.end(); + bool hasPreset = configToUse->EnablePresets; + bool hacksEnabled = configToUse->EnableSpeedHacks; + bool HacksEnabledAndNoPreset = hacksEnabled && !hasPreset; + + // Main checkbox and Restore-defaults - locked only if presets are enabled + m_check_Enable->Enable(!hasPreset); + m_button_Defaults->Enable(!hasPreset); + + // lock/unlock the slider panels rather than the sliders themselves + // in order to affect both sliders and texts + m_eeSliderPanel->Enable(HacksEnabledAndNoPreset); + m_vuSliderPanel->Enable(HacksEnabledAndNoPreset); + + // checkboxes + m_check_vuFlagHack->Enable(HacksEnabledAndNoPreset); + m_check_intc->Enable(HacksEnabledAndNoPreset); + m_check_waitloop->Enable(HacksEnabledAndNoPreset); + m_check_fastCDVD->Enable(HacksEnabledAndNoPreset); - while( it != end ) - { - (*it)->GetWindow()->Enable( m_check_Enable->GetValue()); - ++it; - } + m_check_vuThread->Enable(hacksEnabled); // MTVU is unaffected by presets + + // Layout necessary to ensure changed slider text gets re-aligned properly + // and to properly gray/ungray pxStaticText stuff (I suspect it causes a + // paint event to be sent on Windows) + Layout(); } void Panels::SpeedHacksPanel::AppStatusEvent_OnSettingsApplied() @@ -262,42 +288,39 @@ void Panels::SpeedHacksPanel::ApplyConfigToGui( AppConfig& configToApply, int flags ) { - const bool enabled = configToApply.EnableSpeedHacks; Pcsx2Config::SpeedhackOptions& opts=configToApply.EmuOptions.Speedhacks; - m_check_Enable ->SetValue( !!enabled ).Enable(!configToApply.EnablePresets); + // First, set the values of the widgets (checked/unchecked etc). + m_check_Enable->SetValue(configToApply.EnableSpeedHacks); - m_slider_eecycle ->SetValue( opts.EECycleRate + 1 ); + m_slider_eecycle ->SetValue( opts.EECycleRate ); m_slider_vustealer ->SetValue( opts.VUCycleSteal ); - m_slider_eecycle->Enable(!configToApply.EnablePresets); - m_slider_vustealer->Enable(!configToApply.EnablePresets); SetEEcycleSliderMsg(); SetVUcycleSliderMsg(); - m_check_vuFlagHack ->SetValue(opts.vuFlagHack).Enable(!configToApply.EnablePresets); + m_check_vuFlagHack->SetValue(opts.vuFlagHack); if( !(flags & AppConfig::APPLY_FLAG_FROM_PRESET) ) m_check_vuThread ->SetValue(opts.vuThread); - m_check_intc ->SetValue(opts.IntcStat).Enable(!configToApply.EnablePresets); - m_check_waitloop ->SetValue(opts.WaitLoop).Enable(!configToApply.EnablePresets); - m_check_fastCDVD ->SetValue(opts.fastCDVD).Enable(!configToApply.EnablePresets); + m_check_intc->SetValue(opts.IntcStat); + m_check_waitloop->SetValue(opts.WaitLoop); + m_check_fastCDVD->SetValue(opts.fastCDVD); + // Then, lock(gray out)/unlock the widgets as necessary. EnableStuff( &configToApply ); - // Layout necessary to ensure changed slider text gets re-aligned properly - Layout(); - //Console.WriteLn("SpeedHacksPanel::ApplyConfigToGui: EnabledPresets: %s", configToApply.EnablePresets?"true":"false"); } - +// Apply the values from the widgets to the config, +// regardless if locked (grayed out) or not. void Panels::SpeedHacksPanel::Apply() { g_Conf->EnableSpeedHacks = m_check_Enable->GetValue(); Pcsx2Config::SpeedhackOptions& opts( g_Conf->EmuOptions.Speedhacks ); - opts.EECycleRate = m_slider_eecycle->GetValue()-1; + opts.EECycleRate = m_slider_eecycle->GetValue(); opts.VUCycleSteal = m_slider_vustealer->GetValue(); opts.WaitLoop = m_check_waitloop->GetValue(); @@ -315,6 +338,7 @@ { AppConfig tmp=*g_Conf; tmp.EnablePresets=false; //if clicked, button was enabled, so not using a preset --> let EnableStuff work + tmp.EnableSpeedHacks = m_check_Enable->GetValue(); EnableStuff( &tmp ); evt.Skip(); @@ -330,30 +354,6 @@ evt.Skip(); } -void Panels::SpeedHacksPanel::Slider_Click(wxScrollEvent &event) { - wxSlider* slider = (wxSlider*) event.GetEventObject(); - int value = slider->GetValue(); - int eventType = event.GetEventType(); - if (eventType == wxEVT_SCROLL_PAGEUP || eventType == wxEVT_SCROLL_LINEUP) { - if (value > slider->GetMin()) { - slider->SetValue(value-1); - } - } - else if (eventType == wxEVT_SCROLL_TOP) { - slider->SetValue(slider->GetMin()); - } - else if (eventType == wxEVT_SCROLL_PAGEDOWN || eventType == wxEVT_SCROLL_LINEDOWN) { - if (value < slider->GetMax()) { - slider->SetValue(value+1); - } - } - else if (eventType == wxEVT_SCROLL_BOTTOM) { - slider->SetValue(slider->GetMax()); - } - - event.Skip(); -} - void Panels::SpeedHacksPanel::EECycleRate_Scroll(wxScrollEvent &event) { SetEEcycleSliderMsg(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/VideoPanel.cpp pcsx2-1.4.0/pcsx2/gui/Panels/VideoPanel.cpp --- pcsx2-1.3.1+dfsg/pcsx2/gui/Panels/VideoPanel.cpp 2014-06-29 07:05:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Panels/VideoPanel.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -29,17 +29,15 @@ Panels::FramelimiterPanel::FramelimiterPanel( wxWindow* parent ) : BaseApplicableConfigPanel_SpecificConfig( parent ) { - SetMinWidth( 280 ); - m_check_LimiterDisable = new pxCheckBox( this, _("Disable Framelimiting"), _("Useful for running benchmarks. Toggle this option in-game by pressing F4.") ); m_check_LimiterDisable->SetToolTip( pxEt( L"Note that when Framelimiting is disabled, Turbo and SlowMotion modes will not be available either." ) ); - pxFitToDigits( m_spin_NominalPct = new wxSpinCtrl( this ), 6 ); - pxFitToDigits( m_spin_SlomoPct = new wxSpinCtrl( this ), 6 ); - pxFitToDigits( m_spin_TurboPct = new wxSpinCtrl( this ), 6 ); + m_spin_NominalPct = new wxSpinCtrl(this); + m_spin_SlomoPct = new wxSpinCtrl(this); + m_spin_TurboPct = new wxSpinCtrl(this); m_text_BaseNtsc = CreateNumericalTextCtrl( this, 7 ); m_text_BasePal = CreateNumericalTextCtrl( this, 7 ); @@ -51,7 +49,7 @@ // ------------------------------------------------------------ // Sizers and Layouts - *this += m_check_LimiterDisable; + *this += m_check_LimiterDisable | StdExpand(); wxFlexGridSizer& s_spins( *new wxFlexGridSizer( 5 ) ); s_spins.AddGrowableCol( 0 ); @@ -74,12 +72,6 @@ s_spins += Label(L"%" ) | StdExpand(); s_spins += 5; - s_spins += 15; - s_spins += 15; - s_spins += 15; - s_spins += 15; - s_spins += 15; - wxFlexGridSizer& s_fps( *new wxFlexGridSizer( 5 ) ); s_fps.AddGrowableCol( 0 ); @@ -96,6 +88,7 @@ s_fps += 5; *this += s_spins | pxExpand; + *this += 5; *this += s_fps | pxExpand; AppStatusEvent_OnSettingsApplied(); @@ -174,8 +167,6 @@ Panels::FrameSkipPanel::FrameSkipPanel( wxWindow* parent ) : BaseApplicableConfigPanel_SpecificConfig( parent ) { - SetMinWidth( 350 ); - const RadioPanelItem FrameskipOptions[] = { RadioPanelItem( @@ -196,8 +187,8 @@ m_radio_SkipMode = new pxRadioPanel( this, FrameskipOptions ); m_radio_SkipMode->Realize(); - pxFitToDigits( m_spin_FramesToDraw = new wxSpinCtrl( this ), 6 ); - pxFitToDigits( m_spin_FramesToSkip = new wxSpinCtrl( this ), 6 ); + m_spin_FramesToDraw = new wxSpinCtrl(this); + m_spin_FramesToSkip = new wxSpinCtrl(this); // Set tooltips for spinners. @@ -325,7 +316,7 @@ *left += m_fpan | pxExpand; *left += 5; - *left += m_check_SynchronousGS; + *left += m_check_SynchronousGS | StdExpand(); *left += m_check_DisableOutput; *s_table += left | StdExpand(); @@ -367,5 +358,7 @@ m_span->ApplyConfigToGui( configToApply, true ); m_fpan->ApplyConfigToGui( configToApply, true ); } + + Layout(); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/pxEventThread.h pcsx2-1.4.0/pcsx2/gui/pxEventThread.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/pxEventThread.h 2012-08-19 19:36:59.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/pxEventThread.h 2016-01-05 17:28:08.000000000 +0000 @@ -171,11 +171,7 @@ } }; -#ifdef _MSC_VER - typedef std::list< SysExecEvent*, WXObjectAllocator(SysExecEvent*) > pxEvtList; -#else - typedef std::list pxEvtList; -#endif +typedef std::list pxEvtList; // -------------------------------------------------------------------------------------- // pxEvtQueue Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/BackgroundLogo.png and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/pcsx2/gui/Resources/BackgroundLogo.png differ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/Dualshock.jpg and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/pcsx2/gui/Resources/Dualshock.jpg differ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/EmbeddedImage.h pcsx2-1.4.0/pcsx2/gui/Resources/EmbeddedImage.h --- pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/EmbeddedImage.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Resources/EmbeddedImage.h 2016-01-05 17:28:08.000000000 +0000 @@ -26,8 +26,7 @@ { public: virtual const wxImage& Get()=0; - virtual wxImage Rescale( int width, int height )=0; - virtual wxImage Resample( int width, int height )=0; + virtual wxImage Scale( int width, int height )=0; }; ////////////////////////////////////////////////////////////////////////////////////////// @@ -59,7 +58,7 @@ m_Image.LoadFile( joe, ImageType::GetFormat() ); if( m_ResampleTo.IsFullySpecified() && ( m_ResampleTo.GetWidth() != m_Image.GetWidth() || m_ResampleTo.GetHeight() != m_Image.GetHeight() ) ) - m_Image = m_Image.ResampleBox( m_ResampleTo.GetWidth(), m_ResampleTo.GetHeight() ); + m_Image.Rescale( m_ResampleTo.GetWidth(), m_ResampleTo.GetHeight(), wxIMAGE_QUALITY_HIGH ); } } @@ -107,31 +106,15 @@ // ------------------------------------------------------------------------ // Performs a pixel resize of the loaded image and returns a new image handle (EmbeddedImage - // is left unmodified). Useful for creating ugly versions of otherwise nice graphics. Do - // us all a favor and use Resample() instead. + // is left unmodified). // - // (this method included for sake of completeness only). - // - wxImage Rescale( int width, int height ) - { - _loadImage(); - if( width != m_Image.GetWidth() || height != m_Image.GetHeight() ) - return m_Image.Rescale( width, height ); - else - return m_Image; - } - // ------------------------------------------------------------------------ - // Implementation Note: This function uses wxWidgets ResampleBox method to resize the image. - // wxWidgets ResampleBicubic appears to be buggy and produces fairly poor results when down- - // sampling images (basically resembles a pixel resize). ResampleBox produces much cleaner - // results. - // - wxImage Resample( int width, int height ) + wxImage Scale( int width, int height ) { _loadImage(); + // Not strictly necessary - wxWidgets does the dimensions check anyway. if( width != m_Image.GetWidth() || height != m_Image.GetHeight() ) - return m_Image.ResampleBox( width, height ); + return m_Image.Scale( width, height, wxIMAGE_QUALITY_HIGH ); else return m_Image; } Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/Logo.png and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/pcsx2/gui/Resources/Logo.png differ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/rebuild.sh pcsx2-1.4.0/pcsx2/gui/Resources/rebuild.sh --- pcsx2-1.3.1+dfsg/pcsx2/gui/Resources/rebuild.sh 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/gui/Resources/rebuild.sh 2016-01-05 17:28:08.000000000 +0000 @@ -25,4 +25,4 @@ ../../../tools/bin/bin2cpp ConfigIcon_Speedhacks.png ../../../tools/bin/bin2cpp ConfigIcon_Gamefixes.png ../../../tools/bin/bin2cpp ConfigIcon_Video.png -../../../tools/bin/bin2cpp Dualshock.png +../../../tools/bin/bin2cpp Logo.png diff -Nru pcsx2-1.3.1+dfsg/pcsx2/IopCounters.cpp pcsx2-1.4.0/pcsx2/IopCounters.cpp --- pcsx2-1.3.1+dfsg/pcsx2/IopCounters.cpp 2014-08-15 04:32:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/IopCounters.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -49,9 +49,13 @@ #define IOPCNT_FUTURE_TARGET (0x1000000000ULL) #define IOPCNT_ENABLE_GATE (1<<0) // enables gate-based counters +#define IOPCNT_MODE_GATE (3<<1) // 0x6 Gate mode (dependant on counter) +#define IOPCNT_MODE_RESET (1<<3) // 0x8 resets the counter on target (if interrupt only?) #define IOPCNT_INT_TARGET (1<<4) // 0x10 triggers an interrupt on targets #define IOPCNT_INT_OVERFLOW (1<<5) // 0x20 triggers an interrupt on overflows +#define IOPCNT_INT_TOGGLE (1<<7) // 0x80 0=Pulse (reset on read), 1=toggle each interrupt condition (in 1 shot not reset after fired) #define IOPCNT_ALT_SOURCE (1<<8) // 0x100 uses hblank on counters 1 and 3, and PSXCLOCK on counter 0 +#define IOPCNT_INT_REQ (1<<10) // 0x400 1=Can fire interrupt, 0=Interrupt Fired (reset on read if not 1 shot) // Use an arbitrary value to flag HBLANK counters. // These counters will be counted by the hblank gates coming from the EE, @@ -163,6 +167,34 @@ psxNextsCounter = psxRegs.cycle; } +static bool __fastcall _rcntFireInterrupt(int i, bool isOverflow) { + bool ret; + + if ((psxCounters[i].mode & 0x400)) { //IRQ fired + //DevCon.Warning("Counter %d %s IRQ Fired count %x", i, isOverflow == true ? "Overflow" : "Target", psxCounters[i].count); + psxHu32(0x1070) |= psxCounters[i].interrupt; + iopTestIntc(); + ret = true; + } + else { + //DevCon.Warning("Counter %d IRQ not fired count %x", i, psxCounters[i].count); + ret = false; + if (!(psxCounters[i].mode & 0x40)) //One shot + { + Console.WriteLn("Counter %x repeat intr not set on zero ret, ignoring target", i); + return ret; + } + } + + if (psxCounters[i].mode & 0x80) { //Toggle mode + psxCounters[i].mode ^= 0x400; // Interrupt flag inverted + } + else { + psxCounters[i].mode &= ~0x0400; // Interrupt flag set low + } + + return ret; +} static void __fastcall _rcntTestTarget( int i ) { if( psxCounters[i].count < psxCounters[i].target ) return; @@ -173,24 +205,19 @@ if (psxCounters[i].mode & IOPCNT_INT_TARGET) { // Target interrupt - - if(psxCounters[i].mode & 0x80) - psxCounters[i].mode &= ~0x0400; // Interrupt flag - psxCounters[i].mode |= 0x0800; // Target flag - - psxHu32(0x1070) |= psxCounters[i].interrupt; + + if(_rcntFireInterrupt(i, false)) + psxCounters[i].mode |= 0x0800; // Target flag } if (psxCounters[i].mode & 0x08) { // Reset on target psxCounters[i].count -= psxCounters[i].target; - if(!(psxCounters[i].mode & 0x40)) - { - Console.WriteLn("Counter %x repeat intr not set on zero ret, ignoring target", i); - psxCounters[i].target |= IOPCNT_FUTURE_TARGET; - } - } else psxCounters[i].target |= IOPCNT_FUTURE_TARGET; + } + else + psxCounters[i].target |= IOPCNT_FUTURE_TARGET; + } @@ -201,23 +228,37 @@ PSXCNT_LOG("IOP Counter[%d] overflow 0x%I64x >= 0x%I64x (mode: %x)", i, psxCounters[i].count, maxTarget, psxCounters[i].mode ); + if (!(psxCounters[i].mode & 0x40)) //One shot, whichever condition is met first + { + if (psxCounters[i].target < IOPCNT_FUTURE_TARGET) { //Target didn't trigger so we can overflow + // Overflow interrupt + if ((psxCounters[i].mode & IOPCNT_INT_OVERFLOW)) { + if (_rcntFireInterrupt(i, true)) + psxCounters[i].mode |= 0x1000; // Overflow flag + } + } + psxCounters[i].target |= IOPCNT_FUTURE_TARGET; - if(psxCounters[i].mode & IOPCNT_INT_OVERFLOW) + } + else { // Overflow interrupt - psxHu32(0x1070) |= psxCounters[i].interrupt; - psxCounters[i].mode |= 0x1000; // Overflow flag - if(psxCounters[i].mode & 0x80) - psxCounters[i].mode &= ~0x0400; // Interrupt flag + if ((psxCounters[i].mode & IOPCNT_INT_OVERFLOW)) { + if (_rcntFireInterrupt(i, true)) + psxCounters[i].mode |= 0x1000; // Overflow flag + } + psxCounters[i].target &= maxTarget; } - // Update count and target. - // Count wraps around back to zero, while the target is restored (if needed). + // Update count. + // Count wraps around back to zero, while the target is restored (if not in one shot mode). // (high bit of the target gets set by rcntWtarget when the target is behind // the counter value, and thus should not be flagged until after an overflow) - psxCounters[i].count &= maxTarget; - psxCounters[i].target &= maxTarget; + psxCounters[i].count -= maxTarget; + + + } /* @@ -403,9 +444,15 @@ // don't count disabled or hblank counters... // We can't check the ALTSOURCE flag because the PSXCLOCK source *should* // be counted here. - + if( psxCounters[i].mode & IOPCNT_STOPPED ) continue; + + if ((psxCounters[i].mode & 0x40) && !(psxCounters[i].mode & 0x80)) { //Repeat IRQ mode Pulsed, resets a few cycles after the interrupt, this should do. + psxCounters[i].mode |= 0x400; + } + if( psxCounters[i].rate == PSXHBLANK ) continue; + if( change <= 0 ) continue; psxCounters[i].count += change / psxCounters[i].rate; @@ -453,7 +500,10 @@ else c -= difference; psxNextCounter = c; } - + if (DEV9async) + { + DEV9async(1); + } if(USBasync) { const s32 difference = psxRegs.cycle - psxCounters[7].sCycleT; @@ -497,7 +547,7 @@ u32 change; pxAssert( index < 3 ); - PSXCNT_LOG("IOP Counter[%d] writeCount16 = %x", index, value); + //DevCon.Warning("16bit IOP Counter[%d] writeCount16 = %x", index, value); if(psxCounters[index].rate != PSXHBLANK) { @@ -509,7 +559,13 @@ } psxCounters[index].count = value & 0xffff; - psxCounters[index].target &= 0xffff; + if ((psxCounters[index].mode & 0x400) || (psxCounters[index].mode & 0x40)) { + psxCounters[index].target &= 0xffff; + } + if (value > psxCounters[index].target) {//Count already higher than Target + // DevCon.Warning("16bit Count already higher than target"); + psxCounters[index].target |= IOPCNT_FUTURE_TARGET; + } _rcntSet( index ); } @@ -520,7 +576,7 @@ u32 change; pxAssert( index >= 3 && index < 6 ); - PSXCNT_LOG("IOP Counter[%d] writeCount32 = %x", index, value); + PSXCNT_LOG("32bit IOP Counter[%d] writeCount32 = %x", index, value); if(psxCounters[index].rate != PSXHBLANK) { @@ -531,23 +587,49 @@ psxCounters[index].sCycleT = psxRegs.cycle - (change % psxCounters[index].rate); } - psxCounters[index].count = value & 0xffffffff; - psxCounters[index].target &= 0xffffffff; + psxCounters[index].count = value; + if ((psxCounters[index].mode & 0x400) || (psxCounters[index].mode & 0x40)) { //IRQ not triggered (one shot) or toggle + psxCounters[index].target &= 0xffffffff; + } + if (value > psxCounters[index].target) {//Count already higher than Target + //DevCon.Warning("32bit Count already higher than target"); + psxCounters[index].target |= IOPCNT_FUTURE_TARGET; + } _rcntSet( index ); } ////////////////////////////////////////////////////////////////////////////////////////// // -__fi void psxRcntWmode16( int index, u32 value ) +__fi void psxRcntWmode16(int index, u32 value) { - PSXCNT_LOG( "IOP Counter[%d] writeMode = 0x%04X", index, value ); + int irqmode = 0; + PSXCNT_LOG("16bit IOP Counter[%d] writeMode = 0x%04X", index, value); - pxAssume( index >= 0 && index < 3 ); + pxAssume(index >= 0 && index < 3); psxCounter& counter = psxCounters[index]; - counter.mode = value; - counter.mode |= 0x0400; + counter.mode = value; + counter.mode |= 0x0400; //IRQ Enable + if (value & (1 << 4)) { + irqmode += 1; + } + if (value & (1 << 5)) { + irqmode += 2; + } + if (value & (1 << 7)) { + PSXCNT_LOG("16 Counter %d Toggle IRQ on %s", index, (irqmode & 3) == 1 ? "Target" : ((irqmode & 3) == 2 ? "Overflow" : "Target and Overflow")); + } + else + { + PSXCNT_LOG("16 Counter %d Pulsed IRQ on %s", index, (irqmode & 3) == 1 ? "Target" : ((irqmode & 3) == 2 ? "Overflow" : "Target and Overflow")); + } + if (!(value & (1 << 6))) { + PSXCNT_LOG("16 Counter %d One Shot", index); + } + else { + PSXCNT_LOG("16 Counter %d Repeat", index); + } if( index == 2 ) { switch(value & 0x200) @@ -592,8 +674,9 @@ counter.count = 0; counter.sCycleT = psxRegs.cycle; - counter.target &= 0xffff; + counter.target &= 0xffff; + _rcntSet( index ); } @@ -601,14 +684,33 @@ // __fi void psxRcntWmode32( int index, u32 value ) { - PSXCNT_LOG( "IOP Counter[%d] writeMode = 0x%04x", index, value ); - + PSXCNT_LOG("32bit IOP Counter[%d] writeMode = 0x%04x", index, value ); + int irqmode = 0; pxAssume( index >= 3 && index < 6 ); psxCounter& counter = psxCounters[index]; counter.mode = value; - counter.mode |= 0x0400; + counter.mode |= 0x0400; //IRQ enable + if (value & (1 << 4)) { + irqmode += 1; + } + if (value & (1 << 5)) { + irqmode += 2; + } + if (value & (1 << 7)) { + PSXCNT_LOG("32 Counter %d Toggle IRQ on %s", index, (irqmode & 3) == 1 ? "Target" : ((irqmode & 3) == 2 ? "Overflow" : "Target and Overflow")); + } + else + { + PSXCNT_LOG("32 Counter %d Pulsed IRQ on %s", index, (irqmode & 3) == 1 ? "Target" : ((irqmode & 3) == 2 ? "Overflow" : "Target and Overflow")); + } + if (!(value & (1 << 6))) { + PSXCNT_LOG("32 Counter %d One Shot", index); + } + else { + PSXCNT_LOG("32 Counter %d Repeat", index); + } if( index == 3 ) { // Counter 3 has the HBlank as an alternate source. @@ -653,14 +755,14 @@ void psxRcntWtarget16(int index, u32 value) { pxAssert( index < 3 ); - PSXCNT_LOG("IOP Counter[%d] writeTarget16 = %lx", index, value); + //DevCon.Warning("IOP Counter[%d] writeTarget16 = %lx", index, value); psxCounters[index].target = value & 0xffff; // protect the target from an early arrival. // if the target is behind the current count, then set the target overflow // flag, so that the target won't be active until after the next overflow. - if(psxCounters[index].target <= psxRcntCycles(index)) + if(psxCounters[index].target <= psxRcntCycles(index) || ((psxCounters[index].mode & 0x400) == 0 && !(psxCounters[index].mode & 0x40))) psxCounters[index].target |= IOPCNT_FUTURE_TARGET; _rcntSet( index ); @@ -669,15 +771,17 @@ void psxRcntWtarget32(int index, u32 value) { pxAssert( index >= 3 && index < 6); - PSXCNT_LOG("IOP Counter[%d] writeTarget32 = %lx", index, value); + //DevCon.Warning("IOP Counter[%d] writeTarget32 = %lx mode %x", index, value, psxCounters[index].mode); psxCounters[index].target = value; - + if (!(psxCounters[index].mode & 0x80)) { //Toggle mode + psxCounters[index].mode |= 0x0400; // Interrupt flag set low + } // protect the target from an early arrival. // if the target is behind the current count, then set the target overflow // flag, so that the target won't be active until after the next overflow. - if(psxCounters[index].target <= psxRcntCycles(index)) + if (psxCounters[index].target <= psxRcntCycles(index) || ((psxCounters[index].mode & 0x400) == 0 && !(psxCounters[index].mode & 0x40))) psxCounters[index].target |= IOPCNT_FUTURE_TARGET; _rcntSet( index ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/IopHw.cpp pcsx2-1.4.0/pcsx2/IopHw.cpp --- pcsx2-1.3.1+dfsg/pcsx2/IopHw.cpp 2014-08-17 13:23:21.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/IopHw.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -54,17 +54,44 @@ void psxDmaInterrupt(int n) { - if (HW_DMA_ICR & (1 << (16 + n))) + if(n == 33) { + for (int i = 0; i < 6; i++) { + if (HW_DMA_ICR & (1 << (16 + i))) { + if (HW_DMA_ICR & (1 << (24 + i))) { + if (HW_DMA_ICR & (1 << 23)) { + HW_DMA_ICR |= 0x80000000; //Set master IRQ condition met + } + psxRegs.CP0.n.Cause &= ~0x7C; + iopIntcIrq(3); + break; + } + } + } + } else if (HW_DMA_ICR & (1 << (16 + n))) { - HW_DMA_ICR|= (1 << (24 + n)); - psxRegs.CP0.n.Cause |= 1 << (9 + n); - iopIntcIrq( 3 ); + HW_DMA_ICR |= (1 << (24 + n)); + if (HW_DMA_ICR & (1 << 23)) { + HW_DMA_ICR |= 0x80000000; //Set master IRQ condition met + } + iopIntcIrq(3); } } void psxDmaInterrupt2(int n) { - if (HW_DMA_ICR2 & (1 << (16 + n))) + if (n == 33) { + for (int i = 0; i < 6; i++) { + if (HW_DMA_ICR2 & (1 << (16 + i))) { + if (HW_DMA_ICR2 & (1 << (24 + i))) { + if (HW_DMA_ICR2 & (1 << 23)) { + HW_DMA_ICR2 |= 0x80000000; //Set master IRQ condition met + } + iopIntcIrq(3); + break; + } + } + } + } else if (HW_DMA_ICR2 & (1 << (16 + n))) { /* if (HW_DMA_ICR2 & (1 << (24 + n))) { Console.WriteLn("*PCSX2*: HW_DMA_ICR2 n=%d already set", n); @@ -73,7 +100,9 @@ Console.WriteLn("*PCSX2*: psxHu32(0x1070) 8 already set (n=%d)", n); }*/ HW_DMA_ICR2|= (1 << (24 + n)); - psxRegs.CP0.n.Cause |= 1 << (16 + n); - iopIntcIrq( 3 ); + if (HW_DMA_ICR2 & (1 << 23)) { + HW_DMA_ICR2 |= 0x80000000; //Set master IRQ condition met + } + iopIntcIrq(3); } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/IopSio2.cpp pcsx2-1.4.0/pcsx2/IopSio2.cpp --- pcsx2-1.3.1+dfsg/pcsx2/IopSio2.cpp 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/IopSio2.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -156,7 +156,7 @@ if (sio2.cmdlength) sio2.cmdlength--; sioWrite8(value); - if (sio2.packet.sendSize > BUFSIZE) {//asadr + if (sio2.packet.sendSize >= BUFSIZE) {//asadr Console.Warning("*PCSX2*: sendSize >= %d", BUFSIZE); } else { sio2.buf[sio2.packet.sendSize] = sioRead8(); @@ -183,7 +183,7 @@ if (sio2.cmdlength) sio2.cmdlength--; SIODMAWrite(value); - if (sio2.packet.sendSize > BUFSIZE) {//asadr + if (sio2.packet.sendSize >= BUFSIZE) {//asadr Console.WriteLn("*PCSX2*: sendSize >= %d", BUFSIZE); } else { sio2.buf[sio2.packet.sendSize] = sioRead8(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Linux/LnxConsolePipe.cpp pcsx2-1.4.0/pcsx2/Linux/LnxConsolePipe.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Linux/LnxConsolePipe.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Linux/LnxConsolePipe.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,170 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2015 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" + +#include "App.h" +#include "ConsoleLogger.h" +#include + +using namespace Threading; + +// Redirects and reads data sent to stdout/stderr and sends it to the PCSX2 +// console. +class LinuxPipeThread : public pxThread +{ + typedef pxThread _parent; + +protected: + FILE* m_stdstream; + FILE* m_fp; + const ConsoleColors m_color; + int m_pipe_fd[2]; + + void ExecuteTaskInThread(); +public: + LinuxPipeThread(FILE* stdstream); + virtual ~LinuxPipeThread() noexcept; +}; + +LinuxPipeThread::LinuxPipeThread(FILE* stdstream) + : pxThread(stdstream == stderr? L"Redirect_Stderr" : L"Redirect_Stdout") + , m_stdstream(stdstream) + , m_fp(nullptr) + , m_color(stdstream == stderr? Color_Red : Color_Black) + , m_pipe_fd{-1, -1} +{ + const wxChar* stream_name = stdstream == stderr? L"stderr" : L"stdout"; + + // Save the original stdout/stderr file descriptor + int dup_fd = dup(fileno(stdstream)); + if (dup_fd == -1) + throw Exception::RuntimeError().SetDiagMsg(wxString::Format( + L"Redirect %s failed: dup: %s", stream_name, strerror(errno))); + m_fp = fdopen(dup_fd, "w"); + if (m_fp == nullptr) { + int error = errno; + close(dup_fd); + throw Exception::RuntimeError().SetDiagMsg(wxString::Format( + L"Redirect %s failed: fdopen: %s", stream_name, strerror(error))); + } + + if (pipe(m_pipe_fd) == -1) { + int error = errno; + fclose(m_fp); + throw Exception::RuntimeError().SetDiagMsg(wxString::Format( + L"Redirect %s failed: pipe: %s", stream_name, strerror(error))); + } +} + +LinuxPipeThread::~LinuxPipeThread() noexcept +{ + // Close write end of the pipe first so the redirection thread starts + // finishing up and restore the original stdout/stderr file descriptor so + // messages aren't lost. + dup2(fileno(m_fp), m_pipe_fd[1]); + + if (m_stdstream == stdout) + Console_SetStdout(stdout); + fclose(m_fp); + + // Read end of pipe should only be closed after the thread terminates to + // prevent messages being lost. + m_mtx_InThread.Wait(); + close(m_pipe_fd[0]); +} + +void LinuxPipeThread::ExecuteTaskInThread() +{ + const wxChar* stream_name = m_stdstream == stderr? L"stderr" : L"stdout"; + + // Redirect stdout/stderr + int stdstream_fd = fileno(m_stdstream); + if (dup2(m_pipe_fd[1], stdstream_fd) != stdstream_fd) { + Console.Error(wxString::Format(L"Redirect %s failed: dup2: %s", + stream_name, strerror(errno))); + return; + } + + close(m_pipe_fd[1]); + m_pipe_fd[1] = stdstream_fd; + + // Send console output to the original stdout, otherwise there'll be an + // infinite loop. + if (m_stdstream == stdout) + Console_SetStdout(m_fp); + + char buffer[2049]; + while (ssize_t bytes_read = read(m_pipe_fd[0], buffer, sizeof(buffer) - 1)) { + if (bytes_read == -1) { + if (errno == EINTR) { + continue; + } else { + // Should never happen. + Console.Error(wxString::Format(L"Redirect %s failed: read: %s", + stream_name, strerror(errno))); + break; + } + } + + buffer[bytes_read] = 0; + + { + ConsoleColorScope cs(m_color); + Console.WriteRaw(fromUTF8(buffer)); + } + } +} + +class LinuxPipeRedirection : public PipeRedirectionBase +{ + DeclareNoncopyableObject(LinuxPipeRedirection); + +protected: + LinuxPipeThread m_thread; + +public: + LinuxPipeRedirection(FILE* stdstream); + virtual ~LinuxPipeRedirection() noexcept; +}; + +LinuxPipeRedirection::LinuxPipeRedirection(FILE* stdstream) + : m_thread(stdstream) +{ + pxAssert((stdstream == stderr) || (stdstream == stdout)); + + try { + m_thread.Start(); + } catch (Exception::BaseThreadError& ex) { + // thread object will become invalid because of scoping after we leave + // the constructor, so re-pack a new exception: + throw Exception::RuntimeError().SetDiagMsg(ex.FormatDiagnosticMessage()); + } +} + +LinuxPipeRedirection::~LinuxPipeRedirection() noexcept +{ +} + +PipeRedirectionBase* NewPipeRedir(FILE* stdstream) +{ + try { + return new LinuxPipeRedirection(stdstream); + } catch (Exception::RuntimeError& ex) { + Console.Error(ex.FormatDiagnosticMessage()); + } + + return nullptr; +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Linux/LnxKeyCodes.cpp pcsx2-1.4.0/pcsx2/Linux/LnxKeyCodes.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Linux/LnxKeyCodes.cpp 2014-12-07 22:01:51.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Linux/LnxKeyCodes.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -294,13 +294,3 @@ return key_code; } - -// NewPipeRedir .. Homeless function for now .. This is as good a spot as any. -// Eventually we might be so fancy as to have a linux console pipe to our own console -// window, same as the Win32 one. Not sure how doable it is, and it's not as urgent -// anyway since Linux has better generic console support and commandline piping. -// -PipeRedirectionBase* NewPipeRedir( FILE* stdstream ) -{ - return NULL; -} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Memory.cpp pcsx2-1.4.0/pcsx2/Memory.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Memory.cpp 2014-07-04 22:06:26.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Memory.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -891,13 +891,6 @@ // code below. // -enum vtlb_ProtectionMode -{ - ProtMode_None = 0, // page is 'unaccounted' -- neither protected nor unprotected - ProtMode_Write, // page is under write protection (exception handler) - ProtMode_Manual // page is under manual protection (self-checked at execution) -}; - struct vtlb_PageProtectionInfo { // Ram De-mapping -- used to convert fully translated/mapped offsets (which reside with @@ -914,12 +907,10 @@ // returns: -// -1 - unchecked block (resides in ROM, thus is integrity is constant) -// 0 - page is using Write protection -// 1 - page is using manual protection (recompiler must include execution-time -// self-checking of block integrity) +// ProtMode_NotRequired - unchecked block (resides in ROM, thus is integrity is constant) +// Or the current mode // -int mmap_GetRamPageInfo( u32 paddr ) +vtlb_ProtectionMode mmap_GetRamPageInfo( u32 paddr ) { pxAssert( eeMem ); @@ -929,10 +920,11 @@ uptr rampage = ptr - (uptr)eeMem->Main; if (rampage >= Ps2MemSize::MainRam) - return -1; //not in ram, no tracking done ... + return ProtMode_NotRequired; //not in ram, no tracking done ... rampage >>= 12; - return ( m_PageProtectInfo[rampage].Mode == ProtMode_Manual ) ? 1 : 0; + + return m_PageProtectInfo[rampage].Mode; } // paddr - physically mapped PS2 address diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Memory.h pcsx2-1.4.0/pcsx2/Memory.h --- pcsx2-1.3.1+dfsg/pcsx2/Memory.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Memory.h 2016-01-05 17:28:08.000000000 +0000 @@ -116,7 +116,15 @@ extern void memMapVUmicro(); -extern int mmap_GetRamPageInfo( u32 paddr ); +enum vtlb_ProtectionMode +{ + ProtMode_None = 0, // page is 'unaccounted' -- neither protected nor unprotected + ProtMode_Write, // page is under write protection (exception handler) + ProtMode_Manual, // page is under manual protection (self-checked at execution) + ProtMode_NotRequired // page doesn't require any protection +}; + +extern vtlb_ProtectionMode mmap_GetRamPageInfo( u32 paddr ); extern void mmap_MarkCountedRamPage( u32 paddr ); extern void mmap_ResetBlockTracking(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/MMI.cpp pcsx2-1.4.0/pcsx2/MMI.cpp --- pcsx2-1.3.1+dfsg/pcsx2/MMI.cpp 2011-02-26 03:20:58.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/MMI.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,6 +16,7 @@ #include "PrecompiledHeader.h" #include "Common.h" +#include "Utilities/MathUtils.h" namespace R5900 { namespace Interpreter { @@ -145,30 +146,13 @@ //*****************MMI OPCODES********************************* -static __fi void _PLZCW(int n) -{ - // This function counts the number of "like" bits in the source register, starting - // with the MSB and working its way down, and returns the result MINUS ONE. - // So 0xff00 would return 7, not 8. - - int c = 0; - s32 i = cpuRegs.GPR.r[_Rs_].SL[n]; - - // Negate the source based on the sign bit. This allows us to use a simple - // unified bit test of the MSB for either condition. - if( i >= 0 ) i = ~i; - - // shift first, compare, then increment. This excludes the sign bit from our final count. - while( i <<= 1, i < 0 ) c++; - - cpuRegs.GPR.r[_Rd_].UL[n] = c; -} - void PLZCW() { - if (!_Rd_) return; + if (!_Rd_) + return; - _PLZCW (0); - _PLZCW (1); + // Return the leading sign bits, excluding the original bit + cpuRegs.GPR.r[_Rd_].UL[0] = count_leading_sign_bits(cpuRegs.GPR.r[_Rs_].SL[0]) - 1; + cpuRegs.GPR.r[_Rd_].UL[1] = count_leading_sign_bits(cpuRegs.GPR.r[_Rs_].SL[1]) - 1; } __fi void PMFHL_CLAMP(u16& dst, s32 src) @@ -199,18 +183,20 @@ case 0x02: // SLW { s64 TempS64 = ((u64)cpuRegs.HI.UL[0] << 32) | (u64)cpuRegs.LO.UL[0]; + if (TempS64 >= 0x000000007fffffffLL) { cpuRegs.GPR.r[_Rd_].UD[0] = 0x000000007fffffffLL; - } else if (TempS64 <= 0xffffffff80000000LL) { + } else if (TempS64 <= -0x80000000LL) { cpuRegs.GPR.r[_Rd_].UD[0] = 0xffffffff80000000LL; } else { cpuRegs.GPR.r[_Rd_].UD[0] = (s64)cpuRegs.LO.SL[0]; } TempS64 = ((u64)cpuRegs.HI.UL[2] << 32) | (u64)cpuRegs.LO.UL[2]; + if (TempS64 >= 0x000000007fffffffLL) { cpuRegs.GPR.r[_Rd_].UD[1] = 0x000000007fffffffLL; - } else if (TempS64 <= 0xffffffff80000000LL) { + } else if (TempS64 <= -0x80000000LL) { cpuRegs.GPR.r[_Rd_].UD[1] = 0xffffffff80000000LL; } else { cpuRegs.GPR.r[_Rd_].UD[1] = (s64)cpuRegs.LO.SL[2]; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/MTGS.cpp pcsx2-1.4.0/pcsx2/MTGS.cpp --- pcsx2-1.3.1+dfsg/pcsx2/MTGS.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/MTGS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -90,7 +90,10 @@ SysMtgsThread::~SysMtgsThread() throw() { - _parent::Cancel(); + try { + _parent::Cancel(); + } + DESTRUCTOR_CATCHALL } void SysMtgsThread::OnResumeReady() @@ -179,6 +182,7 @@ void SysMtgsThread::OpenPlugin() { + if( m_PluginOpened ) return; memcpy( RingBuffer.Regs, PS2MEM_GS, sizeof(PS2MEM_GS) ); @@ -192,24 +196,8 @@ else result = GSopen( (void*)pDsp, "PCSX2", renderswitch ? 2 : 1 ); - // Vsync on / off ? - if( renderswitch ) - { - Console.Indent(2).WriteLn( "Forced software switch enabled." ); - if ( EmuConfig.GS.VsyncEnable ) - { - // Better turn Vsync off now, as in most cases sw rendering is not fast enough to support a steady 60fps. - // Having Vsync still enabled then means a big cut in speed and sloppy rendering. - // It's possible though that some users have very fast machines, and rather kept Vsync enabled, - // but let's assume this is the minority. At least for now ;) - GSsetVsync( false ); - Console.Indent(2).WriteLn( "Vsync temporarily disabled" ); - } - } - else - { - GSsetVsync( EmuConfig.GS.FrameLimitEnable && EmuConfig.GS.VsyncEnable ); - } + + GSsetVsync(EmuConfig.GS.FrameLimitEnable && EmuConfig.GS.VsyncEnable); if( result != 0 ) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/MTVU.cpp pcsx2-1.4.0/pcsx2/MTVU.cpp --- pcsx2-1.3.1+dfsg/pcsx2/MTVU.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/MTVU.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,357 +1,362 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "Common.h" -#include "MTVU.h" -#include "newVif.h" -#include "Gif_Unit.h" - -__aligned16 VU_Thread vu1Thread(CpuVU1, VU1); - -#define volatize(x) (*reinterpret_cast(&(x))) -#define size_u32(x) (((u32)x+3u)>>2) // Rounds up a size in bytes for size in u32's -#define MTVU_ALWAYS_KICK 0 -#define MTVU_SYNC_MODE 0 - -enum MTVU_EVENT { - MTVU_VU_EXECUTE, // Execute VU program - MTVU_VU_WRITE_MICRO, // Write to VU micro-mem - MTVU_VU_WRITE_DATA, // Write to VU data-mem - MTVU_VIF_WRITE_COL, // Write to Vif col reg - MTVU_VIF_WRITE_ROW, // Write to Vif row reg - MTVU_VIF_UNPACK, // Execute Vif Unpack - MTVU_NULL_PACKET, // Go back to beginning of buffer - MTVU_RESET -}; - -// Calls the vif unpack functions from the MTVU thread -static void MTVU_Unpack(void* data, VIFregisters& vifRegs) -{ - bool isFill = vifRegs.cycle.cl < vifRegs.cycle.wl; - if (newVifDynaRec) dVifUnpack<1>((u8*)data, isFill); - else _nVifUnpack(1, (u8*)data, vifRegs.mode, isFill); -} - -// Called on Saving/Loading states... -void SaveStateBase::mtvuFreeze() -{ - FreezeTag("MTVU"); - pxAssert(vu1Thread.IsDone()); - if (!IsSaving()) vu1Thread.Reset(); - Freeze(vu1Thread.vuCycles); - Freeze(vu1Thread.vuCycleIdx); -} - -VU_Thread::VU_Thread(BaseVUmicroCPU*& _vuCPU, VURegs& _vuRegs) : - vuCPU(_vuCPU), vuRegs(_vuRegs) -{ - m_name = L"MTVU"; - Reset(); -} - -VU_Thread::~VU_Thread() throw() -{ - pxThread::Cancel(); -} - -void VU_Thread::Reset() -{ - read_pos = 0; - write_pos = 0; - write_offset = 0; - vuCycleIdx = 0; - isBusy = false; - memzero(vif); - memzero(vifRegs); - memzero(vuCycles); -} - -void VU_Thread::ExecuteTaskInThread() -{ - PCSX2_PAGEFAULT_PROTECT { - ExecuteRingBuffer(); - } PCSX2_PAGEFAULT_EXCEPT; -} - -void VU_Thread::ExecuteRingBuffer() -{ - for(;;) { - semaEvent.WaitWithoutYield(); - ScopedLockBool lock(mtxBusy, isBusy); - while (read_pos != GetWritePos()) { - u32 tag = Read(); - switch (tag) { - case MTVU_VU_EXECUTE: { - vuRegs.cycle = 0; - s32 addr = Read(); - vifRegs.top = Read(); - vifRegs.itop = Read(); - if (addr != -1) vuRegs.VI[REG_TPC].UL = addr; - vuCPU->Execute(vu1RunCycles); - gifUnit.gifPath[GIF_PATH_1].FinishGSPacketMTVU(); - semaXGkick.Post(); // Tell MTGS a path1 packet is complete - AtomicExchange(vuCycles[vuCycleIdx], vuRegs.cycle); - vuCycleIdx = (vuCycleIdx + 1) & 3; - break; - } - case MTVU_VU_WRITE_MICRO: { - u32 vu_micro_addr = Read(); - u32 size = Read(); - vuCPU->Clear(vu_micro_addr, size); - Read(&vuRegs.Micro[vu_micro_addr], size); - break; - } - case MTVU_VU_WRITE_DATA: { - u32 vu_data_addr = Read(); - u32 size = Read(); - Read(&vuRegs.Mem[vu_data_addr], size); - break; - } - case MTVU_VIF_WRITE_COL: - Read(&vif.MaskCol, sizeof(vif.MaskCol)); - break; - case MTVU_VIF_WRITE_ROW: - Read(&vif.MaskRow, sizeof(vif.MaskRow)); - break; - case MTVU_VIF_UNPACK: { - u32 vif_copy_size = (uptr)&vif.StructEnd - (uptr)&vif.tag; - Read(&vif.tag, vif_copy_size); - ReadRegs(&vifRegs); - u32 size = Read(); - MTVU_Unpack(&buffer[read_pos], vifRegs); - incReadPos(size_u32(size)); - break; - } - case MTVU_NULL_PACKET: - AtomicExchange(read_pos, 0); - break; - jNO_DEFAULT; - } - } - } -} - - -// Should only be called by ReserveSpace() -__ri void VU_Thread::WaitOnSize(s32 size) -{ - for(;;) { - s32 readPos = GetReadPos(); - if (readPos <= write_pos) break; // MTVU is reading in back of write_pos - if (readPos > write_pos + size) break; // Enough free front space - if (1) { // Let MTVU run to free up buffer space - KickStart(); - if (IsDevBuild) DevCon.WriteLn("WaitOnSize()"); - ScopedLock lock(mtxBusy); - } - } -} - -// Makes sure theres enough room in the ring buffer -// to write a continuous 'size * sizeof(u32)' bytes -void VU_Thread::ReserveSpace(s32 size) -{ - pxAssert(write_pos < buffer_size); - pxAssert(size < buffer_size); - pxAssert(size > 0); - pxAssert(write_offset == 0); - if (write_pos + size > buffer_size) { - pxAssert(write_pos > 0); - WaitOnSize(1); // Size of MTVU_NULL_PACKET - Write(MTVU_NULL_PACKET); - write_offset = 0; - AtomicExchange(volatize(write_pos), 0); - } - WaitOnSize(size); -} - -// Use this when reading read_pos from ee thread -__fi s32 VU_Thread::GetReadPos() -{ - return AtomicRead(read_pos); -} -// Use this when reading write_pos from vu thread -__fi s32 VU_Thread::GetWritePos() -{ - return AtomicRead(volatize(write_pos)); -} -// Gets the effective write pointer after adding write_offset -__fi u32* VU_Thread::GetWritePtr() -{ - return &buffer[(write_pos + write_offset) & buffer_mask]; -} - -__fi void VU_Thread::incReadPos(s32 offset) -{ // Offset in u32 sizes - s32 temp = (read_pos + offset) & buffer_mask; - AtomicExchange(read_pos, temp); -} -__fi void VU_Thread::incWritePos() -{ // Adds write_offset - s32 temp = (write_pos + write_offset) & buffer_mask; - write_offset = 0; - AtomicExchange(volatize(write_pos), temp); - if (MTVU_ALWAYS_KICK) KickStart(); - if (MTVU_SYNC_MODE) WaitVU(); -} - -__fi u32 VU_Thread::Read() -{ - u32 ret = buffer[read_pos]; - incReadPos(1); - return ret; -} - -__fi void VU_Thread::Read(void* dest, u32 size) -{ - memcpy(dest, &buffer[read_pos], size); - incReadPos(size_u32(size)); -} - -__fi void VU_Thread::ReadRegs(VIFregisters* dest) -{ - VIFregistersMTVU* src = (VIFregistersMTVU*)&buffer[read_pos]; - dest->cycle = src->cycle; - dest->mode = src->mode; - dest->num = src->num; - dest->mask = src->mask; - dest->itop = src->itop; - dest->top = src->top; - incReadPos(size_u32(sizeof(VIFregistersMTVU))); -} - -__fi void VU_Thread::Write(u32 val) -{ - GetWritePtr()[0] = val; - write_offset += 1; -} -__fi void VU_Thread::Write(void* src, u32 size) -{ - memcpy(GetWritePtr(), src, size); - write_offset += size_u32(size); -} - -__fi void VU_Thread::WriteRegs(VIFregisters* src) -{ - VIFregistersMTVU* dest = (VIFregistersMTVU*)GetWritePtr(); - dest->cycle = src->cycle; - dest->mode = src->mode; - dest->num = src->num; - dest->mask = src->mask; - dest->top = src->top; - dest->itop = src->itop; - write_offset += size_u32(sizeof(VIFregistersMTVU)); -} - -// Returns Average number of vu Cycles from last 4 runs -// Used for vu cycle stealing hack -u32 VU_Thread::Get_vuCycles() -{ - return (AtomicRead(vuCycles[0]) + AtomicRead(vuCycles[1]) - + AtomicRead(vuCycles[2]) + AtomicRead(vuCycles[3])) >> 2; -} - -void VU_Thread::KickStart(bool forceKick) -{ - if ((forceKick && !semaEvent.Count()) - || (!isBusy && GetReadPos() != write_pos)) semaEvent.Post(); -} - -bool VU_Thread::IsDone() -{ - return !isBusy && GetReadPos() == GetWritePos(); -} - -void VU_Thread::WaitVU() -{ - MTVU_LOG("MTVU - WaitVU!"); - for(;;) { - if (IsDone()) break; - //DevCon.WriteLn("WaitVU()"); - pxAssert(THREAD_VU1); - KickStart(); - ScopedLock lock(mtxBusy); - } -} - -void VU_Thread::ExecuteVU(u32 vu_addr, u32 vif_top, u32 vif_itop) -{ - MTVU_LOG("MTVU - ExecuteVU!"); - ReserveSpace(4); - Write(MTVU_VU_EXECUTE); - Write(vu_addr); - Write(vif_top); - Write(vif_itop); - incWritePos(); - gifUnit.TransferGSPacketData(GIF_TRANS_MTVU, NULL, 0); - KickStart(); - u32 cycles = std::min(Get_vuCycles(), 3000u); - cpuRegs.cycle += cycles * EmuConfig.Speedhacks.VUCycleSteal; -} - -void VU_Thread::VifUnpack(vifStruct& _vif, VIFregisters& _vifRegs, u8* data, u32 size) -{ - MTVU_LOG("MTVU - VifUnpack!"); - u32 vif_copy_size = (uptr)&_vif.StructEnd - (uptr)&_vif.tag; - ReserveSpace(1 + size_u32(vif_copy_size) + size_u32(sizeof(VIFregistersMTVU)) + 1 + size_u32(size)); - Write(MTVU_VIF_UNPACK); - Write(&_vif.tag, vif_copy_size); - WriteRegs(&_vifRegs); - Write(size); - Write(data, size); - incWritePos(); - KickStart(); -} - -void VU_Thread::WriteMicroMem(u32 vu_micro_addr, void* data, u32 size) -{ - MTVU_LOG("MTVU - WriteMicroMem!"); - ReserveSpace(3 + size_u32(size)); - Write(MTVU_VU_WRITE_MICRO); - Write(vu_micro_addr); - Write(size); - Write(data, size); - incWritePos(); -} - -void VU_Thread::WriteDataMem(u32 vu_data_addr, void* data, u32 size) -{ - MTVU_LOG("MTVU - WriteDataMem!"); - ReserveSpace(3 + size_u32(size)); - Write(MTVU_VU_WRITE_DATA); - Write(vu_data_addr); - Write(size); - Write(data, size); - incWritePos(); -} - -void VU_Thread::WriteCol(vifStruct& _vif) -{ - MTVU_LOG("MTVU - WriteCol!"); - ReserveSpace(1 + size_u32(sizeof(_vif.MaskCol))); - Write(MTVU_VIF_WRITE_COL); - Write(&_vif.MaskCol, sizeof(_vif.MaskCol)); - incWritePos(); -} - -void VU_Thread::WriteRow(vifStruct& _vif) -{ - MTVU_LOG("MTVU - WriteRow!"); - ReserveSpace(1 + size_u32(sizeof(_vif.MaskRow))); - Write(MTVU_VIF_WRITE_ROW); - Write(&_vif.MaskRow, sizeof(_vif.MaskRow)); - incWritePos(); -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "Common.h" +#include "MTVU.h" +#include "newVif.h" +#include "Gif_Unit.h" + +__aligned16 VU_Thread vu1Thread(CpuVU1, VU1); + +#define volatize(x) (*reinterpret_cast(&(x))) +#define size_u32(x) (((u32)x+3u)>>2) // Rounds up a size in bytes for size in u32's +#define MTVU_ALWAYS_KICK 0 +#define MTVU_SYNC_MODE 0 + +enum MTVU_EVENT { + MTVU_VU_EXECUTE, // Execute VU program + MTVU_VU_WRITE_MICRO, // Write to VU micro-mem + MTVU_VU_WRITE_DATA, // Write to VU data-mem + MTVU_VIF_WRITE_COL, // Write to Vif col reg + MTVU_VIF_WRITE_ROW, // Write to Vif row reg + MTVU_VIF_UNPACK, // Execute Vif Unpack + MTVU_NULL_PACKET, // Go back to beginning of buffer + MTVU_RESET +}; + +// Calls the vif unpack functions from the MTVU thread +static void MTVU_Unpack(void* data, VIFregisters& vifRegs) +{ + bool isFill = vifRegs.cycle.cl < vifRegs.cycle.wl; + if (newVifDynaRec) dVifUnpack<1>((u8*)data, isFill); + else _nVifUnpack(1, (u8*)data, vifRegs.mode, isFill); +} + +// Called on Saving/Loading states... +void SaveStateBase::mtvuFreeze() +{ + FreezeTag("MTVU"); + pxAssert(vu1Thread.IsDone()); + if (!IsSaving()) vu1Thread.Reset(); + Freeze(vu1Thread.vuCycles); + Freeze(vu1Thread.vuCycleIdx); +} + +VU_Thread::VU_Thread(BaseVUmicroCPU*& _vuCPU, VURegs& _vuRegs) : + vuCPU(_vuCPU), vuRegs(_vuRegs) +{ + m_name = L"MTVU"; + Reset(); +} + +VU_Thread::~VU_Thread() throw() +{ + try { + pxThread::Cancel(); + } + DESTRUCTOR_CATCHALL +} + +void VU_Thread::Reset() +{ + ScopedLock lock(mtxBusy); + + read_pos = 0; + write_pos = 0; + write_offset = 0; + vuCycleIdx = 0; + isBusy = false; + memzero(vif); + memzero(vifRegs); + memzero(vuCycles); +} + +void VU_Thread::ExecuteTaskInThread() +{ + PCSX2_PAGEFAULT_PROTECT { + ExecuteRingBuffer(); + } PCSX2_PAGEFAULT_EXCEPT; +} + +void VU_Thread::ExecuteRingBuffer() +{ + for(;;) { + semaEvent.WaitWithoutYield(); + ScopedLockBool lock(mtxBusy, isBusy); + while (read_pos != GetWritePos()) { + u32 tag = Read(); + switch (tag) { + case MTVU_VU_EXECUTE: { + vuRegs.cycle = 0; + s32 addr = Read(); + vifRegs.top = Read(); + vifRegs.itop = Read(); + if (addr != -1) vuRegs.VI[REG_TPC].UL = addr; + vuCPU->Execute(vu1RunCycles); + gifUnit.gifPath[GIF_PATH_1].FinishGSPacketMTVU(); + semaXGkick.Post(); // Tell MTGS a path1 packet is complete + AtomicExchange(vuCycles[vuCycleIdx], vuRegs.cycle); + vuCycleIdx = (vuCycleIdx + 1) & 3; + break; + } + case MTVU_VU_WRITE_MICRO: { + u32 vu_micro_addr = Read(); + u32 size = Read(); + vuCPU->Clear(vu_micro_addr, size); + Read(&vuRegs.Micro[vu_micro_addr], size); + break; + } + case MTVU_VU_WRITE_DATA: { + u32 vu_data_addr = Read(); + u32 size = Read(); + Read(&vuRegs.Mem[vu_data_addr], size); + break; + } + case MTVU_VIF_WRITE_COL: + Read(&vif.MaskCol, sizeof(vif.MaskCol)); + break; + case MTVU_VIF_WRITE_ROW: + Read(&vif.MaskRow, sizeof(vif.MaskRow)); + break; + case MTVU_VIF_UNPACK: { + u32 vif_copy_size = (uptr)&vif.StructEnd - (uptr)&vif.tag; + Read(&vif.tag, vif_copy_size); + ReadRegs(&vifRegs); + u32 size = Read(); + MTVU_Unpack(&buffer[read_pos], vifRegs); + incReadPos(size_u32(size)); + break; + } + case MTVU_NULL_PACKET: + AtomicExchange(read_pos, 0); + break; + jNO_DEFAULT; + } + } + } +} + + +// Should only be called by ReserveSpace() +__ri void VU_Thread::WaitOnSize(s32 size) +{ + for(;;) { + s32 readPos = GetReadPos(); + if (readPos <= write_pos) break; // MTVU is reading in back of write_pos + if (readPos > write_pos + size) break; // Enough free front space + if (1) { // Let MTVU run to free up buffer space + KickStart(); + if (IsDevBuild) DevCon.WriteLn("WaitOnSize()"); + ScopedLock lock(mtxBusy); + } + } +} + +// Makes sure theres enough room in the ring buffer +// to write a continuous 'size * sizeof(u32)' bytes +void VU_Thread::ReserveSpace(s32 size) +{ + pxAssert(write_pos < buffer_size); + pxAssert(size < buffer_size); + pxAssert(size > 0); + pxAssert(write_offset == 0); + if (write_pos + size > buffer_size) { + pxAssert(write_pos > 0); + WaitOnSize(1); // Size of MTVU_NULL_PACKET + Write(MTVU_NULL_PACKET); + write_offset = 0; + AtomicExchange(volatize(write_pos), 0); + } + WaitOnSize(size); +} + +// Use this when reading read_pos from ee thread +__fi s32 VU_Thread::GetReadPos() +{ + return AtomicRead(read_pos); +} +// Use this when reading write_pos from vu thread +__fi s32 VU_Thread::GetWritePos() +{ + return AtomicRead(volatize(write_pos)); +} +// Gets the effective write pointer after adding write_offset +__fi u32* VU_Thread::GetWritePtr() +{ + return &buffer[(write_pos + write_offset) & buffer_mask]; +} + +__fi void VU_Thread::incReadPos(s32 offset) +{ // Offset in u32 sizes + s32 temp = (read_pos + offset) & buffer_mask; + AtomicExchange(read_pos, temp); +} +__fi void VU_Thread::incWritePos() +{ // Adds write_offset + s32 temp = (write_pos + write_offset) & buffer_mask; + write_offset = 0; + AtomicExchange(volatize(write_pos), temp); + if (MTVU_ALWAYS_KICK) KickStart(); + if (MTVU_SYNC_MODE) WaitVU(); +} + +__fi u32 VU_Thread::Read() +{ + u32 ret = buffer[read_pos]; + incReadPos(1); + return ret; +} + +__fi void VU_Thread::Read(void* dest, u32 size) +{ + memcpy(dest, &buffer[read_pos], size); + incReadPos(size_u32(size)); +} + +__fi void VU_Thread::ReadRegs(VIFregisters* dest) +{ + VIFregistersMTVU* src = (VIFregistersMTVU*)&buffer[read_pos]; + dest->cycle = src->cycle; + dest->mode = src->mode; + dest->num = src->num; + dest->mask = src->mask; + dest->itop = src->itop; + dest->top = src->top; + incReadPos(size_u32(sizeof(VIFregistersMTVU))); +} + +__fi void VU_Thread::Write(u32 val) +{ + GetWritePtr()[0] = val; + write_offset += 1; +} +__fi void VU_Thread::Write(void* src, u32 size) +{ + memcpy(GetWritePtr(), src, size); + write_offset += size_u32(size); +} + +__fi void VU_Thread::WriteRegs(VIFregisters* src) +{ + VIFregistersMTVU* dest = (VIFregistersMTVU*)GetWritePtr(); + dest->cycle = src->cycle; + dest->mode = src->mode; + dest->num = src->num; + dest->mask = src->mask; + dest->top = src->top; + dest->itop = src->itop; + write_offset += size_u32(sizeof(VIFregistersMTVU)); +} + +// Returns Average number of vu Cycles from last 4 runs +// Used for vu cycle stealing hack +u32 VU_Thread::Get_vuCycles() +{ + return (AtomicRead(vuCycles[0]) + AtomicRead(vuCycles[1]) + + AtomicRead(vuCycles[2]) + AtomicRead(vuCycles[3])) >> 2; +} + +void VU_Thread::KickStart(bool forceKick) +{ + if ((forceKick && !semaEvent.Count()) + || (!isBusy && GetReadPos() != write_pos)) semaEvent.Post(); +} + +bool VU_Thread::IsDone() +{ + return !isBusy && GetReadPos() == GetWritePos(); +} + +void VU_Thread::WaitVU() +{ + MTVU_LOG("MTVU - WaitVU!"); + for(;;) { + if (IsDone()) break; + //DevCon.WriteLn("WaitVU()"); + pxAssert(THREAD_VU1); + KickStart(); + ScopedLock lock(mtxBusy); + } +} + +void VU_Thread::ExecuteVU(u32 vu_addr, u32 vif_top, u32 vif_itop) +{ + MTVU_LOG("MTVU - ExecuteVU!"); + ReserveSpace(4); + Write(MTVU_VU_EXECUTE); + Write(vu_addr); + Write(vif_top); + Write(vif_itop); + incWritePos(); + gifUnit.TransferGSPacketData(GIF_TRANS_MTVU, NULL, 0); + KickStart(); + u32 cycles = std::min(Get_vuCycles(), 3000u); + cpuRegs.cycle += cycles * EmuConfig.Speedhacks.VUCycleSteal; +} + +void VU_Thread::VifUnpack(vifStruct& _vif, VIFregisters& _vifRegs, u8* data, u32 size) +{ + MTVU_LOG("MTVU - VifUnpack!"); + u32 vif_copy_size = (uptr)&_vif.StructEnd - (uptr)&_vif.tag; + ReserveSpace(1 + size_u32(vif_copy_size) + size_u32(sizeof(VIFregistersMTVU)) + 1 + size_u32(size)); + Write(MTVU_VIF_UNPACK); + Write(&_vif.tag, vif_copy_size); + WriteRegs(&_vifRegs); + Write(size); + Write(data, size); + incWritePos(); + KickStart(); +} + +void VU_Thread::WriteMicroMem(u32 vu_micro_addr, void* data, u32 size) +{ + MTVU_LOG("MTVU - WriteMicroMem!"); + ReserveSpace(3 + size_u32(size)); + Write(MTVU_VU_WRITE_MICRO); + Write(vu_micro_addr); + Write(size); + Write(data, size); + incWritePos(); +} + +void VU_Thread::WriteDataMem(u32 vu_data_addr, void* data, u32 size) +{ + MTVU_LOG("MTVU - WriteDataMem!"); + ReserveSpace(3 + size_u32(size)); + Write(MTVU_VU_WRITE_DATA); + Write(vu_data_addr); + Write(size); + Write(data, size); + incWritePos(); +} + +void VU_Thread::WriteCol(vifStruct& _vif) +{ + MTVU_LOG("MTVU - WriteCol!"); + ReserveSpace(1 + size_u32(sizeof(_vif.MaskCol))); + Write(MTVU_VIF_WRITE_COL); + Write(&_vif.MaskCol, sizeof(_vif.MaskCol)); + incWritePos(); +} + +void VU_Thread::WriteRow(vifStruct& _vif) +{ + MTVU_LOG("MTVU - WriteRow!"); + ReserveSpace(1 + size_u32(sizeof(_vif.MaskRow))); + Write(MTVU_VIF_WRITE_ROW); + Write(&_vif.MaskRow, sizeof(_vif.MaskRow)); + incWritePos(); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/MTVU.h pcsx2-1.4.0/pcsx2/MTVU.h --- pcsx2-1.3.1+dfsg/pcsx2/MTVU.h 2014-04-14 18:23:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/MTVU.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,104 +1,104 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#pragma once -#include "System/SysThreads.h" -#include "Vif.h" -#include "Vif_Dma.h" -#include "VUmicro.h" - -#define MTVU_LOG(...) do{} while(0) -//#define MTVU_LOG DevCon.WriteLn - -// Notes: -// - This class should only be accessed from the EE thread... -// - buffer_size must be power of 2 -// - ring-buffer has no complete pending packets when read_pos==write_pos -class VU_Thread : public pxThread { - static const s32 buffer_size = (_1mb * 16) / sizeof(s32); - static const u32 buffer_mask = buffer_size - 1; - __aligned(4) u32 buffer[buffer_size]; - __aligned(4) volatile s32 read_pos; // Only modified by VU thread - __aligned(4) volatile bool isBusy; // Is thread processing data? - __aligned(4) s32 write_pos; // Only modified by EE thread - __aligned(4) s32 write_offset; // Only modified by EE thread - __aligned(4) Mutex mtxBusy; - __aligned(4) Semaphore semaEvent; - __aligned(4) BaseVUmicroCPU*& vuCPU; - __aligned(4) VURegs& vuRegs; - -public: - __aligned16 vifStruct vif; - __aligned16 VIFregisters vifRegs; - __aligned(4) Semaphore semaXGkick; - __aligned(4) u32 vuCycles[4]; // Used for VU cycle stealing hack - __aligned(4) u32 vuCycleIdx; // Used for VU cycle stealing hack - - VU_Thread(BaseVUmicroCPU*& _vuCPU, VURegs& _vuRegs); - virtual ~VU_Thread() throw(); - - void Reset(); - - // Get MTVU to start processing its packets if it isn't already - void KickStart(bool forceKick = false); - - // Used for assertions... - bool IsDone(); - - // Waits till MTVU is done processing - void WaitVU(); - - void ExecuteVU(u32 vu_addr, u32 vif_top, u32 vif_itop); - - void VifUnpack(vifStruct& _vif, VIFregisters& _vifRegs, u8* data, u32 size); - - // Writes to VU's Micro Memory (size in bytes) - void WriteMicroMem(u32 vu_micro_addr, void* data, u32 size); - - // Writes to VU's Data Memory (size in bytes) - void WriteDataMem(u32 vu_data_addr, void* data, u32 size); - - void WriteCol(vifStruct& _vif); - - void WriteRow(vifStruct& _vif); - -protected: - void ExecuteTaskInThread(); - -private: - void ExecuteRingBuffer(); - - void WaitOnSize(s32 size); - void ReserveSpace(s32 size); - - s32 GetReadPos(); - s32 GetWritePos(); - u32* GetWritePtr(); - - void incReadPos(s32 offset); - void incWritePos(); - - u32 Read(); - void Read(void* dest, u32 size); - void ReadRegs(VIFregisters* dest); - - void Write(u32 val); - void Write(void* src, u32 size); - void WriteRegs(VIFregisters* src); - - u32 Get_vuCycles(); -}; - -extern __aligned16 VU_Thread vu1Thread; +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once +#include "System/SysThreads.h" +#include "Vif.h" +#include "Vif_Dma.h" +#include "VUmicro.h" + +#define MTVU_LOG(...) do{} while(0) +//#define MTVU_LOG DevCon.WriteLn + +// Notes: +// - This class should only be accessed from the EE thread... +// - buffer_size must be power of 2 +// - ring-buffer has no complete pending packets when read_pos==write_pos +class VU_Thread : public pxThread { + static const s32 buffer_size = (_1mb * 16) / sizeof(s32); + static const u32 buffer_mask = buffer_size - 1; + __aligned(4) u32 buffer[buffer_size]; + __aligned(4) volatile s32 read_pos; // Only modified by VU thread + __aligned(4) volatile bool isBusy; // Is thread processing data? + __aligned(4) s32 write_pos; // Only modified by EE thread + __aligned(4) s32 write_offset; // Only modified by EE thread + __aligned(4) Mutex mtxBusy; + __aligned(4) Semaphore semaEvent; + __aligned(4) BaseVUmicroCPU*& vuCPU; + __aligned(4) VURegs& vuRegs; + +public: + __aligned16 vifStruct vif; + __aligned16 VIFregisters vifRegs; + __aligned(4) Semaphore semaXGkick; + __aligned(4) u32 vuCycles[4]; // Used for VU cycle stealing hack + __aligned(4) u32 vuCycleIdx; // Used for VU cycle stealing hack + + VU_Thread(BaseVUmicroCPU*& _vuCPU, VURegs& _vuRegs); + virtual ~VU_Thread() throw(); + + void Reset(); + + // Get MTVU to start processing its packets if it isn't already + void KickStart(bool forceKick = false); + + // Used for assertions... + bool IsDone(); + + // Waits till MTVU is done processing + void WaitVU(); + + void ExecuteVU(u32 vu_addr, u32 vif_top, u32 vif_itop); + + void VifUnpack(vifStruct& _vif, VIFregisters& _vifRegs, u8* data, u32 size); + + // Writes to VU's Micro Memory (size in bytes) + void WriteMicroMem(u32 vu_micro_addr, void* data, u32 size); + + // Writes to VU's Data Memory (size in bytes) + void WriteDataMem(u32 vu_data_addr, void* data, u32 size); + + void WriteCol(vifStruct& _vif); + + void WriteRow(vifStruct& _vif); + +protected: + void ExecuteTaskInThread(); + +private: + void ExecuteRingBuffer(); + + void WaitOnSize(s32 size); + void ReserveSpace(s32 size); + + s32 GetReadPos(); + s32 GetWritePos(); + u32* GetWritePtr(); + + void incReadPos(s32 offset); + void incWritePos(); + + u32 Read(); + void Read(void* dest, u32 size); + void ReadRegs(VIFregisters* dest); + + void Write(u32 val); + void Write(void* src, u32 size); + void WriteRegs(VIFregisters* src); + + u32 Get_vuCycles(); +}; + +extern __aligned16 VU_Thread vu1Thread; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/OutputIsoFile.cpp pcsx2-1.4.0/pcsx2/OutputIsoFile.cpp --- pcsx2-1.3.1+dfsg/pcsx2/OutputIsoFile.cpp 2012-12-03 19:53:27.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/OutputIsoFile.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,148 +1,148 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - - -#include "PrecompiledHeader.h" -#include "IopCommon.h" -#include "CDVD/IsoFileFormats.h" - -#include - -/* -void pxStream_OpenCheck( const wxStreamBase& stream, const wxString& fname, const wxString& mode ) -{ - if (stream.IsOk()) return; - - ScopedExcept ex(Exception::FromErrno(fname, errno)); - ex->SetDiagMsg( pxsFmt(L"Unable to open the file for %s: %s", mode.c_str(), ex->DiagMsg().c_str()) ); - ex->Rethrow(); -} - -OutputIsoFile::OutputIsoFile() -{ - _init(); -} - -OutputIsoFile::~OutputIsoFile() throw() -{ - Close(); -} - -void OutputIsoFile::_init() -{ - m_type = ISOTYPE_ILLEGAL; - m_flags = 0; - - m_offset = 0; - m_blockofs = 0; - m_blocksize = 0; - m_blocks = 0; - - m_dtable = 0; - m_dtablesize = 0; -} - -void OutputIsoFile::Create(const wxString& filename, int flags) -{ - Close(); - m_filename = filename; - - m_flags = flags; - m_offset = 0; - m_blockofs = 24; - m_blocksize = 2048; - - m_outstream = new wxFileOutputStream( m_filename ); - pxStream_OpenCheck( *m_outstream, m_filename, L"writing" ); - - Console.WriteLn("isoFile create ok: %s ", m_filename.c_str()); -} - -// Generates format header information for blockdumps. -void OutputIsoFile::WriteFormat(int _blockofs, uint _blocksize, uint _blocks) -{ - m_blocksize = _blocksize; - m_blocks = _blocks; - m_blockofs = _blockofs; - - Console.WriteLn("blockoffset = %d", m_blockofs); - Console.WriteLn("blocksize = %u", m_blocksize); - Console.WriteLn("blocks = %u", m_blocks); - - if (m_flags & ISOFLAGS_BLOCKDUMP_V2) - { - outWrite("BDV2", 4); - outWrite(m_blocksize); - outWrite(m_blocks); - outWrite(m_blockofs); - } -} - -void OutputIsoFile::_WriteBlock(const u8* src, uint lsn) -{ - wxFileOffset ofs = (wxFileOffset)lsn * m_blocksize + m_offset; - - m_outstream->SeekO( ofs ); - outWrite( src + m_blockofs, m_blocksize ); -} - -void OutputIsoFile::_WriteBlockD(const u8* src, uint lsn) -{ - // Find and ignore blocks that have already been dumped: - for (int i=0; i( lsn ); - outWrite( src + m_blockofs, m_blocksize ); -} - -void OutputIsoFile::WriteBlock(const u8* src, uint lsn) -{ - if (m_flags == ISOFLAGS_BLOCKDUMP_V2) - _WriteBlockD(src, lsn); - else - _WriteBlock(src, lsn); -} - -void OutputIsoFile::Close() -{ - m_dtable.Delete(); - - _init(); -} - -void OutputIsoFile::outWrite( const void* src, size_t size ) -{ - m_outstream->Write(src, size); - if(m_outstream->GetLastError() == wxSTREAM_WRITE_ERROR) - { - int err = errno; - if (!err) - throw Exception::BadStream(m_filename).SetDiagMsg(pxsFmt(L"An error occurred while writing %u bytes to file", size)); - - ScopedExcept ex(Exception::FromErrno(m_filename, err)); - ex->SetDiagMsg( pxsFmt(L"An error occurred while writing %u bytes to file: %s", size, ex->DiagMsg().c_str()) ); - ex->Rethrow(); - } -} - -bool OutputIsoFile::IsOpened() const -{ - return m_outstream && m_outstream->IsOk(); -} -*/ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + + +#include "PrecompiledHeader.h" +#include "IopCommon.h" +#include "CDVD/IsoFileFormats.h" + +#include + +/* +void pxStream_OpenCheck( const wxStreamBase& stream, const wxString& fname, const wxString& mode ) +{ + if (stream.IsOk()) return; + + ScopedExcept ex(Exception::FromErrno(fname, errno)); + ex->SetDiagMsg( pxsFmt(L"Unable to open the file for %s: %s", mode.c_str(), ex->DiagMsg().c_str()) ); + ex->Rethrow(); +} + +OutputIsoFile::OutputIsoFile() +{ + _init(); +} + +OutputIsoFile::~OutputIsoFile() throw() +{ + Close(); +} + +void OutputIsoFile::_init() +{ + m_type = ISOTYPE_ILLEGAL; + m_flags = 0; + + m_offset = 0; + m_blockofs = 0; + m_blocksize = 0; + m_blocks = 0; + + m_dtable = 0; + m_dtablesize = 0; +} + +void OutputIsoFile::Create(const wxString& filename, int flags) +{ + Close(); + m_filename = filename; + + m_flags = flags; + m_offset = 0; + m_blockofs = 24; + m_blocksize = 2048; + + m_outstream = new wxFileOutputStream( m_filename ); + pxStream_OpenCheck( *m_outstream, m_filename, L"writing" ); + + Console.WriteLn("isoFile create ok: %s ", m_filename.c_str()); +} + +// Generates format header information for blockdumps. +void OutputIsoFile::WriteFormat(int _blockofs, uint _blocksize, uint _blocks) +{ + m_blocksize = _blocksize; + m_blocks = _blocks; + m_blockofs = _blockofs; + + Console.WriteLn("blockoffset = %d", m_blockofs); + Console.WriteLn("blocksize = %u", m_blocksize); + Console.WriteLn("blocks = %u", m_blocks); + + if (m_flags & ISOFLAGS_BLOCKDUMP_V2) + { + outWrite("BDV2", 4); + outWrite(m_blocksize); + outWrite(m_blocks); + outWrite(m_blockofs); + } +} + +void OutputIsoFile::_WriteBlock(const u8* src, uint lsn) +{ + wxFileOffset ofs = (wxFileOffset)lsn * m_blocksize + m_offset; + + m_outstream->SeekO( ofs ); + outWrite( src + m_blockofs, m_blocksize ); +} + +void OutputIsoFile::_WriteBlockD(const u8* src, uint lsn) +{ + // Find and ignore blocks that have already been dumped: + for (int i=0; i( lsn ); + outWrite( src + m_blockofs, m_blocksize ); +} + +void OutputIsoFile::WriteBlock(const u8* src, uint lsn) +{ + if (m_flags == ISOFLAGS_BLOCKDUMP_V2) + _WriteBlockD(src, lsn); + else + _WriteBlock(src, lsn); +} + +void OutputIsoFile::Close() +{ + m_dtable.Delete(); + + _init(); +} + +void OutputIsoFile::outWrite( const void* src, size_t size ) +{ + m_outstream->Write(src, size); + if(m_outstream->GetLastError() == wxSTREAM_WRITE_ERROR) + { + int err = errno; + if (!err) + throw Exception::BadStream(m_filename).SetDiagMsg(pxsFmt(L"An error occurred while writing %u bytes to file", size)); + + ScopedExcept ex(Exception::FromErrno(m_filename, err)); + ex->SetDiagMsg( pxsFmt(L"An error occurred while writing %u bytes to file: %s", size, ex->DiagMsg().c_str()) ); + ex->Rethrow(); + } +} + +bool OutputIsoFile::IsOpened() const +{ + return m_outstream && m_outstream->IsOk(); +} +*/ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Patch.cpp pcsx2-1.4.0/pcsx2/Patch.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Patch.cpp 2015-01-19 08:12:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Patch.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -197,13 +197,13 @@ bool found = dir.GetFirst(&buffer, L"*", wxDIR_FILES); while (found) { if (buffer.Upper().Matches(fileSpec.Upper())) { - DevCon.WriteLn(Color_Green, L"Found %s file: '%s'", WX_STR(friendlyName), WX_STR(buffer)); + PatchesCon->WriteLn(Color_Green, L"Found %s file: '%s'", WX_STR(friendlyName), WX_STR(buffer)); int before = cheatnumber; f.Open(Path::Combine(dir.GetName(), buffer)); inifile_process(f); f.Close(); int loaded = cheatnumber - before; - DevCon.WriteLn((loaded ? Color_Green : Color_Gray), L"Loaded %d %s from '%s' at '%s'", + PatchesCon->WriteLn((loaded ? Color_Green : Color_Gray), L"Loaded %d %s from '%s' at '%s'", loaded, WX_STR(friendlyName), WX_STR(buffer), WX_STR(folderName.ToString())); numberFoundCheatsFiles ++; } @@ -222,7 +222,7 @@ int before = cheatnumber; - std::auto_ptr entry; + std::unique_ptr entry; wxFFileInputStream in(cheatsArchiveFilename); wxZipInputStream zip(in); while (entry.reset(zip.GetNextEntry()), entry.get() != NULL) @@ -230,15 +230,14 @@ wxString name = entry->GetName(); name.MakeUpper(); if (name.Find(gameCRC) == 0 && name.Find(L".PNACH")+6u == name.Length()) { - DevCon.WriteLn(Color_Green, L"Loading patch '%s' from archive '%s'", - WX_STR(entry->GetName()), WX_STR(cheatsArchiveFilename)); + PatchesCon->WriteLn(Color_Green, L"Loading patch '%s' from archive '%s'", + WX_STR(entry->GetName()), WX_STR(cheatsArchiveFilename)); wxTextInputStream pnach(zip); while (!zip.Eof()) { inifile_processString(pnach.ReadLine()); } } } - return cheatnumber - before; } @@ -259,10 +258,10 @@ // This check only tests the default cheats folder, so the message it produces is possibly misleading. if (folderName.ToString().IsSameAs(PathDefs::GetCheats().ToString()) && numberFoundCheatsFiles == 0) { wxString pathName = Path::Combine(folderName, name.MakeUpper() + L".pnach"); - Console.WriteLn(Color_Gray, L"Not found %s file: %s", WX_STR(friendlyName), WX_STR(pathName)); + PatchesCon->WriteLn(Color_Gray, L"Not found %s file: %s", WX_STR(friendlyName), WX_STR(pathName)); } - DevCon.WriteLn((loaded ? Color_Green : Color_Gray), L"Overall %d %s loaded", loaded, WX_STR(friendlyName)); + PatchesCon->WriteLn((loaded ? Color_Green : Color_Gray), L"Overall %d %s loaded", loaded, WX_STR(friendlyName)); return loaded; } @@ -285,7 +284,7 @@ { void comment( const wxString& text1, const wxString& text2 ) { - DevCon.WriteLn(L"comment: " + text2); + PatchesCon->WriteLn(L"comment: " + text2); } struct PatchPieces @@ -313,7 +312,9 @@ // (translated) messages for display in a popup window then we'll have to upgrade the // exception a little bit. - DevCon.WriteLn(cmd + L" " + param); + // print the actual patch lines only in verbose mode (even in devel) + if (DevConWriterEnabled) + DevCon.WriteLn(cmd + L" " + param); try { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Patch.h pcsx2-1.4.0/pcsx2/Patch.h --- pcsx2-1.3.1+dfsg/pcsx2/Patch.h 2014-01-25 21:13:52.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Patch.h 2016-01-05 17:28:08.000000000 +0000 @@ -70,3 +70,4 @@ extern void ApplyCheat(int place = 1); extern void _ApplyPatch(IniPatch *p); +extern const IConsoleWriter *PatchesCon; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Patch_Memory.cpp pcsx2-1.4.0/pcsx2/Patch_Memory.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Patch_Memory.cpp 2014-10-08 05:55:18.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Patch_Memory.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,490 +1,490 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" - -#define _PC_ // disables MIPS opcode macros. - -#include "IopCommon.h" -#include "Patch.h" - -u32 SkipCount = 0, IterationCount = 0; -u32 IterationIncrement = 0, ValueIncrement = 0; -u32 PrevCheatType = 0, PrevCheatAddr = 0, LastType = 0; - -void writeCheat() -{ - switch (LastType) - { - case 0x0: - memWrite8(PrevCheatAddr, IterationIncrement & 0xFF); - break; - case 0x1: - memWrite16(PrevCheatAddr, IterationIncrement & 0xFFFF); - break; - case 0x2: - memWrite32(PrevCheatAddr, IterationIncrement); - break; - default: - break; - } -} - -void handle_extended_t(IniPatch *p) -{ - if (SkipCount > 0) - { - SkipCount--; - } - else switch (PrevCheatType) - { - case 0x3040: // vvvvvvvv 00000000 Inc - { - u32 mem = memRead32(PrevCheatAddr); - memWrite32(PrevCheatAddr, mem + (p->addr)); - PrevCheatType = 0; - break; - } - - case 0x3050: // vvvvvvvv 00000000 Dec - { - u32 mem = memRead32(PrevCheatAddr); - memWrite32(PrevCheatAddr, mem - (p->addr)); - PrevCheatType = 0; - break; - } - - case 0x4000: // vvvvvvvv iiiiiiii - for (u32 i = 0; i < IterationCount; i++) - { - memWrite32((u32)(PrevCheatAddr + (i * IterationIncrement)), (u32)(p->addr + ((u32)p->data * i))); - } - PrevCheatType = 0; - break; - - case 0x5000: // dddddddd iiiiiiii - for (u32 i = 0; i < IterationCount; i++) - { - u8 mem = memRead8(PrevCheatAddr + i); - memWrite8(((u32)p->data) + i, mem); - } - PrevCheatType = 0; - break; - - case 0x6000: // 000Xnnnn iiiiiiii - if (IterationIncrement == 0x0) - { - //LastType = ((u32)p->addr & 0x000F0000) >> 16; - u32 mem = memRead32(PrevCheatAddr); - if ((u32)p->addr < 0x100) - { - LastType = 0x0; - PrevCheatAddr = mem + ((u32)p->addr); - } - else if ((u32)p->addr < 0x1000) - { - LastType = 0x1; - PrevCheatAddr = mem + ((u32)p->addr * 2); - } - else - { - LastType = 0x2; - PrevCheatAddr = mem + ((u32)p->addr * 4); - } - - // Check if needed to read another pointer - PrevCheatType = 0; - if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) - { - switch (LastType) - { - case 0x0: - memWrite8(PrevCheatAddr, (u8)p->data & 0xFF); - break; - case 0x1: - memWrite16(PrevCheatAddr, (u16)p->data & 0x0FFFF); - break; - case 0x2: - memWrite32(PrevCheatAddr, (u32)p->data); - break; - default: - break; - } - } - } - else - { - // Get Number of pointers - if (((u32)p->addr & 0x0000FFFF) == 0) - IterationCount = 1; - else - IterationCount = (u32)p->addr & 0x0000FFFF; - - // Read first pointer - LastType = ((u32)p->addr & 0x000F0000) >> 16; - u32 mem = memRead32(PrevCheatAddr); - - PrevCheatAddr = mem + (u32)p->data; - IterationCount--; - - // Check if needed to read another pointer - if (IterationCount == 0) - { - PrevCheatType = 0; - if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); - } - else - { - if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) - PrevCheatType = 0; - else - PrevCheatType = 0x6001; - } - } - break; - - case 0x6001: // 000Xnnnn iiiiiiii - { - // Read first pointer - u32 mem = memRead32(PrevCheatAddr & 0x0FFFFFFF); - - PrevCheatAddr = mem + (u32)p->addr; - IterationCount--; - - // Check if needed to read another pointer - if (IterationCount == 0) - { - PrevCheatType = 0; - if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); - } - else - { - mem = memRead32(PrevCheatAddr); - - PrevCheatAddr = mem + (u32)p->data; - IterationCount--; - if (IterationCount == 0) - { - PrevCheatType = 0; - if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); - } - } - } - break; - - default: - if ((p->addr & 0xF0000000) == 0x00000000) // 0aaaaaaa 0000000vv - { - memWrite8(p->addr & 0x0FFFFFFF, (u8)p->data & 0x000000FF); - PrevCheatType = 0; - } - else if ((p->addr & 0xF0000000) == 0x10000000) // 1aaaaaaa 0000vvvv - { - memWrite16(p->addr & 0x0FFFFFFF, (u16)p->data & 0x0000FFFF); - PrevCheatType = 0; - } - else if ((p->addr & 0xF0000000) == 0x20000000) // 2aaaaaaa vvvvvvvv - { - memWrite32(p->addr & 0x0FFFFFFF, (u32)p->data); - PrevCheatType = 0; - } - else if ((p->addr & 0xFFFF0000) == 0x30000000) // 300000vv 0aaaaaaa Inc - { - u8 mem = memRead8((u32)p->data); - memWrite8((u32)p->data, mem + (p->addr & 0x000000FF)); - PrevCheatType = 0; - } - else if ((p->addr & 0xFFFF0000) == 0x30100000) // 301000vv 0aaaaaaa Dec - { - u8 mem = memRead8((u32)p->data); - memWrite8((u32)p->data, mem - (p->addr & 0x000000FF)); - PrevCheatType = 0; - } - else if ((p->addr & 0xFFFF0000) == 0x30200000) // 3020vvvv 0aaaaaaa Inc - { - u16 mem = memRead16((u32)p->data); - memWrite16((u32)p->data, mem + (p->addr & 0x0000FFFF)); - PrevCheatType = 0; - } - else if ((p->addr & 0xFFFF0000) == 0x30300000) // 3030vvvv 0aaaaaaa Dec - { - u16 mem = memRead16((u32)p->data); - memWrite16((u32)p->data, mem - (p->addr & 0x0000FFFF)); - PrevCheatType = 0; - } - else if ((p->addr & 0xFFFF0000) == 0x30400000) // 30400000 0aaaaaaa Inc + Another line - { - PrevCheatType = 0x3040; - PrevCheatAddr = (u32)p->data; - } - else if ((p->addr & 0xFFFF0000) == 0x30500000) // 30500000 0aaaaaaa Inc + Another line - { - PrevCheatType = 0x3050; - PrevCheatAddr = (u32)p->data; - } - else if ((p->addr & 0xF0000000) == 0x40000000) // 4aaaaaaa nnnnssss + Another line - { - IterationCount = ((u32)p->data & 0xFFFF0000) / 0x10000; - IterationIncrement = ((u32)p->data & 0x0000FFFF) * 4; - PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; - PrevCheatType = 0x4000; - } - else if ((p->addr & 0xF0000000) == 0x50000000) // 5sssssss nnnnnnnn + Another line - { - PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; - IterationCount = ((u32)p->data); - PrevCheatType = 0x5000; - } - else if ((p->addr & 0xF0000000) == 0x60000000) // 6aaaaaaa 000000vv + Another line/s - { - PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; - IterationIncrement = ((u32)p->data); - IterationCount = 0; - PrevCheatType = 0x6000; - } - else if ((p->addr & 0xF0000000) == 0x70000000) - { - if ((p->data & 0x00F00000) == 0x00000000) // 7aaaaaaa 000000vv - { - u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); - memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem | (p->data & 0x000000FF))); - } - else if ((p->data & 0x00F00000) == 0x00100000) // 7aaaaaaa 0010vvvv - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem | (p->data & 0x0000FFFF))); - } - else if ((p->data & 0x00F00000) == 0x00200000) // 7aaaaaaa 002000vv - { - u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); - memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem & (p->data & 0x000000FF))); - } - else if ((p->data & 0x00F00000) == 0x00300000) // 7aaaaaaa 0030vvvv - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem & (p->data & 0x0000FFFF))); - } - else if ((p->data & 0x00F00000) == 0x00400000) // 7aaaaaaa 004000vv - { - u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); - memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem ^ (p->data & 0x000000FF))); - } - else if ((p->data & 0x00F00000) == 0x00500000) // 7aaaaaaa 0050vvvv - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem ^ (p->data & 0x0000FFFF))); - } - } - else if (p->addr < 0xE0000000) - { - if (((u32)p->data & 0xFFFF0000) == 0x00000000) // Daaaaaaa 0000dddd - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - if (mem != (0x0000FFFF & (u32)p->data)) - { - SkipCount = 1; - } - PrevCheatType = 0; - } - else if (((u32)p->data & 0xFFFF0000) == 0x00100000) // Daaaaaaa 0010dddd - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - if (mem == (0x0000FFFF & (u32)p->data)) - { - SkipCount = 1; - } - PrevCheatType = 0; - } - else if (((u32)p->data & 0xFFFF0000) == 0x00200000) // Daaaaaaa 0020dddd - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - if (mem >= (0x0000FFFF & (u32)p->data)) - { - SkipCount = 1; - } - PrevCheatType = 0; - } - else if (((u32)p->data & 0xFFFF0000) == 0x00300000) // Daaaaaaa 0030dddd - { - u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); - if (mem <= (0x0000FFFF & (u32)p->data)) - { - SkipCount = 1; - } - PrevCheatType = 0; - } - } - else if (p->addr < 0xF0000000) - { - if (((u32)p->data & 0xF0000000) == 0x00000000) // Ezyyvvvv 0aaaaaaa - { - u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; - - if (z == 0) // E0yyvvvv 0aaaaaaa - { - u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); - if (mem != (0x0000FFFF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - else if (z == 1) // E1yy00vv 0aaaaaaa - { - u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); - if (mem != (0x000000FF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - } - else if (((u32)p->data & 0xF0000000) == 0x10000000) // Ezyyvvvv 1aaaaaaa - { - u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; - - if (z == 0) // E0yyvvvv 1aaaaaaa - { - u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); - if (mem == (0x0000FFFF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - else if (z == 1) // E1yy00vv 1aaaaaaa - { - u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); - if (mem == (0x000000FF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - } - else if (((u32)p->data & 0xF0000000) == 0x20000000) // Ezyyvvvv 2aaaaaaa - { - u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; - - if (z == 0) // E0yyvvvv 2aaaaaaa - { - u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); - if (mem >= (0x0000FFFF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - else if (z == 1) // E1yy00vv 2aaaaaaa - { - u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); - if (mem >= (0x000000FF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - } - else if (((u32)p->data & 0xF0000000) == 0x30000000) // Ezyyvvvv 3aaaaaaa - { - u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; - - if (z == 0) // E0yyvvvv 3aaaaaaa - { - u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); - if (mem <= (0x0000FFFF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - else if (z == 1) // E1yy00vv 3aaaaaaa - { - u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); - if (mem <= (0x000000FF & (u32)p->addr)) - { - SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; - } - PrevCheatType = 0; - } - } - } - } -} - -void _ApplyPatch(IniPatch *p) -{ - if (p->enabled == 0) return; - - switch (p->cpu) - { - case CPU_EE: - switch (p->type) - { - case BYTE_T: - if (memRead8(p->addr) != (u8)p->data) - memWrite8(p->addr, (u8)p->data); - break; - - case SHORT_T: - if (memRead16(p->addr) != (u16)p->data) - memWrite16(p->addr, (u16)p->data); - break; - - case WORD_T: - if (memRead32(p->addr) != (u32)p->data) - memWrite32(p->addr, (u32)p->data); - break; - - case DOUBLE_T: - u64 mem; - memRead64(p->addr, &mem); - if (mem != p->data) - memWrite64(p->addr, &p->data); - break; - - case EXTENDED_T: - handle_extended_t(p); - break; - - default: - break; - } - break; - - case CPU_IOP: - switch (p->type) - { - case BYTE_T: - if (iopMemRead8(p->addr) != (u8)p->data) - iopMemWrite8(p->addr, (u8)p->data); - break; - case SHORT_T: - if (iopMemRead16(p->addr) != (u16)p->data) - iopMemWrite16(p->addr, (u16)p->data); - break; - case WORD_T: - if (iopMemRead32(p->addr) != (u32)p->data) - iopMemWrite32(p->addr, (u32)p->data); - break; - default: - break; - } - break; - - default: - break; - } -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" + +#define _PC_ // disables MIPS opcode macros. + +#include "IopCommon.h" +#include "Patch.h" + +u32 SkipCount = 0, IterationCount = 0; +u32 IterationIncrement = 0, ValueIncrement = 0; +u32 PrevCheatType = 0, PrevCheatAddr = 0, LastType = 0; + +void writeCheat() +{ + switch (LastType) + { + case 0x0: + memWrite8(PrevCheatAddr, IterationIncrement & 0xFF); + break; + case 0x1: + memWrite16(PrevCheatAddr, IterationIncrement & 0xFFFF); + break; + case 0x2: + memWrite32(PrevCheatAddr, IterationIncrement); + break; + default: + break; + } +} + +void handle_extended_t(IniPatch *p) +{ + if (SkipCount > 0) + { + SkipCount--; + } + else switch (PrevCheatType) + { + case 0x3040: // vvvvvvvv 00000000 Inc + { + u32 mem = memRead32(PrevCheatAddr); + memWrite32(PrevCheatAddr, mem + (p->addr)); + PrevCheatType = 0; + break; + } + + case 0x3050: // vvvvvvvv 00000000 Dec + { + u32 mem = memRead32(PrevCheatAddr); + memWrite32(PrevCheatAddr, mem - (p->addr)); + PrevCheatType = 0; + break; + } + + case 0x4000: // vvvvvvvv iiiiiiii + for (u32 i = 0; i < IterationCount; i++) + { + memWrite32((u32)(PrevCheatAddr + (i * IterationIncrement)), (u32)(p->addr + ((u32)p->data * i))); + } + PrevCheatType = 0; + break; + + case 0x5000: // dddddddd iiiiiiii + for (u32 i = 0; i < IterationCount; i++) + { + u8 mem = memRead8(PrevCheatAddr + i); + memWrite8(((u32)p->data) + i, mem); + } + PrevCheatType = 0; + break; + + case 0x6000: // 000Xnnnn iiiiiiii + if (IterationIncrement == 0x0) + { + //LastType = ((u32)p->addr & 0x000F0000) >> 16; + u32 mem = memRead32(PrevCheatAddr); + if ((u32)p->addr < 0x100) + { + LastType = 0x0; + PrevCheatAddr = mem + ((u32)p->addr); + } + else if ((u32)p->addr < 0x1000) + { + LastType = 0x1; + PrevCheatAddr = mem + ((u32)p->addr * 2); + } + else + { + LastType = 0x2; + PrevCheatAddr = mem + ((u32)p->addr * 4); + } + + // Check if needed to read another pointer + PrevCheatType = 0; + if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) + { + switch (LastType) + { + case 0x0: + memWrite8(PrevCheatAddr, (u8)p->data & 0xFF); + break; + case 0x1: + memWrite16(PrevCheatAddr, (u16)p->data & 0x0FFFF); + break; + case 0x2: + memWrite32(PrevCheatAddr, (u32)p->data); + break; + default: + break; + } + } + } + else + { + // Get Number of pointers + if (((u32)p->addr & 0x0000FFFF) == 0) + IterationCount = 1; + else + IterationCount = (u32)p->addr & 0x0000FFFF; + + // Read first pointer + LastType = ((u32)p->addr & 0x000F0000) >> 16; + u32 mem = memRead32(PrevCheatAddr); + + PrevCheatAddr = mem + (u32)p->data; + IterationCount--; + + // Check if needed to read another pointer + if (IterationCount == 0) + { + PrevCheatType = 0; + if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); + } + else + { + if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) + PrevCheatType = 0; + else + PrevCheatType = 0x6001; + } + } + break; + + case 0x6001: // 000Xnnnn iiiiiiii + { + // Read first pointer + u32 mem = memRead32(PrevCheatAddr & 0x0FFFFFFF); + + PrevCheatAddr = mem + (u32)p->addr; + IterationCount--; + + // Check if needed to read another pointer + if (IterationCount == 0) + { + PrevCheatType = 0; + if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); + } + else + { + mem = memRead32(PrevCheatAddr); + + PrevCheatAddr = mem + (u32)p->data; + IterationCount--; + if (IterationCount == 0) + { + PrevCheatType = 0; + if (((mem & 0x0FFFFFFF) & 0x3FFFFFFC) != 0) writeCheat(); + } + } + } + break; + + default: + if ((p->addr & 0xF0000000) == 0x00000000) // 0aaaaaaa 0000000vv + { + memWrite8(p->addr & 0x0FFFFFFF, (u8)p->data & 0x000000FF); + PrevCheatType = 0; + } + else if ((p->addr & 0xF0000000) == 0x10000000) // 1aaaaaaa 0000vvvv + { + memWrite16(p->addr & 0x0FFFFFFF, (u16)p->data & 0x0000FFFF); + PrevCheatType = 0; + } + else if ((p->addr & 0xF0000000) == 0x20000000) // 2aaaaaaa vvvvvvvv + { + memWrite32(p->addr & 0x0FFFFFFF, (u32)p->data); + PrevCheatType = 0; + } + else if ((p->addr & 0xFFFF0000) == 0x30000000) // 300000vv 0aaaaaaa Inc + { + u8 mem = memRead8((u32)p->data); + memWrite8((u32)p->data, mem + (p->addr & 0x000000FF)); + PrevCheatType = 0; + } + else if ((p->addr & 0xFFFF0000) == 0x30100000) // 301000vv 0aaaaaaa Dec + { + u8 mem = memRead8((u32)p->data); + memWrite8((u32)p->data, mem - (p->addr & 0x000000FF)); + PrevCheatType = 0; + } + else if ((p->addr & 0xFFFF0000) == 0x30200000) // 3020vvvv 0aaaaaaa Inc + { + u16 mem = memRead16((u32)p->data); + memWrite16((u32)p->data, mem + (p->addr & 0x0000FFFF)); + PrevCheatType = 0; + } + else if ((p->addr & 0xFFFF0000) == 0x30300000) // 3030vvvv 0aaaaaaa Dec + { + u16 mem = memRead16((u32)p->data); + memWrite16((u32)p->data, mem - (p->addr & 0x0000FFFF)); + PrevCheatType = 0; + } + else if ((p->addr & 0xFFFF0000) == 0x30400000) // 30400000 0aaaaaaa Inc + Another line + { + PrevCheatType = 0x3040; + PrevCheatAddr = (u32)p->data; + } + else if ((p->addr & 0xFFFF0000) == 0x30500000) // 30500000 0aaaaaaa Inc + Another line + { + PrevCheatType = 0x3050; + PrevCheatAddr = (u32)p->data; + } + else if ((p->addr & 0xF0000000) == 0x40000000) // 4aaaaaaa nnnnssss + Another line + { + IterationCount = ((u32)p->data & 0xFFFF0000) / 0x10000; + IterationIncrement = ((u32)p->data & 0x0000FFFF) * 4; + PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; + PrevCheatType = 0x4000; + } + else if ((p->addr & 0xF0000000) == 0x50000000) // 5sssssss nnnnnnnn + Another line + { + PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; + IterationCount = ((u32)p->data); + PrevCheatType = 0x5000; + } + else if ((p->addr & 0xF0000000) == 0x60000000) // 6aaaaaaa 000000vv + Another line/s + { + PrevCheatAddr = (u32)p->addr & 0x0FFFFFFF; + IterationIncrement = ((u32)p->data); + IterationCount = 0; + PrevCheatType = 0x6000; + } + else if ((p->addr & 0xF0000000) == 0x70000000) + { + if ((p->data & 0x00F00000) == 0x00000000) // 7aaaaaaa 000000vv + { + u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); + memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem | (p->data & 0x000000FF))); + } + else if ((p->data & 0x00F00000) == 0x00100000) // 7aaaaaaa 0010vvvv + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem | (p->data & 0x0000FFFF))); + } + else if ((p->data & 0x00F00000) == 0x00200000) // 7aaaaaaa 002000vv + { + u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); + memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem & (p->data & 0x000000FF))); + } + else if ((p->data & 0x00F00000) == 0x00300000) // 7aaaaaaa 0030vvvv + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem & (p->data & 0x0000FFFF))); + } + else if ((p->data & 0x00F00000) == 0x00400000) // 7aaaaaaa 004000vv + { + u8 mem = memRead8((u32)p->addr & 0x0FFFFFFF); + memWrite8((u32)p->addr & 0x0FFFFFFF, (u8)(mem ^ (p->data & 0x000000FF))); + } + else if ((p->data & 0x00F00000) == 0x00500000) // 7aaaaaaa 0050vvvv + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + memWrite16((u32)p->addr & 0x0FFFFFFF, (u16)(mem ^ (p->data & 0x0000FFFF))); + } + } + else if (p->addr < 0xE0000000) + { + if (((u32)p->data & 0xFFFF0000) == 0x00000000) // Daaaaaaa 0000dddd + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + if (mem != (0x0000FFFF & (u32)p->data)) + { + SkipCount = 1; + } + PrevCheatType = 0; + } + else if (((u32)p->data & 0xFFFF0000) == 0x00100000) // Daaaaaaa 0010dddd + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + if (mem == (0x0000FFFF & (u32)p->data)) + { + SkipCount = 1; + } + PrevCheatType = 0; + } + else if (((u32)p->data & 0xFFFF0000) == 0x00200000) // Daaaaaaa 0020dddd + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + if (mem >= (0x0000FFFF & (u32)p->data)) + { + SkipCount = 1; + } + PrevCheatType = 0; + } + else if (((u32)p->data & 0xFFFF0000) == 0x00300000) // Daaaaaaa 0030dddd + { + u16 mem = memRead16((u32)p->addr & 0x0FFFFFFF); + if (mem <= (0x0000FFFF & (u32)p->data)) + { + SkipCount = 1; + } + PrevCheatType = 0; + } + } + else if (p->addr < 0xF0000000) + { + if (((u32)p->data & 0xF0000000) == 0x00000000) // Ezyyvvvv 0aaaaaaa + { + u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; + + if (z == 0) // E0yyvvvv 0aaaaaaa + { + u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); + if (mem != (0x0000FFFF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + else if (z == 1) // E1yy00vv 0aaaaaaa + { + u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); + if (mem != (0x000000FF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + } + else if (((u32)p->data & 0xF0000000) == 0x10000000) // Ezyyvvvv 1aaaaaaa + { + u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; + + if (z == 0) // E0yyvvvv 1aaaaaaa + { + u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); + if (mem == (0x0000FFFF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + else if (z == 1) // E1yy00vv 1aaaaaaa + { + u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); + if (mem == (0x000000FF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + } + else if (((u32)p->data & 0xF0000000) == 0x20000000) // Ezyyvvvv 2aaaaaaa + { + u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; + + if (z == 0) // E0yyvvvv 2aaaaaaa + { + u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); + if (mem >= (0x0000FFFF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + else if (z == 1) // E1yy00vv 2aaaaaaa + { + u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); + if (mem >= (0x000000FF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + } + else if (((u32)p->data & 0xF0000000) == 0x30000000) // Ezyyvvvv 3aaaaaaa + { + u8 z = ((u32)p->addr & 0x0F000000) / 0x01000000; + + if (z == 0) // E0yyvvvv 3aaaaaaa + { + u16 mem = memRead16((u32)p->data & 0x0FFFFFFF); + if (mem <= (0x0000FFFF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + else if (z == 1) // E1yy00vv 3aaaaaaa + { + u8 mem = memRead8((u32)p->data & 0x0FFFFFFF); + if (mem <= (0x000000FF & (u32)p->addr)) + { + SkipCount = ((u32)p->addr & 0x00FF0000) / 0x10000; + } + PrevCheatType = 0; + } + } + } + } +} + +void _ApplyPatch(IniPatch *p) +{ + if (p->enabled == 0) return; + + switch (p->cpu) + { + case CPU_EE: + switch (p->type) + { + case BYTE_T: + if (memRead8(p->addr) != (u8)p->data) + memWrite8(p->addr, (u8)p->data); + break; + + case SHORT_T: + if (memRead16(p->addr) != (u16)p->data) + memWrite16(p->addr, (u16)p->data); + break; + + case WORD_T: + if (memRead32(p->addr) != (u32)p->data) + memWrite32(p->addr, (u32)p->data); + break; + + case DOUBLE_T: + u64 mem; + memRead64(p->addr, &mem); + if (mem != p->data) + memWrite64(p->addr, &p->data); + break; + + case EXTENDED_T: + handle_extended_t(p); + break; + + default: + break; + } + break; + + case CPU_IOP: + switch (p->type) + { + case BYTE_T: + if (iopMemRead8(p->addr) != (u8)p->data) + iopMemWrite8(p->addr, (u8)p->data); + break; + case SHORT_T: + if (iopMemRead16(p->addr) != (u16)p->data) + iopMemWrite16(p->addr, (u16)p->data); + break; + case WORD_T: + if (iopMemRead32(p->addr) != (u32)p->data) + iopMemWrite32(p->addr, (u32)p->data); + break; + default: + break; + } + break; + + default: + break; + } +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Pcsx2Config.cpp pcsx2-1.4.0/pcsx2/Pcsx2Config.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Pcsx2Config.cpp 2014-08-15 22:31:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Pcsx2Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -379,6 +379,8 @@ ShowDebuggerOnStart = false; FontWidth = 8; FontHeight = 12; + WindowWidth = 0; + WindowHeight = 0; } void Pcsx2Config::DebugOptions::LoadSave( IniInterface& ini ) @@ -388,6 +390,8 @@ IniBitBool( ShowDebuggerOnStart ); IniBitfield(FontWidth); IniBitfield(FontHeight); + IniBitfield(WindowWidth); + IniBitfield(WindowHeight); } @@ -398,6 +402,7 @@ bitset = 0; // Set defaults for fresh installs / reset settings McdEnableEjection = true; + McdFolderAutoManage = true; EnablePatches = true; BackupSavestate = true; } @@ -417,6 +422,7 @@ IniBitBool( BackupSavestate ); IniBitBool( McdEnableEjection ); + IniBitBool( McdFolderAutoManage ); IniBitBool( MultitapPort0_Enabled ); IniBitBool( MultitapPort1_Enabled ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/PluginManager.cpp pcsx2-1.4.0/pcsx2/PluginManager.cpp --- pcsx2-1.3.1+dfsg/pcsx2/PluginManager.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/PluginManager.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -66,6 +66,13 @@ return Mcd->McdGetCRC( (PS2E_THISPTR) Mcd, port, slot ); } +void SysPluginBindings::McdNextFrame( uint port, uint slot ) { + Mcd->McdNextFrame( (PS2E_THISPTR) Mcd, port, slot ); +} + +void SysPluginBindings::McdReIndex( uint port, uint slot, const wxString& filter ) { + Mcd->McdReIndex( (PS2E_THISPTR) Mcd, port, slot, filter ); +} // ---------------------------------------------------------------------------- // Yay, order of this array shouldn't be important. :) @@ -320,6 +327,7 @@ #endif _DEV9irqCallback DEV9irqCallback; _DEV9irqHandler DEV9irqHandler; +_DEV9async DEV9async; // USB _USBopen USBopen; @@ -630,6 +638,7 @@ static const LegacyApi_OptMethod s_MethMessOpt_DEV9[] = { + { "DEV9async", (vMeth**)&DEV9async }, { NULL } }; @@ -853,19 +862,22 @@ _PS2EgetLibName GetLibName = (_PS2EgetLibName) Lib.GetSymbol( L"PS2EgetLibName" ); _PS2EgetLibVersion2 GetLibVersion2 = (_PS2EgetLibVersion2) Lib.GetSymbol( L"PS2EgetLibVersion2" ); -#ifdef __linux__ - _PS2EsetEmuVersion SetEmuVersion = NULL; -#else - _PS2EsetEmuVersion SetEmuVersion = (_PS2EsetEmuVersion) Lib.GetSymbol( L"PS2EsetEmuVersion" ); -#endif if( GetLibName == NULL || GetLibVersion2 == NULL ) throw Exception::PluginLoadError( pid ).SetStreamName(Filename) .SetDiagMsg(L"%s plugin init failed: Method binding failure on GetLibName or GetLibVersion2.") .SetUserMsg(_( "The configured %s plugin is not a PCSX2 plugin, or is for an older unsupported version of PCSX2.")); - if( SetEmuVersion != NULL ) - SetEmuVersion( "PCSX2", (0ul << 24) | (9ul<<16) | (7ul<<8) | 0 ); + // Only Windows GSdx uses this. Should be removed in future after GSdx no longer relies on it to show the new config dialog. +#ifdef _WIN32 + // Since only Windows Gsdx has this symbol, that means every other plugin is going to cause error messages to be logged. + // Let's not do that for a hack function. + if (Lib.HasSymbol(L"PS2EsetEmuVersion")) { + _PS2EsetEmuVersion SetEmuVersion = (_PS2EsetEmuVersion)Lib.GetSymbol(L"PS2EsetEmuVersion"); + if (SetEmuVersion) + SetEmuVersion("PCSX2", (PCSX2_VersionHi << 24) | (PCSX2_VersionMid << 16) | (PCSX2_VersionLo << 8) | 0); + } +#endif Name = fromUTF8( GetLibName() ); int version = GetLibVersion2( tbl_PluginInfo[pid].typemask ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Plugins.h pcsx2-1.4.0/pcsx2/Plugins.h --- pcsx2-1.3.1+dfsg/pcsx2/Plugins.h 2013-04-27 16:24:02.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Plugins.h 2016-01-05 17:28:08.000000000 +0000 @@ -241,6 +241,8 @@ void McdSave( uint port, uint slot, const u8 *src, u32 adr, int size ); void McdEraseBlock( uint port, uint slot, u32 adr ); u64 McdGetCRC( uint port, uint slot ); + void McdNextFrame( uint port, uint slot ); + void McdReIndex( uint port, uint slot, const wxString& filter ); friend class SysCorePlugins; }; @@ -296,7 +298,7 @@ volatile u32 m_mcdOpen; public: // hack until we unsuck plugins... - ScopedPtr m_info[PluginId_Count]; + ScopedPtr m_info[PluginId_AllocCount]; public: SysCorePlugins(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/ps2/BiosTools.cpp pcsx2-1.4.0/pcsx2/ps2/BiosTools.cpp --- pcsx2-1.3.1+dfsg/pcsx2/ps2/BiosTools.cpp 2014-12-12 21:00:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/ps2/BiosTools.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -190,7 +190,7 @@ static void LoadExtraRom( const wxChar* ext, u8 (&dest)[_size] ) { wxString Bios1; - s64 filesize; + s64 filesize = 0; // Try first a basic extension concatenation (normally results in something like name.bin.rom1) const wxString Bios( g_Conf->FullpathToBios() ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/ps2/Iop/IopHwRead.cpp pcsx2-1.4.0/pcsx2/ps2/Iop/IopHwRead.cpp --- pcsx2-1.3.1+dfsg/pcsx2/ps2/Iop/IopHwRead.cpp 2014-08-15 04:32:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/ps2/Iop/IopHwRead.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -148,14 +148,14 @@ // should it do the logic for both 16 and 32, or not do logic at all? psxCounters[cntidx].mode &= ~0x1800; - psxCounters[cntidx].mode |= 0x400; break; case 0x8: ret = psxCounters[cntidx].target; break; - + default: + DevCon.Warning("Unknown 16bit counter read %x", addr); ret = psxHu32(addr); break; } @@ -184,7 +184,6 @@ // should it do the logic for both 16 and 32, or not do logic at all? psxCounters[cntidx].mode &= ~0x1800; - psxCounters[cntidx].mode |= 0x400; break; case 0x8: @@ -196,6 +195,7 @@ break; default: + DevCon.Warning("Unknown 32bit counter read %x", addr); ret = psxHu32(addr); break; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/ps2/Iop/IopHwWrite.cpp pcsx2-1.4.0/pcsx2/ps2/Iop/IopHwWrite.cpp --- pcsx2-1.3.1+dfsg/pcsx2/ps2/Iop/IopHwWrite.cpp 2014-03-06 23:00:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/ps2/Iop/IopHwWrite.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -429,13 +429,34 @@ mcase(0x1f8010f4): { - u32 tmp = (~val) & HW_DMA_ICR; - psxHu(addr) = ((tmp ^ val) & 0xffffff) ^ tmp; - } + //u32 tmp = (~val) & HW_DMA_ICR; + //u32 old = ((tmp ^ val) & 0xffffff) ^ tmp; + ///psxHu(addr) = ((tmp ^ val) & 0xffffff) ^ tmp; + u32 newtmp = (HW_DMA_ICR & 0xff000000) | (val & 0xffffff); + newtmp &= ~(val & 0x7F000000); + if (((newtmp >> 15) & 0x1) || (((newtmp >> 23) & 0x1) == 0x1 && (((newtmp & 0x7F000000) >> 8) & (newtmp & 0x7F0000)) != 0)) { + newtmp |= 0x80000000; + } + else { + newtmp &= ~0x80000000; + } + //if (newtmp != old) + // DevCon.Warning("ICR Old %x New %x", old, newtmp); + psxHu(addr) = newtmp; + if ((HW_DMA_ICR >> 15) & 0x1) { + DevCon.Warning("Force ICR IRQ!"); + psxRegs.CP0.n.Cause &= ~0x7C; + iopIntcIrq(3); + } + else { + psxDmaInterrupt(33); + } + } break; - + mcase(0x1f8010f6): // ICR_hi (16 bit?) [dunno if it ever happens] { + DevCon.Warning("High ICR Write!!"); const u32 val2 = (u32)val << 16; const u32 tmp = (~val2) & HW_DMA_ICR; psxHu(addr) = (((tmp ^ val2) & 0xffffff) ^ tmp) >> 16; @@ -444,13 +465,36 @@ mcase(0x1f801574): { - u32 tmp = (~val) & HW_DMA_ICR2; - psxHu(addr) = ((tmp ^ val) & 0xffffff) ^ tmp; + /*u32 tmp = (~val) & HW_DMA_ICR2; + psxHu(addr) = ((tmp ^ val) & 0xffffff) ^ tmp;*/ + //u32 tmp = (~val) & HW_DMA_ICR2; + //u32 old = ((tmp ^ val) & 0xffffff) ^ tmp; + ///psxHu(addr) = ((tmp ^ val) & 0xffffff) ^ tmp; + u32 newtmp = (HW_DMA_ICR2 & 0xff000000) | (val & 0xffffff); + newtmp &= ~(val & 0x7F000000); + if (((newtmp >> 15) & 0x1) || (((newtmp >> 23) & 0x1) == 0x1 && (((newtmp & 0x7F000000) >> 8) & (newtmp & 0x7F0000)) != 0)) { + newtmp |= 0x80000000; + } + else { + newtmp &= ~0x80000000; + } + //if (newtmp != old) + // DevCon.Warning("ICR2 Old %x New %x", old, newtmp); + psxHu(addr) = newtmp; + if ((HW_DMA_ICR2 >> 15) & 0x1) { + DevCon.Warning("Force ICR2 IRQ!"); + psxRegs.CP0.n.Cause &= ~0x7C; + iopIntcIrq(3); + } + else { + psxDmaInterrupt2(33); + } } break; mcase(0x1f801576): // ICR2_hi (16 bit?) [dunno if it ever happens] { + DevCon.Warning("ICR2 high write!"); const u32 val2 = (u32)val << 16; const u32 tmp = (~val2) & HW_DMA_ICR2; psxHu(addr) = (((tmp ^ val2) & 0xffffff) ^ tmp) >> 16; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/R3000AInterpreter.cpp pcsx2-1.4.0/pcsx2/R3000AInterpreter.cpp --- pcsx2-1.3.1+dfsg/pcsx2/R3000AInterpreter.cpp 2010-11-03 14:18:30.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/R3000AInterpreter.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -39,9 +39,9 @@ void psxBGEZAL() // Branch if Rs >= 0 and link { + _SetLink(31); if (_i32(_rRs_) >= 0) { - _SetLink(31); doBranch(_BranchTarget_); } } @@ -62,9 +62,9 @@ void psxBLTZAL() // Branch if Rs < 0 and link { + _SetLink(31); if (_i32(_rRs_) < 0) { - _SetLink(31); doBranch(_BranchTarget_); } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/R5900.cpp pcsx2-1.4.0/pcsx2/R5900.cpp --- pcsx2-1.3.1+dfsg/pcsx2/R5900.cpp 2014-12-02 22:10:58.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/R5900.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -113,7 +113,7 @@ __ri void cpuException(u32 code, u32 bd) { bool errLevel2, checkStatus; - u32 offset; + u32 offset = 0; cpuRegs.branch = 0; // Tells the interpreter that an exception occurred during a branch. cpuRegs.CP0.n.Cause = code & 0xffff; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/R5900.h pcsx2-1.4.0/pcsx2/R5900.h --- pcsx2-1.3.1+dfsg/pcsx2/R5900.h 2014-12-07 16:25:56.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/R5900.h 2016-01-05 17:28:08.000000000 +0000 @@ -43,6 +43,12 @@ public: explicit CancelInstruction() { } }; + + class FailedToAllocateRegister + { + public: + explicit FailedToAllocateRegister() { } + }; } // -------------------------------------------------------------------------------------- diff -Nru pcsx2-1.3.1+dfsg/pcsx2/R5900OpcodeImpl.cpp pcsx2-1.4.0/pcsx2/R5900OpcodeImpl.cpp --- pcsx2-1.3.1+dfsg/pcsx2/R5900OpcodeImpl.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/R5900OpcodeImpl.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -879,42 +879,92 @@ call = cpuRegs.GPR.n.v1.UC[0]; BIOS_LOG("Bios call: %s (%x)", R5900::bios[call], call); - if (call == 13) { - DevCon.Warning("A tlb refill handler is set. New handler %x", (u32*)PSM(cpuRegs.GPR.n.a1.UL[0])); - } - if (call == 0x7c) - { - if(cpuRegs.GPR.n.a0.UL[0] == 0x10) - { - eeConLog( ShiftJIS_ConvertString((char*)PSM(memRead32(cpuRegs.GPR.n.a1.UL[0]))) ); - } - else - __Deci2Call( cpuRegs.GPR.n.a0.UL[0], (u32*)PSM(cpuRegs.GPR.n.a1.UL[0]) ); - } + switch (call) { + case 2: { + const char* inter = (cpuRegs.GPR.n.a0.UL[0] & 1) ? "Interlaced" : "Progressive"; + const char* field = (cpuRegs.GPR.n.a2.UL[0] & 1) ? "FRAME" : "FIELD"; + std::string mode; + // Warning info might be incorrect! + switch (cpuRegs.GPR.n.a1.UC[0]) { + case 0x2: mode = "NTSC 640x448 @ 59.940 (59.82)"; break; + + case 0x3: mode = "PAL 640x512 @ 50.000 (49.76)"; break; + + case 0x1A: mode = "VESA 640x480 @ 59.940"; break; + case 0x1B: mode = "VESA 640x480 @ 72.809"; break; + case 0x1C: mode = "VESA 640x480 @ 75.000"; break; + case 0x1D: mode = "VESA 640x480 @ 85.008"; break; + + case 0x2A: mode = "VESA 800x600 @ 56.250"; break; + case 0x2B: mode = "VESA 800x600 @ 60.317"; break; + case 0x2C: mode = "VESA 800x600 @ 72.188"; break; + case 0x2D: mode = "VESA 800x600 @ 75.000"; break; + case 0x2E: mode = "VESA 800x600 @ 85.061"; break; + + case 0x3B: mode = "VESA 1024x768 @ 60.004"; break; + case 0x3C: mode = "VESA 1024x768 @ 70.069"; break; + case 0x3D: mode = "VESA 1024x768 @ 75.029"; break; + case 0x3E: mode = "VESA 1024x768 @ 84.997"; break; + + case 0x4A: mode = "VESA 1280x1024 @ 63.981"; break; + case 0x4B: mode = "VESA 1280x1024 @ 79.976"; break; + + case 0x50: mode = "HDTV 720x480 @ 59.94"; break; + case 0x51: mode = "HDTV 1920x1080 @ 60.00"; break; + case 0x52: mode = "HDTV 1280x720 @ ?????"; break; + + case 0x72: mode = "DVD NTSC 640x448 @ ????"; break; + + default: DevCon.Error("Mode %x is not supported. Report me upstream", cpuRegs.GPR.n.a1.UC[0]); + } + DevCon.Warning("Set GS CRTC configuration. Interlace %s. Field Type %s. Mode %s", inter, field, mode.c_str()); + } + break; + + case 13: + DevCon.Warning("A tlb refill handler is set. New handler %x", (u32*)PSM(cpuRegs.GPR.n.a1.UL[0])); + break; + + case 0x7c: + { + if(cpuRegs.GPR.n.a0.UL[0] == 0x10) + { + eeConLog( ShiftJIS_ConvertString((char*)PSM(memRead32(cpuRegs.GPR.n.a1.UL[0]))) ); + } + else + __Deci2Call( cpuRegs.GPR.n.a0.UL[0], (u32*)PSM(cpuRegs.GPR.n.a1.UL[0]) ); + } + break; + + case 0x77: + // The only thing this code is used for is the one log message, so don't execute it if we aren't logging bios messages. + if (SysTraceActive(EE.Bios)) + { + t_sif_dma_transfer *dmat; + //struct t_sif_cmd_header *hdr; + //struct t_sif_rpc_bind *bind; + //struct t_rpc_server_data *server; + int n_transfer; + u32 addr; + //int sid; + + n_transfer = cpuRegs.GPR.n.a1.UL[0] - 1; + if (n_transfer >= 0) + { + addr = cpuRegs.GPR.n.a0.UL[0] + n_transfer * sizeof(t_sif_dma_transfer); + dmat = (t_sif_dma_transfer*)PSM(addr); + + BIOS_LOG("bios_%s: n_transfer=%d, size=%x, attr=%x, dest=%x, src=%x", + R5900::bios[cpuRegs.GPR.n.v1.UC[0]], n_transfer, + dmat->size, dmat->attr, + dmat->dest, dmat->src); + } + } + break; - // The only thing this code is used for is the one log message, so don't execute it if we aren't logging bios messages. - if (SysTraceActive(EE.Bios) && (call == 0x77)) - { - t_sif_dma_transfer *dmat; - //struct t_sif_cmd_header *hdr; - //struct t_sif_rpc_bind *bind; - //struct t_rpc_server_data *server; - int n_transfer; - u32 addr; - //int sid; - - n_transfer = cpuRegs.GPR.n.a1.UL[0] - 1; - if (n_transfer >= 0) - { - addr = cpuRegs.GPR.n.a0.UL[0] + n_transfer * sizeof(t_sif_dma_transfer); - dmat = (t_sif_dma_transfer*)PSM(addr); - - BIOS_LOG("bios_%s: n_transfer=%d, size=%x, attr=%x, dest=%x, src=%x", - R5900::bios[cpuRegs.GPR.n.v1.UC[0]], n_transfer, - dmat->size, dmat->attr, - dmat->dest, dmat->src); - } + default: + break; } cpuRegs.pc -= 4; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/RDebug/deci2.txt pcsx2-1.4.0/pcsx2/RDebug/deci2.txt --- pcsx2-1.3.1+dfsg/pcsx2/RDebug/deci2.txt 2009-02-06 20:04:37.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/RDebug/deci2.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,27 +1,27 @@ -pcsx2 log->debugger tty mapping -ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÑÍÍÍÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ -Bios ³EE³ 0 ³IOP³ Bios ³ -CPU & MMI & COP0 & FPU ³EE³ 1 ³IOP³ IOP cpu ³ -VU0 & VUMicro ³EE³ 2 ³IOP³ HW ³ -VIF ³EE³ 3 ³IOP³ GTE ³ -GIF ³EE³ 4 ³IOP³ GPU ³ -DMA ³EE³ 5 ³IOP³ DMA ³ -HW & Unknown Memory ³EE³ 6 ³IOP³ Unknown Memory ³ -ELF & Scratch pad ³EE³ 7 ³IOP³ PAD ³ -IPU ³EE³ 8 ³IOP³ CDR ³ -SIF & RPC services ³EE³ 9 ³IOP³ ³ - ³ ³ ³ ³ ³ -SysMessage ³EE³Kernel³IOP³ SysMessage ³ -ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÁÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -PRODG: 230,130, 120,121,122,110-119,11F,210-219,21F,410 -CW: 230,130,150,120,121, 210-219,21F,110-119,11F - -0400 PROTO_NETMP -0001 PROTO_DCMP - PROTO_MTWKS -012? PROTO_DRFP (%s) -0230 PROTO_ESDBG -0130 PROTO_ISDBG -011? PROTO_I%dTTY -021? PROTO_E%dTTY - +pcsx2 log->debugger tty mapping +ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÑÍÍÍÄÄÄÂÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ +Bios ³EE³ 0 ³IOP³ Bios ³ +CPU & MMI & COP0 & FPU ³EE³ 1 ³IOP³ IOP cpu ³ +VU0 & VUMicro ³EE³ 2 ³IOP³ HW ³ +VIF ³EE³ 3 ³IOP³ GTE ³ +GIF ³EE³ 4 ³IOP³ GPU ³ +DMA ³EE³ 5 ³IOP³ DMA ³ +HW & Unknown Memory ³EE³ 6 ³IOP³ Unknown Memory ³ +ELF & Scratch pad ³EE³ 7 ³IOP³ PAD ³ +IPU ³EE³ 8 ³IOP³ CDR ³ +SIF & RPC services ³EE³ 9 ³IOP³ ³ + ³ ³ ³ ³ ³ +SysMessage ³EE³Kernel³IOP³ SysMessage ³ +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÁÄÄÄÄÄÄÁÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ +PRODG: 230,130, 120,121,122,110-119,11F,210-219,21F,410 +CW: 230,130,150,120,121, 210-219,21F,110-119,11F + +0400 PROTO_NETMP +0001 PROTO_DCMP + PROTO_MTWKS +012? PROTO_DRFP (%s) +0230 PROTO_ESDBG +0130 PROTO_ISDBG +011? PROTO_I%dTTY +021? PROTO_E%dTTY + diff -Nru pcsx2-1.3.1+dfsg/pcsx2/RDebug/iloadp.txt pcsx2-1.4.0/pcsx2/RDebug/iloadp.txt --- pcsx2-1.3.1+dfsg/pcsx2/RDebug/iloadp.txt 2009-02-06 20:04:37.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/RDebug/iloadp.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,32 +1,32 @@ -ILOADP_MODULE_INFO{ - u16 flags ÄÄÄÄ¿ <ÄÄÄ¿ - u16 version <ÄÄÄÙ ÄÄÄÄÙ - u32 addr - u32 sz_text - u32 sz_data - u32 sz_bss - u32 reserved1 - u32 reserved2 - u32 reserved3 - u8* name -}; - -ILOADP_HDR{ - u8 cmd - u8 action - u8 result - u8 stamp - u32 module_id -}; - -ILOADP_START(cmd==00) ------------------------------------------- -ILOADP_HDR_START{ - ILOADP_HDR hdr //+00 - u8* modulename //+10 //asciiz -}; //=10+strlen(modulename)+1 -action 0D(IOP_LOAD_IRX) -modulename host:E:\TEMP2\GCC\share\SIO2D.IRX - -action 02(IOP_RUN) -modulename E:\TEMP2\GCC\share\SIO2D.IRX param +ILOADP_MODULE_INFO{ + u16 flags ÄÄÄÄ¿ <ÄÄÄ¿ + u16 version <ÄÄÄÙ ÄÄÄÄÙ + u32 addr + u32 sz_text + u32 sz_data + u32 sz_bss + u32 reserved1 + u32 reserved2 + u32 reserved3 + u8* name +}; + +ILOADP_HDR{ + u8 cmd + u8 action + u8 result + u8 stamp + u32 module_id +}; + +ILOADP_START(cmd==00) +------------------------------------------ +ILOADP_HDR_START{ + ILOADP_HDR hdr //+00 + u8* modulename //+10 //asciiz +}; //=10+strlen(modulename)+1 +action 0D(IOP_LOAD_IRX) +modulename host:E:\TEMP2\GCC\share\SIO2D.IRX + +action 02(IOP_RUN) +modulename E:\TEMP2\GCC\share\SIO2D.IRX param diff -Nru pcsx2-1.3.1+dfsg/pcsx2/SaveState.h pcsx2-1.4.0/pcsx2/SaveState.h --- pcsx2-1.3.1+dfsg/pcsx2/SaveState.h 2013-02-05 23:30:25.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/SaveState.h 2016-01-05 17:28:08.000000000 +0000 @@ -24,7 +24,7 @@ // the lower 16 bit value. IF the change is breaking of all compatibility with old // states, increment the upper 16 bit value, and clear the lower 16 bits to 0. -static const u32 g_SaveVersion = (0x9A0A << 16) | 0x0000; +static const u32 g_SaveVersion = (0x9A0B << 16) | 0x0000; // this function is meant to be used in the place of GSfreeze, and provides a safe layer // between the GS saving function and the MTGS's needs. :) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Sif0.cpp pcsx2-1.4.0/pcsx2/Sif0.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Sif0.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Sif0.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -134,7 +134,9 @@ // We're only copying the first 24 bits. Bits 30 and 31 (checked below) are Stop/IRQ bits. hw_dma9.madr = sif0data & 0xFFFFFF; - sif0.iop.counter = sif0words; + if (sif0words > 0xFFFFC) DevCon.Warning("SIF0 Overrun %x", sif0words); + //Maximum transfer amount 1mb-16 also masking out top part which is a "Mode" cache stuff, we don't care :) + sif0.iop.counter = sif0words & 0xFFFFC; // IOP tags have an IRQ bit and an End of Transfer bit: if (sif0tag.IRQ || (sif0tag.ID & 4)) sif0.iop.end = true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Sif1.cpp pcsx2-1.4.0/pcsx2/Sif1.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Sif1.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Sif1.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -125,7 +125,11 @@ // Only use the first 24 bits. hw_dma10.madr = sif1data & 0xffffff; - sif1.iop.counter = sif1words; + + if (sif1words > 0xFFFFC) DevCon.Warning("SIF1 Overrun %x", sif1words); + //Maximum transfer amount 1mb-16 also masking out top part which is a "Mode" cache stuff, we don't care :) + sif1.iop.counter = sif1words & 0xFFFFC; + if (sif1tag.IRQ || (sif1tag.ID & 4)) sif1.iop.end = true; return true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Sio.cpp pcsx2-1.4.0/pcsx2/Sio.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Sio.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Sio.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -60,6 +60,13 @@ mcds[port][slot].ForceEjection_Timeout = FORCED_MCD_EJECTION_MAX_TRIES; } +void ClearMcdEjectTimeoutNow() +{ + for( u8 port=0; port<2; ++port ) + for( u8 slot=0; slot<4; ++slot ) + mcds[port][slot].ForceEjection_Timeout = 0; +} + // SIO Inline'd IRQs : Calls the SIO interrupt handlers directly instead of // feeding them through the IOP's branch test. (see SIO.H for details) @@ -871,6 +878,28 @@ sioWrite8inl(value); } +void sioNextFrame() { + for ( uint port = 0; port < 2; ++port ) { + for ( uint slot = 0; slot < 4; ++slot ) { + mcds[port][slot].NextFrame(); + } + } +} + +// Used to figure out when a new game boots, so that memory cards can re-index themselves and only load data relevant to that game. +wxString SioCurrentGameSerial = L""; +void sioSetGameSerial( const wxString& serial ) { + if ( serial == SioCurrentGameSerial ) { return; } + SioCurrentGameSerial = serial; + + for ( uint port = 0; port < 2; ++port ) { + for ( uint slot = 0; slot < 4; ++slot ) { + mcds[port][slot].ReIndex( serial ); + } + } + SetForceMcdEjectTimeoutNow(); +} + void SaveStateBase::sioFreeze() { // CRCs for memory cards. diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Sio.h pcsx2-1.4.0/pcsx2/Sio.h --- pcsx2-1.3.1+dfsg/pcsx2/Sio.h 2013-12-29 21:57:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Sio.h 2016-01-05 17:28:08.000000000 +0000 @@ -19,6 +19,8 @@ // Games are highly unlikely to need timed IRQ's for PAD and MemoryCard handling anyway (rama). #define SIO_INLINE_IRQS +#include "MemoryCardFile.h" + struct _mcd { u8 term; // terminator value; @@ -80,6 +82,14 @@ { return SysPlugins.McdGetCRC(port, slot); } + + void NextFrame() { + SysPlugins.McdNextFrame( port, slot ); + } + + void ReIndex(const wxString& filter = L"") { + SysPlugins.McdReIndex( port, slot, filter ); + } }; struct _sio @@ -117,3 +127,6 @@ extern void sioInterrupt(); extern void InitializeSIO(u8 value); extern void SetForceMcdEjectTimeoutNow(); +extern void ClearMcdEjectTimeoutNow(); +extern void sioNextFrame(); +extern void sioSetGameSerial(const wxString& serial); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/SPR.cpp pcsx2-1.4.0/pcsx2/SPR.cpp --- pcsx2-1.3.1+dfsg/pcsx2/SPR.cpp 2014-08-13 07:55:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/SPR.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -175,7 +175,7 @@ { if (dmacRegs.ctrl.STS == STS_fromSPR) // STS == fromSPR { - Console.WriteLn("SPR stall control Normal not implemented"); + DevCon.Warning("SPR stall control Normal not implemented"); } SPR0chain(); spr0finished = true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/SysForwardDefs.h pcsx2-1.4.0/pcsx2/SysForwardDefs.h --- pcsx2-1.3.1+dfsg/pcsx2/SysForwardDefs.h 2015-01-29 12:43:31.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/SysForwardDefs.h 2016-01-05 17:28:08.000000000 +0000 @@ -16,11 +16,12 @@ #pragma once static const int PCSX2_VersionHi = 1; -static const int PCSX2_VersionMid = 3; -static const int PCSX2_VersionLo = 1; -static const bool PCSX2_isReleaseVersion = 0; +static const int PCSX2_VersionMid = 4; +static const int PCSX2_VersionLo = 0; +static const bool PCSX2_isReleaseVersion = 1; class SysCoreThread; + class CpuInitializerSet; struct Game_Data; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/System/RecTypes.h pcsx2-1.4.0/pcsx2/System/RecTypes.h --- pcsx2-1.3.1+dfsg/pcsx2/System/RecTypes.h 2010-11-17 05:49:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/System/RecTypes.h 2016-01-05 17:28:08.000000000 +0000 @@ -42,6 +42,7 @@ virtual void* Reserve( size_t size, uptr base=0, uptr upper_bounds=0 ); virtual void OnCommittedBlock( void* block ); + virtual void Reset(); virtual RecompiledCodeReserve& SetProfilerName( const wxString& shortname ); virtual RecompiledCodeReserve& SetProfilerName( const char* shortname ) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/System/SysCoreThread.cpp pcsx2-1.4.0/pcsx2/System/SysCoreThread.cpp --- pcsx2-1.3.1+dfsg/pcsx2/System/SysCoreThread.cpp 2014-08-15 19:25:30.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/System/SysCoreThread.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -55,7 +55,10 @@ SysCoreThread::~SysCoreThread() throw() { - SysCoreThread::Cancel(); + try { + SysCoreThread::Cancel(); + } + DESTRUCTOR_CATCHALL } void SysCoreThread::Cancel( bool isBlocking ) @@ -131,6 +134,7 @@ GetVmMemory().DecommitAll(); SysClearExecutionCache(); sApp.PostAppMethod( &Pcsx2App::leaveDebugMode ); + g_FrameCount = 0; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/System/SysThreadBase.cpp pcsx2-1.4.0/pcsx2/System/SysThreadBase.cpp --- pcsx2-1.3.1+dfsg/pcsx2/System/SysThreadBase.cpp 2014-07-12 10:47:35.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/System/SysThreadBase.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -93,9 +93,8 @@ switch( m_ExecMode ) { - // FIXME what to do for this case - // case ExecMode_NoThreadYet: - + // Invalid thread state, nothing to suspend + case ExecMode_NoThreadYet: // Check again -- status could have changed since above. case ExecMode_Closed: return; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/System.cpp pcsx2-1.4.0/pcsx2/System.cpp --- pcsx2-1.3.1+dfsg/pcsx2/System.cpp 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/System.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -18,6 +18,7 @@ #include "IopCommon.h" #include "VUmicro.h" #include "newVif.h" +#include "MTVU.h" #include "SamplProf.h" @@ -72,9 +73,23 @@ { if (!_parent::Reserve(size, base, upper_bounds)) return NULL; _registerProfiler(); + + // Pre-Allocate the first block (to reduce the number of segmentation fault + // in debugger) + DoCommitAndProtect(0); + return m_baseptr; } +void RecompiledCodeReserve::Reset() +{ + _parent::Reset(); + + // Pre-Allocate the first block (to reduce the number of segmentation fault + // in debugger) + DoCommitAndProtect(0); +} + // Sets the abbreviated name used by the profiler. Name should be under 10 characters long. // After a name has been set, a profiler source will be automatically registered and cleared @@ -99,7 +114,7 @@ // the assembly dump more cleanly. We don't clear the block on Release builds since // it can add a noticeable amount of overhead to large block recompilations. - memset_sse_a<0xcc>( block, m_blocksize * __pagesize ); + memset(block, 0xCC, m_blocksize * __pagesize); } } @@ -195,7 +210,7 @@ if ( !PCSX2_isReleaseVersion ) { Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u-%lld %s" -#ifndef openSUSE +#ifndef DISABLE_BUILD_DATE "- compiled on " __DATE__ #endif , PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, @@ -204,7 +219,7 @@ } else { // shorter release version string Console.WriteLn(Color_StrongGreen, "PCSX2 %u.%u.%u-%lld" -#ifndef openSUSE +#ifndef DISABLE_BUILD_DATE "- compiled on " __DATE__ #endif , PCSX2_VersionHi, PCSX2_VersionMid, PCSX2_VersionLo, @@ -252,6 +267,7 @@ if( x86caps.hasStreamingSIMD4Extensions ) features[0].Add( L"SSE4.1" ); if( x86caps.hasStreamingSIMD4Extensions2 ) features[0].Add( L"SSE4.2" ); if( x86caps.hasAVX ) features[0].Add( L"AVX" ); + if( x86caps.hasAVX2 ) features[0].Add( L"AVX2" ); if( x86caps.hasFMA) features[0].Add( L"FMA" ); if( x86caps.hasMultimediaExtensionsExt ) features[1].Add( L"MMX2 " ); @@ -321,8 +337,11 @@ template< typename CpuType > CpuInitializer< CpuType >::~CpuInitializer() throw() { - if (MyCpu) - MyCpu->Shutdown(); + try { + if (MyCpu) + MyCpu->Shutdown(); + } + DESTRUCTOR_CATCHALL } // -------------------------------------------------------------------------------------- @@ -365,7 +384,10 @@ SysMainMemory::~SysMainMemory() throw() { - ReleaseAll(); + try { + ReleaseAll(); + } + DESTRUCTOR_CATCHALL } void SysMainMemory::ReserveAll() @@ -418,6 +440,12 @@ Console.WriteLn( Color_Blue, "Decommitting host memory for virtual systems..." ); ConsoleIndentScope indent(1); + // On linux, the MTVU isn't empty and the thread still uses the m_ee/m_vu memory + vu1Thread.WaitVU(); + // The EE thread must be stopped here command mustn't be send + // to the ring. Let's call it an extra safety valve :) + vu1Thread.Reset(); + m_ee.Decommit(); m_iop.Decommit(); m_vu.Decommit(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Utilities/FileUtils.cpp pcsx2-1.4.0/pcsx2/Utilities/FileUtils.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Utilities/FileUtils.cpp 2010-08-03 22:18:19.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Utilities/FileUtils.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -16,6 +16,9 @@ #include "PrecompiledHeader.h" #include "AsciiFile.h" +#include +#include + void AsciiFile::Printf( const char* fmt, ... ) { va_list list; @@ -25,3 +28,70 @@ va_end( list ); Write( ascii, strlen(ascii) ); } + +bool CopyDirectory( const wxString& from, const wxString& to ) { + wxDir src( from ); + if ( !src.IsOpened() ) { + return false; + } + + wxMkdir( to ); + wxDir dst( to ); + if ( !dst.IsOpened() ) { + return false; + } + + wxString filename; + + // copy directories + if ( src.GetFirst( &filename, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN ) ) { + do { + if ( !CopyDirectory( wxFileName( from, filename ).GetFullPath(), wxFileName( to, filename ).GetFullPath() ) ) { + return false; + } + } while ( src.GetNext( &filename ) ); + } + + // copy files + if ( src.GetFirst( &filename, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN ) ) { + do { + if ( !wxCopyFile( wxFileName( from, filename ).GetFullPath(), wxFileName( to, filename ).GetFullPath() ) ) { + return false; + } + } while ( src.GetNext( &filename ) ); + } + + return true; +} + +bool RemoveDirectory( const wxString& dirname ) { + { + wxDir dir( dirname ); + if ( !dir.IsOpened() ) { + return false; + } + + wxString filename; + + // delete subdirs recursively + if ( dir.GetFirst( &filename, wxEmptyString, wxDIR_DIRS | wxDIR_HIDDEN ) ) { + do { + if ( !RemoveDirectory( wxFileName( dirname, filename ).GetFullPath() ) ) { + return false; + } + } while ( dir.GetNext( &filename ) ); + } + + // delete files + if ( dir.GetFirst( &filename, wxEmptyString, wxDIR_FILES | wxDIR_HIDDEN ) ) { + do { + if ( !wxRemoveFile( wxFileName( dirname, filename ).GetFullPath() ) ) { + return false; + } + } while ( dir.GetNext( &filename ) ); + } + } + + // oddly enough this has different results compared to the more sensible dirname.Rmdir(), don't change! + return wxFileName::Rmdir( dirname ); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Utilities/folderdesc.txt pcsx2-1.4.0/pcsx2/Utilities/folderdesc.txt --- pcsx2-1.3.1+dfsg/pcsx2/Utilities/folderdesc.txt 2009-04-27 02:04:31.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Utilities/folderdesc.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,7 +1,7 @@ -Folder: pcsx2/Utilities -Purpose: To hold general non-pcsx2-specific utility classes which may (or may not) be shared out into a - common folder at a later date. This includes unicode utils, file manipulators, threading, etc. - -Details: I plan to move files into this folder here ont he wxGui branch over time, and then move the - whole lot over to common as a whole library of sorts. I thinkit'll be easier that way than trying +Folder: pcsx2/Utilities +Purpose: To hold general non-pcsx2-specific utility classes which may (or may not) be shared out into a + common folder at a later date. This includes unicode utils, file manipulators, threading, etc. + +Details: I plan to move files into this folder here ont he wxGui branch over time, and then move the + whole lot over to common as a whole library of sorts. I thinkit'll be easier that way than trying to piecemeal individual files over (especially since some of them have inter-dependencies) \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif0_Dma.cpp pcsx2-1.4.0/pcsx2/Vif0_Dma.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif0_Dma.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif0_Dma.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -167,7 +167,7 @@ if (!(vif0ch.chcr.STR)) Console.WriteLn("vif0 running when CHCR == %x", vif0ch.chcr._u32); - if (vif0.irq && vif0.tag.size == 0 && vif0.cmd == 0) + if (vif0.irq && vif0.vifstalled.enabled && vif0.vifstalled.value == VIF_IRQ_STALL) { vif0Regs.stat.INT = true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif1_Dma.cpp pcsx2-1.4.0/pcsx2/Vif1_Dma.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif1_Dma.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif1_Dma.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -311,7 +311,7 @@ } if (!vif1ch.chcr.STR) Console.WriteLn("Vif1 running when CHCR == %x", vif1ch.chcr._u32); - if (vif1.irq && vif1.tag.size == 0 &&vif1.cmd == 0) + if (vif1.irq && vif1.vifstalled.enabled && vif1.vifstalled.value == VIF_IRQ_STALL) { VIF_LOG("VIF IRQ Firing"); vif1Regs.stat.INT = true; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif1_MFIFO.cpp pcsx2-1.4.0/pcsx2/Vif1_MFIFO.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif1_MFIFO.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif1_MFIFO.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -183,10 +183,12 @@ SPR_LOG("Added %x qw to mfifo,Vif CHCR %x Stalled %x done %x", qwc, vif1ch.chcr._u32, vif1.vifstalled.enabled, vif1.done); if (vif1.inprogress & 0x10) { - if(vif1ch.chcr.STR == true && !(cpuRegs.interrupt & (1< 0 || !vif1.done) && !(vif1.inprogress & 0x10)) { + VIF_LOG("VIF1 MFIFO Stalled qwc = %x done = %x inprogress = %x", vif1ch.qwc,vif1.done, vif1.inprogress & 0x10); + //Used to check if the MFIFO was empty, there's really no need if it's finished what it needed. + if((vif1ch.qwc > 0 || !vif1.done)) { VIF_LOG("VIF1 MFIFO Stalled"); return; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif_Codes.cpp pcsx2-1.4.0/pcsx2/Vif_Codes.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif_Codes.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif_Codes.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -46,8 +46,8 @@ if (!idx) startcycles = VU0.cycle; else startcycles = VU1.cycle; - if (!idx) vu0ExecMicro(GetVifX.queued_pc); - else vu1ExecMicro(GetVifX.queued_pc); + if (!idx) vu0ExecMicro(vif0.queued_pc); + else vu1ExecMicro(vif1.queued_pc); ///NOTE: Shadowman 2 has SPS with this, uncommenting the correct code fixes it if (!idx) { startcycles = ((VU0.cycle-startcycles) + ( vif0ch.qwc - (vif0.vifpacketsize >> 2) )); CPU_INT(VIF_VU0_FINISH, 1/*startcycles * BIAS*/); } @@ -100,6 +100,7 @@ GetVifX.queued_program = true; GetVifX.queued_pc = addr; + GetVifX.unpackcalls = 0; } void ExecuteVU(int idx) @@ -278,6 +279,7 @@ static __fi void _vifCode_MPG(int idx, u32 addr, const u32 *data, int size) { VURegs& VUx = idx ? VU1 : VU0; vifStruct& vifX = GetVifX; + u16 vuMemSize = idx ? 0x4000 : 0x1000; pxAssert(VUx.Micro > 0); vifExecQueue(idx); @@ -290,14 +292,14 @@ // Don't forget the Unsigned designator for these checks - if((addr + size *4) > (idx ? 0x4000U : 0x1000U)) + if((addr + size *4) > vuMemSize) { //DevCon.Warning("Handling split MPG"); - if (!idx) CpuVU0->Clear(addr, (idx ? 0x4000 : 0x1000) - addr); - else CpuVU1->Clear(addr, (idx ? 0x4000 : 0x1000) - addr); + if (!idx) CpuVU0->Clear(addr, vuMemSize - addr); + else CpuVU1->Clear(addr, vuMemSize - addr); - memcpy(VUx.Micro + addr, data, (idx ? 0x4000 : 0x1000) - addr); - size -= ((idx ? 0x4000 : 0x1000) - addr) / 4; + memcpy(VUx.Micro + addr, data, vuMemSize - addr); + size -= (vuMemSize - addr) / 4; memcpy(VUx.Micro, data, size); vifX.tag.addr = size * 4; @@ -446,7 +448,7 @@ //If the top bit was set to interrupt, we don't want it to take commands from a bad code if it's interpreted as a nop by us. //Onimusha - Blade Warriors - if ((vifXRegs.code & 0x80000000) && (vifXRegs.code & 0xFF0000) != 0) + if ((vifXRegs.code & 0x80000000) && (vifXRegs.code & 0xFF0000) != 0 && vifXch.qwc > 0 /*Not tag*/) { GetVifX.irq = 0; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif.cpp pcsx2-1.4.0/pcsx2/Vif.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -270,6 +270,7 @@ { case MFD_VIF1: //Console.WriteLn("MFIFO Stall"); + //MFIFO active and not empty if(vif1ch.chcr.STR == true) CPU_INT(DMAC_MFIFO_VIF, 0); break; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif_Dma.h pcsx2-1.4.0/pcsx2/Vif_Dma.h --- pcsx2-1.3.1+dfsg/pcsx2/Vif_Dma.h 2013-02-05 23:30:25.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif_Dma.h 2016-01-05 17:28:08.000000000 +0000 @@ -70,6 +70,7 @@ int pass; int cl; u8 usn; + u8 start_aligned; u8 StructEnd; // Address of this is used to calculate end of struct }; @@ -79,7 +80,7 @@ tVIF_CTRL vifstalled; bool stallontag; bool waitforvu; - + int unpackcalls; // GS registers used for calculating the size of the last local->host transfer initiated on the GS // Transfer size calculation should be restricted to GS emulation in the future tBITBLTBUF BITBLTBUF; @@ -93,6 +94,8 @@ bool queued_program; u32 queued_pc; + + }; extern __aligned16 vifStruct vif0, vif1; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/Vif_Unpack.cpp pcsx2-1.4.0/pcsx2/Vif_Unpack.cpp --- pcsx2-1.3.1+dfsg/pcsx2/Vif_Unpack.cpp 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/Vif_Unpack.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -193,8 +193,12 @@ vifX.cmd = 0; return; // Skipping write and 0 write-cycles, so do nothing! } - + GetVifX.unpackcalls++; + if (GetVifX.unpackcalls > 3) + { + vifExecQueue(idx); + } //if (!idx) vif0FLUSH(); // Only VU0? vifX.usn = (vifXRegs.code >> 14) & 0x01; @@ -231,6 +235,13 @@ vifX.cl = 0; vifX.tag.cmd = vifX.cmd; GetVifX.pass = 1; + + //Ugh things are never easy. + //Alright, in most cases with V2 and V3 we only need to know if its offset 32bits. + //However in V3-16 if the data it requires ends on a QW boundary of the source data + //the W vector becomes 0, so we need to know how far through the current QW the data begins + vifX.start_aligned = 4-((vifX.vifpacketsize-1) & 0x3); + //DevCon.Warning("Aligned %d packetsize at data start %d", vifX.start_aligned, vifX.vifpacketsize - 1); } template void vifUnpackSetup<0>(const u32 *data); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/vtlb.cpp pcsx2-1.4.0/pcsx2/vtlb.cpp --- pcsx2-1.3.1+dfsg/pcsx2/vtlb.cpp 2014-12-07 18:24:14.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/vtlb.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -410,13 +410,7 @@ throw Exception::CancelInstruction(); } - // The exception terminate the program on linux which is very annoying - // Just disable it for the moment -#ifdef __linux__ - if (0) -#else if( IsDevBuild ) -#endif Cpu->ThrowCpuException( R5900Exception::TLBMiss( addr, !!mode ) ); else { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/vtlb.h pcsx2-1.4.0/pcsx2/vtlb.h --- pcsx2-1.3.1+dfsg/pcsx2/vtlb.h 2014-12-07 16:25:56.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/vtlb.h 2016-01-05 17:28:08.000000000 +0000 @@ -208,6 +208,7 @@ MapData() { vmap = NULL; + ppmap = NULL; } }; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/VU1microInterp.cpp pcsx2-1.4.0/pcsx2/VU1microInterp.cpp --- pcsx2-1.3.1+dfsg/pcsx2/VU1microInterp.cpp 2013-03-11 21:54:05.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/VU1microInterp.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -85,6 +85,9 @@ _vu1ExecUpper(VU, ptr); VU->VI[REG_I].UL = ptr[0]; + //Lower not used, set to 0 to fill in the FMAC stall gap + //Could probably get away with just running upper stalls, but lets not tempt fate. + memset(&lregs, 0, sizeof(lregs)); } else { VU->code = ptr[0]; VU1regs_LOWER_OPCODE[VU->code >> 25](&lregs); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/VUmicro.h pcsx2-1.4.0/pcsx2/VUmicro.h --- pcsx2-1.3.1+dfsg/pcsx2/VUmicro.h 2014-07-12 11:30:34.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/VUmicro.h 2016-01-05 17:28:08.000000000 +0000 @@ -61,12 +61,16 @@ BaseCpuProvider() { m_Reserved = 0; + IsInterpreter = false; } virtual ~BaseCpuProvider() throw() { - if( m_Reserved != 0 ) - Console.Warning( "Cleanup miscount detected on CPU provider. Count=%d", m_Reserved ); + try { + if( m_Reserved != 0 ) + Console.Warning( "Cleanup miscount detected on CPU provider. Count=%d", m_Reserved ); + } + DESTRUCTOR_CATCHALL } virtual const char* GetShortName() const=0; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/VUops.cpp pcsx2-1.4.0/pcsx2/VUops.cpp --- pcsx2-1.3.1+dfsg/pcsx2/VUops.cpp 2014-08-15 12:44:27.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/VUops.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -176,19 +176,21 @@ if (VU->fmac[i].enable == 1) continue; break; } - //if (i==8) Console.Error("*PCSX2*: error , out of fmacs %d", VU->cycle); + if (i < 8) { + VUM_LOG("adding FMAC pipe[%d]; xyzw=%x", i, xyzw); - VUM_LOG("adding FMAC pipe[%d]; xyzw=%x", i, xyzw); - - VU->fmac[i].enable = 1; - VU->fmac[i].sCycle = VU->cycle; - VU->fmac[i].Cycle = 3; - VU->fmac[i].reg = reg; - VU->fmac[i].xyzw = xyzw; - VU->fmac[i].macflag = VU->macflag; - VU->fmac[i].statusflag = VU->statusflag; - VU->fmac[i].clipflag = VU->clipflag; + VU->fmac[i].enable = 1; + VU->fmac[i].sCycle = VU->cycle; + VU->fmac[i].Cycle = 3; + VU->fmac[i].reg = reg; + VU->fmac[i].xyzw = xyzw; + VU->fmac[i].macflag = VU->macflag; + VU->fmac[i].statusflag = VU->statusflag; + VU->fmac[i].clipflag = VU->clipflag; + } else { + //Console.Error("*PCSX2*: error , out of fmacs %d", VU->cycle); + } } static __ri void __fastcall _vuFDIVAdd(VURegs * VU, int cycles) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/FlatFileReaderWindows.cpp pcsx2-1.4.0/pcsx2/windows/FlatFileReaderWindows.cpp --- pcsx2-1.3.1+dfsg/pcsx2/windows/FlatFileReaderWindows.cpp 2014-08-15 20:48:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/FlatFileReaderWindows.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,126 +1,126 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2014 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "AsyncFileReader.h" - -FlatFileReader::FlatFileReader(bool shareWrite) : shareWrite(shareWrite) -{ - m_blocksize = 2048; - hOverlappedFile = INVALID_HANDLE_VALUE; - hEvent = INVALID_HANDLE_VALUE; - asyncInProgress = false; -} - -FlatFileReader::~FlatFileReader(void) -{ - Close(); -} - -bool FlatFileReader::Open(const wxString& fileName) -{ - m_filename = fileName; - - hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); - - DWORD shareMode = FILE_SHARE_READ; - if (shareWrite) - shareMode |= FILE_SHARE_WRITE; - - hOverlappedFile = CreateFile( - fileName, - GENERIC_READ, - shareMode, - NULL, - OPEN_EXISTING, - FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_OVERLAPPED, - NULL); - - return hOverlappedFile != INVALID_HANDLE_VALUE; -} - -int FlatFileReader::ReadSync(void* pBuffer, uint sector, uint count) -{ - //LARGE_INTEGER offset; - //offset.QuadPart = sector * (__int64)m_blocksize; - // - //DWORD bytesToRead = count * m_blocksize; - //DWORD bytes; - - //if(!ReadFile(hOverlappedFile, pBuffer, bytesToRead, &bytes, NULL)) - // return -1; - - //return bytes; - BeginRead(pBuffer, sector, count); - return FinishRead(); -} - -void FlatFileReader::BeginRead(void* pBuffer, uint sector, uint count) -{ - LARGE_INTEGER offset; - offset.QuadPart = sector * (s64)m_blocksize + m_dataoffset; - - DWORD bytesToRead = count * m_blocksize; - - ZeroMemory(&asyncOperationContext, sizeof(asyncOperationContext)); - asyncOperationContext.hEvent = hEvent; - asyncOperationContext.Offset = offset.LowPart; - asyncOperationContext.OffsetHigh = offset.HighPart; - - ReadFile(hOverlappedFile, pBuffer, bytesToRead, NULL, &asyncOperationContext); - asyncInProgress = true; -} - -int FlatFileReader::FinishRead(void) -{ - DWORD bytes; - - if(!GetOverlappedResult(hOverlappedFile, &asyncOperationContext, &bytes, TRUE)) - { - asyncInProgress = false; - return -1; - } - - asyncInProgress = false; - return bytes; -} - -void FlatFileReader::CancelRead(void) -{ - CancelIo(hOverlappedFile); -} - -void FlatFileReader::Close(void) -{ - if(asyncInProgress) - CancelRead(); - - if(hOverlappedFile != INVALID_HANDLE_VALUE) - CloseHandle(hOverlappedFile); - - if(hEvent != INVALID_HANDLE_VALUE) - CloseHandle(hEvent); - - hOverlappedFile = INVALID_HANDLE_VALUE; - hEvent = INVALID_HANDLE_VALUE; -} - -uint FlatFileReader::GetBlockCount(void) const -{ - LARGE_INTEGER fileSize; - fileSize.LowPart = GetFileSize(hOverlappedFile, (DWORD*)&(fileSize.HighPart)); - - return (int)(fileSize.QuadPart / m_blocksize); -} +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2014 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "AsyncFileReader.h" + +FlatFileReader::FlatFileReader(bool shareWrite) : shareWrite(shareWrite) +{ + m_blocksize = 2048; + hOverlappedFile = INVALID_HANDLE_VALUE; + hEvent = INVALID_HANDLE_VALUE; + asyncInProgress = false; +} + +FlatFileReader::~FlatFileReader(void) +{ + Close(); +} + +bool FlatFileReader::Open(const wxString& fileName) +{ + m_filename = fileName; + + hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + DWORD shareMode = FILE_SHARE_READ; + if (shareWrite) + shareMode |= FILE_SHARE_WRITE; + + hOverlappedFile = CreateFile( + fileName, + GENERIC_READ, + shareMode, + NULL, + OPEN_EXISTING, + FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_OVERLAPPED, + NULL); + + return hOverlappedFile != INVALID_HANDLE_VALUE; +} + +int FlatFileReader::ReadSync(void* pBuffer, uint sector, uint count) +{ + //LARGE_INTEGER offset; + //offset.QuadPart = sector * (__int64)m_blocksize; + // + //DWORD bytesToRead = count * m_blocksize; + //DWORD bytes; + + //if(!ReadFile(hOverlappedFile, pBuffer, bytesToRead, &bytes, NULL)) + // return -1; + + //return bytes; + BeginRead(pBuffer, sector, count); + return FinishRead(); +} + +void FlatFileReader::BeginRead(void* pBuffer, uint sector, uint count) +{ + LARGE_INTEGER offset; + offset.QuadPart = sector * (s64)m_blocksize + m_dataoffset; + + DWORD bytesToRead = count * m_blocksize; + + ZeroMemory(&asyncOperationContext, sizeof(asyncOperationContext)); + asyncOperationContext.hEvent = hEvent; + asyncOperationContext.Offset = offset.LowPart; + asyncOperationContext.OffsetHigh = offset.HighPart; + + ReadFile(hOverlappedFile, pBuffer, bytesToRead, NULL, &asyncOperationContext); + asyncInProgress = true; +} + +int FlatFileReader::FinishRead(void) +{ + DWORD bytes; + + if(!GetOverlappedResult(hOverlappedFile, &asyncOperationContext, &bytes, TRUE)) + { + asyncInProgress = false; + return -1; + } + + asyncInProgress = false; + return bytes; +} + +void FlatFileReader::CancelRead(void) +{ + CancelIo(hOverlappedFile); +} + +void FlatFileReader::Close(void) +{ + if(asyncInProgress) + CancelRead(); + + if(hOverlappedFile != INVALID_HANDLE_VALUE) + CloseHandle(hOverlappedFile); + + if(hEvent != INVALID_HANDLE_VALUE) + CloseHandle(hEvent); + + hOverlappedFile = INVALID_HANDLE_VALUE; + hEvent = INVALID_HANDLE_VALUE; +} + +uint FlatFileReader::GetBlockCount(void) const +{ + LARGE_INTEGER fileSize; + fileSize.LowPart = GetFileSize(hOverlappedFile, (DWORD*)&(fileSize.HighPart)); + + return (int)(fileSize.QuadPart / m_blocksize); +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/Optimus.cpp pcsx2-1.4.0/pcsx2/windows/Optimus.cpp --- pcsx2-1.3.1+dfsg/pcsx2/windows/Optimus.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/Optimus.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,32 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2015 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#include "PrecompiledHeader.h" + +#ifdef _WIN32 + +//This ensures that the nVidia graphics card is used for PCSX2 on an Optimus-enabled system. +//302 or higher driver required. +extern "C" { + _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; +} + +//This is the equivalent for an AMD system. +//13.35 or newer driver required. +extern "C" { + _declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/PCSX2.manifest pcsx2-1.4.0/pcsx2/windows/PCSX2.manifest --- pcsx2-1.3.1+dfsg/pcsx2/windows/PCSX2.manifest 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/PCSX2.manifest 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/resource.h pcsx2-1.4.0/pcsx2/windows/resource.h --- pcsx2-1.3.1+dfsg/pcsx2/windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by wxResources.rc +// +#define IDI_ICON2 102 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 103 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/SamplProf.cpp pcsx2-1.4.0/pcsx2/windows/SamplProf.cpp --- pcsx2-1.3.1+dfsg/pcsx2/windows/SamplProf.cpp 2014-08-10 08:10:56.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/SamplProf.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -216,7 +216,7 @@ return; } - Module tmp((sz==0) ? modulenam.c_str() : NULL, (void*)Eip); + Module tmp((sz==0) ? modulenam.wc_str() : NULL, (void*)Eip); tmp.ticks++; ProfUnknownHash.insert(MapType::value_type(modulenam, tmp)); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2.vcxproj pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2.vcxproj --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2.vcxproj 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -25,17 +25,20 @@ false Unicode true + $(DefaultPlatformToolset)_xp Application false Unicode false + $(DefaultPlatformToolset)_xp Application false Unicode + $(DefaultPlatformToolset)_xp @@ -100,10 +103,12 @@ Use PrecompiledHeader.h CompileAsCpp + NoExtensions zlib-dbg.lib;rpcrt4.lib;%(AdditionalDependencies) $(OutDir)$(ProjectName)-dbg.exe + Yes @@ -122,10 +127,12 @@ PrecompiledHeader.h Level3 CompileAsCpp + NoExtensions - zlib-dev.lib;%(AdditionalDependencies) + zlib-dev.lib;rpcrt4.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) + Yes @@ -140,14 +147,15 @@ $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) NDEBUG;%(PreprocessorDefinitions) Async - NotSet + NoExtensions Use PrecompiledHeader.h CompileAsCpp - zlib.lib;%(AdditionalDependencies) + zlib.lib;rpcrt4.lib;%(AdditionalDependencies) $(TargetDir)$(TargetName).pdb + Yes @@ -160,28 +168,6 @@ %(RootDir)%(Directory)\%(Filename).h %(RootDir)%(Directory)\%(Filename).h - - Document - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - Document - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - - - @@ -403,7 +389,7 @@ %(RootDir)%(Directory)\%(Filename).h - + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) @@ -423,6 +409,10 @@ + + + + @@ -432,6 +422,7 @@ + @@ -443,12 +434,16 @@ + + + true + @@ -545,6 +540,7 @@ + @@ -646,6 +642,7 @@ + @@ -654,8 +651,8 @@ - + @@ -707,9 +704,15 @@ + + + + + + @@ -729,6 +732,7 @@ + @@ -888,33 +892,26 @@ - - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) + + $(SolutionDir)\3rdparty\wxwidgets3.0\$(PlatformName);$(SolutionDir)\3rdparty\wxwidgets3.0\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\3rdparty\wxwidgets3.0\$(PlatformName);$(SolutionDir)\3rdparty\wxwidgets3.0\include;%(AdditionalIncludeDirectories) + $(SolutionDir)\3rdparty\wxwidgets3.0\$(PlatformName);$(SolutionDir)\3rdparty\wxwidgets3.0\include;%(AdditionalIncludeDirectories) - - {26511268-2902-4997-8421-ecd7055f9e28} + + {0fae817d-9a32-4830-857e-81da57246e16} false - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false + + {24c45343-fd20-5c92-81c1-35a2ae841e79} - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} - false + + {3fcc50c2-81e9-5db2-b8d8-2129427568b1} - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false + + {6744dad8-9c70-574a-bff2-9f8dddb24a75} {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} @@ -933,6 +930,27 @@ false + + + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + %(RootDir)%(Directory)\%(Filename).h + %(RootDir)%(Directory)\%(Filename).h + %(RootDir)%(Directory)\%(Filename).h + + + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) + %(RootDir)%(Directory)\%(Filename).h + %(RootDir)%(Directory)\%(Filename).h + %(RootDir)%(Directory)\%(Filename).h + + + + + diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2.vcxproj.filters pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2.vcxproj.filters --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2.vcxproj.filters 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -149,7 +149,7 @@ {b9da6fbf-4fd9-4cfb-89f7-34ac0f933ce9} - {02398f88-aadb-4183-be7e-68f0cacdf620} + {7a0a1104-f9ee-4cd1-aaba-f8267eba1658} @@ -204,9 +204,6 @@ AppHost\Dialogs - - AppHost\Debugger - @@ -638,6 +635,9 @@ AppHost + + AppHost + AppHost @@ -662,10 +662,10 @@ AppHost\Dialogs - + AppHost\Dialogs - + AppHost\Dialogs @@ -802,11 +802,8 @@ System\ISO - - AppHost\Debugger - - - AppHost\Debugger + + System\Ps2\Debug System\Ps2\Debug @@ -814,19 +811,13 @@ System\Ps2\Debug - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug + + AppHost\Debugger - - System\Ps2\Debug + + AppHost\Debugger - + System\Ps2\Debug @@ -856,9 +847,36 @@ System\ISO + + System\Ps2\Debug + + + System\Ps2\Debug + + + System\Ps2\Debug + System\Ps2\Debug + + System\ISO + + + System\ISO + + + System\ISO + + + AppHost\Win32 + + + AppHost\Win32 + + + AppHost\Linux + @@ -1224,11 +1242,8 @@ System\ISO - - AppHost\Debugger - - - AppHost\Debugger + + System\Ps2\Debug System\Ps2\Debug @@ -1236,19 +1251,13 @@ System\Ps2\Debug - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug + + AppHost\Debugger - - System\Ps2\Debug + + AppHost\Debugger - + System\Ps2\Debug @@ -1269,18 +1278,45 @@ AppHost\Debugger + + AppHost\Debugger + System\ISO + + System\Ps2\Debug + + + System\Ps2\Debug + + + System\Ps2\Debug + System\Ps2\Debug + + System\ISO + + + System\ISO + + + System\ISO + + + System\ISO + + + System\ISO + - + AppHost\Resources - + AppHost\Resources @@ -1344,9 +1380,6 @@ AppHost\Resources - - AppHost\Resources - AppHost\Resources @@ -1356,5 +1389,13 @@ AppHost\Resources + + AppHost\Resources + + + + + AppHost\Resources + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,945 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - pcsx2 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD} - pcsx2 - - - - Application - false - Unicode - true - v110_xp - - - Application - false - Unicode - false - v110_xp - - - Application - false - Unicode - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(ProjectName)-dev - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - Async - Use - PrecompiledHeader.h - CompileAsCpp - NoExtensions - - - zlib-dbg.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)-dbg.exe - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - NDEBUG;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - Level3 - CompileAsCpp - NoExtensions - - - zlib-dev.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - NDEBUG;%(PreprocessorDefinitions) - Async - NoExtensions - Use - PrecompiledHeader.h - CompileAsCpp - - - zlib.lib;%(AdditionalDependencies) - $(TargetDir)$(TargetName).pdb - - - - - Document - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - - - - - - - - - - - - - - - - - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - ..\Win32.h - $(IntDir)win32.pch - true - ..\Win32.h - $(IntDir)win32.pch - true - - - true - ..\Win32.h - $(IntDir)win32.pch - true - ..\Win32.h - $(IntDir)win32.pch - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - - - - - - {26511268-2902-4997-8421-ecd7055f9e28} - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false - - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - false - - - {a51123f5-9505-4eae-85e7-d320290a272c} - false - - - {677b7d11-d5e1-40b3-88b1-9a4df83d2213} - false - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj.filters pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj.filters 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,1360 +0,0 @@ - - - - - {d1e5f218-107b-4e8c-9527-55cb9388b544} - - - {acd41072-b36e-4653-a430-40ade53fb78a} - - - {5dc872c1-db13-4c70-9d44-a3fc4b6fc241} - - - {3cda6808-a2bd-48a7-912e-161a7d0f5bce} - - - {a3f5cf44-2d2b-4822-b530-57286c85374a} - - - {a7187804-2892-4f90-9360-cf2bd6c31540} - - - {8cb5090c-c891-498b-bec2-183d4deca91f} - - - {1c7a3f63-9285-4202-84c5-278a854db932} - - - {33efddb9-1e44-44dc-b857-45b49b22c750} - - - {c1691a12-a08a-4ca7-ba66-b4ff4c7f30a5} - - - {57bf864f-d216-4d97-968d-4c0ff4f166ec} - - - {7865c84c-6431-4781-a016-45eeac5cad2c} - - - {c4ee1612-1ce9-4c74-8323-f98851014558} - - - {a210a307-e8bf-4bbc-8770-e720cc7fc953} - - - {f9ec43a5-e1d5-4b0b-831a-eed6947e8552} - - - {e14056ea-b126-4e5b-94e0-3ce09463970b} - - - {4ba4f2e2-5195-471b-9a0d-d84fa3fb96aa} - - - {088d96f1-2b69-4c53-9f14-026db3368905} - - - {259f9912-d495-45da-b894-8312fde18364} - - - {5f98cd09-41cd-4c1e-ad7d-06a8859e770c} - - - {620afa6f-3aea-4093-bed0-46fd37a5ad6d} - - - {f9de9bc0-4bc5-4fb5-8a1f-04bc31a82b07} - - - {a6b34a13-67af-45fd-a2fb-2c86a762dd39} - - - {89c4908d-b0a1-4c69-9104-00e0af69a714} - - - {f5c8a322-8f48-44a8-97ad-4bd0017bdfe7} - - - {79aa85ae-b75b-421a-838c-8144d9dacd76} - - - {094486fe-8ffc-4b98-81d6-6c381554fd8e} - - - {409f8654-a1cd-4624-9ede-3ae83a707876} - - - {e373743e-ee9f-421c-aa28-2d02a08bb252} - - - {5a3ec813-4719-4ca1-9988-3587ea402a2b} - - - {a11bcdd7-008e-40aa-9376-d1cc2bf4e67c} - - - {8aa116a4-8bae-4ec0-a919-be8a320491eb} - - - {4dab2d06-69e0-4f3e-b6d3-45e5e85af940} - - - {67e51016-d1db-44d2-910d-349d2833f798} - - - {5602cc18-9d1c-49c8-9509-7e4cf9ecd91b} - - - {ffa6c572-1615-4dad-80c3-333e3eb476f2} - - - {bba4d866-e26f-49c8-83fb-fb970c33798b} - - - {96937113-fef0-4e63-92e5-a30edcc78dc2} - - - {5e741f2d-9e0b-4e43-b2a2-44a8370e1546} - - - {3c918e82-4f67-4058-9818-4aff906dfa4a} - - - {c5237754-2509-4291-b869-c5dacc1a8aba} - - - {99a8dd4e-22db-4818-8799-7646b363b725} - - - {03bc7561-2b23-469a-936d-0463fb0ee9d2} - - - {1f18feb4-85f0-455d-927a-d4d6b226d8a5} - - - {ebbed875-840b-4b7b-96e4-4da2d4e38d4b} - - - {510ab530-0308-44f7-a7e3-08e474065651} - - - {485e39c6-aa13-4094-8ec8-3113cd0a1734} - - - {f8e51d3e-dc60-4aa9-9d37-c7c1ccaacd02} - - - {b9da6fbf-4fd9-4cfb-89f7-34ac0f933ce9} - - - {b49e5139-daa9-411b-995e-a53d98c583ba} - - - - - Misc - - - Docs - - - System\Linux - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - AppHost\Dialogs - - - - - Misc - - - Misc - - - Misc - - - Misc\Utilities - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System\ISO - - - System\Ps2 - - - System\Ps2 - - - System\Ps2\EmotionEngine - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU\Dynarec - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\SPR - - - System\Ps2\EmotionEngine\DMAC\Gif - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\GS - - - System\Ps2\GS - - - System\Ps2\GS - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\iCore - - - System\Ps2\iCore - - - System\Windows - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Win32 - - - AppHost\Win32 - - - AppHost\Win32 - - - AppHost\Linux - - - AppHost\Cheats - - - AppHost\Cheats - - - - - - - - - - - System\Ps2\IPU - - - System\Ps2 - - - AppHost - - - AppHost - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Panels - - - AppHost\Panels - - - System\Ps2\GS - - - System\Ps2\GS - - - System\ISO - - - System\ISO - - - System\ISO - - - System\ISO - - - System\ISO - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\ISO - - - System\Ps2\Debug - - - - - Misc - - - Misc - - - Misc\Utilities - - - System\ISO - - - System\ISO - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Ps2\EmotionEngine - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\SPR - - - System\Ps2\EmotionEngine\DMAC\Gif - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\GS - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Include - - - System\Ps2\Include - - - System\Ps2\iCore - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Resources - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Cheats - - - - - - - - - System\Ps2\IPU - - - AppHost - - - AppHost\Panels - - - System\Ps2\GS - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\ISO - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - System\ISO - - - System\Ps2\Debug - - - - - AppHost\Resources - - - AppHost\Resources - - - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,945 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - pcsx2 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD} - pcsx2 - - - - Application - false - Unicode - true - v120_xp - - - Application - false - Unicode - false - v120_xp - - - Application - false - Unicode - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(ProjectName)-dev - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - Async - Use - PrecompiledHeader.h - CompileAsCpp - NoExtensions - - - zlib-dbg.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)-dbg.exe - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - NDEBUG;%(PreprocessorDefinitions) - Async - Use - PrecompiledHeader.h - Level3 - CompileAsCpp - NoExtensions - - - zlib-dev.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/pcsx2.tlb - - - $(ProjectRootDir)/gui;%(AdditionalIncludeDirectories) - NDEBUG;%(PreprocessorDefinitions) - Async - NoExtensions - Use - PrecompiledHeader.h - CompileAsCpp - - - zlib.lib;%(AdditionalDependencies) - $(TargetDir)$(TargetName).pdb - - - - - Document - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - - - - - - - - - - - - - - - - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - - %(RootDir)%(Directory)\%(Filename).h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - ..\Win32.h - $(IntDir)win32.pch - true - ..\Win32.h - $(IntDir)win32.pch - true - - - true - ..\Win32.h - $(IntDir)win32.pch - true - ..\Win32.h - $(IntDir)win32.pch - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - $(SvnRootDir)\common\include;$(SvnRootDir)\3rdparty\wxWidgets\include;$(SvnRootDir)\3rdparty\wxWidgets\lib\vc_lib\mswd;%(AdditionalIncludeDirectories) - - - - - - {26511268-2902-4997-8421-ecd7055f9e28} - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false - - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - false - - - {a51123f5-9505-4eae-85e7-d320290a272c} - false - - - {677b7d11-d5e1-40b3-88b1-9a4df83d2213} - false - - - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - cmd.exe /c "%(RootDir)%(Directory)\bin2cpp.cmd" %(Filename)%(Extension) - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - %(RootDir)%(Directory)\%(Filename).h - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj.filters pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj.filters 2014-08-25 15:01:17.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/VCprojects/pcsx2_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,1360 +0,0 @@ - - - - - {d1e5f218-107b-4e8c-9527-55cb9388b544} - - - {acd41072-b36e-4653-a430-40ade53fb78a} - - - {5dc872c1-db13-4c70-9d44-a3fc4b6fc241} - - - {3cda6808-a2bd-48a7-912e-161a7d0f5bce} - - - {a3f5cf44-2d2b-4822-b530-57286c85374a} - - - {a7187804-2892-4f90-9360-cf2bd6c31540} - - - {8cb5090c-c891-498b-bec2-183d4deca91f} - - - {1c7a3f63-9285-4202-84c5-278a854db932} - - - {33efddb9-1e44-44dc-b857-45b49b22c750} - - - {c1691a12-a08a-4ca7-ba66-b4ff4c7f30a5} - - - {57bf864f-d216-4d97-968d-4c0ff4f166ec} - - - {7865c84c-6431-4781-a016-45eeac5cad2c} - - - {c4ee1612-1ce9-4c74-8323-f98851014558} - - - {a210a307-e8bf-4bbc-8770-e720cc7fc953} - - - {f9ec43a5-e1d5-4b0b-831a-eed6947e8552} - - - {e14056ea-b126-4e5b-94e0-3ce09463970b} - - - {4ba4f2e2-5195-471b-9a0d-d84fa3fb96aa} - - - {088d96f1-2b69-4c53-9f14-026db3368905} - - - {259f9912-d495-45da-b894-8312fde18364} - - - {5f98cd09-41cd-4c1e-ad7d-06a8859e770c} - - - {620afa6f-3aea-4093-bed0-46fd37a5ad6d} - - - {f9de9bc0-4bc5-4fb5-8a1f-04bc31a82b07} - - - {a6b34a13-67af-45fd-a2fb-2c86a762dd39} - - - {89c4908d-b0a1-4c69-9104-00e0af69a714} - - - {f5c8a322-8f48-44a8-97ad-4bd0017bdfe7} - - - {79aa85ae-b75b-421a-838c-8144d9dacd76} - - - {094486fe-8ffc-4b98-81d6-6c381554fd8e} - - - {409f8654-a1cd-4624-9ede-3ae83a707876} - - - {e373743e-ee9f-421c-aa28-2d02a08bb252} - - - {5a3ec813-4719-4ca1-9988-3587ea402a2b} - - - {a11bcdd7-008e-40aa-9376-d1cc2bf4e67c} - - - {8aa116a4-8bae-4ec0-a919-be8a320491eb} - - - {4dab2d06-69e0-4f3e-b6d3-45e5e85af940} - - - {67e51016-d1db-44d2-910d-349d2833f798} - - - {5602cc18-9d1c-49c8-9509-7e4cf9ecd91b} - - - {ffa6c572-1615-4dad-80c3-333e3eb476f2} - - - {bba4d866-e26f-49c8-83fb-fb970c33798b} - - - {96937113-fef0-4e63-92e5-a30edcc78dc2} - - - {5e741f2d-9e0b-4e43-b2a2-44a8370e1546} - - - {3c918e82-4f67-4058-9818-4aff906dfa4a} - - - {c5237754-2509-4291-b869-c5dacc1a8aba} - - - {99a8dd4e-22db-4818-8799-7646b363b725} - - - {03bc7561-2b23-469a-936d-0463fb0ee9d2} - - - {1f18feb4-85f0-455d-927a-d4d6b226d8a5} - - - {ebbed875-840b-4b7b-96e4-4da2d4e38d4b} - - - {510ab530-0308-44f7-a7e3-08e474065651} - - - {485e39c6-aa13-4094-8ec8-3113cd0a1734} - - - {f8e51d3e-dc60-4aa9-9d37-c7c1ccaacd02} - - - {b9da6fbf-4fd9-4cfb-89f7-34ac0f933ce9} - - - {7a0a1104-f9ee-4cd1-aaba-f8267eba1658} - - - - - Misc - - - Docs - - - System\Linux - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - AppHost\Dialogs - - - - - Misc - - - Misc - - - Misc - - - Misc\Utilities - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System - - - System\ISO - - - System\Ps2 - - - System\Ps2 - - - System\Ps2\EmotionEngine - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU\Dynarec - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\SPR - - - System\Ps2\EmotionEngine\DMAC\Gif - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Dynarec\ix86-32 - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\EmotionEngine\EE\Interpreter - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\GS - - - System\Ps2\GS - - - System\Ps2\GS - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\iCore - - - System\Ps2\iCore - - - System\Windows - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Win32 - - - AppHost\Win32 - - - AppHost\Win32 - - - AppHost\Linux - - - AppHost\Cheats - - - AppHost\Cheats - - - - - - - - - - - System\Ps2\IPU - - - System\Ps2 - - - AppHost - - - AppHost - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Panels - - - AppHost\Panels - - - System\Ps2\GS - - - System\Ps2\GS - - - System\ISO - - - System\ISO - - - System\ISO - - - System\ISO - - - System\ISO - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - AppHost\Debugger - - - System\Ps2\EmotionEngine\DMAC\Sif - - - AppHost\Debugger - - - System\ISO - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - - - Misc - - - Misc - - - Misc\Utilities - - - System\ISO - - - System\ISO - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Include - - - System\Ps2\EmotionEngine - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Hardware - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\Memory - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Dynarec\Super VU - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\VU\Interpreter - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Sif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif - - - System\Ps2\EmotionEngine\DMAC\Vif\Unpack\newVif\Dynarec - - - System\Ps2\EmotionEngine\DMAC\SPR - - - System\Ps2\EmotionEngine\DMAC\Gif - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\EmotionEngine\EE\Dynarec - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop - - - System\Ps2\Iop\Dynarec - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\Hardware - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\Iop\CDVD - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\IPU\mpeg2lib - - - System\Ps2\GS - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Include - - - System\Ps2\Include - - - System\Ps2\iCore - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - System\IsoFS - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Dialogs - - - AppHost\Resources - - - AppHost\Panels - - - AppHost\Panels - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Include - - - AppHost\Cheats - - - - - - - - - System\Ps2\IPU - - - AppHost - - - AppHost\Panels - - - System\Ps2\GS - - - System\Ps2\EmotionEngine\VU\Dynarec\microVU - - - System\ISO - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - System\Ps2\Debug - - - AppHost\Debugger - - - AppHost\Debugger - - - AppHost\Debugger - - - System\Ps2\Debug - - - AppHost\Debugger - - - AppHost\Debugger - - - System\ISO - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - System\Ps2\Debug - - - - - AppHost\Resources - - - AppHost\Resources - - - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - System\Ps2\Debug\rdebug - - - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - AppHost\Resources - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/WinConsolePipe.cpp pcsx2-1.4.0/pcsx2/windows/WinConsolePipe.cpp --- pcsx2-1.3.1+dfsg/pcsx2/windows/WinConsolePipe.cpp 2011-07-24 13:02:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/WinConsolePipe.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -58,6 +58,9 @@ try { + if (ConnectNamedPipe(m_outpipe, nullptr) == 0 && GetLastError() != ERROR_PIPE_CONNECTED) + throw Exception::RuntimeError().SetDiagMsg(L"ConnectNamedPipe failed."); + char s8_Buf[2049]; DWORD u32_Read = 0; @@ -128,13 +131,7 @@ DeclareNoncopyableObject( WinPipeRedirection ); protected: - DWORD m_stdhandle; - FILE* m_stdfp; - FILE m_stdfp_copy; - HANDLE m_readpipe; - HANDLE m_writepipe; - int m_crtFile; FILE* m_fp; WinPipeThread m_Thread; @@ -147,49 +144,32 @@ }; WinPipeRedirection::WinPipeRedirection( FILE* stdstream ) - : m_Thread( m_readpipe, (stdstream == stderr) ? Color_Red : Color_Black ) + : m_readpipe(INVALID_HANDLE_VALUE) + , m_fp(nullptr) + , m_Thread(m_readpipe, (stdstream == stderr) ? Color_Red : Color_Black) { - m_stdhandle = ( stdstream == stderr ) ? STD_ERROR_HANDLE : STD_OUTPUT_HANDLE; - m_stdfp = stdstream; - m_stdfp_copy = *stdstream; - - m_readpipe = INVALID_HANDLE_VALUE; - m_writepipe = INVALID_HANDLE_VALUE; - m_crtFile = -1; - m_fp = NULL; - pxAssert( (stdstream == stderr) || (stdstream == stdout) ); try { - if( 0 == CreatePipe( &m_readpipe, &m_writepipe, NULL, 0 ) ) - throw Exception::WinApiError().SetDiagMsg(L"CreatePipe failed."); - - if( 0 == SetStdHandle( m_stdhandle, m_writepipe ) ) - throw Exception::WinApiError().SetDiagMsg(L"SetStdHandle failed."); + // freopen requires a pathname, so a named pipe must be used. The + // pathname needs to be unique to allow multiple instances of PCSX2 to + // work properly. + const wxString stream_name(stdstream == stderr ? L"stderr" : L"stdout"); + const wxString pipe_name(wxString::Format(L"\\\\.\\pipe\\pcsx2_%s%d", stream_name, GetCurrentProcessId())); + + m_readpipe = CreateNamedPipe(pipe_name, PIPE_ACCESS_INBOUND, 0, 1, 2048, 2048, 0, nullptr); + if (m_readpipe == INVALID_HANDLE_VALUE) + throw Exception::WinApiError().SetDiagMsg(L"CreateNamedPipe failed."); - // Note: Don't use GetStdHandle to "confirm" the handle. - // - // Under Windows7, and possibly Vista, GetStdHandle for STDOUT will return NULL - // after it's been assigned a custom write pipe (this differs from XP, which - // returns the assigned handle). Amusingly, the GetStdHandle succeeds for STDERR - // and also tends to succeed when the app is run from the MSVC debugger. - // - // Fortunately, there's no need to use GetStdHandle anyway, so long as SetStdHandle - // didn't error. - - m_crtFile = _open_osfhandle( (intptr_t)m_writepipe, _O_TEXT ); - if( m_crtFile == -1 ) - throw Exception::RuntimeError().SetDiagMsg( L"_open_osfhandle returned -1." ); - - m_fp = _fdopen( m_crtFile, "w" ); - if( m_fp == NULL ) - throw Exception::RuntimeError().SetDiagMsg( L"_fdopen returned NULL." ); + m_Thread.Start(); - *m_stdfp = *m_fp; // omg hack. but it works >_< - setvbuf( stdstream, NULL, _IONBF, 0 ); + // Binary flag set to prevent multiple \r characters before each \n. + m_fp = _wfreopen(pipe_name, L"wb", stdstream); + if (m_fp == nullptr) + throw Exception::RuntimeError().SetDiagMsg(L"_wfreopen returned NULL."); - m_Thread.Start(); + setvbuf(stdstream, nullptr, _IONBF, 0); } catch( Exception::BaseThreadError& ex ) { @@ -222,40 +202,15 @@ void WinPipeRedirection::Cleanup() throw() { - // restore the old handle we so graciously hacked earlier ;) - // (or don't and suffer CRT crashes! ahaha!) - - if( m_stdfp != NULL ) - *m_stdfp = m_stdfp_copy; - // Cleanup Order Notes: // * The redirection thread is most likely blocking on ReadFile(), so we can't Cancel yet, lest we deadlock -- // Closing the writepipe (either directly or through the fp/crt handles) issues an EOF to the thread, // so it's safe to Cancel afterward. - // - // * The seemingly redundant series of checks here are designed to handle cases where the pipe init fails - // mid-init (in which case the writepipe might be allocated while the fp/crtFile are still invalid, etc). if( m_fp != NULL ) { fclose( m_fp ); m_fp = NULL; - - m_crtFile = -1; // crtFile is closed implicitly when closing m_fp - m_writepipe = INVALID_HANDLE_VALUE; // same for the write end of the pipe - } - - if( m_crtFile != -1 ) - { - _close( m_crtFile ); - m_crtFile = -1; // m_file is closed implicitly when closing crtFile - m_writepipe = INVALID_HANDLE_VALUE; // same for the write end of the pipe (I assume) - } - - if( m_writepipe != INVALID_HANDLE_VALUE ) - { - CloseHandle( m_writepipe ); - m_writepipe = INVALID_HANDLE_VALUE; } m_Thread.Cancel(); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/WinKeyCodes.cpp pcsx2-1.4.0/pcsx2/windows/WinKeyCodes.cpp --- pcsx2-1.3.1+dfsg/pcsx2/windows/WinKeyCodes.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/WinKeyCodes.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,163 @@ +/* PCSX2 - PS2 Emulator for PCs +* Copyright (C) 2002-2010 PCSX2 Dev Team +* +* PCSX2 is free software: you can redistribute it and/or modify it under the terms +* of the GNU Lesser General Public License as published by the Free Software Found- +* ation, either version 3 of the License, or (at your option) any later version. +* +* PCSX2 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 PCSX2. +* If not, see . +*/ + +#include "PrecompiledHeader.h" +#include + +// VK values without MS constants. see - https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx +#define PX_VK_A 0x41 +#define PX_VK_Z 0x5A + +#define PX_VK2WX_SIZE 256 +static int vk2wx[PX_VK2WX_SIZE] = { 0 }; +static bool initialized = false; + +static void addTx(UINT vkCode, int wxCode) +{ + pxAssert(vkCode < PX_VK2WX_SIZE); + pxAssert(!vk2wx[vkCode]); // we shouldn't override entries here + vk2wx[vkCode] = wxCode; +} + +static void initTable() +{ + // Shift, Control, Alt and Menu + addTx(VK_SHIFT, WXK_SHIFT); + addTx(VK_LSHIFT, WXK_SHIFT); + addTx(VK_RSHIFT, WXK_SHIFT); + + addTx(VK_CONTROL, WXK_CONTROL); + addTx(VK_LCONTROL, WXK_CONTROL); + addTx(VK_RCONTROL, WXK_CONTROL); + + addTx(VK_MENU, WXK_ALT); + addTx(VK_LMENU, WXK_ALT); + addTx(VK_RMENU, WXK_ALT); + + addTx(VK_LWIN, WXK_WINDOWS_LEFT); + addTx(VK_RWIN, WXK_WINDOWS_RIGHT); + + addTx(VK_APPS, WXK_WINDOWS_MENU); + + // Scroll, Caps and numlocks + addTx(VK_SCROLL, WXK_SCROLL); + addTx(VK_CAPITAL, WXK_CAPITAL); + addTx(VK_NUMLOCK, WXK_NUMLOCK); + + // cursor and other extended keyboard keys + addTx(VK_PRIOR, WXK_PAGEUP); + addTx(VK_NEXT, WXK_PAGEDOWN); + addTx(VK_HOME, WXK_HOME); + addTx(VK_END, WXK_END); + addTx(VK_LEFT, WXK_LEFT); + addTx(VK_UP, WXK_UP); + addTx(VK_RIGHT, WXK_RIGHT); + addTx(VK_DOWN, WXK_DOWN); + addTx(VK_INSERT, WXK_INSERT); + addTx(VK_DELETE, WXK_DELETE); + + // numpad keys + addTx(VK_NUMPAD0, WXK_NUMPAD0); + addTx(VK_NUMPAD1, WXK_NUMPAD1); + addTx(VK_NUMPAD2, WXK_NUMPAD2); + addTx(VK_NUMPAD3, WXK_NUMPAD3); + addTx(VK_NUMPAD4, WXK_NUMPAD4); + addTx(VK_NUMPAD5, WXK_NUMPAD5); + addTx(VK_NUMPAD6, WXK_NUMPAD6); + addTx(VK_NUMPAD7, WXK_NUMPAD7); + addTx(VK_NUMPAD8, WXK_NUMPAD8); + addTx(VK_NUMPAD9, WXK_NUMPAD9); + addTx(VK_MULTIPLY, WXK_NUMPAD_MULTIPLY); + addTx(VK_ADD, WXK_NUMPAD_ADD); + addTx(VK_SEPARATOR, WXK_NUMPAD_SEPARATOR); + addTx(VK_SUBTRACT, WXK_NUMPAD_SUBTRACT); + addTx(VK_DECIMAL, WXK_NUMPAD_DECIMAL); + addTx(VK_DIVIDE, WXK_NUMPAD_DIVIDE); + + // Function keys + addTx(VK_F1, WXK_F1); + addTx(VK_F2, WXK_F2); + addTx(VK_F3, WXK_F3); + addTx(VK_F4, WXK_F4); + addTx(VK_F5, WXK_F5); + addTx(VK_F6, WXK_F6); + addTx(VK_F7, WXK_F7); + addTx(VK_F8, WXK_F8); + addTx(VK_F9, WXK_F9); + addTx(VK_F10, WXK_F10); + addTx(VK_F11, WXK_F11); + addTx(VK_F12, WXK_F12); + addTx(VK_F13, WXK_F13); + addTx(VK_F14, WXK_F14); + addTx(VK_F15, WXK_F15); + addTx(VK_F16, WXK_F16); + addTx(VK_F17, WXK_F17); + addTx(VK_F18, WXK_F18); + addTx(VK_F19, WXK_F19); + addTx(VK_F20, WXK_F20); + addTx(VK_F21, WXK_F21); + addTx(VK_F22, WXK_F22); + addTx(VK_F23, WXK_F23); + addTx(VK_F24, WXK_F24); + + // various other special keys + addTx(VK_BACK, WXK_BACK); + addTx(VK_TAB, WXK_TAB); + addTx(VK_RETURN, WXK_RETURN); + addTx(VK_ESCAPE, WXK_ESCAPE); + addTx(VK_SNAPSHOT, WXK_SNAPSHOT); + addTx(VK_PAUSE, WXK_PAUSE); + + // Not sure what these keys are + addTx(VK_CLEAR, WXK_CLEAR); + addTx(VK_HELP, WXK_HELP); + addTx(VK_SELECT, WXK_SELECT); + addTx(VK_EXECUTE, WXK_EXECUTE); + addTx(VK_PRINT, WXK_PRINT); + + // symbol-only keys on all keyboards - return ascii + addTx(VK_OEM_PERIOD, '.'); + addTx(VK_OEM_PLUS, '='); + addTx(VK_OEM_MINUS, '-'); + addTx(VK_OEM_COMMA, ','); + + // symbol-only keys on US keyboards - return ascii + addTx(VK_OEM_1, ';'); + addTx(VK_OEM_2, '/'); + addTx(VK_OEM_3, '`'); + addTx(VK_OEM_4, '['); + addTx(VK_OEM_5, '\\'); + addTx(VK_OEM_6, ']'); + addTx(VK_OEM_7, '\''); + + pxAssert(PX_VK_A < PX_VK_Z); + // VK codes for letter keys - return lower case ascii + for (UINT i = PX_VK_A; i <= PX_VK_Z; i++) + addTx(i, i + 'a' - PX_VK_A); + + initialized = true; +} + + +// Returns a WXK_* keycode translated from a VK_* virtual key. wxCharCodeMSWToWx was +// removed from wxWidgets 3, this should work as a replacement. +// Where an ascii code for a printable char exists, we try to return it +int TranslateVKToWXK(u32 keysym) +{ + if (!initialized) + initTable(); + + return keysym < PX_VK2WX_SIZE ? vk2wx[keysym] : 0; +} diff -Nru pcsx2-1.3.1+dfsg/pcsx2/windows/wxResources.rc pcsx2-1.4.0/pcsx2/windows/wxResources.rc --- pcsx2-1.3.1+dfsg/pcsx2/windows/wxResources.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/windows/wxResources.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,72 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON2 ICON "AppIcon.ico" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/BaseblockEx.cpp pcsx2-1.4.0/pcsx2/x86/BaseblockEx.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/BaseblockEx.cpp 2011-04-13 16:32:47.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/BaseblockEx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -45,6 +45,7 @@ return imin; } +#if 0 BASEBLOCKEX* BaseBlocks::GetByX86(uptr ip) { if (0 == blocks.size()) @@ -67,6 +68,7 @@ return &blocks[imin]; } +#endif void BaseBlocks::Link(u32 pc, s32* jumpptr) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/BaseblockEx.h pcsx2-1.4.0/pcsx2/x86/BaseblockEx.h --- pcsx2-1.3.1+dfsg/pcsx2/x86/BaseblockEx.h 2014-08-13 03:55:32.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/BaseblockEx.h 2016-01-05 17:28:08.000000000 +0000 @@ -22,7 +22,7 @@ // addressable memory. Yay! struct BASEBLOCK { - u32 m_pFnptr; + uptr m_pFnptr; const __inline uptr GetFnptr() const { return m_pFnptr; } void __inline SetFnptr( uptr ptr ) { m_pFnptr = ptr; } @@ -31,14 +31,15 @@ // extra block info (only valid for start of fn) struct BASEBLOCKEX { - u32 startpc; + u32 startpc; uptr fnptr; - u16 size; // size in dwords - u16 x86size; + u16 size; // The size in dwords (equivalent to the number of instructions) + u16 x86size; // The size in byte of the translated x86 instructions #ifdef PCSX2_DEVBUILD - u32 visited; // number of times called - u64 ltime; // regs it assumes to have set already + // Could be useful to instrument the block + //u32 visited; // number of times called + //u64 ltime; // regs it assumes to have set already #endif }; @@ -53,18 +54,19 @@ pxAssert(size > 0); BASEBLOCKEX *newMem = new BASEBLOCKEX[size]; if(blocks) { - memmove(newMem, blocks, _Reserved * sizeof(BASEBLOCKEX)); + memcpy(newMem, blocks, _Reserved * sizeof(BASEBLOCKEX)); delete[] blocks; } blocks = newMem; pxAssert(blocks != NULL); } -public: - BaseBlockArray() : _Reserved(0), - _Size(0) + + void reserve(u32 size) { + resize(size); + _Reserved = size; } - +public: ~BaseBlockArray() { if(blocks) { @@ -73,21 +75,18 @@ } BaseBlockArray (s32 size) : _Reserved(0), - _Size(0) + _Size(0), blocks(NULL) { - if(size > 0) { - resize(size); - } - _Reserved = size; + reserve(size); } BASEBLOCKEX *insert(u32 startpc, uptr fnptr) { if(_Size + 1 >= _Reserved) { - resize(_Reserved + 0x2000); - _Reserved += 0x2000; // some games requires even more! + reserve(_Reserved + 0x2000); // some games requires even more! } + // Insert the the new BASEBLOCKEX by startpc order int imin = 0, imax = _Size, imid; while (imin < imax) { @@ -114,12 +113,6 @@ return &blocks[imin]; } - void reserve(u32 size) - { - resize(size); - _Reserved = size; - } - __fi BASEBLOCKEX &operator[](int idx) const { return *(blocks + idx); @@ -135,11 +128,6 @@ return _Size; } - __fi void erase(s32 first) - { - return erase(first, first + 1); - } - __fi void erase(s32 first, s32 last) { int range = last - first; @@ -165,16 +153,8 @@ public: BaseBlocks() : recompiler(0) - , blocks(0) - { - blocks.reserve(0x4000); - } - - BaseBlocks(uptr recompiler_) : - recompiler(recompiler_), - blocks(0) + , blocks(0x4000) { - blocks.reserve(0x4000); } void SetJITCompile( void (*recompiler_)() ) @@ -184,7 +164,7 @@ BASEBLOCKEX* New(u32 startpc, uptr fnptr); int LastIndex (u32 startpc) const; - BASEBLOCKEX* GetByX86(uptr ip); + //BASEBLOCKEX* GetByX86(uptr ip); __fi int Index (u32 startpc) const { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/iCore.cpp pcsx2-1.4.0/pcsx2/x86/iCore.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/iCore.cpp 2014-07-30 23:32:36.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/iCore.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,6 +22,8 @@ #include "VU.h" #include "R3000A.h" +using namespace x86Emitter; + __tls_emit u8 *j8Ptr[32]; __tls_emit u32 *j32Ptr[32]; @@ -133,9 +135,9 @@ _freeXMMreg(tempi); return tempi; } - Console.Error("*PCSX2*: XMM Reg Allocation Error in _getFreeXMMreg()!"); - return -1; + pxFailDev("*PCSX2*: XMM Reg Allocation Error in _getFreeXMMreg()!"); + throw Exception::FailedToAllocateRegister(); } int _allocTempXMMreg(XMMSSEType type, int xmmreg) { @@ -313,7 +315,8 @@ return i; } - if (xmmreg == -1) xmmreg = _getFreeXMMreg(); + if (xmmreg == -1) + xmmreg = _getFreeXMMreg(); g_xmmtypes[xmmreg] = XMMT_FPS; xmmregs[xmmreg].inuse = 1; @@ -378,7 +381,8 @@ g_cpuHasConstReg &= ~(1<SetProfilerName("IOPrec"); while (!recMem->IsOk()) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/iR3000Atables.cpp pcsx2-1.4.0/pcsx2/x86/iR3000Atables.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/iR3000Atables.cpp 2010-09-23 19:44:55.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/iR3000Atables.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1163,13 +1163,12 @@ _psxDeleteReg(31, 0); _psxFlushAllUnused(); + PSX_SET_CONST(31); + g_psxConstRegs[31] = psxpc + 4; + if( PSX_IS_CONST1(_Rs_) ) { if( (int)g_psxConstRegs[_Rs_] >= 0 ) branchTo = psxpc+4; - else { - PSX_SET_CONST(_Rt_); - g_psxConstRegs[31] = psxpc+4; - } psxRecompileNextInstruction(1); psxSetBranchImm( branchTo ); @@ -1181,7 +1180,6 @@ psxSaveBranchState(); - MOV32ItoM((uptr)&psxRegs.GPR.r[31], psxpc+4); psxRecompileNextInstruction(1); psxSetBranchImm(psxpc); @@ -1205,11 +1203,12 @@ _psxDeleteReg(31, 0); _psxFlushAllUnused(); + PSX_SET_CONST(31); + g_psxConstRegs[31] = psxpc + 4; + if( PSX_IS_CONST1(_Rs_) ) { if( (int)g_psxConstRegs[_Rs_] < 0 ) branchTo = psxpc+4; - else - MOV32ItoM((uptr)&psxRegs.GPR.r[31], psxpc+4); psxRecompileNextInstruction(1); psxSetBranchImm( branchTo ); @@ -1219,8 +1218,6 @@ CMP32ItoM((uptr)&psxRegs.GPR.r[_Rs_], 0); u32* pjmp = JGE32(0); - MOV32ItoM((uptr)&psxRegs.GPR.r[31], psxpc+4); - psxSaveBranchState(); psxRecompileNextInstruction(1); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/iR5900.h pcsx2-1.4.0/pcsx2/x86/iR5900.h --- pcsx2-1.3.1+dfsg/pcsx2/x86/iR5900.h 2014-08-14 07:21:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/iR5900.h 2016-01-05 17:28:08.000000000 +0000 @@ -22,12 +22,9 @@ #include "VU.h" #include "iCore.h" -extern u32 pc; -extern int branch; - extern u32 maxrecmem; extern u32 pc; // recompiler pc (also used by the SuperVU! .. why? (air)) -extern int branch; // set for branch (also used by the SuperVU! .. why? (air)) +extern int g_branch; // set for branch (also used by the SuperVU! .. why? (air)) extern u32 target; // branch target extern u32 s_nBlockCycles; // cycles of current block recompiling diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/iR5900Misc.cpp pcsx2-1.4.0/pcsx2/x86/iR5900Misc.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/iR5900Misc.cpp 2014-08-14 07:21:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/iR5900Misc.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,6 +19,7 @@ #include "iR5900.h" #include "R5900OpcodeTables.h" +using namespace x86Emitter; namespace R5900 { namespace Dynarec { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iCore-32.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iCore-32.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iCore-32.cpp 2014-08-21 14:42:40.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iCore-32.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,6 +22,7 @@ #include "x86emitter/x86emitter.h" #include "R3000A.h" +using namespace x86Emitter; // yay sloppy crap needed until we can remove dependency on this hippopotamic // landmass of shared code. (air) @@ -155,8 +156,7 @@ } pxFailDev( "x86 register allocation error" ); - - return -1; + throw Exception::FailedToAllocateRegister(); } void _flushCachedRegs() @@ -191,7 +191,10 @@ if (!GPR_IS_CONST1(i) || g_cpuFlushedConstReg & (1< 0) XOR32RtoR(EAX, EAX), eaxval = 0; - if (eaxval == 0) NOT32R(EAX), eaxval = -1; + if (eaxval > 0) { + XOR32RtoR(EAX, EAX); + eaxval = 0; + } + if (eaxval == 0) { + NOT32R(EAX); + eaxval = -1; + } MOV32RtoM((uptr)&cpuRegs.GPR.r[i].SL[j], EAX); done[j + 2] |= 1<= 0 ) { // requested specific reg, so return that instead - if( i != x86reg ) { + if( i != (uint)x86reg ) { if( x86regs[i].mode & MODE_READ ) readfromreg = i; mode |= x86regs[i].mode&MODE_WRITE; x86regs[i].inuse = 0; @@ -542,7 +551,7 @@ } pxFailDev( "mmx register allocation error" ); - return -1; + throw Exception::FailedToAllocateRegister(); } int _allocMMXreg(int mmxreg, int reg, int mode) @@ -583,7 +592,8 @@ } } - if (mmxreg == -1) mmxreg = _getFreeMMXreg(); + if (mmxreg == -1) + mmxreg = _getFreeMMXreg(); mmxregs[mmxreg].inuse = 1; mmxregs[mmxreg].reg = reg; @@ -849,11 +859,7 @@ _freeMMXreg(7); if (x86FpuState == MMX_STATE) { - if (x86caps.has3DNOWInstructionExtensions) - FEMMS(); - else - EMMS(); - + EMMS(); x86FpuState = FPU_STATE; } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900-32.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900-32.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900-32.cpp 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900-32.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -33,6 +33,7 @@ #include "Elfheader.h" #include "../DebugTools/Breakpoints.h" +#include "Patch.h" #if !PCSX2_SEH # include @@ -56,29 +57,12 @@ u32 s_nBlockCycles = 0; // cycles of current block recompiling u32 pc; // recompiler pc -int branch; // set for branch +int g_branch; // set for branch __aligned16 GPR_reg64 g_cpuConstRegs[32] = {0}; u32 g_cpuHasConstReg = 0, g_cpuFlushedConstReg = 0; bool g_cpuFlushedPC, g_cpuFlushedCode, g_recompilingDelaySlot, g_maySignalException; -// -------------------------------------------------------------------------------------- -// R5900LutReserve_RAM -// -------------------------------------------------------------------------------------- -class R5900LutReserve_RAM : public SpatialArrayReserve -{ - typedef SpatialArrayReserve _parent; - -public: - R5900LutReserve_RAM( const wxString& name ) - : _parent( name ) - { - } - -protected: - void OnCommittedBlock( void* block ); -}; - //////////////////////////////////////////////////////////////// // Static Private Variables - R5900 Dynarec @@ -87,8 +71,9 @@ static const int RECCONSTBUF_SIZE = 16384 * 2; // 64 bit consts in 32 bit units static RecompiledCodeReserve* recMem = NULL; -static SpatialArrayReserve* recRAMCopy = NULL; -static R5900LutReserve_RAM* recLutReserve_RAM = NULL; +static u8* recRAMCopy = NULL; +static u8* recLutReserve_RAM = NULL; +static const size_t recLutSize = Ps2MemSize::MainRam + Ps2MemSize::Rom + Ps2MemSize::Rom1; static uptr m_ConfiguredCacheReserve = 64; @@ -125,7 +110,7 @@ static void iBranchTest(u32 newpc = 0xffffffff); static void ClearRecLUT(BASEBLOCK* base, int count); -static u32 eeScaleBlockCycles(); +static u32 scaleblockcycles(); void _eeFlushAllUnused() { @@ -347,7 +332,7 @@ MOV32RtoM( (uptr)&g_nextEventCycle, EAX ); recCall(func); - branch = 2; + g_branch = 2; } void recCall( void (*func)() ) @@ -361,6 +346,8 @@ // ===================================================================================================== static void __fastcall recRecompile( const u32 startpc ); +static void __fastcall dyna_block_discard(u32 start,u32 sz); +static void __fastcall dyna_page_reset(u32 start,u32 sz); static u32 s_store_ebp, s_store_esp; @@ -375,6 +362,8 @@ static DynGenFunc* JITCompileInBlock = NULL; static DynGenFunc* EnterRecompiledCode = NULL; static DynGenFunc* ExitRecompiledCode = NULL; +static DynGenFunc* DispatchBlockDiscard = NULL; +static DynGenFunc* DispatchPageReset = NULL; static void recEventTest() { @@ -468,6 +457,15 @@ return (DynGenFunc*)retval; } +static DynGenFunc* _DynGen_DispatcherEvent() +{ + u8* retval = xGetPtr(); + + xCALL( recEventTest ); + + return (DynGenFunc*)retval; +} + static DynGenFunc* _DynGen_EnterRecompiledCode() { pxAssertDev( DispatcherReg != NULL, "Dynamically generated dispatchers are required prior to generating EnterRecompiledCode!" ); @@ -505,8 +503,10 @@ xMOV( ptr32[esp+0x08+cdecl_reserve], ebp ); xLEA( ebp, ptr32[esp+0x08+cdecl_reserve] ); - xMOV( ptr[&s_store_esp], esp ); - xMOV( ptr[&s_store_ebp], ebp ); + if (EmuConfig.Cpu.Recompiler.StackFrameChecks) { + xMOV( ptr[&s_store_esp], esp ); + xMOV( ptr[&s_store_ebp], ebp ); + } xJMP( DispatcherReg ); @@ -531,6 +531,22 @@ return (DynGenFunc*)retval; } +static DynGenFunc* _DynGen_DispatchBlockDiscard() +{ + u8* retval = xGetPtr(); + xCALL(dyna_block_discard); + xJMP(ExitRecompiledCode); + return (DynGenFunc*)retval; +} + +static DynGenFunc* _DynGen_DispatchPageReset() +{ + u8* retval = xGetPtr(); + xCALL(dyna_page_reset); + xJMP(ExitRecompiledCode); + return (DynGenFunc*)retval; +} + static void _DynGen_Dispatchers() { // In case init gets called multiple times: @@ -543,13 +559,14 @@ // Place the EventTest and DispatcherReg stuff at the top, because they get called the // most and stand to benefit from strong alignment and direct referencing. - DispatcherEvent = (DynGenFunc*)xGetPtr(); - xCALL( recEventTest ); + DispatcherEvent = _DynGen_DispatcherEvent(); DispatcherReg = _DynGen_DispatcherReg(); - JITCompile = _DynGen_JITCompile(); - JITCompileInBlock = _DynGen_JITCompileInBlock(); - EnterRecompiledCode = _DynGen_EnterRecompiledCode(); + JITCompile = _DynGen_JITCompile(); + JITCompileInBlock = _DynGen_JITCompileInBlock(); + EnterRecompiledCode = _DynGen_EnterRecompiledCode(); + DispatchBlockDiscard = _DynGen_DispatchBlockDiscard(); + DispatchPageReset = _DynGen_DispatchPageReset(); HostSys::MemProtectStatic( eeRecDispatchers, PageAccess_ExecOnly() ); @@ -559,7 +576,6 @@ ////////////////////////////////////////////////////////////////////////////////////////// // -static void __fastcall dyna_block_discard(u32 start,u32 sz); static __ri void ClearRecLUT(BASEBLOCK* base, int memsize) { @@ -567,11 +583,6 @@ base[i].SetFnptr((uptr)JITCompile); } -void R5900LutReserve_RAM::OnCommittedBlock( void* block ) -{ - _parent::OnCommittedBlock(block); - ClearRecLUT((BASEBLOCK*)block, __pagesize * m_blocksize); -} static void recThrowHardwareDeficiency( const wxChar* extFail ) { @@ -582,7 +593,7 @@ static void recReserveCache() { - if (!recMem) recMem = new RecompiledCodeReserve(L"R5900-32 Recompiler Cache", _1mb * 4); + if (!recMem) recMem = new RecompiledCodeReserve(L"R5900-32 Recompiler Cache", _16mb); recMem->SetProfilerName("EErec"); while (!recMem->IsOk()) @@ -611,25 +622,19 @@ { if (!recRAMCopy) { - recRAMCopy = new SpatialArrayReserve( L"R5900 RAM copy" ); - recRAMCopy->SetBlockSize(_16kb); - recRAMCopy->Reserve(Ps2MemSize::MainRam); + recRAMCopy = (u8*)_aligned_malloc(Ps2MemSize::MainRam, 4096); } if (!recRAM) { - recLutReserve_RAM = new R5900LutReserve_RAM( L"R5900 RAM LUT" ); - recLutReserve_RAM->SetBlockSize(_16kb); - recLutReserve_RAM->Reserve(Ps2MemSize::MainRam + Ps2MemSize::Rom + Ps2MemSize::Rom1); + recLutReserve_RAM = (u8*)_aligned_malloc(recLutSize, 4096); } - BASEBLOCK* basepos = (BASEBLOCK*)recLutReserve_RAM->GetPtr(); + BASEBLOCK* basepos = (BASEBLOCK*)recLutReserve_RAM; recRAM = basepos; basepos += (Ps2MemSize::MainRam / 4); recROM = basepos; basepos += (Ps2MemSize::Rom / 4); recROM1 = basepos; basepos += (Ps2MemSize::Rom1 / 4); - pxAssert(recLutReserve_RAM->GetPtrEnd() == (u8*)basepos); - for (int i = 0; i < 0x10000; i++) recLUT_SetPage(recLUT, 0, 0, 0, i, 0); @@ -681,12 +686,6 @@ x86FpuState = FPU_STATE; } -struct ManualPageTracking -{ - u16 page; - u8 counter; -}; - static __aligned16 u16 manual_page[Ps2MemSize::MainRam >> 12]; static __aligned16 u8 manual_counter[Ps2MemSize::MainRam >> 12]; @@ -705,12 +704,12 @@ Console.WriteLn( Color_StrongBlack, "EE/iR5900-32 Recompiler Reset" ); recMem->Reset(); - recRAMCopy->Reset(); - recLutReserve_RAM->Reset(); + ClearRecLUT((BASEBLOCK*)recLutReserve_RAM, recLutSize); + memset(recRAMCopy, 0, Ps2MemSize::MainRam); maxrecmem = 0; - memset(recConstBuf, 0, RECCONSTBUF_SIZE * sizeof(recConstBuf)); + memset(recConstBuf, 0, RECCONSTBUF_SIZE * sizeof(*recConstBuf)); if( s_pInstCache ) memset( s_pInstCache, 0, sizeof(EEINST)*s_nInstCacheSize ); @@ -724,14 +723,14 @@ recConstBufPtr = recConstBuf; x86FpuState = FPU_STATE; - branch = 0; + g_branch = 0; } static void recShutdown() { safe_delete( recMem ); - safe_delete( recRAMCopy ); - safe_delete( recLutReserve_RAM ); + safe_aligned_free( recRAMCopy ); + safe_aligned_free( recLutReserve_RAM ); recBlocks.Reset(); @@ -811,9 +810,13 @@ m_cpuException = NULL; m_Exception = NULL; + // setjmp will save the register context and will return 0 + // A call to longjmp will restore the context (included the eip/rip) + // but will return the longjmp 2nd parameter (here 1) if( !setjmp( m_SetJmp_StateCheck ) ) { eeRecIsReset = false; + ScopedBool executing(eeCpuExecuting); // Important! Most of the console logging and such has cancel points in it. This is great // in Windows, where SEH lets us safely kill a thread from anywhere we want. This is bad @@ -842,10 +845,12 @@ CMP32ItoM((uptr)&cpuRegs.pc, pc); j8Ptr[0] = JE8(0); - ADD32ItoM((uptr)&cpuRegs.cycle, eeScaleBlockCycles()); + ADD32ItoM((uptr)&cpuRegs.cycle, scaleblockcycles()); + // Note: technically the address is 0x8000_0180 (or 0x180) + // (if CPU is booted) xJMP( DispatcherReg ); x86SetJ8(j8Ptr[0]); - //branch = 2; + //g_branch = 2; } //////////////////////////////////////////////////// @@ -855,12 +860,13 @@ CMP32ItoM((uptr)&cpuRegs.pc, pc); j8Ptr[0] = JE8(0); - ADD32ItoM((uptr)&cpuRegs.cycle, eeScaleBlockCycles()); + ADD32ItoM((uptr)&cpuRegs.cycle, scaleblockcycles()); xJMP( DispatcherEvent ); x86SetJ8(j8Ptr[0]); - //branch = 2; + //g_branch = 2; } +// Size is in dwords (4 bytes) void recClear(u32 addr, u32 size) { // necessary since recompiler doesn't call femms/emms @@ -942,7 +948,7 @@ void SetBranchReg( u32 reg ) { - branch = 1; + g_branch = 1; if( reg != 0xffffffff ) { // if( GPR_IS_CONST1(reg) ) @@ -996,7 +1002,7 @@ void SetBranchImm( u32 imm ) { - branch = 1; + g_branch = 1; pxAssert( imm ); @@ -1072,8 +1078,7 @@ _flushConstRegs(); if (x86FpuState==MMX_STATE) { - if (x86caps.has3DNOWInstructionExtensions) FEMMS(); - else EMMS(); + EMMS(); x86FpuState=FPU_STATE; } } @@ -1093,66 +1098,27 @@ // } //} +// Note: scaleblockcycles() scales s_nBlockCycles respective to the EECycleRate value for manipulating the cycles of current block recompiling. +// s_nBlockCycles is 3 bit fixed point. Divide by 8 when done! +// Scaling blocks under 40 cycles seems to produce countless problem, so let's try to avoid them. -static u32 scaleBlockCycles_helper() +static u32 scaleblockcycles() { - // Note: s_nBlockCycles is 3 bit fixed point. Divide by 8 when done! - - // Let's not scale blocks under 5-ish cycles. This fixes countless "problems" - // caused by sync hacks and such, since games seem to care a lot more about - // these small blocks having accurate cycle counts. - - if( s_nBlockCycles <= (5<<3) || (EmuConfig.Speedhacks.EECycleRate == 0) ) - return s_nBlockCycles >> 3; + bool lowcycles = (s_nBlockCycles <= 40); + s8 cyclerate = EmuConfig.Speedhacks.EECycleRate; + u32 scale_cycles = 0; - uint scalarLow, scalarMid, scalarHigh; + if (cyclerate == 0 || lowcycles || cyclerate > 99 || cyclerate < -2) + scale_cycles = s_nBlockCycles >> 3; // Default cycle rate - // Note: larger blocks get a smaller scalar, to help keep - // them from becoming "too fat" and delaying branch tests. + else if (cyclerate > 0) + scale_cycles = s_nBlockCycles >> (3 + cyclerate); - switch( EmuConfig.Speedhacks.EECycleRate ) - { - case 0: return s_nBlockCycles >> 3; - - case 1: // Sync hack x1.5! - scalarLow = 5; - scalarMid = 7; - scalarHigh = 5; - break; + else if (cyclerate < 0) + scale_cycles = ((5 + (-2 * cyclerate)) * s_nBlockCycles) >> 5; - case 2: // Sync hack x2 - scalarLow = 7; - scalarMid = 9; - scalarHigh = 7; - break; - - // Added insane rates on popular request (rama) - //jNO_DEFAULT - default: - scalarLow = 2; - scalarMid = 3; - scalarHigh = 2; - - if (EmuConfig.Speedhacks.EECycleRate > 2 && EmuConfig.Speedhacks.EECycleRate < 100) { - scalarLow *= EmuConfig.Speedhacks.EECycleRate; - scalarMid *= EmuConfig.Speedhacks.EECycleRate; - scalarHigh *= EmuConfig.Speedhacks.EECycleRate; - } - } - - const u32 temp = s_nBlockCycles * ( - (s_nBlockCycles <= (10<<3)) ? scalarLow : - ((s_nBlockCycles > (21<<3)) ? scalarHigh : scalarMid ) - ); - - return temp >> (3+2); -} - -static u32 eeScaleBlockCycles() -{ - // Ensures block cycles count is never less than 1: - u32 retval = scaleBlockCycles_helper(); - return (retval < 1) ? 1 : retval; + // Ensure block cycle count is never less than 1. + return (scale_cycles < 1) ? 1 : scale_cycles; } @@ -1165,7 +1131,7 @@ // // noDispatch - When set true, then jump to Dispatcher. Used by the recs // for blocks which perform exception checks without branching (it's enabled by -// setting "branch = 2"; +// setting "g_branch = 2"; static void iBranchTest(u32 newpc) { _DynGen_StackFrameCheck(); @@ -1178,7 +1144,7 @@ if (EmuConfig.Speedhacks.WaitLoop && s_nBlockFF && newpc == s_branchTo) { xMOV(eax, ptr32[&g_nextEventCycle]); - xADD(ptr32[&cpuRegs.cycle], eeScaleBlockCycles()); + xADD(ptr32[&cpuRegs.cycle], scaleblockcycles()); xCMP(eax, ptr32[&cpuRegs.cycle]); xCMOVS(eax, ptr32[&cpuRegs.cycle]); xMOV(ptr32[&cpuRegs.cycle], eax); @@ -1188,7 +1154,7 @@ else { xMOV(eax, ptr[&cpuRegs.cycle]); - xADD(eax, eeScaleBlockCycles()); + xADD(eax, scaleblockcycles()); xMOV(ptr[&cpuRegs.cycle], eax); // update cycles xSUB(eax, ptr[&g_nextEventCycle]); @@ -1477,7 +1443,17 @@ else { //If the COP0 DIE bit is disabled, cycles should be doubled. s_nBlockCycles += opcode.cycles * (2 - ((cpuRegs.CP0.n.Config >> 18) & 0x1)); - opcode.recompile(); + try { + opcode.recompile(); + } catch (Exception::FailedToAllocateRegister&) { + // Fall back to the interpreter + recCall(opcode.interpret); +#if 0 + // TODO: Free register ? + // _freeXMMregs(); + // _freeMMXregs(); +#endif + } } if( !delayslot ) { @@ -1556,8 +1532,9 @@ DevCon.Warning("Possible old value used in COP2 code"); for (u32 i = s_pCurBlockEx->startpc; i < s_nEndBlock; i += 4) { + disasm = ""; disR5900Fasm(disasm, memRead32(i), i,false); - DevCon.Warning("%s%08X %s", i == pc - 4 ? "*" : i == p ? "=" : " ", memRead32(i), disasm.c_str()); + DevCon.Warning("%x %s%08X %s", i, i == pc - 4 ? "*" : i == p ? "=" : " ", memRead32(i), disasm.c_str()); } break; } @@ -1613,15 +1590,6 @@ { eeRecPerfLog.Write( Color_StrongGray, "Clearing Manual Block @ 0x%08X [size=%d]", start, sz*4); recClear(start, sz); - - // Stack trick: This function was invoked via a direct jmp, so manually pop the - // EBP/stackframe before issuing a RET, else esp/ebp will be incorrect. - -#ifdef _MSC_VER - __asm leave __asm jmp [ExitRecompiledCode] -#else - __asm__ __volatile__( "leave\n jmp *%[exitRec]\n" : : [exitRec] "m" (ExitRecompiledCode) : ); -#endif } // called when a page under manual protection has been run enough times to be a candidate @@ -1632,12 +1600,89 @@ recClear(start & ~0xfffUL, 0x400); manual_counter[start >> 12]++; mmap_MarkCountedRamPage( start ); +} -#ifdef _MSC_VER - __asm leave __asm jmp [ExitRecompiledCode] -#else - __asm__ __volatile__( "leave\n jmp *%[exitRec]\n" : : [exitRec] "m" (ExitRecompiledCode) : ); -#endif +static void memory_protect_recompiled_code(u32 startpc, u32 size) +{ + u32 inpage_ptr = HWADDR(startpc); + u32 inpage_sz = size*4; + + // The kernel context register is stored @ 0x800010C0-0x80001300 + // The EENULL thread context register is stored @ 0x81000-.... + bool contains_thread_stack = ((startpc >> 12) == 0x81) || ((startpc >> 12) == 0x80001); + + // note: blocks are guaranteed to reside within the confines of a single page. + const vtlb_ProtectionMode PageType = contains_thread_stack ? ProtMode_Manual : mmap_GetRamPageInfo( inpage_ptr ); + + switch (PageType) + { + case ProtMode_NotRequired: + break; + + case ProtMode_None: + case ProtMode_Write: + mmap_MarkCountedRamPage( inpage_ptr ); + manual_page[inpage_ptr >> 12] = 0; + break; + + case ProtMode_Manual: + xMOV( ecx, inpage_ptr ); + xMOV( edx, inpage_sz / 4 ); + //xMOV( eax, startpc ); // uncomment this to access startpc (as eax) in dyna_block_discard + + u32 lpc = inpage_ptr; + u32 stg = inpage_sz; + + while(stg>0) + { + xCMP( ptr32[PSM(lpc)], *(u32*)PSM(lpc) ); + xJNE(DispatchBlockDiscard); + + stg -= 4; + lpc += 4; + } + + // Tweakpoint! 3 is a 'magic' number representing the number of times a counted block + // is re-protected before the recompiler gives up and sets it up as an uncounted (permanent) + // manual block. Higher thresholds result in more recompilations for blocks that share code + // and data on the same page. Side effects of a lower threshold: over extended gameplay + // with several map changes, a game's overall performance could degrade. + + // (ideally, perhaps, manual_counter should be reset to 0 every few minutes?) + + if (!contains_thread_stack && manual_counter[inpage_ptr >> 12] <= 3) + { + // Counted blocks add a weighted (by block size) value into manual_page each time they're + // run. If the block gets run a lot, it resets and re-protects itself in the hope + // that whatever forced it to be manually-checked before was a 1-time deal. + + // Counted blocks have a secondary threshold check in manual_counter, which forces a block + // to 'uncounted' mode if it's recompiled several times. This protects against excessive + // recompilation of blocks that reside on the same codepage as data. + + // fixme? Currently this algo is kinda dumb and results in the forced recompilation of a + // lot of blocks before it decides to mark a 'busy' page as uncounted. There might be + // be a more clever approach that could streamline this process, by doing a first-pass + // test using the vtlb memory protection (without recompilation!) to reprotect a counted + // block. But unless a new algo is relatively simple in implementation, it's probably + // not worth the effort (tests show that we have lots of recompiler memory to spare, and + // that the current amount of recompilation is fairly cheap). + + xADD(ptr16[&manual_page[inpage_ptr >> 12]], size); + xJC(DispatchPageReset); + + // note: clearcnt is measured per-page, not per-block! + ConsoleColorScope cs( Color_Gray ); + eeRecPerfLog.Write( "Manual block @ %08X : size =%3d page/offs = 0x%05X/0x%03X inpgsz = %d clearcnt = %d", + startpc, size, inpage_ptr>>12, inpage_ptr&0xfff, inpage_sz, manual_counter[inpage_ptr >> 12] ); + } + else + { + eeRecPerfLog.Write( "Uncounted Manual block @ 0x%08X : size =%3d page/offs = 0x%05X/0x%03X inpgsz = %d", + startpc, size, inpage_ptr>>12, inpage_ptr&0xfff, inpage_sz ); + } + break; + } } // Skip MPEG Game-Fix @@ -1657,7 +1702,7 @@ xMOV(eax, ptr32[&cpuRegs.GPR.n.ra.UL[0]]); xMOV(ptr32[&cpuRegs.pc], eax); iBranchTest(); - branch = 1; + g_branch = 1; pc = s_nEndBlock; Console.WriteLn(Color_StrongGreen, "sceMpegIsEnd pattern found! Recompiling skip video fix..."); return 1; @@ -1713,10 +1758,19 @@ } // this is the only way patches get applied, doesn't depend on a hack - if (HWADDR(startpc) == ElfEntry) + if (HWADDR(startpc) == ElfEntry) { xCALL(eeGameStarting); + // Apply patch as soon as possible. Normally it is done in + // eeGameStarting but first block is already compiled. + // + // First tentative was to call eeGameStarting directly (not through the + // recompiler) but it crashes some games (GT4, DMC3). It is either a + // thread issue or linked to the various components reset. + if (EmuConfig.EnablePatches) ApplyPatch(0); + if (EmuConfig.EnableCheats) ApplyCheat(0); + } - branch = 0; + g_branch = 0; // reset recomp state variables s_nBlockCycles = 0; @@ -2032,84 +2086,8 @@ if (dumplog & 1) iDumpBlock(startpc, recPtr); #endif - u32 sz = (s_nEndBlock-startpc) >> 2; - u32 inpage_ptr = HWADDR(startpc); - u32 inpage_sz = sz*4; - - // note: blocks are guaranteed to reside within the confines of a single page. - - const int PageType = mmap_GetRamPageInfo( inpage_ptr ); - //const u32 pgsz = std::min(0x1000 - inpage_offs, inpage_sz); - const u32 pgsz = inpage_sz; - - switch (PageType) - { - case -1: - break; - - case 0: - mmap_MarkCountedRamPage( inpage_ptr ); - manual_page[inpage_ptr >> 12] = 0; - break; - - default: - xMOV( ecx, inpage_ptr ); - xMOV( edx, pgsz / 4 ); - //xMOV( eax, startpc ); // uncomment this to access startpc (as eax) in dyna_block_discard - - u32 lpc = inpage_ptr; - u32 stg = pgsz; - - while(stg>0) - { - xCMP( ptr32[PSM(lpc)], *(u32*)PSM(lpc) ); - xJNE( dyna_block_discard ); - - stg -= 4; - lpc += 4; - } - - // Tweakpoint! 3 is a 'magic' number representing the number of times a counted block - // is re-protected before the recompiler gives up and sets it up as an uncounted (permanent) - // manual block. Higher thresholds result in more recompilations for blocks that share code - // and data on the same page. Side effects of a lower threshold: over extended gameplay - // with several map changes, a game's overall performance could degrade. - - // (ideally, perhaps, manual_counter should be reset to 0 every few minutes?) - - if (startpc != 0x81fc0 && manual_counter[inpage_ptr >> 12] <= 3) - { - // Counted blocks add a weighted (by block size) value into manual_page each time they're - // run. If the block gets run a lot, it resets and re-protects itself in the hope - // that whatever forced it to be manually-checked before was a 1-time deal. - - // Counted blocks have a secondary threshold check in manual_counter, which forces a block - // to 'uncounted' mode if it's recompiled several times. This protects against excessive - // recompilation of blocks that reside on the same codepage as data. - - // fixme? Currently this algo is kinda dumb and results in the forced recompilation of a - // lot of blocks before it decides to mark a 'busy' page as uncounted. There might be - // be a more clever approach that could streamline this process, by doing a first-pass - // test using the vtlb memory protection (without recompilation!) to reprotect a counted - // block. But unless a new algo is relatively simple in implementation, it's probably - // not worth the effort (tests show that we have lots of recompiler memory to spare, and - // that the current amount of recompilation is fairly cheap). - - xADD(ptr16[&manual_page[inpage_ptr >> 12]], sz); - xJC( dyna_page_reset ); - - // note: clearcnt is measured per-page, not per-block! - ConsoleColorScope cs( Color_Gray ); - eeRecPerfLog.Write( "Manual block @ %08X : size =%3d page/offs = 0x%05X/0x%03X inpgsz = %d clearcnt = %d", - startpc, sz, inpage_ptr>>12, inpage_ptr&0xfff, inpage_sz, manual_counter[inpage_ptr >> 12] ); - } - else - { - eeRecPerfLog.Write( "Uncounted Manual block @ 0x%08X : size =%3d page/offs = 0x%05X/0x%03X inpgsz = %d", - startpc, sz, inpage_ptr>>12, inpage_ptr&0xfff, pgsz, inpage_sz ); - } - break; - } + // Detect and handle self-modified code + memory_protect_recompiled_code(startpc, (s_nEndBlock-startpc) >> 2); // Skip Recompilation if sceMpegIsEnd Pattern detected bool doRecompilation = !skipMPEG_By_Pattern(startpc); @@ -2117,7 +2095,7 @@ if (doRecompilation) { // Finally: Generate x86 recompiled code! g_pCurInstInfo = s_pInstCache; - while (!branch && pc < s_nEndBlock) { + while (!g_branch && pc < s_nEndBlock) { recompileNextInstruction(0); // For the love of recursion, batman! } } @@ -2142,7 +2120,7 @@ if ((oldBlock->startpc + oldBlock->size * 4) <= HWADDR(startpc)) break; - if (memcmp(&(*recRAMCopy)[oldBlock->startpc / 4], PSM(oldBlock->startpc), + if (memcmp(&recRAMCopy[oldBlock->startpc / 4], PSM(oldBlock->startpc), oldBlock->size * 4)) { recClear(startpc, (pc - startpc) / 4); @@ -2152,7 +2130,7 @@ } } - memcpy(&(*recRAMCopy)[HWADDR(startpc) / 4], PSM(startpc), pc - startpc); + memcpy(&recRAMCopy[HWADDR(startpc) / 4], PSM(startpc), pc - startpc); } s_pCurBlock->SetFnptr((uptr)recPtr); @@ -2165,7 +2143,7 @@ if( !(pc&0x10000000) ) maxrecmem = std::max( (pc&~0xa0000000), maxrecmem ); - if( branch == 2 ) + if( g_branch == 2 ) { // Branch type 2 - This is how I "think" this works (air): // Performs a branch/event test but does not actually "break" the block. @@ -2178,10 +2156,10 @@ } else { - if( branch ) + if( g_branch ) pxAssert( !willbranch3 ); - if( willbranch3 || !branch) { + if( willbranch3 || !g_branch) { iFlushCall(FLUSH_EVERYTHING); @@ -2197,7 +2175,7 @@ else { xMOV( ptr32[&cpuRegs.pc], pc ); - xADD( ptr32[&cpuRegs.cycle], eeScaleBlockCycles() ); + xADD( ptr32[&cpuRegs.cycle], scaleblockcycles() ); recBlocks.Link( HWADDR(pc), xJcc32() ); } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900AritImm.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900AritImm.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900AritImm.cpp 2014-08-14 07:21:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900AritImm.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,8 @@ #include "R5900OpcodeTables.h" #include "iR5900.h" +using namespace x86Emitter; + namespace R5900 { namespace Dynarec { namespace OpcodeImpl diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Branch.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Branch.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Branch.cpp 2014-08-14 07:21:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Branch.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,7 +22,7 @@ #include "R5900OpcodeTables.h" #include "iR5900.h" -namespace Interp = R5900::Interpreter::OpcodeImpl; +using namespace x86Emitter; namespace R5900 { namespace Dynarec { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Move.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Move.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Move.cpp 2014-08-14 07:21:09.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Move.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,7 @@ #include "R5900OpcodeTables.h" #include "iR5900.h" +using namespace x86Emitter; namespace R5900 { namespace Dynarec { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900MultDiv.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900MultDiv.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900MultDiv.cpp 2014-08-21 14:42:40.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900MultDiv.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,8 @@ #include "R5900OpcodeTables.h" #include "iR5900.h" +using namespace x86Emitter; + namespace Interp = R5900::Interpreter::OpcodeImpl; namespace R5900 { @@ -223,9 +225,9 @@ reghi = _checkXMMreg(XMMTYPE_GPRREG, XMMGPR_HI, MODE_READ); if( reghi >= 0 ) { if( xmmregs[reghi].mode & MODE_WRITE ) SSE2_MOVQ_XMM_to_M64(hiaddr-8, reghi); + xmmregs[reghi].inuse = 0; } - - xmmregs[reghi].inuse = 0; + MOVQRtoM(hiaddr, mmreg); } else { @@ -258,9 +260,9 @@ reglo = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_LO, MODE_WRITE|MODE_READ); if( reglo >= 0 ) { - u32* ptr = recGetImm64(res & 0x80000000 ? -1 : 0, (u32)res); - if( upper ) SSE_MOVHPS_M64_to_XMM(reglo, (uptr)ptr); - else SSE_MOVLPS_M64_to_XMM(reglo, (uptr)ptr); + u32* mem_ptr = recGetImm64(res & 0x80000000 ? -1 : 0, (u32)res); + if( upper ) SSE_MOVHPS_M64_to_XMM(reglo, (uptr)mem_ptr); + else SSE_MOVLPS_M64_to_XMM(reglo, (uptr)mem_ptr); } else { MOV32ItoM(loaddr, res & 0xffffffff); @@ -272,15 +274,15 @@ if( g_pCurInstInfo->regs[XMMGPR_HI] & testlive ) { if( !upper && (reghi = _allocCheckGPRtoMMX(g_pCurInstInfo, XMMGPR_HI, MODE_WRITE)) >= 0 ) { - MOVQMtoR(reghi, (uptr)recGetImm64(res >> 63 ? -1 : 0, res >> 32)); + MOVQMtoR(reghi, (uptr)recGetImm64((res >> 63) ? -1 : 0, res >> 32)); } else { reghi = _allocCheckGPRtoXMM(g_pCurInstInfo, XMMGPR_HI, MODE_WRITE|MODE_READ); if( reghi >= 0 ) { - u32* ptr = recGetImm64(res >> 63 ? -1 : 0, res >> 32); - if( upper ) SSE_MOVHPS_M64_to_XMM(reghi, (uptr)ptr); - else SSE_MOVLPS_M64_to_XMM(reghi, (uptr)ptr); + u32* mem_ptr = recGetImm64((res >> 63) ? -1 : 0, res >> 32); + if( upper ) SSE_MOVHPS_M64_to_XMM(reghi, (uptr)mem_ptr); + else SSE_MOVLPS_M64_to_XMM(reghi, (uptr)mem_ptr); } else { _deleteEEreg(XMMGPR_HI, 0); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Shift.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Shift.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Shift.cpp 2014-07-30 23:32:36.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Shift.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,7 @@ #include "R5900OpcodeTables.h" #include "iR5900.h" +using namespace x86Emitter; namespace R5900 { namespace Dynarec { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Templates.cpp pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Templates.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/ix86-32/iR5900Templates.cpp 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/ix86-32/iR5900Templates.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -32,6 +32,8 @@ #include "vtlb.h" +using namespace x86Emitter; + //////////////////// // Code Templates // //////////////////// diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Analyze.inl pcsx2-1.4.0/pcsx2/x86/microVU_Analyze.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Analyze.inl 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Analyze.inl 2016-01-05 17:28:08.000000000 +0000 @@ -288,24 +288,34 @@ //------------------------------------------------------------------ __ri void flagSet(mV, bool setMacFlag) { int curPC = iPC; + int calcOPS = 0; + + //Check which ops need to do the flag settings, also check for runs of ops as they can do multiple calculations to get the sticky status flags (VP2) + //Make sure we get the last 4 calculations (Bloody Roar 3, possibly others) for (int i = mVUcount, j = 0; i > 0; i--, j++) { j += mVUstall; - incPC2(-2); - if (sFLAG.doFlag && (j >= 3)) { - if (setMacFlag) { mFLAG.doFlag = 1; } - else { sFLAG.doNonSticky = 1; } - break; + incPC(-2); + + if (calcOPS >= 4 && mVUup.VF_write.reg) break; + + if (sFLAG.doFlag && (j >= 3)) + { + if (setMacFlag) mFLAG.doFlag = 1; + sFLAG.doNonSticky = 1; + calcOPS++; } } + iPC = curPC; + setCode(); } __ri void mVUanalyzeSflag(mV, int It) { - mVUlow.readFlags = 1; + mVUlow.readFlags = true; analyzeVIreg2(mVU, It, mVUlow.VI_write, 1); if (!It) { mVUlow.isNOP = 1; } else { - mVUsFlagHack = 0; // Don't Optimize Out Status Flags for this block + //mVUsFlagHack = 0; // Don't Optimize Out Status Flags for this block mVUinfo.swapOps = 1; flagSet(mVU, 0); if (mVUcount < 4) { @@ -317,7 +327,7 @@ __ri void mVUanalyzeFSSET(mV) { mVUlow.isFSSET = 1; - mVUlow.readFlags = 1; + mVUlow.readFlags = true; } //------------------------------------------------------------------ @@ -325,7 +335,7 @@ //------------------------------------------------------------------ __ri void mVUanalyzeMflag(mV, int Is, int It) { - mVUlow.readFlags = 1; + mVUlow.readFlags = true; analyzeVIreg1(mVU, Is, mVUlow.VI_read[0]); analyzeVIreg2(mVU, It, mVUlow.VI_write, 1); if (!It) { mVUlow.isNOP = 1; } @@ -345,7 +355,7 @@ __fi void mVUanalyzeCflag(mV, int It) { mVUinfo.swapOps = 1; - mVUlow.readFlags = 1; + mVUlow.readFlags = true; if (mVUcount < 4) { if (!(mVUpBlock->pState.needExactMatch & 4)) // The only time this should happen is on the first program block DevCon.WriteLn(Color_Green, "microVU%d: pState's cFlag Info was expected to be set [%04x]", getIndex, xPC); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Branch.inl pcsx2-1.4.0/pcsx2/x86/microVU_Branch.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Branch.inl 2014-08-13 07:55:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Branch.inl 2016-01-05 17:28:08.000000000 +0000 @@ -54,7 +54,7 @@ } //Run any pending XGKick, providing we've got to it. if (mVUinfo.doXGKICK && xPC >= mVUinfo.XGKICKPC) { - mVU_XGKICK_DELAY(mVU, true); + mVU_XGKICK_DELAY(mVU); } if (doEarlyExit(mVU)) { if (!isVU1) xCALL(mVU0clearlpStateJIT); @@ -113,7 +113,7 @@ mVUdivSet(mVU); } if (mVUinfo.doXGKICK) { - mVU_XGKICK_DELAY(mVU, true); + mVU_XGKICK_DELAY(mVU); } if (doEarlyExit(mVU)) { if (!isVU1) @@ -209,7 +209,7 @@ xForwardJump32 eJMP(Jcc_Zero); xOR(ptr32[&VU0.VI[REG_VPU_STAT].UL], (isVU1 ? 0x200 : 0x2)); xOR(ptr32[&mVU.regs().flags], VUFLAG_INTCINTERRUPT); - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; mVUDTendProgram(mVU, &mFC, 1); eJMP.SetTarget(); iPC = tempPC; @@ -221,7 +221,7 @@ xForwardJump32 eJMP(Jcc_Zero); xOR(ptr32[&VU0.VI[REG_VPU_STAT].UL], (isVU1 ? 0x400 : 0x4)); xOR(ptr32[&mVU.regs().flags], VUFLAG_INTCINTERRUPT); - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; mVUDTendProgram(mVU, &mFC, 1); eJMP.SetTarget(); iPC = tempPC; @@ -230,14 +230,14 @@ if(mVUlow.badBranch) DevCon.Warning("End on evil Unconditional branch! - Not implemented! - If game broken report to PCSX2 Team"); - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; mVUendProgram(mVU, &mFC, 1); return; } if(mVUlow.badBranch) { - u32 badBranchAddr = branchAddr+8; + u32 badBranchAddr = branchAddr(mVU)+8; incPC(3); if(mVUlow.branch == 2 || mVUlow.branch == 10) //Delay slot branch needs linking { @@ -252,7 +252,7 @@ // Normal Branch mVUsetupBranch(mVU, mFC); - normBranchCompile(mVU, branchAddr); + normBranchCompile(mVU, branchAddr(mVU)); } //Messy handler warning!! @@ -266,7 +266,7 @@ u32 badBranchAddr; iPC = bPC-2; setCode(); - badBranchAddr = branchAddr; + badBranchAddr = branchAddr(mVU); xCMP(ptr16[&mVU.branch], 0); @@ -308,16 +308,16 @@ xOR(ptr32[&mVU.regs().flags], VUFLAG_INTCINTERRUPT); mVUDTendProgram(mVU, &mFC, 2); xCMP(ptr16[&mVU.branch], 0); - xForwardJump8 tJMP((JccComparisonType)JMPcc); + xForwardJump32 tJMP(xInvertCond((JccComparisonType)JMPcc)); incPC(4); // Set PC to First instruction of Non-Taken Side xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); - eJMP.SetTarget(); + tJMP.SetTarget(); incPC(-4); // Go Back to Branch Opcode to get branchAddr - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); - tJMP.SetTarget(); + eJMP.SetTarget(); iPC = tempPC; } if (mVUup.dBit && doDBitHandling) @@ -329,13 +329,13 @@ xOR(ptr32[&mVU.regs().flags], VUFLAG_INTCINTERRUPT); mVUDTendProgram(mVU, &mFC, 2); xCMP(ptr16[&mVU.branch], 0); - xForwardJump8 dJMP((JccComparisonType)JMPcc); + xForwardJump32 dJMP(xInvertCond((JccComparisonType)JMPcc)); incPC(4); // Set PC to First instruction of Non-Taken Side xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); dJMP.SetTarget(); incPC(-4); // Go Back to Branch Opcode to get branchAddr - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); eJMP.SetTarget(); @@ -349,13 +349,13 @@ incPC(3); mVUendProgram(mVU, &mFC, 2); - xForwardJump8 eJMP((JccComparisonType)JMPcc); + xForwardJump32 eJMP(xInvertCond((JccComparisonType)JMPcc)); incPC(1); // Set PC to First instruction of Non-Taken Side xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); - eJMP.SetTarget(); + eJMP.SetTarget(); incPC(-4); // Go Back to Branch Opcode to get branchAddr - iPC = branchAddr/4; + iPC = branchAddr(mVU)/4; xMOV(ptr32[&mVU.regs().VI[REG_TPC].UL], xPC); xJMP(mVU.exitFunct); return; @@ -380,7 +380,7 @@ if (bBlock) { // Branch non-taken has already been compiled xJcc(xInvertCond((JccComparisonType)JMPcc), bBlock->x86ptrStart); incPC(-3); // Go back to branch opcode (to get branch imm addr) - normBranchCompile(mVU, branchAddr); + normBranchCompile(mVU, branchAddr(mVU)); } else { s32* ajmp = xJcc32((JccComparisonType)JMPcc); @@ -393,7 +393,7 @@ iPC = bPC; incPC(-3); // Go back to branch opcode (to get branch imm addr) - uptr jumpAddr = (uptr)mVUblockFetch(mVU, branchAddr, (uptr)&pBlock->pStateEnd); + uptr jumpAddr = (uptr)mVUblockFetch(mVU, branchAddr(mVU), (uptr)&pBlock->pStateEnd); *ajmp = (jumpAddr - ((uptr)ajmp + 4)); } } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Compile.inl pcsx2-1.4.0/pcsx2/x86/microVU_Compile.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Compile.inl 2015-01-11 14:34:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Compile.inl 2016-01-05 17:28:08.000000000 +0000 @@ -207,7 +207,7 @@ incPC(-2); if (mVUup.eBit && mVUbranch) { incPC(2); - Console.Error("microVU%d Warning: Branch in E-bit delay slot! [%04x]", mVU.index, xPC); + DevCon.Warning("microVU%d Warning: Branch in E-bit delay slot! [%04x]", mVU.index, xPC); mVUlow.isNOP = true; } else incPC(2); @@ -468,8 +468,9 @@ mVUincCycles(mVU, 1); mVUopU(mVU, 0); mVUcheckBadOp(mVU); - if (curI & _Ebit_) { eBitPass1(mVU, branch); DevCon.Warning("E Bit on single instruction");} - if (curI & _DTbit_) { branch = 4; DevCon.Warning("D Bit on single instruction");} + if (curI & _Ebit_) { eBitPass1(mVU, g_branch); DevCon.Warning("E Bit on single instruction");} + if (curI & _Dbit_) { mVUup.dBit = true; } + if (curI & _Tbit_) { mVUup.tBit = true; } if (curI & _Mbit_) { mVUup.mBit = true; DevCon.Warning("M Bit on single instruction");} if (curI & _Ibit_) { mVUlow.isNOP = true; mVUup.iBit = true; DevCon.Warning("I Bit on single instruction");} else { incPC(-1); mVUopL(mVU, 0); incPC(1); } @@ -499,7 +500,7 @@ mVUincCycles(mVU, 1); //Just incase the is XGKick if (mVUinfo.doXGKICK) { - mVU_XGKICK_DELAY(mVU, true); + mVU_XGKICK_DELAY(mVU); } return thisPtr; @@ -624,7 +625,7 @@ } if (mVUinfo.doXGKICK) { - mVU_XGKICK_DELAY(mVU, true); + mVU_XGKICK_DELAY(mVU); } if (isEvilBlock) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU.cpp pcsx2-1.4.0/pcsx2/x86/microVU.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU.cpp 2014-09-21 15:15:54.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -30,7 +30,7 @@ void mVUreserveCache(microVU& mVU) { - mVU.cache_reserve = new RecompiledCodeReserve(pxsFmt("Micro VU%u Recompiler Cache", mVU.index)); + mVU.cache_reserve = new RecompiledCodeReserve(pxsFmt("Micro VU%u Recompiler Cache", mVU.index), _16mb); mVU.cache_reserve->SetProfilerName(pxsFmt("mVU%urec", mVU.index)); mVU.cache = mVU.index ? diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Flags.inl pcsx2-1.4.0/pcsx2/x86/microVU_Flags.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Flags.inl 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Flags.inl 2016-01-05 17:28:08.000000000 +0000 @@ -92,30 +92,36 @@ } } -#define sFlagCond (sFLAG.doFlag || mVUlow.isFSSET || mVUinfo.doDivFlag) +#define sFlagCond (sFLAG.doFlag || mVUlow.isFSSET || mVUinfo.doDivFlag ) #define sHackCond (mVUsFlagHack && !sFLAG.doNonSticky) // Note: Flag handling is 'very' complex, it requires full knowledge of how microVU recs work, so don't touch! __fi void mVUsetFlags(mV, microFlagCycles& mFC) { - int endPC = iPC; - u32 aCount = 1; // Amount of instructions needed to get valid mac flag instances for block linking + u32 aCount = 0; // Amount of instructions needed to get valid mac flag instances for block linking + //bool writeProtect = false; // Ensure last ~4+ instructions update mac/status flags (if next block's first 4 instructions will read them) for(int i = mVUcount; i > 0; i--, aCount++) { if (sFLAG.doFlag) { - if (__Mac) + + if (__Mac) { mFLAG.doFlag = true; + //writeProtect = true; + } - if (__Status) + if (__Status) { sFLAG.doNonSticky = true; + //writeProtect = true; + } - if (aCount >= 4) + if (aCount >= 3){ break; + } } incPC2(-2); } - + // Status/Mac Flags Setup Code int xS = 0, xM = 0, xC = 0; u32 ff0=0, ff1=0, ffOn=0, fInfo=0; @@ -356,15 +362,16 @@ mVUopU(mVU, 3); found |= (mVUregs.needExactMatch&8)>>3; mVUregs.needExactMatch &= 7; - if ( curI & _Ebit_ ) { branch = 1; } - if ( curI & _DTbit_ ) { branch = 6; } + if ( curI & _Ebit_ ) { branch = 1; } + if ( curI & _Tbit_ ) { branch = 6; } + if ( (curI & _Dbit_) && doDBitHandling ) { branch = 6; } if (!(curI & _Ibit_) ) { incPC(-1); mVUopL(mVU, 3); incPC(1); } // if (mVUbranch&&(branch>=3)&&(branch<=5)) { DevCon.Error("Double Branch [%x]", xPC); mVUregs.needExactMatch |= 7; break; } if (branch >= 2) { shortBranch(); } else if (branch == 1) { branch = 2; } - if (mVUbranch) { branch = ((mVUbranch>8)?(5):((mVUbranch<3)?3:4)); incPC(-1); aBranchAddr = branchAddr; incPC(1); mVUbranch = 0; } + if (mVUbranch) { branch = ((mVUbranch>8)?(5):((mVUbranch<3)?3:4)); incPC(-1); aBranchAddr = branchAddr(mVU); incPC(1); mVUbranch = 0; } incPC(1); if ((mVUregs.needExactMatch&7)==7) break; } @@ -398,8 +405,8 @@ int ffOpt = doFullFlagOpt; if (mVUbranch <= 2) { // B/BAL incPC(-1); - mVUflagPass (mVU, branchAddr); - checkFFblock(mVU, branchAddr, ffOpt); + mVUflagPass (mVU, branchAddr(mVU)); + checkFFblock(mVU, branchAddr(mVU), ffOpt); incPC(1); mVUregs.needExactMatch &= 0x7; @@ -409,8 +416,8 @@ } else if (mVUbranch <= 8) { // Conditional Branch incPC(-1); // Branch Taken - mVUflagPass (mVU, branchAddr); - checkFFblock(mVU, branchAddr, ffOpt); + mVUflagPass (mVU, branchAddr(mVU)); + checkFFblock(mVU, branchAddr(mVU), ffOpt); int backupFlagInfo = mVUregs.needExactMatch; mVUregs.needExactMatch = 0; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Log.inl pcsx2-1.4.0/pcsx2/x86/microVU_Log.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Log.inl 2014-08-01 00:23:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Log.inl 2016-01-05 17:28:08.000000000 +0000 @@ -99,6 +99,10 @@ mVUlog(")"); } + if (mVUstall) { + mVUlog(" Stall %d Cycles", mVUstall); + } + iPC = i; mVU.code = prog.data[i]; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Lower.inl pcsx2-1.4.0/pcsx2/x86/microVU_Lower.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Lower.inl 2014-08-14 06:47:03.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Lower.inl 2016-01-05 17:28:08.000000000 +0000 @@ -1212,15 +1212,14 @@ } } -static __fi void mVU_XGKICK_DELAY(mV, bool memVI) { +static __fi void mVU_XGKICK_DELAY(mV) { mVUbackupRegs(mVU); #if 0 // XGkick Break - ToDo: Change "SomeGifPathValue" to w/e needs to be tested xTEST (ptr32[&SomeGifPathValue], 1); // If '1', breaks execution xMOV (ptr32[&mVU.resumePtrXG], (uptr)xGetPtr() + 10 + 6); xJcc32(Jcc_NotZero, (uptr)mVU.exitFunctXG - ((uptr)xGetPtr()+6)); #endif - if (memVI) xMOV(gprT2, ptr32[&mVU.VIxgkick]); - else mVUallocVIa(mVU, gprT2, _Is_); + xMOV(gprT2, ptr32[&mVU.VIxgkick]); xCALL(mVU_XGKICK_); mVUrestoreRegs(mVU); } @@ -1228,12 +1227,8 @@ mVUop(mVU_XGKICK) { pass1 { mVUanalyzeXGkick(mVU, _Is_, mVU_XGKICK_CYCLES); } pass2 { - if (!mVU_XGKICK_CYCLES) { - mVU_XGKICK_DELAY(mVU, false); - return; - } - else if (mVUinfo.doXGKICK) { - mVU_XGKICK_DELAY(mVU, true); + if (mVUinfo.doXGKICK) { // check for XGkick Transfer + mVU_XGKICK_DELAY(mVU); mVUinfo.doXGKICK = false; } @@ -1266,7 +1261,7 @@ void condEvilBranch(mV, int JMPcc) { if (mVUlow.badBranch) { xMOV(ptr32[&mVU.branch], gprT1); - xMOV(ptr32[&mVU.badBranch], branchAddrN); + xMOV(ptr32[&mVU.badBranch], branchAddrN(mVU)); xCMP(gprT1b, 0); xForwardJump8 cJMP((JccComparisonType)JMPcc); @@ -1276,7 +1271,7 @@ cJMP.SetTarget(); return; } - xMOV(ptr32[&mVU.evilBranch], branchAddr); + xMOV(ptr32[&mVU.evilBranch], branchAddr(mVU)); xCMP(gprT1b, 0); xForwardJump8 cJMP((JccComparisonType)JMPcc); xMOV(gprT1, ptr32[&mVU.badBranch]); // Branch Not Taken @@ -1291,11 +1286,11 @@ setBranchA(mX, 1, 0); pass1 { mVUanalyzeNormBranch(mVU, 0, false); } pass2 { - if (mVUlow.badBranch) { xMOV(ptr32[&mVU.badBranch], branchAddrN); } - if (mVUlow.evilBranch) { xMOV(ptr32[&mVU.evilBranch], branchAddr); } + if (mVUlow.badBranch) { xMOV(ptr32[&mVU.badBranch], branchAddrN(mVU)); } + if (mVUlow.evilBranch) { xMOV(ptr32[&mVU.evilBranch], branchAddr(mVU)); } mVU.profiler.EmitOp(opB); } - pass3 { mVUlog("B [%04x]", branchAddr, branchAddr); } + pass3 { mVUlog("B [%04x]", branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_BAL) { @@ -1308,11 +1303,11 @@ mVUallocVIb(mVU, gprT1, _It_); } - if (mVUlow.badBranch) { xMOV(ptr32[&mVU.badBranch], branchAddrN); } - if (mVUlow.evilBranch) { xMOV(ptr32[&mVU.evilBranch], branchAddr);} + if (mVUlow.badBranch) { xMOV(ptr32[&mVU.badBranch], branchAddrN(mVU)); } + if (mVUlow.evilBranch) { xMOV(ptr32[&mVU.evilBranch], branchAddr(mVU));} mVU.profiler.EmitOp(opBAL); } - pass3 { mVUlog("BAL vi%02d [%04x]", _Ft_, branchAddr, branchAddr); } + pass3 { mVUlog("BAL vi%02d [%04x]", _Ft_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBEQ) { @@ -1329,7 +1324,7 @@ else condEvilBranch(mVU, Jcc_Equal); mVU.profiler.EmitOp(opIBEQ); } - pass3 { mVUlog("IBEQ vi%02d, vi%02d [%04x]", _Ft_, _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBEQ vi%02d, vi%02d [%04x]", _Ft_, _Fs_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBGEZ) { @@ -1342,7 +1337,7 @@ else condEvilBranch(mVU, Jcc_GreaterOrEqual); mVU.profiler.EmitOp(opIBGEZ); } - pass3 { mVUlog("IBGEZ vi%02d [%04x]", _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBGEZ vi%02d [%04x]", _Fs_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBGTZ) { @@ -1355,7 +1350,7 @@ else condEvilBranch(mVU, Jcc_Greater); mVU.profiler.EmitOp(opIBGTZ); } - pass3 { mVUlog("IBGTZ vi%02d [%04x]", _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBGTZ vi%02d [%04x]", _Fs_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBLEZ) { @@ -1368,7 +1363,7 @@ else condEvilBranch(mVU, Jcc_LessOrEqual); mVU.profiler.EmitOp(opIBLEZ); } - pass3 { mVUlog("IBLEZ vi%02d [%04x]", _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBLEZ vi%02d [%04x]", _Fs_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBLTZ) { @@ -1381,7 +1376,7 @@ else condEvilBranch(mVU, Jcc_Less); mVU.profiler.EmitOp(opIBLTZ); } - pass3 { mVUlog("IBLTZ vi%02d [%04x]", _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBLTZ vi%02d [%04x]", _Fs_, branchAddr(mVU), branchAddr(mVU)); } } mVUop(mVU_IBNE) { @@ -1398,7 +1393,7 @@ else condEvilBranch(mVU, Jcc_NotEqual); mVU.profiler.EmitOp(opIBNE); } - pass3 { mVUlog("IBNE vi%02d, vi%02d [%04x]", _Ft_, _Fs_, branchAddr, branchAddr); } + pass3 { mVUlog("IBNE vi%02d, vi%02d [%04x]", _Ft_, _Fs_, branchAddr(mVU), branchAddr(mVU)); } } void normJumpPass2(mV) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Misc.h pcsx2-1.4.0/pcsx2/x86/microVU_Misc.h --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Misc.h 2014-08-27 18:47:59.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Misc.h 2016-01-05 17:28:08.000000000 +0000 @@ -76,7 +76,6 @@ static const uint _Mbit_ = 1 << 29; static const uint _Dbit_ = 1 << 28; static const uint _Tbit_ = 1 << 27; -static const uint _DTbit_ = 0; //( _Dbit_ | _Tbit_ ) // ToDo: Implement this stuff... static const uint divI = 0x1040000; static const uint divD = 0x2080000; @@ -184,17 +183,10 @@ //------------------------------------------------------------------ // Define mVUquickSearch //------------------------------------------------------------------ -#ifndef __linux__ extern __pagealigned u8 mVUsearchXMM[__pagesize]; typedef u32 (__fastcall *mVUCall)(void*, void*); #define mVUquickSearch(dest, src, size) ((((mVUCall)((void*)mVUsearchXMM))(dest, src)) == 0xf) #define mVUemitSearch() { mVUcustomSearch(); } -#else -// Note: GCC builds crash with custom search function, because -// they're not guaranteeing 16-byte alignment on the structs :( -#define mVUquickSearch(dest, src, size) (!memcmp(dest, src, size)) -#define mVUemitSearch() -#endif //------------------------------------------------------------------ // Misc Macros... @@ -233,20 +225,12 @@ #define shuffleSS(x) ((x==1)?(0x27):((x==2)?(0xc6):((x==4)?(0xe1):(0xe4)))) #define clampE CHECK_VU_EXTRA_OVERFLOW #define varPrint(x) DevCon.WriteLn(#x " = %d", (int)x) +#define islowerOP ((iPC & 1) == 0) #define blockCreate(addr) { \ if (!mVUblocks[addr]) mVUblocks[addr] = new microBlockManager(); \ } -#define branchAddr ( \ - pxAssertDev((iPC & 1) == 0, "microVU: Expected Lower Op for valid branch addr."), \ - ((((iPC + 2) + (_Imm11_ * 2)) & mVU.progMemMask) * 4) \ -) -#define branchAddrN ( \ - pxAssertDev((iPC & 1) == 0, "microVU: Expected Lower Op for valid branch addr."), \ - ((((iPC + 4) + (_Imm11_ * 2)) & mVU.progMemMask) * 4) \ -) - // Fetches the PC and instruction opcode relative to the current PC. Used to rewind and // fast-forward the IR state while calculating VU pipeline conditions (branches, writebacks, etc) #define incPC(x) { iPC = ((iPC + (x)) & mVU.progMemMask); mVU.code = curI; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Misc.inl pcsx2-1.4.0/pcsx2/x86/microVU_Misc.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Misc.inl 2014-08-01 00:23:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Misc.inl 2016-01-05 17:28:08.000000000 +0000 @@ -255,6 +255,19 @@ Console.Error("microVU0 Warning: Accessing VU1 Regs! [%04x] [%x]", pc, prog); } +static inline u32 branchAddrN(const mV) +{ + pxAssumeDev(islowerOP, "MicroVU: Expected Lower OP code for valid branch addr."); + return ((((iPC + 4) + (_Imm11_ * 2)) & mVU.progMemMask) * 4); +} + + +static inline u32 branchAddr(const mV) +{ + pxAssumeDev(islowerOP, "MicroVU: Expected Lower OP code for valid branch addr."); + return ((((iPC + 2) + (_Imm11_ * 2)) & mVU.progMemMask) * 4); +} + static void __fc mVUwaitMTVU() { if (IsDevBuild) DevCon.WriteLn("microVU0: Waiting on VU1 thread to access VU1 regs!"); if (THREAD_VU1) vu1Thread.WaitVU(); @@ -278,12 +291,19 @@ xPUSH(gprT1); xPUSH(gprT2); xPUSH(gprT3); + // Align the stackframe (GCC only, since GCC assumes stackframe is always aligned) +#ifdef __GNUC__ + xSUB(esp, 4); +#endif if (IsDevBuild && !isCOP2) { // Lets see which games do this! xMOV (gprT2, mVU.prog.cur->idx); // Note: Kernel does it via COP2 to initialize VU1! xMOV (gprT3, xPC); // So we don't spam console, we'll only check micro-mode... xCALL(mVUwarningRegAccess); } xCALL(mVUwaitMTVU); +#ifdef __GNUC__ + xADD(esp, 4); +#endif xPOP (gprT3); xPOP (gprT2); xPOP (gprT1); @@ -539,7 +559,7 @@ // Micro VU - Custom Quick Search //------------------------------------------------------------------ -static __pagealigned u8 mVUsearchXMM[__pagesize]; +__pagealigned u8 mVUsearchXMM[__pagesize]; // Generates a custom optimized block-search function // Note: Structs must be 16-byte aligned! (GCC doesn't guarantee this) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Profiler.h pcsx2-1.4.0/pcsx2/x86/microVU_Profiler.h --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Profiler.h 2011-10-15 08:26:59.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Profiler.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,143 +1,143 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 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 PCSX2. - * If not, see . - */ - -#pragma once - -enum microOpcode { - // Upper Instructions - opABS, opCLIP, opOPMULA, opOPMSUB, opNOP, - opADD, opADDi, opADDq, opADDx, opADDy, opADDz, opADDw, - opADDA, opADDAi, opADDAq, opADDAx, opADDAy, opADDAz, opADDAw, - opSUB, opSUBi, opSUBq, opSUBx, opSUBy, opSUBz, opSUBw, - opSUBA, opSUBAi, opSUBAq, opSUBAx, opSUBAy, opSUBAz, opSUBAw, - opMUL, opMULi, opMULq, opMULx, opMULy, opMULz, opMULw, - opMULA, opMULAi, opMULAq, opMULAx, opMULAy, opMULAz, opMULAw, - opMADD, opMADDi, opMADDq, opMADDx, opMADDy, opMADDz, opMADDw, - opMADDA, opMADDAi, opMADDAq, opMADDAx, opMADDAy, opMADDAz, opMADDAw, - opMSUB, opMSUBi, opMSUBq, opMSUBx, opMSUBy, opMSUBz, opMSUBw, - opMSUBA, opMSUBAi, opMSUBAq, opMSUBAx, opMSUBAy, opMSUBAz, opMSUBAw, - opMAX, opMAXi, opMAXx, opMAXy, opMAXz, opMAXw, - opMINI, opMINIi, opMINIx, opMINIy, opMINIz, opMINIw, - opFTOI0, opFTOI4, opFTOI12, opFTOI15, - opITOF0, opITOF4, opITOF12, opITOF15, - // Lower Instructions - opDIV, opSQRT, opRSQRT, - opIADD, opIADDI, opIADDIU, - opIAND, opIOR, - opISUB, opISUBIU, - opMOVE, opMFIR, opMTIR, opMR32, opMFP, - opLQ, opLQD, opLQI, - opSQ, opSQD, opSQI, - opILW, opISW, opILWR, opISWR, - opRINIT, opRGET, opRNEXT, opRXOR, - opWAITQ, opWAITP, - opFSAND, opFSEQ, opFSOR, opFSSET, - opFMAND, opFMEQ, opFMOR, - opFCAND, opFCEQ, opFCOR, opFCSET, opFCGET, - opIBEQ, opIBGEZ, opIBGTZ, opIBLTZ, opIBLEZ, opIBNE, - opB, opBAL, opJR, opJALR, - opESADD, opERSADD, opELENG, opERLENG, - opEATANxy, opEATANxz, opESUM, opERCPR, - opESQRT, opERSQRT, opESIN, opEATAN, - opEEXP, opXITOP, opXTOP, opXGKICK, - opLastOpcode -}; - -static const char microOpcodeName[][16] = { - // Upper Instructions - "ABS", "CLIP", "OPMULA", "OPMSUB", "NOP", - "ADD", "ADDi", "ADDq", "ADDx", "ADDy", "ADDz", "ADDw", - "ADDA", "ADDAi", "ADDAq", "ADDAx", "ADDAy", "ADDAz", "ADDAw", - "SUB", "SUBi", "SUBq", "SUBx", "SUBy", "SUBz", "SUBw", - "SUBA", "SUBAi", "SUBAq", "SUBAx", "SUBAy", "SUBAz", "SUBAw", - "MUL", "MULi", "MULq", "MULx", "MULy", "MULz", "MULw", - "MULA", "MULAi", "MULAq", "MULAx", "MULAy", "MULAz", "MULAw", - "MADD", "MADDi", "MADDq", "MADDx", "MADDy", "MADDz", "MADDw", - "MADDA", "MADDAi", "MADDAq", "MADDAx", "MADDAy", "MADDAz", "MADDAw", - "MSUB", "MSUBi", "MSUBq", "MSUBx", "MSUBy", "MSUBz", "MSUBw", - "MSUBA", "MSUBAi", "MSUBAq", "MSUBAx", "MSUBAy", "MSUBAz", "MSUBAw", - "MAX", "MAXi", "MAXx", "MAXy", "MAXz", "MAXw", - "MINI", "MINIi", "MINIx", "MINIy", "MINIz", "MINIw", - "FTOI0", "FTOI4", "FTOI12", "FTOI15", - "ITOF0", "ITOF4", "ITOF12", "ITOF15", - // Lower Instructions - "DIV", "SQRT", "RSQRT", - "IADD", "IADDI", "IADDIU", - "IAND", "IOR", - "ISUB", "ISUBIU", - "MOVE", "MFIR", "MTIR", "MR32", "MFP", - "LQ", "LQD", "LQI", - "SQ", "SQD", "SQI", - "ILW", "ISW", "ILWR", "ISWR", - "RINIT", "RGET", "RNEXT", "RXOR", - "WAITQ", "WAITP", - "FSAND", "FSEQ", "FSOR", "FSSET", - "FMAND", "FMEQ", "FMOR", - "FCAND", "FCEQ", "FCOR", "FCSET", "FCGET", - "IBEQ", "IBGEZ", "IBGTZ", "IBLTZ", "IBLEZ", "IBNE", - "B", "BAL", "JR", "JALR", - "ESADD", "ERSADD", "ELENG", "ERLENG", - "EATANxy", "EATANxz", "ESUM", "ERCPR", - "ESQRT", "ERSQRT", "ESIN", "EATAN", - "EEXP", "XITOP", "XTOP", "XGKICK" -}; - -#ifdef mVUprofileProg -#include -#include -#include - -struct microProfiler { - static const u32 progLimit = 10000; - u64 opStats[opLastOpcode]; - u32 progCount; - int index; - void Reset(int _index) { memzero(*this); index = _index; } - void EmitOp(microOpcode op) { - xADD(ptr32[&(((u32*)opStats)[op*2+0])], 1); - xADC(ptr32[&(((u32*)opStats)[op*2+1])], 0); - } - void Print() { - progCount++; - if ((progCount % progLimit) == 0) { - u64 total = 0; - vector< pair > v; - for(int i = 0; i < opLastOpcode; i++) { - total += opStats[i]; - v.push_back(make_pair(opStats[i], i)); - } - std::sort (v.begin(), v.end()); - std::reverse(v.begin(), v.end()); - double dTotal = (double)total; - DevCon.WriteLn("microVU%d Profiler:", index); - for(u32 i = 0; i < v.size(); i++) { - u64 count = v[i].first; - double stat = (double)count / dTotal * 100.0; - string str = microOpcodeName[v[i].second]; - str.resize(8, ' '); - DevCon.WriteLn("%s - [%3.4f%%][count=%u]", - str.c_str(), stat, (u32)count); - } - DevCon.WriteLn("Total = 0x%x%x\n\n", (u32)(u64)(total>>32),(u32)total); - } - } -}; -#else -struct microProfiler { - __fi void Reset(int _index) {} - __fi void EmitOp(microOpcode op) {} - __fi void Print() {} -}; -#endif +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2010 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 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 PCSX2. + * If not, see . + */ + +#pragma once + +enum microOpcode { + // Upper Instructions + opABS, opCLIP, opOPMULA, opOPMSUB, opNOP, + opADD, opADDi, opADDq, opADDx, opADDy, opADDz, opADDw, + opADDA, opADDAi, opADDAq, opADDAx, opADDAy, opADDAz, opADDAw, + opSUB, opSUBi, opSUBq, opSUBx, opSUBy, opSUBz, opSUBw, + opSUBA, opSUBAi, opSUBAq, opSUBAx, opSUBAy, opSUBAz, opSUBAw, + opMUL, opMULi, opMULq, opMULx, opMULy, opMULz, opMULw, + opMULA, opMULAi, opMULAq, opMULAx, opMULAy, opMULAz, opMULAw, + opMADD, opMADDi, opMADDq, opMADDx, opMADDy, opMADDz, opMADDw, + opMADDA, opMADDAi, opMADDAq, opMADDAx, opMADDAy, opMADDAz, opMADDAw, + opMSUB, opMSUBi, opMSUBq, opMSUBx, opMSUBy, opMSUBz, opMSUBw, + opMSUBA, opMSUBAi, opMSUBAq, opMSUBAx, opMSUBAy, opMSUBAz, opMSUBAw, + opMAX, opMAXi, opMAXx, opMAXy, opMAXz, opMAXw, + opMINI, opMINIi, opMINIx, opMINIy, opMINIz, opMINIw, + opFTOI0, opFTOI4, opFTOI12, opFTOI15, + opITOF0, opITOF4, opITOF12, opITOF15, + // Lower Instructions + opDIV, opSQRT, opRSQRT, + opIADD, opIADDI, opIADDIU, + opIAND, opIOR, + opISUB, opISUBIU, + opMOVE, opMFIR, opMTIR, opMR32, opMFP, + opLQ, opLQD, opLQI, + opSQ, opSQD, opSQI, + opILW, opISW, opILWR, opISWR, + opRINIT, opRGET, opRNEXT, opRXOR, + opWAITQ, opWAITP, + opFSAND, opFSEQ, opFSOR, opFSSET, + opFMAND, opFMEQ, opFMOR, + opFCAND, opFCEQ, opFCOR, opFCSET, opFCGET, + opIBEQ, opIBGEZ, opIBGTZ, opIBLTZ, opIBLEZ, opIBNE, + opB, opBAL, opJR, opJALR, + opESADD, opERSADD, opELENG, opERLENG, + opEATANxy, opEATANxz, opESUM, opERCPR, + opESQRT, opERSQRT, opESIN, opEATAN, + opEEXP, opXITOP, opXTOP, opXGKICK, + opLastOpcode +}; + +static const char microOpcodeName[][16] = { + // Upper Instructions + "ABS", "CLIP", "OPMULA", "OPMSUB", "NOP", + "ADD", "ADDi", "ADDq", "ADDx", "ADDy", "ADDz", "ADDw", + "ADDA", "ADDAi", "ADDAq", "ADDAx", "ADDAy", "ADDAz", "ADDAw", + "SUB", "SUBi", "SUBq", "SUBx", "SUBy", "SUBz", "SUBw", + "SUBA", "SUBAi", "SUBAq", "SUBAx", "SUBAy", "SUBAz", "SUBAw", + "MUL", "MULi", "MULq", "MULx", "MULy", "MULz", "MULw", + "MULA", "MULAi", "MULAq", "MULAx", "MULAy", "MULAz", "MULAw", + "MADD", "MADDi", "MADDq", "MADDx", "MADDy", "MADDz", "MADDw", + "MADDA", "MADDAi", "MADDAq", "MADDAx", "MADDAy", "MADDAz", "MADDAw", + "MSUB", "MSUBi", "MSUBq", "MSUBx", "MSUBy", "MSUBz", "MSUBw", + "MSUBA", "MSUBAi", "MSUBAq", "MSUBAx", "MSUBAy", "MSUBAz", "MSUBAw", + "MAX", "MAXi", "MAXx", "MAXy", "MAXz", "MAXw", + "MINI", "MINIi", "MINIx", "MINIy", "MINIz", "MINIw", + "FTOI0", "FTOI4", "FTOI12", "FTOI15", + "ITOF0", "ITOF4", "ITOF12", "ITOF15", + // Lower Instructions + "DIV", "SQRT", "RSQRT", + "IADD", "IADDI", "IADDIU", + "IAND", "IOR", + "ISUB", "ISUBIU", + "MOVE", "MFIR", "MTIR", "MR32", "MFP", + "LQ", "LQD", "LQI", + "SQ", "SQD", "SQI", + "ILW", "ISW", "ILWR", "ISWR", + "RINIT", "RGET", "RNEXT", "RXOR", + "WAITQ", "WAITP", + "FSAND", "FSEQ", "FSOR", "FSSET", + "FMAND", "FMEQ", "FMOR", + "FCAND", "FCEQ", "FCOR", "FCSET", "FCGET", + "IBEQ", "IBGEZ", "IBGTZ", "IBLTZ", "IBLEZ", "IBNE", + "B", "BAL", "JR", "JALR", + "ESADD", "ERSADD", "ELENG", "ERLENG", + "EATANxy", "EATANxz", "ESUM", "ERCPR", + "ESQRT", "ERSQRT", "ESIN", "EATAN", + "EEXP", "XITOP", "XTOP", "XGKICK" +}; + +#ifdef mVUprofileProg +#include +#include +#include + +struct microProfiler { + static const u32 progLimit = 10000; + u64 opStats[opLastOpcode]; + u32 progCount; + int index; + void Reset(int _index) { memzero(*this); index = _index; } + void EmitOp(microOpcode op) { + xADD(ptr32[&(((u32*)opStats)[op*2+0])], 1); + xADC(ptr32[&(((u32*)opStats)[op*2+1])], 0); + } + void Print() { + progCount++; + if ((progCount % progLimit) == 0) { + u64 total = 0; + std::vector< std::pair > v; + for(int i = 0; i < opLastOpcode; i++) { + total += opStats[i]; + v.push_back(std::make_pair(opStats[i], i)); + } + std::sort (v.begin(), v.end()); + std::reverse(v.begin(), v.end()); + double dTotal = (double)total; + DevCon.WriteLn("microVU%d Profiler:", index); + for(u32 i = 0; i < v.size(); i++) { + u64 count = v[i].first; + double stat = (double)count / dTotal * 100.0; + std::string str = microOpcodeName[v[i].second]; + str.resize(8, ' '); + DevCon.WriteLn("%s - [%3.4f%%][count=%u]", + str.c_str(), stat, (u32)count); + } + DevCon.WriteLn("Total = 0x%x%x\n\n", (u32)(u64)(total>>32),(u32)total); + } + } +}; +#else +struct microProfiler { + __fi void Reset(int _index) {} + __fi void EmitOp(microOpcode op) {} + __fi void Print() {} +}; +#endif diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Upper.inl pcsx2-1.4.0/pcsx2/x86/microVU_Upper.inl --- pcsx2-1.3.1+dfsg/pcsx2/x86/microVU_Upper.inl 2014-08-01 00:23:50.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/microVU_Upper.inl 2016-01-05 17:28:08.000000000 +0000 @@ -125,7 +125,7 @@ opCase3 { mVUanalyzeFMAC1(mVU, ((isACC) ? 0 : _Fd_), _Fs_, 0); } opCase4 { mVUanalyzeFMAC1(mVU, ((isACC) ? 0 : _Fd_), _Fs_, 0); } - if (noFlagUpdate) { + if (noFlagUpdate) { //Max/Min Ops sFLAG.doFlag = false; } } @@ -492,13 +492,13 @@ mVUop(mVU_MULAx) { mVU_FMACa(mVU, recPass, 2, 2, true, opMULAx, cFs);} // Clamp (TOTA, DoM, ...) mVUop(mVU_MULAy) { mVU_FMACa(mVU, recPass, 2, 2, true, opMULAy, cFs);} // Clamp (TOTA, DoM, ...) mVUop(mVU_MULAz) { mVU_FMACa(mVU, recPass, 2, 2, true, opMULAz, cFs);} // Clamp (TOTA, DoM, ...) -mVUop(mVU_MULAw) { mVU_FMACa(mVU, recPass, 2, 2, true, opMULAw, cFs);} // Clamp (TOTA, DoM, ...) -mVUop(mVU_MADD) { mVU_FMACc(mVU, recPass, 1, opMADD, 0); } -mVUop(mVU_MADDi) { mVU_FMACc(mVU, recPass, 3, opMADDi, 0); } -mVUop(mVU_MADDq) { mVU_FMACc(mVU, recPass, 4, opMADDq, 0); } -mVUop(mVU_MADDx) { mVU_FMACc(mVU, recPass, 2, opMADDx, cFs);} // Clamp (TOTA, DoM, ...) -mVUop(mVU_MADDy) { mVU_FMACc(mVU, recPass, 2, opMADDy, cFs);} // Clamp (TOTA, DoM, ...) -mVUop(mVU_MADDz) { mVU_FMACc(mVU, recPass, 2, opMADDz, cFs);} // Clamp (TOTA, DoM, ...) +mVUop(mVU_MULAw) { mVU_FMACa(mVU, recPass, 2, 2, true, opMULAw, (_XYZW_PS) ? (cFs | cFt) : cFs); } // Clamp (TOTA, DoM, ...)- Ft for Superman - Shadow Of Apokolips +mVUop(mVU_MADD) { mVU_FMACc(mVU, recPass, 1, opMADD, 0); } +mVUop(mVU_MADDi) { mVU_FMACc(mVU, recPass, 3, opMADDi, 0); } +mVUop(mVU_MADDq) { mVU_FMACc(mVU, recPass, 4, opMADDq, 0); } +mVUop(mVU_MADDx) { mVU_FMACc(mVU, recPass, 2, opMADDx, cFs); } // Clamp (TOTA, DoM, ...) +mVUop(mVU_MADDy) { mVU_FMACc(mVU, recPass, 2, opMADDy, cFs); } // Clamp (TOTA, DoM, ...) +mVUop(mVU_MADDz) { mVU_FMACc(mVU, recPass, 2, opMADDz, cFs); } // Clamp (TOTA, DoM, ...) mVUop(mVU_MADDw) { mVU_FMACc(mVU, recPass, 2, opMADDw, (isCOP2)?(cACC|cFt|cFs):cFs);} // Clamp (ICO (COP2), TOTA, DoM) mVUop(mVU_MADDA) { mVU_FMACb(mVU, recPass, 1, 0, opMADDA, 0); } mVUop(mVU_MADDAi) { mVU_FMACb(mVU, recPass, 3, 0, opMADDAi, 0); } @@ -507,7 +507,7 @@ mVUop(mVU_MADDAy) { mVU_FMACb(mVU, recPass, 2, 0, opMADDAy, cFs);} // Clamp (TOTA, DoM, ...) mVUop(mVU_MADDAz) { mVU_FMACb(mVU, recPass, 2, 0, opMADDAz, cFs);} // Clamp (TOTA, DoM, ...) mVUop(mVU_MADDAw) { mVU_FMACb(mVU, recPass, 2, 0, opMADDAw, cFs);} // Clamp (TOTA, DoM, ...) -mVUop(mVU_MSUB) { mVU_FMACd(mVU, recPass, 1, opMSUB, 0); } +mVUop(mVU_MSUB) { mVU_FMACd(mVU, recPass, 1, opMSUB, (isCOP2) ? cFs : 0); } // Clamp ( Superman - Shadow Of Apokolips) mVUop(mVU_MSUBi) { mVU_FMACd(mVU, recPass, 3, opMSUBi, 0); } mVUop(mVU_MSUBq) { mVU_FMACd(mVU, recPass, 4, opMSUBq, 0); } mVUop(mVU_MSUBx) { mVU_FMACd(mVU, recPass, 2, opMSUBx, 0); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_Dynarec.cpp pcsx2-1.4.0/pcsx2/x86/newVif_Dynarec.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_Dynarec.cpp 2014-06-29 10:42:58.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/newVif_Dynarec.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,7 +23,7 @@ void dVifReserve(int idx) { if(!nVif[idx].recReserve) - nVif[idx].recReserve = new RecompiledCodeReserve(pxsFmt(L"VIF%u Unpack Recompiler Cache", idx)); + nVif[idx].recReserve = new RecompiledCodeReserve(pxsFmt(L"VIF%u Unpack Recompiler Cache", idx), _8mb); nVif[idx].recReserve->Reserve( nVif[idx].recReserveSizeMB * _1mb, idx ? HostMemoryMap::VIF1rec : HostMemoryMap::VIF0rec ); } @@ -161,14 +161,14 @@ { case 0: case 1: - case 2: if(PostOp == true) { UnpkLoopIteration++; UnpkLoopIteration = UnpkLoopIteration & 0x3; } break; + case 2: if(PostOp == true) { UnpkLoopIteration++; UnpkLoopIteration = UnpkLoopIteration & 0x3; } break; case 4: case 5: case 6: if(PostOp == true) { UnpkLoopIteration++; UnpkLoopIteration = UnpkLoopIteration & 0x1; } break; - case 8: if(PostOp == true) { UnpkLoopIteration++; UnpkLoopIteration = UnpkLoopIteration & 0x1; } break; - case 9: break; + case 8: if(PostOp == true) { UnpkLoopIteration++; UnpkLoopIteration = UnpkLoopIteration & 0x1; } break; + case 9: if (PostOp == false) { UnpkLoopIteration++; } break; case 10: break; case 12: break; @@ -314,8 +314,12 @@ v.block.mode = (u8&)vifRegs.mode; v.block.cl = vifRegs.cycle.cl; v.block.wl = vifRegs.cycle.wl; - v.block.aligned = !!(vif.vifpacketsize & 0x1); + v.block.aligned = vif.start_aligned; //MTVU doesn't have a packet size! + if ((upkType & 0xf) != 9) + v.block.aligned &= 0x1; + + //DevCon.Warning("Alignment %d", v.block.aligned); // Zero out the mask parameter if it's unused -- games leave random junk // values here which cause false recblock cache misses. v.block.mask = doMask ? vifRegs.mask : 0; diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_HashBucket.h pcsx2-1.4.0/pcsx2/x86/newVif_HashBucket.h --- pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_HashBucket.h 2014-08-13 07:55:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/newVif_HashBucket.h 2016-01-05 17:28:08.000000000 +0000 @@ -81,7 +81,7 @@ u32 d = (u32&)dataPtr; SizeChain& bucket( mBucket[d % hSize] ); - if( bucket.Chain = (T*)_aligned_realloc( bucket.Chain, sizeof(T)*(bucket.Size+1), 16), bucket.Chain==NULL ) { + if( (bucket.Chain = (T*)pcsx2_aligned_realloc( bucket.Chain, sizeof(T)*(bucket.Size+1), 16, sizeof(T)*bucket.Size)) == NULL ) { throw Exception::OutOfMemory( wxsFormat(L"HashBucket Chain (bucket size=%d)", bucket.Size+1) ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_Unpack.cpp pcsx2-1.4.0/pcsx2/x86/newVif_Unpack.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_Unpack.cpp 2014-08-13 07:55:23.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/newVif_Unpack.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -131,7 +131,7 @@ if (newVifDynaRec) dVifUnpack(data, isFill); else _nVifUnpack(idx, data, vifRegs.mode, isFill); } - else vu1Thread.VifUnpack(vif, vifRegs, (u8*)data, size); + else vu1Thread.VifUnpack(vif, vifRegs, (u8*)data, (size + 4) & ~0x3); vif.pass = 0; vif.tag.size = 0; @@ -164,14 +164,8 @@ --vifRegs.num; ++vif.cl; - if (isFill) { - if (vif.cl <= vifRegs.cycle.cl) size -= vSize; - else if (vif.cl == vifRegs.cycle.wl) vif.cl = 0; - } - else { - size -= vSize; - if (vif.cl >= vifRegs.cycle.wl) vif.cl = 0; - } + if (vif.cl <= vifRegs.cycle.cl) size -= vSize; + else if (vif.cl == vifRegs.cycle.wl) vif.cl = 0; } DevCon.Warning("Fill!! Partial num left = %x, guessed %x", vifRegs.num, guessedsize); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_UnpackSSE.cpp pcsx2-1.4.0/pcsx2/x86/newVif_UnpackSSE.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/newVif_UnpackSSE.cpp 2014-06-29 10:42:58.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/newVif_UnpackSSE.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -244,7 +244,7 @@ void VifUnpackSSE_Base::xUPK_V3_32() const { xMOV128 (destReg, ptr128[srcIndirect]); - if(UnpkLoopIteration == (1-IsAligned)) + if(UnpkLoopIteration != IsAligned) xAND.PS( destReg, ptr128[SSEXYZWMask[0]]); } @@ -260,7 +260,17 @@ xPUNPCK.LWD(destReg, destReg); xShiftR (destReg, 16); } -} + + //With V3-16, it takes the first vector from the next position as the W vector + //However - IF the end of this iteration of the unpack falls on a quadword boundary, W becomes 0 + //IsAligned is the position through the current QW in the vif packet + //Iteration counts where we are in the packet. + int result = (((UnpkLoopIteration/4) + 1 + (4-IsAligned)) & 0x3); + + if ((UnpkLoopIteration & 0x1) == 0 && result == 0){ + xAND.PS(destReg, ptr128[SSEXYZWMask[0]]); //zero last word on QW boundary if whole 32bit word is used - tested on ps2 + } +} void VifUnpackSSE_Base::xUPK_V3_8() const { @@ -407,7 +417,7 @@ DevCon.WriteLn( "Generating SSE-optimized unpacking functions for VIF interpreters..." ); - nVifUpkExec = new RecompiledCodeReserve(L"VIF SSE-optimized Unpacking Functions"); + nVifUpkExec = new RecompiledCodeReserve(L"VIF SSE-optimized Unpacking Functions", _64kb); nVifUpkExec->SetProfilerName("iVIF-SSE"); nVifUpkExec->SetBlockSize( 1 ); nVifUpkExec->Reserve( _64kb ); diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Lower.cpp pcsx2-1.4.0/pcsx2/x86/sVU_Lower.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Lower.cpp 2011-08-12 02:31:49.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/sVU_Lower.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1847,9 +1847,9 @@ //Console.WriteLn("recVUMI_ESIN"); if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) { switch(_Fsf_) { - case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); - case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); - default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); + case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); break; + case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); break; + default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); break; } FLD32((uptr)&s_tempmem[_Fsf_]); } @@ -1878,9 +1878,9 @@ //Console.WriteLn("recVUMI_EATAN"); if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) { switch(_Fsf_) { - case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); - case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); - default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); + case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); break; + case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); break; + default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); break; } FLD32((uptr)&s_tempmem[_Fsf_]); } @@ -1910,9 +1910,9 @@ if( (xmmregs[EEREC_S].mode & MODE_WRITE) && (xmmregs[EEREC_S].mode&MODE_NOFLUSH) ) { switch(_Fsf_) { - case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); - case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); - default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); + case 0: SSE_MOVSS_XMM_to_M32((uptr)s_tempmem, EEREC_S); break; + case 1: SSE_MOVLPS_XMM_to_M64((uptr)s_tempmem, EEREC_S); break; + default: SSE_MOVHPS_XMM_to_M64((uptr)&s_tempmem[2], EEREC_S); break; } FMUL32((uptr)&s_tempmem[_Fsf_]); } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Micro.cpp pcsx2-1.4.0/pcsx2/x86/sVU_Micro.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Micro.cpp 2015-01-06 22:45:43.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/sVU_Micro.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -28,6 +28,8 @@ #include "sVU_Debug.h" #include "sVU_zerorec.h" +using namespace x86Emitter; + #ifdef _WIN32 #pragma warning(disable:4244) #pragma warning(disable:4761) @@ -292,14 +294,16 @@ break; } - if (i==8) Console.Error("*PCSX2*: error , out of fmacs"); + if (i==8) { + Console.Error("*PCSX2*: error , out of fmacs"); // VUM_LOG("adding FMAC pipe[%d]; reg %d", i, reg); - - VU->fmac[i].enable = 1; - VU->fmac[i].sCycle = vucycle; - VU->fmac[i].Cycle = 3; - VU->fmac[i].xyzw = xyzw; - VU->fmac[i].reg = reg; + } else { + VU->fmac[i].enable = 1; + VU->fmac[i].sCycle = vucycle; + VU->fmac[i].Cycle = 3; + VU->fmac[i].xyzw = xyzw; + VU->fmac[i].reg = reg; + } } void _recvuFDIVAdd(VURegs * VU, int cycles) { @@ -325,12 +329,14 @@ break; } - if (i==8) Console.Error("*PCSX2*: error , out of ialus"); - - VU->ialu[i].enable = 1; - VU->ialu[i].sCycle = vucycle; - VU->ialu[i].Cycle = cycles; - VU->ialu[i].reg = reg; + if (i==8) { + Console.Error("*PCSX2*: error , out of ialus"); + } else { + VU->ialu[i].enable = 1; + VU->ialu[i].sCycle = vucycle; + VU->ialu[i].Cycle = cycles; + VU->ialu[i].reg = reg; + } } void _recvuTestIALUStalls(VURegs * VU, _VURegsNum *VUregsn) { @@ -464,19 +470,19 @@ { _VURegsNum* lregs; _VURegsNum* uregs; - int *ptr; + int *code_ptr; lregs = pCodeRegs; uregs = pCodeRegs+1; - ptr = (int*)&VU->Micro[pc]; + code_ptr = (int*)&VU->Micro[pc]; pc += 8; - if (ptr[1] & 0x40000000) { // EOP - branch |= 8; + if (code_ptr[1] & 0x40000000) { // EOP + g_branch |= 8; } - VU->code = ptr[1]; + VU->code = code_ptr[1]; if (VU == &VU1) VU1regs_UPPER_OPCODE[VU->code & 0x3f](uregs); else VU0regs_UPPER_OPCODE[VU->code & 0x3f](uregs); @@ -539,13 +545,13 @@ if (uregs->VIread & (1 << REG_P)) { info->p |= 2; assert( VU == &VU1 ); } // check upper flags - if (ptr[1] & 0x80000000) { // I flag + if (code_ptr[1] & 0x80000000) { // I flag info->cycle = vucycle; memzero(*lregs); } else { - VU->code = ptr[0]; + VU->code = code_ptr[0]; if (VU == &VU1) VU1regs_LOWER_OPCODE[VU->code >> 25](lregs); else VU0regs_LOWER_OPCODE[VU->code >> 25](lregs); @@ -553,7 +559,7 @@ info->cycle = vucycle; if (lregs->pipe == VUPIPE_BRANCH) { - branch |= 1; + g_branch |= 1; } if (lregs->VIwrite & (1 << REG_Q)) { diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Upper.cpp pcsx2-1.4.0/pcsx2/x86/sVU_Upper.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_Upper.cpp 2013-06-30 11:43:12.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/sVU_Upper.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -27,6 +27,9 @@ #include "sVU_Micro.h" #include "sVU_Debug.h" #include "sVU_zerorec.h" + +using namespace x86Emitter; + //------------------------------------------------------------------ #define MINMAXFIX 1 //------------------------------------------------------------------ diff -Nru pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_zerorec.cpp pcsx2-1.4.0/pcsx2/x86/sVU_zerorec.cpp --- pcsx2-1.3.1+dfsg/pcsx2/x86/sVU_zerorec.cpp 2014-09-21 15:15:54.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/x86/sVU_zerorec.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -881,7 +881,7 @@ // code generation xSetPtr(s_recVUPtr[vuindex]); - branch = 0; + g_branch = 0; SuperVURecompile(); @@ -1121,7 +1121,7 @@ s_listBlocks.push_back(pblock); int i = 0; - branch = 0; + g_branch = 0; pc = startpc; pblock->startpc = startpc; @@ -1153,10 +1153,10 @@ { u32* ptr = (u32*) & VU->Micro[pc]; pc += 8; - int prevbranch = branch; + int prevbranch = g_branch; if (ptr[1] & 0x40000000) - branch = 1; + g_branch = 1; if (!(ptr[1] & 0x80000000)) // not I { @@ -1172,7 +1172,7 @@ case 0x2e: // IBLEZ case 0x2c: // IBLTZ case 0x29: // IBNE - branch = 1; + g_branch = 1; break; case 0x14: // fseq @@ -1203,7 +1203,7 @@ // second full pass pc = startpc; - branch = 0; + g_branch = 0; VuInstruction* pprevinst = NULL, *pinst = NULL; while (1) @@ -1211,17 +1211,17 @@ if (pc == s_MemSize[s_vu]) { - branch |= 8; + g_branch |= 8; break; } - if (!branch && pbh->pblock != NULL) + if (!g_branch && pbh->pblock != NULL) { pblock->blocks.push_back(pbh->pblock); break; } - int prevbranch = branch; + int prevbranch = g_branch; if (!prevbranch) { @@ -1378,7 +1378,7 @@ pblock->cycles = vucycle; #ifdef SUPERVU_WRITEBACKS - if (!branch || (branch&8)) + if (!g_branch || (g_branch&8)) #endif { // flush writebacks @@ -1401,9 +1401,9 @@ } } - if (!branch) return pblock; + if (!g_branch) return pblock; - if (branch & 8) + if (g_branch & 8) { // what if also a jump? pblock->type |= BLOCKTYPE_EOP | BLOCKTYPE_HASEOP; @@ -2855,12 +2855,12 @@ if (incstack) { - u8* ptr = JB8(0); + u8* jptr = JB8(0); ADD32ItoR(ESP, incstack); //CALLFunc((u32)timeout); JMP32((uptr)SuperVUEndProgram - ((uptr)x86Ptr + 5)); - x86SetJ8(ptr); + x86SetJ8(jptr); } else JAE32((uptr)SuperVUEndProgram - ((uptr)x86Ptr + 6)); } @@ -2897,7 +2897,7 @@ s_pCurBlock = this; s_needFlush = 3; pc = startpc; - branch = 0; + g_branch = 0; s_recWriteQ = s_recWriteP = 0; s_XGKICKReg = -1; s_ScheduleXGKICK = 0; @@ -2993,7 +2993,7 @@ AND32ItoM((uptr)&VU0.VI[ REG_VPU_STAT ].UL, s_vu ? ~0x100 : ~0x001); // E flag //AND32ItoM((uptr)&VU->GetVifRegs().stat, ~VIF1_STAT_VEW); - if (!branch) MOV32ItoM((uptr)&VU->VI[REG_TPC], endpc); + if (!g_branch) MOV32ItoM((uptr)&VU->VI[REG_TPC], endpc); JMP32((uptr)SuperVUEndProgram - ((uptr)x86Ptr + 5)); } @@ -3034,7 +3034,7 @@ // get rid of any writes, otherwise _freeX86regs will write x86regs[s_JumpX86].mode &= ~MODE_WRITE; - if (branch == 1) + if (g_branch == 1) { if (!x86regs[s_JumpX86].inuse) { @@ -3106,7 +3106,7 @@ // store the last block executed MOV32ItoM((uptr)&g_nLastBlockExecuted, s_pCurBlock->startpc); - switch (branch) + switch (g_branch) { case 1: // branch, esi has new prog @@ -3151,7 +3151,7 @@ break; default: - DevCon.Error("Bad branch %x\n", branch); + DevCon.Error("Bad branch %x\n", g_branch); pxAssert(0); break; } @@ -3266,19 +3266,19 @@ { //static PCSX2_ALIGNED16(VECTOR _VF); //static PCSX2_ALIGNED16(VECTOR _VFc); - u32 *ptr; + u32 *code_ptr; u8* pjmp; int vfregstore = 0; pxAssert(s_pCurInst == this); s_WriteToReadQ = 0; - ptr = (u32*) & VU->Micro[ pc ]; + code_ptr = (u32*) & VU->Micro[ pc ]; if (type & INST_Q_READ) - SuperVUFlush(0, (ptr[0] == 0x800003bf) || !!(regs[0].VIwrite & (1 << REG_Q))); + SuperVUFlush(0, (code_ptr[0] == 0x800003bf) || !!(regs[0].VIwrite & (1 << REG_Q))); if (type & INST_P_READ) - SuperVUFlush(1, (ptr[0] == 0x800007bf) || !!(regs[0].VIwrite & (1 << REG_P))); + SuperVUFlush(1, (code_ptr[0] == 0x800007bf) || !!(regs[0].VIwrite & (1 << REG_P))); if (type & INST_DUMMY) { @@ -3590,43 +3590,43 @@ } #endif - if (s_vu == 0 && (ptr[1] & 0x20000000)) // M flag + if (s_vu == 0 && (code_ptr[1] & 0x20000000)) // M flag { OR8ItoM((uptr)&VU->flags, VUFLAG_MFLAGSET); } - if (ptr[1] & 0x10000000) // D flag + if (code_ptr[1] & 0x10000000) // D flag { TEST32ItoM((uptr)&VU0.VI[REG_FBRST].UL, s_vu ? 0x400 : 0x004); - u8* ptr = JZ8(0); + u8* jptr = JZ8(0); OR32ItoM((uptr)&VU0.VI[REG_VPU_STAT].UL, s_vu ? 0x200 : 0x002); xMOV( ecx, s_vu ? INTC_VU1 : INTC_VU0 ); xCALL( hwIntcIrq ); - x86SetJ8(ptr); + x86SetJ8(jptr); } - if (ptr[1] & 0x08000000) // T flag + if (code_ptr[1] & 0x08000000) // T flag { TEST32ItoM((uptr)&VU0.VI[REG_FBRST].UL, s_vu ? 0x800 : 0x008); - u8* ptr = JZ8(0); + u8* jptr = JZ8(0); OR32ItoM((uptr)&VU0.VI[REG_VPU_STAT].UL, s_vu ? 0x400 : 0x004); xMOV( ecx, s_vu ? INTC_VU1 : INTC_VU0 ); xCALL( hwIntcIrq ); - x86SetJ8(ptr); + x86SetJ8(jptr); } // check upper flags - if (ptr[1] & 0x80000000) // I flag + if (code_ptr[1] & 0x80000000) // I flag { pxAssert(!(regs[0].VIwrite & ((1 << REG_Q) | (1 << REG_P)))); - VU->code = ptr[1]; + VU->code = code_ptr[1]; s_vuInfo = SetCachedRegs(1, vuxyz); if (s_JumpX86 > 0) x86regs[s_JumpX86].needed = 1; if (s_ScheduleXGKICK && s_XGKICKReg > 0) x86regs[s_XGKICKReg].needed = 1; recVU_UPPER_OPCODE[ VU->code & 0x3f ](VU, s_vuInfo); - s_PrevIWrite = (uptr)ptr; + s_PrevIWrite = (uptr)code_ptr; _clearNeededXMMregs(); _clearNeededX86regs(); } @@ -3639,7 +3639,7 @@ itinst2 = itinst; ++itinst2; u32 cacheq = (itinst2 == s_pCurBlock->insts.end()); - u32* codeptr2 = ptr + 2; + u32* codeptr2 = code_ptr + 2; while (itinst2 != s_pCurBlock->insts.end()) { @@ -3758,9 +3758,9 @@ } // waitq - if (ptr[0] == 0x800003bf) SuperVUFlush(0, 1); + if (code_ptr[0] == 0x800003bf) SuperVUFlush(0, 1); // waitp - if (ptr[0] == 0x800007bf) SuperVUFlush(1, 1); + if (code_ptr[0] == 0x800007bf) SuperVUFlush(1, 1); #ifdef PCSX2_DEVBUILD if (regs[1].VIread & regs[0].VIwrite & ~((1 << REG_Q) | (1 << REG_P) | (1 << REG_VF0_FLAG) | (1 << REG_ACC_FLAG))) @@ -3773,7 +3773,7 @@ if (vfwrite[1] >= 0 && xmmregs[vfwrite[1]].inuse && xmmregs[vfwrite[1]].type == XMMTYPE_VFREG && xmmregs[vfwrite[1]].reg == regs[1].VFwrite) modewrite = xmmregs[vfwrite[1]].mode & MODE_WRITE; - VU->code = ptr[1]; + VU->code = code_ptr[1]; s_vuInfo = SetCachedRegs(1, vuxyz); if (vfwrite[1] >= 0) @@ -3811,7 +3811,7 @@ s_PrevStatusWrite = pStatusWrite; } - VU->code = ptr[0]; + VU->code = code_ptr[0]; s_vuInfo = SetCachedRegs(0, vuxyz); if (vfregstore) @@ -3925,14 +3925,14 @@ if (s_pCurInst->type & INST_BRANCH_DELAY) { - pxAssert((branch&0x17) != 0x10 && (branch&0x17) != 4); // no jump handlig for now + pxAssert((g_branch&0x17) != 0x10 && (g_branch&0x17) != 4); // no jump handlig for now - if ((branch & 0x7) == 3) + if ((g_branch & 0x7) == 3) { // previous was a direct jump curjump = 1; } - else if (branch & 1) curjump = 2; + else if (g_branch & 1) curjump = 2; } pxAssert(s_JumpX86 > 0); @@ -3957,7 +3957,7 @@ else x86SetJ8(j8Ptr[ 0 ]); - branch |= 1; + g_branch |= 1; } // supervu specific insts @@ -4220,7 +4220,7 @@ s_UnconditionalDelay = 1; } - branch |= 3; + g_branch |= 3; } void recVUMI_BAL(VURegs* vuu, s32 info) @@ -4249,7 +4249,7 @@ s_UnconditionalDelay = 1; } - branch |= 3; + g_branch |= 3; } void recVUMI_JR(VURegs* vuu, s32 info) @@ -4270,7 +4270,7 @@ PUSH32I(s_vu); PUSH32R(EAX); } - branch |= 0x10; // 0x08 is reserved + g_branch |= 0x10; // 0x08 is reserved } void recVUMI_JALR(VURegs* vuu, s32 info) @@ -4300,7 +4300,7 @@ PUSH32R(EAX); } - branch |= 4; + g_branch |= 4; } void recVUMI_XGKICK_(VURegs *VU) diff -Nru pcsx2-1.3.1+dfsg/pcsx2/ZipTools/ThreadedZipTools.h pcsx2-1.4.0/pcsx2/ZipTools/ThreadedZipTools.h --- pcsx2-1.3.1+dfsg/pcsx2/ZipTools/ThreadedZipTools.h 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/ZipTools/ThreadedZipTools.h 2016-01-05 17:28:08.000000000 +0000 @@ -198,6 +198,8 @@ protected: BaseCompressThread() { + m_gzfp = NULL; + m_src_list = NULL; m_PendingSaveFlag = false; } diff -Nru pcsx2-1.3.1+dfsg/pcsx2/ZipTools/thread_gzip.cpp pcsx2-1.4.0/pcsx2/ZipTools/thread_gzip.cpp --- pcsx2-1.3.1+dfsg/pcsx2/ZipTools/thread_gzip.cpp 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/pcsx2/ZipTools/thread_gzip.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -24,12 +24,15 @@ BaseCompressThread::~BaseCompressThread() throw() { - _parent::Cancel(); - if( m_PendingSaveFlag ) - { - wxGetApp().ClearPendingSave(); - m_PendingSaveFlag = false; + try { + _parent::Cancel(); + if( m_PendingSaveFlag ) + { + wxGetApp().ClearPendingSave(); + m_PendingSaveFlag = false; + } } + DESTRUCTOR_CATCHALL } void BaseCompressThread::SetPendingSave() diff -Nru pcsx2-1.3.1+dfsg/pcsx2_suite_2010.sln pcsx2-1.4.0/pcsx2_suite_2010.sln --- pcsx2-1.3.1+dfsg/pcsx2_suite_2010.sln 2014-08-17 12:20:52.000000000 +0000 +++ pcsx2-1.4.0/pcsx2_suite_2010.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,1029 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nulls", "Nulls", "{E1828E40-2FBB-48FE-AE7F-5587755DCE0E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" - ProjectSection(SolutionItems) = preProject - 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" - ProjectSection(SolutionItems) = preProject - common\svn_readme.txt = common\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" - ProjectSection(SolutionItems) = preProject - common\include\afxresmw.h = common\include\afxresmw.h - common\include\intrin_x86.h = common\include\intrin_x86.h - common\include\Pcsx2Api.h = common\include\Pcsx2Api.h - common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h - common\include\Pcsx2Types.h = common\include\Pcsx2Types.h - common\include\PluginCallbacks.h = common\include\PluginCallbacks.h - common\include\PS2Etypes.h = common\include\PS2Etypes.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" - ProjectSection(SolutionItems) = preProject - common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{2D6F0A62-A247-4CCF-947F-FCD54BE16103}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcsx2", "pcsx2\windows\VCprojects\pcsx2.vcxproj", "{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPU2-X", "plugins\spu2-x\src\Windows\Spu2-X.vcxproj", "{5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSdx", "plugins\GSdx\GSdx.vcxproj", "{18E42F6F-3A62-41EE-B42F-79366C4F1E95}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LilyPad", "plugins\LilyPad\LilyPad.vcxproj", "{E4081455-398C-4610-A87C-90A8A7D72DC3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads.v4", "3rdparty\w32pthreads\pthreads.vcxproj", "{26511268-2902-4997-8421-ECD7055F9E28}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpad", "plugins\xpad\xpad.vcxproj", "{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDnull", "plugins\CDVDnull\Windows\CDVDnull.vcxproj", "{F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBnull", "plugins\USBnull\Windows\USBnull.vcxproj", "{BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FWnull", "plugins\FWnull\Windows\FWnull.vcxproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9null", "plugins\dev9null\Windows\DEV9null.vcxproj", "{04439C5F-05FB-4A9C-AAD1-5388C25377DB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "3rdparty\wxWidgets\build\msw\wx_base.vcxproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "3rdparty\wxWidgets\build\msw\wx_core.vcxproj", "{0318BA30-EF48-441A-9E10-DC85EFAE39F0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig28", "3rdparty\wxWidgets\build\msw\wx_config.vcxproj", "{C34487AF-228A-4D11-8E50-27803DF76873}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x86emitter", "common\build\x86emitter\x86emitter.vcxproj", "{A51123F5-9505-4EAE-85E7-D320290A272C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "3rdparty\wxWidgets\build\msw\wx_adv.vcxproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin2cpp", "tools\bin2cpp\bin2c.vcxproj", "{677B7D11-D5E1-40B3-88B1-9A4DF83D2213}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads_lib", "3rdparty\w32pthreads\pthreads_lib.vcxproj", "{7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdvdGigaherz", "plugins\cdvdGigaherz\src\Windows\cdvdGigaherz.vcxproj", "{5CF88D5F-64DD-4EDC-9F1A-436BD502940A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "plugins\GSnull\Windows\GSnull.vcxproj", "{5FCBD521-5A0B-4D97-A823-A97E6BAB9101}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Padnull", "plugins\PadNull\Windows\PadNull.vcxproj", "{6BC4D85D-A399-407E-96A9-CD5416A54269}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "3rdparty\portaudio\build\msvc\portaudio.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9ghzdrk", "plugins\dev9ghzdrk\Win32\DEV9ghzdrk.vcxproj", "{BBE4E5FB-530A-4D18-A633-35AF0577B7F3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experimental", "Experimental", "{7A407562-D70F-4F0A-9D3E-B32506416003}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug AVX|Win32 = Debug AVX|Win32 - Debug AVX|x64 = Debug AVX|x64 - Debug SSE2|Win32 = Debug SSE2|Win32 - Debug SSE2|x64 = Debug SSE2|x64 - Debug SSE4|Win32 = Debug SSE4|Win32 - Debug SSE4|x64 = Debug SSE4|x64 - Debug SSSE3|Win32 = Debug SSSE3|Win32 - Debug SSSE3|x64 = Debug SSSE3|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Devel|Win32 = Devel|Win32 - Devel|x64 = Devel|x64 - Release AVX|Win32 = Release AVX|Win32 - Release AVX|x64 = Release AVX|x64 - Release SSE2|Win32 = Release SSE2|Win32 - Release SSE2|x64 = Release SSE2|x64 - Release SSE4|Win32 = Release SSE4|Win32 - Release SSE4|x64 = Release SSE4|x64 - Release SSSE3|Win32 = Release SSSE3|Win32 - Release SSSE3|x64 = Release SSSE3|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.Build.0 = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|x64.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.Build.0 = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|x64.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|x64.ActiveCfg = Release|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.ActiveCfg = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.Build.0 = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.ActiveCfg = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.Build.0 = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.ActiveCfg = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.Build.0 = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.ActiveCfg = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.Build.0 = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.ActiveCfg = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.Build.0 = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.ActiveCfg = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.Build.0 = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.ActiveCfg = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.Build.0 = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.ActiveCfg = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.Build.0 = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.ActiveCfg = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.Build.0 = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.ActiveCfg = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.Build.0 = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.ActiveCfg = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.Build.0 = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.ActiveCfg = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.Build.0 = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.Build.0 = Release SSE2|x64 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.Build.0 = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.ActiveCfg = Release|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.Build.0 = Release|x64 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.Build.0 = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|x64.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|x64.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.Build.0 = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|x64.ActiveCfg = Release|x64 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.Build.0 = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.Build.0 = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.Build.0 = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|x64.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.Build.0 = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|x64.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.ActiveCfg = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.Build.0 = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.Build.0 = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|x64.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.Build.0 = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|x64.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.Build.0 = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|x64.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|x64.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|x64.ActiveCfg = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E4081455-398C-4610-A87C-90A8A7D72DC3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {26511268-2902-4997-8421-ECD7055F9E28} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {04439C5F-05FB-4A9C-AAD1-5388C25377DB} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {C34487AF-228A-4D11-8E50-27803DF76873} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {A51123F5-9505-4EAE-85E7-D320290A272C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213} = {2D6F0A62-A247-4CCF-947F-FCD54BE16103} - {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {6BC4D85D-A399-407E-96A9-CD5416A54269} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E613DA9F-41B4-4613-9911-E418EF5533BC} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {7A407562-D70F-4F0A-9D3E-B32506416003} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/pcsx2_suite_2012.sln pcsx2-1.4.0/pcsx2_suite_2012.sln --- pcsx2-1.3.1+dfsg/pcsx2_suite_2012.sln 2014-08-17 12:20:52.000000000 +0000 +++ pcsx2-1.4.0/pcsx2_suite_2012.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,1191 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nulls", "Nulls", "{E1828E40-2FBB-48FE-AE7F-5587755DCE0E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" - ProjectSection(SolutionItems) = preProject - 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" - ProjectSection(SolutionItems) = preProject - common\svn_readme.txt = common\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" - ProjectSection(SolutionItems) = preProject - common\include\afxresmw.h = common\include\afxresmw.h - common\include\intrin_x86.h = common\include\intrin_x86.h - common\include\Pcsx2Api.h = common\include\Pcsx2Api.h - common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h - common\include\Pcsx2Types.h = common\include\Pcsx2Types.h - common\include\PluginCallbacks.h = common\include\PluginCallbacks.h - common\include\PS2Etypes.h = common\include\PS2Etypes.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" - ProjectSection(SolutionItems) = preProject - common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{2D6F0A62-A247-4CCF-947F-FCD54BE16103}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcsx2", "pcsx2\windows\VCprojects\pcsx2_vs2012.vcxproj", "{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPU2-X", "plugins\spu2-x\src\Windows\Spu2-X_vs2012.vcxproj", "{5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSdx", "plugins\GSdx\GSdx_vs2012.vcxproj", "{18E42F6F-3A62-41EE-B42F-79366C4F1E95}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch_vs2012.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib_vs2012.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LilyPad", "plugins\LilyPad\LilyPad_vs2012.vcxproj", "{E4081455-398C-4610-A87C-90A8A7D72DC3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads.v4", "3rdparty\w32pthreads\pthreads_vs2012.vcxproj", "{26511268-2902-4997-8421-ECD7055F9E28}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpad", "plugins\xpad\xpad_vs2012.vcxproj", "{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDnull", "plugins\CDVDnull\Windows\CDVDnull_vs2012.vcxproj", "{F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBnull", "plugins\USBnull\Windows\USBnull_vs2012.vcxproj", "{BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FWnull", "plugins\FWnull\Windows\FWnull_vs2012.vcxproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9null", "plugins\dev9null\Windows\DEV9null_vs2012.vcxproj", "{04439C5F-05FB-4A9C-AAD1-5388C25377DB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "3rdparty\wxWidgets\build\msw\wx_base_vs2012.vcxproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "3rdparty\wxWidgets\build\msw\wx_core_vs2012.vcxproj", "{0318BA30-EF48-441A-9E10-DC85EFAE39F0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig28", "3rdparty\wxWidgets\build\msw\wx_config_vs2012.vcxproj", "{C34487AF-228A-4D11-8E50-27803DF76873}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x86emitter", "common\build\x86emitter\x86emitter_vs2012.vcxproj", "{A51123F5-9505-4EAE-85E7-D320290A272C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities_vs2012.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "3rdparty\wxWidgets\build\msw\wx_adv_vs2012.vcxproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin2cpp", "tools\bin2cpp\bin2c_vs2012.vcxproj", "{677B7D11-D5E1-40B3-88B1-9A4DF83D2213}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg_vs2012.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads_lib", "3rdparty\w32pthreads\pthreads_lib_vs2012.vcxproj", "{7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdvdGigaherz", "plugins\cdvdGigaherz\src\Windows\cdvdGigaherz_vs2012.vcxproj", "{5CF88D5F-64DD-4EDC-9F1A-436BD502940A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "plugins\GSnull\Windows\GSnull_vs2012.vcxproj", "{5FCBD521-5A0B-4D97-A823-A97E6BAB9101}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Padnull", "plugins\PadNull\Windows\PadNull_vs2012.vcxproj", "{6BC4D85D-A399-407E-96A9-CD5416A54269}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "3rdparty\portaudio\build\msvc\portaudio_vs2012.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu_vs2012.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9ghzdrk", "plugins\dev9ghzdrk\Win32\DEV9ghzdrk_vs2012.vcxproj", "{BBE4E5FB-530A-4D18-A633-35AF0577B7F3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experimental", "Experimental", "{7A407562-D70F-4F0A-9D3E-B32506416003}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug AVX|Win32 = Debug AVX|Win32 - Debug AVX|x64 = Debug AVX|x64 - Debug AVX2|Win32 = Debug AVX2|Win32 - Debug AVX2|x64 = Debug AVX2|x64 - Debug SSE2|Win32 = Debug SSE2|Win32 - Debug SSE2|x64 = Debug SSE2|x64 - Debug SSE4|Win32 = Debug SSE4|Win32 - Debug SSE4|x64 = Debug SSE4|x64 - Debug SSSE3|Win32 = Debug SSSE3|Win32 - Debug SSSE3|x64 = Debug SSSE3|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Devel|Win32 = Devel|Win32 - Devel|x64 = Devel|x64 - Release AVX|Win32 = Release AVX|Win32 - Release AVX|x64 = Release AVX|x64 - Release AVX2|Win32 = Release AVX2|Win32 - Release AVX2|x64 = Release AVX2|x64 - Release SSE2|Win32 = Release SSE2|Win32 - Release SSE2|x64 = Release SSE2|x64 - Release SSE4|Win32 = Release SSE4|Win32 - Release SSE4|x64 = Release SSE4|x64 - Release SSSE3|Win32 = Release SSSE3|Win32 - Release SSSE3|x64 = Release SSSE3|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.Build.0 = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|x64.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.Build.0 = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|x64.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|x64.ActiveCfg = Release|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.ActiveCfg = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.Build.0 = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.ActiveCfg = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.Build.0 = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|Win32.ActiveCfg = Debug AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|Win32.Build.0 = Debug AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|x64.ActiveCfg = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|x64.Build.0 = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.ActiveCfg = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.Build.0 = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.ActiveCfg = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.Build.0 = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.ActiveCfg = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.Build.0 = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.ActiveCfg = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.Build.0 = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.ActiveCfg = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.Build.0 = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.ActiveCfg = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.Build.0 = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.ActiveCfg = Release AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.Build.0 = Release AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.ActiveCfg = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.Build.0 = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.ActiveCfg = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.Build.0 = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.ActiveCfg = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.Build.0 = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.ActiveCfg = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.Build.0 = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.ActiveCfg = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.Build.0 = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.Build.0 = Release SSE2|x64 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.Build.0 = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.ActiveCfg = Release|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.Build.0 = Release|x64 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.Build.0 = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|x64.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|x64.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.Build.0 = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|x64.ActiveCfg = Release|x64 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.Build.0 = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.Build.0 = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.Build.0 = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|x64.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.Build.0 = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|x64.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.ActiveCfg = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.Build.0 = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.Build.0 = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|x64.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.Build.0 = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|x64.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.Build.0 = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|x64.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|x64.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|x64.ActiveCfg = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E4081455-398C-4610-A87C-90A8A7D72DC3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {26511268-2902-4997-8421-ECD7055F9E28} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {04439C5F-05FB-4A9C-AAD1-5388C25377DB} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {C34487AF-228A-4D11-8E50-27803DF76873} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {A51123F5-9505-4EAE-85E7-D320290A272C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213} = {2D6F0A62-A247-4CCF-947F-FCD54BE16103} - {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {6BC4D85D-A399-407E-96A9-CD5416A54269} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E613DA9F-41B4-4613-9911-E418EF5533BC} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {7A407562-D70F-4F0A-9D3E-B32506416003} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/pcsx2_suite_2013.sln pcsx2-1.4.0/pcsx2_suite_2013.sln --- pcsx2-1.3.1+dfsg/pcsx2_suite_2013.sln 2014-09-19 20:48:11.000000000 +0000 +++ pcsx2-1.4.0/pcsx2_suite_2013.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,1251 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.30825.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nulls", "Nulls", "{E1828E40-2FBB-48FE-AE7F-5587755DCE0E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" - ProjectSection(SolutionItems) = preProject - 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" - ProjectSection(SolutionItems) = preProject - common\svn_readme.txt = common\svn_readme.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" - ProjectSection(SolutionItems) = preProject - common\include\afxresmw.h = common\include\afxresmw.h - common\include\intrin_x86.h = common\include\intrin_x86.h - common\include\Pcsx2Api.h = common\include\Pcsx2Api.h - common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h - common\include\Pcsx2Types.h = common\include\Pcsx2Types.h - common\include\PluginCallbacks.h = common\include\PluginCallbacks.h - common\include\PS2Etypes.h = common\include\PS2Etypes.h - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" - ProjectSection(SolutionItems) = preProject - common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{2D6F0A62-A247-4CCF-947F-FCD54BE16103}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcsx2", "pcsx2\windows\VCprojects\pcsx2_vs2013.vcxproj", "{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPU2-X", "plugins\spu2-x\src\Windows\Spu2-X_vs2013.vcxproj", "{5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSdx", "plugins\GSdx\GSdx_vs2013.vcxproj", "{18E42F6F-3A62-41EE-B42F-79366C4F1E95}" - ProjectSection(ProjectDependencies) = postProject - {D80D4A75-C385-41BD-AE62-83D2E2B595A7} = {D80D4A75-C385-41BD-AE62-83D2E2B595A7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch_vs2013.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib_vs2013.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LilyPad", "plugins\LilyPad\LilyPad_vs2013.vcxproj", "{E4081455-398C-4610-A87C-90A8A7D72DC3}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads.v4", "3rdparty\w32pthreads\pthreads_vs2013.vcxproj", "{26511268-2902-4997-8421-ECD7055F9E28}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpad", "plugins\xpad\xpad_vs2013.vcxproj", "{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDnull", "plugins\CDVDnull\Windows\CDVDnull_vs2013.vcxproj", "{F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBnull", "plugins\USBnull\Windows\USBnull_vs2013.vcxproj", "{BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FWnull", "plugins\FWnull\Windows\FWnull_vs2013.vcxproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9null", "plugins\dev9null\Windows\DEV9null_vs2013.vcxproj", "{04439C5F-05FB-4A9C-AAD1-5388C25377DB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase28", "3rdparty\wxWidgets\build\msw\wx_base_vs2013.vcxproj", "{48AD7E0A-25B1-4974-A1E3-03F8C438D34F}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore28", "3rdparty\wxWidgets\build\msw\wx_core_vs2013.vcxproj", "{0318BA30-EF48-441A-9E10-DC85EFAE39F0}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig28", "3rdparty\wxWidgets\build\msw\wx_config_vs2013.vcxproj", "{C34487AF-228A-4D11-8E50-27803DF76873}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x86emitter", "common\build\x86emitter\x86emitter_vs2013.vcxproj", "{A51123F5-9505-4EAE-85E7-D320290A272C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities_vs2013.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv28", "3rdparty\wxWidgets\build\msw\wx_adv_vs2013.vcxproj", "{0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin2cpp", "tools\bin2cpp\bin2c_vs2013.vcxproj", "{677B7D11-D5E1-40B3-88B1-9A4DF83D2213}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg_vs2013.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "w32pthreads_lib", "3rdparty\w32pthreads\pthreads_lib_vs2013.vcxproj", "{7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdvdGigaherz", "plugins\cdvdGigaherz\src\Windows\cdvdGigaherz_vs2013.vcxproj", "{5CF88D5F-64DD-4EDC-9F1A-436BD502940A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "plugins\GSnull\Windows\GSnull_vs2013.vcxproj", "{5FCBD521-5A0B-4D97-A823-A97E6BAB9101}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Padnull", "plugins\PadNull\Windows\PadNull_vs2013.vcxproj", "{6BC4D85D-A399-407E-96A9-CD5416A54269}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "3rdparty\portaudio\build\msvc\portaudio_vs2013.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu_vs2013.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9ghzdrk", "plugins\dev9ghzdrk\Win32\DEV9ghzdrk_vs2013.vcxproj", "{BBE4E5FB-530A-4D18-A633-35AF0577B7F3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experimental", "Experimental", "{7A407562-D70F-4F0A-9D3E-B32506416003}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencl", "3rdparty\opencl\opencl.vcxproj", "{D80D4A75-C385-41BD-AE62-83D2E2B595A7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug AVX|Win32 = Debug AVX|Win32 - Debug AVX|x64 = Debug AVX|x64 - Debug AVX2|Win32 = Debug AVX2|Win32 - Debug AVX2|x64 = Debug AVX2|x64 - Debug SSE2|Win32 = Debug SSE2|Win32 - Debug SSE2|x64 = Debug SSE2|x64 - Debug SSE4|Win32 = Debug SSE4|Win32 - Debug SSE4|x64 = Debug SSE4|x64 - Debug SSSE3|Win32 = Debug SSSE3|Win32 - Debug SSSE3|x64 = Debug SSSE3|x64 - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Devel|Win32 = Devel|Win32 - Devel|x64 = Devel|x64 - Release AVX|Win32 = Release AVX|Win32 - Release AVX|x64 = Release AVX|x64 - Release AVX2|Win32 = Release AVX2|Win32 - Release AVX2|x64 = Release AVX2|x64 - Release SSE2|Win32 = Release SSE2|Win32 - Release SSE2|x64 = Release SSE2|x64 - Release SSE4|Win32 = Release SSE4|Win32 - Release SSE4|x64 = Release SSE4|x64 - Release SSSE3|Win32 = Release SSSE3|Win32 - Release SSSE3|x64 = Release SSSE3|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.Build.0 = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|x64.ActiveCfg = Debug|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.Build.0 = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|x64.ActiveCfg = Devel|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE2|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.ActiveCfg = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.Build.0 = Release|Win32 - {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.Build.0 = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|x64.ActiveCfg = Debug|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.Build.0 = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|x64.ActiveCfg = Devel|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.ActiveCfg = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.Build.0 = Release|Win32 - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|x64.ActiveCfg = Release|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.ActiveCfg = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|Win32.Build.0 = Debug AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.ActiveCfg = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX|x64.Build.0 = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|Win32.ActiveCfg = Debug AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|Win32.Build.0 = Debug AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|x64.ActiveCfg = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug AVX2|x64.Build.0 = Debug AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE2|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.ActiveCfg = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|Win32.Build.0 = Debug SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.ActiveCfg = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSE4|x64.Build.0 = Debug SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.ActiveCfg = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|Win32.Build.0 = Debug SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.ActiveCfg = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug SSSE3|x64.Build.0 = Debug SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.ActiveCfg = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.Build.0 = Debug SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.ActiveCfg = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.Build.0 = Debug SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.ActiveCfg = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.Build.0 = Release AVX|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.ActiveCfg = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.Build.0 = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.ActiveCfg = Release AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.Build.0 = Release AVX2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.ActiveCfg = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.Build.0 = Release AVX|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE2|x64.Build.0 = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.ActiveCfg = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.Build.0 = Release SSE4|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.ActiveCfg = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.Build.0 = Release SSE4|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.ActiveCfg = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.Build.0 = Release SSSE3|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.ActiveCfg = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.Build.0 = Release SSSE3|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.ActiveCfg = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.Build.0 = Release SSE2|Win32 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.ActiveCfg = Release SSE2|x64 - {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.Build.0 = Release SSE2|x64 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE2|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug AVX2|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE2|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSE4|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug SSSE3|x64.Build.0 = Debug|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.Build.0 = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|x64.ActiveCfg = Debug|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.ActiveCfg = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.Build.0 = Release|Win32 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.ActiveCfg = Release|x64 - {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.Build.0 = Release|x64 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|Win32.Build.0 = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Debug|x64.ActiveCfg = Debug|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|Win32.Build.0 = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Devel|x64.ActiveCfg = Devel|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release AVX2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE2|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSE4|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.ActiveCfg = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|Win32.Build.0 = Release|Win32 - {26511268-2902-4997-8421-ECD7055F9E28}.Release|x64.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.ActiveCfg = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.Build.0 = Debug|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|x64.ActiveCfg = Debug|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE2|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|x64.ActiveCfg = Release|x64 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|Win32.ActiveCfg = Release|Win32 - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|x64.ActiveCfg = Release|x64 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug AVX2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|Win32.ActiveCfg = Release|Win32 - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.Build.0 = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|x64.ActiveCfg = Debug|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|Win32.ActiveCfg = Release|Win32 - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|x64.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.Build.0 = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|x64.ActiveCfg = Debug|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE2|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.Build.0 = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|Win32.ActiveCfg = Release|Win32 - {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|Win32.Build.0 = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Debug|x64.ActiveCfg = Debug|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|Win32.Build.0 = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Devel|x64.ActiveCfg = Devel|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release AVX2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE2|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSE4|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.ActiveCfg = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|Win32.Build.0 = Release|Win32 - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F}.Release|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|Win32.Build.0 = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Debug|x64.ActiveCfg = Debug|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|Win32.Build.0 = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Devel|x64.ActiveCfg = Devel|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.ActiveCfg = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|Win32.Build.0 = Release|Win32 - {0318BA30-EF48-441A-9E10-DC85EFAE39F0}.Release|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|Win32.Build.0 = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Debug|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.ActiveCfg = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|Win32.Build.0 = Devel|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Devel|x64.ActiveCfg = Debug|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release AVX2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE2|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSE4|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.ActiveCfg = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|Win32.Build.0 = Release|Win32 - {C34487AF-228A-4D11-8E50-27803DF76873}.Release|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.Build.0 = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|x64.ActiveCfg = Debug|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.Build.0 = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|x64.ActiveCfg = Devel|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE2|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.ActiveCfg = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.Build.0 = Release|Win32 - {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE2|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|Win32.Build.0 = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Debug|x64.ActiveCfg = Debug|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|Win32.Build.0 = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Devel|x64.ActiveCfg = Devel|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release AVX2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE2|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSE4|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.ActiveCfg = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|Win32.Build.0 = Release|Win32 - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E}.Release|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|x64.ActiveCfg = Debug|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE2|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.ActiveCfg = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.Build.0 = Release|Win32 - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Debug|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 - {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|Win32.Build.0 = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Debug|x64.ActiveCfg = Debug|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|Win32.Build.0 = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Devel|x64.ActiveCfg = Devel|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release AVX2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE2|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSE4|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.ActiveCfg = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|Win32.Build.0 = Release|Win32 - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86}.Release|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.Build.0 = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|x64.ActiveCfg = Debug|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.ActiveCfg = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.Build.0 = Release|Win32 - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.Build.0 = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|x64.ActiveCfg = Debug|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE2|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.Build.0 = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|Win32.ActiveCfg = Release|Win32 - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.Build.0 = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|x64.ActiveCfg = Debug|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE2|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.Build.0 = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|Win32.ActiveCfg = Release|Win32 - {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|x64.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug AVX2|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE2|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSE4|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.ActiveCfg = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug SSSE3|x64.Build.0 = Debug (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.ActiveCfg = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.Build.0 = Debug|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE2|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.ActiveCfg = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.Build.0 = Release (NO ASIO)|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.ActiveCfg = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.Build.0 = Release (NO ASIO)|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release|Win32 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release|x64 - {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release|x64 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE2|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 - {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug AVX2|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE2|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSE4|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug SSSE3|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.Build.0 = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|x64.ActiveCfg = Debug|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE2|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|x64.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.ActiveCfg = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.Build.0 = Release|Win32 - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|x64.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX2|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX2|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX2|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug AVX2|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE2|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE2|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE2|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE2|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE4|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE4|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE4|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSE4|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSSE3|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSSE3|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSSE3|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug SSSE3|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|Win32.ActiveCfg = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|Win32.Build.0 = Debug|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|x64.ActiveCfg = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|x64.Build.0 = Debug|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|x64.Build.0 = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|x64.Build.0 = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE2|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE2|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE2|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE2|x64.Build.0 = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|x64.Build.0 = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|x64.Build.0 = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|Win32.ActiveCfg = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|Win32.Build.0 = Release|Win32 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|x64.ActiveCfg = Release|x64 - {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E4081455-398C-4610-A87C-90A8A7D72DC3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {26511268-2902-4997-8421-ECD7055F9E28} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {04439C5F-05FB-4A9C-AAD1-5388C25377DB} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {48AD7E0A-25B1-4974-A1E3-03F8C438D34F} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {0318BA30-EF48-441A-9E10-DC85EFAE39F0} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {C34487AF-228A-4D11-8E50-27803DF76873} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {A51123F5-9505-4EAE-85E7-D320290A272C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} - {0E231FB1-F3C9-4724-ACCB-DE8BCB3C089E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {677B7D11-D5E1-40B3-88B1-9A4DF83D2213} = {2D6F0A62-A247-4CCF-947F-FCD54BE16103} - {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {7E9B2BE7-CEC3-4F14-847B-0AB8D562FB86} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {6BC4D85D-A399-407E-96A9-CD5416A54269} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} - {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - {E613DA9F-41B4-4613-9911-E418EF5533BC} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {BBE4E5FB-530A-4D18-A633-35AF0577B7F3} = {7A407562-D70F-4F0A-9D3E-B32506416003} - {7A407562-D70F-4F0A-9D3E-B32506416003} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} - {D80D4A75-C385-41BD-AE62-83D2E2B595A7} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/PCSX2_suite.sln pcsx2-1.4.0/PCSX2_suite.sln --- pcsx2-1.3.1+dfsg/PCSX2_suite.sln 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/PCSX2_suite.sln 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,816 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nulls", "Nulls", "{E1828E40-2FBB-48FE-AE7F-5587755DCE0E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{78EBE642-7A4D-4EA7-86BE-5639C6646C38}" + ProjectSection(SolutionItems) = preProject + 3rdparty\svn_readme.txt = 3rdparty\svn_readme.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{703FD00B-D7A0-41E3-BD03-CEC86B385DAF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{88F517F9-CE1C-4005-9BDF-4481FEB55053}" + ProjectSection(SolutionItems) = preProject + common\svn_readme.txt = common\svn_readme.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Include", "Include", "{0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C}" + ProjectSection(SolutionItems) = preProject + common\include\afxresmw.h = common\include\afxresmw.h + common\include\intrin_x86.h = common\include\intrin_x86.h + common\include\Pcsx2Api.h = common\include\Pcsx2Api.h + common\include\Pcsx2Defs.h = common\include\Pcsx2Defs.h + common\include\Pcsx2Types.h = common\include\Pcsx2Types.h + common\include\PluginCallbacks.h = common\include\PluginCallbacks.h + common\include\PS2Etypes.h = common\include\PS2Etypes.h + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx", "wx", "{62BF822E-6A12-49A8-BE8C-C55A9BCA24DA}" + ProjectSection(SolutionItems) = preProject + common\include\wx\folderdesc.txt = common\include\wx\folderdesc.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{2D6F0A62-A247-4CCF-947F-FCD54BE16103}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcsx2", "pcsx2\windows\VCprojects\pcsx2.vcxproj", "{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SPU2-X", "plugins\spu2-x\src\Windows\Spu2-X.vcxproj", "{5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSdx", "plugins\GSdx\GSdx.vcxproj", "{18E42F6F-3A62-41EE-B42F-79366C4F1E95}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SoundTouch", "3rdparty\soundtouch\SoundTouch.vcxproj", "{E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "3rdparty\zlib\zlib.vcxproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LilyPad", "plugins\LilyPad\LilyPad.vcxproj", "{E4081455-398C-4610-A87C-90A8A7D72DC3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xpad", "plugins\xpad\xpad.vcxproj", "{6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CDVDnull", "plugins\CDVDnull\Windows\CDVDnull.vcxproj", "{F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBnull", "plugins\USBnull\Windows\USBnull.vcxproj", "{BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FWnull", "plugins\FWnull\Windows\FWnull.vcxproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9null", "plugins\dev9null\Windows\DEV9null.vcxproj", "{04439C5F-05FB-4A9C-AAD1-5388C25377DB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x86emitter", "common\build\x86emitter\x86emitter.vcxproj", "{A51123F5-9505-4EAE-85E7-D320290A272C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "common\build\Utilities\utilities.vcxproj", "{4639972E-424E-4E13-8B07-CA403C481346}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bin2cpp", "tools\bin2cpp\bin2c.vcxproj", "{677B7D11-D5E1-40B3-88B1-9A4DF83D2213}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg7", "3rdparty\libjpeg\libjpeg.vcxproj", "{BC236261-77E8-4567-8D09-45CD02965EB6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cdvdGigaherz", "plugins\cdvdGigaherz\src\Windows\cdvdGigaherz.vcxproj", "{5CF88D5F-64DD-4EDC-9F1A-436BD502940A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "plugins\GSnull\Windows\GSnull.vcxproj", "{5FCBD521-5A0B-4D97-A823-A97E6BAB9101}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Padnull", "plugins\PadNull\Windows\PadNull.vcxproj", "{6BC4D85D-A399-407E-96A9-CD5416A54269}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portaudio", "3rdparty\portaudio\build\msvc\portaudio.vcxproj", "{0A18A071-125E-442F-AFF7-A3F68ABECF99}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "USBqemu", "plugins\USBqemu\Win32\USBqemu.vcxproj", "{E613DA9F-41B4-4613-9911-E418EF5533BC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DEV9ghzdrk", "plugins\dev9ghzdrk\Win32\DEV9ghzdrk.vcxproj", "{BBE4E5FB-530A-4D18-A633-35AF0577B7F3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Experimental", "Experimental", "{7A407562-D70F-4F0A-9D3E-B32506416003}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opencl", "3rdparty\opencl\opencl.vcxproj", "{D80D4A75-C385-41BD-AE62-83D2E2B595A7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxConfig30", "3rdparty\wxwidgets3.0\build\msw\wx30_config.vcxproj", "{01F4CE10-2CFB-41A8-B41F-E54337868A1D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxBase30", "3rdparty\wxwidgets3.0\build\msw\wx30_base.vcxproj", "{3FCC50C2-81E9-5DB2-B8D8-2129427568B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxAdv30", "3rdparty\wxwidgets3.0\build\msw\wx30_adv.vcxproj", "{24C45343-FD20-5C92-81C1-35A2AE841E79}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxCore30", "3rdparty\wxwidgets3.0\build\msw\wx30_core.vcxproj", "{6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "3rdparty\libpng\projects\vstudio\libpng\libpng.vcxproj", "{D6973076-9317-4EF2-A0B8-B7A18AC0713E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pthreads4w", "3rdparty\pthreads4w\build\pthreads4w.vcxproj", "{0FAE817D-9A32-4830-857E-81DA57246E16}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Devel|Win32 = Devel|Win32 + Devel|x64 = Devel|x64 + Release AVX|Win32 = Release AVX|Win32 + Release AVX|x64 = Release AVX|x64 + Release AVX2|Win32 = Release AVX2|Win32 + Release AVX2|x64 = Release AVX2|x64 + Release SSE4|Win32 = Release SSE4|Win32 + Release SSE4|x64 = Release SSE4|x64 + Release SSSE3|Win32 = Release SSSE3|Win32 + Release SSSE3|x64 = Release SSSE3|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.ActiveCfg = Debug|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|Win32.Build.0 = Debug|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Debug|x64.ActiveCfg = Debug|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.ActiveCfg = Devel|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|Win32.Build.0 = Devel|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Devel|x64.ActiveCfg = Devel|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|Win32.Build.0 = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX|x64.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|Win32.Build.0 = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release AVX2|x64.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|Win32.Build.0 = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSE4|x64.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|Win32.Build.0 = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.ActiveCfg = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|Win32.Build.0 = Release|Win32 + {1CEFD830-2B76-4596-A4EE-BCD7280A60BD}.Release|x64.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.ActiveCfg = Debug|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|Win32.Build.0 = Debug|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Debug|x64.ActiveCfg = Debug|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.ActiveCfg = Devel|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|Win32.Build.0 = Devel|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Devel|x64.ActiveCfg = Devel|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|Win32.Build.0 = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX|x64.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|Win32.Build.0 = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release AVX2|x64.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|Win32.Build.0 = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSE4|x64.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|Win32.Build.0 = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.ActiveCfg = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|Win32.Build.0 = Release|Win32 + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4}.Release|x64.ActiveCfg = Release|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.ActiveCfg = Debug|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|Win32.Build.0 = Debug|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.ActiveCfg = Debug|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Debug|x64.Build.0 = Debug|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.ActiveCfg = Release|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|Win32.Build.0 = Release|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.ActiveCfg = Release|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Devel|x64.Build.0 = Release|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.ActiveCfg = Release AVX|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|Win32.Build.0 = Release AVX|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.ActiveCfg = Release AVX|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX|x64.Build.0 = Release AVX|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.ActiveCfg = Release AVX2|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|Win32.Build.0 = Release AVX2|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.ActiveCfg = Release AVX|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release AVX2|x64.Build.0 = Release AVX|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.ActiveCfg = Release SSE4|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|Win32.Build.0 = Release SSE4|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.ActiveCfg = Release SSE4|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSE4|x64.Build.0 = Release SSE4|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.ActiveCfg = Release SSSE3|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|Win32.Build.0 = Release SSSE3|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.ActiveCfg = Release SSSE3|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release SSSE3|x64.Build.0 = Release SSSE3|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.ActiveCfg = Release|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|Win32.Build.0 = Release|Win32 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.ActiveCfg = Release|x64 + {18E42F6F-3A62-41EE-B42F-79366C4F1E95}.Release|x64.Build.0 = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|Win32.Build.0 = Debug|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.ActiveCfg = Debug|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Debug|x64.Build.0 = Debug|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.ActiveCfg = Devel|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|Win32.Build.0 = Devel|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.ActiveCfg = Devel|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Devel|x64.Build.0 = Devel|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX|x64.Build.0 = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release AVX2|x64.Build.0 = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSE4|x64.Build.0 = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release SSSE3|x64.Build.0 = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.ActiveCfg = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|Win32.Build.0 = Release|Win32 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.ActiveCfg = Release|x64 + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D}.Release|x64.Build.0 = Release|x64 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|x64.ActiveCfg = Debug|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|x64.ActiveCfg = Devel|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX|x64.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release AVX2|x64.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSE4|x64.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|x64.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|Win32.Build.0 = Debug|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|x64.ActiveCfg = Debug|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Debug|x64.Build.0 = Debug|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Devel|x64.Build.0 = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX|x64.Build.0 = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release AVX2|x64.Build.0 = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSE4|x64.Build.0 = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release SSSE3|x64.Build.0 = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.ActiveCfg = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|Win32.Build.0 = Release|Win32 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.ActiveCfg = Release|x64 + {E4081455-398C-4610-A87C-90A8A7D72DC3}.Release|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.ActiveCfg = Debug|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|Win32.Build.0 = Debug|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|x64.ActiveCfg = Debug|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Debug|x64.Build.0 = Debug|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Devel|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release AVX2|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSE4|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release SSSE3|x64.Build.0 = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|Win32.ActiveCfg = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|Win32.Build.0 = Release|Win32 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|x64.ActiveCfg = Release|x64 + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A}.Release|x64.Build.0 = Release|x64 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.ActiveCfg = Debug|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|Win32.Build.0 = Debug|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Debug|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Devel|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release AVX2|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSE4|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|Win32.ActiveCfg = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|Win32.Build.0 = Release|Win32 + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0}.Release|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.ActiveCfg = Debug|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|Win32.Build.0 = Debug|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Debug|x64.ActiveCfg = Debug|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Devel|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release AVX2|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSE4|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|Win32.ActiveCfg = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|Win32.Build.0 = Release|Win32 + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70}.Release|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|x64.ActiveCfg = Debug|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Devel|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release AVX2|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSE4|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.Build.0 = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.ActiveCfg = Debug|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|Win32.Build.0 = Debug|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Debug|x64.ActiveCfg = Debug|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Devel|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release AVX2|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSE4|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|Win32.ActiveCfg = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|Win32.Build.0 = Release|Win32 + {04439C5F-05FB-4A9C-AAD1-5388C25377DB}.Release|x64.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.ActiveCfg = Debug|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|Win32.Build.0 = Debug|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Debug|x64.ActiveCfg = Debug|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.ActiveCfg = Devel|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|Win32.Build.0 = Devel|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Devel|x64.ActiveCfg = Devel|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|Win32.Build.0 = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX|x64.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|Win32.Build.0 = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release AVX2|x64.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|Win32.Build.0 = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSE4|x64.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|Win32.Build.0 = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.ActiveCfg = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|Win32.Build.0 = Release|Win32 + {A51123F5-9505-4EAE-85E7-D320290A272C}.Release|x64.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Debug|x64.ActiveCfg = Debug|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Devel|x64.ActiveCfg = Devel|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX|x64.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release AVX2|x64.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSE4|x64.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 + {4639972E-424E-4E13-8B07-CA403C481346}.Release|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.ActiveCfg = Debug|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|Win32.Build.0 = Debug|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Debug|x64.ActiveCfg = Debug|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Devel|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release AVX2|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSE4|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.ActiveCfg = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|Win32.Build.0 = Release|Win32 + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213}.Release|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.ActiveCfg = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|Win32.Build.0 = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Debug|x64.ActiveCfg = Debug|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.ActiveCfg = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|Win32.Build.0 = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Devel|x64.ActiveCfg = Devel|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release AVX2|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSE4|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.ActiveCfg = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|Win32.Build.0 = Release|Win32 + {BC236261-77E8-4567-8D09-45CD02965EB6}.Release|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|Win32.Build.0 = Debug|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Debug|x64.ActiveCfg = Debug|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Devel|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release AVX2|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSE4|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.ActiveCfg = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|Win32.Build.0 = Release|Win32 + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A}.Release|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.ActiveCfg = Debug|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|Win32.Build.0 = Debug|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Debug|x64.ActiveCfg = Debug|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Devel|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release AVX2|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSE4|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|Win32.ActiveCfg = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|Win32.Build.0 = Release|Win32 + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101}.Release|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.ActiveCfg = Debug|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|Win32.Build.0 = Debug|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Debug|x64.ActiveCfg = Debug|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Devel|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release AVX2|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSE4|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|Win32.ActiveCfg = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|Win32.Build.0 = Release|Win32 + {6BC4D85D-A399-407E-96A9-CD5416A54269}.Release|x64.ActiveCfg = Release|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.ActiveCfg = Debug (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|Win32.Build.0 = Debug (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.ActiveCfg = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Debug|x64.Build.0 = Debug|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Devel|x64.Build.0 = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX|x64.Build.0 = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release AVX2|x64.Build.0 = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSE4|x64.Build.0 = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release SSSE3|x64.Build.0 = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.ActiveCfg = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|Win32.Build.0 = Release (NO ASIO)|Win32 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.ActiveCfg = Release (NO ASIO)|x64 + {0A18A071-125E-442F-AFF7-A3F68ABECF99}.Release|x64.Build.0 = Release (NO ASIO)|x64 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.ActiveCfg = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|Win32.Build.0 = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Debug|x64.ActiveCfg = Debug|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.ActiveCfg = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|Win32.Build.0 = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Devel|x64.ActiveCfg = Devel|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX|x64.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release AVX2|x64.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSE4|x64.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.ActiveCfg = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|Win32.Build.0 = Release|Win32 + {E613DA9F-41B4-4613-9911-E418EF5533BC}.Release|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.ActiveCfg = Debug|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|Win32.Build.0 = Debug|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Debug|x64.ActiveCfg = Debug|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Devel|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release AVX2|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSE4|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.ActiveCfg = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|Win32.Build.0 = Release|Win32 + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3}.Release|x64.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|Win32.ActiveCfg = Debug|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|Win32.Build.0 = Debug|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|x64.ActiveCfg = Debug|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Debug|x64.Build.0 = Debug|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Devel|x64.Build.0 = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX|x64.Build.0 = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release AVX2|x64.Build.0 = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSE4|x64.Build.0 = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release SSSE3|x64.Build.0 = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|Win32.ActiveCfg = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|Win32.Build.0 = Release|Win32 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|x64.ActiveCfg = Release|x64 + {D80D4A75-C385-41BD-AE62-83D2E2B595A7}.Release|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|Win32.ActiveCfg = Debug|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|Win32.Build.0 = Debug|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|x64.ActiveCfg = Debug|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Debug|x64.Build.0 = Debug|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|Win32.ActiveCfg = Devel|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|Win32.Build.0 = Devel|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|x64.ActiveCfg = Devel|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Devel|x64.Build.0 = Devel|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX2|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX2|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release AVX2|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSE4|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSE4|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSE4|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSSE3|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSSE3|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release SSSE3|x64.Build.0 = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|Win32.ActiveCfg = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|Win32.Build.0 = Release|Win32 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|x64.ActiveCfg = Release|x64 + {01F4CE10-2CFB-41A8-B41F-E54337868A1D}.Release|x64.Build.0 = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|Win32.ActiveCfg = Devel|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|Win32.Build.0 = Devel|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|x64.ActiveCfg = Devel|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Devel|x64.Build.0 = Devel|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX|x64.Build.0 = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX2|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX2|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release AVX2|x64.Build.0 = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSE4|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSE4|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSE4|x64.Build.0 = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSSE3|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSSE3|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release SSSE3|x64.Build.0 = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.ActiveCfg = Debug|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|Win32.Build.0 = Debug|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|x64.ActiveCfg = Debug|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Debug|x64.Build.0 = Debug|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Devel|Win32.ActiveCfg = Devel|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Devel|Win32.Build.0 = Devel|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Devel|x64.ActiveCfg = Devel|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Devel|x64.Build.0 = Devel|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX|Win32.ActiveCfg = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX|Win32.Build.0 = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX|x64.ActiveCfg = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX|x64.Build.0 = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX2|Win32.Build.0 = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX2|x64.ActiveCfg = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release AVX2|x64.Build.0 = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSE4|Win32.Build.0 = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSE4|x64.ActiveCfg = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSE4|x64.Build.0 = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSSE3|Win32.Build.0 = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSSE3|x64.ActiveCfg = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release SSSE3|x64.Build.0 = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.ActiveCfg = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|Win32.Build.0 = Release|Win32 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|x64.ActiveCfg = Release|x64 + {24C45343-FD20-5C92-81C1-35A2AE841E79}.Release|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.ActiveCfg = Debug|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|Win32.Build.0 = Debug|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|x64.ActiveCfg = Debug|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Debug|x64.Build.0 = Debug|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|Win32.ActiveCfg = Devel|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|Win32.Build.0 = Devel|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|x64.ActiveCfg = Devel|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Devel|x64.Build.0 = Devel|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX2|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX2|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release AVX2|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSE4|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSE4|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSE4|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSSE3|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSSE3|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release SSSE3|x64.Build.0 = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.ActiveCfg = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|Win32.Build.0 = Release|Win32 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|x64.ActiveCfg = Release|x64 + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75}.Release|x64.Build.0 = Release|x64 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|Win32.ActiveCfg = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|Win32.Build.0 = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Debug|x64.ActiveCfg = Debug|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|Win32.ActiveCfg = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|Win32.Build.0 = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Devel|x64.ActiveCfg = Devel|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX|x64.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX2|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release AVX2|x64.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSE4|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSE4|x64.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSSE3|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release SSSE3|x64.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|Win32.ActiveCfg = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|Win32.Build.0 = Release|Win32 + {D6973076-9317-4EF2-A0B8-B7A18AC0713E}.Release|x64.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|Win32.Build.0 = Debug|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|x64.ActiveCfg = Debug|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Debug|x64.Build.0 = Debug|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|Win32.ActiveCfg = Devel|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|Win32.Build.0 = Devel|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|x64.ActiveCfg = Devel|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Devel|x64.Build.0 = Devel|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX|x64.Build.0 = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX2|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX2|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX2|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release AVX2|x64.Build.0 = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSE4|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSE4|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSE4|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSE4|x64.Build.0 = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSSE3|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSSE3|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSSE3|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release SSSE3|x64.Build.0 = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|Win32.ActiveCfg = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|Win32.Build.0 = Release|Win32 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|x64.ActiveCfg = Release|x64 + {0FAE817D-9A32-4830-857E-81DA57246E16}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} + {62BF822E-6A12-49A8-BE8C-C55A9BCA24DA} = {0FADC26C-0E9D-4DD7-84B1-BF4F7754E90C} + {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {18E42F6F-3A62-41EE-B42F-79366C4F1E95} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {E9B51944-7E6D-4BCD-83F2-7BBD5A46182D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {E4081455-398C-4610-A87C-90A8A7D72DC3} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {6F3C4136-5801-4EBC-AC6E-37DF6FAB150A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {04439C5F-05FB-4A9C-AAD1-5388C25377DB} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {A51123F5-9505-4EAE-85E7-D320290A272C} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} + {4639972E-424E-4E13-8B07-CA403C481346} = {88F517F9-CE1C-4005-9BDF-4481FEB55053} + {677B7D11-D5E1-40B3-88B1-9A4DF83D2213} = {2D6F0A62-A247-4CCF-947F-FCD54BE16103} + {BC236261-77E8-4567-8D09-45CD02965EB6} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {6BC4D85D-A399-407E-96A9-CD5416A54269} = {E1828E40-2FBB-48FE-AE7F-5587755DCE0E} + {0A18A071-125E-442F-AFF7-A3F68ABECF99} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {E613DA9F-41B4-4613-9911-E418EF5533BC} = {7A407562-D70F-4F0A-9D3E-B32506416003} + {BBE4E5FB-530A-4D18-A633-35AF0577B7F3} = {7A407562-D70F-4F0A-9D3E-B32506416003} + {7A407562-D70F-4F0A-9D3E-B32506416003} = {703FD00B-D7A0-41E3-BD03-CEC86B385DAF} + {D80D4A75-C385-41BD-AE62-83D2E2B595A7} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {01F4CE10-2CFB-41A8-B41F-E54337868A1D} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {24C45343-FD20-5C92-81C1-35A2AE841E79} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {6744DAD8-9C70-574A-BFF2-9F8DDDB24A75} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {D6973076-9317-4EF2-A0B8-B7A18AC0713E} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + {0FAE817D-9A32-4830-857E-81DA57246E16} = {78EBE642-7A4D-4EA7-86BE-5639C6646C38} + EndGlobalSection +EndGlobal diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,102 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 184, 77 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "cdvdGigaherz" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,75,59,50,14 + PUSHBUTTON "Cancel",IDCANCEL,129,59,50,14 + COMBOBOX IDC_DRIVE,15,20,160,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Source drive...",IDC_STATIC,7,7,172,48 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 179 + TOPMARGIN, 7 + BOTTOMMARGIN, 73 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Spanish resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.vcxproj pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.vcxproj --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.vcxproj 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -20,12 +20,14 @@ DynamicLibrary false MultiByte + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte true + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - cdvdGigaherz - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} - cdvdGigaherz - - - - DynamicLibrary - false - MultiByte - v110_xp - - - DynamicLibrary - false - MultiByte - true - v110_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/cdvdGigaherz.tlb - - - - - %(AdditionalIncludeDirectories) - - - - - NDEBUG;%(PreprocessorDefinitions) - - - %(AdditionalDependencies) - .\plugin.def - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/cdvdGigaherz.tlb - - - - - %(AdditionalIncludeDirectories) - - - _DEBUG;%(PreprocessorDefinitions) - - - $(OutDir)$(TargetName)$(TargetExt) - RequireAdministrator - .\plugin.def - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ - - - - - {c03fe088-95f7-4235-a796-5fe044914fb5} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {1dc55077-7d7a-4951-8841-26d21ff1513b} - - - {6c12b075-7b05-42ce-8628-c668f325f4ce} - h;hpp;hxx;hm;inl - - - {48ccf9e7-ebd6-41ff-bf33-0e964046bb00} - - - {a80698fd-3734-41c4-b7e8-6b96b34633e0} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Reader Modules - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\rosddk - - - Header Files\rosddk - - - Header Files\rosddk - - - Header Files\rosddk - - - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - cdvdGigaherz - {5CF88D5F-64DD-4EDC-9F1A-436BD502940A} - cdvdGigaherz - - - - DynamicLibrary - false - MultiByte - v120_xp - - - DynamicLibrary - false - MultiByte - true - v120_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/cdvdGigaherz.tlb - - - - - %(AdditionalIncludeDirectories) - - - - - NDEBUG;%(PreprocessorDefinitions) - - - %(AdditionalDependencies) - .\plugin.def - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/cdvdGigaherz.tlb - - - - - %(AdditionalIncludeDirectories) - - - _DEBUG;%(PreprocessorDefinitions) - - - $(OutDir)$(TargetName)$(TargetExt) - RequireAdministrator - .\plugin.def - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/cdvdGigaherz_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ - - - - - {c03fe088-95f7-4235-a796-5fe044914fb5} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {1dc55077-7d7a-4951-8841-26d21ff1513b} - - - {6c12b075-7b05-42ce-8628-c668f325f4ce} - h;hpp;hxx;hm;inl - - - {48ccf9e7-ebd6-41ff-bf33-0e964046bb00} - - - {a80698fd-3734-41c4-b7e8-6b96b34633e0} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files\Reader Modules - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\rosddk - - - Header Files\rosddk - - - Header Files\rosddk - - - Header Files\rosddk - - - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/resource.h pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/cdvdGigaherz/src/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/cdvdGigaherz/src/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,42 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by cdvd.rc +// + +#ifndef IDC_STATIC +#define IDC_STATIC -1 +#endif + +#define IDD_CONFIG 101 +#define IDC_PLUGINS 1000 +#define IDC_CONFIGURE 1001 +#define IDC_TEST 1002 +#define IDC_ABOUT 1003 +#define IDC_IMAGE_BROWSE 1004 +#define IDC_USEISO 1005 +#define IDC_NOCD 1006 +#define IDC_PLUGIN 1007 +#define IDC_IMAGE 1008 +#define IDC_IMAGE_FILE 1009 +#define IDC_NOSUB 1010 +#define IDC_FAKE 1011 +#define IDC_SAME 1012 +#define IDC_DRIVE 1012 +#define IDC_SUB_FILE 1014 +#define IDC_ABOUT3 1015 +#define IDC_SUB_BROWSE 1015 +#define IDC_FILE 1016 +#define IDC_NODUMP 1020 +#define IDC_DUMP_ISO 1021 +#define IDC_DUMP_BDV2 1022 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1011 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/CDVD.h pcsx2-1.4.0/plugins/CDVDnull/CDVD.h --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/CDVD.h 2012-06-18 21:16:25.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/CDVD.h 2016-01-05 17:28:08.000000000 +0000 @@ -39,7 +39,7 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif extern const unsigned char version; diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/CMakeLists.txt pcsx2-1.4.0/plugins/CDVDnull/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output CDVDnull) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(CDVDnullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(CDVDnullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(CDVDnullFinalFlags ${OptimizationFlags}) - -endif() +set(CDVDnullFinalFlags "") # CDVDnull sources set(CDVDnullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/ReadMe.txt pcsx2-1.4.0/plugins/CDVDnull/ReadMe.txt --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/ReadMe.txt 2009-02-06 19:43:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/ReadMe.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,39 +1,39 @@ -CDVDnull v0.6 ---------------- - - This is an extension to use with playstation2 emulators - as PCSX2 (only one right now). - The plugin is free open source code. - -Using: ------ - Place the file "CDVDnull.dll" at the Plugins directory - of the Emulator to use it. - -Changes: -------- - v0.6: - * added vsnet2003 project files. - * added support for functions in new plugin version - - v0.5: - * added vsnet2005beta1 project files. 64bit plugin should be okay now (Not tested!) - - v0.4: - * updated to 0.4.3 specifications - - v0.3: - * updated to 0.4.0 specifications - - v0.2: - * add the 0.2.9 specifications - * CDVDopen refixed - - v0.1: - * First Release - * Tested with Pcsx2 - -Authors: -------- - - +CDVDnull v0.6 +--------------- + + This is an extension to use with playstation2 emulators + as PCSX2 (only one right now). + The plugin is free open source code. + +Using: +----- + Place the file "CDVDnull.dll" at the Plugins directory + of the Emulator to use it. + +Changes: +------- + v0.6: + * added vsnet2003 project files. + * added support for functions in new plugin version + + v0.5: + * added vsnet2005beta1 project files. 64bit plugin should be okay now (Not tested!) + + v0.4: + * updated to 0.4.3 specifications + + v0.3: + * updated to 0.4.0 specifications + + v0.2: + * add the 0.2.9 specifications + * CDVDopen refixed + + v0.1: + * First Release + * Tested with Pcsx2 + +Authors: +------- + + diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull.def pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull.def --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull.def 2010-05-18 02:59:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,29 +1,29 @@ -; CDVDnull.def : Declares the module parameters for the DLL. - -;LIBRARY "CDVDnull" -;DESCRIPTION 'CDVD Null Driver' - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - CDVDinit @5 - CDVDshutdown @6 - CDVDopen @7 - CDVDclose @8 - CDVDreadTrack @9 - CDVDgetBuffer @10 - CDVDreadSubQ @11 - CDVDgetTN @12 - CDVDgetTD @13 - CDVDgetTOC @14 - CDVDgetDiskType @15 - CDVDgetTrayStatus @16 - CDVDctrlTrayOpen @17 - CDVDctrlTrayClose @18 - - CDVDconfigure @19 - CDVDtest @20 - CDVDabout @21 - +; CDVDnull.def : Declares the module parameters for the DLL. + +;LIBRARY "CDVDnull" +;DESCRIPTION 'CDVD Null Driver' + +EXPORTS + ; Explicit exports can go here + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + CDVDinit @5 + CDVDshutdown @6 + CDVDopen @7 + CDVDclose @8 + CDVDreadTrack @9 + CDVDgetBuffer @10 + CDVDreadSubQ @11 + CDVDgetTN @12 + CDVDgetTD @13 + CDVDgetTOC @14 + CDVDgetDiskType @15 + CDVDgetTrayStatus @16 + CDVDctrlTrayOpen @17 + CDVDctrlTrayClose @18 + + CDVDconfigure @19 + CDVDtest @20 + CDVDabout @21 + diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull.vcxproj pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull.vcxproj --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull.vcxproj 2010-04-15 22:18:32.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,10 @@  - + + + Debug + Win32 + Release Win32 @@ -16,6 +20,12 @@ DynamicLibrary MultiByte true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp @@ -27,6 +37,14 @@ + + + + + + + + <_ProjectFileVersion>10.0.30319.1 @@ -57,6 +75,16 @@ + + + _USRDLL;CDVDNULL_EXPORTS;%(PreprocessorDefinitions) + + + CDVDnull.def + false + + + diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ - - - - - Release - Win32 - - - - CDVDnull - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} - CDVDnull - - - - DynamicLibrary - MultiByte - true - v110_xp - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - NDEBUG;_USRDLL;CDVDNULL_EXPORTS;%(PreprocessorDefinitions) - Level3 - - - NDEBUG;%(PreprocessorDefinitions) - 0x2c0a - - - /MACHINE:I386 %(AdditionalOptions) - odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - true - .\CDVDnull.def - false - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - - {4a528d75-fc57-4a25-8f63-9efd961ebaac} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - - - Source Files - - - - - Source Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ - - - - - Release - Win32 - - - - CDVDnull - {F38D9DF0-F68D-49D9-B3A0-932E74FB74A0} - CDVDnull - - - - DynamicLibrary - MultiByte - true - v120_xp - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - NDEBUG;_USRDLL;CDVDNULL_EXPORTS;%(PreprocessorDefinitions) - Level3 - - - NDEBUG;%(PreprocessorDefinitions) - 0x2c0a - - - /MACHINE:I386 %(AdditionalOptions) - odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - true - .\CDVDnull.def - false - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/CDVDnull_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - - {4a528d75-fc57-4a25-8f63-9efd961ebaac} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - - - Source Files - - - - - Source Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/plugin.def pcsx2-1.4.0/plugins/CDVDnull/Windows/plugin.def --- pcsx2-1.3.1+dfsg/plugins/CDVDnull/Windows/plugin.def 2009-05-02 04:12:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/CDVDnull/Windows/plugin.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,21 +1,21 @@ -EXPORTS - PS2EgetLibType = PS2EgetLibType@0 @2 - PS2EgetLibName = PS2EgetLibName@0 @3 - PS2EgetLibVersion2 = PS2EgetLibVersion2@4 @4 - CDVDinit = CDVDinit@0 @5 - CDVDshutdown = CDVDshutdown@0 @6 - CDVDopen = CDVDopen@0 @7 - CDVDclose = CDVDclose@0 @8 - CDVDreadTrack = CDVDreadTrack@8 @9 - CDVDgetBuffer = CDVDgetBuffer@0 @10 - CDVDreadSubQ = CDVDreadSubQ@8 @11 - CDVDgetTN = CDVDgetTN@4 @12 - CDVDgetTD = CDVDgetTD@8 @13 - CDVDgetTOC = CDVDgetTOC@4 @14 - CDVDgetDiskType = CDVDgetDiskType@0 @15 - CDVDgetTrayStatus = CDVDgetTrayStatus@0 @16 - CDVDctrlTrayOpen = CDVDctrlTrayOpen@0 @17 - CDVDctrlTrayClose = CDVDctrlTrayClose@0 @18 - CDVDconfigure = CDVDconfigure@0 @19 - CDVDtest = CDVDtest@0 @20 - CDVDabout = CDVDabout@0 @21 +EXPORTS + PS2EgetLibType = PS2EgetLibType@0 @2 + PS2EgetLibName = PS2EgetLibName@0 @3 + PS2EgetLibVersion2 = PS2EgetLibVersion2@4 @4 + CDVDinit = CDVDinit@0 @5 + CDVDshutdown = CDVDshutdown@0 @6 + CDVDopen = CDVDopen@0 @7 + CDVDclose = CDVDclose@0 @8 + CDVDreadTrack = CDVDreadTrack@8 @9 + CDVDgetBuffer = CDVDgetBuffer@0 @10 + CDVDreadSubQ = CDVDreadSubQ@8 @11 + CDVDgetTN = CDVDgetTN@4 @12 + CDVDgetTD = CDVDgetTD@8 @13 + CDVDgetTOC = CDVDgetTOC@4 @14 + CDVDgetDiskType = CDVDgetDiskType@0 @15 + CDVDgetTrayStatus = CDVDgetTrayStatus@0 @16 + CDVDctrlTrayOpen = CDVDctrlTrayOpen@0 @17 + CDVDctrlTrayClose = CDVDctrlTrayClose@0 @18 + CDVDconfigure = CDVDconfigure@0 @19 + CDVDtest = CDVDtest@0 @20 + CDVDabout = CDVDabout@0 @21 diff -Nru pcsx2-1.3.1+dfsg/plugins/CMakeLists.txt pcsx2-1.4.0/plugins/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/CMakeLists.txt 2014-12-14 13:00:20.000000000 +0000 +++ pcsx2-1.4.0/plugins/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -6,123 +6,99 @@ endif() -# make cdvdGigaherz #if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/cdvdGigaherz" AND cdvdGigaherz) # add_subdirectory(cdvdGigaherz) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/cdvdGigaherz" AND cdvdGigaherz) +#endif() -# make CDVDiso if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDiso" AND CDVDiso) add_subdirectory(CDVDiso/src) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDiso" AND CDVDiso) +endif() -# make CDVDisoEFP # if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDisoEFP" AND CDVDisoEFP) # add_subdirectory(CDVDisoEFP) -# endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDisoEFP" AND CDVDisoEFP) +# endif() -# make CDVDlinuz if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDlinuz" AND CDVDlinuz) add_subdirectory(CDVDlinuz/Src) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDlinuz" AND CDVDlinuz) +endif() -# make CDVDnull if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDnull" AND CDVDnull) add_subdirectory(CDVDnull) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDnull" AND CDVDnull) +endif() -# make CDVDolio # if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDolio" AND CDVDolio) # add_subdirectory(CDVDolio) -# endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDolio" AND CDVDolio) +# endif() -# make CDVDpeops #if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDpeops" AND CDVDpeops) # add_subdirectory(CDVDpeops) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/CDVDpeops" AND CDVDpeops) +#endif() -# make dev9null if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/dev9null" AND dev9null) add_subdirectory(dev9null) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/dev9null" AND dev9null) +endif() -# make FWnull if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/FWnull" AND FWnull) add_subdirectory(FWnull) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/FWnull" AND FWnull) +endif() -# make GSdx if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSdx" AND GSdx) add_subdirectory(GSdx) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSdx" AND GSdx) +endif() -# make GSnull if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSnull" AND GSnull) add_subdirectory(GSnull) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/GSnull" AND GSnull) +endif() -# make LilyPad -#if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/LilyPad" AND LilyPad) -# add_subdirectory(LilyPad) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/LilyPad" AND LilyPad) +if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/LilyPad" AND LilyPad) + add_subdirectory(LilyPad) +endif() -# make onepad if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/onepad" AND onepad) add_subdirectory(onepad) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/onepad" AND onepad) +endif() -# make PadNull if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/PadNull" AND PadNull) add_subdirectory(PadNull) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/PadNull" AND PadNull) +endif() -# make PeopsSPU2 # if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/PeopsSPU2" AND PeopsSPU2) # add_subdirectory(PeopsSPU2) -# endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/PeopsSPU2" AND PeopsSPU2) +# endif() -# make SPU2null if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/SPU2null" AND SPU2null) add_subdirectory(SPU2null) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/SPU2null" AND SPU2null) +endif() -# make spu2-x if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/spu2-x" AND spu2-x) add_subdirectory(spu2-x/src) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/spu2-x" AND spu2-x) +endif() -# make SSSPSXPAD #if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/SSSPSXPAD" AND SSSPSXPAD) # add_subdirectory(SSSPSXPAD) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/SSSPSXPAD" AND SSSPSXPAD) +#endif() -# make USBnull if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/USBnull" AND USBnull) add_subdirectory(USBnull) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/USBnull" AND USBnull) +endif() -# make xpad #if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/xpad" AND xpad) # add_subdirectory(xpad) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/xpad" AND xpad) +#endif() -# make zerogs #if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerogs" AND zerogs) # add_subdirectory(zerogs) -#endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerogs" AND zerogs) +#endif() -# make zzogl-pg if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg" AND zzogl) add_subdirectory(zzogl-pg/opengl) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg" AND zzogl) +endif() -# make zeropad if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zeropad" AND zeropad) add_subdirectory(zeropad) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zeropad" AND zeropad) +endif() -# make zerospu2 if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerospu2" AND zerospu2) add_subdirectory(zerospu2) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zerospu2" AND zerospu2) +endif() diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/CMakeLists.txt pcsx2-1.4.0/plugins/dev9null/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/dev9null/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output dev9null-0.5.0) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(dev9nullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(dev9nullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(dev9nullFinalFlags ${OptimizationFlags}) - -endif() +set(dev9nullFinalFlags "") # dev9null sources set(dev9nullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/ReadMe.txt pcsx2-1.4.0/plugins/dev9null/ReadMe.txt --- pcsx2-1.3.1+dfsg/plugins/dev9null/ReadMe.txt 2010-01-09 02:14:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/ReadMe.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,36 +1,36 @@ -DEV9null v0.3 -------------- - - This is an extension to use with play station2 emulators - as PCSX2 (only one right now). - The plugin is free open source code. - -Usage: ------ - Place the file "libDEV9null.so" (linux) or "DEV9null.dll" (win32) - at the Plugin directory of the Emulator to use it. - -Changes: +DEV9null v0.3 +------------- + + This is an extension to use with play station2 emulators + as PCSX2 (only one right now). + The plugin is free open source code. + +Usage: +----- + Place the file "libDEV9null.so" (linux) or "DEV9null.dll" (win32) + at the Plugin directory of the Emulator to use it. + +Changes: ------- v0.5: *Converted over to use the "PS2Eext.h" file. v0.4: - *Mass plugin cleanup. - v0.3: -*added vsnet2005beta1 project files. 64bit dll should work now (not tested!) - - v0.2: - *updated the specifications to 0.4.7 - - v0.1: - * First Release - * Tested with Pcsx2 - -Authors: -------- - - linuzappz - shadow - - - + *Mass plugin cleanup. + v0.3: +*added vsnet2005beta1 project files. 64bit dll should work now (not tested!) + + v0.2: + *updated the specifications to 0.4.7 + + v0.1: + * First Release + * Tested with Pcsx2 + +Authors: +------- + + linuzappz + shadow + + + diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/dev9null.def pcsx2-1.4.0/plugins/dev9null/Windows/dev9null.def --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/dev9null.def 2010-05-18 02:59:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/dev9null.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,36 +1,36 @@ -; DEV9null.def : Declares the module parameters for the DLL. - - -;LIBRARY "DEV9null" -;DESCRIPTION 'DEV9null Driver' - - -EXPORTS - - ; Explicit exports can go here - - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - DEV9init @5 - DEV9shutdown @6 - DEV9open @7 - DEV9close @8 - DEV9read8 @9 - DEV9read16 @10 - DEV9read32 @11 - DEV9write8 @12 - DEV9write16 @13 - DEV9write32 @14 - DEV9readDMA8Mem @15 - DEV9writeDMA8Mem @16 - DEV9configure @17 - DEV9test @18 - DEV9about @19 - DEV9irqCallback @20 - DEV9irqHandler @21 - DEV9dmaRead - DEV9dmaWrite - DEV9dmaInterrupt - +; DEV9null.def : Declares the module parameters for the DLL. + + +;LIBRARY "DEV9null" +;DESCRIPTION 'DEV9null Driver' + + +EXPORTS + + ; Explicit exports can go here + + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + DEV9init @5 + DEV9shutdown @6 + DEV9open @7 + DEV9close @8 + DEV9read8 @9 + DEV9read16 @10 + DEV9read32 @11 + DEV9write8 @12 + DEV9write16 @13 + DEV9write32 @14 + DEV9readDMA8Mem @15 + DEV9writeDMA8Mem @16 + DEV9configure @17 + DEV9test @18 + DEV9about @19 + DEV9irqCallback @20 + DEV9irqHandler @21 + DEV9dmaRead + DEV9dmaWrite + DEV9dmaInterrupt + DEV9setSettingsDir \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null.vcxproj pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null.vcxproj --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null.vcxproj 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -21,10 +21,12 @@ DynamicLibrary MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary MultiByte + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - DEV9null - {04439C5F-05FB-4A9C-AAD1-5388C25377DB} - DEV9null - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - EnableFastChecks - MultiThreadedDebug - - - - - $(OutDir)$(TargetName)$(TargetExt) - DEV9null.def - false - - - MachineX86 - - - - - - - - - DEV9null.def - false - - - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ - - - - - {60e3858c-96ba-48fb-9518-894ac152b563} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - - - Source Files - - - Source Files - - - - - Source Files - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - DEV9null - {04439C5F-05FB-4A9C-AAD1-5388C25377DB} - DEV9null - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - EnableFastChecks - MultiThreadedDebug - - - - - $(OutDir)$(TargetName)$(TargetExt) - DEV9null.def - false - - - MachineX86 - - - - - - - - - DEV9null.def - false - - - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/dev9null/Windows/DEV9null_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ - - - - - {60e3858c-96ba-48fb-9518-894ac152b563} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - - - Source Files - - - Source Files - - - - - Source Files - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/CMakeLists.txt pcsx2-1.4.0/plugins/FWnull/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/FWnull/CMakeLists.txt 2014-12-14 13:00:20.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output FWnull-0.7.0) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(FWnullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(FWnullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(FWnullFinalFlags ${OptimizationFlags}) - -endif() +set(FWnullFinalFlags "") # FWnull sources set(FWnullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/License.txt pcsx2-1.4.0/plugins/FWnull/License.txt --- pcsx2-1.3.1+dfsg/plugins/FWnull/License.txt 2009-02-06 19:41:48.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/License.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,342 +1,342 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library General -Public License instead of this License. - - + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library General +Public License instead of this License. + + diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/ReadMe.txt pcsx2-1.4.0/plugins/FWnull/ReadMe.txt --- pcsx2-1.3.1+dfsg/plugins/FWnull/ReadMe.txt 2009-02-06 19:41:48.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/ReadMe.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,34 +1,34 @@ -FireWire v0.3 -------------- - - This is an extension to use with play station2 emulators - as PCSX2 (only one right now). - The plugin is free open source code. - -Usage: ------ - Place the file "FireWirePlugin.so" (linux) or "FireWirePlugin.dll" (win32) - at the Plugin directory of the Emulator to use it. - -Changes: -------- - v0.4: -*Added vsnet2005 beta1 support. 64bit dll should work okay (not tested yet!) - - v0.3: - *up to specs 0.5.5 - *added logging option and ini saving - - v0.2: - *new specs - v0.1: - * First Release - * Tested with Pcsx2 - -Authors: -------- - shadow - linuzappz - - - +FireWire v0.3 +------------- + + This is an extension to use with play station2 emulators + as PCSX2 (only one right now). + The plugin is free open source code. + +Usage: +----- + Place the file "FireWirePlugin.so" (linux) or "FireWirePlugin.dll" (win32) + at the Plugin directory of the Emulator to use it. + +Changes: +------- + v0.4: +*Added vsnet2005 beta1 support. 64bit dll should work okay (not tested yet!) + + v0.3: + *up to specs 0.5.5 + *added logging option and ini saving + + v0.2: + *new specs + v0.1: + * First Release + * Tested with Pcsx2 + +Authors: +------- + shadow + linuzappz + + + diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FireWireNull.def pcsx2-1.4.0/plugins/FWnull/Windows/FireWireNull.def --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FireWireNull.def 2010-05-18 02:59:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FireWireNull.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,21 +1,21 @@ -; FireWire.def : Declares the module parameters for the DLL. - -;LIBRARY "FWnull" - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - FWinit @5 - FWshutdown @6 - FWopen @7 - FWclose @8 - FWread32 @11 - FWwrite32 @14 - FWirqCallback @15 - FWconfigure @17 - FWtest @18 - FWabout @19 - - FWsetSettingsDir +; FireWire.def : Declares the module parameters for the DLL. + +;LIBRARY "FWnull" + +EXPORTS + ; Explicit exports can go here + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + FWinit @5 + FWshutdown @6 + FWopen @7 + FWclose @8 + FWread32 @11 + FWwrite32 @14 + FWirqCallback @15 + FWconfigure @17 + FWtest @18 + FWabout @19 + + FWsetSettingsDir diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FireWireNull.rc pcsx2-1.4.0/plugins/FWnull/Windows/FireWireNull.rc --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FireWireNull.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FireWireNull.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,116 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Argentina) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESS) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 212, 121 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Firewireconfigure" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,100,50,14 + PUSHBUTTON "Cancel",IDCANCEL,113,100,50,14 + CONTROL "Enable Logging (for develop use only)",IDC_LOGGING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,187,13 +END + +IDD_ABOUT DIALOGEX 0, 0, 177, 106 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "FireWire About" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,65,85,50,14 + LTEXT "FireWire Driver",IDC_NAME,70,10,48,8 + GROUPBOX "",IDC_STATIC,5,35,170,40 + LTEXT "Author: Shadow and linuzappz",IDC_STATIC,29,19,141,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 205 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 99 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Argentina) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull.vcxproj pcsx2-1.4.0/plugins/FWnull/Windows/FWnull.vcxproj --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull.vcxproj 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FWnull.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -21,10 +21,12 @@ DynamicLibrary MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary MultiByte + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2012.vcxproj pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - FWnull - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} - FWnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName) - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - FireWireNull.def - false - MachineX86 - - - - - - - - - FireWireNull.def - false - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - - - - - {9f8ea85e-c353-4a00-870a-573daa04f2d4} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {5090ab82-143a-459e-b92d-5bdb2847f6bc} - h;hpp;hxx;hm;inl;inc - - - {df8b3ed3-4204-43dd-9ddb-17f06e45b699} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2013.vcxproj pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - FWnull - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C} - FWnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName) - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - FireWireNull.def - false - MachineX86 - - - - - - - - - FireWireNull.def - false - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/FWnull_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/FWnull_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - - - - - {9f8ea85e-c353-4a00-870a-573daa04f2d4} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {5090ab82-143a-459e-b92d-5bdb2847f6bc} - h;hpp;hxx;hm;inl;inc - - - {df8b3ed3-4204-43dd-9ddb-17f06e45b699} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/resource.h pcsx2-1.4.0/plugins/FWnull/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/FWnull/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/FWnull/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by FireWireNull.rc +// +#define IDD_CONFDLG 101 +#define IDD_CONFIG 101 +#define IDD_ABOUT 103 +#define IDC_NAME 1000 +#define IDC_CHECK1 1007 +#define IDC_LOGGING 1007 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/boost_spsc_queue.hpp pcsx2-1.4.0/plugins/GSdx/boost_spsc_queue.hpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/boost_spsc_queue.hpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/boost_spsc_queue.hpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,177 @@ +// This version is a stripped down version of boost/lockfree/spsc_queue.hpp boost_spsc_queue.hpp +// Rational +// * Performance is better on linux than the standard std::queue +// * Performance in the same on windows +// => 100-200MB of dependency feel rather unfriendly + +// Potential optimization +// * plug condition variable into the queue directly to avoid redundant m_count + +// * Restore boost optimization +// => unlikely or replace it with a % (if size is 2^n) + + +// lock-free single-producer/single-consumer ringbuffer +// this algorithm is implemented in various projects (linux kernel) +// +// Copyright (C) 2009-2013 Tim Blechmann +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// Boost Software License - Version 1.0 - August 17th, 2003 +// +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + + +template +class ringbuffer_base +{ + static const int padding_size = 64 - sizeof(size_t); + + atomic write_index_; + char padding1[padding_size]; /* force read_index and write_index to different cache lines */ + atomic read_index_; + + T *buffer; + + ringbuffer_base(ringbuffer_base const &) = delete; + ringbuffer_base(ringbuffer_base &&) = delete; + const ringbuffer_base& operator=( const ringbuffer_base& ) = delete; + +public: + ringbuffer_base(void): + write_index_(0), read_index_(0) + { + // Use dynamically allocation here with no T object dependency + // Otherwise the ringbuffer_base destructor will call the destructor + // of T which crash if T is a (invalid) shared_ptr. + // + // Note another solution will be to create a char buffer as union of T + buffer = (T*)_aligned_malloc(sizeof(T)*max_size, 32); + } + + ~ringbuffer_base(void) { + // destroy all remaining items + T out; + while (pop(out)) {}; + + _aligned_free(buffer); + } + + + static size_t next_index(size_t arg) + { + size_t ret = arg + 1; +#if 0 + while (unlikely(ret >= max_size)) +#else + while (ret >= max_size) +#endif + ret -= max_size; + return ret; + } + + bool push(T const & t) + { + const size_t write_index = write_index_.load(memory_order_relaxed); // only written from push thread + const size_t next = next_index(write_index); + + if (next == read_index_.load(memory_order_acquire)) + return false; /* ringbuffer is full */ + + new (buffer + write_index) T(t); // copy-construct + + write_index_.store(next, memory_order_release); + + return true; + } + + bool pop (T & ret) + { + const size_t write_index = write_index_.load(memory_order_acquire); + const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread + if (empty(write_index, read_index)) + return false; + + ret = buffer[read_index]; + buffer[read_index].~T(); + + size_t next = next_index(read_index); + read_index_.store(next, memory_order_release); + return true; + } + + template + bool consume_one(Functor & f) + { + const size_t write_index = write_index_.load(memory_order_acquire); + const size_t read_index = read_index_.load(memory_order_relaxed); // only written from pop thread + if (empty(write_index, read_index)) + return false; + + f(buffer[read_index]); + buffer[read_index].~T(); + + size_t next = next_index(read_index); + read_index_.store(next, memory_order_release); + return true; + } + +public: + /** reset the ringbuffer + * + * \note Not thread-safe + * */ + void reset(void) + { + write_index_.store(0, memory_order_relaxed); + read_index_.store(0, memory_order_release); + } + + /** Check if the ringbuffer is empty + * + * \return true, if the ringbuffer is empty, false otherwise + * \note Due to the concurrent nature of the ringbuffer the result may be inaccurate. + * */ + bool empty(void) + { + return empty(write_index_.load(memory_order_relaxed), read_index_.load(memory_order_relaxed)); + } + + /** + * \return true, if implementation is lock-free. + * + * */ + bool is_lock_free(void) const + { + return write_index_.is_lock_free() && read_index_.is_lock_free(); + } + +private: + bool empty(size_t write_index, size_t read_index) + { + return write_index == read_index; + } +}; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/CMakeLists.txt pcsx2-1.4.0/plugins/GSdx/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/GSdx/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -7,7 +7,7 @@ # plugin name -set(Output GSdx-0.1.16) +set(Output GSdx-1.0.0) set(CommonFlags -fno-operator-names # because Xbyak uses and()/xor()/or()/not() function @@ -18,19 +18,14 @@ -Wunused-variable # __dummy variable need to be investigated ) -set(OptimizationFlags - -O2 - ) - - if(CMAKE_BUILD_TYPE STREQUAL Debug) set(GSdxFinalFlags ${GSdxFinalFlags} ${CommonFlags} -D_DEBUG) elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(GSdxFinalFlags ${GSdxFinalFlags} ${CommonFlags} ${OptimizationFlags} -D_DEVEL) + set(GSdxFinalFlags ${GSdxFinalFlags} ${CommonFlags} -D_DEVEL) elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(GSdxFinalFlags ${GSdxFinalFlags} ${CommonFlags} ${OptimizationFlags} -W) + set(GSdxFinalFlags ${GSdxFinalFlags} ${CommonFlags} -W) endif() @@ -38,16 +33,21 @@ set(GSdxFinalFlags ${GSdxFinalFlags} -DXDG_STD) endif() -if(GLES_API AND GLESV2_FOUND) - set(GSdxFinalFlags ${GSdxFinalFlags} -DENABLE_GLES) +if(EGL_API AND EGL_FOUND) + set(GSdxFinalFlags ${GSdxFinalFlags} -DEGL_SUPPORTED) +endif() + +if(LIBLZMA_FOUND) + set(GSdxFinalFlags ${GSdxFinalFlags} -DLZMA_SUPPORTED) +endif() + +if(PNGPP_FOUND) + set(GSdxFinalFlags ${GSdxFinalFlags} -DPNGPP_SUPPORTED) endif() #Clang doesn't support a few common flags that GCC does. if(NOT USE_CLANG) set(GSdxFinalFlags ${GSdxFinalFlags} -fabi-version=6) - if (_M_X86_32) - set(GSdxFinalFlags ${GSdxFinalFlags} -mpreferred-stack-boundary=2) - endif() endif() set(GSdxSources @@ -73,6 +73,7 @@ GSDeviceSW.cpp GSDeviceNull.cpp GSDirtyRect.cpp + GSDrawingContext.cpp GSDrawScanline.cpp GSDrawScanlineCodeGenerator.cpp GSDrawScanlineCodeGenerator.x86.avx.cpp @@ -84,7 +85,9 @@ GSFunctionMap.cpp GSLinuxDialog.cpp GSLocalMemory.cpp + GSLzma.cpp GSPerfMon.cpp + GSPng.cpp GSRasterizer.cpp GSRenderer.cpp GSRendererCL.cpp @@ -198,25 +201,25 @@ ${X11_LIBRARIES} ) -if(GLES_API AND GLESV2_FOUND) - set(GSdxFinalLibs - ${GSdxFinalLibs} - ${GLESV2_LIBRARIES} - ) -else() - set(GSdxFinalLibs - ${GSdxFinalLibs} - ${OPENGL_LIBRARIES} - ) -endif() - -set(GSdxFinalLibs - ${GSdxFinalLibs} - ${EGL_LIBRARIES} +set(GSdxFinalLibs ${GSdxFinalLibs} + ${OPENGL_LIBRARIES} ${GTK2_LIBRARIES} ${LIBC_LIBRARIES} + ${PNG_LIBRARY} ) +if(EGL_API AND EGL_FOUND) + set(GSdxFinalLibs ${GSdxFinalLibs} + ${EGL_LIBRARIES} + ) +endif() + +if(LIBLZMA_FOUND) + set(GSdxFinalLibs ${GSdxFinalLibs} + ${LIBLZMA_LIBRARIES} + ) +endif() + # Generate Glsl header file. Protect with REBUILD_SHADER to avoid build-dependency on PERL if (REBUILD_SHADER) add_custom_command(OUTPUT res/glsl_source.h COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/glsl2h.pl) diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/config.h pcsx2-1.4.0/plugins/GSdx/config.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/config.h 2014-12-22 18:02:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/config.h 2016-01-05 17:28:08.000000000 +0000 @@ -38,14 +38,23 @@ //#define DISABLE_DATE + #if defined(_DEBUG) || defined(_DEVEL) #define ENABLE_OGL_DEBUG // Create a debug context and check opengl command status. Allow also to dump various textures/states. +//#define ENABLE_OGL_DEBUG_FENCE #endif //#define ENABLE_OGL_DEBUG_MEM_BW // compute the quantity of data transfered (debug purpose) -// Output stencil to a color buffer -//#define ENABLE_OGL_STENCIL_DEBUG +#if defined(__linux__) && !(defined(_DEBUG) || defined(_DEVEL)) +#define DISABLE_PERF_MON // Burn cycle for nothing in release mode +#endif #ifdef _WINDOWS //#define ENABLE_OPENCL #endif + +#if defined(__linux__) && PNGPP_SUPPORTED +// Allow to dump texture as PNG (require libpng++). It reduces the size of the dump +// and alpha is well supported (on linux) +#define ENABLE_OGL_PNG +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GLLoader.cpp pcsx2-1.4.0/plugins/GSdx/GLLoader.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GLLoader.cpp 2014-12-12 19:44:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GLLoader.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,129 +22,302 @@ #include "GLLoader.h" #include "GSdx.h" -#ifndef ENABLE_GLES -PFNGLACTIVETEXTUREPROC gl_ActiveTexture = NULL; -PFNGLBLENDCOLORPROC gl_BlendColor = NULL; -PFNGLATTACHSHADERPROC gl_AttachShader = NULL; -PFNGLBINDBUFFERPROC gl_BindBuffer = NULL; -PFNGLBINDBUFFERBASEPROC gl_BindBufferBase = NULL; -PFNGLBINDFRAMEBUFFERPROC gl_BindFramebuffer = NULL; -PFNGLBINDSAMPLERPROC gl_BindSampler = NULL; -PFNGLBINDVERTEXARRAYPROC gl_BindVertexArray = NULL; -PFNGLBLENDEQUATIONSEPARATEIARBPROC gl_BlendEquationSeparateiARB = NULL; -PFNGLBLENDFUNCSEPARATEIARBPROC gl_BlendFuncSeparateiARB = NULL; -PFNGLBLITFRAMEBUFFERPROC gl_BlitFramebuffer = NULL; -PFNGLBUFFERDATAPROC gl_BufferData = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSPROC gl_CheckFramebufferStatus = NULL; -PFNGLCLEARBUFFERFVPROC gl_ClearBufferfv = NULL; -PFNGLCLEARBUFFERIVPROC gl_ClearBufferiv = NULL; -PFNGLCLEARBUFFERUIVPROC gl_ClearBufferuiv = NULL; -PFNGLCOLORMASKIPROC gl_ColorMaski = NULL; -PFNGLCOMPILESHADERPROC gl_CompileShader = NULL; -PFNGLCREATEPROGRAMPROC gl_CreateProgram = NULL; -PFNGLCREATESHADERPROC gl_CreateShader = NULL; -PFNGLCREATESHADERPROGRAMVPROC gl_CreateShaderProgramv = NULL; -PFNGLDELETEBUFFERSPROC gl_DeleteBuffers = NULL; -PFNGLDELETEFRAMEBUFFERSPROC gl_DeleteFramebuffers = NULL; -PFNGLDELETEPROGRAMPROC gl_DeleteProgram = NULL; -PFNGLDELETESAMPLERSPROC gl_DeleteSamplers = NULL; -PFNGLDELETESHADERPROC gl_DeleteShader = NULL; -PFNGLDELETEVERTEXARRAYSPROC gl_DeleteVertexArrays = NULL; -PFNGLDETACHSHADERPROC gl_DetachShader = NULL; -PFNGLDRAWBUFFERSPROC gl_DrawBuffers = NULL; -PFNGLDRAWELEMENTSBASEVERTEXPROC gl_DrawElementsBaseVertex = NULL; -PFNGLENABLEVERTEXATTRIBARRAYPROC gl_EnableVertexAttribArray = NULL; -PFNGLFRAMEBUFFERRENDERBUFFERPROC gl_FramebufferRenderbuffer = NULL; -PFNGLFRAMEBUFFERTEXTURE2DPROC gl_FramebufferTexture2D = NULL; -PFNGLGENBUFFERSPROC gl_GenBuffers = NULL; -PFNGLGENFRAMEBUFFERSPROC gl_GenFramebuffers = NULL; -PFNGLGENSAMPLERSPROC gl_GenSamplers = NULL; -PFNGLGENVERTEXARRAYSPROC gl_GenVertexArrays = NULL; -PFNGLGETBUFFERPARAMETERIVPROC gl_GetBufferParameteriv = NULL; -PFNGLGETDEBUGMESSAGELOGARBPROC gl_GetDebugMessageLogARB = NULL; -PFNGLDEBUGMESSAGECALLBACKPROC gl_DebugMessageCallback = NULL; -PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog = NULL; -PFNGLGETPROGRAMIVPROC gl_GetProgramiv = NULL; -PFNGLGETSHADERIVPROC gl_GetShaderiv = NULL; -PFNGLGETSTRINGIPROC gl_GetStringi = NULL; -PFNGLISFRAMEBUFFERPROC gl_IsFramebuffer = NULL; -PFNGLLINKPROGRAMPROC gl_LinkProgram = NULL; -PFNGLMAPBUFFERPROC gl_MapBuffer = NULL; -PFNGLMAPBUFFERRANGEPROC gl_MapBufferRange = NULL; -PFNGLPROGRAMPARAMETERIPROC gl_ProgramParameteri = NULL; -PFNGLSAMPLERPARAMETERFPROC gl_SamplerParameterf = NULL; -PFNGLSAMPLERPARAMETERIPROC gl_SamplerParameteri = NULL; -PFNGLSHADERSOURCEPROC gl_ShaderSource = NULL; -PFNGLUNIFORM1IPROC gl_Uniform1i = NULL; -PFNGLUNMAPBUFFERPROC gl_UnmapBuffer = NULL; -PFNGLUSEPROGRAMSTAGESPROC gl_UseProgramStages = NULL; -PFNGLVERTEXATTRIBIPOINTERPROC gl_VertexAttribIPointer = NULL; -PFNGLVERTEXATTRIBPOINTERPROC gl_VertexAttribPointer = NULL; -PFNGLBUFFERSUBDATAPROC gl_BufferSubData = NULL; -PFNGLFENCESYNCPROC gl_FenceSync = NULL; -PFNGLDELETESYNCPROC gl_DeleteSync = NULL; -PFNGLCLIENTWAITSYNCPROC gl_ClientWaitSync = NULL; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl_FlushMappedBufferRange = NULL; +PFNGLACTIVETEXTUREPROC gl_ActiveTexture = NULL; +PFNGLBLENDCOLORPROC gl_BlendColor = NULL; + +PFNGLATTACHSHADERPROC glAttachShader = NULL; +PFNGLBINDBUFFERPROC glBindBuffer = NULL; +PFNGLBINDBUFFERBASEPROC glBindBufferBase = NULL; +PFNGLBINDBUFFERRANGEPROC glBindBufferRange = NULL; +PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = NULL; +PFNGLBINDSAMPLERPROC glBindSampler = NULL; +PFNGLBINDVERTEXARRAYPROC glBindVertexArray = NULL; +PFNGLBLENDEQUATIONSEPARATEIARBPROC glBlendEquationSeparateiARB = NULL; +PFNGLBLENDFUNCSEPARATEIARBPROC glBlendFuncSeparateiARB = NULL; +PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = NULL; +PFNGLBUFFERDATAPROC glBufferData = NULL; +PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = NULL; +PFNGLCLEARBUFFERFVPROC glClearBufferfv = NULL; +PFNGLCLEARBUFFERIVPROC glClearBufferiv = NULL; +PFNGLCLEARBUFFERUIVPROC glClearBufferuiv = NULL; +PFNGLCOLORMASKIPROC glColorMaski = NULL; +PFNGLCOMPILESHADERPROC glCompileShader = NULL; +PFNGLCREATEPROGRAMPROC glCreateProgram = NULL; +PFNGLCREATESHADERPROC glCreateShader = NULL; +PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv = NULL; +PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL; +PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL; +PFNGLDELETEPROGRAMPROC glDeleteProgram = NULL; +PFNGLDELETESAMPLERSPROC glDeleteSamplers = NULL; +PFNGLDELETESHADERPROC glDeleteShader = NULL; +PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = NULL; +PFNGLDETACHSHADERPROC glDetachShader = NULL; +PFNGLDRAWBUFFERSPROC glDrawBuffers = NULL; +PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex = NULL; +PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = NULL; +PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = NULL; +PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = NULL; +PFNGLGENBUFFERSPROC glGenBuffers = NULL; +PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = NULL; +PFNGLGENSAMPLERSPROC glGenSamplers = NULL; +PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = NULL; +PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv = NULL; +PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB = NULL; +PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback = NULL; +PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL; +PFNGLGETPROGRAMIVPROC glGetProgramiv = NULL; +PFNGLGETSHADERIVPROC glGetShaderiv = NULL; +PFNGLGETSTRINGIPROC glGetStringi = NULL; +PFNGLISFRAMEBUFFERPROC glIsFramebuffer = NULL; +PFNGLLINKPROGRAMPROC glLinkProgram = NULL; +PFNGLMAPBUFFERPROC glMapBuffer = NULL; +PFNGLMAPBUFFERRANGEPROC glMapBufferRange = NULL; +PFNGLPROGRAMPARAMETERIPROC glProgramParameteri = NULL; +PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf = NULL; +PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri = NULL; +PFNGLSHADERSOURCEPROC glShaderSource = NULL; +PFNGLUNIFORM1IPROC glUniform1i = NULL; +PFNGLUNMAPBUFFERPROC glUnmapBuffer = NULL; +PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages = NULL; +PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer = NULL; +PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL; +PFNGLBUFFERSUBDATAPROC glBufferSubData = NULL; +PFNGLFENCESYNCPROC glFenceSync = NULL; +PFNGLDELETESYNCPROC glDeleteSync = NULL; +PFNGLCLIENTWAITSYNCPROC glClientWaitSync = NULL; +PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange = NULL; +PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate = NULL; +PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate = NULL; // GL4.0 -PFNGLUNIFORMSUBROUTINESUIVPROC gl_UniformSubroutinesuiv = NULL; // GL4.1 -PFNGLBINDPROGRAMPIPELINEPROC gl_BindProgramPipeline = NULL; -PFNGLGENPROGRAMPIPELINESPROC gl_GenProgramPipelines = NULL; -PFNGLDELETEPROGRAMPIPELINESPROC gl_DeleteProgramPipelines = NULL; -PFNGLGETPROGRAMPIPELINEIVPROC gl_GetProgramPipelineiv = NULL; -PFNGLVALIDATEPROGRAMPIPELINEPROC gl_ValidateProgramPipeline = NULL; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl_GetProgramPipelineInfoLog = NULL; +PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline = NULL; +PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines = NULL; +PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines = NULL; +PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv = NULL; +PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline = NULL; +PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog = NULL; +PFNGLGETPROGRAMBINARYPROC glGetProgramBinary = NULL; // NO GL4.1 -PFNGLUSEPROGRAMPROC gl_UseProgram = NULL; -PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog = NULL; -PFNGLPROGRAMUNIFORM1IPROC gl_ProgramUniform1i = NULL; +PFNGLUSEPROGRAMPROC glUseProgram = NULL; +PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL; +PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i = NULL; // GL4.3 -PFNGLCOPYIMAGESUBDATAPROC gl_CopyImageSubData = NULL; +PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData = NULL; +PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage = NULL; +PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup = NULL; +PFNGLPOPDEBUGGROUPPROC glPopDebugGroup = NULL; +PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert = NULL; +PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl = NULL; // GL4.2 -PFNGLBINDIMAGETEXTUREPROC gl_BindImageTexture = NULL; -PFNGLMEMORYBARRIERPROC gl_MemoryBarrier = NULL; -PFNGLTEXSTORAGE2DPROC gl_TexStorage2D = NULL; +PFNGLBINDIMAGETEXTUREPROC glBindImageTexture = NULL; +PFNGLMEMORYBARRIERPROC glMemoryBarrier = NULL; +PFNGLTEXSTORAGE2DPROC glTexStorage2D = NULL; // GL4.4 -PFNGLCLEARTEXIMAGEPROC gl_ClearTexImage = NULL; -PFNGLBUFFERSTORAGEPROC gl_BufferStorage = NULL; -// GL_ARB_bindless_texture (GL5?) -PFNGLGETTEXTURESAMPLERHANDLEARBPROC gl_GetTextureSamplerHandleARB = NULL; -PFNGLMAKETEXTUREHANDLERESIDENTARBPROC gl_MakeTextureHandleResidentARB = NULL; -PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC gl_MakeTextureHandleNonResidentARB = NULL; -PFNGLUNIFORMHANDLEUI64VARBPROC gl_UniformHandleui64vARB = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC gl_ProgramUniformHandleui64vARB = NULL; +PFNGLCLEARTEXIMAGEPROC glClearTexImage = NULL; +PFNGLBUFFERSTORAGEPROC glBufferStorage = NULL; // GL4.5 -PFNGLCREATETEXTURESPROC gl_CreateTextures = NULL; -PFNGLTEXTURESTORAGE2DPROC gl_TextureStorage2D = NULL; -PFNGLTEXTURESUBIMAGE2DPROC gl_TextureSubImage2D = NULL; -PFNGLCOPYTEXTURESUBIMAGE2DPROC gl_CopyTextureSubImage2D = NULL; -PFNGLBINDTEXTUREUNITPROC gl_BindTextureUnit = NULL; -PFNGLGETTEXTUREIMAGEPROC gl_GetTextureImage = NULL; - -PFNGLCREATEFRAMEBUFFERSPROC gl_CreateFramebuffers = NULL; -PFNGLCLEARNAMEDFRAMEBUFFERFVPROC gl_ClearNamedFramebufferfv = NULL; -PFNGLCLEARNAMEDFRAMEBUFFERIVPROC gl_ClearNamedFramebufferiv = NULL; -PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC gl_ClearNamedFramebufferuiv = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTUREPROC gl_NamedFramebufferTexture = NULL; -PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC gl_NamedFramebufferDrawBuffers = NULL; -PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC gl_NamedFramebufferReadBuffer = NULL; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC gl_CheckNamedFramebufferStatus = NULL; - -PFNGLCREATEBUFFERSPROC gl_CreateBuffers = NULL; -PFNGLNAMEDBUFFERSTORAGEPROC gl_NamedBufferStorage = NULL; -PFNGLNAMEDBUFFERDATAPROC gl_NamedBufferData = NULL; -PFNGLNAMEDBUFFERSUBDATAPROC gl_NamedBufferSubData = NULL; -PFNGLMAPNAMEDBUFFERPROC gl_MapNamedBuffer = NULL; -PFNGLMAPNAMEDBUFFERRANGEPROC gl_MapNamedBufferRange = NULL; -PFNGLUNMAPNAMEDBUFFERPROC gl_UnmapNamedBuffer = NULL; +PFNGLCREATETEXTURESPROC glCreateTextures = NULL; +PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D = NULL; +PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D = NULL; +PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D = NULL; +PFNGLBINDTEXTUREUNITPROC glBindTextureUnit = NULL; +PFNGLGETTEXTUREIMAGEPROC glGetTextureImage = NULL; +PFNGLTEXTUREPARAMETERIPROC glTextureParameteri = NULL; + +PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv = NULL; +PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv = NULL; +PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture = NULL; +PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers = NULL; +PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer = NULL; +PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus = NULL; + +PFNGLCREATEBUFFERSPROC glCreateBuffers = NULL; +PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage = NULL; +PFNGLNAMEDBUFFERDATAPROC glNamedBufferData = NULL; +PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData = NULL; +PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer = NULL; +PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange = NULL; +PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer = NULL; +PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange = NULL; + +PFNGLCREATESAMPLERSPROC glCreateSamplers = NULL; +PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines = NULL; + +PFNGLCLIPCONTROLPROC glClipControl = NULL; +PFNGLTEXTUREBARRIERPROC glTextureBarrier = NULL; + +namespace Emulate_DSA { + // Texture entry point + void APIENTRY BindTextureUnit(GLuint unit, GLuint texture) { + gl_ActiveTexture(GL_TEXTURE0 + unit); + glBindTexture(GL_TEXTURE_2D, texture); + } -PFNGLCREATESAMPLERSPROC gl_CreateSamplers = NULL; -PFNGLCREATEPROGRAMPIPELINESPROC gl_CreateProgramPipelines = NULL; + void APIENTRY CreateTexture(GLenum target, GLsizei n, GLuint *textures) { + glGenTextures(1, textures); + } -PFNGLCLIPCONTROLPROC gl_ClipControl = NULL; + void APIENTRY TextureStorage(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) { + BindTextureUnit(7, texture); + glTexStorage2D(GL_TEXTURE_2D, levels, internalformat, width, height); + } -#endif + void APIENTRY TextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) { + BindTextureUnit(7, texture); + glTexSubImage2D(GL_TEXTURE_2D, level, xoffset, yoffset, width, height, format, type, pixels); + } + + void APIENTRY CopyTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) { + BindTextureUnit(7, texture); + glCopyTexSubImage2D(GL_TEXTURE_2D, level, xoffset, yoffset, x, y, width, height); + } + + void APIENTRY GetTexureImage(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels) { + BindTextureUnit(7, texture); + glGetTexImage(GL_TEXTURE_2D, level, format, type, pixels); + } + + void APIENTRY TextureParameteri (GLuint texture, GLenum pname, GLint param) { + BindTextureUnit(7, texture); + glTexParameteri(GL_TEXTURE_2D, pname, param); + } + + // Framebuffer entry point + GLenum fb_target = 0; + void SetFramebufferTarget(GLenum target) { + fb_target = target; + } + + void APIENTRY CreateFramebuffers(GLsizei n, GLuint *framebuffers) { + glGenFramebuffers(n, framebuffers); + } + + void APIENTRY ClearNamedFramebufferfv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value) { + glBindFramebuffer(fb_target, framebuffer); + glClearBufferfv(buffer, drawbuffer, value); + } + + void APIENTRY ClearNamedFramebufferiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value) { + glBindFramebuffer(fb_target, framebuffer); + glClearBufferiv(buffer, drawbuffer, value); + } + + void APIENTRY ClearNamedFramebufferuiv(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value) { + glBindFramebuffer(fb_target, framebuffer); + glClearBufferuiv(buffer, drawbuffer, value); + } + + void APIENTRY NamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) { + glBindFramebuffer(fb_target, framebuffer); + glFramebufferTexture2D(fb_target, attachment, GL_TEXTURE_2D, texture, level); + } + + void APIENTRY NamedFramebufferDrawBuffers(GLuint framebuffer, GLsizei n, const GLenum *bufs) { + glBindFramebuffer(fb_target, framebuffer); + glDrawBuffers(n, bufs); + } + + void APIENTRY NamedFramebufferReadBuffer(GLuint framebuffer, GLenum src) { + glBindFramebuffer(fb_target, framebuffer); + glReadBuffer(src); + glBindFramebuffer(fb_target, 0); + } + + GLenum APIENTRY CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target) { + glBindFramebuffer(fb_target, framebuffer); + return glCheckFramebufferStatus(fb_target); + } + + // Buffer entry point + GLenum buffer_target = 0; + void SetBufferTarget(GLenum target) { + buffer_target = target; + } + + void APIENTRY CreateBuffers(GLsizei n, GLuint *buffers) { + glGenBuffers(1, buffers); + } + + void APIENTRY NamedBufferStorage(GLuint buffer, buffer_proc_t size, const void *data, GLbitfield flags) { + glBindBuffer(buffer_target, buffer); + glBufferStorage(buffer_target, size, data, flags); + } + + void APIENTRY NamedBufferData(GLuint buffer, buffer_proc_t size, const void *data, GLenum usage) { + glBindBuffer(buffer_target, buffer); + glBufferData(buffer_target, size, data, usage); + } + + void APIENTRY NamedBufferSubData(GLuint buffer, GLintptr offset, buffer_proc_t size, const void *data) { + glBindBuffer(buffer_target, buffer); + glBufferSubData(buffer_target, offset, size, data); + } + + void *APIENTRY MapNamedBuffer(GLuint buffer, GLenum access) { + glBindBuffer(buffer_target, buffer); + return glMapBuffer(buffer_target, access); + } + + void *APIENTRY MapNamedBufferRange(GLuint buffer, GLintptr offset, buffer_proc_t length, GLbitfield access) { + glBindBuffer(buffer_target, buffer); + return glMapBufferRange(buffer_target, offset, length, access); + } + + GLboolean APIENTRY UnmapNamedBuffer(GLuint buffer) { + glBindBuffer(buffer_target, buffer); + return glUnmapBuffer(buffer_target); + } + + void APIENTRY FlushMappedNamedBufferRange(GLuint buffer, GLintptr offset, buffer_proc_t length) { + glBindBuffer(buffer_target, buffer); + glFlushMappedBufferRange(buffer_target, offset, length); + } + + // Misc entry point + // (only purpose is to have a consistent API otherwise it is useless) + void APIENTRY CreateProgramPipelines(GLsizei n, GLuint *pipelines) { + glGenProgramPipelines(n, pipelines); + } + + void APIENTRY CreateSamplers(GLsizei n, GLuint *samplers) { + glGenSamplers(n, samplers); + } + + // Replace function pointer to emulate DSA behavior + void Init() { + fprintf(stderr, "DSA is not supported. Replacing the GL function pointer to emulate it\n"); + glBindTextureUnit = BindTextureUnit; + glCreateTextures = CreateTexture; + glTextureStorage2D = TextureStorage; + glTextureSubImage2D = TextureSubImage; + glCopyTextureSubImage2D = CopyTextureSubImage; + glGetTextureImage = GetTexureImage; + glTextureParameteri = TextureParameteri; + + glCreateFramebuffers = CreateFramebuffers; + glClearNamedFramebufferfv = ClearNamedFramebufferfv; + glClearNamedFramebufferiv = ClearNamedFramebufferiv; + glClearNamedFramebufferuiv = ClearNamedFramebufferuiv; + glNamedFramebufferDrawBuffers = NamedFramebufferDrawBuffers; + glNamedFramebufferReadBuffer = NamedFramebufferReadBuffer; + glCheckNamedFramebufferStatus = CheckNamedFramebufferStatus; + + glCreateBuffers = CreateBuffers; + glNamedBufferStorage = NamedBufferStorage; + glNamedBufferData = NamedBufferData; + glNamedBufferSubData = NamedBufferSubData; + glMapNamedBuffer = MapNamedBuffer; + glMapNamedBufferRange = MapNamedBufferRange; + glUnmapNamedBuffer = UnmapNamedBuffer; + glFlushMappedNamedBufferRange = FlushMappedNamedBufferRange; + + glCreateProgramPipelines = CreateProgramPipelines; + glCreateSamplers = CreateSamplers; + } +} namespace GLLoader { @@ -154,42 +327,39 @@ bool intel_buggy_driver = false; bool in_replayer = false; - // Optional + + // GL4 hardware (due to proprietary driver limitation) bool found_GL_ARB_separate_shader_objects = false; // Issue with Mesa and Catalyst... bool found_geometry_shader = true; // we require GL3.3 so geometry must be supported by default + bool found_GL_EXT_texture_filter_anisotropic = false; bool found_GL_ARB_clear_texture = false; // Don't know if GL3 GPU can support it - // Note: except Apple, all drivers support explicit uniform location - bool found_GL_ARB_explicit_uniform_location = false; // need by subroutine and bindless texture - // GL4 hardware bool found_GL_ARB_buffer_storage = false; bool found_GL_ARB_copy_image = false; // Not sure actually maybe GL3 GPU can do it bool found_GL_ARB_gpu_shader5 = false; bool found_GL_ARB_shader_image_load_store = false; // GLES3.1 - bool found_GL_ARB_shader_subroutine = false; - bool found_GL_ARB_bindless_texture = false; // GL5 GPU? - - // GL4.5 for the future (dx10/dx11 compatibility) + bool found_GL_ARB_texture_barrier = false; // Well maybe supported by older hardware I don't know + // DX10 GPU limited driver + bool found_GL_ARB_draw_buffers_blend = false; bool found_GL_ARB_clip_control = false; bool found_GL_ARB_direct_state_access = false; - // Mandatory for opengl ES (allow to use GL code) - bool found_GL_EXT_shader_io_blocks = false; - // Mandatory bool found_GL_ARB_texture_storage = false; bool found_GL_ARB_shading_language_420pack = false; static bool status_and_override(bool& found, const std::string& name, bool mandatory = false) { - if (!found) { - if(mandatory) { + if (mandatory) { + if (!found) { fprintf(stderr, "ERROR: %s is NOT SUPPORTED\n", name.c_str()); - return false; - } else { - fprintf(stderr, "INFO: %s is NOT SUPPORTED\n", name.c_str()); } + return found; + } + + if (!found) { + fprintf(stdout, "INFO: %s is NOT SUPPORTED\n", name.c_str()); } else { - fprintf(stderr, "INFO: %s is available\n", name.c_str()); + fprintf(stdout, "INFO: %s is available\n", name.c_str()); } std::string opt("override_"); @@ -203,57 +373,48 @@ return true; } - bool check_gl_version(uint32 major, uint32 minor) { + bool check_gl_version(int major, int minor) { const GLubyte* s = glGetString(GL_VERSION); if (s == NULL) { fprintf(stderr, "Error: GLLoader failed to get GL version\n"); return false; } + GLuint v = 1; + while (s[v] != '\0' && s[v-1] != ' ') v++; const char* vendor = (const char*)glGetString(GL_VENDOR); - fprintf(stderr, "Supported Opengl version: %s on GPU: %s. Vendor: %s\n", s, glGetString(GL_RENDERER), vendor); -#ifndef ENABLE_GLES - fprintf(stderr, "Note: the maximal version supported by GSdx is 3.3 (even if you driver support more)!\n"); -#endif + fprintf(stdout, "OpenGL information. GPU: %s. Vendor: %s. Driver: %s\n", glGetString(GL_RENDERER), vendor, &s[v]); - // Name change but driver is still bad! + // Name changed but driver is still bad! if (strstr(vendor, "ATI") || strstr(vendor, "Advanced Micro Devices")) fglrx_buggy_driver = true; if (strstr(vendor, "NVIDIA Corporation")) nvidia_buggy_driver = true; if (strstr(vendor, "Intel")) intel_buggy_driver = true; - if (strstr(vendor, "X.Org")) // Note: it might actually catch nouveau too, but bug are likely to be the same anyway + if (strstr(vendor, "X.Org") || strstr(vendor, "nouveau")) // Note: it might actually catch nouveau too, but bugs are likely to be the same anyway mesa_amd_buggy_driver = true; if (strstr(vendor, "VMware")) // Assume worst case because I don't know the real status mesa_amd_buggy_driver = intel_buggy_driver = true; - GLuint dot = 0; - while (s[dot] != '\0' && s[dot] != '.') dot++; - if (dot == 0) return false; - - GLuint major_gl = s[dot-1]-'0'; - GLuint minor_gl = s[dot+1]-'0'; - -#ifndef ENABLE_GLES - if (mesa_amd_buggy_driver || intel_buggy_driver) { + if (mesa_amd_buggy_driver) { fprintf(stderr, "Buggy driver detected. Geometry shaders will be disabled\n"); found_geometry_shader = false; } if (theApp.GetConfig("override_geometry_shader", -1) != -1) { found_geometry_shader = !!theApp.GetConfig("override_geometry_shader", -1); - fprintf(stderr, "Override geometry shaders detection\n"); + fprintf(stderr, "Overriding geometry shaders detection\n"); } -#else - found_geometry_shader = false; -#endif -#ifndef ENABLE_GLES + + GLint major_gl = 0; + GLint minor_gl = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major_gl); + glGetIntegerv(GL_MINOR_VERSION, &minor_gl); if ( (major_gl < major) || ( major_gl == major && minor_gl < minor ) ) { - fprintf(stderr, "OPENGL %d.%d is not supported\n", major, minor); + fprintf(stderr, "OpenGL %d.%d is not supported. Only OpenGL %d.%d\n was found", major, minor, major_gl, minor_gl); return false; } -#endif return true; } @@ -262,82 +423,87 @@ int max_ext = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &max_ext); - if (gl_GetStringi && max_ext) { + if (glGetStringi && max_ext) { for (GLint i = 0; i < max_ext; i++) { - string ext((const char*)gl_GetStringi(GL_EXTENSIONS, i)); -#ifndef ENABLE_GLES + string ext((const char*)glGetStringi(GL_EXTENSIONS, i)); + // Bonus + if (ext.compare("GL_EXT_texture_filter_anisotropic") == 0) found_GL_EXT_texture_filter_anisotropic = true; // GL4.0 if (ext.compare("GL_ARB_gpu_shader5") == 0) found_GL_ARB_gpu_shader5 = true; + if (ext.compare("GL_ARB_draw_buffers_blend") == 0) found_GL_ARB_draw_buffers_blend = true; // GL4.1 if (ext.compare("GL_ARB_separate_shader_objects") == 0) { if (!fglrx_buggy_driver && !mesa_amd_buggy_driver && !intel_buggy_driver) found_GL_ARB_separate_shader_objects = true; else fprintf(stderr, "Buggy driver detected, GL_ARB_separate_shader_objects will be disabled\n"); } -#if 0 - // Erratum: on nvidia implementation, gain is very nice : 42.5 fps => 46.5 fps - // - // Strangely it doesn't provide the speed boost as expected. - // Note: only atst/colclip was replaced with subroutine for the moment. It replace 2000 program switch on - // colin mcrae 3 by 2100 uniform, but code is slower! - // - // Current hypothesis: the validation of useprogram is done in the "driver thread" whereas the extra function calls - // are done on the overloaded main threads. - // Apitrace profiling shows faster GPU draw times - - if (ext.compare("GL_ARB_shader_subroutine") == 0) found_GL_ARB_shader_subroutine = true; -#endif // GL4.2 if (ext.compare("GL_ARB_shading_language_420pack") == 0) found_GL_ARB_shading_language_420pack = true; if (ext.compare("GL_ARB_texture_storage") == 0) found_GL_ARB_texture_storage = true; - // Only enable this extension on nvidia - if (nvidia_buggy_driver && ext.compare("GL_ARB_shader_image_load_store") == 0) found_GL_ARB_shader_image_load_store = true; + if (ext.compare("GL_ARB_shader_image_load_store") == 0) found_GL_ARB_shader_image_load_store = true; // GL4.3 if (ext.compare("GL_ARB_copy_image") == 0) found_GL_ARB_copy_image = true; - if (ext.compare("GL_ARB_explicit_uniform_location") == 0) found_GL_ARB_explicit_uniform_location = true; // GL4.4 if (ext.compare("GL_ARB_buffer_storage") == 0) found_GL_ARB_buffer_storage = true; if (ext.compare("GL_ARB_clear_texture") == 0) found_GL_ARB_clear_texture = true; - // FIXME: I have a crash when I hit pause (debug build) - //if (ext.compare("GL_ARB_bindless_texture") == 0) found_GL_ARB_bindless_texture = true; // GL4.5 if (ext.compare("GL_ARB_direct_state_access") == 0) found_GL_ARB_direct_state_access = true; if (ext.compare("GL_ARB_clip_control") == 0) found_GL_ARB_clip_control = true; -#else // ENABLE_GLES - if (ext.compare("GL_EXT_shader_io_blocks") == 0) found_GL_EXT_shader_io_blocks = true; -#endif + if (ext.compare("GL_ARB_texture_barrier") == 0) found_GL_ARB_texture_barrier = true; //fprintf(stderr, "DEBUG ext: %s\n", ext.c_str()); } } bool status = true; - fprintf(stderr, "\n"); -#ifndef ENABLE_GLES + // Bonus + status &= status_and_override(found_GL_EXT_texture_filter_anisotropic, "GL_EXT_texture_filter_anisotropic"); // GL4.0 - status &= status_and_override(found_GL_ARB_gpu_shader5,"GL_ARB_gpu_shader5"); + status &= status_and_override(found_GL_ARB_gpu_shader5, "GL_ARB_gpu_shader5"); + status &= status_and_override(found_GL_ARB_draw_buffers_blend, "GL_ARB_draw_buffers_blend"); // GL4.1 - status &= status_and_override(found_GL_ARB_separate_shader_objects,"GL_ARB_separate_shader_objects"); - status &= status_and_override(found_GL_ARB_shader_subroutine,"GL_ARB_shader_subroutine"); + status &= status_and_override(found_GL_ARB_separate_shader_objects, "GL_ARB_separate_shader_objects"); // GL4.2 - status &= status_and_override(found_GL_ARB_shader_image_load_store,"GL_ARB_shader_image_load_store"); - status &= status_and_override(found_GL_ARB_shading_language_420pack,"GL_ARB_shading_language_420pack", true); + status &= status_and_override(found_GL_ARB_shader_image_load_store, "GL_ARB_shader_image_load_store"); + status &= status_and_override(found_GL_ARB_shading_language_420pack, "GL_ARB_shading_language_420pack", true); status &= status_and_override(found_GL_ARB_texture_storage, "GL_ARB_texture_storage", true); // GL4.3 - status &= status_and_override(found_GL_ARB_explicit_uniform_location,"GL_ARB_explicit_uniform_location"); status &= status_and_override(found_GL_ARB_copy_image, "GL_ARB_copy_image"); // GL4.4 status &= status_and_override(found_GL_ARB_buffer_storage,"GL_ARB_buffer_storage"); - status &= status_and_override(found_GL_ARB_bindless_texture,"GL_ARB_bindless_texture"); status &= status_and_override(found_GL_ARB_clear_texture,"GL_ARB_clear_texture"); // GL4.5 status &= status_and_override(found_GL_ARB_clip_control, "GL_ARB_clip_control"); status &= status_and_override(found_GL_ARB_direct_state_access, "GL_ARB_direct_state_access"); -#else // ENABLE_GLES - status &= status_and_override(found_GL_EXT_shader_io_blocks, "GL_EXT_shader_io_blocks", true); + status &= status_and_override(found_GL_ARB_texture_barrier, "GL_ARB_texture_barrier"); + + if (!found_GL_ARB_direct_state_access) { + Emulate_DSA::Init(); + } + if (glBindTextureUnit == NULL) { + fprintf(stderr, "FATAL ERROR !!!! Failed to setup DSA function pointer!!!\n"); + status = false; + } + + if (!found_GL_ARB_texture_barrier) { + fprintf(stderr, "Error GL_ARB_texture_barrier is not supported by your driver. You can't emulate correctly the GS blending unit! Sorry!\n"); + theApp.SetConfig("accurate_blending_unit", 0); + theApp.SetConfig("accurate_date", 0); + } + +#ifdef _WINDOWS + if (status) { + if (intel_buggy_driver) { + fprintf(stderr, "OpenGL renderer isn't compatible with SandyBridge/IvyBridge GPU due to issues. Sorry.\n" + "Tip:Try it on Linux"); + } + if (fglrx_buggy_driver) { + fprintf(stderr, "OpenGL renderer is slow on AMD GPU due to inefficient driver. Sorry."); + } + } #endif - fprintf(stderr, "\n"); + fprintf(stdout, "\n"); return status; } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GLLoader.h pcsx2-1.4.0/plugins/GSdx/GLLoader.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GLLoader.h 2014-11-11 14:01:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GLLoader.h 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,6 @@ #define GL_FB_DEFAULT (0) #define GL_BUFFER_0 (0) -#ifndef ENABLE_GLES // FIX compilation issue with Mesa 10 // Note it might be possible to do better with the right include // in the rigth order but I don't have time @@ -37,6 +36,13 @@ #define APIENTRYP APIENTRY * #endif +// Mesa glext.h < 20150122 uses GLsizei for BUFFER*PROCs +#if GL_GLEXT_VERSION < 20150122 +typedef GLsizei buffer_proc_t; +#else +typedef GLsizeiptr buffer_proc_t; +#endif + // Allow compilation with older mesa #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 @@ -81,28 +87,6 @@ typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #endif /* GL_VERSION_4_4 */ -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 -typedef uint64_t GLuint64EXT; -#define GL_UNSIGNED_INT64_ARB 0x140F -typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -#endif /* GL_ARB_bindless_texture */ - // Note: trim it #ifndef GL_VERSION_4_5 #define GL_VERSION_4_5 1 @@ -206,208 +190,144 @@ typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); #endif /* GL_VERSION_4_5 */ - - -#endif - -#ifndef ENABLE_GLES +// Note: glActiveTexture & glBlendColor aren't included in the win GL ABI. +// (maybe gl.h is outdated, or my setup is wrong) +// Anyway, let's just keep the mangled function pointer for those 2 functions. extern PFNGLACTIVETEXTUREPROC gl_ActiveTexture; extern PFNGLBLENDCOLORPROC gl_BlendColor; -extern PFNGLATTACHSHADERPROC gl_AttachShader; -extern PFNGLBINDBUFFERPROC gl_BindBuffer; -extern PFNGLBINDBUFFERBASEPROC gl_BindBufferBase; -extern PFNGLBINDFRAMEBUFFERPROC gl_BindFramebuffer; -extern PFNGLBINDSAMPLERPROC gl_BindSampler; -extern PFNGLBINDVERTEXARRAYPROC gl_BindVertexArray; -extern PFNGLBLENDEQUATIONSEPARATEIARBPROC gl_BlendEquationSeparateiARB; -extern PFNGLBLENDFUNCSEPARATEIARBPROC gl_BlendFuncSeparateiARB; -extern PFNGLBLITFRAMEBUFFERPROC gl_BlitFramebuffer; -extern PFNGLBUFFERDATAPROC gl_BufferData; -extern PFNGLCHECKFRAMEBUFFERSTATUSPROC gl_CheckFramebufferStatus; -extern PFNGLCLEARBUFFERFVPROC gl_ClearBufferfv; -extern PFNGLCLEARBUFFERIVPROC gl_ClearBufferiv; -extern PFNGLCLEARBUFFERUIVPROC gl_ClearBufferuiv; -extern PFNGLCOMPILESHADERPROC gl_CompileShader; -extern PFNGLCOLORMASKIPROC gl_ColorMaski; -extern PFNGLCREATEPROGRAMPROC gl_CreateProgram; -extern PFNGLCREATESHADERPROC gl_CreateShader; -extern PFNGLCREATESHADERPROGRAMVPROC gl_CreateShaderProgramv; -extern PFNGLDELETEBUFFERSPROC gl_DeleteBuffers; -extern PFNGLDELETEFRAMEBUFFERSPROC gl_DeleteFramebuffers; -extern PFNGLDELETEPROGRAMPROC gl_DeleteProgram; -extern PFNGLDELETESAMPLERSPROC gl_DeleteSamplers; -extern PFNGLDELETESHADERPROC gl_DeleteShader; -extern PFNGLDELETEVERTEXARRAYSPROC gl_DeleteVertexArrays; -extern PFNGLDETACHSHADERPROC gl_DetachShader; -extern PFNGLDRAWBUFFERSPROC gl_DrawBuffers; -extern PFNGLDRAWELEMENTSBASEVERTEXPROC gl_DrawElementsBaseVertex; -extern PFNGLENABLEVERTEXATTRIBARRAYPROC gl_EnableVertexAttribArray; -extern PFNGLFRAMEBUFFERRENDERBUFFERPROC gl_FramebufferRenderbuffer; -extern PFNGLFRAMEBUFFERTEXTURE2DPROC gl_FramebufferTexture2D; -extern PFNGLGENBUFFERSPROC gl_GenBuffers; -extern PFNGLGENFRAMEBUFFERSPROC gl_GenFramebuffers; -extern PFNGLGENSAMPLERSPROC gl_GenSamplers; -extern PFNGLGENVERTEXARRAYSPROC gl_GenVertexArrays; -extern PFNGLGETBUFFERPARAMETERIVPROC gl_GetBufferParameteriv; -extern PFNGLGETDEBUGMESSAGELOGARBPROC gl_GetDebugMessageLogARB; -extern PFNGLDEBUGMESSAGECALLBACKPROC gl_DebugMessageCallback; -extern PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog; -extern PFNGLGETPROGRAMIVPROC gl_GetProgramiv; -extern PFNGLGETSHADERIVPROC gl_GetShaderiv; -extern PFNGLGETSTRINGIPROC gl_GetStringi; -extern PFNGLISFRAMEBUFFERPROC gl_IsFramebuffer; -extern PFNGLLINKPROGRAMPROC gl_LinkProgram; -extern PFNGLMAPBUFFERPROC gl_MapBuffer; -extern PFNGLMAPBUFFERRANGEPROC gl_MapBufferRange; -extern PFNGLPROGRAMPARAMETERIPROC gl_ProgramParameteri; -extern PFNGLSAMPLERPARAMETERFPROC gl_SamplerParameterf; -extern PFNGLSAMPLERPARAMETERIPROC gl_SamplerParameteri; -extern PFNGLSHADERSOURCEPROC gl_ShaderSource; -extern PFNGLUNIFORM1IPROC gl_Uniform1i; -extern PFNGLUNMAPBUFFERPROC gl_UnmapBuffer; -extern PFNGLUSEPROGRAMSTAGESPROC gl_UseProgramStages; -extern PFNGLVERTEXATTRIBIPOINTERPROC gl_VertexAttribIPointer; -extern PFNGLVERTEXATTRIBPOINTERPROC gl_VertexAttribPointer; -extern PFNGLBUFFERSUBDATAPROC gl_BufferSubData; -extern PFNGLFENCESYNCPROC gl_FenceSync; -extern PFNGLDELETESYNCPROC gl_DeleteSync; -extern PFNGLCLIENTWAITSYNCPROC gl_ClientWaitSync; -extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl_FlushMappedBufferRange; + +extern PFNGLATTACHSHADERPROC glAttachShader; +extern PFNGLBINDBUFFERPROC glBindBuffer; +extern PFNGLBINDBUFFERBASEPROC glBindBufferBase; +extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange; +extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer; +extern PFNGLBINDSAMPLERPROC glBindSampler; +extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray; +extern PFNGLBLENDEQUATIONSEPARATEIARBPROC glBlendEquationSeparateiARB; +extern PFNGLBLENDFUNCSEPARATEIARBPROC glBlendFuncSeparateiARB; +extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer; +extern PFNGLBUFFERDATAPROC glBufferData; +extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; +extern PFNGLCLEARBUFFERFVPROC glClearBufferfv; +extern PFNGLCLEARBUFFERIVPROC glClearBufferiv; +extern PFNGLCLEARBUFFERUIVPROC glClearBufferuiv; +extern PFNGLCOMPILESHADERPROC glCompileShader; +extern PFNGLCOLORMASKIPROC glColorMaski; +extern PFNGLCREATEPROGRAMPROC glCreateProgram; +extern PFNGLCREATESHADERPROC glCreateShader; +extern PFNGLCREATESHADERPROGRAMVPROC glCreateShaderProgramv; +extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; +extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; +extern PFNGLDELETEPROGRAMPROC glDeleteProgram; +extern PFNGLDELETESAMPLERSPROC glDeleteSamplers; +extern PFNGLDELETESHADERPROC glDeleteShader; +extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays; +extern PFNGLDETACHSHADERPROC glDetachShader; +extern PFNGLDRAWBUFFERSPROC glDrawBuffers; +extern PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex; +extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray; +extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer; +extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; +extern PFNGLGENBUFFERSPROC glGenBuffers; +extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers; +extern PFNGLGENSAMPLERSPROC glGenSamplers; +extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; +extern PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv; +extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB; +extern PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback; +extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog; +extern PFNGLGETPROGRAMIVPROC glGetProgramiv; +extern PFNGLGETSHADERIVPROC glGetShaderiv; +extern PFNGLGETSTRINGIPROC glGetStringi; +extern PFNGLISFRAMEBUFFERPROC glIsFramebuffer; +extern PFNGLLINKPROGRAMPROC glLinkProgram; +extern PFNGLMAPBUFFERPROC glMapBuffer; +extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; +extern PFNGLPROGRAMPARAMETERIPROC glProgramParameteri; +extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf; +extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri; +extern PFNGLSHADERSOURCEPROC glShaderSource; +extern PFNGLUNIFORM1IPROC glUniform1i; +extern PFNGLUNMAPBUFFERPROC glUnmapBuffer; +extern PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages; +extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer; +extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer; +extern PFNGLBUFFERSUBDATAPROC glBufferSubData; +extern PFNGLFENCESYNCPROC glFenceSync; +extern PFNGLDELETESYNCPROC glDeleteSync; +extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync; +extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; +extern PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate; +extern PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate; // GL4.0 -extern PFNGLUNIFORMSUBROUTINESUIVPROC gl_UniformSubroutinesuiv; // GL4.1 -extern PFNGLBINDPROGRAMPIPELINEPROC gl_BindProgramPipeline; -extern PFNGLDELETEPROGRAMPIPELINESPROC gl_DeleteProgramPipelines; -extern PFNGLGENPROGRAMPIPELINESPROC gl_GenProgramPipelines; -extern PFNGLGETPROGRAMPIPELINEIVPROC gl_GetProgramPipelineiv; -extern PFNGLVALIDATEPROGRAMPIPELINEPROC gl_ValidateProgramPipeline; -extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl_GetProgramPipelineInfoLog; +extern PFNGLBINDPROGRAMPIPELINEPROC glBindProgramPipeline; +extern PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines; +extern PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines; +extern PFNGLGETPROGRAMPIPELINEIVPROC glGetProgramPipelineiv; +extern PFNGLVALIDATEPROGRAMPIPELINEPROC glValidateProgramPipeline; +extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC glGetProgramPipelineInfoLog; +extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary; // NO GL4.1 -extern PFNGLUSEPROGRAMPROC gl_UseProgram; -extern PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog; -extern PFNGLPROGRAMUNIFORM1IPROC gl_ProgramUniform1i; +extern PFNGLUSEPROGRAMPROC glUseProgram; +extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog; +extern PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i; // GL4.2 -extern PFNGLBINDIMAGETEXTUREPROC gl_BindImageTexture; -extern PFNGLMEMORYBARRIERPROC gl_MemoryBarrier; -extern PFNGLTEXSTORAGE2DPROC gl_TexStorage2D; +extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; +extern PFNGLMEMORYBARRIERPROC glMemoryBarrier; +extern PFNGLTEXSTORAGE2DPROC glTexStorage2D; +extern PFNGLPOPDEBUGGROUPPROC glPopDebugGroup; // GL4.3 -extern PFNGLCOPYIMAGESUBDATAPROC gl_CopyImageSubData; +extern PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData; +extern PFNGLINVALIDATETEXIMAGEPROC glInvalidateTexImage; +extern PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup; +extern PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert; +extern PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl; // GL4.4 -extern PFNGLCLEARTEXIMAGEPROC gl_ClearTexImage; -extern PFNGLBUFFERSTORAGEPROC gl_BufferStorage; -// GL_ARB_bindless_texture (GL5?) -extern PFNGLGETTEXTURESAMPLERHANDLEARBPROC gl_GetTextureSamplerHandleARB; -extern PFNGLMAKETEXTUREHANDLERESIDENTARBPROC gl_MakeTextureHandleResidentARB; -extern PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC gl_MakeTextureHandleNonResidentARB; -extern PFNGLUNIFORMHANDLEUI64VARBPROC gl_UniformHandleui64vARB; -extern PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC gl_ProgramUniformHandleui64vARB; +extern PFNGLCLEARTEXIMAGEPROC glClearTexImage; +extern PFNGLBUFFERSTORAGEPROC glBufferStorage; // GL4.5 -extern PFNGLCREATETEXTURESPROC gl_CreateTextures; -extern PFNGLTEXTURESTORAGE2DPROC gl_TextureStorage2D; -extern PFNGLTEXTURESUBIMAGE2DPROC gl_TextureSubImage2D; -extern PFNGLCOPYTEXTURESUBIMAGE2DPROC gl_CopyTextureSubImage2D; -extern PFNGLBINDTEXTUREUNITPROC gl_BindTextureUnit; -extern PFNGLGETTEXTUREIMAGEPROC gl_GetTextureImage; - -extern PFNGLCREATEFRAMEBUFFERSPROC gl_CreateFramebuffers; -extern PFNGLCLEARNAMEDFRAMEBUFFERFVPROC gl_ClearNamedFramebufferfv; -extern PFNGLCLEARNAMEDFRAMEBUFFERIVPROC gl_ClearNamedFramebufferiv; -extern PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC gl_ClearNamedFramebufferuiv; -extern PFNGLNAMEDFRAMEBUFFERTEXTUREPROC gl_NamedFramebufferTexture; -extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC gl_NamedFramebufferDrawBuffers; -extern PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC gl_NamedFramebufferReadBuffer; -extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC gl_CheckNamedFramebufferStatus; - -extern PFNGLCREATEBUFFERSPROC gl_CreateBuffers; -extern PFNGLNAMEDBUFFERSTORAGEPROC gl_NamedBufferStorage; -extern PFNGLNAMEDBUFFERDATAPROC gl_NamedBufferData; -extern PFNGLNAMEDBUFFERSUBDATAPROC gl_NamedBufferSubData; -extern PFNGLMAPNAMEDBUFFERPROC gl_MapNamedBuffer; -extern PFNGLMAPNAMEDBUFFERRANGEPROC gl_MapNamedBufferRange; -extern PFNGLUNMAPNAMEDBUFFERPROC gl_UnmapNamedBuffer; - -extern PFNGLCREATESAMPLERSPROC gl_CreateSamplers; -extern PFNGLCREATEPROGRAMPIPELINESPROC gl_CreateProgramPipelines; - -extern PFNGLCLIPCONTROLPROC gl_ClipControl; - -#else -#define gl_ActiveTexture glActiveTexture -#define gl_BlendColor glBlendColor -#define gl_AttachShader glAttachShader -#define gl_BindBuffer glBindBuffer -#define gl_BindBufferBase glBindBufferBase -#define gl_BindFramebuffer glBindFramebuffer -#define gl_BindSampler glBindSampler -#define gl_BindVertexArray glBindVertexArray -#define gl_BlendEquationSeparate glBlendEquationSeparate -#define gl_BlendFuncSeparate glBlendFuncSeparate -#define gl_BlitFramebuffer glBlitFramebuffer -#define gl_BufferData glBufferData -#define gl_CheckFramebufferStatus glCheckFramebufferStatus -#define gl_ClearBufferfv glClearBufferfv -#define gl_ClearBufferiv glClearBufferiv -#define gl_ClearBufferuiv glClearBufferuiv -#define gl_CompileShader glCompileShader -#define gl_ColorMask glColorMask -#define gl_CreateProgram glCreateProgram -#define gl_CreateShader glCreateShader -#define gl_CreateShaderProgramv glCreateShaderProgramv -#define gl_DeleteBuffers glDeleteBuffers -#define gl_DeleteFramebuffers glDeleteFramebuffers -#define gl_DeleteProgram glDeleteProgram -#define gl_DeleteSamplers glDeleteSamplers -#define gl_DeleteShader glDeleteShader -#define gl_DeleteVertexArrays glDeleteVertexArrays -#define gl_DetachShader glDetachShader -#define gl_DrawBuffers glDrawBuffers -#define gl_DrawElementsBaseVertex glDrawElementsBaseVertex -#define gl_EnableVertexAttribArray glEnableVertexAttribArray -#define gl_FramebufferRenderbuffer glFramebufferRenderbuffer -#define gl_FramebufferTexture2D glFramebufferTexture2D -#define gl_GenBuffers glGenBuffers -#define gl_GenFramebuffers glGenFramebuffers -#define gl_GenSamplers glGenSamplers -#define gl_GenVertexArrays glGenVertexArrays -#define gl_GetBufferParameteriv glGetBufferParameteriv -#define gl_GetDebugMessageLogARB glGetDebugMessageLogARB -#define gl_GetProgramInfoLog glGetProgramInfoLog -#define gl_GetProgramiv glGetProgramiv -#define gl_GetShaderiv glGetShaderiv -#define gl_GetStringi glGetStringi -#define gl_IsFramebuffer glIsFramebuffer -#define gl_LinkProgram glLinkProgram -#define gl_MapBuffer glMapBuffer -#define gl_MapBufferRange glMapBufferRange -#define gl_ProgramParameteri glProgramParameteri -#define gl_SamplerParameterf glSamplerParameterf -#define gl_SamplerParameteri glSamplerParameteri -#define gl_ShaderSource glShaderSource -#define gl_Uniform1i glUniform1i -#define gl_UnmapBuffer glUnmapBuffer -#define gl_UseProgramStages glUseProgramStages -#define gl_VertexAttribIPointer glVertexAttribIPointer -#define gl_VertexAttribPointer glVertexAttribPointer -#define gl_TexStorage2D glTexStorage2D -#define gl_BufferSubData glBufferSubData - -#define gl_BindProgramPipeline glBindProgramPipeline -#define gl_DeleteProgramPipelines glDeleteProgramPipelines -#define gl_GenProgramPipelines glGenProgramPipelines -#define gl_GetProgramPipelineiv glGetProgramPipelineiv -#define gl_ValidateProgramPipeline glValidateProgramPipeline -#define gl_GetProgramPipelineInfoLog glGetProgramPipelineInfoLog - -#define gl_UseProgram glUseProgram -#define gl_GetShaderInfoLog glGetShaderInfoLog -#define gl_ProgramUniform1i glProgramUniform1i - -#endif - +extern PFNGLCREATETEXTURESPROC glCreateTextures; +extern PFNGLTEXTURESTORAGE2DPROC glTextureStorage2D; +extern PFNGLTEXTURESUBIMAGE2DPROC glTextureSubImage2D; +extern PFNGLCOPYTEXTURESUBIMAGE2DPROC glCopyTextureSubImage2D; +extern PFNGLBINDTEXTUREUNITPROC glBindTextureUnit; +extern PFNGLGETTEXTUREIMAGEPROC glGetTextureImage; +extern PFNGLTEXTUREPARAMETERIPROC glTextureParameteri; + +extern PFNGLCREATEFRAMEBUFFERSPROC glCreateFramebuffers; +extern PFNGLCLEARNAMEDFRAMEBUFFERFVPROC glClearNamedFramebufferfv; +extern PFNGLCLEARNAMEDFRAMEBUFFERIVPROC glClearNamedFramebufferiv; +extern PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC glClearNamedFramebufferuiv; +extern PFNGLNAMEDFRAMEBUFFERTEXTUREPROC glNamedFramebufferTexture; +extern PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC glNamedFramebufferDrawBuffers; +extern PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC glNamedFramebufferReadBuffer; +extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC glCheckNamedFramebufferStatus; + +extern PFNGLCREATEBUFFERSPROC glCreateBuffers; +extern PFNGLNAMEDBUFFERSTORAGEPROC glNamedBufferStorage; +extern PFNGLNAMEDBUFFERDATAPROC glNamedBufferData; +extern PFNGLNAMEDBUFFERSUBDATAPROC glNamedBufferSubData; +extern PFNGLMAPNAMEDBUFFERPROC glMapNamedBuffer; +extern PFNGLMAPNAMEDBUFFERRANGEPROC glMapNamedBufferRange; +extern PFNGLUNMAPNAMEDBUFFERPROC glUnmapNamedBuffer; +extern PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC glFlushMappedNamedBufferRange; + +extern PFNGLCREATESAMPLERSPROC glCreateSamplers; +extern PFNGLCREATEPROGRAMPIPELINESPROC glCreateProgramPipelines; + +extern PFNGLCLIPCONTROLPROC glClipControl; +extern PFNGLTEXTUREBARRIERPROC glTextureBarrier; + +namespace Emulate_DSA { + extern void SetFramebufferTarget(GLenum target); + extern void SetBufferTarget(GLenum target); + extern void Init(); +} namespace GLLoader { - bool check_gl_version(uint32 major, uint32 minor); + bool check_gl_version(int major, int minor); void init_gl_function(); bool check_gl_supported_extension(); @@ -425,9 +345,8 @@ extern bool found_GL_ARB_shader_image_load_store; extern bool found_GL_ARB_clear_texture; extern bool found_GL_ARB_buffer_storage; - extern bool found_GL_ARB_shader_subroutine; - extern bool found_GL_ARB_bindless_texture; - extern bool found_GL_ARB_explicit_uniform_location; extern bool found_GL_ARB_clip_control; extern bool found_GL_ARB_direct_state_access; + extern bool found_GL_ARB_texture_barrier; + extern bool found_GL_EXT_texture_filter_anisotropic; } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GLState.cpp pcsx2-1.4.0/plugins/GSdx/GLState.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GLState.cpp 2014-09-30 20:12:56.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GLState.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,57 +23,39 @@ #include "GLState.h" namespace GLState { - GLuint fbo = 0; - GSVector2i viewport(0, 0); - GSVector4i scissor(0, 0, 0, 0); - - bool blend = false; - GLenum eq_RGB = 0; - GLenum eq_A = 0; - GLenum f_sRGB = 0; - GLenum f_dRGB = 0; - GLenum f_sA = 0; - GLenum f_dA = 0; - bool r_msk = true; - bool g_msk = true; - bool b_msk = true; - bool a_msk = true; - float bf = 0.0; - - bool depth = false; - GLenum depth_func = 0; - bool depth_mask = false; - - bool stencil = false; - GLenum stencil_func = 0; - GLenum stencil_pass = 0; - - GLuint ubo = 0; - - GLuint ps_ss = 0; - - GLuint rt = 0; - GLuint ds = 0; - GLuint tex_unit[2] = {0, 0}; - GLuint tex = 0; - GLuint64 tex_handle[2] = { 0, 0}; - bool dirty_ressources = false; - - GLuint ps = 0; - GLuint gs = 0; - GLuint vs = 0; - GLuint program = 0; - bool dirty_prog = false; - bool dirty_subroutine_vs = false; - bool dirty_subroutine_ps = false; -#if 0 - struct { - GSVertexBufferStateOGL* vb; - GSDepthStencilOGL* dss; - GSBlendStateOGL* bs; - float bf; // blend factor - } m_state; -#endif + GLuint fbo; + GSVector2i viewport; + GSVector4i scissor; + + bool blend; + uint16 eq_RGB; + uint16 f_sRGB; + uint16 f_dRGB; + uint8 bf; + uint32 wrgba; + + bool depth; + GLenum depth_func; + bool depth_mask; + + bool stencil; + GLenum stencil_func; + GLenum stencil_pass; + + GLuint ubo; + + GLuint ps_ss; + + GLuint rt; + GLuint ds; + GLuint tex_unit[4]; + GLuint64 tex_handle[4]; + + GLuint ps; + GLuint gs; + GLuint vs; + GLuint program; + bool dirty_prog; void Clear() { fbo = 0; @@ -82,16 +64,10 @@ blend = false; eq_RGB = 0; - eq_A = 0; f_sRGB = 0; f_dRGB = 0; - f_sA = 0; - f_dA = 0; - r_msk = true; - g_msk = true; - b_msk = true; - a_msk = true; - bf = 0.0; + bf = 0; + wrgba = 0xF; depth = false; depth_func = 0; @@ -107,19 +83,15 @@ rt = 0; ds = 0; - tex_unit[0] = 0; - tex_unit[1] = 0; - tex = 0; - tex_handle[0] = 0; - tex_handle[1] = 0; + for (size_t i = 0; i < countof(tex_unit); i++) + tex_unit[i] = 0; + for (size_t i = 0; i < countof(tex_handle); i++) + tex_handle[i] = 0; ps = 0; gs = 0; vs = 0; program = 0; - dirty_prog = false; - dirty_subroutine_vs = false; - dirty_subroutine_ps = false; - dirty_ressources = false; + dirty_prog = true; } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GLState.h pcsx2-1.4.0/plugins/GSdx/GLState.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GLState.h 2014-09-30 20:12:56.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GLState.h 2016-01-05 17:28:08.000000000 +0000 @@ -30,17 +30,11 @@ extern GSVector4i scissor; extern bool blend; - extern GLenum eq_RGB; - extern GLenum eq_A; - extern GLenum f_sRGB; - extern GLenum f_dRGB; - extern GLenum f_sA; - extern GLenum f_dA; - extern bool r_msk; - extern bool g_msk; - extern bool b_msk; - extern bool a_msk; - extern float bf; + extern uint16 eq_RGB; + extern uint16 f_sRGB; + extern uint16 f_dRGB; + extern uint8 bf; + extern uint32 wrgba; extern bool depth; extern GLenum depth_func; @@ -56,18 +50,14 @@ extern GLuint rt; // render target extern GLuint ds; // Depth-Stencil - extern GLuint tex_unit[2]; // shader input texture - extern GLuint tex; // Generic texture (for tex operation) - extern GLuint64 tex_handle[2]; // shader input texture + extern GLuint tex_unit[4]; // shader input texture + extern GLuint64 tex_handle[4]; // shader input texture extern GLuint ps; extern GLuint gs; extern GLuint vs; extern GLuint program; // monolith program (when sso isn't supported) extern bool dirty_prog; - extern bool dirty_subroutine_vs; - extern bool dirty_subroutine_ps; - extern bool dirty_ressources; extern void Clear(); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GPU.cpp pcsx2-1.4.0/plugins/GSdx/GPU.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GPU.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GPU.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -108,7 +108,7 @@ #endif int renderer = theApp.GetConfig("Renderer", 1); - int threads = theApp.GetConfig("extrathreads", 0); + int threads = theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS); switch(renderer) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GPUSettingsDlg.cpp pcsx2-1.4.0/plugins/GSdx/GPUSettingsDlg.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GPUSettingsDlg.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GPUSettingsDlg.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -74,7 +74,7 @@ CheckDlgButton(m_hWnd, IDC_WINDOWED, theApp.GetConfig("windowed", 1)); SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETRANGE, 0, MAKELPARAM(16, 0)); - SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("extrathreads", 0), 0)); + SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS), 0)); UpdateControls(); } @@ -148,4 +148,4 @@ EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS_EDIT), sw); EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS), sw); } -} \ No newline at end of file +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSCapture.cpp pcsx2-1.4.0/plugins/GSdx/GSCapture.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSCapture.cpp 2013-06-17 04:11:10.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSCapture.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,6 +21,8 @@ #include "stdafx.h" #include "GSCapture.h" +#include "GSPng.h" +#include "GSUtil.h" #ifdef _WINDOWS @@ -375,8 +377,11 @@ // GSCapture::GSCapture() - : m_capturing(false) + : m_capturing(false), m_frame(0) + , m_out_dir("/tmp/GSdx_Capture") // FIXME Later add an option { + m_out_dir = theApp.GetConfig("capture_out_dir", "/tmp/GSdx_Capture"); + m_threads = theApp.GetConfig("capture_threads", 4); } GSCapture::~GSCapture() @@ -384,9 +389,10 @@ EndCapture(); } -bool GSCapture::BeginCapture(float fps) +bool GSCapture::BeginCapture(float fps, GSVector2i recomendedResolution, float aspect) { - GSAutoLock lock(this); + printf("Recomended resolution: %d x %d, DAR for muxing: %.4f\n", recomendedResolution.x, recomendedResolution.y, aspect); + std::lock_guard lock(m_lock); ASSERT(fps != 0); @@ -472,6 +478,22 @@ CComQIPtr(m_src)->DeliverNewSegment(); +#elif __linux__ + // Note I think it doesn't support multiple depth creation + GSmkdir(m_out_dir.c_str()); + + // Really cheap recording + m_frame = 0; + // Add option !!! + m_size.x = theApp.GetConfig("capture_resx", 1280); + m_size.y = theApp.GetConfig("capture_resy", 1024); + +#ifdef __linux__ + for(int i = 0; i < m_threads; i++) { + m_workers.push_back(new GSPng::Worker()); + } +#endif + #endif m_capturing = true; @@ -481,7 +503,7 @@ bool GSCapture::DeliverFrame(const void* bits, int pitch, bool rgba) { - GSAutoLock lock(this); + std::lock_guard lock(m_lock); if(bits == NULL || pitch == 0) { @@ -499,6 +521,14 @@ return true; } +#elif __linux__ + + std::string out_file = m_out_dir + format("/frame.%010d.png", m_frame); + //GSPng::Save(GSPng::RGB_PNG, out_file, (char*)bits, m_size.x, m_size.y, pitch); + m_workers[m_frame%m_threads]->Push(shared_ptr(new GSPng::Transaction(GSPng::RGB_PNG, out_file, (char*)bits, m_size.x, m_size.y, pitch))); + + m_frame++; + #endif return false; @@ -506,7 +536,7 @@ bool GSCapture::EndCapture() { - GSAutoLock lock(this); + std::lock_guard lock(m_lock); #ifdef _WINDOWS @@ -524,6 +554,13 @@ m_graph = NULL; } +#elif __linux__ + for(size_t i = 0; i < m_workers.size(); i++) { + m_workers[i]->Wait(); + } + + m_frame = 0; + #endif m_capturing = false; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSCaptureDlg.cpp pcsx2-1.4.0/plugins/GSdx/GSCaptureDlg.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSCaptureDlg.cpp 2013-07-01 21:28:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSCaptureDlg.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -64,7 +64,7 @@ m_codecs.clear(); - string selected = theApp.GetConfig("CaptureVideoCodecDisplayName", ""); + _bstr_t selected = theApp.GetConfig("CaptureVideoCodecDisplayName", "").c_str(); ComboBoxAppend(IDC_CODECS, "Uncompressed", 0, true); @@ -110,7 +110,7 @@ string s(c.FriendlyName.begin(), c.FriendlyName.end()); - ComboBoxAppend(IDC_CODECS, s.c_str(), (LPARAM)&m_codecs.back(), s == selected); + ComboBoxAppend(IDC_CODECS, s.c_str(), (LPARAM)&m_codecs.back(), c.DisplayName == selected); } EndEnumSysDev } @@ -199,9 +199,7 @@ if (ris != 2) { - wstring s = wstring(c.DisplayName); - - theApp.SetConfig("CaptureVideoCodecDisplayName", string(s.begin(), s.end()).c_str()); + theApp.SetConfig("CaptureVideoCodecDisplayName", c.DisplayName); } else { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSCapture.h pcsx2-1.4.0/plugins/GSdx/GSCapture.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSCapture.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSCapture.h 2016-01-05 17:28:08.000000000 +0000 @@ -22,29 +22,37 @@ #pragma once #include "GSVector.h" -#include "GSThread.h" +#include "GSPng.h" #ifdef _WINDOWS #include "GSCaptureDlg.h" #endif -class GSCapture : protected GSCritSec +class GSCapture { + std::recursive_mutex m_lock; bool m_capturing; GSVector2i m_size; + uint64 m_frame; + std::string m_out_dir; + int m_threads; #ifdef _WINDOWS CComPtr m_graph; CComPtr m_src; + #elif __linux__ + + vector m_workers; + #endif public: GSCapture(); virtual ~GSCapture(); - bool BeginCapture(float fps); + bool BeginCapture(float fps, GSVector2i recomendedResolution, float aspect); bool DeliverFrame(const void* bits, int pitch, bool rgba); bool EndCapture(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSClut.cpp pcsx2-1.4.0/plugins/GSdx/GSClut.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSClut.cpp 2014-12-12 21:31:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSClut.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -185,10 +185,10 @@ template void GSClut::WriteCLUT32_CSM2(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT) { - GSOffset* o = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT32); + GSOffset* off = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT32); - uint32* RESTRICT s = &m_mem->m_vm32[o->pixel.row[TEXCLUT.COV]]; - int* RESTRICT col = &o->pixel.col[0][TEXCLUT.COU << 4]; + uint32* RESTRICT s = &m_mem->m_vm32[off->pixel.row[TEXCLUT.COV]]; + int* RESTRICT col = &off->pixel.col[0][TEXCLUT.COU << 4]; uint16* RESTRICT clut = m_clut + ((TEX0.CSA & 15) << 4); @@ -203,10 +203,10 @@ template void GSClut::WriteCLUT16_CSM2(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT) { - GSOffset* o = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT16); + GSOffset* off = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT16); - uint16* RESTRICT s = &m_mem->m_vm16[o->pixel.row[TEXCLUT.COV]]; - int* RESTRICT col = &o->pixel.col[0][TEXCLUT.COU << 4]; + uint16* RESTRICT s = &m_mem->m_vm16[off->pixel.row[TEXCLUT.COV]]; + int* RESTRICT col = &off->pixel.col[0][TEXCLUT.COU << 4]; uint16* RESTRICT clut = m_clut + (TEX0.CSA << 4); @@ -218,10 +218,10 @@ template void GSClut::WriteCLUT16S_CSM2(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT) { - GSOffset* o = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT16S); + GSOffset* off = m_mem->GetOffset(TEX0.CBP, TEXCLUT.CBW, PSM_PSMCT16S); - uint16* RESTRICT s = &m_mem->m_vm16[o->pixel.row[TEXCLUT.COV]]; - int* RESTRICT col = &o->pixel.col[0][TEXCLUT.COU << 4]; + uint16* RESTRICT s = &m_mem->m_vm16[off->pixel.row[TEXCLUT.COV]]; + int* RESTRICT col = &off->pixel.col[0][TEXCLUT.COU << 4]; uint16* RESTRICT clut = m_clut + (TEX0.CSA << 4); @@ -231,6 +231,7 @@ } } +#if 0 void GSClut::Read(const GIFRegTEX0& TEX0) { if(m_read.IsDirty(TEX0)) @@ -276,6 +277,7 @@ } } } +#endif void GSClut::Read32(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA) { @@ -513,6 +515,7 @@ d[3] = v3; } +#if 0 __forceinline void GSClut::ReadCLUT_T32_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64) { GSVector4i* s = (GSVector4i*)clut; @@ -536,7 +539,9 @@ ExpandCLUT64_T32(s2, s0, s1, s2, s3, &d64[64]); ExpandCLUT64_T32(s3, s0, s1, s2, s3, &d64[96]); } +#endif +#if 0 void GSClut::ReadCLUT_T16_I8(const uint16* RESTRICT clut, uint32* RESTRICT dst) { for(int i = 0; i < 256; i += 16) @@ -544,7 +549,9 @@ ReadCLUT_T16_I4(&clut[i], &dst[i]); } } +#endif +#if 0 __forceinline void GSClut::ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst) { GSVector4i* s = (GSVector4i*)clut; @@ -558,7 +565,9 @@ d[2] = v1.upl16(); d[3] = v1.uph16(); } +#endif +#if 0 __forceinline void GSClut::ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64) { GSVector4i* s = (GSVector4i*)clut; @@ -583,6 +592,7 @@ ExpandCLUT64_T16(s2, s0, s1, s2, s3, &d64[64]); ExpandCLUT64_T16(s3, s0, s1, s2, s3, &d64[96]); } +#endif void GSClut::ExpandCLUT64_T32_I8(const uint32* RESTRICT src, uint64* RESTRICT dst) { @@ -626,6 +636,7 @@ dst[1] = lo.uph32(hi); } +#if 0 void GSClut::ExpandCLUT64_T16_I8(const uint32* RESTRICT src, uint64* RESTRICT dst) { GSVector4i* s = (GSVector4i*)src; @@ -641,6 +652,7 @@ ExpandCLUT64_T16(s2, s0, s1, s2, s3, &d[64]); ExpandCLUT64_T16(s3, s0, s1, s2, s3, &d[96]); } +#endif __forceinline void GSClut::ExpandCLUT64_T16(const GSVector4i& hi, const GSVector4i& lo0, const GSVector4i& lo1, const GSVector4i& lo2, const GSVector4i& lo3, GSVector4i* dst) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSClut.h pcsx2-1.4.0/plugins/GSdx/GSClut.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSClut.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSClut.h 2016-01-05 17:28:08.000000000 +0000 @@ -79,14 +79,14 @@ static void WriteCLUT_T16_I4_CSM1(const uint16* RESTRICT src, uint16* RESTRICT clut); static void ReadCLUT_T32_I8(const uint16* RESTRICT clut, uint32* RESTRICT dst); static void ReadCLUT_T32_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst); - static void ReadCLUT_T32_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64); - static void ReadCLUT_T16_I8(const uint16* RESTRICT clut, uint32* RESTRICT dst); - static void ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst); - static void ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64); + //static void ReadCLUT_T32_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64); + //static void ReadCLUT_T16_I8(const uint16* RESTRICT clut, uint32* RESTRICT dst); + //static void ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst); + //static void ReadCLUT_T16_I4(const uint16* RESTRICT clut, uint32* RESTRICT dst32, uint64* RESTRICT dst64); static void ExpandCLUT64_T32_I8(const uint32* RESTRICT src, uint64* RESTRICT dst); static void ExpandCLUT64_T32(const GSVector4i& hi, const GSVector4i& lo0, const GSVector4i& lo1, const GSVector4i& lo2, const GSVector4i& lo3, GSVector4i* dst); static void ExpandCLUT64_T32(const GSVector4i& hi, const GSVector4i& lo, GSVector4i* dst); - static void ExpandCLUT64_T16_I8(const uint32* RESTRICT src, uint64* RESTRICT dst); + //static void ExpandCLUT64_T16_I8(const uint32* RESTRICT src, uint64* RESTRICT dst); static void ExpandCLUT64_T16(const GSVector4i& hi, const GSVector4i& lo0, const GSVector4i& lo1, const GSVector4i& lo2, const GSVector4i& lo3, GSVector4i* dst); static void ExpandCLUT64_T16(const GSVector4i& hi, const GSVector4i& lo, GSVector4i* dst); @@ -99,7 +99,7 @@ void Invalidate(); bool WriteTest(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT); void Write(const GIFRegTEX0& TEX0, const GIFRegTEXCLUT& TEXCLUT); - void Read(const GIFRegTEX0& TEX0); + //void Read(const GIFRegTEX0& TEX0); void Read32(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA); void GetAlphaMinMax32(int& amin, int& amax); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GS.cpp pcsx2-1.4.0/plugins/GSdx/GS.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GS.cpp 2014-12-23 18:39:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -62,14 +62,13 @@ static GSRenderer* s_gs = NULL; static void (*s_irq)() = NULL; static uint8* s_basemem = NULL; -static int s_renderer = -1; +static GSRendererType s_renderer = GSRendererType::Undefined; static bool s_framelimit = true; static bool s_vsync = false; static bool s_exclusive = true; -#ifdef _WINDOWS -static bool s_isgsopen2 = false; // boolean to remove some stuff from the config panel in new PCSX2's/ -#endif -bool gsopen_done = false; // crash guard for GSgetTitleInfo2 +static const char *s_renderer_name = ""; +static const char *s_renderer_type = ""; +bool gsopen_done = false; // crash guard for GSgetTitleInfo2 and GSKeyEvent (replace with lock?) EXPORT_C_(uint32) PS2EgetLibType() { @@ -83,21 +82,12 @@ EXPORT_C_(uint32) PS2EgetLibVersion2(uint32 type) { - const uint32 revision = 0; - const uint32 build = 1; + const uint32 revision = 1; + const uint32 build = 0; return (build << 0) | (revision << 8) | (PS2E_GS_VERSION << 16) | (PLUGIN_VERSION << 24); } -#ifdef _WINDOWS - -EXPORT_C_(void) PS2EsetEmuVersion(const char* emuId, uint32 version) -{ - s_isgsopen2 = true; -} - -#endif - EXPORT_C_(uint32) PS2EgetCpuPlatform() { #ifdef _M_AMD64 @@ -155,7 +145,7 @@ s_gs = NULL; - s_renderer = -1; + s_renderer = GSRendererType::Undefined; #ifdef _WINDOWS @@ -189,25 +179,25 @@ } } -static int _GSopen(void** dsp, char* title, int renderer, int threads = -1) +static int _GSopen(void** dsp, const char* title, GSRendererType renderer, int threads = -1) { GSDevice* dev = NULL; - if(renderer == -1) + if(renderer == GSRendererType::Undefined) { - renderer = theApp.GetConfig("renderer", 0); + renderer = static_cast(theApp.GetConfig("Renderer", static_cast(GSRendererType::Default))); } if(threads == -1) { - threads = theApp.GetConfig("extrathreads", 0); + threads = theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS); } - GSWnd* wnd[2]; + GSWnd* wnd[2] = { NULL, NULL }; try { - if(s_renderer != renderer) + if (s_renderer != renderer) { // Emulator has made a render change request, which requires a completely // new s_gs -- if the emu doesn't save/restore the GS state across this @@ -218,57 +208,119 @@ s_gs = NULL; } - switch(renderer) + const char* renderer_fullname = ""; + const char* renderer_mode = ""; + + switch (renderer) + { + case GSRendererType::DX9_SW: + case GSRendererType::DX1011_SW: + case GSRendererType::Null_SW: + case GSRendererType::OGL_SW: + renderer_mode = "(Software mode)"; + break; + case GSRendererType::DX9_Null: + case GSRendererType::DX1011_Null: + case GSRendererType::Null_Null: + renderer_mode = "(Null mode)"; + break; + case GSRendererType::DX9_OpenCL: + case GSRendererType::DX1011_OpenCL: + case GSRendererType::Null_OpenCL: + case GSRendererType::OGL_OpenCL: + renderer_mode = "(OpenCL)"; + break; + default: + renderer_mode = "(Hardware mode)"; + break; + } + + switch (renderer) { default: #ifdef _WINDOWS - case 0: case 1: case 2: case 14: - dev = new GSDevice9(); + case GSRendererType::DX9_HW: + case GSRendererType::DX9_SW: + case GSRendererType::DX9_Null: + case GSRendererType::DX9_OpenCL: + dev = new GSDevice9(); + s_renderer_name = " D3D9"; + renderer_fullname = "Direct3D9"; break; - case 3: case 4: case 5: case 15: - dev = new GSDevice11(); + case GSRendererType::DX1011_HW: + case GSRendererType::DX1011_SW: + case GSRendererType::DX1011_Null: + case GSRendererType::DX1011_OpenCL: + dev = new GSDevice11(); + s_renderer_name = " D3D11"; + renderer_fullname = "Direct3D11"; break; #endif - case 9: case 10: case 11: case 16: - dev = new GSDeviceNull(); + case GSRendererType::Null_HW: + case GSRendererType::Null_SW: + case GSRendererType::Null_Null: + case GSRendererType::Null_OpenCL: + dev = new GSDeviceNull(); + s_renderer_name = " Null"; + renderer_fullname = "Null"; break; - case 12: case 13: case 17: - dev = new GSDeviceOGL(); + case GSRendererType::OGL_HW: + case GSRendererType::OGL_SW: + case GSRendererType::OGL_OpenCL: + dev = new GSDeviceOGL(); + s_renderer_name = " OGL"; + renderer_fullname = "OpenGL"; break; } - if(dev == NULL) + printf("Current Renderer: %s %s\n", renderer_fullname, renderer_mode); + + if (dev == NULL) { return -1; } - if(s_gs == NULL) + if (s_gs == NULL) { - switch(renderer) + switch (renderer) { default: #ifdef _WINDOWS - case 0: + case GSRendererType::DX9_HW: s_gs = (GSRenderer*)new GSRendererDX9(); + s_renderer_type = " HW"; break; - case 3: - s_gs = (GSRenderer*)new GSRendererDX11(); + case GSRendererType::DX1011_HW: + s_gs = (GSRenderer*)new GSRendererDX11(); + s_renderer_type = " HW"; break; #endif - case 12: - s_gs = (GSRenderer*)new GSRendererOGL(); + case GSRendererType::OGL_HW: + s_gs = (GSRenderer*)new GSRendererOGL(); + s_renderer_type = " HW"; break; - case 1: case 4: case 10: case 13: + case GSRendererType::DX9_SW: + case GSRendererType::DX1011_SW: + case GSRendererType::Null_SW: + case GSRendererType::OGL_SW: s_gs = new GSRendererSW(threads); + s_renderer_type = " SW"; break; - case 2: case 5: case 11: + case GSRendererType::DX9_Null: + case GSRendererType::DX1011_Null: + case GSRendererType::Null_Null: s_gs = new GSRendererNull(); + s_renderer_type = " Null"; break; - case 14: case 15: case 16: case 17: + case GSRendererType::DX9_OpenCL: + case GSRendererType::DX1011_OpenCL: + case GSRendererType::Null_OpenCL: + case GSRendererType::OGL_OpenCL: #ifdef ENABLE_OPENCL s_gs = new GSRendererCL(); + s_renderer_type = " OCL"; #else - printf("GSdx error: opencl is disabled\n"); + printf("GSdx error: OpenCL is disabled\n"); #endif break; } @@ -281,9 +333,11 @@ if (s_gs->m_wnd == NULL) { #ifdef _WINDOWS - switch(renderer) + switch (renderer) { - case 12: case 13: case 17: + case GSRendererType::OGL_HW: + case GSRendererType::OGL_SW: + case GSRendererType::OGL_OpenCL: s_gs->m_wnd = new GSWndWGL(); break; default: @@ -291,16 +345,16 @@ break; } #else -#ifdef ENABLE_GLES - wnd[0] = NULL; +#ifdef EGL_SUPPORTED + wnd[0] = new GSWndEGL(); + wnd[1] = new GSWndOGL(); #else wnd[0] = new GSWndOGL(); #endif - wnd[1] = new GSWndEGL(); #endif } } - catch(std::exception& ex) + catch (std::exception& ex) { // Allowing std exceptions to escape the scope of the plugin callstack could // be problematic, because of differing typeids between DLL and EXE compilations. @@ -370,7 +424,7 @@ if (s_gs->m_wnd) { // A window was already attached to s_gs so we also // need to restore the window state (Attach) - s_gs->m_wnd->Attach((void*)((uint32*)(dsp)+1), false); + s_gs->m_wnd->Attach((void*)((uptr*)(dsp)+1), false); } else { // No window found, try to attach a GLX win and retry // with EGL win if failed. @@ -379,7 +433,7 @@ { if (wnd[i] == NULL) continue; - wnd[i]->Attach((void*)((uint32*)(dsp)+1), false); + wnd[i]->Attach((void*)((uptr*)(dsp)+1), false); s_gs->m_wnd = wnd[i]; if (i == 0) delete wnd[1]; @@ -393,14 +447,23 @@ } } } +#endif +#ifdef _WINDOWS + try + { + s_gs->m_wnd->Attach(*dsp, false); + } + catch (GSDXRecoverableError) + { + s_gs->m_wnd->Detach(); + delete s_gs->m_wnd; + s_gs->m_wnd = NULL; + } +#endif if (s_gs->m_wnd == NULL) { return -1; } -#endif -#ifdef _WINDOWS - s_gs->m_wnd->Attach(*dsp, false); -#endif } if(!s_gs->CreateDevice(dev)) @@ -413,46 +476,64 @@ return -1; } + + if (renderer == GSRendererType::OGL_HW && theApp.GetConfig("debug_glsl_shader", 0) == 2) { + printf("GSdx: test OpenGL shader. Please wait...\n\n"); + static_cast(s_gs->m_dev)->SelfShaderTest(); + printf("\nGSdx: test OpenGL shader done. It will now exit\n"); + return -1; + } return 0; } EXPORT_C_(int) GSopen2(void** dsp, uint32 flags) { -#ifdef __linux__ - // Use ogl renderer as default otherwise it crash at startup - // GSRenderOGL only GSDeviceOGL (not GSDeviceNULL) - int renderer = theApp.GetConfig("renderer", 12); + static bool stored_toggle_state = false; + bool toggle_state = !!(flags & 4); + + GSRendererType renderer = s_renderer; + // Fresh start up or config file changed + if (renderer == GSRendererType::Undefined) + { +#ifdef _WIN32 + GSRendererType default_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? GSRendererType::DX1011_HW : GSRendererType::DX9_HW; #else - int renderer = theApp.GetConfig("renderer", 0); + GSRendererType default_renderer = GSRendererType::Default; #endif - - if(flags & 4) + renderer = static_cast(theApp.GetConfig("Renderer", static_cast(default_renderer))); + } + else if (stored_toggle_state != toggle_state) { -#ifdef _WINDOWS - int best_sw_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? 4 : 1; // dx11 / dx9 sw +#ifdef _WIN32 + GSRendererType best_sw_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? GSRendererType::DX1011_SW : GSRendererType::DX9_SW; + + + switch (renderer) { + // Use alternative renderer (SW if currently using HW renderer, and vice versa, keeping the same API and API version) + case GSRendererType::DX9_SW: renderer = GSRendererType::DX9_HW; break; + case GSRendererType::DX9_HW: renderer = GSRendererType::DX9_SW; break; + case GSRendererType::DX1011_SW: renderer = GSRendererType::DX1011_HW; break; + case GSRendererType::DX1011_HW: renderer = GSRendererType::DX1011_SW; break; + case GSRendererType::OGL_SW: renderer = GSRendererType::OGL_HW; break; + case GSRendererType::OGL_HW: renderer = GSRendererType::OGL_SW; break; + default: renderer = best_sw_renderer; break;// If wasn't using one of the above mentioned ones, use best SW renderer. - switch(renderer){ - // Use alternative renderer (SW if currently using HW renderer, and vice versa, keeping the same DX level) - case 1: renderer = 0; break; // DX9: SW to HW - case 0: renderer = 1; break; // DX9: HW to SW - case 4: renderer = 3; break; // DX11: SW to HW - case 3: renderer = 4; break; // DX11: HW to SW - case 13: renderer = 12; break; // OGL: SW to HW - case 12: renderer = 13; break; // OGL: HW to SW - default: renderer = best_sw_renderer; // If wasn't using DX (e.g. SDL), use best SW renderer. } #endif #ifdef __linux__ switch(renderer) { - case 13: renderer = 12; break; // OGL: SW to HW - case 12: renderer = 13; break; // OGL: HW to SW + // Use alternative renderer (SW if currently using HW renderer, and vice versa) + case GSRendererType::OGL_SW: renderer = GSRendererType::OGL_HW; break; + case GSRendererType::OGL_HW: renderer = GSRendererType::OGL_SW; break; + default: renderer = GSRendererType::OGL_SW; break; // fallback to OGL SW } #endif } + stored_toggle_state = toggle_state; - int retval = _GSopen(dsp, NULL, renderer); + int retval = _GSopen(dsp, "", renderer); if (s_gs != NULL) s_gs->SetAspectRatio(0); // PCSX2 manages the aspect ratios @@ -462,7 +543,7 @@ return retval; } -EXPORT_C_(int) GSopen(void** dsp, char* title, int mt) +EXPORT_C_(int) GSopen(void** dsp, const char* title, int mt) { /* if(!XInitThreads()) return -1; @@ -472,7 +553,7 @@ XCloseDisplay(display); */ - int renderer = 0; + GSRendererType renderer = GSRendererType::Default; // Legacy GUI expects to acquire vsync from the configuration files. @@ -484,7 +565,7 @@ #ifdef _WINDOWS - renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? 4 : 1; // dx11 / dx9 sw + renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? GSRendererType::DX1011_SW : GSRendererType::DX9_SW; #endif @@ -494,7 +575,7 @@ { // normal init - renderer = theApp.GetConfig("renderer", 0); + renderer = static_cast(theApp.GetConfig("Renderer", static_cast(GSRendererType::Default))); } *dsp = NULL; @@ -546,6 +627,7 @@ EXPORT_C GSinitReadFIFO(uint8* mem) { + GL_PERF("Init Read FIFO1"); try { s_gs->InitReadFIFO(mem, 1); @@ -568,6 +650,7 @@ EXPORT_C GSinitReadFIFO2(uint8* mem, uint32 size) { + GL_PERF("Init Read FIFO2"); try { s_gs->InitReadFIFO(mem, size); @@ -724,8 +807,8 @@ if(!GSUtil::CheckSSE()) return; #ifdef _WINDOWS - - if(GSSettingsDlg(s_isgsopen2).DoModal() == IDOK) + GSDialog::InitCommonControls(); + if(GSSettingsDlg().DoModal() == IDOK) { if(s_gs != NULL && s_gs->m_wnd->IsManaged()) { @@ -733,15 +816,20 @@ GSshutdown(); } + // Force a reload of the gs state + s_renderer = GSRendererType::Undefined; } #else if (RunLinuxDialog()) { theApp.ReloadConfig(); + // Force a reload of the gs state + s_renderer = GSRendererType::Undefined; } #endif + } catch (GSDXRecoverableError) { } @@ -812,12 +900,22 @@ printf("GSdx: no s_gs for recording\n"); return 0; } +#ifdef __linux__ + if (theApp.GetConfig("capture_enabled", 0)) { + printf("GSdx: Recording is disabled\n"); + return 0; + } +#endif if(start & 1) { printf("GSdx: Recording start command\n"); - if( s_gs->BeginCapture() ) + if (s_gs->BeginCapture()) { pt(" - Capture started\n"); + } else { + pt(" - Capture cancelled\n"); + return 0; + } } else { @@ -841,21 +939,15 @@ EXPORT_C GSgetTitleInfo2(char* dest, size_t length) { - if (gsopen_done == false) { - //printf("GSdx: GSgetTitleInfo but GSOpen not yet done. Ignoring\n"); - return; - } - string s = "GSdx"; + s.append(s_renderer_name).append(s_renderer_type); // TODO: this gets called from a different thread concurrently with GSOpen (on linux) - if(s_gs == NULL) return; - - if(s_gs->m_GStitleInfoBuffer[0]) + if (gsopen_done && s_gs != NULL && s_gs->m_GStitleInfoBuffer[0]) { - GSAutoLock lock(&s_gs->m_pGSsetTitle_Crit); + std::lock_guard lock(s_gs->m_pGSsetTitle_Crit); - s = format("GSdx | %s", s_gs->m_GStitleInfoBuffer); + s.append(" | ").append(s_gs->m_GStitleInfoBuffer); if(s.size() > length - 1) { @@ -976,13 +1068,13 @@ EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) { - int renderer = -1; + GSRendererType renderer = GSRendererType::Undefined; { char* start = lpszCmdLine; char* end = NULL; long n = strtol(lpszCmdLine, &end, 10); - if(end > start) {renderer = n; lpszCmdLine = end;} + if(end > start) {renderer = static_cast(n); lpszCmdLine = end;} } while(*lpszCmdLine == ' ') lpszCmdLine++; @@ -1338,13 +1430,13 @@ printf("%6d %6d | ", (int)((float)trlen * n / (end - start) / 1000), (int)((float)(w * h) * n / (end - start) / 1000)); - const GSOffset* o = mem->GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); + const GSOffset* off = mem->GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); start = clock(); for(int j = 0; j < n; j++) { - (mem->*rtx)(o, r, ptr, w * 4, TEXA); + (mem->*rtx)(off, r, ptr, w * 4, TEXA); } end = clock(); @@ -1357,7 +1449,7 @@ for(int j = 0; j < n; j++) { - (mem->*rtxP)(o, r, ptr, w, TEXA); + (mem->*rtxP)(off, r, ptr, w, TEXA); } end = clock(); @@ -1427,6 +1519,7 @@ #include #include // ftime(), struct timeb +#include "GSLzma.h" inline unsigned long timeGetTime() { @@ -1436,142 +1529,119 @@ return (unsigned long)(t.time*1000 + t.millitm); } -void _fread(void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - static uint32 read_cnt = 0; - read_cnt++; - - size_t result = fread(ptr, size, nmemb, stream); - if (result != nmemb) { - fprintf(stderr, "Read error\n"); - exit(read_cnt); - } -} - // Note EXPORT_C GSReplay(char* lpszCmdLine, int renderer) { GLLoader::in_replayer = true; -// lpszCmdLine: -// First parameter is the renderer. -// Second parameter is the gs file to load and run. - -//EXPORT_C GSReplay(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow) -#if 0 - int renderer = -1; - - { - char* start = lpszCmdLine; - char* end = NULL; - long n = strtol(lpszCmdLine, &end, 10); - if(end > start) {renderer = n; lpszCmdLine = end;} - } + GSRendererType m_renderer; + // Allow to easyly switch between SW/HW renderer -> this effectively removes the ability to select the renderer by function args + m_renderer = static_cast(theApp.GetConfig("Renderer", static_cast(GSRendererType::Default))); + // alternatively: + // m_renderer = static_cast(renderer); - while(*lpszCmdLine == ' ') lpszCmdLine++; - - ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS); -#endif - // Allow to easyly switch between SW/HW renderer - renderer = theApp.GetConfig("renderer", 12); - if (renderer != 12 && renderer != 13) + if (m_renderer != GSRendererType::OGL_HW && m_renderer != GSRendererType::OGL_SW) { - fprintf(stderr, "wrong renderer selected %d\n", renderer); + fprintf(stderr, "wrong renderer selected %d\n", static_cast(m_renderer)); return; } + struct Packet {uint8 type, param; uint32 size, addr; vector buff;}; + + list packets; + vector buff; vector stats; stats.clear(); + uint8 regs[0x2000]; - if(FILE* fp = fopen(lpszCmdLine, "rb")) - { - //Console console("GSdx", true); + GSinit(); - GSinit(); + GSsetBaseMem(regs); - uint8 regs[0x2000]; - GSsetBaseMem(regs); + s_vsync = !!theApp.GetConfig("vsync", 0); - s_vsync = !!theApp.GetConfig("vsync", 0); + void* hWnd = NULL; - void* hWnd = NULL; + int err = _GSopen((void**)&hWnd, "", m_renderer); + if (err != 0) { + fprintf(stderr, "Error failed to GSopen\n"); + return; + } + if (s_gs->m_wnd == NULL) return; - int err = _GSopen((void**)&hWnd, "", renderer); - if (err != 0) { - fprintf(stderr, "Error failed to GSopen\n"); - return; - } - if (s_gs->m_wnd == NULL) return; + { // Read .gs content + std::string f(lpszCmdLine); +#ifdef LZMA_SUPPORTED + GSDumpFile* file = (f.size() >= 4) && (f.compare(f.size()-3, 3, ".xz") == 0) + ? (GSDumpFile*) new GSDumpLzma(lpszCmdLine) + : (GSDumpFile*) new GSDumpRaw(lpszCmdLine); +#else + GSDumpFile* file = new GSDumpRaw(lpszCmdLine); +#endif uint32 crc; - _fread(&crc, 4, 1, fp); + file->Read(&crc, 4); GSsetGameCRC(crc, 0); GSFreezeData fd; - _fread(&fd.size, 4, 1, fp); + file->Read(&fd.size, 4); fd.data = new uint8[fd.size]; - _fread(fd.data, fd.size, 1, fp); + file->Read(fd.data, fd.size); + GSfreeze(FREEZE_LOAD, &fd); delete [] fd.data; - _fread(regs, 0x2000, 1, fp); + file->Read(regs, 0x2000); GSvsync(1); - struct Packet {uint8 type, param; uint32 size, addr; vector buff;}; - - list packets; - vector buff; - int type; - while((type = fgetc(fp)) != EOF) + while(!file->IsEof()) { + uint8 type; + file->Read(&type, 1); + Packet* p = new Packet(); - p->type = (uint8)type; + p->type = type; switch(type) { case 0: - - p->param = (uint8)fgetc(fp); - - _fread(&p->size, 4, 1, fp); + file->Read(&p->param, 1); + file->Read(&p->size, 4); switch(p->param) { case 0: p->buff.resize(0x4000); p->addr = 0x4000 - p->size; - _fread(&p->buff[p->addr], p->size, 1, fp); + file->Read(&p->buff[p->addr], p->size); break; case 1: case 2: case 3: p->buff.resize(p->size); - _fread(&p->buff[0], p->size, 1, fp); + file->Read(&p->buff[0], p->size); break; } break; case 1: - - p->param = (uint8)fgetc(fp); + file->Read(&p->param, 1); break; case 2: - - _fread(&p->size, 4, 1, fp); + file->Read(&p->size, 4); break; case 3: - p->buff.resize(0x2000); - _fread(&p->buff[0], 0x2000, 1, fp); + file->Read(&p->buff[0], 0x2000); break; } @@ -1579,30 +1649,38 @@ packets.push_back(p); } - sleep(1); + delete file; + } - //while(IsWindowVisible(hWnd)) - //FIXME map? - int finished = theApp.GetConfig("linux_replay", 1); - unsigned long frame_number = 0; - while(finished > 0) - { - frame_number = 0; - unsigned long start = timeGetTime(); - for(auto i = packets.begin(); i != packets.end(); i++) - { - Packet* p = *i; + sleep(1); - switch(p->type) - { + //while(IsWindowVisible(hWnd)) + //FIXME map? + int finished = theApp.GetConfig("linux_replay", 1); + if (theApp.GetConfig("dump", 0)) { + fprintf(stderr, "Dump is enabled. Replay will be disabled\n"); + finished = 1; + } + unsigned long frame_number = 0; + unsigned long total_frame_nb = 0; + while(finished > 0) + { + frame_number = 0; + unsigned long start = timeGetTime(); + for(auto i = packets.begin(); i != packets.end(); i++) + { + Packet* p = *i; + + switch(p->type) + { case 0: switch(p->param) { - case 0: GSgifTransfer1(&p->buff[0], p->addr); break; - case 1: GSgifTransfer2(&p->buff[0], p->size / 16); break; - case 2: GSgifTransfer3(&p->buff[0], p->size / 16); break; - case 3: GSgifTransfer(&p->buff[0], p->size / 16); break; + case 0: GSgifTransfer1(&p->buff[0], p->addr); break; + case 1: GSgifTransfer2(&p->buff[0], p->size / 16); break; + case 2: GSgifTransfer3(&p->buff[0], p->size / 16); break; + case 3: GSgifTransfer(&p->buff[0], p->size / 16); break; } break; @@ -1627,60 +1705,69 @@ memcpy(regs, &p->buff[0], 0x2000); break; - } } + } + + // Ensure the rendering is complete to measure correctly the time. + glFinish(); + + if (finished > 90) { + sleep(1); + } else { unsigned long end = timeGetTime(); + frame_number = std::max(1ul, frame_number); // avoid a potential division by 0 + fprintf(stderr, "The %ld frames of the scene was render on %ldms\n", frame_number, end - start); fprintf(stderr, "A means of %fms by frame\n", (float)(end - start)/(float)frame_number); stats.push_back((float)(end - start)); - - sleep(1); finished--; + total_frame_nb += frame_number; } + } - if (theApp.GetConfig("linux_replay", 1) > 1) { - // Print some nice stats - // Skip first frame (shader compilation populate the result) - // it divides by 10 the standard deviation... - float n = (float)theApp.GetConfig("linux_replay", 1) - 1.0f; - float mean = 0; - float sd = 0; - for (auto i = stats.begin()+1; i != stats.end(); i++) { - mean += *i; - } - mean = mean/n; - for (auto i = stats.begin()+1; i != stats.end(); i++) { - sd += pow((*i)-mean, 2); - } - sd = sqrt(sd/n); - - fprintf(stderr, "\n\nMean: %fms\n", mean); - fprintf(stderr, "Standard deviation: %fms\n", sd); - fprintf(stderr, "Mean by frame: %fms (%ffps)\n", mean/(float)frame_number, 1000.0f*frame_number/mean); - fprintf(stderr, "Standard deviatin by frame: %fms\n", sd/(float)frame_number); - } + if (theApp.GetConfig("linux_replay", 1) > 1) { + // Print some nice stats + // Skip first frame (shader compilation populate the result) + // it divides by 10 the standard deviation... + float n = (float)theApp.GetConfig("linux_replay", 1) - 1.0f; + float mean = 0; + float sd = 0; + for (auto i = stats.begin()+1; i != stats.end(); i++) { + mean += *i; + } + mean = mean/n; + for (auto i = stats.begin()+1; i != stats.end(); i++) { + sd += pow((*i)-mean, 2); + } + sd = sqrt(sd/n); + + fprintf(stderr, "\n\nMean: %fms\n", mean); + fprintf(stderr, "Standard deviation: %fms\n", sd); + fprintf(stderr, "Mean by frame: %fms (%ffps)\n", mean/(float)frame_number, 1000.0f*frame_number/mean); + fprintf(stderr, "Standard deviatin by frame: %fms\n", sd/(float)frame_number); + } #ifdef ENABLE_OGL_DEBUG_MEM_BW - fprintf(stderr, "memory bandwith. T: %f. V: %f\n", (float)g_texture_upload_byte/(float)frame_number/1024, (float)g_vertex_upload_byte/(float)frame_number/1024); + total_frame_nb *= 1024; + fprintf(stderr, "memory bandwith. T: %f KB/f. V: %f KB/f. U: %f KB/f\n", + (float)g_real_texture_upload_byte/(float)total_frame_nb, + (float)g_vertex_upload_byte/(float)total_frame_nb, + (float)g_uniform_upload_byte/(float)total_frame_nb + ); #endif - for(auto i = packets.begin(); i != packets.end(); i++) - { - delete *i; - } - - packets.clear(); + for(auto i = packets.begin(); i != packets.end(); i++) + { + delete *i; + } - sleep(1); + packets.clear(); - GSclose(); - GSshutdown(); + sleep(1); - fclose(fp); - } else { - fprintf(stderr, "failed to open %s\n", lpszCmdLine); - } + GSclose(); + GSshutdown(); } #endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSCrc.cpp pcsx2-1.4.0/plugins/GSdx/GSCrc.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSCrc.cpp 2014-08-07 10:01:54.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSCrc.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,7 @@ CRC::Game CRC::m_games[] = { {0x00000000, NoTitle, NoRegion, 0}, - {0x2113EA2E, MetalSlug6, NoRegion, 0}, + {0x2113EA2E, MetalSlug6, JP, 0}, {0x42E05BAF, TomoyoAfter, JP, PointListPalette}, {0x7800DC84, Clannad, JP, PointListPalette}, {0xA6167B59, Lamune, JP, PointListPalette}, @@ -63,25 +63,22 @@ {0xC52B466E, FFXII, EU, 0}, //ES {0xE5E71BF9, FFXII, FR, 0}, {0x280AD120, FFXII, JP, 0}, - {0x08C1ED4D, HauntingGround, NoRegion, 0}, + {0x08C1ED4D, HauntingGround, EU, 0}, {0x2CD5794C, HauntingGround, EU, 0}, - //duplicate crc with genji.. {0x7D4EA48F, HauntingGround, EU, 0}, + // {0x7D4EA48F, HauntingGround, EU, 0}, // same CRC as {Genji, EU} {0x867BB945, HauntingGround, JP, 0}, {0xE263BC4B, HauntingGround, JP, 0}, {0x901AAC09, HauntingGround, US, 0}, - {0x8BE3D7B2, ShadowHearts, NoRegion, 0}, - {0xDEFA4763, ShadowHearts, US, 0}, - {0xDDFB18B0, ShadowHearts, JP, 0}, {0x21068223, Okami, US, 0}, - {0x891F223F, Okami, FR, 0}, + {0x891F223F, Okami, EU, 0}, // PAL DE, ES & FR. {0xC5DEFEA0, Okami, JP, 0}, - {0x086273D2, MetalGearSolid3, FR, 0}, - {0x26A6E286, MetalGearSolid3, EU, 0}, + {0x086273D2, MetalGearSolid3, EU, 0}, // - PAL UK & FR + {0x26A6E286, MetalGearSolid3, DE, 0}, {0x9F185CE1, MetalGearSolid3, EU, 0}, - {0x98D4BC93, MetalGearSolid3, EU, 0}, + {0x98D4BC93, MetalGearSolid3, ES, 0}, {0x79ED26AD, MetalGearSolid3, EU, 0}, {0x5E31EA42, MetalGearSolid3, EU, 0}, - {0xD7ED797D, MetalGearSolid3, EU, 0}, + {0xD7ED797D, MetalGearSolid3, DE, 0}, {0x053D2239, MetalGearSolid3, US, 0}, //Metal Gear Solid 3 Subsistence disc1 {0x01B2FA7F, MetalGearSolid3, US, 0}, //Metal Gear Solid 3 Subsistence disc2 {0xAA31B5BF, MetalGearSolid3, US, 0}, @@ -98,11 +95,13 @@ {0xE29C09A3, DBZBT2, KO, 0}, //DragonBall Z Sparking Neo {0x0BAA4387, DBZBT2, JP, 0}, {0x35AA84D1, DBZBT2, NoRegion, 0}, + {0xBE6A9CFB, DBZBT2, NoRegion, 0}, {0x428113C2, DBZBT3, US, 0}, {0xA422BB13, DBZBT3, EU, 0}, + {0xCE93CB30, DBZBT3, JP, 0}, {0xF28D21F1, DBZBT3, JP, 0}, {0x983C53D2, DBZBT3, NoRegion, 0}, - {0x983C53D3, DBZBT3, NoRegion, 0}, + {0x983C53D3, DBZBT3, EU, 0}, {0x9B0E119F, DBZBT3, KO, 0}, //DragonBall Z Sparking Meteo {0x72B3802A, SFEX3, US, 0}, {0x71521863, SFEX3, US, 0}, @@ -120,14 +119,16 @@ {0xE446C9F9, OnePieceGrandAdventure, KO, 0}, {0xCA2073B3, OnePieceGrandBattle, KO, 0}, {0x66953267, OnePieceGrandAdventure, JP, 0}, + {0xE1674F57, OnePieceGrandBattle, EU, 0}, {0x947B933B, OnePieceGrandAdventure, US, 0}, {0xB049DD5E, OnePieceGrandBattle, US, 0}, {0x5D02CC5B, OnePieceGrandBattle, NoRegion, 0}, {0x6F8545DB, ICO, US, 0}, {0xB01A4C95, ICO, JP, 0}, {0x2DF2C1EA, ICO, KO, 0}, - {0x5C991F4E, ICO, NoRegion, 0}, - {0x7ACF7E03, ICO, NoRegion, 0}, + {0x5C991F4E, ICO, EU, 0}, + {0x7ACF7E03, ICO, NoRegion, 0}, // same CRC as {SpyroNewBeginning, NoRegion} + // and as "Twisted Metal - Black" (PAL). {0x788D8B4F, ICO, EU, 0}, {0x29C28734, ICO, CH, 0}, {0xAEAD1CA3, GT4, JP, 0}, @@ -141,10 +142,10 @@ {0xAD66643C, GT3, CH, 0}, // cutie comment {0x6810C3BC, GT3, CH, 0}, //GRAN TURISMO Concept 2002 Tokyo-Geneva {0x85AE91B3, GT3, US, 0}, - {0xC220951A, GT3, NoRegion, 0}, + {0xC220951A, GT3, JP, 0}, {0x9DE5CF65, GT3, JP, 0}, //Gran Turismo 3: A-spec {0x60013EBD, GTConcept, EU, 0}, - {0xB590CE04, GTConcept, NoRegion, 0}, + {0xB590CE04, GTConcept, EU, 0}, {0x0EEF32A3, GTConcept, KO, 0}, //Gran Turismo Concept 2002 Tokyo-Seoul {0xC164550A, WildArms5, JPUNDUB, 0}, {0xC1640D2C, WildArms5, US, 0}, @@ -154,26 +155,24 @@ {0xBBC3EFFA, WildArms4, US, 0}, {0xBBC396EC, WildArms4, US, 0}, //hmm such a small diff in the CRC.. {0x7B2DE9CC, WildArms4, EU, 0}, - {0x8B029334, Manhunt2, NoRegion, 0}, + {0x8B029334, Manhunt2, EU, 0}, + {0x3B0ADBEF, Manhunt2, US, 0}, {0x09F49E37, CrashBandicootWoC, NoRegion, 0}, {0x103B5706, CrashBandicootWoC, US, 0}, //American Greatest Hits release {0x75182BE5, CrashBandicootWoC, US, 0}, {0x5188ABCA, CrashBandicootWoC, US, 0}, {0x3A03D62F, CrashBandicootWoC, EU, 0}, {0x013E349D, ResidentEvil4, US, 0}, - // same CRC as EU {0x6BA2F6B9, ResidentEvil4, NoRegion, 0}, {0xDBB7A559, ResidentEvil4, US, 0}, {0x6BA2F6B9, ResidentEvil4, EU, 0}, {0x60FA8C69, ResidentEvil4, JP, 0}, {0x5F254B7C, ResidentEvil4, KO, 0}, - {0x72E1E60E, Spartan, NoRegion, 0}, + {0x72E1E60E, Spartan, EU, 0}, {0x26689C87, Spartan, JP, 0}, + {0x08277A9E, Spartan, US, 0}, {0xA32F7CD0, AceCombat4, US, 0}, {0x5ED8FB53, AceCombat4, JP, 0}, - {0x1B9B7563, AceCombat4, NoRegion, 0}, - {0xEC432B24, Drakengard2, EU, 0}, - {0x1648E3C9, Drakengard2, US, 0}, - {0xB7ADB13A, Drakengard2, CH, 0}, + {0x1B9B7563, AceCombat4, EU, 0}, {0xFC46EA61, Tekken5, JP, 0}, {0x1F88EE37, Tekken5, EU, 0}, {0x1F88BECD, Tekken5, EU, 0}, //language selector... @@ -181,6 +180,7 @@ {0xEA64EF39, Tekken5, KO, 0}, {0x9E98B8AE, IkkiTousen, JP, 0}, {0xD6385328, GodOfWar, US, 0}, + {0xF2A8D307, GodOfWar, US, 0}, {0xFB0E6D72, GodOfWar, EU, 0}, {0xEB001875, GodOfWar, EU, 0}, {0xCF148C74, GodOfWar, EU, 0}, @@ -188,14 +188,12 @@ {0xBFCC1795, GodOfWar, KO, 0}, {0x9567B7D6, GodOfWar, KO, 0}, {0x9B5C97BA, GodOfWar, KO, 0}, - {0xA61A4C6D, GodOfWar, NoRegion, 0}, + {0xA61A4C6D, GodOfWar, US, 0}, {0xE23D532B, GodOfWar, NoRegion, 0}, - {0xDF1AF973, GodOfWar, NoRegion, 0}, - // same CRC as US {0xD6385328, GodOfWar, NoRegion, 0}, + {0xDF1AF973, GodOfWar, EU, 0}, {0x1A85E924, GodOfWar, NoRegion, 0}, // cutie comment {0x608ACBD3, GodOfWar, CH, 0}, // cutie comment - //same crc as the US version. {0x2F123FD8, GodOfWar2, RU, 0}, - {0x2F123FD8, GodOfWar2, US, 0}, + {0x2F123FD8, GodOfWar2, US, 0}, // same CRC as RU {0x44A8A22A, GodOfWar2, EU, 0}, {0x60BC362B, GodOfWar2, EU, 0}, {0x4340C7C6, GodOfWar2, KO, 0}, @@ -204,17 +202,17 @@ {0x0B82BFF7, GodOfWar2, NoRegion, 0}, {0x5990866F, GodOfWar2, NoRegion, 0}, {0xC4C4FD5F, GodOfWar2, CH, 0}, - {0xDCD9A9F7, GodOfWar2, NoRegion, 0}, + {0xDCD9A9F7, GodOfWar2, EU, 0}, {0xFA0DF523, GodOfWar2, CH, 0}, // cutie comment {0x9FEE3466, GodOfWar2, CH, 0}, // cutie comment - {0x5D482F18, JackieChanAdv, NoRegion, 0}, + {0x5D482F18, JackieChanAdv, EU, 0}, {0xF0A6D880, HarvestMoon, US, 0}, - {0x75C01A04, NamcoXCapcom, US, 0}, - //Same CRC also reported as EU, and we have another US crc... {0xBF6F101F, GiTS, US, 0}, - {0x95CC86EF, GiTS, US, 0}, + {0x9536E111, NamcoXCapcom, JP, 0}, + {0x75C01A04, NamcoXCapcom, US, 0}, // same CRC as another JP disc + {0x95CC86EF, GiTS, US, 0}, // same CRC also reported as EU {0xA5768F53, GiTS, JP, 0}, {0xA3643EB1, GiTS, KO, 0}, - {0xBF6F101F, GiTS, EU, 0}, + {0xBF6F101F, GiTS, EU, 0}, // same CRC as another US disc {0x6BF11378, Onimusha3, US, 0}, {0x71320CA8, Onimusha3, JP, 0}, {0xDAFFFB0D, Onimusha3, KO, 0}, @@ -224,7 +222,7 @@ {0xAA5EC3A3, TalesOfAbyss, JP, 0}, {0xFB236A46, SonicUnleashed, US, 0}, {0x8C913264, SonicUnleashed, EU, 0}, - {0x5C1EBD61, SimpsonsGame, NoRegion, 0}, + {0x5C1EBD61, SimpsonsGame, EU, 0}, {0x4C7BB3C8, SimpsonsGame, NoRegion, 0}, {0x4C94B32C, SimpsonsGame, NoRegion, 0}, {0x565B7E04, SimpsonsGame, IT, 0}, @@ -236,7 +234,7 @@ {0x56242EC9, Genji, KO, 0}, {0xCDAF243D, Genji, CH, 0}, {0x2A5E0B61, Genji, CH, 0}, - {0x7D4EA48F, Genji, NoRegion, 0}, + {0x7D4EA48F, Genji, EU, 0}, // same CRC as {HauntingGround, EU} {0xE04EA200, StarOcean3, EU, 0}, {0x23A97857, StarOcean3, US, 0}, {0xBEC32D49, StarOcean3, JP, 0}, @@ -245,7 +243,7 @@ {0xCC96CE93, ValkyrieProfile2, US, 0}, {0x774DE8E2, ValkyrieProfile2, JP, 0}, {0x04CCB600, ValkyrieProfile2, EU, 0}, - {0xB65E141B, ValkyrieProfile2, EU, 0}, // PAL German + {0xB65E141B, ValkyrieProfile2, DE, 0}, // PAL German {0xC70FC973, ValkyrieProfile2, IT, 0}, {0x47B9B2FD, RadiataStories, US, 0}, {0xAC73005E, RadiataStories, JP, 0}, @@ -271,13 +269,15 @@ {0x64C58FB4, TenchuFS, US, 0}, {0xE7CCCB1E, TenchuFS, EU, 0}, {0x1969B19A, TenchuFS, ES, 0}, //PAL Spanish + {0xBF0DC4CE, TenchuFS, DE, 0}, {0x696BBEC3, TenchuFS, KO, 0}, {0x525C1994, TenchuFS, ASIA, 0}, {0x0D73BBCD, TenchuFS, KO, 0}, {0xAFBFB287, TenchuWoH, KO, 0}, {0x767E383D, TenchuWoH, US, 0}, - {0x83261085, TenchuWoH, EU, 0}, //PAL German + {0x83261085, TenchuWoH, DE, 0}, //PAL German {0x7FA1510D, TenchuWoH, EU, 0}, //PAL ES, IT + {0xC8DADF58, TenchuWoH, EU, 0}, {0x13DD9957, TenchuWoH, JP, 0}, {0x8BC95883, Sly3, US, 0}, {0x8164C614, Sly3, EU, 0}, @@ -293,9 +293,6 @@ {0x90F0D852, BigMuthaTruckers, US, 0}, {0x5CC9BF81, TimeSplitters2, EU, 0}, {0x12532F1C, TimeSplitters2, US, 0}, - {0xA33748AA, ReZ, US, 0}, - {0xAE1152EB, ReZ, EU, 0}, - {0xD2EA890A, ReZ, JP, 0}, {0xC818BEC2, LordOfTheRingsTwoTowers, US, 0}, {0xDC43F2B8, LordOfTheRingsTwoTowers, EU, 0}, {0x9ABF90FB, LordOfTheRingsTwoTowers, ES, 0}, @@ -315,6 +312,8 @@ {0x5088CCDB, SilentHill3, EU, 0}, {0x8CFE667F, SilentHill3, JP, 0}, {0xC6CBDE91, SilentHill3, KO, 0}, + {0x6B149273, SilentHill2, EU, 0}, + {0x6BBD4932, SilentHill2, EU, 0}, // Director's Cut {0x8E8E384B, SilentHill2, US, 0}, {0xFE06A030, SilentHill2, US, 0}, //greatest hits {0xE36E16C9, SilentHill2, JP, 0}, @@ -348,10 +347,7 @@ {0x2088950A, XE3, US, 0}, // DMC(1)? {0x79B8A95F, DevilMayCry3, US, 0}, {0x7F3D692D, DevilMayCry3, CH, 0}, - //duplicate crc with GOW1... {0x1A85E924, DevilMayCry3, CH, 0}, - {0x0a8ef911, ArctheLad, US, 0}, // cutie comment - {0x2C5E7DEA, ArctheLad, CH, 0}, - {0xE69E7F58, ArctheLad, US, 0}, // cutie comment + // {0x1A85E924, DevilMayCry3, CH, 0}, // same CRC as {GodOfWar, NoRegion} {0xB1995E29, ShadowofRome, EU, 0}, // cutie comment {0x958DCA28, ShadowofRome, EU, 0}, {0x57818AF6, ShadowofRome, US, 0}, @@ -380,11 +376,12 @@ {0x568A5C78, DigimonRumbleArena2, US, 0}, {0x785E22BB, DigimonRumbleArena2, EU, 0}, {0x4C5CE4C3, DigimonRumbleArena2, EU, 0}, + {0x7F995E8D, DigimonRumbleArena2, JP, 0}, {0x115A184D, DigimonRumbleArena2, KO, 0}, {0x879CDA5E, StarWarsForceUnleashed, US, 0}, {0x137C792E, StarWarsForceUnleashed, US, 0}, - {0x503BF9E1, StarWarsBattlefront, NoRegion, 0}, //EU and US versions have same CRC - {0x02F4B541, StarWarsBattlefront2, NoRegion, 0}, //EU and US versions have same CRC + {0x503BF9E1, StarWarsBattlefront, NoRegion, 0}, // EU and US versions have the same CRC + {0x02F4B541, StarWarsBattlefront2, NoRegion, 0}, // EU and US versions have the same CRC {0xA8DB29DF, BlackHawkDown, EU, 0}, {0x25FC361B, DevilMayCry3, US, 0}, //SE {0x2F7D8AD5, DevilMayCry3, US, 0}, @@ -411,7 +408,8 @@ {0xB78A5F5A, CallofDutyFinalFronts, EU, 0}, {0xD03D4C77, SpyroNewBeginning, US, 0}, {0x0EE5646B, SpyroNewBeginning, EU, 0}, - //duplicate crc with ico... {0x7ACF7E03, SpyroNewBeginning, NoRegion, 0}, + // {0x7ACF7E03, SpyroNewBeginning, NoRegion, 0}, // same CRC as {ICO, NoRegion} + // and as "Twisted Metal - Black" (PAL). {0xB80CE8EC, SpyroEternalNight, US, 0}, {0x8AE9536D, SpyroEternalNight, EU, 0}, {0xC95F0198, SpyroEternalNight, NoRegion, 0}, @@ -445,6 +443,7 @@ {0xB083CCC2, Siren, EU, 0}, // Spanish {0x90F4B057, ZettaiZetsumeiToshi2, CH, 0}, {0xC988ECBB, ZettaiZetsumeiToshi2, JP, 0}, + {0x2905C5C6, ZettaiZetsumeiToshi2, US, 0}, // Raw Danger! {0x81CA29BE, VF4EVO, EU, 0}, {0xC9DEF513, VF4EVO, US, 0}, {0x7B402694, VF4EVO, KO, 0}, @@ -506,7 +505,10 @@ {0x0098F740, SeintoSeiya, NoRegion, 0}, // cutie comment {0xBDD9BAAD, UrbanReign, US, 0}, // cutie comment {0xAE4BEBD3, UrbanReign, EU, 0}, + {0x48AC09BC, SteambotChronicles, EU, 0}, {0x9F391882, SteambotChronicles, US, 0}, + {0xFEFCF9DE, SteambotChronicles, JP, 0}, // Ponkotsu Roman Daikatsugeki: Bumpy Trot + {0XE1BF5DCA, SuperManReturns, US, 0}, {0x06A7506A, SacredBlaze, JP, 0}, }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSCrc.h pcsx2-1.4.0/plugins/GSdx/GSCrc.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSCrc.h 2013-07-23 13:55:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSCrc.h 2016-01-05 17:28:08.000000000 +0000 @@ -61,7 +61,6 @@ ResidentEvil4, Spartan, AceCombat4, - Drakengard2, Tekken5, IkkiTousen, GodOfWar, @@ -97,11 +96,9 @@ Sly3, Sly2, ShadowofRome, - ArctheLad, DemonStone, BigMuthaTruckers, TimeSplitters2, - ReZ, LordOfTheRingsTwoTowers, LordOfTheRingsThirdAge, RedDeadRevolver, @@ -175,6 +172,7 @@ UrbanReign, SteambotChronicles, SacredBlaze, + SuperManReturns, TitleCount, }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice11.cpp pcsx2-1.4.0/plugins/GSdx/GSDevice11.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice11.cpp 2014-11-15 21:33:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice11.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -24,6 +24,7 @@ #include "GSDevice11.h" #include "GSUtil.h" #include "resource.h" +#include GSDevice11::GSDevice11() { @@ -33,9 +34,7 @@ FXAA_Compiled = false; ExShader_Compiled = false; - - UserHacks_NVIDIAHack = !!theApp.GetConfig("UserHacks_NVIDIAHack", 0) && !!theApp.GetConfig("UserHacks", 0); - + m_state.topology = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED; m_state.bf = -1; } @@ -111,6 +110,7 @@ scd.Windowed = TRUE; + spritehack = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_SpriteHack", 0) : 0; // NOTE : D3D11_CREATE_DEVICE_SINGLETHREADED // This flag is safe as long as the DXGI's internal message pump is disabled or is on the // same thread as the GS window (which the emulator makes sure of, if it utilizes a @@ -173,11 +173,13 @@ {"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; - CompileShader(IDR_CONVERT_FX, "vs_main", NULL, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il); + vector shader; + theApp.LoadResource(IDR_CONVERT_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "convert.fx", "vs_main", NULL, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il); for(size_t i = 0; i < countof(m_convert.ps); i++) { - CompileShader(IDR_CONVERT_FX, format("ps_main%d", i).c_str(), NULL, &m_convert.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), "convert.fx", format("ps_main%d", i).c_str(), NULL, &m_convert.ps[i]); } memset(&dsd, 0, sizeof(dsd)); @@ -203,9 +205,10 @@ hr = m_dev->CreateBuffer(&bd, NULL, &m_merge.cb); + theApp.LoadResource(IDR_MERGE_FX, shader); for(size_t i = 0; i < countof(m_merge.ps); i++) { - CompileShader(IDR_MERGE_FX, format("ps_main%d", i).c_str(), NULL, &m_merge.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), "merge.fx", format("ps_main%d", i).c_str(), NULL, &m_merge.ps[i]); } memset(&bsd, 0, sizeof(bsd)); @@ -231,9 +234,10 @@ hr = m_dev->CreateBuffer(&bd, NULL, &m_interlace.cb); + theApp.LoadResource(IDR_INTERLACE_FX, shader); for(size_t i = 0; i < countof(m_interlace.ps); i++) { - CompileShader(IDR_INTERLACE_FX, format("ps_main%d", i).c_str(), NULL, &m_interlace.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), "interlace.fx", format("ps_main%d", i).c_str(), NULL, &m_interlace.ps[i]); } // Shade Boost @@ -264,7 +268,8 @@ hr = m_dev->CreateBuffer(&bd, NULL, &m_shadeboost.cb); - CompileShader(IDR_SHADEBOOST_FX, "ps_main", macro, &m_shadeboost.ps); + theApp.LoadResource(IDR_SHADEBOOST_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "shadeboost.fx", "ps_main", macro, &m_shadeboost.ps); // External fx shader @@ -309,7 +314,7 @@ memset(&sd, 0, sizeof(sd)); - sd.Filter = sd.Filter = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_LINEAR; + sd.Filter = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_LINEAR; sd.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; sd.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; sd.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; @@ -320,7 +325,7 @@ hr = m_dev->CreateSamplerState(&sd, &m_convert.ln); - sd.Filter = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_POINT; + sd.Filter = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_POINT; hr = m_dev->CreateSamplerState(&sd, &m_convert.pt); @@ -446,11 +451,13 @@ void GSDevice11::ClearRenderTarget(GSTexture* t, const GSVector4& c) { + if (!t) return; m_ctx->ClearRenderTargetView(*(GSTexture11*)t, c.v); } void GSDevice11::ClearRenderTarget(GSTexture* t, uint32 c) { + if (!t) return; GSVector4 color = GSVector4::rgba32(c) * (1.0f / 255); m_ctx->ClearRenderTargetView(*(GSTexture11*)t, color.v); @@ -458,11 +465,13 @@ void GSDevice11::ClearDepth(GSTexture* t, float c) { + if (!t) return; m_ctx->ClearDepthStencilView(*(GSTexture11*)t, D3D11_CLEAR_DEPTH, c, 0); } void GSDevice11::ClearStencil(GSTexture* t, uint8 c) { + if (!t) return; m_ctx->ClearDepthStencilView(*(GSTexture11*)t, D3D11_CLEAR_STENCIL, 0, c); } @@ -565,7 +574,7 @@ return NULL; } -GSTexture* GSDevice11::CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format) +GSTexture* GSDevice11::CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format, int ps_shader) { GSTexture* dst = NULL; @@ -583,11 +592,11 @@ if(GSTexture* rt = CreateRenderTarget(w, h, false, format)) { - GSVector4 dr(0, 0, w, h); + GSVector4 dRect(0, 0, w, h); if(GSTexture* src2 = src->IsMSAA() ? Resolve(src) : src) { - StretchRect(src2, sr, rt, dr, m_convert.ps[format == DXGI_FORMAT_R16_UINT ? 1 : 0], NULL); + StretchRect(src2, sRect, rt, dRect, m_convert.ps[format == DXGI_FORMAT_R16_UINT ? 1 : 0], NULL); if(src2 != src) Recycle(src2); } @@ -605,9 +614,9 @@ return dst; } -void GSDevice11::CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r) +void GSDevice11::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r) { - if(!st || !dt) + if(!sTex || !dTex) { ASSERT(0); return; @@ -615,22 +624,22 @@ D3D11_BOX box = {r.left, r.top, 0, r.right, r.bottom, 1}; - m_ctx->CopySubresourceRegion(*(GSTexture11*)dt, 0, 0, 0, 0, *(GSTexture11*)st, 0, &box); + m_ctx->CopySubresourceRegion(*(GSTexture11*)dTex, 0, 0, 0, 0, *(GSTexture11*)sTex, 0, &box); } -void GSDevice11::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader, bool linear) +void GSDevice11::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader, bool linear) { - StretchRect(st, sr, dt, dr, m_convert.ps[shader], NULL, linear); + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[shader], NULL, linear); } -void GSDevice11::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, bool linear) +void GSDevice11::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, bool linear) { - StretchRect(st, sr, dt, dr, ps, ps_cb, m_convert.bs, linear); + StretchRect(sTex, sRect, dTex, dRect, ps, ps_cb, m_convert.bs, linear); } -void GSDevice11::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, ID3D11BlendState* bs, bool linear) +void GSDevice11::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, ID3D11BlendState* bs, bool linear) { - if(!st || !dt) + if(!sTex || !dTex) { ASSERT(0); return; @@ -638,41 +647,31 @@ BeginScene(); - GSVector2i ds = dt->GetSize(); + GSVector2i ds = dTex->GetSize(); // om OMSetDepthStencilState(m_convert.dss, 0); OMSetBlendState(bs, 0); - OMSetRenderTargets(dt, NULL); + OMSetRenderTargets(dTex, NULL); // ia - float left = dr.x * 2 / ds.x - 1.0f; - float top = 1.0f - dr.y * 2 / ds.y; - float right = dr.z * 2 / ds.x - 1.0f; - float bottom = 1.0f - dr.w * 2 / ds.y; + float left = dRect.x * 2 / ds.x - 1.0f; + float top = 1.0f - dRect.y * 2 / ds.y; + float right = dRect.z * 2 / ds.x - 1.0f; + float bottom = 1.0f - dRect.w * 2 / ds.y; GSVertexPT1 vertices[] = { - {GSVector4(left, top, 0.5f, 1.0f), GSVector2(sr.x, sr.y)}, - {GSVector4(right, top, 0.5f, 1.0f), GSVector2(sr.z, sr.y)}, - {GSVector4(left, bottom, 0.5f, 1.0f), GSVector2(sr.x, sr.w)}, - {GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sr.z, sr.w)}, + {GSVector4(left, top, 0.5f, 1.0f), GSVector2(sRect.x, sRect.y)}, + {GSVector4(right, top, 0.5f, 1.0f), GSVector2(sRect.z, sRect.y)}, + {GSVector4(left, bottom, 0.5f, 1.0f), GSVector2(sRect.x, sRect.w)}, + {GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sRect.z, sRect.w)}, }; - - /* NVIDIA HACK!!!! - For some reason this function ball's up on drivers after 320.18 causing a weird stretching issue. - The only way around this seems to be adding a small value to the x, y coords for part of the - vertex data but doing it only on the first vertex of the 4 seems to do it (it doesn't seem to matter)*/ - if(UserHacks_NVIDIAHack) - { - //Smallest value i could get away with before it starts stretching again :( - vertices[0].p.x += 0.000002f; - vertices[0].p.y += 0.000002f; - } - /*END OF HACK*/ - + + + IASetVertexBuffer(vertices, sizeof(vertices[0]), countof(vertices)); IASetInputLayout(m_convert.il); IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); @@ -681,13 +680,27 @@ VSSetShader(m_convert.vs, NULL); + // gs + /* NVIDIA HACK!!!! + Not sure why, but having the Geometry shader disabled causes the strange stretching in recent drivers*/ + + GSSelector sel; + //Don't use shading for stretching, we're just passing through - Note: With Win10 it seems to cause other bugs when shading is off if any of the coords is greater than 0 + //I really don't know whats going on there, but this seems to resolve it mostly (if not all, not tester a lot of games, only BIOS, FFXII and VP2) + //sel.iip = (sRect.y > 0.0f || sRect.w > 0.0f) ? 1 : 0; + //sel.prim = 2; //Triangle Strip + //SetupGS(sel); GSSetShader(NULL); + /*END OF HACK*/ + + // + // ps - PSSetShaderResources(st, NULL); + PSSetShaderResources(sTex, NULL); PSSetSamplerState(linear ? m_convert.ln : m_convert.pt, NULL); PSSetShader(ps, ps_cb); @@ -702,29 +715,29 @@ PSSetShaderResources(NULL, NULL); } -void GSDevice11::DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) +void GSDevice11::DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) { - ClearRenderTarget(dt, c); + ClearRenderTarget(dTex, c); - if(st[1] && !slbg) + if(sTex[1] && !slbg) { - StretchRect(st[1], sr[1], dt, dr[1], m_merge.ps[0], NULL, true); + StretchRect(sTex[1], sRect[1], dTex, dRect[1], m_merge.ps[0], NULL, true); } - if(st[0]) + if(sTex[0]) { m_ctx->UpdateSubresource(m_merge.cb, 0, NULL, &c, 0, 0); - StretchRect(st[0], sr[0], dt, dr[0], m_merge.ps[mmod ? 1 : 0], m_merge.cb, m_merge.bs, true); + StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge.ps[mmod ? 1 : 0], m_merge.cb, m_merge.bs, true); } } -void GSDevice11::DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset) +void GSDevice11::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset) { - GSVector4 s = GSVector4(dt->GetSize()); + GSVector4 s = GSVector4(dTex->GetSize()); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0.0f, yoffset, s.x, s.y + yoffset); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0.0f, yoffset, s.x, s.y + yoffset); InterlaceConstantBuffer cb; @@ -733,7 +746,7 @@ m_ctx->UpdateSubresource(m_interlace.cb, 0, NULL, &cb, 0, 0); - StretchRect(st, sr, dt, dr, m_interlace.ps[shader], m_interlace.cb, linear); + StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[shader], m_interlace.cb, linear); } //Included an init function for this also. Just to be safe. @@ -742,7 +755,25 @@ if (!ExShader_Compiled) { try { - CompileShader("shaders/GSdx.fx", "ps_main", NULL, &m_shaderfx.ps); + std::string config_name(theApp.GetConfig("shaderfx_conf", "shaders/GSdx_FX_Settings.ini")); + std::ifstream fconfig(config_name); + std::stringstream shader; + if (fconfig.good()) + shader << fconfig.rdbuf() << "\n"; + else + fprintf(stderr, "GSdx: External shader config '%s' not loaded.\n", config_name.c_str()); + + std::string shader_name(theApp.GetConfig("shaderfx_glsl", "shaders/GSdx.fx")); + std::ifstream fshader(shader_name); + if (fshader.good()) + { + shader << fshader.rdbuf(); + CompileShader(shader.str().c_str(), shader.str().length(), shader_name.c_str(), "ps_main", NULL, &m_shaderfx.ps); + } + else + { + fprintf(stderr, "GSdx: External shader '%s' not loaded and will be disabled!\n", shader_name.c_str()); + } } catch (GSDXRecoverableError) { printf("GSdx: failed to compile external post-processing shader. \n"); @@ -751,12 +782,12 @@ } } -void GSDevice11::DoExternalFX(GSTexture* st, GSTexture* dt) +void GSDevice11::DoExternalFX(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ExternalFXConstantBuffer cb; @@ -768,7 +799,7 @@ m_ctx->UpdateSubresource(m_shaderfx.cb, 0, NULL, &cb, 0, 0); - StretchRect(st, sr, dt, dr, m_shaderfx.ps, m_shaderfx.cb, true); + StretchRect(sTex, sRect, dTex, dRect, m_shaderfx.ps, m_shaderfx.cb, true); } // This shouldn't be necessary, we have some bug corrupting memory @@ -778,7 +809,9 @@ if (!FXAA_Compiled) { try { - CompileShader(IDR_FXAA_FX, "ps_main", NULL, &m_fxaa.ps); + vector shader; + theApp.LoadResource(IDR_FXAA_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "fxaa.fx", "ps_main", NULL, &m_fxaa.ps); } catch (GSDXRecoverableError) { printf("GSdx: failed to compile fxaa shader.\n"); @@ -787,12 +820,12 @@ } } -void GSDevice11::DoFXAA(GSTexture* st, GSTexture* dt) +void GSDevice11::DoFXAA(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); FXAAConstantBuffer cb; @@ -803,18 +836,18 @@ m_ctx->UpdateSubresource(m_fxaa.cb, 0, NULL, &cb, 0, 0); - StretchRect(st, sr, dt, dr, m_fxaa.ps, m_fxaa.cb, true); + StretchRect(sTex, sRect, dTex, dRect, m_fxaa.ps, m_fxaa.cb, true); - //st->Save("c:\\temp1\\1.bmp"); - //dt->Save("c:\\temp1\\2.bmp"); + //sTex->Save("c:\\temp1\\1.bmp"); + //dTex->Save("c:\\temp1\\2.bmp"); } -void GSDevice11::DoShadeBoost(GSTexture* st, GSTexture* dt) +void GSDevice11::DoShadeBoost(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ShadeBoostConstantBuffer cb; @@ -823,7 +856,7 @@ m_ctx->UpdateSubresource(m_shadeboost.cb, 0, NULL, &cb, 0, 0); - StretchRect(st, sr, dt, dr, m_shadeboost.ps, m_shadeboost.cb, true); + StretchRect(sTex, sRect, dTex, dRect, m_shadeboost.ps, m_shadeboost.cb, true); } void GSDevice11::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* vertices, bool datm) @@ -1235,8 +1268,8 @@ memset(&vp, 0, sizeof(vp)); - vp.TopLeftX = 0; - vp.TopLeftY = 0; + vp.TopLeftX = (spritehack > 0) ? 0.0f : -0.01f; + vp.TopLeftY = (spritehack > 0) ? 0.0f : -0.01f; vp.Width = (float)size.x; vp.Height = (float)size.y; vp.MinDepth = 0.0f; @@ -1290,7 +1323,7 @@ } } -void GSDevice11::CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il) +void GSDevice11::CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il) { HRESULT hr; @@ -1300,7 +1333,7 @@ CComPtr shader, error; - hr = D3DX11CompileFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), NULL, &m[0], NULL, entry, m_shader.vs.c_str(), 0, 0, NULL, &shader, &error, NULL); + hr = D3DX11CompileFromMemory(source, size, fn, &m[0], NULL, entry, m_shader.vs.c_str(), 0, 0, NULL, &shader, &error, NULL); if(error) { @@ -1327,7 +1360,7 @@ } } -void GSDevice11::CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs) +void GSDevice11::CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs) { HRESULT hr; @@ -1337,7 +1370,7 @@ CComPtr shader, error; - hr = D3DX11CompileFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), NULL, &m[0], NULL, entry, m_shader.gs.c_str(), 0, 0, NULL, &shader, &error, NULL); + hr = D3DX11CompileFromMemory(source, size, fn, &m[0], NULL, entry, m_shader.gs.c_str(), 0, 0, NULL, &shader, &error, NULL); if(error) { @@ -1357,7 +1390,7 @@ } } -void GSDevice11::CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs, D3D11_SO_DECLARATION_ENTRY* layout, int count) +void GSDevice11::CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs, D3D11_SO_DECLARATION_ENTRY* layout, int count) { HRESULT hr; @@ -1367,7 +1400,7 @@ CComPtr shader, error; - hr = D3DX11CompileFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), NULL, &m[0], NULL, entry, m_shader.gs.c_str(), 0, 0, NULL, &shader, &error, NULL); + hr = D3DX11CompileFromMemory(source, size, fn, &m[0], NULL, entry, m_shader.gs.c_str(), 0, 0, NULL, &shader, &error, NULL); if(error) { @@ -1387,37 +1420,7 @@ } } -void GSDevice11::CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps) -{ - HRESULT hr; - - vector m; - - PrepareShaderMacro(m, macro); - - CComPtr shader, error; - - hr = D3DX11CompileFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), NULL, &m[0], NULL, entry, m_shader.ps.c_str(), 0, 0, NULL, &shader, &error, NULL); - - if(error) - { - printf("%s\n", (const char*)error->GetBufferPointer()); - } - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } - - hr = m_dev->CreatePixelShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(),NULL, ps); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } -} - -void GSDevice11::CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs) +void GSDevice11::CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps) { HRESULT hr; @@ -1427,7 +1430,7 @@ CComPtr shader, error; - hr = D3DX11CompileFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), NULL, &m[0], NULL, entry, m_shader.cs.c_str(), 0, 0, NULL, &shader, &error, NULL); + hr = D3DX11CompileFromMemory(source, size, fn, &m[0], NULL, entry, m_shader.ps.c_str(), 0, 0, NULL, &shader, &error, NULL); if(error) { @@ -1439,7 +1442,7 @@ throw GSDXRecoverableError(); } - hr = m_dev->CreateComputeShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(),NULL, cs); + hr = m_dev->CreatePixelShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(), NULL, ps); if(FAILED(hr)) { @@ -1447,73 +1450,7 @@ } } -void GSDevice11::CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il) -{ - HRESULT hr; - - vector m; - - PrepareShaderMacro(m, macro); - - CComPtr shader, error; - - hr = D3DX11CompileFromFile(fn, &m[0], NULL, entry, m_shader.vs.c_str(), 0, 0, NULL, &shader, &error, NULL); - - if(error) - { - printf("%s\n", (const char*)error->GetBufferPointer()); - } - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } - - hr = m_dev->CreateVertexShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(), NULL, vs); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } - - hr = m_dev->CreateInputLayout(layout, count, shader->GetBufferPointer(), shader->GetBufferSize(), il); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } -} - -void GSDevice11::CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps) -{ - HRESULT hr; - - vector m; - - PrepareShaderMacro(m, macro); - - CComPtr shader, error; - - hr = D3DX11CompileFromFile(fn, &m[0], NULL, entry, m_shader.ps.c_str(), 0, 0, NULL, &shader, &error, NULL); - - if(error) - { - printf("%s\n", (const char*)error->GetBufferPointer()); - } - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } - - hr = m_dev->CreatePixelShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(),NULL, ps); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } -} -void GSDevice11::CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs) +void GSDevice11::CompileShader(const char* source, size_t size, const char *fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs) { HRESULT hr; @@ -1523,7 +1460,7 @@ CComPtr shader, error; - hr = D3DX11CompileFromFile(fn, &m[0], NULL, entry, m_shader.cs.c_str(), 0, 0, NULL, &shader, &error, NULL); + hr = D3DX11CompileFromMemory(source, size, fn, &m[0], NULL, entry, m_shader.cs.c_str(), 0, 0, NULL, &shader, &error, NULL); if(error) { @@ -1535,7 +1472,7 @@ throw GSDXRecoverableError(); } - hr = m_dev->CreateComputeShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(),NULL, cs); + hr = m_dev->CreateComputeShader((void*)shader->GetBufferPointer(), shader->GetBufferSize(), NULL, cs); if(FAILED(hr)) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice11.h pcsx2-1.4.0/plugins/GSdx/GSDevice11.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice11.h 2014-02-02 17:50:32.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice11.h 2016-01-05 17:28:08.000000000 +0000 @@ -34,11 +34,11 @@ { GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format); - void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c); - void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset = 0); - void DoFXAA(GSTexture* st, GSTexture* dt); - void DoShadeBoost(GSTexture* st, GSTexture* dt); - void DoExternalFX(GSTexture* st, GSTexture* dt); + void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c); + void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset = 0); + void DoFXAA(GSTexture* sTex, GSTexture* dTex); + void DoShadeBoost(GSTexture* sTex, GSTexture* dTex); + void DoExternalFX(GSTexture* sTex, GSTexture* dTex); void InitExternalFX(); void InitFXAA(); // Bug workaround! Stack corruption? Heap corruption? No idea @@ -54,6 +54,7 @@ CComPtr m_ib_old; bool m_srv_changed, m_ss_changed; + int spritehack; struct { @@ -87,7 +88,6 @@ bool FXAA_Compiled; bool ExShader_Compiled; - bool UserHacks_NVIDIAHack; struct { @@ -184,13 +184,13 @@ GSTexture* Resolve(GSTexture* t); - GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format = 0); + GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format = 0, int ps_shader = 0); - void CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r); + void CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, ID3D11BlendState* bs, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ID3D11PixelShader* ps, ID3D11Buffer* ps_cb, ID3D11BlendState* bs, bool linear = true); void IASetVertexBuffer(const void* vertex, size_t stride, size_t count); bool IAMapVertexBuffer(void** vertex, size_t stride, size_t count); @@ -227,13 +227,10 @@ operator ID3D11Device*() {return m_dev;} operator ID3D11DeviceContext*() {return m_ctx;} - void CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il); - void CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs); - void CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs, D3D11_SO_DECLARATION_ENTRY* layout, int count); - void CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps); - void CompileShader(uint32 id, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs); - void CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs); - void CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il); - void CompileShader(const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps); + void CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11VertexShader** vs, D3D11_INPUT_ELEMENT_DESC* layout, int count, ID3D11InputLayout** il); + void CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs); + void CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11GeometryShader** gs, D3D11_SO_DECLARATION_ENTRY* layout, int count); + void CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11PixelShader** ps); + void CompileShader(const char* source, size_t size, const char* fn, const char* entry, D3D11_SHADER_MACRO* macro, ID3D11ComputeShader** cs); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice9.cpp pcsx2-1.4.0/plugins/GSdx/GSDevice9.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice9.cpp 2014-11-15 21:40:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice9.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,6 +23,7 @@ #include "GSdx.h" #include "GSDevice9.h" #include "resource.h" +#include GSDevice9::GSDevice9() : m_lost(false) @@ -84,9 +85,6 @@ // if supported and null != msaa_desc, msaa_desc will contain requested Count and Quality -D3DTEXTUREFILTERTYPE LinearToAnisotropic = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; -D3DTEXTUREFILTERTYPE PointToAnisotropic = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_POINT; - static bool IsMsaaSupported(IDirect3D9* d3d, UINT adapter, D3DDEVTYPE devtype, D3DFORMAT depth_format, uint32 msaaCount, DXGI_SAMPLE_DESC* msaa_desc = NULL) { if(msaaCount > 16) return false; @@ -292,11 +290,13 @@ D3DDECL_END() }; - CompileShader(IDR_CONVERT_FX, "vs_main", NULL, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il); + vector shader; + theApp.LoadResource(IDR_CONVERT_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "vs_main", NULL, &m_convert.vs, il_convert, countof(il_convert), &m_convert.il); for(size_t i = 0; i < countof(m_convert.ps); i++) { - CompileShader(IDR_CONVERT_FX, format("ps_main%d", i), NULL, &m_convert.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), format("ps_main%d", i), NULL, &m_convert.ps[i]); } m_convert.dss.DepthEnable = false; @@ -304,6 +304,8 @@ m_convert.bs.BlendEnable = false; m_convert.bs.RenderTargetWriteMask = D3DCOLORWRITEENABLE_RGBA; + D3DTEXTUREFILTERTYPE LinearToAnisotropic = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; + D3DTEXTUREFILTERTYPE PointToAnisotropic = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_POINT; m_convert.ln.FilterMin[0] = LinearToAnisotropic; m_convert.ln.FilterMag[0] = LinearToAnisotropic; @@ -323,9 +325,10 @@ // merge + theApp.LoadResource(IDR_MERGE_FX, shader); for(size_t i = 0; i < countof(m_merge.ps); i++) { - CompileShader(IDR_MERGE_FX, format("ps_main%d", i), NULL, &m_merge.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), format("ps_main%d", i), NULL, &m_merge.ps[i]); } m_merge.bs.BlendEnable = true; @@ -339,9 +342,10 @@ // interlace + theApp.LoadResource(IDR_INTERLACE_FX, shader); for(size_t i = 0; i < countof(m_interlace.ps); i++) { - CompileShader(IDR_INTERLACE_FX, format("ps_main%d", i), NULL, &m_interlace.ps[i]); + CompileShader((const char *)shader.data(), shader.size(), format("ps_main%d", i), NULL, &m_interlace.ps[i]); } // Shade Boost @@ -364,7 +368,8 @@ {NULL, NULL}, }; - CompileShader(IDR_SHADEBOOST_FX, "ps_main", macro, &m_shadeboost.ps); + theApp.LoadResource(IDR_SHADEBOOST_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "ps_main", macro, &m_shadeboost.ps); // create shader layout @@ -649,11 +654,13 @@ void GSDevice9::ClearRenderTarget(GSTexture* t, const GSVector4& c) { + if (!t) return; ClearRenderTarget(t, (c * 255 + 0.5f).zyxw().rgba32()); } void GSDevice9::ClearRenderTarget(GSTexture* rt, uint32 c) { + if (!rt) return; CComPtr surface; m_dev->GetRenderTarget(0, &surface); m_dev->SetRenderTarget(0, *(GSTexture9*)rt); @@ -663,6 +670,7 @@ void GSDevice9::ClearDepth(GSTexture* t, float c) { + if (!t) return; CComPtr dssurface; m_dev->GetDepthStencilSurface(&dssurface); m_dev->SetDepthStencilSurface(*(GSTexture9*)t); @@ -672,6 +680,7 @@ void GSDevice9::ClearStencil(GSTexture* t, uint8 c) { + if (!t) return; CComPtr dssurface; m_dev->GetDepthStencilSurface(&dssurface); m_dev->SetDepthStencilSurface(*(GSTexture9*)t); @@ -768,7 +777,7 @@ return NULL; } -GSTexture* GSDevice9::CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format) +GSTexture* GSDevice9::CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format, int ps_shader) { GSTexture* dst = NULL; @@ -786,11 +795,11 @@ if(GSTexture* rt = CreateRenderTarget(w, h, false, format)) { - GSVector4 dr(0, 0, w, h); + GSVector4 dRect(0, 0, w, h); if(GSTexture* src2 = src->IsMSAA() ? Resolve(src) : src) { - StretchRect(src2, sr, rt, dr, m_convert.ps[1], NULL, 0); + StretchRect(src2, sRect, rt, dRect, m_convert.ps[1], NULL, 0); if(src2 != src) Recycle(src2); } @@ -808,30 +817,30 @@ return dst; } -void GSDevice9::CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r) +void GSDevice9::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r) { - if(!st || !dt) + if(!sTex || !dTex) { ASSERT(0); return; } - m_dev->StretchRect(*(GSTexture9*)st, r, *(GSTexture9*)dt, r, D3DTEXF_NONE); + m_dev->StretchRect(*(GSTexture9*)sTex, r, *(GSTexture9*)dTex, r, D3DTEXF_NONE); } -void GSDevice9::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader, bool linear) +void GSDevice9::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader, bool linear) { - StretchRect(st, sr, dt, dr, m_convert.ps[shader], NULL, 0, linear); + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[shader], NULL, 0, linear); } -void GSDevice9::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, bool linear) +void GSDevice9::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, bool linear) { - StretchRect(st, sr, dt, dr, ps, ps_cb, ps_cb_len, &m_convert.bs, linear); + StretchRect(sTex, sRect, dTex, dRect, ps, ps_cb, ps_cb_len, &m_convert.bs, linear); } -void GSDevice9::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, Direct3DBlendState9* bs, bool linear) +void GSDevice9::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, Direct3DBlendState9* bs, bool linear) { - if(!st || !dt) + if(!sTex || !dTex) { ASSERT(0); return; @@ -839,27 +848,27 @@ BeginScene(); - GSVector2i ds = dt->GetSize(); + GSVector2i ds = dTex->GetSize(); // om OMSetDepthStencilState(&m_convert.dss); OMSetBlendState(bs, 0); - OMSetRenderTargets(dt, NULL); + OMSetRenderTargets(dTex, NULL); // ia - float left = dr.x * 2 / ds.x - 1.0f; - float top = 1.0f - dr.y * 2 / ds.y; - float right = dr.z * 2 / ds.x - 1.0f; - float bottom = 1.0f - dr.w * 2 / ds.y; + float left = dRect.x * 2 / ds.x - 1.0f; + float top = 1.0f - dRect.y * 2 / ds.y; + float right = dRect.z * 2 / ds.x - 1.0f; + float bottom = 1.0f - dRect.w * 2 / ds.y; GSVertexPT1 vertices[] = { - {GSVector4(left, top, 0.5f, 1.0f), GSVector2(sr.x, sr.y)}, - {GSVector4(right, top, 0.5f, 1.0f), GSVector2(sr.z, sr.y)}, - {GSVector4(left, bottom, 0.5f, 1.0f), GSVector2(sr.x, sr.w)}, - {GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sr.z, sr.w)}, + {GSVector4(left, top, 0.5f, 1.0f), GSVector2(sRect.x, sRect.y)}, + {GSVector4(right, top, 0.5f, 1.0f), GSVector2(sRect.z, sRect.y)}, + {GSVector4(left, bottom, 0.5f, 1.0f), GSVector2(sRect.x, sRect.w)}, + {GSVector4(right, bottom, 0.5f, 1.0f), GSVector2(sRect.z, sRect.w)}, }; for(size_t i = 0; i < countof(vertices); i++) @@ -879,7 +888,7 @@ // ps PSSetSamplerState(linear ? &m_convert.ln : &m_convert.pt); - PSSetShaderResources(st, NULL); + PSSetShaderResources(sTex, NULL); PSSetShader(ps, ps_cb, ps_cb_len); // @@ -891,38 +900,38 @@ EndScene(); } -void GSDevice9::DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) +void GSDevice9::DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) { - ClearRenderTarget(dt, c); + ClearRenderTarget(dTex, c); - if(st[1] && !slbg) + if(sTex[1] && !slbg) { - StretchRect(st[1], sr[1], dt, dr[1], m_merge.ps[0], NULL, true); + StretchRect(sTex[1], sRect[1], dTex, dRect[1], m_merge.ps[0], NULL, true); } - if(st[0]) + if(sTex[0]) { MergeConstantBuffer cb; cb.BGColor = c; - StretchRect(st[0], sr[0], dt, dr[0], m_merge.ps[mmod ? 1 : 0], (const float*)&cb, 1, &m_merge.bs, true); + StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge.ps[mmod ? 1 : 0], (const float*)&cb, 1, &m_merge.bs, true); } } -void GSDevice9::DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset) +void GSDevice9::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset) { - GSVector4 s = GSVector4(dt->GetSize()); + GSVector4 s = GSVector4(dTex->GetSize()); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0.0f, yoffset, s.x, s.y + yoffset); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0.0f, yoffset, s.x, s.y + yoffset); InterlaceConstantBuffer cb; cb.ZrH = GSVector2(0, 1.0f / s.y); cb.hH = (float)s.y / 2; - StretchRect(st, sr, dt, dr, m_interlace.ps[shader], (const float*)&cb, 1, linear); + StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[shader], (const float*)&cb, 1, linear); } void GSDevice9::InitExternalFX() @@ -930,7 +939,25 @@ if (!ExShader_Compiled) { try { - CompileShader("shaders/GSdx.fx", "ps_main", NULL, &m_shaderfx.ps); + std::string config_name(theApp.GetConfig("shaderfx_conf", "shaders/GSdx_FX_Settings.ini")); + std::ifstream fconfig(config_name); + std::stringstream shader; + if (fconfig.good()) + shader << fconfig.rdbuf() << "\n"; + else + fprintf(stderr, "GSdx: External shader config '%s' not loaded.\n", config_name.c_str()); + + std::string shader_name(theApp.GetConfig("shaderfx_glsl", "shaders/GSdx.fx")); + std::ifstream fshader(shader_name); + if (fshader.good()) + { + shader << fshader.rdbuf(); + CompileShader(shader.str().c_str(), shader.str().length(), "ps_main", NULL, &m_shaderfx.ps); + } + else + { + fprintf(stderr, "GSdx: External shader '%s' not loaded and will be disabled!\n", shader_name.c_str()); + } } catch (GSDXRecoverableError) { printf("GSdx: failed to compile external post-processing shader. \n"); @@ -939,12 +966,12 @@ } } -void GSDevice9::DoExternalFX(GSTexture* st, GSTexture* dt) +void GSDevice9::DoExternalFX(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ExternalFXConstantBuffer cb; @@ -954,7 +981,7 @@ cb.rcpFrame = GSVector4(1.0f / s.x, 1.0f / s.y, 0.0f, 0.0f); cb.rcpFrameOpt = GSVector4::zero(); - StretchRect(st, sr, dt, dr, m_shaderfx.ps, (const float*)&cb, 2, true); + StretchRect(sTex, sRect, dTex, dRect, m_shaderfx.ps, (const float*)&cb, 2, true); } void GSDevice9::InitFXAA() @@ -962,7 +989,9 @@ if (!FXAA_Compiled) { try { - CompileShader(IDR_FXAA_FX, "ps_main", NULL, &m_fxaa.ps); + vector shader; + theApp.LoadResource(IDR_FXAA_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "ps_main", NULL, &m_fxaa.ps); } catch (GSDXRecoverableError) { printf("GSdx: Failed to compile fxaa shader.\n"); @@ -971,12 +1000,12 @@ } } -void GSDevice9::DoFXAA(GSTexture* st, GSTexture* dt) +void GSDevice9::DoFXAA(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); FXAAConstantBuffer cb; @@ -985,22 +1014,22 @@ cb.rcpFrame = GSVector4(1.0f / s.x, 1.0f / s.y, 0.0f, 0.0f); cb.rcpFrameOpt = GSVector4::zero(); - StretchRect(st, sr, dt, dr, m_fxaa.ps, (const float*)&cb, 2, true); + StretchRect(sTex, sRect, dTex, dRect, m_fxaa.ps, (const float*)&cb, 2, true); } -void GSDevice9::DoShadeBoost(GSTexture* st, GSTexture* dt) +void GSDevice9::DoShadeBoost(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ShadeBoostConstantBuffer cb; cb.rcpFrame = GSVector4(1.0f / s.x, 1.0f / s.y, 0.0f, 0.0f); cb.rcpFrameOpt = GSVector4::zero(); - StretchRect(st, sr, dt, dr, m_shadeboost.ps, (const float*)&cb, 1, true); + StretchRect(sTex, sRect, dTex, dRect, m_shadeboost.ps, (const float*)&cb, 1, true); } void GSDevice9::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* vertices, bool datm) @@ -1418,84 +1447,7 @@ } } -void GSDevice9::CompileShader(const char* fn, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il) -{ - vector m; - - PrepareShaderMacro(m, macro); - - HRESULT hr; - - CComPtr shader, error; - - hr = D3DXCompileShaderFromFile(fn, &m[0], NULL, entry.c_str(), m_shader.vs.c_str(), 0, &shader, &error, NULL); - - if(SUCCEEDED(hr)) - { - hr = m_dev->CreateVertexShader((DWORD*)shader->GetBufferPointer(), vs); - } - else if(error) - { - printf("%s\n", (const char*)error->GetBufferPointer()); - } - - ASSERT(SUCCEEDED(hr)); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } - - hr = m_dev->CreateVertexDeclaration(layout, il); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } -} - -void GSDevice9::CompileShader(const char* fn, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps) -{ - uint32 flags = 0; - - if(m_shader.level >= D3D_FEATURE_LEVEL_9_3) - { - flags |= D3DXSHADER_AVOID_FLOW_CONTROL; - } - else - { - flags |= D3DXSHADER_SKIPVALIDATION; - } - - vector m; - - PrepareShaderMacro(m, macro); - - HRESULT hr; - - CComPtr shader, error; - - hr = D3DXCompileShaderFromFile(fn, &m[0], NULL, entry.c_str(), m_shader.ps.c_str(), flags, &shader, &error, NULL); - - if(SUCCEEDED(hr)) - { - hr = m_dev->CreatePixelShader((DWORD*)shader->GetBufferPointer(), ps); - } - else if(error) - { - printf("%s\n", (const char*)error->GetBufferPointer()); - } - - ASSERT(SUCCEEDED(hr)); - - if(FAILED(hr)) - { - throw GSDXRecoverableError(); - } -} - - -void GSDevice9::CompileShader(uint32 id, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il) +void GSDevice9::CompileShader(const char *source, size_t size, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il) { vector m; @@ -1505,7 +1457,7 @@ CComPtr shader, error; - hr = D3DXCompileShaderFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), &m[0], NULL, entry.c_str(), m_shader.vs.c_str(), 0, &shader, &error, NULL); + hr = D3DXCompileShader(source, size, &m[0], NULL, entry.c_str(), m_shader.vs.c_str(), 0, &shader, &error, NULL); if(SUCCEEDED(hr)) { @@ -1516,6 +1468,8 @@ printf("%s\n", (const char*)error->GetBufferPointer()); } + ASSERT(SUCCEEDED(hr)); + if(FAILED(hr)) { throw GSDXRecoverableError(); @@ -1529,7 +1483,7 @@ } } -void GSDevice9::CompileShader(uint32 id, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps) +void GSDevice9::CompileShader(const char *source, size_t size, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps) { uint32 flags = 0; @@ -1549,8 +1503,7 @@ HRESULT hr; CComPtr shader, error; - - hr = D3DXCompileShaderFromResource(theApp.GetModuleHandle(), MAKEINTRESOURCE(id), &m[0], NULL, entry.c_str(), m_shader.ps.c_str(), flags, &shader, &error, NULL); + hr = D3DXCompileShader(source, size, &m[0], NULL, entry.c_str(), m_shader.ps.c_str(), flags, &shader, &error, NULL); if(SUCCEEDED(hr)) { @@ -1561,9 +1514,10 @@ printf("%s\n", (const char*)error->GetBufferPointer()); } + ASSERT(SUCCEEDED(hr)); + if(FAILED(hr)) { throw GSDXRecoverableError(); } } - diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice9.h pcsx2-1.4.0/plugins/GSdx/GSDevice9.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice9.h 2014-09-15 13:49:16.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice9.h 2016-01-05 17:28:08.000000000 +0000 @@ -74,11 +74,11 @@ { GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format); - void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c); - void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset = 0); - void DoFXAA(GSTexture* st, GSTexture* dt); - void DoShadeBoost(GSTexture* st, GSTexture* dt); - void DoExternalFX(GSTexture* st, GSTexture* dt); + void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c); + void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset = 0); + void DoFXAA(GSTexture* sTex, GSTexture* dTex); + void DoShadeBoost(GSTexture* sTex, GSTexture* dTex); + void DoExternalFX(GSTexture* sTex, GSTexture* dTex); void InitExternalFX(); void InitFXAA(); @@ -209,13 +209,13 @@ GSTexture* Resolve(GSTexture* t); - GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format = 0); + GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format = 0, int ps_shader = 0); - void CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r); + void CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, Direct3DBlendState9* bs, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, IDirect3DPixelShader9* ps, const float* ps_cb, int ps_cb_len, Direct3DBlendState9* bs, bool linear = true); void IASetVertexBuffer(const void* vertex, size_t stride, size_t count); bool IAMapVertexBuffer(void** vertex, size_t stride, size_t count); @@ -237,11 +237,8 @@ IDirect3DDevice9* operator->() {return m_dev;} operator IDirect3DDevice9*() {return m_dev;} - void CompileShader(uint32 id, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il); - void CompileShader(uint32 id, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps); - - void CompileShader(const char* fn, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il); - void CompileShader(const char* fn, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps); + void CompileShader(const char *source, size_t size, const string& entry, const D3DXMACRO* macro, IDirect3DVertexShader9** vs, const D3DVERTEXELEMENT9* layout, int count, IDirect3DVertexDeclaration9** il); + void CompileShader(const char *source, size_t size, const string& entry, const D3DXMACRO* macro, IDirect3DPixelShader9** ps); void SetupVS(VSSelector sel, const VSConstantBuffer* cb); void SetupGS(GSSelector sel) {} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice.cpp pcsx2-1.4.0/plugins/GSdx/GSDevice.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice.cpp 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -35,6 +35,7 @@ , m_fxaa(NULL) , m_shadeboost(NULL) , m_1x1(NULL) + , m_current(NULL) , m_frame(0) { memset(&m_vertex, 0, sizeof(m_vertex)); @@ -106,21 +107,27 @@ } } + GL_PUSH("Present"); + ClearRenderTarget(m_backbuffer, 0); if(m_current) { - static int s_shader[5] = {0, 5, 6, 8, 9}; // FIXME + static int s_shader[5] = {ShaderConvert_COPY, ShaderConvert_SCANLINE, + ShaderConvert_DIAGONAL_FILTER, ShaderConvert_TRIANGULAR_FILTER, + ShaderConvert_COMPLEX_FILTER}; // FIXME Present(m_current, m_backbuffer, GSVector4(r), s_shader[shader]); } Flip(); + + GL_POP(); } -void GSDevice::Present(GSTexture* st, GSTexture* dt, const GSVector4& dr, int shader) +void GSDevice::Present(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, int shader) { - StretchRect(st, dt, dr, shader); + StretchRect(sTex, dTex, dRect, shader); } GSTexture* GSDevice::FetchSurface(int type, int w, int h, bool msaa, int format) @@ -142,6 +149,20 @@ return CreateSurface(type, w, h, msaa, format); } +void GSDevice::PrintMemoryUsage() +{ +#ifdef ENABLE_OGL_DEBUG + uint32 pool = 0; + for(list::iterator i = m_pool.begin(); i != m_pool.end(); i++) + { + GSTexture* t = *i; + if (t) + pool += t->GetMemUsage(); + } + GL_PERF("MEM: Surface Pool %dMB", pool >> 20u); +#endif +} + void GSDevice::EndScene() { m_vertex.start += m_vertex.count; @@ -154,6 +175,17 @@ { if(t) { + // FIXME: WARNING: Broken Texture Cache reuse render target without any + // cleaning (or uploading of correct gs mem data) Ofc it is wrong. If + // blending is enabled, rendering would be completely broken. However + // du to wrong invalidation of the TC it is sometimes better to reuse + // (partially) wrong data... + // + // Invalidating the data might be even worse. I'm not sure invalidating data really + // help on the perf. But people reports better perf on BDG2 (memory intensive) on OpenGL. + // It could be the reason. + t->Invalidate(); + t->last_frame_used = m_frame; m_pool.push_front(t); @@ -201,9 +233,9 @@ return FetchSurface(GSTexture::Offscreen, w, h, false, format); } -void GSDevice::StretchRect(GSTexture* st, GSTexture* dt, const GSVector4& dr, int shader, bool linear) +void GSDevice::StretchRect(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, int shader, bool linear) { - StretchRect(st, GSVector4(0, 0, 1, 1), dt, dr, shader, linear); + StretchRect(sTex, GSVector4(0, 0, 1, 1), dTex, dRect, shader, linear); } GSTexture* GSDevice::GetCurrent() @@ -211,7 +243,7 @@ return m_current; } -void GSDevice::Merge(GSTexture* st[2], GSVector4* sr, GSVector4* dr, const GSVector2i& fs, bool slbg, bool mmod, const GSVector4& c) +void GSDevice::Merge(GSTexture* sTex[2], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, bool slbg, bool mmod, const GSVector4& c) { if(m_merge == NULL || m_merge->GetSize() != fs) { @@ -232,17 +264,17 @@ for(size_t i = 0; i < countof(tex); i++) { - if(st[i] != NULL) + if(sTex[i] != NULL) { - tex[i] = st[i]->IsMSAA() ? Resolve(st[i]) : st[i]; + tex[i] = sTex[i]->IsMSAA() ? Resolve(sTex[i]) : sTex[i]; } } - DoMerge(tex, sr, m_merge, dr, slbg, mmod, c); + DoMerge(tex, sRect, m_merge, dRect, slbg, mmod, c); for(size_t i = 0; i < countof(tex); i++) { - if(tex[i] != st[i]) + if(tex[i] != sTex[i]) { Recycle(tex[i]); } @@ -315,10 +347,10 @@ if (m_shaderfx != NULL) { - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); - StretchRect(m_current, sr, m_shaderfx, dr, 7, false); + StretchRect(m_current, sRect, m_shaderfx, dRect, 7, false); DoExternalFX(m_shaderfx, m_current); } } @@ -335,10 +367,10 @@ if(m_fxaa != NULL) { - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); - StretchRect(m_current, sr, m_fxaa, dr, 7, false); + StretchRect(m_current, sRect, m_fxaa, dRect, 7, false); DoFXAA(m_fxaa, m_current); } } @@ -355,10 +387,10 @@ if(m_shadeboost != NULL) { - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); - StretchRect(m_current, sr, m_shadeboost, dr, 0, false); + StretchRect(m_current, sRect, m_shadeboost, dRect, 0, false); DoShadeBoost(m_shadeboost, m_current); } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceDX.h pcsx2-1.4.0/plugins/GSdx/GSDeviceDX.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceDX.h 2013-02-12 10:57:48.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceDX.h 2016-01-05 17:28:08.000000000 +0000 @@ -76,7 +76,6 @@ uint32 fst:1; uint32 logz:1; uint32 rtcopy:1; - uint32 wildhack:2; }; uint32 key; @@ -179,6 +178,8 @@ uint32 spritehack:1; uint32 tcoffsethack:1; uint32 point_sampler:1; + uint32 shuffle:1; + uint32 read_ba:1; }; uint32 key; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice.h pcsx2-1.4.0/plugins/GSdx/GSDevice.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDevice.h 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDevice.h 2016-01-05 17:28:08.000000000 +0000 @@ -26,8 +26,37 @@ #include "GSVertex.h" #include "GSAlignedClass.h" +enum ShaderConvert { + ShaderConvert_COPY = 0, + ShaderConvert_RGBA8_TO_16_BITS, + ShaderConvert_DATM_1, + ShaderConvert_DATM_0, + ShaderConvert_MOD_256, + ShaderConvert_SCANLINE = 5, + ShaderConvert_DIAGONAL_FILTER, + ShaderConvert_TRANSPARENCY_FILTER, + ShaderConvert_TRIANGULAR_FILTER, + ShaderConvert_COMPLEX_FILTER, + ShaderConvert_FLOAT32_TO_32_BITS = 10, + ShaderConvert_FLOAT32_TO_RGBA8, + ShaderConvert_FLOAT16_TO_RGB5A1, + ShaderConvert_RGBA8_TO_FLOAT32 = 13, + ShaderConvert_RGBA8_TO_FLOAT24, + ShaderConvert_RGBA8_TO_FLOAT16, + ShaderConvert_RGB5A1_TO_FLOAT16, + ShaderConvert_RGBA_TO_8I = 17 +}; + #pragma pack(push, 1) +class ConvertConstantBuffer +{ +public: + GSVector4i ScalingFactor; + + ConvertConstantBuffer() {memset(this, 0, sizeof(*this));} +}; + class MergeConstantBuffer { public: @@ -100,11 +129,11 @@ virtual GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format) = 0; virtual GSTexture* FetchSurface(int type, int w, int h, bool msaa, int format); - virtual void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) = 0; - virtual void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset) = 0; - virtual void DoFXAA(GSTexture* st, GSTexture* dt) {} - virtual void DoShadeBoost(GSTexture* st, GSTexture* dt) {} - virtual void DoExternalFX(GSTexture* st, GSTexture* dt) {} + virtual void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) = 0; + virtual void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset) = 0; + virtual void DoFXAA(GSTexture* sTex, GSTexture* dTex) {} + virtual void DoShadeBoost(GSTexture* sTex, GSTexture* dTex) {} + virtual void DoExternalFX(GSTexture* sTex, GSTexture* dTex) {} public: GSDevice(); @@ -118,7 +147,7 @@ virtual bool Reset(int w, int h); virtual bool IsLost(bool update = false) {return false;} virtual void Present(const GSVector4i& r, int shader); - virtual void Present(GSTexture* st, GSTexture* dt, const GSVector4& dr, int shader = 0); + virtual void Present(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, int shader = 0); virtual void Flip() {} virtual void SetVSync(bool enable) {m_vsync = enable;} @@ -141,24 +170,20 @@ virtual GSTexture* Resolve(GSTexture* t) {return NULL;} - virtual GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format = 0) {return NULL;} + virtual GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format = 0, int ps_shader = 0) {return NULL;} - virtual void CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r) {} - virtual void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true) {} + virtual void CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r) {} + virtual void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true) {} - void StretchRect(GSTexture* st, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true); + void StretchRect(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true); virtual void PSSetShaderResources(GSTexture* sr0, GSTexture* sr1) {} - virtual void PSSetShaderResource(int i, GSTexture* sr) {} + virtual void PSSetShaderResource(int i, GSTexture* sRect) {} virtual void OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor = NULL) {} - // Used for opengl multithread hack - virtual void AttachContext() {} - virtual void DetachContext() {} - GSTexture* GetCurrent(); - void Merge(GSTexture* st[2], GSVector4* sr, GSVector4* dr, const GSVector2i& fs, bool slbg, bool mmod, const GSVector4& c); + void Merge(GSTexture* sTex[2], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, bool slbg, bool mmod, const GSVector4& c); void Interlace(const GSVector2i& ds, int field, int mode, float yoffset); void FXAA(); void ShadeBoost(); @@ -169,6 +194,8 @@ bool IsRBSwapped() {return m_rbswapped;} void AgePool(); + + virtual void PrintMemoryUsage(); }; struct GSAdapter diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceNull.h pcsx2-1.4.0/plugins/GSdx/GSDeviceNull.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceNull.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceNull.h 2016-01-05 17:28:08.000000000 +0000 @@ -29,8 +29,8 @@ private: GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format); - void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) {} - void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset = 0) {} + void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) {} + void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset = 0) {} public: GSDeviceNull() {} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSDeviceOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceOGL.cpp 2014-11-09 16:23:17.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,29 +26,36 @@ #include "res/glsl_source.h" -//#define LOUD_DEBUGGING -//#define PRINT_FRAME_NUMBER //#define ONLY_LINES -static uint32 g_draw_count = 0; -static uint32 g_frame_count = 1; +// TODO port those value into PerfMon API #ifdef ENABLE_OGL_DEBUG_MEM_BW -uint32 g_texture_upload_byte = 0; -uint32 g_vertex_upload_byte = 0; +uint64 g_real_texture_upload_byte = 0; +uint64 g_vertex_upload_byte = 0; +uint64 g_uniform_upload_byte = 0; #endif static const uint32 g_merge_cb_index = 10; static const uint32 g_interlace_cb_index = 11; static const uint32 g_shadeboost_cb_index = 12; static const uint32 g_fx_cb_index = 14; +static const uint32 g_convert_index = 15; + +bool GSDeviceOGL::m_debug_gl_call = false; +int GSDeviceOGL::s_n = 0; +FILE* GSDeviceOGL::m_debug_gl_file = NULL; GSDeviceOGL::GSDeviceOGL() - : m_free_window(false) - , m_window(NULL) - , m_fbo(0) - , m_fbo_read(0) - , m_va(NULL) - , m_shader(NULL) + : m_msaa(0) + , m_window(NULL) + , m_fbo(0) + , m_fbo_read(0) + , m_va(NULL) + , m_apitrace(0) + , m_palette_ss(0) + , m_vs_cb(NULL) + , m_ps_cb(NULL) + , m_shader(NULL) { memset(&m_merge_obj, 0, sizeof(m_merge_obj)); memset(&m_interlace, 0, sizeof(m_interlace)); @@ -56,22 +63,31 @@ memset(&m_fxaa, 0, sizeof(m_fxaa)); memset(&m_shaderfx, 0, sizeof(m_shaderfx)); memset(&m_date, 0, sizeof(m_date)); - memset(&m_state, 0, sizeof(m_state)); + memset(&m_shadeboost, 0, sizeof(m_shadeboost)); + memset(&m_om_dss, 0, sizeof(m_om_dss)); GLState::Clear(); // Reset the debug file #ifdef ENABLE_OGL_DEBUG - FILE* f = fopen("Debug.txt","w"); - fclose(f); + m_debug_gl_file = fopen("GSdx_opengl_debug.txt","w"); #endif + + m_debug_gl_call = theApp.GetConfig("debug_opengl", 0); } GSDeviceOGL::~GSDeviceOGL() { + if (m_debug_gl_file) { + fclose(m_debug_gl_file); + m_debug_gl_file = NULL; + } + // If the create function wasn't called nothing to do. if (m_shader == NULL) return; + GL_PUSH("GSDeviceOGL destructor"); + // Clean vertex buffer state delete (m_va); @@ -79,7 +95,6 @@ for (size_t i = 0; i < countof(m_merge_obj.ps); i++) m_shader->Delete(m_merge_obj.ps[i]); delete (m_merge_obj.cb); - delete (m_merge_obj.bs); // Clean m_interlace for (size_t i = 0; i < countof(m_interlace.ps); i++) @@ -91,7 +106,8 @@ for (size_t i = 0; i < countof(m_convert.ps); i++) m_shader->Delete(m_convert.ps[i]); delete m_convert.dss; - delete m_convert.bs; + delete m_convert.dss_write; + delete m_convert.cb; // Clean m_fxaa delete m_fxaa.cb; @@ -103,7 +119,6 @@ // Clean m_date delete m_date.dss; - delete m_date.bs; // Clean shadeboost delete m_shadeboost.cb; @@ -111,41 +126,43 @@ // Clean various opengl allocation - gl_DeleteFramebuffers(1, &m_fbo); - gl_DeleteFramebuffers(1, &m_fbo_read); + glDeleteFramebuffers(1, &m_fbo); + glDeleteFramebuffers(1, &m_fbo_read); // Delete HW FX delete m_vs_cb; delete m_ps_cb; - gl_DeleteSamplers(1, &m_palette_ss); + glDeleteSamplers(1, &m_palette_ss); m_shader->Delete(m_apitrace); - for (uint32 key = 0; key < VSSelector::size(); key++) m_shader->Delete(m_vs[key]); - m_shader->Delete(m_gs); + for (uint32 key = 0; key < countof(m_vs); key++) m_shader->Delete(m_vs[key]); + for (uint32 key = 0; key < countof(m_gs); key++) m_shader->Delete(m_gs[key]); for (auto it = m_ps.begin(); it != m_ps.end() ; it++) m_shader->Delete(it->second); m_ps.clear(); - gl_DeleteSamplers(PSSamplerSelector::size(), m_ps_ss); + glDeleteSamplers(countof(m_ps_ss), m_ps_ss); - for (uint32 key = 0; key < OMDepthStencilSelector::size(); key++) delete m_om_dss[key]; - - for (auto it = m_om_bs.begin(); it != m_om_bs.end(); it++) delete it->second; - m_om_bs.clear(); + for (uint32 key = 0; key < countof(m_om_dss); key++) delete m_om_dss[key]; PboPool::Destroy(); // Must be done after the destruction of all shader/program objects delete m_shader; m_shader = NULL; + + GL_POP(); } -GSTexture* GSDeviceOGL::CreateSurface(int type, int w, int h, bool msaa, int format) +GSTexture* GSDeviceOGL::CreateSurface(int type, int w, int h, bool msaa, int fmt) { + GL_PUSH("Create surface"); + // A wrapper to call GSTextureOGL, with the different kind of parameter GSTextureOGL* t = NULL; - t = new GSTextureOGL(type, w, h, format, m_fbo_read); + t = new GSTextureOGL(type, w, h, fmt, m_fbo_read); + // NOTE: I'm not sure RenderTarget always need to be cleared. It could be costly for big upscale. switch(type) { case GSTexture::RenderTarget: @@ -156,6 +173,8 @@ // No need to clear the stencil now. break; } + + GL_POP(); return t; } @@ -177,62 +196,92 @@ // **************************************************************** // Debug helper // **************************************************************** -#ifndef ENABLE_GLES #ifdef ENABLE_OGL_DEBUG - gl_DebugMessageCallback((GLDEBUGPROC)DebugOutputToFile, NULL); - glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); -#endif + if (theApp.GetConfig("debug_opengl", 0)) { + if (glDebugMessageCallback) { + glDebugMessageCallback((GLDEBUGPROC)DebugOutputToFile, NULL); + glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); + } + if (glDebugMessageControl) { + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, true); + // Useless info message on Nvidia driver + GLuint ids[] = {0x20004}; + glDebugMessageControl(GL_DEBUG_SOURCE_API_ARB, GL_DEBUG_TYPE_OTHER_ARB, GL_DONT_CARE, countof(ids), ids, false); + } + } #endif + // WARNING it must be done after the control setup (at least on MESA) + GL_PUSH("GSDeviceOGL::Create"); + // **************************************************************** // Various object // **************************************************************** + GL_PUSH("GSDeviceOGL::Various"); + m_shader = new GSShaderOGL(!!theApp.GetConfig("debug_glsl_shader", 0)); - gl_GenFramebuffers(1, &m_fbo); - gl_GenFramebuffers(1, &m_fbo_read); + glGenFramebuffers(1, &m_fbo); + // Always write to the first buffer + OMSetFBO(m_fbo); + GLenum target[1] = {GL_COLOR_ATTACHMENT0}; + glDrawBuffers(1, target); + OMSetFBO(0); + + glGenFramebuffers(1, &m_fbo_read); + // Always read from the first buffer + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glReadBuffer(GL_COLOR_ATTACHMENT0); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + + GL_POP(); // **************************************************************** // Vertex buffer state // **************************************************************** + GL_PUSH("GSDeviceOGL::Vertex Buffer"); + ASSERT(sizeof(GSVertexPT1) == sizeof(GSVertex)); GSInputLayoutOGL il_convert[] = { {2 , GL_FLOAT , GL_FALSE , sizeof(GSVertexPT1) , (const GLvoid*)(0) } , {2 , GL_FLOAT , GL_FALSE , sizeof(GSVertexPT1) , (const GLvoid*)(16) } , - {4 , GL_UNSIGNED_BYTE , GL_TRUE , sizeof(GSVertex) , (const GLvoid*)(8) } , + {4 , GL_UNSIGNED_BYTE , GL_FALSE , sizeof(GSVertex) , (const GLvoid*)(8) } , {1 , GL_FLOAT , GL_FALSE , sizeof(GSVertex) , (const GLvoid*)(12) } , {2 , GL_UNSIGNED_SHORT , GL_FALSE , sizeof(GSVertex) , (const GLvoid*)(16) } , {1 , GL_UNSIGNED_INT , GL_FALSE , sizeof(GSVertex) , (const GLvoid*)(20) } , {2 , GL_UNSIGNED_SHORT , GL_FALSE , sizeof(GSVertex) , (const GLvoid*)(24) } , - {4 , GL_UNSIGNED_BYTE , GL_TRUE , sizeof(GSVertex) , (const GLvoid*)(28) } , + {4 , GL_UNSIGNED_BYTE , GL_TRUE , sizeof(GSVertex) , (const GLvoid*)(28) } , // Only 1 byte is useful but hardware unit only support 4B }; m_va = new GSVertexBufferStateOGL(sizeof(GSVertexPT1), il_convert, countof(il_convert)); - // **************************************************************** - // Texture unit state - // **************************************************************** - // By default use unit 3 for texture modification - // unit 0-2 will allocated to shader input - gl_ActiveTexture(GL_TEXTURE0 + 3); - + GL_POP(); // **************************************************************** // Pre Generate the different sampler object // **************************************************************** - for (uint32 key = 0; key < PSSamplerSelector::size(); key++) + GL_PUSH("GSDeviceOGL::Sampler"); + + for (uint32 key = 0; key < countof(m_ps_ss); key++) { m_ps_ss[key] = CreateSampler(PSSamplerSelector(key)); + } + + GL_POP(); // **************************************************************** // convert // **************************************************************** + GL_PUSH("GSDeviceOGL::Convert"); + + m_convert.cb = new GSUniformBufferOGL(g_convert_index, sizeof(ConvertConstantBuffer)); + // Upload once and forget about it + ConvertConstantBuffer cb; + cb.ScalingFactor = GSVector4i(theApp.GetConfig("upscale_multiplier", 1)); + m_convert.cb->upload(&cb); + m_convert.vs = m_shader->Compile("convert.glsl", "vs_main", GL_VERTEX_SHADER, convert_glsl); for(size_t i = 0; i < countof(m_convert.ps); i++) m_convert.ps[i] = m_shader->Compile("convert.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, convert_glsl); - // Note the following object are initialized to 0 so disabled. - // Note: maybe enable blend with a factor of 1 - // m_convert.dss, m_convert.bs - PSSamplerSelector point; m_convert.pt = GetSamplerID(point); @@ -241,30 +290,41 @@ m_convert.ln = GetSamplerID(bilinear); m_convert.dss = new GSDepthStencilOGL(); - m_convert.bs = new GSBlendStateOGL(); + m_convert.dss_write = new GSDepthStencilOGL(); + m_convert.dss_write->EnableDepth(); + m_convert.dss_write->SetDepth(GL_ALWAYS, true); + + GL_POP(); // **************************************************************** // merge // **************************************************************** + GL_PUSH("GSDeviceOGL::Merge"); + m_merge_obj.cb = new GSUniformBufferOGL(g_merge_cb_index, sizeof(MergeConstantBuffer)); for(size_t i = 0; i < countof(m_merge_obj.ps); i++) m_merge_obj.ps[i] = m_shader->Compile("merge.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, merge_glsl); - m_merge_obj.bs = new GSBlendStateOGL(); - m_merge_obj.bs->EnableBlend(); - m_merge_obj.bs->SetRGB(GL_FUNC_ADD, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + GL_POP(); // **************************************************************** // interlace // **************************************************************** + GL_PUSH("GSDeviceOGL::Interlace"); + m_interlace.cb = new GSUniformBufferOGL(g_interlace_cb_index, sizeof(InterlaceConstantBuffer)); for(size_t i = 0; i < countof(m_interlace.ps); i++) m_interlace.ps[i] = m_shader->Compile("interlace.glsl", format("ps_main%d", i), GL_FRAGMENT_SHADER, interlace_glsl); + + GL_POP(); + // **************************************************************** // Shade boost // **************************************************************** + GL_PUSH("GSDeviceOGL::Shadeboost"); + m_shadeboost.cb = new GSUniformBufferOGL(g_shadeboost_cb_index, sizeof(ShadeBoostConstantBuffer)); int ShadeBoost_Contrast = theApp.GetConfig("ShadeBoost_Contrast", 50); @@ -276,48 +336,36 @@ m_shadeboost.ps = m_shader->Compile("shadeboost.glsl", "ps_main", GL_FRAGMENT_SHADER, shadeboost_glsl, shade_macro); + GL_POP(); + // **************************************************************** // rasterization configuration // **************************************************************** -#ifndef ENABLE_GLES + GL_PUSH("GSDeviceOGL::Rasterization"); + +#ifdef ONLY_LINES + glLineWidth(5.0); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +#else glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); #endif glDisable(GL_CULL_FACE); glEnable(GL_SCISSOR_TEST); - // FIXME enable it when multisample code will be here - // DX: rd.MultisampleEnable = true; -#ifndef ENABLE_GLES glDisable(GL_MULTISAMPLE); -#endif -#ifdef ONLY_LINES - glLineWidth(5.0); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -#endif - // Hum I don't know for those options but let's hope there are not activated -#if 0 - rd.FrontCounterClockwise = false; - rd.DepthBias = false; - rd.DepthBiasClamp = 0; - rd.SlopeScaledDepthBias = 0; - rd.DepthClipEnable = false; // ??? - rd.AntialiasedLineEnable = false; -#endif + glDisable(GL_DITHER); // Honestly I don't know! + + GL_POP(); // **************************************************************** // DATE // **************************************************************** + GL_PUSH("GSDeviceOGL::Date"); m_date.dss = new GSDepthStencilOGL(); m_date.dss->EnableStencil(); m_date.dss->SetStencil(GL_ALWAYS, GL_REPLACE); - m_date.bs = new GSBlendStateOGL(); - // FIXME impact image load? -//#ifndef ENABLE_OGL_STENCIL_DEBUG -// // Only keep stencil data -// m_date.bs->SetMask(false, false, false, false); -//#endif - + GL_POP(); // **************************************************************** // Use DX coordinate convention // **************************************************************** @@ -328,23 +376,32 @@ // because of -1 we loose lot of precision for small GS value // This extension allow FS depth to range from -1 to 1. So // gl_position.z could range from [0, 1] -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_clip_control) { // Change depth convention - gl_ClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); + glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); } -#endif // **************************************************************** // HW renderer shader // **************************************************************** + GL_PUSH("GSDeviceOGL::CreateTextureFX"); + CreateTextureFX(); + GL_POP(); + // **************************************************************** // Pbo Pool allocation // **************************************************************** + GL_PUSH("GSDeviceOGL::PBO"); + PboPool::Init(); + GL_POP(); + + // Done ! + GL_POP(); + // **************************************************************** // Finish window setup and backbuffer // **************************************************************** @@ -354,6 +411,13 @@ GSVector4i rect = wnd->GetClientRect(); Reset(rect.z, rect.w); + // Basic to ensure structures are correctly packed + ASSERT(sizeof(VSSelector) == 4); + ASSERT(sizeof(PSSelector) == 8); + ASSERT(sizeof(PSSamplerSelector) == 4); + ASSERT(sizeof(OMDepthStencilSelector) == 4); + ASSERT(sizeof(OMColorMaskSelector) == 4); + return true; } @@ -362,7 +426,6 @@ if(!GSDevice::Reset(w, h)) return false; - // TODO // Opengl allocate the backbuffer with the window. The render is done in the backbuffer when // there isn't any FBO. Only a dummy texture is created to easily detect when the rendering is done // in the backbuffer @@ -378,56 +441,20 @@ void GSDeviceOGL::Flip() { - // FIXME: disable it when code is working #ifdef ENABLE_OGL_DEBUG CheckDebugLog(); #endif m_wnd->Flip(); - -#ifdef PRINT_FRAME_NUMBER - fprintf(stderr, "Draw %d (Frame %d)\n", g_draw_count, g_frame_count); -#endif -#if defined(ENABLE_OGL_DEBUG) || defined(PRINT_FRAME_NUMBER) - g_frame_count++; -#endif -} - -void GSDeviceOGL::AttachContext() -{ - if (m_window) - m_window->AttachContext(); -} - -void GSDeviceOGL::DetachContext() -{ - if (m_window) - m_window->DetachContext(); } void GSDeviceOGL::BeforeDraw() { m_shader->UseProgram(); - -#ifdef _DEBUG - ASSERT(gl_CheckFramebufferStatus(GL_DRAW_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); -#endif - -//#ifdef ENABLE_OGL_STENCIL_DEBUG -// if (m_date.t) -// static_cast(m_date.t)->Save(format("/tmp/date_before_%04ld.csv", g_draw_count)); -//#endif } void GSDeviceOGL::AfterDraw() { -//#ifdef ENABLE_OGL_STENCIL_DEBUG -// if (m_date.t) -// static_cast(m_date.t)->Save(format("/tmp/date_after_%04ld.csv", g_draw_count)); -//#endif -#if defined(ENABLE_OGL_DEBUG) || defined(PRINT_FRAME_NUMBER) || defined(ENABLE_OGL_STENCIL_DEBUG) - g_draw_count++; -#endif } void GSDeviceOGL::DrawPrimitive() @@ -437,6 +464,13 @@ AfterDraw(); } +void GSDeviceOGL::DrawPrimitive(int offset, int count) +{ + BeforeDraw(); + m_va->DrawPrimitive(offset, count); + AfterDraw(); +} + void GSDeviceOGL::DrawIndexedPrimitive() { BeforeDraw(); @@ -446,7 +480,7 @@ void GSDeviceOGL::DrawIndexedPrimitive(int offset, int count) { - ASSERT(offset + count <= (int)m_index.count); + //ASSERT(offset + count <= (int)m_index.count); BeforeDraw(); m_va->DrawIndexedPrimitive(offset, count); @@ -455,187 +489,193 @@ void GSDeviceOGL::ClearRenderTarget(GSTexture* t, const GSVector4& c) { - if (GLLoader::found_GL_ARB_clear_texture) { - if (static_cast(t)->IsBackbuffer()) { - glDisable(GL_SCISSOR_TEST); - OMSetFBO(0); - // glDrawBuffer(GL_BACK); // this is the default when there is no FB - // 0 will select the first drawbuffer ie GL_BACK - gl_ClearBufferfv(GL_COLOR, 0, c.v); - glEnable(GL_SCISSOR_TEST); - } else { - static_cast(t)->Clear((const void*)&c); - } + if (!t) return; + + GSTextureOGL* T = static_cast(t); + if (T->HasBeenCleaned() && !T->IsBackbuffer()) + return; + + GL_PUSH("Clear RT %d", T->GetID()); + + // TODO: check size of scissor before toggling it + glDisable(GL_SCISSOR_TEST); + + uint32 old_color_mask = GLState::wrgba; + OMSetColorMaskState(); + + if (T->IsBackbuffer()) { + OMSetFBO(0); + + // glDrawBuffer(GL_BACK); // this is the default when there is no FB + // 0 will select the first drawbuffer ie GL_BACK + glClearBufferfv(GL_COLOR, 0, c.v); } else { - glDisable(GL_SCISSOR_TEST); - if (static_cast(t)->IsBackbuffer()) { - OMSetFBO(0); - - // glDrawBuffer(GL_BACK); // this is the default when there is no FB - // 0 will select the first drawbuffer ie GL_BACK - gl_ClearBufferfv(GL_COLOR, 0, c.v); - } else { - OMSetFBO(m_fbo); - OMAttachRt(static_cast(t)->GetID()); + OMSetFBO(m_fbo); + OMAttachRt(T); + + glClearBufferfv(GL_COLOR, 0, c.v); - gl_ClearBufferfv(GL_COLOR, 0, c.v); - } - glEnable(GL_SCISSOR_TEST); } + + OMSetColorMaskState(OMColorMaskSelector(old_color_mask)); + + glEnable(GL_SCISSOR_TEST); + + T->WasCleaned(); + + GL_POP(); } void GSDeviceOGL::ClearRenderTarget(GSTexture* t, uint32 c) { + if (!t) return; + GSVector4 color = GSVector4::rgba32(c) * (1.0f / 255); ClearRenderTarget(t, color); } -void GSDeviceOGL::ClearRenderTarget_ui(GSTexture* t, uint32 c) +void GSDeviceOGL::ClearRenderTarget_i(GSTexture* t, int32 c) { - if (GLLoader::found_GL_ARB_clear_texture) { - static_cast(t)->Clear((const void*)&c); - } else { - uint32 col[4] = {c, c, c, c}; + if (!t) return; - glDisable(GL_SCISSOR_TEST); + GSTextureOGL* T = static_cast(t); - OMSetFBO(m_fbo); - OMAttachRt(static_cast(t)->GetID()); + GL_PUSH("Clear RTi %d", T->GetID()); + + uint32 old_color_mask = GLState::wrgba; + OMSetColorMaskState(); - gl_ClearBufferuiv(GL_COLOR, 0, col); + // Keep SCISSOR_TEST enabled on purpose to reduce the size + // of clean in DATE (impact big upscaling) + int32 col[4] = {c, c, c, c}; - glEnable(GL_SCISSOR_TEST); + OMSetFBO(m_fbo); + OMAttachRt(T); + + // Blending is not supported when you render to an Integer texture + if (GLState::blend) { + glDisable(GL_BLEND); + } + + glClearBufferiv(GL_COLOR, 0, col); + + OMSetColorMaskState(OMColorMaskSelector(old_color_mask)); + + if (GLState::blend) { + glEnable(GL_BLEND); } + + GL_POP(); } void GSDeviceOGL::ClearDepth(GSTexture* t, float c) { - // TODO is it possible with GL44 ClearTexture? no the API is garbage! - // It can't be used here because it will clear both depth and stencil - if (0 && GLLoader::found_GL_ARB_clear_texture) { -#ifndef ENABLE_GLES - ASSERT(c == 0.0f); - gl_ClearTexImage(static_cast(t)->GetID(), GL_TEX_LEVEL_0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, NULL); -#endif - } else { - OMSetFBO(m_fbo); - OMAttachDs(static_cast(t)->GetID()); + if (!t) return; - glDisable(GL_SCISSOR_TEST); - if (GLState::depth_mask) { - gl_ClearBufferfv(GL_DEPTH, 0, &c); - } else { - glDepthMask(true); - gl_ClearBufferfv(GL_DEPTH, 0, &c); - glDepthMask(false); - } - glEnable(GL_SCISSOR_TEST); + GSTextureOGL* T = static_cast(t); + + GL_PUSH("Clear Depth %d", T->GetID()); + + OMSetFBO(m_fbo); + OMAttachDs(T); + + // TODO: check size of scissor before toggling it + glDisable(GL_SCISSOR_TEST); + if (GLState::depth_mask) { + glClearBufferfv(GL_DEPTH, 0, &c); + } else { + glDepthMask(true); + glClearBufferfv(GL_DEPTH, 0, &c); + glDepthMask(false); } + glEnable(GL_SCISSOR_TEST); + + GL_POP(); } void GSDeviceOGL::ClearStencil(GSTexture* t, uint8 c) { - // TODO is it possible with GL44 ClearTexture? no the API is garbage! - // It can't be used here because it will clear both depth and stencil - if (0 && GLLoader::found_GL_ARB_clear_texture) { -#ifndef ENABLE_GLES - ASSERT(c == 0); - gl_ClearTexImage(static_cast(t)->GetID(), GL_TEX_LEVEL_0, GL_DEPTH_STENCIL, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, NULL); -#endif - } else { - OMSetFBO(m_fbo); - OMAttachDs(static_cast(t)->GetID()); - GLint color = c; + if (!t) return; - glDisable(GL_SCISSOR_TEST); - gl_ClearBufferiv(GL_STENCIL, 0, &color); - glEnable(GL_SCISSOR_TEST); - } + GSTextureOGL* T = static_cast(t); + + GL_PUSH("Clear Stencil %d", T->GetID()); + + // Keep SCISSOR_TEST enabled on purpose to reduce the size + // of clean in DATE (impact big upscaling) + OMSetFBO(m_fbo); + OMAttachDs(T); + GLint color = c; + + glClearBufferiv(GL_STENCIL, 0, &color); + + GL_POP(); } GLuint GSDeviceOGL::CreateSampler(PSSamplerSelector sel) { - return CreateSampler(sel.ltf, sel.tau, sel.tav); + return CreateSampler(sel.ltf, sel.tau, sel.tav, sel.aniso); } -GLuint GSDeviceOGL::CreateSampler(bool bilinear, bool tau, bool tav) +GLuint GSDeviceOGL::CreateSampler(bool bilinear, bool tau, bool tav, bool aniso) { + GL_PUSH("Create Sampler"); + GLuint sampler; - gl_GenSamplers(1, &sampler); + glGenSamplers(1, &sampler); if (bilinear) { - gl_SamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - gl_SamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { - gl_SamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - gl_SamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } - // FIXME ensure U -> S, V -> T and W->R if (tau) - gl_SamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_REPEAT); + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_REPEAT); else - gl_SamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); if (tav) - gl_SamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_REPEAT); + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_REPEAT); else - gl_SamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - gl_SamplerParameteri(sampler, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - // FIXME which value for GL_TEXTURE_MIN_LOD - gl_SamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, FLT_MAX); + glSamplerParameterf(sampler, GL_TEXTURE_MIN_LOD, 0); + glSamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, 6); - // FIXME: seems there is 2 possibility in opengl - // DX: sd.ComparisonFunc = D3D11_COMPARISON_NEVER; - // gl_SamplerParameteri(sampler, GL_TEXTURE_COMPARE_MODE, GL_NONE); -#if 0 - // Message:Program undefined behavior warning: Sampler object 5 has depth compare enabled. It is being used with non-depth texture 7, by a program that samples it with a regular sampler. This is undefined behavior. - gl_SamplerParameteri(sampler, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); - gl_SamplerParameteri(sampler, GL_TEXTURE_COMPARE_FUNC, GL_NEVER); -#endif - // FIXME: need ogl extension sd.MaxAnisotropy = 16; + int anisotropy = theApp.GetConfig("MaxAnisotropy", 0); + if (GLLoader::found_GL_EXT_texture_filter_anisotropic && anisotropy && aniso) + glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, (float)anisotropy); + GL_POP(); return sampler; } -void GSDeviceOGL::InitPrimDateTexture(int w, int h) +void GSDeviceOGL::InitPrimDateTexture(GSTexture* rt) { + const GSVector2i& rtsize = rt->GetSize(); + // Create a texture to avoid the useless clean@0 if (m_date.t == NULL) - m_date.t = CreateTexture(w, h, GL_R32I); + m_date.t = CreateTexture(rtsize.x, rtsize.y, GL_R32I); - ClearRenderTarget_ui(m_date.t, 0x0FFFFFFF); + // Clean with the max signed value + ClearRenderTarget_i(m_date.t, 0x7FFFFFFF); -#ifdef ENABLE_OGL_STENCIL_DEBUG - gl_ActiveTexture(GL_TEXTURE0 + 5); - glBindTexture(GL_TEXTURE_2D, static_cast(m_date.t)->GetID()); - // Get back to the expected active texture unit - gl_ActiveTexture(GL_TEXTURE0 + 3); -#endif - - BindDateTexture(); -} - -void GSDeviceOGL::BindDateTexture() -{ - // TODO: multibind? - // GLuint textures[1] = {static_cast(m_date.t)->GetID()}; - // gl_BindImageTextures(2, 1, textures); - //gl_BindImageTexture(2, 0, 0, true, 0, GL_READ_WRITE, GL_R32I); - -#ifndef ENABLE_GLES - gl_BindImageTexture(2, static_cast(m_date.t)->GetID(), 0, false, 0, GL_READ_WRITE, GL_R32I); + glBindImageTexture(2, m_date.t->GetID(), 0, false, 0, GL_READ_WRITE, GL_R32I); +#ifdef ENABLE_OGL_DEBUG + // Help to see the texture in apitrace + PSSetShaderResource(2, m_date.t); #endif } void GSDeviceOGL::RecycleDateTexture() { if (m_date.t) { -#ifdef ENABLE_OGL_STENCIL_DEBUG - //static_cast(m_date.t)->Save(format("/tmp/date_adv_%04ld.csv", g_draw_count)); -#endif + //static_cast(m_date.t)->Save(format("/tmp/date_adv_%04ld.csv", s_n)); - // FIXME invalidate data Recycle(m_date.t); m_date.t = NULL; } @@ -643,35 +683,28 @@ void GSDeviceOGL::Barrier(GLbitfield b) { -#ifndef ENABLE_GLES - gl_MemoryBarrier(b); -//#ifdef ENABLE_OGL_STENCIL_DEBUG -// if (m_date.t) -// static_cast(m_date.t)->Save(format("/tmp/barrier_%04ld.csv", g_draw_count)); -//#endif -#endif + glMemoryBarrier(b); } /* Note: must be here because tfx_glsl is static */ -GLuint GSDeviceOGL::CompileVS(VSSelector sel) +GLuint GSDeviceOGL::CompileVS(VSSelector sel, int logz) { std::string macro = format("#define VS_BPPZ %d\n", sel.bppz) - + format("#define VS_LOGZ %d\n", sel.logz) + + format("#define VS_LOGZ %d\n", logz) + format("#define VS_TME %d\n", sel.tme) + format("#define VS_FST %d\n", sel.fst) + + format("#define VS_WILDHACK %d\n", sel.wildhack) ; - return m_shader->Compile("tfx.glsl", "vs_main", GL_VERTEX_SHADER, tfx_glsl, macro); + return m_shader->Compile("tfx_vgs.glsl", "vs_main", GL_VERTEX_SHADER, tfx_vgs_glsl, macro); } /* Note: must be here because tfx_glsl is static */ -GLuint GSDeviceOGL::CompileGS() +GLuint GSDeviceOGL::CompileGS(GSSelector sel) { -#ifdef ENABLE_GLES - return 0; -#else - return m_shader->Compile("tfx.glsl", "gs_main", GL_GEOMETRY_SHADER, tfx_glsl, ""); -#endif + std::string macro = format("#define GS_POINT %d\n", sel.point); + + return m_shader->Compile("tfx_vgs.glsl", "gs_main", GL_GEOMETRY_SHADER, tfx_vgs_glsl, macro); } /* Note: must be here because tfx_glsl is static */ @@ -680,7 +713,8 @@ std::string macro = format("#define PS_FST %d\n", sel.fst) + format("#define PS_WMS %d\n", sel.wms) + format("#define PS_WMT %d\n", sel.wmt) - + format("#define PS_FMT %d\n", sel.fmt) + + format("#define PS_TEX_FMT %d\n", sel.tex_fmt) + + format("#define PS_DFMT %d\n", sel.dfmt) + format("#define PS_AEM %d\n", sel.aem) + format("#define PS_TFX %d\n", sel.tfx) + format("#define PS_TCC %d\n", sel.tcc) @@ -688,17 +722,189 @@ + format("#define PS_FOG %d\n", sel.fog) + format("#define PS_CLR1 %d\n", sel.clr1) + format("#define PS_FBA %d\n", sel.fba) - + format("#define PS_AOUT %d\n", sel.aout) + format("#define PS_LTF %d\n", sel.ltf) + format("#define PS_COLCLIP %d\n", sel.colclip) + format("#define PS_DATE %d\n", sel.date) - + format("#define PS_SPRITEHACK %d\n", sel.spritehack) + format("#define PS_TCOFFSETHACK %d\n", sel.tcoffsethack) - + format("#define PS_POINT_SAMPLER %d\n", sel.point_sampler) + //+ format("#define PS_POINT_SAMPLER %d\n", sel.point_sampler) + + format("#define PS_BLEND_A %d\n", sel.blend_a) + + format("#define PS_BLEND_B %d\n", sel.blend_b) + + format("#define PS_BLEND_C %d\n", sel.blend_c) + + format("#define PS_BLEND_D %d\n", sel.blend_d) + format("#define PS_IIP %d\n", sel.iip) + + format("#define PS_SHUFFLE %d\n", sel.shuffle) + + format("#define PS_READ_BA %d\n", sel.read_ba) + + format("#define PS_WRITE_RG %d\n", sel.write_rg) + + format("#define PS_FBMASK %d\n", sel.fbmask) + + format("#define PS_HDR %d\n", sel.hdr) + + format("#define PS_PABE %d\n", sel.pabe); ; - return m_shader->Compile("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, tfx_glsl, macro); + return m_shader->Compile("tfx.glsl", "ps_main", GL_FRAGMENT_SHADER, tfx_fs_all_glsl, macro); +} + +void GSDeviceOGL::SelfShaderTest() +{ +#define RUN_TEST \ + do { \ + GLuint p = CompilePS(sel); \ + nb_shader++; \ + perf += m_shader->DumpAsm(file, p); \ + m_shader->Delete(p); \ + } while(0); + +#define PRINT_TEST(s) \ + do { \ + fprintf(stderr, "%s %d instructions for %d shaders (mean of %4.2f)\n", \ + s, perf, nb_shader, (float)perf/(float)nb_shader); \ + all += perf; \ + perf = 0; \ + nb_shader = 0; \ + } while(0); + + int nb_shader = 0; + int perf = 0; + int all = 0; + // Test: SW blending + for (int colclip = 0; colclip < 2; colclip++) { + for (int fmt = 0; fmt < 3; fmt++) { + for (int i = 0; i < 3; i++) { + PSSelector sel; + sel.atst = 1; + sel.tfx = 4; + + int ib = (i + 1) % 3; + sel.blend_a = i; + sel.blend_b = ib;; + sel.blend_c = i; + sel.blend_d = i; + sel.colclip = colclip; + sel.dfmt = fmt; + + std::string file = format("Shader_Blend_%d_%d_%d_%d__Cclip_%d__Dfmt_%d.glsl.asm", + i, ib, i, i, colclip, fmt); + RUN_TEST; + } + } + } + PRINT_TEST("Blend"); + + // Test: alpha test + for (int atst = 0; atst < 8; atst++) { + PSSelector sel; + sel.tfx = 4; + + sel.atst = atst; + std::string file = format("Shader_Atst_%d.glsl.asm", atst); + RUN_TEST; + } + PRINT_TEST("Alpha Tst"); + + // Test: fbmask/fog/shuffle/read_ba + for (int read_ba = 0; read_ba < 2; read_ba++) { + PSSelector sel; + sel.tfx = 4; + sel.atst = 1; + + sel.fog = 1; + sel.fbmask = 1; + sel.shuffle = 1; + sel.read_ba = read_ba; + + std::string file = format("Shader_Fog__Fbmask__Shuffle__Read_ba_%d.glsl.asm", read_ba); + RUN_TEST; + } + PRINT_TEST("Fbmask/fog/shuffle/read_ba"); + + // Test: Date + for (int date = 1; date < 7; date++) { + PSSelector sel; + sel.tfx = 4; + sel.atst = 1; + + sel.date = date; + std::string file = format("Shader_Date_%d.glsl.asm", date); + RUN_TEST; + } + PRINT_TEST("Date"); + + // Test: FBA + for (int fmt = 0; fmt < 3; fmt++) { + PSSelector sel; + sel.tfx = 4; + sel.atst = 1; + + sel.fba = 1; + sel.dfmt = fmt; + sel.clr1 = 1; + std::string file = format("Shader_Fba__Clr1__Dfmt_%d.glsl.asm", fmt); + RUN_TEST; + } + PRINT_TEST("Fba/Clr1/Dfmt"); + + // Test: Fst/Tc/IIP + { + PSSelector sel; + sel.tfx = 1; + sel.atst = 1; + + sel.fst = 0; + sel.iip = 1; + sel.tcoffsethack = 1; + + std::string file = format("Shader_Fst__TC__Iip.glsl.asm"); + RUN_TEST; + } + PRINT_TEST("Fst/Tc/IIp"); + + // Test: tfx/tcc + for (int tfx = 0; tfx < 5; tfx++) { + for (int tcc = 0; tcc < 2; tcc++) { + PSSelector sel; + sel.atst = 1; + sel.fst = 1; + + sel.tfx = tfx; + sel.tcc = tcc; + std::string file = format("Shader_Tfx_%d__Tcc_%d.glsl.asm", tfx, tcc); + RUN_TEST; + } + } + PRINT_TEST("Tfx/Tcc"); + + // Test: Texture Sampling + for (int fmt = 0; fmt < 16; fmt++) { + if ((fmt & 3) == 3) continue; + + for (int ltf = 0; ltf < 2; ltf++) { + for (int aem = 0; aem < 2; aem++) { + for (int wms = 1; wms < 4; wms++) { + for (int wmt = 1; wmt < 4; wmt++) { + PSSelector sel; + sel.atst = 1; + sel.tfx = 1; + sel.tcc = 1; + sel.fst = 1; + + sel.ltf = ltf; + sel.aem = aem; + sel.tex_fmt = fmt; + sel.wms = wms; + sel.wmt = wmt; + std::string file = format("Shader_Ltf_%d__Aem_%d__TFmt_%d__Wms_%d__Wmt_%d.glsl.asm", + ltf, aem, fmt, wms, wmt); + RUN_TEST; + } + } + } + } + } + PRINT_TEST("Texture Sampling"); + + fprintf(stderr, "\nTotal %d\n", all); + +#undef RUN_TEST +#undef PRINT_TEST } GSTexture* GSDeviceOGL::CreateRenderTarget(int w, int h, bool msaa, int format) @@ -722,87 +928,109 @@ } // blit a texture into an offscreen buffer -GSTexture* GSDeviceOGL::CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format) +GSTexture* GSDeviceOGL::CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format, int ps_shader) { - ASSERT(src); - ASSERT(format == GL_RGBA8 || format == GL_R16UI); + if (format == 0) + format = GL_RGBA8; - if(format == 0) format = GL_RGBA8; - - if(format != GL_RGBA8 && format != GL_R16UI) return NULL; + ASSERT(src); + ASSERT(format == GL_RGBA8 || format == GL_R16UI || format == GL_R32UI); GSTexture* dst = CreateOffscreen(w, h, format); - GSVector4 dr(0, 0, w, h); - StretchRect(src, sr, dst, dr, m_convert.ps[format == GL_R16UI ? 1 : 0]); + GSVector4 dRect(0, 0, w, h); + + StretchRect(src, sRect, dst, dRect, m_convert.ps[ps_shader]); return dst; } -// Copy a sub part of a texture into another -// Several question to answer did texture have same size? -// From a sub-part to the same sub-part -// From a sub-part to a full texture -void GSDeviceOGL::CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r) +// Copy a sub part of texture (same as below but force a conversion) +void GSDeviceOGL::CopyRectConv(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, bool at_origin) { - ASSERT(st && dt); + ASSERT(sTex && dTex); + if (!(sTex && dTex)) + return; - if (GLLoader::found_GL_ARB_copy_image) { -#ifndef ENABLE_GLES - gl_CopyImageSubData( static_cast(st)->GetID(), GL_TEXTURE_2D, - 0, r.x, r.y, 0, - static_cast(dt)->GetID(), GL_TEXTURE_2D, - 0, r.x, r.y, 0, - r.width(), r.height(), 1); -#endif - } else { + const GLuint& sid = sTex->GetID(); + const GLuint& did = dTex->GetID(); - GSTextureOGL* st_ogl = (GSTextureOGL*) st; - GSTextureOGL* dt_ogl = (GSTextureOGL*) dt; + GL_PUSH(format("CopyRectConv from %d to %d", sid, did).c_str()); - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); - gl_FramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, static_cast(st_ogl)->GetID(), 0); - glReadBuffer(GL_COLOR_ATTACHMENT0); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sid, 0); + if (at_origin) + glCopyTextureSubImage2D(did, GL_TEX_LEVEL_0, 0, 0, r.x, r.y, r.width(), r.height()); + else + glCopyTextureSubImage2D(did, GL_TEX_LEVEL_0, r.x, r.y, r.x, r.y, r.width(), r.height()); - dt_ogl->EnableUnit(); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, r.x, r.y, r.x, r.y, r.width(), r.height()); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); - } + GL_POP(); } -void GSDeviceOGL::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader, bool linear) +// Copy a sub part of a texture into another +void GSDeviceOGL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r) { - StretchRect(st, sr, dt, dr, m_convert.ps[shader], linear); + ASSERT(sTex && dTex); + if (!(sTex && dTex)) + return; + + const GLuint& sid = sTex->GetID(); + const GLuint& did = dTex->GetID(); + + GL_PUSH("CopyRect from %d to %d", sid, did); + + if (GLLoader::found_GL_ARB_copy_image) { + glCopyImageSubData( sid, GL_TEXTURE_2D, + 0, r.x, r.y, 0, + did, GL_TEXTURE_2D, + 0, 0, 0, 0, + r.width(), r.height(), 1); + } else { + // Slower copy (conversion is done) + CopyRectConv(sTex, dTex, r, true); + } + + GL_POP(); } -void GSDeviceOGL::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, GLuint ps, bool linear) +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader, bool linear) { - StretchRect(st, sr, dt, dr, ps, m_convert.bs, linear); + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[shader], linear); } -void GSDeviceOGL::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, GLuint ps, GSBlendStateOGL* bs, bool linear) +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, GLuint ps, bool linear) { + StretchRect(sTex, sRect, dTex, dRect, ps, m_NO_BLEND, linear); +} - if(!st || !dt) +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, GLuint ps, int bs, bool linear) +{ + if(!sTex || !dTex) { ASSERT(0); return; } + bool draw_in_depth = (ps == m_convert.ps[ShaderConvert_RGBA8_TO_FLOAT32] || ps == m_convert.ps[ShaderConvert_RGBA8_TO_FLOAT24] || + ps == m_convert.ps[ShaderConvert_RGBA8_TO_FLOAT16] || ps == m_convert.ps[ShaderConvert_RGB5A1_TO_FLOAT16]); + + // Performance optimization. It might be faster to use a framebuffer blit for standard case + // instead to emulate it with shader + // see https://www.opengl.org/wiki/Framebuffer#Blitting + + GL_PUSH("StretchRect from %d to %d", sTex->GetID(), dTex->GetID()); + // ************************************ // Init // ************************************ BeginScene(); - GSVector2i ds = dt->GetSize(); + GSVector2i ds = dTex->GetSize(); - // WARNING: setup of the program must be done first. So you can setup - // 1/ subroutine uniform - // 2/ bindless texture uniform - // 3/ others uniform? m_shader->VS(m_convert.vs); m_shader->GS(0); m_shader->PS(ps); @@ -811,9 +1039,18 @@ // om // ************************************ - OMSetDepthStencilState(m_convert.dss, 0); - OMSetBlendState(bs, 0); - OMSetRenderTargets(dt, NULL); + if (draw_in_depth) + OMSetDepthStencilState(m_convert.dss_write); + else + OMSetDepthStencilState(m_convert.dss); + + if (draw_in_depth) + OMSetRenderTargets(NULL, dTex); + else + OMSetRenderTargets(dTex, NULL); + + OMSetBlendState(bs); + OMSetColorMaskState(); // ************************************ // ia @@ -821,16 +1058,16 @@ // Original code from DX - float left = dr.x * 2 / ds.x - 1.0f; - float right = dr.z * 2 / ds.x - 1.0f; + float left = dRect.x * 2 / ds.x - 1.0f; + float right = dRect.z * 2 / ds.x - 1.0f; #if 0 - float top = 1.0f - dr.y * 2 / ds.y; - float bottom = 1.0f - dr.w * 2 / ds.y; + float top = 1.0f - dRect.y * 2 / ds.y; + float bottom = 1.0f - dRect.w * 2 / ds.y; #else // Opengl get some issues with the coordinate // I flip top/bottom to fix scaling of the internal resolution - float top = -1.0f + dr.y * 2 / ds.y; - float bottom = -1.0f + dr.w * 2 / ds.y; + float top = -1.0f + dRect.y * 2 / ds.y; + float bottom = -1.0f + dRect.w * 2 / ds.y; #endif // Flip y axis only when we render in the backbuffer @@ -838,10 +1075,10 @@ // 1/ consistency between several pass rendering (interlace) // 2/ in case some GSdx code expect thing in dx order. // Only flipping the backbuffer is transparent (I hope)... - GSVector4 flip_sr = sr; - if (static_cast(dt)->IsBackbuffer()) { - flip_sr.y = sr.w; - flip_sr.w = sr.y; + GSVector4 flip_sr = sRect; + if (static_cast(dTex)->IsBackbuffer()) { + flip_sr.y = sRect.w; + flip_sr.w = sRect.y; } GSVertexPT1 vertices[] = @@ -859,13 +1096,8 @@ // Texture // ************************************ - if (GLLoader::found_GL_ARB_bindless_texture) { - GLuint64 handle[2] = {static_cast(st)->GetHandle(linear ? m_convert.ln : m_convert.pt) , 0}; - m_shader->PS_ressources(handle); - } else { - PSSetShaderResource(static_cast(st)->GetID()); - PSSetSamplerState(linear ? m_convert.ln : m_convert.pt); - } + PSSetShaderResource(0, sTex); + PSSetSamplerState(linear ? m_convert.ln : m_convert.pt); // ************************************ // Draw @@ -877,31 +1109,43 @@ // ************************************ EndScene(); + + GL_POP(); } -void GSDeviceOGL::DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) +void GSDeviceOGL::DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) { - ClearRenderTarget(dt, c); + GL_PUSH("DoMerge"); - if(st[1] && !slbg) + OMSetColorMaskState(); + + ClearRenderTarget(dTex, c); + + if(sTex[1] && !slbg) { - StretchRect(st[1], sr[1], dt, dr[1], m_merge_obj.ps[0]); + StretchRect(sTex[1], sRect[1], dTex, dRect[1], m_merge_obj.ps[0]); } - if(st[0]) + if(sTex[0]) { m_merge_obj.cb->upload(&c.v); - StretchRect(st[0], sr[0], dt, dr[0], m_merge_obj.ps[mmod ? 1 : 0], m_merge_obj.bs); + StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge_obj.ps[mmod ? 1 : 0], m_MERGE_BLEND); } + + GL_POP(); } -void GSDeviceOGL::DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset) +void GSDeviceOGL::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset) { - GSVector4 s = GSVector4(dt->GetSize()); + GL_PUSH("DoInterlace"); + + OMSetColorMaskState(); + + GSVector4 s = GSVector4(dTex->GetSize()); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0.0f, yoffset, s.x, s.y + yoffset); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0.0f, yoffset, s.x, s.y + yoffset); InterlaceConstantBuffer cb; @@ -910,46 +1154,61 @@ m_interlace.cb->upload(&cb); - StretchRect(st, sr, dt, dr, m_interlace.ps[shader], linear); + StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[shader], linear); + + GL_POP(); } -void GSDeviceOGL::DoFXAA(GSTexture* st, GSTexture* dt) +void GSDeviceOGL::DoFXAA(GSTexture* sTex, GSTexture* dTex) { // Lazy compile if (!m_fxaa.ps) { - std::string fxaa_macro = "#define FXAA_GLSL_130 1\n"; - if (GLLoader::found_GL_ARB_gpu_shader5) { // GL4.0 extension - // Hardcoded in the new shader - //fxaa_macro += "#define FXAA_GATHER4_ALPHA 1\n"; - fxaa_macro += "#extension GL_ARB_gpu_shader5 : enable\n"; - } else { - fprintf(stderr, "FXAA requires the GL_ARB_gpu_shader5 extension. Please either disable FXAA or upgrade your GPU/driver.\n"); + if (!GLLoader::found_GL_ARB_gpu_shader5) { // GL4.0 extension return; } + + std::string fxaa_macro = "#define FXAA_GLSL_130 1\n"; + fxaa_macro += "#extension GL_ARB_gpu_shader5 : enable\n"; m_fxaa.ps = m_shader->Compile("fxaa.fx", "ps_main", GL_FRAGMENT_SHADER, fxaa_fx, fxaa_macro); } - GSVector2i s = dt->GetSize(); + GL_PUSH("DoFxaa"); + + OMSetColorMaskState(); + + GSVector2i s = dTex->GetSize(); + + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + StretchRect(sTex, sRect, dTex, dRect, m_fxaa.ps, true); - StretchRect(st, sr, dt, dr, m_fxaa.ps, true); + GL_POP(); } -void GSDeviceOGL::DoExternalFX(GSTexture* st, GSTexture* dt) +void GSDeviceOGL::DoExternalFX(GSTexture* sTex, GSTexture* dTex) { // Lazy compile if (!m_shaderfx.ps) { - std::ifstream fconfig(theApp.GetConfig("shaderfx_conf", "dummy.ini")); + if (!GLLoader::found_GL_ARB_gpu_shader5) { // GL4.0 extension + return; + } + + std::string config_name(theApp.GetConfig("shaderfx_conf", "dummy.ini")); + std::ifstream fconfig(config_name); std::stringstream config; if (fconfig.good()) config << fconfig.rdbuf(); + else + fprintf(stderr, "Warning failed to load '%s'. External Shader might be wrongly configured\n", config_name.c_str()); - std::ifstream fshader(theApp.GetConfig("shaderfx_glsl", "dummy.glsl")); + std::string shader_name(theApp.GetConfig("shaderfx_glsl", "dummy.glsl")); + std::ifstream fshader(shader_name); std::stringstream shader; - if (!fshader.good()) + if (!fshader.good()) { + fprintf(stderr, "Error failed to load '%s'. External Shader will be disabled !\n", shader_name.c_str()); return; + } shader << fshader.rdbuf(); @@ -957,10 +1216,14 @@ m_shaderfx.ps = m_shader->Compile("Extra", "ps_main", GL_FRAGMENT_SHADER, shader.str().c_str(), config.str()); } - GSVector2i s = dt->GetSize(); + GL_PUSH("DoExternalFX"); + + OMSetColorMaskState(); + + GSVector2i s = dTex->GetSize(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ExternalFXConstantBuffer cb; @@ -970,15 +1233,21 @@ m_shaderfx.cb->upload(&cb); - StretchRect(st, sr, dt, dr, m_shaderfx.ps, true); + StretchRect(sTex, sRect, dTex, dRect, m_shaderfx.ps, true); + + GL_POP(); } -void GSDeviceOGL::DoShadeBoost(GSTexture* st, GSTexture* dt) +void GSDeviceOGL::DoShadeBoost(GSTexture* sTex, GSTexture* dTex) { - GSVector2i s = dt->GetSize(); + GL_PUSH("DoShadeBoost"); + + OMSetColorMaskState(); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0, 0, s.x, s.y); + GSVector2i s = dTex->GetSize(); + + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0, 0, s.x, s.y); ShadeBoostConstantBuffer cb; @@ -987,36 +1256,32 @@ m_shadeboost.cb->upload(&cb); - StretchRect(st, sr, dt, dr, m_shadeboost.ps, true); + StretchRect(sTex, sRect, dTex, dRect, m_shadeboost.ps, true); + + GL_POP(); } void GSDeviceOGL::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* vertices, bool datm) { -#ifdef ENABLE_OGL_STENCIL_DEBUG - const GSVector2i& size = rt->GetSize(); - GSTexture* t = CreateRenderTarget(size.x, size.y, false); -#else - GSTexture* t = NULL; -#endif + GL_PUSH("DATE First Pass"); + // sfex3 (after the capcom logo), vf4 (first menu fading in), ffxii shadows, rumble roses shadows, persona4 shadows BeginScene(); ClearStencil(ds, 0); - // WARNING: setup of the program must be done first. So you can setup - // 1/ subroutine uniform - // 2/ bindless texture uniform - // 3/ others uniform? m_shader->VS(m_convert.vs); m_shader->GS(0); - m_shader->PS(m_convert.ps[datm ? 2 : 3]); + m_shader->PS(m_convert.ps[datm ? ShaderConvert_DATM_1 : ShaderConvert_DATM_0]); // om - OMSetDepthStencilState(m_date.dss, 1); - OMSetBlendState(m_date.bs, 0); - OMSetRenderTargets(t, ds); + OMSetDepthStencilState(m_date.dss); + if (GLState::blend) { + glDisable(GL_BLEND); + } + OMSetRenderTargets(NULL, ds, &GLState::scissor); // ia @@ -1026,31 +1291,18 @@ // Texture - if (GLLoader::found_GL_ARB_bindless_texture) { - GLuint64 handle[2] = {static_cast(rt)->GetHandle(m_convert.pt) , 0}; - m_shader->PS_ressources(handle); - } else { - PSSetShaderResource(static_cast(rt)->GetID()); - PSSetSamplerState(m_convert.pt); - } - - // + PSSetShaderResource(0, rt); + PSSetSamplerState(m_convert.pt); -#ifdef ENABLE_OGL_STENCIL_DEBUG - DrawPrimitive(); -#else - // normally ok without it if GL_ARB_framebuffer_no_attachments is supported (minus driver bug) - OMSetWriteBuffer(GL_NONE); DrawPrimitive(); - OMSetWriteBuffer(); -#endif + + if (GLState::blend) { + glEnable(GL_BLEND); + } EndScene(); -#ifdef ENABLE_OGL_STENCIL_DEBUG - // FIXME invalidate data - Recycle(t); -#endif + GL_POP(); } void GSDeviceOGL::EndScene() @@ -1063,16 +1315,6 @@ m_va->UploadVB(vertices, count); } -bool GSDeviceOGL::IAMapVertexBuffer(void** vertex, size_t stride, size_t count) -{ - return m_va->MapVB(vertex, count); -} - -void GSDeviceOGL::IAUnmapVertexBuffer() -{ - m_va->UnmapVB(); -} - void GSDeviceOGL::IASetIndexBuffer(const void* index, size_t count) { m_va->UploadIB(index, count); @@ -1083,57 +1325,62 @@ m_va->SetTopology(topology); } -void GSDeviceOGL::PSSetShaderResource(GLuint sr) +void GSDeviceOGL::PSSetShaderResource(int i, GSTexture* sr) { - if (GLState::tex_unit[0] != sr) { - GLState::tex_unit[0] = sr; - - gl_ActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, sr); - - // Get back to the expected active texture unit - gl_ActiveTexture(GL_TEXTURE0 + 3); + ASSERT(i < (int)countof(GLState::tex_unit)); + // Note: Nvidia debgger doesn't support the id 0 (ie the NULL texture) + if (sr) { + GLuint id = sr->GetID(); + if (GLState::tex_unit[i] != id) { + GLState::tex_unit[i] = id; + glBindTextureUnit(i, id); + } } } -void GSDeviceOGL::PSSetShaderResources(GLuint tex[2]) +void GSDeviceOGL::PSSetShaderResources(GSTexture* sr0, GSTexture* sr1) { - if (GLState::tex_unit[0] != tex[0] || GLState::tex_unit[1] != tex[1]) { - GLState::tex_unit[0] = tex[0]; - GLState::tex_unit[1] = tex[1]; - - gl_ActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, tex[0]); - - gl_ActiveTexture(GL_TEXTURE0 + 1); - glBindTexture(GL_TEXTURE_2D, tex[1]); - - // Get back to the expected active texture unit - gl_ActiveTexture(GL_TEXTURE0 + 3); - } + PSSetShaderResource(0, sr0); + PSSetShaderResource(1, sr1); } void GSDeviceOGL::PSSetSamplerState(GLuint ss) { if (GLState::ps_ss != ss) { GLState::ps_ss = ss; - gl_BindSampler(0, ss); + glBindSampler(0, ss); } } -void GSDeviceOGL::OMAttachRt(GLuint rt) +void GSDeviceOGL::OMAttachRt(GSTextureOGL* rt) { - if (GLState::rt != rt) { - GLState::rt = rt; - gl_FramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt, 0); + GLuint id; + if (rt) { + rt->WasAttached(); + id = rt->GetID(); + } else { + id = 0; + } + + if (GLState::rt != id) { + GLState::rt = id; + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, id, 0); } } -void GSDeviceOGL::OMAttachDs(GLuint ds) +void GSDeviceOGL::OMAttachDs(GSTextureOGL* ds) { - if (GLState::ds != ds) { - GLState::ds = ds; - gl_FramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, ds, 0); + GLuint id; + if (ds) { + ds->WasAttached(); + id = ds->GetID(); + } else { + id = 0; + } + + if (GLState::ds != id) { + GLState::ds = id; + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, id, 0); } } @@ -1141,55 +1388,84 @@ { if (GLState::fbo != fbo) { GLState::fbo = fbo; - gl_BindFramebuffer(GL_FRAMEBUFFER, fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); } } -void GSDeviceOGL::OMSetWriteBuffer(GLenum buffer) +void GSDeviceOGL::OMSetDepthStencilState(GSDepthStencilOGL* dss) { - GLenum target[1] = {buffer}; - gl_DrawBuffers(1, target); + dss->SetupDepth(); + dss->SetupStencil(); } -void GSDeviceOGL::OMSetDepthStencilState(GSDepthStencilOGL* dss, uint8 sref) +void GSDeviceOGL::OMSetColorMaskState(OMColorMaskSelector sel) { - // State is checkd inside the object but worst case is 11 comparaisons ! - if (m_state.dss != dss) { - m_state.dss = dss; + if (sel.wrgba != GLState::wrgba) { + GLState::wrgba = sel.wrgba; - dss->SetupDepth(); - dss->SetupStencil(); + glColorMaski(0, sel.wr, sel.wg, sel.wb, sel.wa); } } -void GSDeviceOGL::OMSetBlendState(GSBlendStateOGL* bs, float bf) +void GSDeviceOGL::OMSetBlendState(uint8 blend_index, uint8 blend_factor, bool is_blend_constant) { - // State is checkd inside the object but worst case is 15 comparaisons ! - if ( m_state.bs != bs || (m_state.bf != bf && bs->HasConstantFactor()) ) - { - m_state.bs = bs; - m_state.bf = bf; + if (blend_index) { + if (!GLState::blend) { + GLState::blend = true; + glEnable(GL_BLEND); + } + + if (is_blend_constant && GLState::bf != blend_factor) { + GLState::bf = blend_factor; + float bf = (float)blend_factor / 128.0f; + gl_BlendColor(bf, bf, bf, bf); + } - bs->SetupBlend(bf); + const OGLBlend& b = m_blendMapOGL[blend_index]; + + if (GLState::eq_RGB != b.op) { + GLState::eq_RGB = b.op; + if (glBlendEquationSeparateiARB) + glBlendEquationSeparateiARB(0, b.op, GL_FUNC_ADD); + else + glBlendEquationSeparate(b.op, GL_FUNC_ADD); + } + + if (GLState::f_sRGB != b.src || GLState::f_dRGB != b.dst) { + GLState::f_sRGB = b.src; + GLState::f_dRGB = b.dst; + if (glBlendFuncSeparateiARB) + glBlendFuncSeparateiARB(0, b.src, b.dst, GL_ONE, GL_ZERO); + else + glBlendFuncSeparate(b.src, b.dst, GL_ONE, GL_ZERO); + } + + } else { + if (GLState::blend) { + GLState::blend = false; + glDisable(GL_BLEND); + } } } void GSDeviceOGL::OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor) { - if (rt == NULL || !static_cast(rt)->IsBackbuffer()) { + GSTextureOGL* RT = static_cast(rt); + GSTextureOGL* DS = static_cast(ds); + + if (rt == NULL || !RT->IsBackbuffer()) { OMSetFBO(m_fbo); if (rt) { - OMAttachRt(static_cast(rt)->GetID()); + OMAttachRt(RT); } else { - // Note: NULL rt is only used in DATE so far. - OMAttachRt(0); + OMAttachRt(); } // Note: it must be done after OMSetFBO if (ds) - OMAttachDs(static_cast(ds)->GetID()); + OMAttachDs(DS); else - OMAttachDs(0); + OMAttachDs(); } else { // Render in the backbuffer @@ -1197,10 +1473,11 @@ } - GSVector2i size = rt ? rt->GetSize() : ds->GetSize(); + GSVector2i size = rt ? rt->GetSize() : ds ? ds->GetSize() : GLState::viewport; if(GLState::viewport != size) { GLState::viewport = size; + // FIXME ViewportIndexedf or ViewportIndexedfv (GL4.1) glViewport(0, 0, size.x, size.y); } @@ -1209,42 +1486,42 @@ if(!GLState::scissor.eq(r)) { GLState::scissor = r; + // FIXME ScissorIndexedv (GL4.1) glScissor( r.x, r.y, r.width(), r.height() ); } } void GSDeviceOGL::CheckDebugLog() { -#ifndef ENABLE_GLES - unsigned int count = 16; // max. num. of messages that will be read from the log - int bufsize = 2048; - unsigned int sources[16] = {}; - unsigned int types[16] = {}; - unsigned int ids[16] = {}; - unsigned int severities[16] = {}; - int lengths[16] = {}; - char* messageLog = new char[bufsize]; - - unsigned int retVal = gl_GetDebugMessageLogARB(count, bufsize, sources, types, ids, severities, lengths, messageLog); - - if(retVal > 0) - { - unsigned int pos = 0; - for(unsigned int i=0; i 0) + { + unsigned int pos = 0; + for(unsigned int i=0; i= 5) { + // Close the file to flush the content on disk before exiting. + if (m_debug_gl_file) { + fclose(m_debug_gl_file); + m_debug_gl_file = NULL; + } + ASSERT(0); } - ASSERT(sev_counter < 5); #endif } @@ -1301,6 +1588,11 @@ // 1211 Cd*(1 + Ad) => Source * Dest color + Dest * Dest alpha // 1221 Cd*(1 + F) => Source * Dest color + Dest * Factor +// Special blending method table: +// # (tricky) => 1 * Cd + Cd * F => Use (Cd, F) as factor of color (1, Cd) +// * (bogus) => C * (1 + F ) + ... => factor is always bigger than 1 (except above case) +// ? => Cs * F + Cd => do the multiplication in shader and addition in blending unit. It is an optimization + // Copy Dx blend table and convert it to ogl #define D3DBLENDOP_ADD GL_FUNC_ADD #define D3DBLENDOP_SUBTRACT GL_FUNC_SUBTRACT @@ -1314,95 +1606,94 @@ #define D3DBLEND_BLENDFACTOR GL_CONSTANT_COLOR #define D3DBLEND_INVBLENDFACTOR GL_ONE_MINUS_CONSTANT_COLOR -#ifdef ENABLE_GLES -#define D3DBLEND_SRCALPHA GL_SRC_ALPHA -#define D3DBLEND_INVSRCALPHA GL_ONE_MINUS_SRC_ALPHA -#else #define D3DBLEND_SRCALPHA GL_SRC1_ALPHA #define D3DBLEND_INVSRCALPHA GL_ONE_MINUS_SRC1_ALPHA -#endif -const GSDeviceOGL::D3D9Blend GSDeviceOGL::m_blendMapD3D9[3*3*3*3] = +const int GSDeviceOGL::m_NO_BLEND = 0; +const int GSDeviceOGL::m_MERGE_BLEND = 3*3*3*3; + +const GSDeviceOGL::OGLBlend GSDeviceOGL::m_blendMapOGL[3*3*3*3 + 1] = { - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 0000: (Cs - Cs)*As + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 0001: (Cs - Cs)*As + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 0002: (Cs - Cs)*As + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 0010: (Cs - Cs)*Ad + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 0011: (Cs - Cs)*Ad + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 0012: (Cs - Cs)*Ad + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 0020: (Cs - Cs)*F + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 0021: (Cs - Cs)*F + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 0022: (Cs - Cs)*F + 0 ==> 0 - {1, D3DBLENDOP_SUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_SRCALPHA}, //*0100: (Cs - Cd)*As + Cs ==> Cs*(As + 1) - Cd*As - {0, D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA}, // 0101: (Cs - Cd)*As + Cd ==> Cs*As + Cd*(1 - As) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_SRCALPHA}, // 0102: (Cs - Cd)*As + 0 ==> Cs*As - Cd*As - {1, D3DBLENDOP_SUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_DESTALPHA}, //*0110: (Cs - Cd)*Ad + Cs ==> Cs*(Ad + 1) - Cd*Ad - {0, D3DBLENDOP_ADD, D3DBLEND_DESTALPHA, D3DBLEND_INVDESTALPHA}, // 0111: (Cs - Cd)*Ad + Cd ==> Cs*Ad + Cd*(1 - Ad) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_DESTALPHA}, // 0112: (Cs - Cd)*Ad + 0 ==> Cs*Ad - Cd*Ad - {1, D3DBLENDOP_SUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_BLENDFACTOR}, //*0120: (Cs - Cd)*F + Cs ==> Cs*(F + 1) - Cd*F - {0, D3DBLENDOP_ADD, D3DBLEND_BLENDFACTOR, D3DBLEND_INVBLENDFACTOR}, // 0121: (Cs - Cd)*F + Cd ==> Cs*F + Cd*(1 - F) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_BLENDFACTOR}, // 0122: (Cs - Cd)*F + 0 ==> Cs*F - Cd*F - {1, D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_ZERO}, //*0200: (Cs - 0)*As + Cs ==> Cs*(As + 1) - {0, D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_ONE}, // 0201: (Cs - 0)*As + Cd ==> Cs*As + Cd - {0, D3DBLENDOP_ADD, D3DBLEND_SRCALPHA, D3DBLEND_ZERO}, // 0202: (Cs - 0)*As + 0 ==> Cs*As - {1, D3DBLENDOP_ADD, D3DBLEND_DESTALPHA, D3DBLEND_ZERO}, //*0210: (Cs - 0)*Ad + Cs ==> Cs*(Ad + 1) - {0, D3DBLENDOP_ADD, D3DBLEND_DESTALPHA, D3DBLEND_ONE}, // 0211: (Cs - 0)*Ad + Cd ==> Cs*Ad + Cd - {0, D3DBLENDOP_ADD, D3DBLEND_DESTALPHA, D3DBLEND_ZERO}, // 0212: (Cs - 0)*Ad + 0 ==> Cs*Ad - {1, D3DBLENDOP_ADD, D3DBLEND_BLENDFACTOR, D3DBLEND_ZERO}, //*0220: (Cs - 0)*F + Cs ==> Cs*(F + 1) - {0, D3DBLENDOP_ADD, D3DBLEND_BLENDFACTOR, D3DBLEND_ONE}, // 0221: (Cs - 0)*F + Cd ==> Cs*F + Cd - {0, D3DBLENDOP_ADD, D3DBLEND_BLENDFACTOR, D3DBLEND_ZERO}, // 0222: (Cs - 0)*F + 0 ==> Cs*F - {0, D3DBLENDOP_ADD, D3DBLEND_INVSRCALPHA, D3DBLEND_SRCALPHA}, // 1000: (Cd - Cs)*As + Cs ==> Cd*As + Cs*(1 - As) - {1, D3DBLENDOP_REVSUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_SRCALPHA}, //*1001: (Cd - Cs)*As + Cd ==> Cd*(As + 1) - Cs*As - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_SRCALPHA}, // 1002: (Cd - Cs)*As + 0 ==> Cd*As - Cs*As - {0, D3DBLENDOP_ADD, D3DBLEND_INVDESTALPHA, D3DBLEND_DESTALPHA}, // 1010: (Cd - Cs)*Ad + Cs ==> Cd*Ad + Cs*(1 - Ad) - {1, D3DBLENDOP_REVSUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_DESTALPHA}, //*1011: (Cd - Cs)*Ad + Cd ==> Cd*(Ad + 1) - Cs*Ad - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_DESTALPHA}, // 1012: (Cd - Cs)*Ad + 0 ==> Cd*Ad - Cs*Ad - {0, D3DBLENDOP_ADD, D3DBLEND_INVBLENDFACTOR, D3DBLEND_BLENDFACTOR}, // 1020: (Cd - Cs)*F + Cs ==> Cd*F + Cs*(1 - F) - {1, D3DBLENDOP_REVSUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_BLENDFACTOR},//*1021: (Cd - Cs)*F + Cd ==> Cd*(F + 1) - Cs*F - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_BLENDFACTOR},// 1022: (Cd - Cs)*F + 0 ==> Cd*F - Cs*F - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 1100: (Cd - Cd)*As + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 1101: (Cd - Cd)*As + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 1102: (Cd - Cd)*As + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 1110: (Cd - Cd)*Ad + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 1111: (Cd - Cd)*Ad + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 1112: (Cd - Cd)*Ad + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 1120: (Cd - Cd)*F + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 1121: (Cd - Cd)*F + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 1122: (Cd - Cd)*F + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_SRCALPHA}, // 1200: (Cd - 0)*As + Cs ==> Cs + Cd*As - {2, D3DBLENDOP_ADD, D3DBLEND_DESTCOLOR, D3DBLEND_SRCALPHA}, //#1201: (Cd - 0)*As + Cd ==> Cd*(1 + As) // ffxii main menu background glow effect - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_SRCALPHA}, // 1202: (Cd - 0)*As + 0 ==> Cd*As - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_DESTALPHA}, // 1210: (Cd - 0)*Ad + Cs ==> Cs + Cd*Ad - {2, D3DBLENDOP_ADD, D3DBLEND_DESTCOLOR, D3DBLEND_DESTALPHA}, //#1211: (Cd - 0)*Ad + Cd ==> Cd*(1 + Ad) - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_DESTALPHA}, // 1212: (Cd - 0)*Ad + 0 ==> Cd*Ad - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_BLENDFACTOR}, // 1220: (Cd - 0)*F + Cs ==> Cs + Cd*F - {2, D3DBLENDOP_ADD, D3DBLEND_DESTCOLOR, D3DBLEND_BLENDFACTOR}, //#1221: (Cd - 0)*F + Cd ==> Cd*(1 + F) - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_BLENDFACTOR}, // 1222: (Cd - 0)*F + 0 ==> Cd*F - {0, D3DBLENDOP_ADD, D3DBLEND_INVSRCALPHA, D3DBLEND_ZERO}, // 2000: (0 - Cs)*As + Cs ==> Cs*(1 - As) - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_ONE}, // 2001: (0 - Cs)*As + Cd ==> Cd - Cs*As - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_SRCALPHA, D3DBLEND_ZERO}, // 2002: (0 - Cs)*As + 0 ==> 0 - Cs*As - {0, D3DBLENDOP_ADD, D3DBLEND_INVDESTALPHA, D3DBLEND_ZERO}, // 2010: (0 - Cs)*Ad + Cs ==> Cs*(1 - Ad) - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_ONE}, // 2011: (0 - Cs)*Ad + Cd ==> Cd - Cs*Ad - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_DESTALPHA, D3DBLEND_ZERO}, // 2012: (0 - Cs)*Ad + 0 ==> 0 - Cs*Ad - {0, D3DBLENDOP_ADD, D3DBLEND_INVBLENDFACTOR, D3DBLEND_ZERO}, // 2020: (0 - Cs)*F + Cs ==> Cs*(1 - F) - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_ONE}, // 2021: (0 - Cs)*F + Cd ==> Cd - Cs*F - {0, D3DBLENDOP_REVSUBTRACT, D3DBLEND_BLENDFACTOR, D3DBLEND_ZERO}, // 2022: (0 - Cs)*F + 0 ==> 0 - Cs*F - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ONE, D3DBLEND_SRCALPHA}, // 2100: (0 - Cd)*As + Cs ==> Cs - Cd*As - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_INVSRCALPHA}, // 2101: (0 - Cd)*As + Cd ==> Cd*(1 - As) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ZERO, D3DBLEND_SRCALPHA}, // 2102: (0 - Cd)*As + 0 ==> 0 - Cd*As - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ONE, D3DBLEND_DESTALPHA}, // 2110: (0 - Cd)*Ad + Cs ==> Cs - Cd*Ad - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_INVDESTALPHA}, // 2111: (0 - Cd)*Ad + Cd ==> Cd*(1 - Ad) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ONE, D3DBLEND_DESTALPHA}, // 2112: (0 - Cd)*Ad + 0 ==> 0 - Cd*Ad - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ONE, D3DBLEND_BLENDFACTOR}, // 2120: (0 - Cd)*F + Cs ==> Cs - Cd*F - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_INVBLENDFACTOR}, // 2121: (0 - Cd)*F + Cd ==> Cd*(1 - F) - {0, D3DBLENDOP_SUBTRACT, D3DBLEND_ONE, D3DBLEND_BLENDFACTOR}, // 2122: (0 - Cd)*F + 0 ==> 0 - Cd*F - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 2200: (0 - 0)*As + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 2201: (0 - 0)*As + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 2202: (0 - 0)*As + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 2210: (0 - 0)*Ad + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 2211: (0 - 0)*Ad + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 2212: (0 - 0)*Ad + 0 ==> 0 - {0, D3DBLENDOP_ADD, D3DBLEND_ONE, D3DBLEND_ZERO}, // 2220: (0 - 0)*F + Cs ==> Cs - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ONE}, // 2221: (0 - 0)*F + Cd ==> Cd - {0, D3DBLENDOP_ADD, D3DBLEND_ZERO, D3DBLEND_ZERO}, // 2222: (0 - 0)*F + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 0000: (Cs - Cs)*As + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 0001: (Cs - Cs)*As + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 0002: (Cs - Cs)*As + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 0010: (Cs - Cs)*Ad + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 0011: (Cs - Cs)*Ad + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 0012: (Cs - Cs)*Ad + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 0020: (Cs - Cs)*F + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 0021: (Cs - Cs)*F + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 0022: (Cs - Cs)*F + 0 ==> 0 + { BLEND_A_MAX , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_SRCALPHA} , //*0100: (Cs - Cd)*As + Cs ==> Cs*(As + 1) - Cd*As + { 0 , D3DBLENDOP_ADD , D3DBLEND_SRCALPHA , D3DBLEND_INVSRCALPHA} , // 0101: (Cs - Cd)*As + Cd ==> Cs*As + Cd*(1 - As) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_SRCALPHA , D3DBLEND_SRCALPHA} , // 0102: (Cs - Cd)*As + 0 ==> Cs*As - Cd*As + { BLEND_A_MAX , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_DESTALPHA} , //*0110: (Cs - Cd)*Ad + Cs ==> Cs*(Ad + 1) - Cd*Ad + { 0 , D3DBLENDOP_ADD , D3DBLEND_DESTALPHA , D3DBLEND_INVDESTALPHA} , // 0111: (Cs - Cd)*Ad + Cd ==> Cs*Ad + Cd*(1 - Ad) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_DESTALPHA , D3DBLEND_DESTALPHA} , // 0112: (Cs - Cd)*Ad + 0 ==> Cs*Ad - Cd*Ad + { BLEND_A_MAX , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_BLENDFACTOR} , //*0120: (Cs - Cd)*F + Cs ==> Cs*(F + 1) - Cd*F + { 0 , D3DBLENDOP_ADD , D3DBLEND_BLENDFACTOR , D3DBLEND_INVBLENDFACTOR} , // 0121: (Cs - Cd)*F + Cd ==> Cs*F + Cd*(1 - F) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_BLENDFACTOR , D3DBLEND_BLENDFACTOR} , // 0122: (Cs - Cd)*F + 0 ==> Cs*F - Cd*F + { BLEND_NO_BAR | BLEND_A_MAX , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , //*0200: (Cs - 0)*As + Cs ==> Cs*(As + 1) + { BLEND_ACCU , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ONE} , //?0201: (Cs - 0)*As + Cd ==> Cs*As + Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_SRCALPHA , D3DBLEND_ZERO} , // 0202: (Cs - 0)*As + 0 ==> Cs*As + { BLEND_A_MAX , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , //*0210: (Cs - 0)*Ad + Cs ==> Cs*(Ad + 1) + { 0 , D3DBLENDOP_ADD , D3DBLEND_DESTALPHA , D3DBLEND_ONE} , // 0211: (Cs - 0)*Ad + Cd ==> Cs*Ad + Cd + { 0 , D3DBLENDOP_ADD , D3DBLEND_DESTALPHA , D3DBLEND_ZERO} , // 0212: (Cs - 0)*Ad + 0 ==> Cs*Ad + { BLEND_NO_BAR | BLEND_A_MAX , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , //*0220: (Cs - 0)*F + Cs ==> Cs*(F + 1) + { BLEND_ACCU , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ONE} , //?0221: (Cs - 0)*F + Cd ==> Cs*F + Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_BLENDFACTOR , D3DBLEND_ZERO} , // 0222: (Cs - 0)*F + 0 ==> Cs*F + { 0 , D3DBLENDOP_ADD , D3DBLEND_INVSRCALPHA , D3DBLEND_SRCALPHA} , // 1000: (Cd - Cs)*As + Cs ==> Cd*As + Cs*(1 - As) + { BLEND_A_MAX , D3DBLENDOP_REVSUBTRACT , D3DBLEND_SRCALPHA , D3DBLEND_ONE} , //*1001: (Cd - Cs)*As + Cd ==> Cd*(As + 1) - Cs*As + { 0 , D3DBLENDOP_REVSUBTRACT , D3DBLEND_SRCALPHA , D3DBLEND_SRCALPHA} , // 1002: (Cd - Cs)*As + 0 ==> Cd*As - Cs*As + { 0 , D3DBLENDOP_ADD , D3DBLEND_INVDESTALPHA , D3DBLEND_DESTALPHA} , // 1010: (Cd - Cs)*Ad + Cs ==> Cd*Ad + Cs*(1 - Ad) + { BLEND_A_MAX , D3DBLENDOP_REVSUBTRACT , D3DBLEND_DESTALPHA , D3DBLEND_ONE} , //*1011: (Cd - Cs)*Ad + Cd ==> Cd*(Ad + 1) - Cs*Ad + { 0 , D3DBLENDOP_REVSUBTRACT , D3DBLEND_DESTALPHA , D3DBLEND_DESTALPHA} , // 1012: (Cd - Cs)*Ad + 0 ==> Cd*Ad - Cs*Ad + { 0 , D3DBLENDOP_ADD , D3DBLEND_INVBLENDFACTOR , D3DBLEND_BLENDFACTOR} , // 1020: (Cd - Cs)*F + Cs ==> Cd*F + Cs*(1 - F) + { BLEND_A_MAX , D3DBLENDOP_REVSUBTRACT , D3DBLEND_BLENDFACTOR , D3DBLEND_ONE} , //*1021: (Cd - Cs)*F + Cd ==> Cd*(F + 1) - Cs*F + { 0 , D3DBLENDOP_REVSUBTRACT , D3DBLEND_BLENDFACTOR , D3DBLEND_BLENDFACTOR} , // 1022: (Cd - Cs)*F + 0 ==> Cd*F - Cs*F + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 1100: (Cd - Cd)*As + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 1101: (Cd - Cd)*As + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 1102: (Cd - Cd)*As + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 1110: (Cd - Cd)*Ad + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 1111: (Cd - Cd)*Ad + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 1112: (Cd - Cd)*Ad + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 1120: (Cd - Cd)*F + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 1121: (Cd - Cd)*F + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 1122: (Cd - Cd)*F + 0 ==> 0 + { 0 , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_SRCALPHA} , // 1200: (Cd - 0)*As + Cs ==> Cs + Cd*As + { BLEND_C_CLR , D3DBLENDOP_ADD , D3DBLEND_DESTCOLOR , D3DBLEND_SRCALPHA} , //#1201: (Cd - 0)*As + Cd ==> Cd*(1 + As) // ffxii main menu background + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_SRCALPHA} , // 1202: (Cd - 0)*As + 0 ==> Cd*As + { 0 , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_DESTALPHA} , // 1210: (Cd - 0)*Ad + Cs ==> Cs + Cd*Ad + { BLEND_C_CLR , D3DBLENDOP_ADD , D3DBLEND_DESTCOLOR , D3DBLEND_DESTALPHA} , //#1211: (Cd - 0)*Ad + Cd ==> Cd*(1 + Ad) + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_DESTALPHA} , // 1212: (Cd - 0)*Ad + 0 ==> Cd*Ad + { 0 , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_BLENDFACTOR} , // 1220: (Cd - 0)*F + Cs ==> Cs + Cd*F + { BLEND_C_CLR , D3DBLENDOP_ADD , D3DBLEND_DESTCOLOR , D3DBLEND_BLENDFACTOR} , //#1221: (Cd - 0)*F + Cd ==> Cd*(1 + F) + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_BLENDFACTOR} , // 1222: (Cd - 0)*F + 0 ==> Cd*F + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_INVSRCALPHA , D3DBLEND_ZERO} , // 2000: (0 - Cs)*As + Cs ==> Cs*(1 - As) + { BLEND_ACCU , D3DBLENDOP_REVSUBTRACT , D3DBLEND_ONE , D3DBLEND_ONE} , // 2001: (0 - Cs)*As + Cd ==> Cd - Cs*As + { BLEND_NO_BAR , D3DBLENDOP_REVSUBTRACT , D3DBLEND_SRCALPHA , D3DBLEND_ZERO} , // 2002: (0 - Cs)*As + 0 ==> 0 - Cs*As + { 0 , D3DBLENDOP_ADD , D3DBLEND_INVDESTALPHA , D3DBLEND_ZERO} , // 2010: (0 - Cs)*Ad + Cs ==> Cs*(1 - Ad) + { 0 , D3DBLENDOP_REVSUBTRACT , D3DBLEND_DESTALPHA , D3DBLEND_ONE} , // 2011: (0 - Cs)*Ad + Cd ==> Cd - Cs*Ad + { 0 , D3DBLENDOP_REVSUBTRACT , D3DBLEND_DESTALPHA , D3DBLEND_ZERO} , // 2012: (0 - Cs)*Ad + 0 ==> 0 - Cs*Ad + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_INVBLENDFACTOR , D3DBLEND_ZERO} , // 2020: (0 - Cs)*F + Cs ==> Cs*(1 - F) + { BLEND_ACCU , D3DBLENDOP_REVSUBTRACT , D3DBLEND_ONE , D3DBLEND_ONE} , // 2021: (0 - Cs)*F + Cd ==> Cd - Cs*F + { BLEND_NO_BAR , D3DBLENDOP_REVSUBTRACT , D3DBLEND_BLENDFACTOR , D3DBLEND_ZERO} , // 2022: (0 - Cs)*F + 0 ==> 0 - Cs*F + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_SRCALPHA} , // 2100: (0 - Cd)*As + Cs ==> Cs - Cd*As + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_INVSRCALPHA} , // 2101: (0 - Cd)*As + Cd ==> Cd*(1 - As) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ZERO , D3DBLEND_SRCALPHA} , // 2102: (0 - Cd)*As + 0 ==> 0 - Cd*As + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_DESTALPHA} , // 2110: (0 - Cd)*Ad + Cs ==> Cs - Cd*Ad + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_INVDESTALPHA} , // 2111: (0 - Cd)*Ad + Cd ==> Cd*(1 - Ad) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_DESTALPHA} , // 2112: (0 - Cd)*Ad + 0 ==> 0 - Cd*Ad + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_BLENDFACTOR} , // 2120: (0 - Cd)*F + Cs ==> Cs - Cd*F + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_INVBLENDFACTOR} , // 2121: (0 - Cd)*F + Cd ==> Cd*(1 - F) + { 0 , D3DBLENDOP_SUBTRACT , D3DBLEND_ONE , D3DBLEND_BLENDFACTOR} , // 2122: (0 - Cd)*F + 0 ==> 0 - Cd*F + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 2200: (0 - 0)*As + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 2201: (0 - 0)*As + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 2202: (0 - 0)*As + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 2210: (0 - 0)*Ad + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 2211: (0 - 0)*Ad + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 2212: (0 - 0)*Ad + 0 ==> 0 + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ONE , D3DBLEND_ZERO} , // 2220: (0 - 0)*F + Cs ==> Cs + { 0 , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ONE} , // 2221: (0 - 0)*F + Cd ==> Cd + { BLEND_NO_BAR , D3DBLENDOP_ADD , D3DBLEND_ZERO , D3DBLEND_ZERO} , // 2222: (0 - 0)*F + 0 ==> 0 + { 0 , D3DBLENDOP_ADD , GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA} , // extra for merge operation }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceOGL.h pcsx2-1.4.0/plugins/GSdx/GSDeviceOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceOGL.h 2014-11-09 14:27:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -29,135 +29,16 @@ #include "GSShaderOGL.h" #include "GLState.h" -#ifdef ENABLE_OGL_DEBUG_MEM_BW -extern uint32 g_texture_upload_byte; -extern uint32 g_vertex_upload_byte; -#endif - -class GSBlendStateOGL { - // Note: You can also select the index of the draw buffer for which to set the blend setting - // We will keep basic the first try - bool m_enable; - GLenum m_equation_RGB; - GLenum m_equation_A; - GLenum m_func_sRGB; - GLenum m_func_dRGB; - GLenum m_func_sA; - GLenum m_func_dA; - bool m_r_msk; - bool m_b_msk; - bool m_g_msk; - bool m_a_msk; - bool constant_factor; - -public: - - GSBlendStateOGL() : m_enable(false) - , m_equation_RGB(0) - , m_equation_A(GL_FUNC_ADD) - , m_func_sRGB(0) - , m_func_dRGB(0) - , m_func_sA(GL_ONE) - , m_func_dA(GL_ZERO) - , m_r_msk(GL_TRUE) - , m_b_msk(GL_TRUE) - , m_g_msk(GL_TRUE) - , m_a_msk(GL_TRUE) - , constant_factor(false) - {} - - void SetRGB(GLenum op, GLenum src, GLenum dst) - { - m_equation_RGB = op; - m_func_sRGB = src; - m_func_dRGB = dst; - if (IsConstant(src) || IsConstant(dst)) constant_factor = true; - } - - void SetALPHA(GLenum op, GLenum src, GLenum dst) - { - m_equation_A = op; - m_func_sA = src; - m_func_dA = dst; - } +// A couple of flag to determine the blending behavior +#define BLEND_A_MAX (0x100) // Impossible blending uses coeff bigger than 1 +#define BLEND_C_CLR (0x200) // Clear color blending (use directly the destination color as blending factor) +#define BLEND_NO_BAR (0x400) // don't require texture barrier for the blending (because the RT is not used) +#define BLEND_ACCU (0x800) // Allow to use a mix of SW and HW blending to keep the best of the 2 worlds - void SetMask(bool r, bool g, bool b, bool a) { m_r_msk = r; m_g_msk = g; m_b_msk = b; m_a_msk = a; } - - void RevertOp() - { - if(m_equation_RGB == GL_FUNC_ADD) - m_equation_RGB = GL_FUNC_REVERSE_SUBTRACT; - else if(m_equation_RGB == GL_FUNC_REVERSE_SUBTRACT) - m_equation_RGB = GL_FUNC_ADD; - } - - void EnableBlend() { m_enable = true;} - - bool IsConstant(GLenum factor) { return ((factor == GL_CONSTANT_COLOR) || (factor == GL_ONE_MINUS_CONSTANT_COLOR)); } - - bool HasConstantFactor() { return constant_factor; } - - void SetupColorMask() - { - // FIXME align then SSE - if (GLState::r_msk != m_r_msk || GLState::g_msk != m_g_msk || GLState::b_msk != m_b_msk || GLState::a_msk != m_a_msk) { - GLState::r_msk = m_r_msk; - GLState::g_msk = m_g_msk; - GLState::b_msk = m_b_msk; - GLState::a_msk = m_a_msk; - -#ifdef ENABLE_GLES - gl_ColorMask(m_r_msk, m_g_msk, m_b_msk, m_a_msk); -#else - gl_ColorMaski(0, m_r_msk, m_g_msk, m_b_msk, m_a_msk); -#endif - } - } - - void SetupBlend(float factor) - { - SetupColorMask(); - - if (GLState::blend != m_enable) { - GLState::blend = m_enable; - if (m_enable) - glEnable(GL_BLEND); - else - glDisable(GL_BLEND); - } - - if (m_enable) { - if (HasConstantFactor()) { - if (GLState::bf != factor) { - GLState::bf = factor; - gl_BlendColor(factor, factor, factor, 0); - } - } - - if (GLState::eq_RGB != m_equation_RGB || GLState::eq_A != m_equation_A) { - GLState::eq_RGB = m_equation_RGB; - GLState::eq_A = m_equation_A; -#ifdef ENABLE_GLES - gl_BlendEquationSeparate(m_equation_RGB, m_equation_A); -#else - gl_BlendEquationSeparateiARB(0, m_equation_RGB, m_equation_A); -#endif - } - // FIXME align then SSE - if (GLState::f_sRGB != m_func_sRGB || GLState::f_dRGB != m_func_dRGB || GLState::f_sA != m_func_sA || GLState::f_dA != m_func_dA) { - GLState::f_sRGB = m_func_sRGB; - GLState::f_dRGB = m_func_dRGB; - GLState::f_sA = m_func_sA; - GLState::f_dA = m_func_dA; -#ifdef ENABLE_GLES - gl_BlendFuncSeparate(m_func_sRGB, m_func_dRGB, m_func_sA, m_func_dA); -#else - gl_BlendFuncSeparateiARB(0, m_func_sRGB, m_func_dRGB, m_func_sA, m_func_dA); +#ifdef ENABLE_OGL_DEBUG_MEM_BW +extern uint64 g_real_texture_upload_byte; +extern uint64 g_vertex_upload_byte; #endif - } - } - } -}; class GSDepthStencilOGL { bool m_depth_enable; @@ -171,15 +52,12 @@ public: GSDepthStencilOGL() : m_depth_enable(false) - , m_depth_func(0) + , m_depth_func(GL_ALWAYS) , m_depth_mask(0) , m_stencil_enable(false) , m_stencil_func(0) , m_stencil_spass_dpass_op(GL_KEEP) { - // Only needed once since m_stencil_mask is constant - // Control which stencil bitplane are written - glStencilMask(1); } void EnableDepth() { m_depth_enable = true; } @@ -273,22 +151,42 @@ { struct { + uint32 wildhack:1; uint32 bppz:2; - uint32 logz:1; - // Next param will be handle by subroutine uint32 tme:1; uint32 fst:1; + + uint32 _free:27; }; uint32 key; }; - operator uint32() {return key & 0x3f;} + operator uint32() {return key;} VSSelector() : key(0) {} VSSelector(uint32 k) : key(k) {} + }; - static uint32 size() { return 1 << 5; } + struct GSSelector + { + union + { + struct + { + uint32 sprite:1; + uint32 point:1; + + uint32 _free:30; + }; + + uint32 key; + }; + + operator uint32() {return key;} + + GSSelector() : key(0) {} + GSSelector(uint32 k) : key(k) {} }; __aligned(struct, 32) PSConstantBuffer @@ -297,19 +195,24 @@ GSVector4 WH; GSVector4 MinF_TA; GSVector4i MskFix; + GSVector4i FbMask; + GSVector4 AlphaCoeff; GSVector4 HalfTexel; GSVector4 MinMax; - GSVector4 TC_OffsetHack; + GSVector4 TC_OH_TS; PSConstantBuffer() { FogColor_AREF = GSVector4::zero(); - HalfTexel = GSVector4::zero(); - WH = GSVector4::zero(); - MinMax = GSVector4::zero(); - MinF_TA = GSVector4::zero(); - MskFix = GSVector4i::zero(); + HalfTexel = GSVector4::zero(); + WH = GSVector4::zero(); + MinMax = GSVector4::zero(); + MinF_TA = GSVector4::zero(); + MskFix = GSVector4i::zero(); + AlphaCoeff = GSVector4::zero(); + TC_OH_TS = GSVector4::zero(); + FbMask = GSVector4i::zero(); } __forceinline bool Update(const PSConstantBuffer* cb) @@ -317,15 +220,17 @@ GSVector4i* a = (GSVector4i*)this; GSVector4i* b = (GSVector4i*)cb; - // if WH matches both HalfTexel and TC_OffsetHack do too + // if WH matches both HalfTexel and TC_OH_TS do too // MinMax depends on WH and MskFix so no need to check it too - if(!((a[0] == b[0]) & (a[1] == b[1]) & (a[2] == b[2]) & (a[3] == b[3])).alltrue()) + if(!((a[0] == b[0]) & (a[1] == b[1]) & (a[2] == b[2]) & (a[3] == b[3]) & (a[4] == b[4]) & (a[5] == b[5])).alltrue()) { // Note previous check uses SSE already, a plain copy will be faster than any memcpy a[0] = b[0]; a[1] = b[1]; a[2] = b[2]; a[3] = b[3]; + a[4] = b[4]; + a[5] = b[5]; return true; } @@ -336,37 +241,64 @@ struct PSSelector { + // Performance note: there are too many shader combinations + // It might hurt the performance due to frequent toggling worse it could consume + // a lots of memory. union { struct { - uint32 fst:1; - uint32 fmt:3; + // *** Word 1 + // Format + uint32 tex_fmt:4; + uint32 dfmt:2; + // Alpha extension/Correction uint32 aem:1; - uint32 fog:1; - uint32 clr1:1; uint32 fba:1; - uint32 aout:1; - uint32 date:2; - uint32 spritehack:1; - uint32 tcoffsethack:1; - uint32 point_sampler:1; + // Fog + uint32 fog:1; + // Flat/goround shading uint32 iip:1; - // Next param will be handle by subroutine - uint32 colclip:2; + // Pixel test + uint32 date:3; uint32 atst:3; - + // Color sampling + uint32 fst:1; // Investigate to do it on the VS uint32 tfx:3; uint32 tcc:1; uint32 wms:2; uint32 wmt:2; uint32 ltf:1; + // Shuffle and fbmask effect + uint32 shuffle:1; + uint32 read_ba:1; + uint32 write_rg:1; + uint32 fbmask:1; + + uint32 _free1:2; + + // *** Word 2 + // Blend and Colclip + uint32 blend_a:2; + uint32 blend_b:2; + uint32 blend_c:2; + uint32 blend_d:2; + uint32 clr1:1; // useful? + uint32 pabe:1; + uint32 hdr:1; + uint32 colclip:1; + + // Hack + uint32 tcoffsethack:1; + + uint32 _free2:19; }; - uint32 key; + uint64 key; }; - operator uint32() {return key & 0x1fffffff;} + // FIXME is the & useful ? + operator uint64() {return key;} PSSelector() : key(0) {} }; @@ -380,17 +312,18 @@ uint32 tau:1; uint32 tav:1; uint32 ltf:1; + uint32 aniso:1; + + uint32 _free:28; }; uint32 key; }; - operator uint32() {return key & 0x7;} + operator uint32() {return key;} PSSamplerSelector() : key(0) {} PSSamplerSelector(uint32 k) : key(k) {} - - static uint32 size() { return 1 << 3; } }; struct OMDepthStencilSelector @@ -402,66 +335,62 @@ uint32 ztst:2; uint32 zwe:1; uint32 date:1; - uint32 fba:1; - uint32 alpha_stencil:1; + + uint32 _free:28; }; uint32 key; }; - operator uint32() {return key & 0x3f;} + // FIXME is the & useful ? + operator uint32() {return key;} OMDepthStencilSelector() : key(0) {} OMDepthStencilSelector(uint32 k) : key(k) {} - - static uint32 size() { return 1 << 6; } }; - struct OMBlendSelector + struct OMColorMaskSelector { union { struct { - uint32 abe:1; - uint32 a:2; - uint32 b:2; - uint32 c:2; - uint32 d:2; uint32 wr:1; uint32 wg:1; uint32 wb:1; uint32 wa:1; - uint32 negative:1; + + uint32 _free:28; }; struct { - uint32 _pad:1; - uint32 abcd:8; uint32 wrgba:4; }; uint32 key; }; - operator uint32() {return key & 0x3fff;} + // FIXME is the & useful ? + operator uint32() {return key & 0xf;} - OMBlendSelector() : key(0) {} - - bool IsCLR1() const - { - return (key & 0x19f) == 0x93; // abe == 1 && a == 1 && b == 2 && d == 1 - } + OMColorMaskSelector() : key(0xF) {} + OMColorMaskSelector(uint32 c) { wrgba = c; } }; - struct D3D9Blend {int bogus, op, src, dst;}; - static const D3D9Blend m_blendMapD3D9[3*3*3*3]; + struct OGLBlend {uint16 bogus, op, src, dst;}; + static const OGLBlend m_blendMapOGL[3*3*3*3 + 1]; + static const int m_NO_BLEND; + static const int m_MERGE_BLEND; + + static int s_n; private: uint32 m_msaa; // Level of Msaa - bool m_free_window; + static bool m_debug_gl_call; + static FILE* m_debug_gl_file; + GSWnd* m_window; GLuint m_fbo; // frame buffer container @@ -472,7 +401,6 @@ struct { GLuint ps[2]; // program object GSUniformBufferOGL* cb; // uniform buffer object - GSBlendStateOGL* bs; } m_merge_obj; struct { @@ -482,11 +410,12 @@ struct { GLuint vs; // program object - GLuint ps[10]; // program object + GLuint ps[18]; // program object GLuint ln; // sampler object GLuint pt; // sampler object GSDepthStencilOGL* dss; - GSBlendStateOGL* bs; + GSDepthStencilOGL* dss_write; + GSUniformBufferOGL* cb; } m_convert; struct { @@ -501,7 +430,6 @@ struct { GSDepthStencilOGL* dss; - GSBlendStateOGL* bs; GSTexture* t; } m_date; @@ -510,22 +438,14 @@ GSUniformBufferOGL *cb; } m_shadeboost; - struct { - GSDepthStencilOGL* dss; - GSBlendStateOGL* bs; - float bf; // blend factor - } m_state; - GLuint m_vs[1<<5]; - GLuint m_gs; - GLuint m_ps_ss[1<<3]; - GSDepthStencilOGL* m_om_dss[1<<6]; - hash_map m_ps; - hash_map m_om_bs; + GLuint m_gs[1<<2]; + GLuint m_ps_ss[1<<4]; + GSDepthStencilOGL* m_om_dss[1<<4]; + hash_map m_ps; GLuint m_apitrace; GLuint m_palette_ss; - GLuint m_rt_ss; GSUniformBufferOGL* m_vs_cb; GSUniformBufferOGL* m_ps_cb; @@ -536,14 +456,14 @@ GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format); GSTexture* FetchSurface(int type, int w, int h, bool msaa, int format); - void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c); - void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset = 0); - void DoFXAA(GSTexture* st, GSTexture* dt); - void DoShadeBoost(GSTexture* st, GSTexture* dt); - void DoExternalFX(GSTexture* st, GSTexture* dt); + void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c); + void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset = 0); + void DoFXAA(GSTexture* sTex, GSTexture* dTex); + void DoShadeBoost(GSTexture* sTex, GSTexture* dTex); + void DoExternalFX(GSTexture* sTex, GSTexture* dTex); - void OMAttachRt(GLuint rt); - void OMAttachDs(GLuint ds); + void OMAttachRt(GSTextureOGL* rt = NULL); + void OMAttachDs(GSTextureOGL* ds = NULL); void OMSetFBO(GLuint fbo); public: @@ -553,7 +473,8 @@ virtual ~GSDeviceOGL(); static void CheckDebugLog(); - static void DebugOutputToFile(GLenum gl_source, GLenum gl_type, GLuint id, GLenum gl_severity, GLsizei gl_length, const GLchar *gl_message, const void* userParam); + // Used by OpenGL, so the same calling convention is required. + static void APIENTRY DebugOutputToFile(GLenum gl_source, GLenum gl_type, GLuint id, GLenum gl_severity, GLsizei gl_length, const GLchar *gl_message, const void* userParam); bool HasStencil() { return true; } bool HasDepth32() { return true; } @@ -562,11 +483,9 @@ bool Reset(int w, int h); void Flip(); void SetVSync(bool enable); - // Used for opengl multithread hack - void AttachContext(); - void DetachContext(); void DrawPrimitive(); + void DrawPrimitive(int offset, int count); void DrawIndexedPrimitive(); void DrawIndexedPrimitive(int offset, int count); void BeforeDraw(); @@ -574,7 +493,7 @@ void ClearRenderTarget(GSTexture* t, const GSVector4& c); void ClearRenderTarget(GSTexture* t, uint32 c); - void ClearRenderTarget_ui(GSTexture* t, uint32 c); + void ClearRenderTarget_i(GSTexture* t, int32 c); void ClearDepth(GSTexture* t, float c); void ClearStencil(GSTexture* t, uint8 c); @@ -582,16 +501,16 @@ GSTexture* CreateDepthStencil(int w, int h, bool msaa, int format = 0); GSTexture* CreateTexture(int w, int h, int format = 0); GSTexture* CreateOffscreen(int w, int h, int format = 0); - void InitPrimDateTexture(int w, int h); + void InitPrimDateTexture(GSTexture* rt); void RecycleDateTexture(); - void BindDateTexture(); - GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format = 0); + GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format = 0, int ps_shader = 0); - void CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, GLuint ps, bool linear = true); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, GLuint ps, GSBlendStateOGL* bs, bool linear = true); + void CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r); + void CopyRectConv(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, bool at_origin); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, GLuint ps, bool linear = true); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, GLuint ps, int bs, bool linear = true); void SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* vertices, bool datm); @@ -599,36 +518,36 @@ void IASetPrimitiveTopology(GLenum topology); void IASetVertexBuffer(const void* vertices, size_t count); - bool IAMapVertexBuffer(void** vertex, size_t stride, size_t count); - void IAUnmapVertexBuffer(); void IASetIndexBuffer(const void* index, size_t count); - void PSSetShaderResource(GLuint sr); - void PSSetShaderResources(GLuint tex[2]); + void PSSetShaderResource(int i, GSTexture* sr); + void PSSetShaderResources(GSTexture* sr0, GSTexture* sr1); void PSSetSamplerState(GLuint ss); - void OMSetDepthStencilState(GSDepthStencilOGL* dss, uint8 sref); - void OMSetBlendState(GSBlendStateOGL* bs, float bf); + void OMSetDepthStencilState(GSDepthStencilOGL* dss); + void OMSetBlendState(uint8 blend_index = 0, uint8 blend_factor = 0, bool is_blend_constant = false); void OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor = NULL); - void OMSetWriteBuffer(GLenum buffer = GL_COLOR_ATTACHMENT0); + void OMSetColorMaskState(OMColorMaskSelector sel = OMColorMaskSelector()); + void CreateTextureFX(); - GLuint CompileVS(VSSelector sel); - GLuint CompileGS(); + GLuint CompileVS(VSSelector sel, int logz); + GLuint CompileGS(GSSelector sel); GLuint CompilePS(PSSelector sel); - GLuint CreateSampler(bool bilinear, bool tau, bool tav); + GLuint CreateSampler(bool bilinear, bool tau, bool tav, bool aniso = false); GLuint CreateSampler(PSSamplerSelector sel); GSDepthStencilOGL* CreateDepthStencil(OMDepthStencilSelector dssel); - GSBlendStateOGL* CreateBlend(OMBlendSelector bsel, uint8 afix); + + void SelfShaderTest(); void SetupIA(const void* vertex, int vertex_count, const uint32* index, int index_count, int prim); void SetupVS(VSSelector sel); - void SetupGS(bool enable); + void SetupGS(GSSelector sel); void SetupPS(PSSelector sel); void SetupCB(const VSConstantBuffer* vs_cb, const PSConstantBuffer* ps_cb); void SetupSampler(PSSamplerSelector ssel); - void SetupOM(OMDepthStencilSelector dssel, OMBlendSelector bsel, uint8 afix); + void SetupOM(OMDepthStencilSelector dssel); GLuint GetSamplerID(PSSamplerSelector ssel); GLuint GetPaletteSamplerID(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceSW.cpp pcsx2-1.4.0/plugins/GSdx/GSDeviceSW.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceSW.cpp 2013-04-14 10:48:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceSW.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -90,7 +90,7 @@ Clear(t, c); } -GSTexture* GSDeviceSW::CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format) +GSTexture* GSDeviceSW::CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format, int ps_shader) { GSTexture* dst = CreateOffscreen(w, h, format); @@ -102,15 +102,15 @@ return dst; } -void GSDeviceSW::CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r) +void GSDeviceSW::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r) { GSTexture::GSMap m; - if(st->Map(m, &r)) + if(sTex->Map(m, &r)) { - dt->Update(r, m.bits, m.pitch); + dTex->Update(r, m.bits, m.pitch); - st->Unmap(); + sTex->Unmap(); } } @@ -207,26 +207,26 @@ } }; -template static void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, const SHADER& shader, bool linear) +template static void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const SHADER& shader, bool linear) { - GSVector4i r(dr.ceil()); + GSVector4i r(dRect.ceil()); - r = r.rintersect(GSVector4i(dt->GetSize()).zwxy()); + r = r.rintersect(GSVector4i(dTex->GetSize()).zwxy()); if(r.rempty()) return; GSTexture::GSMap dm; - if(!dt->Map(dm, &r)) return; + if(!dTex->Map(dm, &r)) return; GSTexture::GSMap sm; - if(!st->Map(sm, NULL)) {dt->Unmap(); return;} + if(!sTex->Map(sm, NULL)) {dTex->Unmap(); return;} - GSVector2i ssize = st->GetSize(); + GSVector2i ssize = sTex->GetSize(); - GSVector4 p = dr; - GSVector4 t = sr * GSVector4(ssize).xyxy() * GSVector4((float)0x10000); + GSVector4 p = dRect; + GSVector4 t = sRect * GSVector4(ssize).xyxy() * GSVector4((float)0x10000); GSVector4 tl = p.xyxy(t); GSVector4 br = p.zwzw(t); @@ -297,34 +297,34 @@ } } - st->Unmap(); - dt->Unmap(); + sTex->Unmap(); + dTex->Unmap(); } -void GSDeviceSW::StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader, bool linear) +void GSDeviceSW::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader, bool linear) { - // TODO: if dt == m_backbuffer && m_backbuffer is special + // TODO: if dTex == m_backbuffer && m_backbuffer is special if(shader == 0) { - if((sr == GSVector4(0, 0, 1, 1) & dr == GSVector4(dt->GetSize()).zwxy()).alltrue() && st->GetSize() == dt->GetSize()) + if((sRect == GSVector4(0, 0, 1, 1) & dRect == GSVector4(dTex->GetSize()).zwxy()).alltrue() && sTex->GetSize() == dTex->GetSize()) { // shortcut - CopyRect(st, dt, GSVector4i(dt->GetSize()).zwxy()); + CopyRect(sTex, dTex, GSVector4i(dTex->GetSize()).zwxy()); return; } ShaderCopy s; - ::StretchRect(st, sr, dt, dr, s, linear); + ::StretchRect(sTex, sRect, dTex, dRect, s, linear); } else if(shader == 1) { ShaderAlphaBlend s; - ::StretchRect(st, sr, dt, dr, s, linear); + ::StretchRect(sTex, sRect, dTex, dRect, s, linear); } else { @@ -337,7 +337,7 @@ // TODO } -void GSDeviceSW::PSSetShaderResource(int i, GSTexture* sr) +void GSDeviceSW::PSSetShaderResource(int i, GSTexture* sRect) { // TODO } @@ -349,24 +349,24 @@ // -void GSDeviceSW::DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c) +void GSDeviceSW::DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c) { - ClearRenderTarget(dt, c); + ClearRenderTarget(dTex, c); - if(st[1] && !slbg) + if(sTex[1] && !slbg) { - StretchRect(st[1], sr[1], dt, dr[1]); + StretchRect(sTex[1], sRect[1], dTex, dRect[1]); } - if(st[0]) + if(sTex[0]) { if(mmod == 0) { - // alpha = min(st[0].a * 2, 1) + // alpha = min(sTex[0].a * 2, 1) ShaderAlpha2xBlend s; - ::StretchRect(st[0], sr[0], dt, dr[0], s, true); + ::StretchRect(sTex[0], sRect[0], dTex, dRect[0], s, true); } else { @@ -374,23 +374,23 @@ ShaderFactorBlend s((uint32)(int)(c.a * 255)); - ::StretchRect(st[0], sr[0], dt, dr[0], s, true); + ::StretchRect(sTex[0], sRect[0], dTex, dRect[0], s, true); } } - // dt->Save("c:\\1.bmp"); + // dTex->Save("c:\\1.bmp"); } -void GSDeviceSW::DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset) +void GSDeviceSW::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset) { - GSVector4 s = GSVector4(dt->GetSize()); + GSVector4 s = GSVector4(dTex->GetSize()); - GSVector4 sr(0, 0, 1, 1); - GSVector4 dr(0.0f, yoffset, s.x, s.y + yoffset); + GSVector4 sRect(0, 0, 1, 1); + GSVector4 dRect(0.0f, yoffset, s.x, s.y + yoffset); if(shader == 0 || shader == 1) { - // TODO: 0/1 => update even/odd lines of dt + // TODO: 0/1 => update even/odd lines of dTex } else if(shader == 2) { @@ -398,7 +398,7 @@ } else if(shader == 3) { - StretchRect(st, sr, dt, dr, 0, linear); + StretchRect(sTex, sRect, dTex, dRect, 0, linear); } else { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceSW.h pcsx2-1.4.0/plugins/GSdx/GSDeviceSW.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDeviceSW.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDeviceSW.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,8 +28,8 @@ { GSTexture* CreateSurface(int type, int w, int h, bool msaa, int format); - void DoMerge(GSTexture* st[2], GSVector4* sr, GSTexture* dt, GSVector4* dr, bool slbg, bool mmod, const GSVector4& c); - void DoInterlace(GSTexture* st, GSTexture* dt, int shader, bool linear, float yoffset = 0); + void DoMerge(GSTexture* sTex[2], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, bool slbg, bool mmod, const GSVector4& c); + void DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset = 0); void Clear(GSTexture* t, uint32 c); @@ -50,13 +50,13 @@ void ClearDepth(GSTexture* t, float c); void ClearStencil(GSTexture* t, uint8 c); - GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sr, int w, int h, int format = 0); + GSTexture* CopyOffscreen(GSTexture* src, const GSVector4& sRect, int w, int h, int format = 0, int ps_shader = 0); - void CopyRect(GSTexture* st, GSTexture* dt, const GSVector4i& r); - void StretchRect(GSTexture* st, const GSVector4& sr, GSTexture* dt, const GSVector4& dr, int shader = 0, bool linear = true); + void CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r); + void StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, int shader = 0, bool linear = true); void PSSetShaderResources(GSTexture* sr0, GSTexture* sr1); - void PSSetShaderResource(int i, GSTexture* sr); + void PSSetShaderResource(int i, GSTexture* sRect); void OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor = NULL); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDialog.cpp pcsx2-1.4.0/plugins/GSdx/GSDialog.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDialog.cpp 2014-09-22 00:50:51.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,8 @@ */ #include "StdAfx.h" +#include +#include #include "GSdx.h" #include "GSDialog.h" #include "GSVector.h" @@ -64,9 +66,48 @@ dlg = (GSDialog*)GetWindowLongPtr(hWnd, GWLP_USERDATA); + if (message == WM_NOTIFY) + { + if (((LPNMHDR)lParam)->code == TTN_GETDISPINFO) + { + LPNMTTDISPINFO pInfo = (LPNMTTDISPINFO)lParam; + UINT id = GetWindowLongPtr((HWND)pInfo->hdr.idFrom, GWL_ID); + + // lpszText is used only if hinst is NULL. Seems to be NULL already, + // but it can't hurt to explicitly set it. + pInfo->hinst = NULL; + pInfo->lpszText = (LPTSTR)dialog_message(id); + SendMessage(pInfo->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 500); + return true; + } + } + return dlg != NULL ? dlg->OnMessage(message, wParam, lParam) : FALSE; } +// Tooltips will only show if the TOOLINFO cbSize <= the struct size. If it's +// smaller some functionality might be disabled. So let's try and use the +// correct size. +UINT GSDialog::GetTooltipStructSize() +{ + DLLGETVERSIONPROC dllGetVersion = (DLLGETVERSIONPROC)GetProcAddress(GetModuleHandle("ComCtl32.dll"), "DllGetVersion"); + if (dllGetVersion) { + DLLVERSIONINFO2 dllversion = { 0 }; + dllversion.info1.cbSize = sizeof(DLLVERSIONINFO2); + + if (dllGetVersion((DLLVERSIONINFO*)&dllversion) == S_OK) { + // Minor, then major version. + DWORD version = MAKELONG(dllversion.info1.dwMinorVersion, dllversion.info1.dwMajorVersion); + DWORD tooltip_v3 = MAKELONG(0, 6); + if (version >= tooltip_v3) + return TTTOOLINFOA_V3_SIZE; + } + } + // Should be fine for XP and onwards, comctl versions >= 4.7 should at least + // be this size. + return TTTOOLINFOA_V2_SIZE; +} + bool GSDialog::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) { return message == WM_COMMAND ? OnCommand((HWND)lParam, LOWORD(wParam), HIWORD(wParam)) : false; @@ -226,3 +267,70 @@ } } } + +void GSDialog::OpenFileDialog(UINT id, const char *title) +{ + char filename[512]; + OPENFILENAME ofn = { 0 }; + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.hwndOwner = m_hWnd; + ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; + ofn.lpstrFile = filename; + ofn.lpstrFile[0] = 0; + ofn.nMaxFile = 512; + ofn.lpstrTitle = title; + + // GetOpenFileName changes the current directory, so we need to save and + // restore the current directory or everything using relative paths will + // break. + char current_directory[512]; + GetCurrentDirectory(512, current_directory); + + if (GetOpenFileName(&ofn)) + SendMessage(GetDlgItem(m_hWnd, id), WM_SETTEXT, 0, (LPARAM)filename); + + SetCurrentDirectory(current_directory); + +} + +void GSDialog::AddTooltip(UINT id) +{ + static UINT tooltipStructSize = GetTooltipStructSize(); + bool hasTooltip; + + dialog_message(id, &hasTooltip); + if (!hasTooltip) + return; + + HWND hWnd = GetDlgItem(m_hWnd, id); + if (hWnd == NULL) + return; + + // TTS_NOPREFIX allows tabs and '&' to be used. + HWND hwndTip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, + TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + m_hWnd, NULL, theApp.GetModuleHandle(), NULL); + if (hwndTip == NULL) + return; + + TOOLINFO toolInfo = { 0 }; + toolInfo.cbSize = tooltipStructSize; + toolInfo.hwnd = m_hWnd; + toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS; + toolInfo.uId = (UINT_PTR)hWnd; + // Can't directly add the tooltip string - it doesn't work for long messages + toolInfo.lpszText = LPSTR_TEXTCALLBACK; + SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo); + // 32.767s is the max show time. + SendMessage(hwndTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 32767); +} + +void GSDialog::InitCommonControls() +{ + INITCOMMONCONTROLSEX icex; + icex.dwSize = sizeof(INITCOMMONCONTROLSEX); + icex.dwICC = ICC_TAB_CLASSES; + + InitCommonControlsEx(&icex); +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDialog.h pcsx2-1.4.0/plugins/GSdx/GSDialog.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDialog.h 2014-09-22 00:50:51.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDialog.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,6 +28,7 @@ int m_id; static INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + static UINT GetTooltipStructSize(); protected: HWND m_hWnd; @@ -54,4 +55,10 @@ int ComboBoxAppend(UINT id, const char* str, LPARAM data = 0, bool select = false); bool ComboBoxGetSelData(UINT id, INT_PTR& data); void ComboBoxFixDroppedWidth(UINT id); + + void OpenFileDialog(UINT id, const char *title); + + void AddTooltip(UINT id); + + static void InitCommonControls(); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingContext.cpp pcsx2-1.4.0/plugins/GSdx/GSDrawingContext.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingContext.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawingContext.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,138 @@ +/* +* Copyright (C) 2007-2009 Gabest +* http://www.gabest.org +* +* 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 GNU Make; see the file COPYING. If not, write to +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. +* http://www.gnu.org/copyleft/gpl.html +* +*/ + +#include "stdafx.h" +#include "GSDrawingContext.h" +#include "GSdx.h" + +static int findmax(int tl, int br, int limit, int wm, int minuv, int maxuv) +{ + // return max possible texcoord + + int uv = br; + + if(wm == CLAMP_CLAMP) + { + if(uv > limit) uv = limit; + } + else if(wm == CLAMP_REPEAT) + { + if(tl < 0) uv = limit; // wrap around + else if(uv > limit) uv = limit; + } + else if(wm == CLAMP_REGION_CLAMP) + { + if(uv < minuv) uv = minuv; + if(uv > maxuv) uv = maxuv; + } + else if(wm == CLAMP_REGION_REPEAT) + { + if(tl < 0) uv = minuv | maxuv; // wrap around, just use (any & mask) | fix + else uv = std::min(uv, minuv) | maxuv; // (any & mask) cannot be larger than mask, select br if that is smaller (not br & mask because there might be a larger value between tl and br when &'ed with the mask) + } + + return uv; +} + +static int reduce(int uv, int size) +{ + while(size > 3 && (1 << (size - 1)) >= uv + 1) + { + size--; + } + + return size; +} + +static int extend(int uv, int size) +{ + while(size < 10 && (1 << size) < uv + 1) + { + size++; + } + + return size; +} + +GIFRegTEX0 GSDrawingContext::GetSizeFixedTEX0(const GSVector4& st, bool linear, bool mipmap) +{ + if(mipmap) return TEX0; // no mipmaping allowed + + // find the optimal value for TW/TH by analyzing vertex trace and clamping values, extending only for region modes where uv may be outside + + int tw = TEX0.TW; + int th = TEX0.TH; + + int wms = (int)CLAMP.WMS; + int wmt = (int)CLAMP.WMT; + + int minu = (int)CLAMP.MINU; + int minv = (int)CLAMP.MINV; + int maxu = (int)CLAMP.MAXU; + int maxv = (int)CLAMP.MAXV; + + GSVector4 uvf = st; + + if(linear) + { + uvf += GSVector4(-0.5f, 0.5f).xxyy(); + } + + GSVector4i uv = GSVector4i(uvf.floor()); + + uv.x = findmax(uv.x, uv.z, (1 << tw) - 1, wms, minu, maxu); + uv.y = findmax(uv.y, uv.w, (1 << th) - 1, wmt, minv, maxv); + + if(tw + th >= 19) // smaller sizes aren't worth, they just create multiple entries in the textue cache and the saved memory is less + { + tw = reduce(uv.x, tw); + th = reduce(uv.y, th); + } + + if(wms == CLAMP_REGION_CLAMP || wms == CLAMP_REGION_REPEAT) + { + tw = extend(uv.x, tw); + } + + if(wmt == CLAMP_REGION_CLAMP || wmt == CLAMP_REGION_REPEAT) + { + th = extend(uv.y, th); + } + +#ifdef _DEBUG + if(TEX0.TW != tw || TEX0.TH != th) + { + printf("FixedTEX0 %05x %d %d tw %d=>%d th %d=>%d st (%.0f,%.0f,%.0f,%.0f) uvmax %d,%d wm %d,%d (%d,%d,%d,%d)\n", + (int)TEX0.TBP0, (int)TEX0.TBW, (int)TEX0.PSM, + (int)TEX0.TW, tw, (int)TEX0.TH, th, + uvf.x, uvf.y, uvf.z, uvf.w, + uv.x, uv.y, + wms, wmt, minu, maxu, minv, maxv); + } +#endif + + GIFRegTEX0 res = TEX0; + + res.TW = tw; + res.TH = th; + + return res; +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingContext.h pcsx2-1.4.0/plugins/GSdx/GSDrawingContext.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingContext.h 2013-06-24 01:11:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawingContext.h 2016-01-05 17:28:08.000000000 +0000 @@ -124,4 +124,110 @@ return ZBUF.ZMSK == 0 && TEST.ZTE != 0; // ZTE == 0 is bug on the real hardware, write is blocked then } + + GIFRegTEX0 GetSizeFixedTEX0(const GSVector4& st, bool linear, bool mipmap); + + void Dump(const std::string& filename) + { + // Append on purpose so env + context are merged into a single file + FILE* fp = fopen(filename.c_str(), "at"); + if (!fp) return; + + fprintf(fp, "XYOFFSET\n" + "\tX:%d\n" + "\tY:%d\n\n" + , XYOFFSET.OFX, XYOFFSET.OFY); + + fprintf(fp, "TEX0\n" + "\tTBP0:0x%x\n" + "\tTBW:%d\n" + "\tPSM:0x%x\n" + "\tTW:%d\n" + "\tTCC:%d\n" + "\tTFX:%d\n" + "\tCBP:0x%x\n" + "\tCPSM:0x%x\n" + "\tCSM:%d\n" + "\tCSA:%d\n" + "\tCLD:%d\n" + "\tTH:%lld\n\n" + , TEX0.TBP0, TEX0.TBW, TEX0.PSM, TEX0.TW, TEX0.TCC, TEX0.TFX, TEX0.CBP, TEX0.CPSM, TEX0.CSM, TEX0.CSA, TEX0.CLD, TEX0.TH); + + fprintf(fp, "TEX1\n" + "\tLCM:%d\n" + "\tMXL:%d\n" + "\tMMAG:%d\n" + "\tMMIN:%d\n" + "\tMTBA:%d\n" + "\tL:%d\n" + "\tK:%d\n\n" + , TEX1.LCM, TEX1.MXL, TEX1.MMAG, TEX1.MMIN, TEX1.MTBA, TEX1.L, TEX1.K); + + fprintf(fp, "TEX2\n" + "\tPSM:0x%x\n" + "\tCBP:0x%x\n" + "\tCPSM:0x%x\n" + "\tCSM:%d\n" + "\tCSA:%d\n" + "\tCLD:%d\n\n" + , TEX2.PSM, TEX2.CBP, TEX2.CPSM, TEX2.CSM, TEX2.CSA, TEX2.CLD); + + fprintf(fp, "CLAMP\n" + "\tWMS:%d\n" + "\tWMT:%d\n" + "\tMINU:%d\n" + "\tMAXU:%d\n" + "\tMAXV:%d\n" + "\tMINV:%lld\n\n" + , CLAMP.WMS, CLAMP.WMT, CLAMP.MINU, CLAMP.MAXU, CLAMP.MAXV, CLAMP.MINV); + + // TODO mimmap? (yes I'm lazy) + fprintf(fp, "SCISSOR\n" + "\tX0:%d\n" + "\tX1:%d\n" + "\tY0:%d\n" + "\tY1:%d\n\n" + , SCISSOR.SCAX0, SCISSOR.SCAX1, SCISSOR.SCAY0, SCISSOR.SCAY1); + + fprintf(fp, "ALPHA\n" + "\tA:%d\n" + "\tB:%d\n" + "\tC:%d\n" + "\tD:%d\n" + "\tFIX:%d\n" + , ALPHA.A, ALPHA.B, ALPHA.C, ALPHA.D, ALPHA.FIX); + const char *col[3] = {"Cs", "Cd", "0"}; + const char *alpha[3] = {"As", "Ad", "Af"}; + fprintf(fp, "\t=> (%s - %s) * %s + %s\n\n", col[ALPHA.A], col[ALPHA.B], alpha[ALPHA.C], col[ALPHA.D]); + + fprintf(fp, "TEST\n" + "\tATE:%d\n" + "\tATST:%d\n" + "\tAREF:%d\n" + "\tAFAIL:%d\n" + "\tDATE:%d\n" + "\tDATM:%d\n" + "\tZTE:%d\n" + "\tZTST:%d\n\n" + , TEST.ATE, TEST.ATST, TEST.AREF, TEST.AFAIL, TEST.DATE, TEST.DATM, TEST.ZTE, TEST.ZTST); + + fprintf(fp, "FBA\n" + "\tFBA:%d\n\n" + , FBA.FBA); + + fprintf(fp, "FRAME\n" + "\tFBP (*32):0x%x\n" + "\tFBW:%d\n" + "\tPSM:0x%x\n" + "\tFBMSK:0x%x\n\n" + , FRAME.FBP*32, FRAME.FBW, FRAME.PSM, FRAME.FBMSK); + + fprintf(fp, "ZBUF\n" + "\tZBP (*32):0x%x\n" + "\tPSM:0x%x\n" + "\tZMSK:%d\n\n" + , ZBUF.ZBP*32, ZBUF.PSM, ZBUF.ZMSK); + + fclose(fp); + } }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingEnvironment.h pcsx2-1.4.0/plugins/GSdx/GSDrawingEnvironment.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawingEnvironment.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawingEnvironment.h 2016-01-05 17:28:08.000000000 +0000 @@ -84,4 +84,122 @@ dimx[7] = GSVector4i(DIMX.DM30, 0, DIMX.DM31, 0, DIMX.DM32, 0, DIMX.DM33, 0), dimx[6] = dimx[7].xxzzlh(); } + + void Dump(const std::string& filename) + { + FILE* fp = fopen(filename.c_str(), "wt"); + if (!fp) return; + + fprintf(fp, "PRIM\n" + "\tPRIM:%d\n" + "\tIIP:%d\n" + "\tTME:%d\n" + "\tFGE:%d\n" + "\tABE:%d\n" + "\tAA1:%d\n" + "\tFST:%d\n" + "\tCTXT:%d\n" + "\tFIX:%d\n\n" + , PRIM.PRIM, PRIM.IIP, PRIM.TME, PRIM.FGE, PRIM.ABE, PRIM.AA1, PRIM.FST, PRIM.CTXT, PRIM.FIX); + + fprintf(fp, "PRMODE (when AC=0)\n" + "\t_PRIM:%d\n" + "\tIIP:%d\n" + "\tTME:%d\n" + "\tFGE:%d\n" + "\tABE:%d\n" + "\tAA1:%d\n" + "\tFST:%d\n" + "\tCTXT:%d\n" + "\tFIX:%d\n\n" + , PRMODE._PRIM, PRMODE.IIP, PRMODE.TME, PRMODE.FGE, PRMODE.ABE, PRMODE.AA1, PRMODE.FST, PRMODE.CTXT, PRMODE.FIX); + + fprintf(fp, "PRMODECONT\n" + "\tAC:%d\n\n" + , PRMODECONT.AC); + + fprintf(fp, "TEXCLUT\n" + "\tCOU:%d\n" + "\tCBW:%d\n" + "\tCOV:%d\n\n" + , TEXCLUT.COU, TEXCLUT.CBW, TEXCLUT.COV); + + fprintf(fp, "SCANMSK\n" + "\tMSK:%d\n\n" + "\n" + , SCANMSK.MSK); + + fprintf(fp, "TEXA\n" + "\tAEM:%d\n" + "\tTA0:%d\n" + "\tTA1:%d\n\n" + , TEXA.AEM, TEXA.TA0, TEXA.TA1); + + fprintf(fp, "FOGCOL\n" + "\tFCG:%d\n" + "\tFCB:%d\n" + "\tFCR:%d\n\n" + , FOGCOL.FCG, FOGCOL.FCB, FOGCOL.FCR); + + fprintf(fp, "DIMX\n" + "\tDM22:%d\n" + "\tDM23:%d\n" + "\tDM31:%d\n" + "\tDM02:%d\n" + "\tDM21:%d\n" + "\tDM12:%d\n" + "\tDM03:%d\n" + "\tDM01:%d\n" + "\tDM33:%d\n" + "\tDM30:%d\n" + "\tDM11:%d\n" + "\tDM10:%d\n" + "\tDM20:%d\n" + "\tDM32:%d\n" + "\tDM00:%d\n" + "\tDM13:%d\n\n" + , DIMX.DM22, DIMX.DM23, DIMX.DM31, DIMX.DM02, DIMX.DM21, DIMX.DM12, DIMX.DM03, DIMX.DM01, DIMX.DM33, DIMX.DM30, DIMX.DM11, DIMX.DM10, DIMX.DM20, DIMX.DM32, DIMX.DM00, DIMX.DM13); + + fprintf(fp, "DTHE\n" + "\tDTHE:%d\n\n" + , DTHE.DTHE); + + fprintf(fp, "COLCLAMP\n" + "\tCLAMP:%d\n\n" + , COLCLAMP.CLAMP); + + fprintf(fp, "PABE\n" + "\tPABE:%d\n\n" + , PABE.PABE); + + fprintf(fp, "BITBLTBUF\n" + "\tSBW:%d\n" + "\tSBP:0x%x\n" + "\tSPSM:%d\n" + "\tDBW:%d\n" + "\tDPSM:%d\n" + "\tDBP:0x%x\n\n" + , BITBLTBUF.SBW, BITBLTBUF.SBP, BITBLTBUF.SPSM, BITBLTBUF.DBW, BITBLTBUF.DPSM, BITBLTBUF.DBP); + + fprintf(fp, "TRXDIR\n" + "\tXDIR:%d\n\n" + , TRXDIR.XDIR); + + fprintf(fp, "TRXPOS\n" + "\tDIRY:%d\n" + "\tSSAY:%d\n" + "\tSSAX:%d\n" + "\tDIRX:%d\n" + "\tDSAX:%d\n" + "\tDSAY:%d\n\n" + , TRXPOS.DIRY, TRXPOS.SSAY, TRXPOS.SSAX, TRXPOS.DIRX, TRXPOS.DSAX, TRXPOS.DSAY); + + fprintf(fp, "TRXREG\n" + "\tRRH:%d\n" + "\tRRW:%d\n\n" + , TRXREG.RRH, TRXREG.RRW); + + fclose(fp); + } + }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.avx.cpp pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.avx.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.avx.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x64.avx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,7 +23,7 @@ #include "GSDrawScanlineCodeGenerator.h" #include "GSVertexSW.h" -#if _M_SSE >= 0x500 && (defined(_M_AMD64) || defined(_WIN64)) +#if _M_SSE == 0x500 && (defined(_M_AMD64) || defined(_WIN64)) #error TODO @@ -254,14 +254,14 @@ mov(rax, (size_t)m_local.gd->fzbc); lea(rdi, ptr[rax + rbx * 2]); - if(!m_sel.sprite && (m_sel.fwrite && m_sel.fge || m_sel.zb) || m_sel.fb && (m_sel.edge || m_sel.tfx != TFX_NONE || m_sel.iip)) + if(m_sel.prim != GS_SPRITE_CLASS && (m_sel.fwrite && m_sel.fge || m_sel.zb) || m_sel.fb && (m_sel.edge || m_sel.tfx != TFX_NONE || m_sel.iip)) { // edx = &m_local.d[skip] lea(rdx, ptr[rdx * 8 + r11 + offsetof(GSScanlineLocalData, d)]); } - if(!m_sel.sprite) + if(m_sel.prim != GS_SPRITE_CLASS) { if(m_sel.fwrite && m_sel.fge || m_sel.zb) { @@ -326,7 +326,7 @@ vpaddd(xmm10, ptr[rdx + offsetof(GSScanlineLocalData::skip, s)]); - if(!m_sel.sprite || m_sel.mmin) + if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) { vpaddd(xmm11, ptr[rdx + offsetof(GSScanlineLocalData::skip, t)]); } @@ -397,7 +397,7 @@ add(rdi, 8); - if(!m_sel.sprite) + if(m_sel.prim != GS_SPRITE_CLASS) { // z += m_local.d4.z; @@ -436,7 +436,7 @@ vpshufd(xmm1, xmm0, _MM_SHUFFLE(0, 0, 0, 0)); vpaddd(xmm10, xmm1); - if(!m_sel.sprite || m_sel.mmin) + if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) { vpshufd(xmm1, xmm0, _MM_SHUFFLE(1, 1, 1, 1)); vpaddd(xmm11, xmm1); @@ -519,7 +519,7 @@ // GSVector4i zs = zi; - if(!m_sel.sprite) + if(m_sel.prim != GS_SPRITE_CLASS) { if(m_sel.zoverflow) { @@ -652,7 +652,7 @@ vpshufhw(xmm6, xmm6, _MM_SHUFFLE(2, 2, 0, 0)); vpsrlw(xmm6, 1); - if(!m_sel.sprite) + if(m_sel.prim != GS_SPRITE_CLASS) { // GSVector4i vf = v.xxzzlh().srl16(1); @@ -1326,7 +1326,9 @@ if(m_sel.fpsm == 2) { vpxor(xmm0, xmm0); - vpsrld(xmm1, xmm6, 15); + //vpsrld(xmm1, xmm6, 15); + vpslld(xmm1, xmm6, 16); + vpsrad(xmm1, 31); vpcmpeqd(xmm1, xmm0); } else @@ -1662,8 +1664,8 @@ mov(rax, r8); and(rax, 3); shl(rax, 5); - vpaddw(xmm2, ptr[r12 + rax + offsetof(GSScanlineGlobalData, dimx[0])]); - vpaddw(xmm3, ptr[r12 + rax + offsetof(GSScanlineGlobalData, dimx[1])]); + vpaddw(xmm2, ptr[r12 + rax + offsetof(GSScanlineGlobalData, dimx) + sizeof(GSVector4i) * 0]); + vpaddw(xmm3, ptr[r12 + rax + offsetof(GSScanlineGlobalData, dimx) + sizeof(GSVector4i) * 1]); } // GSVector4i fs = c[0].upl16(c[1]).pu16(c[0].uph16(c[1])); @@ -1823,4 +1825,4 @@ else vpinsrd(dst, src, i); } -#endif \ No newline at end of file +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx2.cpp pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx2.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx2.cpp 2013-06-24 01:11:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx2.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,2968 +1,2970 @@ -/* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "stdafx.h" -#include "GSDrawScanlineCodeGenerator.h" -#include "GSVertexSW.h" - -#if _M_SSE >= 0x501 && !(defined(_M_AMD64) || defined(_WIN64)) - -static const int _args = 16; -static const int _top = _args + 4; -static const int _v = _args + 8; - -void GSDrawScanlineCodeGenerator::Generate() -{ -//ret(8); - - push(ebx); - push(esi); - push(edi); - push(ebp); - - //db(0xcc); - - Init(); - - if(!m_sel.edge) - { - align(16); - } - -L("loop"); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ymm0 = z/zi - // ymm2 = s/u (tme) - // ymm3 = t/v (tme) - // ymm4 = q (tme) - // ymm5 = rb (!tme) - // ymm6 = ga (!tme) - // ymm7 = test - - bool tme = m_sel.tfx != TFX_NONE; - - TestZ(tme ? ymm5 : ymm2, tme ? ymm6 : ymm3); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // - ymm0 - // ymm2 = s/u (tme) - // ymm3 = t/v (tme) - // ymm4 = q (tme) - // ymm5 = rb (!tme) - // ymm6 = ga (!tme) - // ymm7 = test - - if(m_sel.mmin) - { - SampleTextureLOD(); - } - else - { - SampleTexture(); - } - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // - ymm2 - // - ymm3 - // - ymm4 - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - AlphaTFX(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - ReadMask(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - TestAlpha(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - ColorTFX(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - Fog(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - ReadFrame(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = fd - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - TestDestAlpha(); - - // ecx = steps - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = fd - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - // ymm7 = test - - WriteMask(); - - // ebx = fa - // ecx = steps - // edx = fzm - // esi = fzbr - // edi = fzbc - // ebp = za - // ymm2 = fd - // ymm3 = fm - // ymm4 = zm - // ymm5 = rb - // ymm6 = ga - - WriteZBuf(); - - // ebx = fa - // ecx = steps - // edx = fzm - // esi = fzbr - // edi = fzbc - // - ebp - // ymm2 = fd - // ymm3 = fm - // - ymm4 - // ymm5 = rb - // ymm6 = ga - - AlphaBlend(); - - // ebx = fa - // ecx = steps - // edx = fzm - // esi = fzbr - // edi = fzbc - // ymm2 = fd - // ymm3 = fm - // ymm5 = rb - // ymm6 = ga - - WriteFrame(); - -L("step"); - - // if(steps <= 0) break; - - if(!m_sel.edge) - { - test(ecx, ecx); - - jle("exit", T_NEAR); - - Step(); - - jmp("loop", T_NEAR); - } - -L("exit"); - - pop(ebp); - pop(edi); - pop(esi); - pop(ebx); - - ret(8); -} - -void GSDrawScanlineCodeGenerator::Init() -{ - if(!m_sel.notest) - { - // int skip = left & 7; - - mov(ebx, edx); - and(edx, 7); - - // int steps = pixels + skip - 8; - - lea(ecx, ptr[ecx + edx - 8]); - - // left -= skip; - - sub(ebx, edx); - - // GSVector4i test = m_test[skip] | m_test[15 + (steps & (steps >> 31))]; - - mov(eax, ecx); - sar(eax, 31); - and(eax, ecx); - - vpmovsxbd(ymm7, ptr[edx * 8 + (size_t)&m_test[0]]); - vpmovsxbd(ymm0, ptr[eax * 8 + (size_t)&m_test[15]]); - vpor(ymm7, ymm0); - - shl(edx, 5); - } - else - { - mov(ebx, edx); // left - xor(edx, edx); // skip - lea(ecx, ptr[ecx - 8]); // steps - } - - // GSVector2i* fza_base = &m_local.gd->fzbr[top]; - - mov(esi, ptr[esp + _top]); - lea(esi, ptr[esi * 8]); - add(esi, ptr[&m_local.gd->fzbr]); - - // GSVector2i* fza_offset = &m_local.gd->fzbc[left >> 2]; - - lea(edi, ptr[ebx * 2]); - add(edi, ptr[&m_local.gd->fzbc]); - - if(m_sel.prim != GS_SPRITE_CLASS && (m_sel.fwrite && m_sel.fge || m_sel.zb) || m_sel.fb && (m_sel.edge || m_sel.tfx != TFX_NONE || m_sel.iip)) - { - // edx = &m_local.d[skip] - - lea(edx, ptr[edx * 8 + (size_t)m_local.d]); - - // ebx = &v - - mov(ebx, ptr[esp + _v]); - } - - if(m_sel.prim != GS_SPRITE_CLASS) - { - if(m_sel.fwrite && m_sel.fge || m_sel.zb) - { - vbroadcastf128(ymm0, ptr[ebx + offsetof(GSVertexSW, p)]); // v.p - - if(m_sel.fwrite && m_sel.fge) - { - // f = GSVector8i(vp).zzzzh().zzzz().add16(m_local.d[skip].f); - - vcvttps2dq(ymm1, ymm0); - vpshufhw(ymm1, ymm1, _MM_SHUFFLE(2, 2, 2, 2)); - vpshufd(ymm1, ymm1, _MM_SHUFFLE(2, 2, 2, 2)); - vpaddw(ymm1, ptr[edx + offsetof(GSScanlineLocalData::skip, f)]); - - vmovdqa(ptr[&m_local.temp.f], ymm1); - } - - if(m_sel.zb) - { - // z = vp.zzzz() + m_local.d[skip].z; - - vshufps(ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); - vmovaps(ptr[&m_local.temp.z], ymm0); - vmovaps(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, z)]); - vmovaps(ptr[&m_local.temp.zo], ymm2); - vaddps(ymm0, ymm2); - } - } - } - else - { - if(m_sel.ztest) - { - vpbroadcastd(ymm0, ptr[&m_local.p.z]); - } - } - - if(m_sel.fb) - { - if(m_sel.edge || m_sel.tfx != TFX_NONE) - { - vbroadcastf128(ymm4, ptr[ebx + offsetof(GSVertexSW, t)]); // v.t - } - - if(m_sel.edge) - { - // m_local.temp.cov = GSVector4i::cast(v.t).zzzzh().wwww().srl16(9); - - vpshufhw(ymm3, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); - vpshufd(ymm3, ymm3, _MM_SHUFFLE(3, 3, 3, 3)); - vpsrlw(ymm3, 9); - - vmovdqa(ptr[&m_local.temp.cov], ymm3); - } - - if(m_sel.tfx != TFX_NONE) - { - if(m_sel.fst) - { - // GSVector4i vti(vt); - - vcvttps2dq(ymm6, ymm4); - - // s = vti.xxxx() + m_local.d[skip].s; - // t = vti.yyyy(); if(!sprite) t += m_local.d[skip].t; - - vpshufd(ymm2, ymm6, _MM_SHUFFLE(0, 0, 0, 0)); - vpshufd(ymm3, ymm6, _MM_SHUFFLE(1, 1, 1, 1)); - - vpaddd(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, s)]); - - if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) - { - vpaddd(ymm3, ptr[edx + offsetof(GSScanlineLocalData::skip, t)]); - } - else - { - if(m_sel.ltf) - { - vpshuflw(ymm6, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm6, ymm6, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm6, 12); - vmovdqa(ptr[&m_local.temp.vf], ymm6); - } - } - - vmovdqa(ptr[&m_local.temp.s], ymm2); - vmovdqa(ptr[&m_local.temp.t], ymm3); - } - else - { - // s = vt.xxxx() + m_local.d[skip].s; - // t = vt.yyyy() + m_local.d[skip].t; - // q = vt.zzzz() + m_local.d[skip].q; - - vshufps(ymm2, ymm4, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); - vshufps(ymm3, ymm4, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); - vshufps(ymm4, ymm4, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); - - vaddps(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, s)]); - vaddps(ymm3, ptr[edx + offsetof(GSScanlineLocalData::skip, t)]); - vaddps(ymm4, ptr[edx + offsetof(GSScanlineLocalData::skip, q)]); - - vmovaps(ptr[&m_local.temp.s], ymm2); - vmovaps(ptr[&m_local.temp.t], ymm3); - vmovaps(ptr[&m_local.temp.q], ymm4); - } - } - - if(!(m_sel.tfx == TFX_DECAL && m_sel.tcc)) - { - if(m_sel.iip) - { - // GSVector4i vc = GSVector4i(v.c); - - vbroadcastf128(ymm6, ptr[ebx + offsetof(GSVertexSW, c)]); // v.c - vcvttps2dq(ymm6, ymm6); - - // vc = vc.upl16(vc.zwxy()); - - vpshufd(ymm5, ymm6, _MM_SHUFFLE(1, 0, 3, 2)); - vpunpcklwd(ymm6, ymm5); - - // rb = vc.xxxx().add16(m_local.d[skip].rb); - // ga = vc.zzzz().add16(m_local.d[skip].ga); - - vpshufd(ymm5, ymm6, _MM_SHUFFLE(0, 0, 0, 0)); - vpshufd(ymm6, ymm6, _MM_SHUFFLE(2, 2, 2, 2)); - - vpaddw(ymm5, ptr[edx + offsetof(GSScanlineLocalData::skip, rb)]); - vpaddw(ymm6, ptr[edx + offsetof(GSScanlineLocalData::skip, ga)]); - - vmovdqa(ptr[&m_local.temp.rb], ymm5); - vmovdqa(ptr[&m_local.temp.ga], ymm6); - } - else - { - if(m_sel.tfx == TFX_NONE) - { - vmovdqa(ymm5, ptr[&m_local.c.rb]); - vmovdqa(ymm6, ptr[&m_local.c.ga]); - } - } - } - } -} - -void GSDrawScanlineCodeGenerator::Step() -{ - // steps -= 8; - - sub(ecx, 8); - - // fza_offset += 2; - - add(edi, 16); - - if(m_sel.prim != GS_SPRITE_CLASS) - { - // zo += GSVector8::broadcast32(&m_local.d8.p.z); - - if(m_sel.zb) - { - vbroadcastss(ymm0, ptr[&m_local.d8.p.z]); - vaddps(ymm0, ptr[&m_local.temp.zo]); - vmovaps(ptr[&m_local.temp.zo], ymm0); - vaddps(ymm0, ptr[&m_local.temp.z]); - } - - // f = f.add16(GSVector8i::broadcast16(&m_local.d8.p.f)); - - if(m_sel.fwrite && m_sel.fge) - { - vpbroadcastw(ymm1, ptr[&m_local.d8.p.f]); - vpaddw(ymm1, ptr[&m_local.temp.f]); - vmovdqa(ptr[&m_local.temp.f], ymm1); - } - } - else - { - if(m_sel.ztest) - { - vpbroadcastd(ymm0, ptr[&m_local.p.z]); - } - } - - if(m_sel.fb) - { - if(m_sel.tfx != TFX_NONE) - { - if(m_sel.fst) - { - // GSVector8i stq = GSVector8i::cast(GSVector8(m_local.d8.stq)); - - vbroadcasti128(ymm4, ptr[&m_local.d8.stq]); - - // s = GSVector8::cast(GSVector8i::cast(s) + stq.xxxx()); - - vpshufd(ymm2, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); - vpaddd(ymm2, ptr[&m_local.temp.s]); - vmovdqa(ptr[&m_local.temp.s], ymm2); - - if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) - { - // t = GSVector8::cast(GSVector8i::cast(t) + stq.yyyy()); - - vpshufd(ymm3, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); - vpaddd(ymm3, ptr[&m_local.temp.t]); - vmovdqa(ptr[&m_local.temp.t], ymm3); - } - else - { - vmovdqa(ymm3, ptr[&m_local.temp.t]); - } - } - else - { - // GSVector8 stq(m_local.d8.stq); - - // s += stq.xxxx(); - // t += stq.yyyy(); - // q += stq.zzzz(); - - vbroadcastf128(ymm4, ptr[&m_local.d8.stq]); - - vshufps(ymm2, ymm4, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); - vshufps(ymm3, ymm4, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); - vshufps(ymm4, ymm4, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); - - vaddps(ymm2, ptr[&m_local.temp.s]); - vaddps(ymm3, ptr[&m_local.temp.t]); - vaddps(ymm4, ptr[&m_local.temp.q]); - - vmovaps(ptr[&m_local.temp.s], ymm2); - vmovaps(ptr[&m_local.temp.t], ymm3); - vmovaps(ptr[&m_local.temp.q], ymm4); - } - } - - if(!(m_sel.tfx == TFX_DECAL && m_sel.tcc)) - { - if(m_sel.iip) - { - // GSVector8i c = GSVector8i::broadcast64(&m_local.d8.c); - - vpbroadcastq(ymm7, ptr[&m_local.d8.c]); - - // rb = rb.add16(c.xxxx()).max_i16(GSVector8i::zero()); - // ga = ga.add16(c.yyyy()).max_i16(GSVector8i::zero()); - - vpshufd(ymm5, ymm7, _MM_SHUFFLE(0, 0, 0, 0)); - vpshufd(ymm6, ymm7, _MM_SHUFFLE(1, 1, 1, 1)); - - vpaddw(ymm5, ptr[&m_local.temp.rb]); - vpaddw(ymm6, ptr[&m_local.temp.ga]); - - // FIXME: color may underflow and roll over at the end of the line, if decreasing - - vpxor(ymm7, ymm7); - vpmaxsw(ymm5, ymm7); - vpmaxsw(ymm6, ymm7); - - vmovdqa(ptr[&m_local.temp.rb], ymm5); - vmovdqa(ptr[&m_local.temp.ga], ymm6); - } - else - { - if(m_sel.tfx == TFX_NONE) - { - vmovdqa(ymm5, ptr[&m_local.c.rb]); - vmovdqa(ymm6, ptr[&m_local.c.ga]); - } - } - } - } - - if(!m_sel.notest) - { - // test = m_test[15 + (steps & (steps >> 31))]; - - mov(edx, ecx); - sar(edx, 31); - and(edx, ecx); - - vpmovsxbd(ymm7, ptr[edx * 8 + (size_t)&m_test[15]]); - } -} - -void GSDrawScanlineCodeGenerator::TestZ(const Ymm& temp1, const Ymm& temp2) -{ - if(!m_sel.zb) - { - return; - } - - // int za = fza_base.y + fza_offset->y; - - mov(ebp, ptr[esi + 4]); - add(ebp, ptr[edi + 4]); - - // GSVector8i zs = zi; - - if(m_sel.prim != GS_SPRITE_CLASS) - { - if(m_sel.zoverflow) - { - // zs = (GSVector8i(z * 0.5f) << 1) | (GSVector8i(z) & GSVector8i::x00000001()); - - vbroadcastss(temp1, ptr[&GSVector8::m_half]); - vmulps(temp1, ymm0); - vcvttps2dq(temp1, temp1); - vpslld(temp1, 1); - - vcvttps2dq(ymm0, ymm0); - vpcmpeqd(temp2, temp2); - vpsrld(temp2, 31); - vpand(ymm0, temp2); - - vpor(ymm0, temp1); - } - else - { - // zs = GSVector8i(z); - - vcvttps2dq(ymm0, ymm0); - } - - if(m_sel.zwrite) - { - vmovdqa(ptr[&m_local.temp.zs], ymm0); - } - } - - if(m_sel.ztest) - { - ReadPixel(ymm1, temp1, ebp); - - if(m_sel.zwrite && m_sel.zpsm < 2) - { - vmovdqa(ptr[&m_local.temp.zd], ymm1); - } - - // zd &= 0xffffffff >> m_sel.zpsm * 8; - - if(m_sel.zpsm) - { - vpslld(ymm1, (uint8)(m_sel.zpsm * 8)); - vpsrld(ymm1, (uint8)(m_sel.zpsm * 8)); - } - - if(m_sel.zoverflow || m_sel.zpsm == 0) - { - // GSVector8i o = GSVector8i::x80000000(); - - vpcmpeqd(temp1, temp1); - vpslld(temp1, 31); - - // GSVector8i zso = zs - o; - // GSVector8i zdo = zd - o; - - vpsubd(ymm0, temp1); - vpsubd(ymm1, temp1); - } - - switch(m_sel.ztst) - { - case ZTST_GEQUAL: - // test |= zso < zdo; // ~(zso >= zdo) - vpcmpgtd(ymm1, ymm0); - vpor(ymm7, ymm1); - break; - - case ZTST_GREATER: // TODO: tidus hair and chocobo wings only appear fully when this is tested as ZTST_GEQUAL - // test |= zso <= zdo; // ~(zso > zdo) - vpcmpgtd(ymm0, ymm1); - vpcmpeqd(temp1, temp1); - vpxor(ymm0, temp1); - vpor(ymm7, ymm0); - break; - } - - alltrue(); - } -} - -void GSDrawScanlineCodeGenerator::SampleTexture() -{ - if(!m_sel.fb || m_sel.tfx == TFX_NONE) - { - return; - } - - mov(ebx, ptr[&m_local.gd->tex[0]]); - - if(m_sel.tlu) - { - mov(edx, ptr[&m_local.gd->clut]); - } - - // ebx = tex - // edx = clut - - if(!m_sel.fst) - { - vrcpps(ymm0, ymm4); - - vmulps(ymm2, ymm0); - vmulps(ymm3, ymm0); - - vcvttps2dq(ymm2, ymm2); - vcvttps2dq(ymm3, ymm3); - - if(m_sel.ltf) - { - // u -= 0x8000; - // v -= 0x8000; - - mov(eax, 0x8000); - vmovd(xmm4, eax); - vpbroadcastd(ymm4, xmm4); - - vpsubd(ymm2, ymm4); - vpsubd(ymm3, ymm4); - } - } - - // ymm2 = u - // ymm3 = v - - if(m_sel.ltf) - { - // GSVector8i uf = u.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.uf], ymm0); - - if(m_sel.prim != GS_SPRITE_CLASS) - { - // GSVector8i vf = v.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.vf], ymm0); - } - } - - // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); - - vpsrad(ymm2, 16); - vpsrad(ymm3, 16); - vpackssdw(ymm2, ymm3); - - if(m_sel.ltf) - { - // GSVector8i uv1 = uv0.add16(GSVector8i::x0001()); - - vpcmpeqd(ymm1, ymm1); - vpsrlw(ymm1, 15); - vpaddw(ymm3, ymm2, ymm1); - - // uv0 = Wrap(uv0); - // uv1 = Wrap(uv1); - - Wrap(ymm2, ymm3); - } - else - { - // uv0 = Wrap(uv0); - - Wrap(ymm2); - } - - // ymm2 = uv0 - // ymm3 = uv1 (ltf) - // ymm0, ymm1, ymm4, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i y0 = uv0.uph16() << tw; - // GSVector8i x0 = uv0.upl16(); - - vpxor(ymm0, ymm0); - - vpunpcklwd(ymm4, ymm2, ymm0); - vpunpckhwd(ymm2, ymm2, ymm0); - vpslld(ymm2, (uint8)(m_sel.tw + 3)); - - // ymm0 = 0 - // ymm2 = y0 - // ymm3 = uv1 (ltf) - // ymm4 = x0 - // ymm1, ymm5, ymm6 = free - // ymm7 = used - - if(m_sel.ltf) - { - // GSVector8i y1 = uv1.uph16() << tw; - // GSVector8i x1 = uv1.upl16(); - - vpunpcklwd(ymm6, ymm3, ymm0); - vpunpckhwd(ymm3, ymm3, ymm0); - vpslld(ymm3, (uint8)(m_sel.tw + 3)); - - // ymm2 = y0 - // ymm3 = y1 - // ymm4 = x0 - // ymm6 = x1 - // ymm0, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i addr00 = y0 + x0; - // GSVector8i addr01 = y0 + x1; - // GSVector8i addr10 = y1 + x0; - // GSVector8i addr11 = y1 + x1; - - vpaddd(ymm5, ymm2, ymm4); - vpaddd(ymm2, ymm2, ymm6); - vpaddd(ymm0, ymm3, ymm4); - vpaddd(ymm3, ymm3, ymm6); - - // ymm5 = addr00 - // ymm2 = addr01 - // ymm0 = addr10 - // ymm3 = addr11 - // ymm1, ymm4, ymm6 = free - // ymm7 = used - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); - // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); - // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(4, 0); - - // ymm6 = c00 - // ymm4 = c01 - // ymm1 = c10 - // ymm5 = c11 - // ymm0, ymm2, ymm3 = free - // ymm7 = used - - vmovdqa(ymm0, ptr[&m_local.temp.uf]); - - // GSVector8i rb00 = c00 & mask; - // GSVector8i ga00 = (c00 >> 8) & mask; - - vpsllw(ymm2, ymm6, 8); - vpsrlw(ymm2, 8); - vpsrlw(ymm6, 8); - - // GSVector8i rb01 = c01 & mask; - // GSVector8i ga01 = (c01 >> 8) & mask; - - vpsllw(ymm3, ymm4, 8); - vpsrlw(ymm3, 8); - vpsrlw(ymm4, 8); - - // ymm0 = uf - // ymm2 = rb00 - // ymm3 = rb01 - // ymm6 = ga00 - // ymm4 = ga01 - // ymm1 = c10 - // ymm5 = c11 - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb01, uf); - // ga00 = ga00.lerp16_4(ga01, uf); - - lerp16_4(ymm3, ymm2, ymm0); - lerp16_4(ymm4, ymm6, ymm0); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = c10 - // ymm5 = c11 - // ymm2, ymm6 = free - // ymm7 = used - - // GSVector8i rb10 = c10 & mask; - // GSVector8i ga10 = (c10 >> 8) & mask; - - vpsrlw(ymm2, ymm1, 8); - vpsllw(ymm1, 8); - vpsrlw(ymm1, 8); - - // GSVector8i rb11 = c11 & mask; - // GSVector8i ga11 = (c11 >> 8) & mask; - - vpsrlw(ymm6, ymm5, 8); - vpsllw(ymm5, 8); - vpsrlw(ymm5, 8); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = rb10 - // ymm5 = rb11 - // ymm2 = ga10 - // ymm6 = ga11 - // ymm7 = used - - // rb10 = rb10.lerp16_4(rb11, uf); - // ga10 = ga10.lerp16_4(ga11, uf); - - lerp16_4(ymm5, ymm1, ymm0); - lerp16_4(ymm6, ymm2, ymm0); - - // ymm3 = rb00 - // ymm4 = ga00 - // ymm5 = rb10 - // ymm6 = ga10 - // ymm0, ymm1, ymm2 = free - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb10, vf); - // ga00 = ga00.lerp16_4(ga10, vf); - - vmovdqa(ymm0, ptr[&m_local.temp.vf]); - - lerp16_4(ymm5, ymm3, ymm0); - lerp16_4(ymm6, ymm4, ymm0); - } - else - { - // GSVector8i addr00 = y0 + x0; - - vpaddd(ymm5, ymm2, ymm4); - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(1, 0); - - // GSVector8i mask = GSVector8i::x00ff(); - - // c[0] = c00 & mask; - // c[1] = (c00 >> 8) & mask; - - vpsllw(ymm5, ymm6, 8); - vpsrlw(ymm5, 8); - vpsrlw(ymm6, 8); - } -} - -void GSDrawScanlineCodeGenerator::Wrap(const Ymm& uv) -{ - // ymm0, ymm1, ymm4, ymm5, ymm6 = free - - int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; - int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; - - int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; - - if(wms_clamp == wmt_clamp) - { - if(wms_clamp) - { - if(region) - { - vbroadcasti128(ymm0, ptr[&m_local.gd->t.min]); - vpmaxsw(uv, ymm0); - } - else - { - vpxor(ymm0, ymm0); - vpmaxsw(uv, ymm0); - } - - vbroadcasti128(ymm0, ptr[&m_local.gd->t.max]); - vpminsw(uv, ymm0); - } - else - { - vbroadcasti128(ymm0, ptr[&m_local.gd->t.min]); - vpand(uv, ymm0); - - if(region) - { - vbroadcasti128(ymm0, ptr[&m_local.gd->t.max]); - vpor(uv, ymm0); - } - } - } - else - { - vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); - vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); - vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv, ymm4); - - if(region) - { - vpor(ymm1, ymm5); - } - - // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv, ymm4); - vpminsw(uv, ymm5); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv, ymm1, ymm0); - } -} - -void GSDrawScanlineCodeGenerator::Wrap(const Ymm& uv0, const Ymm& uv1) -{ - // ymm0, ymm1, ymm4, ymm5, ymm6 = free - - int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; - int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; - - int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; - - if(wms_clamp == wmt_clamp) - { - if(wms_clamp) - { - if(region) - { - vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); - vpmaxsw(uv0, ymm4); - vpmaxsw(uv1, ymm4); - } - else - { - vpxor(ymm0, ymm0); - vpmaxsw(uv0, ymm0); - vpmaxsw(uv1, ymm0); - } - - vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); - vpminsw(uv0, ymm5); - vpminsw(uv1, ymm5); - } - else - { - vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); - vpand(uv0, ymm4); - vpand(uv1, ymm4); - - if(region) - { - vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); - vpor(uv0, ymm5); - vpor(uv1, ymm5); - } - } - } - else - { - vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); - vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); - vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); - - // uv0 - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv0, ymm4); - - if(region) - { - vpor(ymm1, ymm5); - } - - // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv0, ymm4); - vpminsw(uv0, ymm5); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv0, ymm1, ymm0); - - // uv1 - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv1, ymm4); - - if(region) - { - vpor(ymm1, ymm5); - } - - // GSVector4i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv1, ymm4); - vpminsw(uv1, ymm5); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv1, ymm1, ymm0); - } -} - -void GSDrawScanlineCodeGenerator::SampleTextureLOD() -{ - if(!m_sel.fb || m_sel.tfx == TFX_NONE) - { - return; - } - - push(ebp); - - mov(ebp, (size_t)m_local.gd->tex); - - if(m_sel.tlu) - { - mov(edx, ptr[&m_local.gd->clut]); - } - - if(!m_sel.fst) - { - vrcpps(ymm0, ymm4); - - vmulps(ymm2, ymm0); - vmulps(ymm3, ymm0); - - vcvttps2dq(ymm2, ymm2); - vcvttps2dq(ymm3, ymm3); - } - - // ymm2 = u - // ymm3 = v - // ymm4 = q - // ymm0 = ymm1 = ymm5 = ymm6 = free - - // TODO: if the fractional part is not needed in round-off mode then there is a faster integer log2 (just take the exp) (but can we round it?) - - if(!m_sel.lcm) - { - // lod = -log2(Q) * (1 << L) + K - - vpcmpeqd(ymm1, ymm1); - vpsrld(ymm1, ymm1, 25); - vpslld(ymm0, ymm4, 1); - vpsrld(ymm0, ymm0, 24); - vpsubd(ymm0, ymm1); - vcvtdq2ps(ymm0, ymm0); - - // ymm0 = (float)(exp(q) - 127) - - vpslld(ymm4, ymm4, 9); - vpsrld(ymm4, ymm4, 9); - vorps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); - - // ymm4 = mant(q) | 1.0f - - if(m_cpu.has(util::Cpu::tFMA)) - { - vmovaps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[0]]); // c0 - vfmadd213ps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[1]]); // c0 * ymm4 + c1 - vfmadd213ps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[2]]); // (c0 * ymm4 + c1) * ymm4 + c2 - vsubps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); // ymm4 - 1.0f - vfmadd213ps(ymm4, ymm5, ymm0); // ((c0 * ymm4 + c1) * ymm4 + c2) * (ymm4 - 1.0f) + ymm0 - } - else - { - vmulps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[0]]); - vaddps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[1]]); - vmulps(ymm5, ymm4); - vsubps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); - vaddps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[2]]); - vmulps(ymm4, ymm5); - vaddps(ymm4, ymm0); - } - - // ymm4 = log2(Q) = ((((c0 * ymm4) + c1) * ymm4) + c2) * (ymm4 - 1.0f) + ymm0 - - if(m_cpu.has(util::Cpu::tFMA)) - { - vmovaps(ymm5, ptr[&m_local.gd->l]); - vfmadd213ps(ymm4, ymm5, ptr[&m_local.gd->k]); - } - else - { - vmulps(ymm4, ptr[&m_local.gd->l]); - vaddps(ymm4, ptr[&m_local.gd->k]); - } - - // ymm4 = (-log2(Q) * (1 << L) + K) * 0x10000 - - vxorps(ymm0, ymm0); - vminps(ymm4, ptr[&m_local.gd->mxl]); - vmaxps(ymm4, ymm0); - vcvtps2dq(ymm4, ymm4); - - if(m_sel.mmin == 1) // round-off mode - { - mov(eax, 0x8000); - vmovd(xmm0, eax); - vpbroadcastd(ymm0, xmm0); - vpaddd(ymm4, ymm0); - } - - vpsrld(ymm0, ymm4, 16); - - vmovdqa(ptr[&m_local.temp.lod.i], ymm0); -/* -vpslld(ymm5, ymm0, 6); -vpslld(ymm6, ymm4, 16); -vpsrld(ymm6, ymm6, 24); -return; -*/ - if(m_sel.mmin == 2) // trilinear mode - { - vpshuflw(ymm1, ymm4, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm1, ymm1, _MM_SHUFFLE(2, 2, 0, 0)); - vmovdqa(ptr[&m_local.temp.lod.f], ymm1); - } - - // shift u/v/minmax by (int)lod - - vpsravd(ymm2, ymm2, ymm0); - vpsravd(ymm3, ymm3, ymm0); - - vmovdqa(ptr[&m_local.temp.uv[0]], ymm2); - vmovdqa(ptr[&m_local.temp.uv[1]], ymm3); - - // m_local.gd->t.minmax => m_local.temp.uv_minmax[0/1] - - vpxor(ymm1, ymm1); - - vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); - vpunpcklwd(ymm5, ymm4, ymm1); // minu - vpunpckhwd(ymm6, ymm4, ymm1); // minv - vpsrlvd(ymm5, ymm5, ymm0); - vpsrlvd(ymm6, ymm6, ymm0); - vpackusdw(ymm5, ymm6); - - vbroadcasti128(ymm4, ptr[&m_local.gd->t.max]); - vpunpcklwd(ymm6, ymm4, ymm1); // maxu - vpunpckhwd(ymm4, ymm4, ymm1); // maxv - vpsrlvd(ymm6, ymm6, ymm0); - vpsrlvd(ymm4, ymm4, ymm0); - vpackusdw(ymm6, ymm4); - - vmovdqa(ptr[&m_local.temp.uv_minmax[0]], ymm5); - vmovdqa(ptr[&m_local.temp.uv_minmax[1]], ymm6); - } - else - { - // lod = K - - vmovd(xmm0, ptr[&m_local.gd->lod.i.u32[0]]); - - vpsrad(ymm2, xmm0); - vpsrad(ymm3, xmm0); - - vmovdqa(ptr[&m_local.temp.uv[0]], ymm2); - vmovdqa(ptr[&m_local.temp.uv[1]], ymm3); - - vmovdqa(ymm5, ptr[&m_local.temp.uv_minmax[0]]); - vmovdqa(ymm6, ptr[&m_local.temp.uv_minmax[1]]); - } - - // ymm2 = m_local.temp.uv[0] = u (level m) - // ymm3 = m_local.temp.uv[1] = v (level m) - // ymm5 = minuv - // ymm6 = maxuv - - if(m_sel.ltf) - { - // u -= 0x8000; - // v -= 0x8000; - - mov(eax, 0x8000); - vmovd(xmm4, eax); - vpbroadcastd(ymm4, xmm4); - - vpsubd(ymm2, ymm4); - vpsubd(ymm3, ymm4); - - // GSVector8i uf = u.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.uf], ymm0); - - // GSVector8i vf = v.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.vf], ymm0); - } - - // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); - - vpsrad(ymm2, 16); - vpsrad(ymm3, 16); - vpackssdw(ymm2, ymm3); - - if(m_sel.ltf) - { - // GSVector8i uv1 = uv0.add16(GSVector8i::x0001()); - - vpcmpeqd(ymm1, ymm1); - vpsrlw(ymm1, 15); - vpaddw(ymm3, ymm2, ymm1); - - // uv0 = Wrap(uv0); - // uv1 = Wrap(uv1); - - WrapLOD(ymm2, ymm3); - } - else - { - // uv0 = Wrap(uv0); - - WrapLOD(ymm2); - } - - // ymm2 = uv0 - // ymm3 = uv1 (ltf) - // ymm0, ymm1, ymm4, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i x0 = uv0.upl16(); - // GSVector8i y0 = uv0.uph16() << tw; - - vpxor(ymm0, ymm0); - - vpunpcklwd(ymm4, ymm2, ymm0); - vpunpckhwd(ymm2, ymm2, ymm0); - vpslld(ymm2, (uint8)(m_sel.tw + 3)); - - // ymm0 = 0 - // ymm2 = y0 - // ymm3 = uv1 (ltf) - // ymm4 = x0 - // ymm1, ymm5, ymm6 = free - // ymm7 = used - - if(m_sel.ltf) - { - // GSVector8i x1 = uv1.upl16(); - // GSVector8i y1 = uv1.uph16() << tw; - - vpunpcklwd(ymm6, ymm3, ymm0); - vpunpckhwd(ymm3, ymm3, ymm0); - vpslld(ymm3, (uint8)(m_sel.tw + 3)); - - // ymm2 = y0 - // ymm3 = y1 - // ymm4 = x0 - // ymm6 = x1 - // ymm0, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i addr00 = y0 + x0; - // GSVector8i addr01 = y0 + x1; - // GSVector8i addr10 = y1 + x0; - // GSVector8i addr11 = y1 + x1; - - vpaddd(ymm5, ymm2, ymm4); - vpaddd(ymm2, ymm2, ymm6); - vpaddd(ymm0, ymm3, ymm4); - vpaddd(ymm3, ymm3, ymm6); - - // ymm5 = addr00 - // ymm2 = addr01 - // ymm0 = addr10 - // ymm3 = addr11 - // ymm1, ymm4, ymm6 = free - // ymm7 = used - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); - // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); - // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(4, 0); - - // ymm6 = c00 - // ymm4 = c01 - // ymm1 = c10 - // ymm5 = c11 - // ymm0, ymm2, ymm3 = free - // ymm7 = used - - vmovdqa(ymm0, ptr[&m_local.temp.uf]); - - // GSVector8i rb00 = c00 & mask; - // GSVector8i ga00 = (c00 >> 8) & mask; - - vpsllw(ymm2, ymm6, 8); - vpsrlw(ymm2, 8); - vpsrlw(ymm6, 8); - - // GSVector8i rb01 = c01 & mask; - // GSVector8i ga01 = (c01 >> 8) & mask; - - vpsllw(ymm3, ymm4, 8); - vpsrlw(ymm3, 8); - vpsrlw(ymm4, 8); - - // ymm0 = uf - // ymm2 = rb00 - // ymm3 = rb01 - // ymm6 = ga00 - // ymm4 = ga01 - // ymm1 = c10 - // ymm5 = c11 - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb01, uf); - // ga00 = ga00.lerp16_4(ga01, uf); - - lerp16_4(ymm3, ymm2, ymm0); - lerp16_4(ymm4, ymm6, ymm0); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = c10 - // ymm5 = c11 - // ymm2, ymm6 = free - // ymm7 = used - - // GSVector8i rb10 = c10 & mask; - // GSVector8i ga10 = (c10 >> 8) & mask; - - vpsrlw(ymm2, ymm1, 8); - vpsllw(ymm1, 8); - vpsrlw(ymm1, 8); - - // GSVector8i rb11 = c11 & mask; - // GSVector8i ga11 = (c11 >> 8) & mask; - - vpsrlw(ymm6, ymm5, 8); - vpsllw(ymm5, 8); - vpsrlw(ymm5, 8); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = rb10 - // ymm5 = rb11 - // ymm2 = ga10 - // ymm6 = ga11 - // ymm7 = used - - // rb10 = rb10.lerp16_4(rb11, uf); - // ga10 = ga10.lerp16_4(ga11, uf); - - lerp16_4(ymm5, ymm1, ymm0); - lerp16_4(ymm6, ymm2, ymm0); - - // ymm3 = rb00 - // ymm4 = ga00 - // ymm5 = rb10 - // ymm6 = ga10 - // ymm0, ymm1, ymm2 = free - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb10, vf); - // ga00 = ga00.lerp16_4(ga10, vf); - - vmovdqa(ymm0, ptr[&m_local.temp.vf]); - - lerp16_4(ymm5, ymm3, ymm0); - lerp16_4(ymm6, ymm4, ymm0); - } - else - { - // GSVector8i addr00 = y0 + x0; - - vpaddd(ymm5, ymm2, ymm4); - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(1, 0); - - // GSVector8i mask = GSVector8i::x00ff(); - - // c[0] = c00 & mask; - // c[1] = (c00 >> 8) & mask; - - vpsllw(ymm5, ymm6, 8); - vpsrlw(ymm5, 8); - vpsrlw(ymm6, 8); - } - - if(m_sel.mmin != 1) // !round-off mode - { - vmovdqa(ptr[&m_local.temp.trb], ymm5); - vmovdqa(ptr[&m_local.temp.tga], ymm6); - - vmovdqa(ymm2, ptr[&m_local.temp.uv[0]]); - vmovdqa(ymm3, ptr[&m_local.temp.uv[1]]); - - vpsrad(ymm2, 1); - vpsrad(ymm3, 1); - - vmovdqa(ymm5, ptr[&m_local.temp.uv_minmax[0]]); - vmovdqa(ymm6, ptr[&m_local.temp.uv_minmax[1]]); - - vpsrlw(ymm5, 1); - vpsrlw(ymm6, 1); - - if(m_sel.ltf) - { - // u -= 0x8000; - // v -= 0x8000; - - mov(eax, 0x8000); - vmovd(xmm4, eax); - vpbroadcastd(ymm4, xmm4); - - vpsubd(ymm2, ymm4); - vpsubd(ymm3, ymm4); - - // GSVector8i uf = u.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.uf], ymm0); - - // GSVector8i vf = v.xxzzlh().srl16(1); - - vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpsrlw(ymm0, 12); - vmovdqa(ptr[&m_local.temp.vf], ymm0); - } - - // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); - - vpsrad(ymm2, 16); - vpsrad(ymm3, 16); - vpackssdw(ymm2, ymm3); - - if(m_sel.ltf) - { - // GSVector8i uv1 = uv0.add16(GSVector4i::x0001()); - - vpcmpeqd(ymm1, ymm1); - vpsrlw(ymm1, 15); - vpaddw(ymm3, ymm2, ymm1); - - // uv0 = Wrap(uv0); - // uv1 = Wrap(uv1); - - WrapLOD(ymm2, ymm3); - } - else - { - // uv0 = Wrap(uv0); - - WrapLOD(ymm2); - } - - // ymm2 = uv0 - // ymm3 = uv1 (ltf) - // ymm0, ymm1, ymm4, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i x0 = uv0.upl16(); - // GSVector8i y0 = uv0.uph16() << tw; - - vpxor(ymm0, ymm0); - - vpunpcklwd(ymm4, ymm2, ymm0); - vpunpckhwd(ymm2, ymm2, ymm0); - vpslld(ymm2, (uint8)(m_sel.tw + 3)); - - // ymm0 = 0 - // ymm2 = y0 - // ymm3 = uv1 (ltf) - // ymm4 = x0 - // ymm1, ymm5, ymm6 = free - // ymm7 = used - - if(m_sel.ltf) - { - // GSVector8i x1 = uv1.upl16(); - // GSVector8i y1 = uv1.uph16() << tw; - - vpunpcklwd(ymm6, ymm3, ymm0); - vpunpckhwd(ymm3, ymm3, ymm0); - vpslld(ymm3, (uint8)(m_sel.tw + 3)); - - // ymm2 = y0 - // ymm3 = y1 - // ymm4 = x0 - // ymm6 = x1 - // ymm0, ymm5, ymm6 = free - // ymm7 = used - - // GSVector8i addr00 = y0 + x0; - // GSVector8i addr01 = y0 + x1; - // GSVector8i addr10 = y1 + x0; - // GSVector8i addr11 = y1 + x1; - - vpaddd(ymm5, ymm2, ymm4); - vpaddd(ymm2, ymm2, ymm6); - vpaddd(ymm0, ymm3, ymm4); - vpaddd(ymm3, ymm3, ymm6); - - // ymm5 = addr00 - // ymm2 = addr01 - // ymm0 = addr10 - // ymm3 = addr11 - // ymm1, ymm4, ymm6 = free - // ymm7 = used - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); - // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); - // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(4, 1); - - // ymm6 = c00 - // ymm4 = c01 - // ymm1 = c10 - // ymm5 = c11 - // ymm0, ymm2, ymm3 = free - // ymm7 = used - - vmovdqa(ymm0, ptr[&m_local.temp.uf]); - - // GSVector8i rb00 = c00 & mask; - // GSVector8i ga00 = (c00 >> 8) & mask; - - vpsllw(ymm2, ymm6, 8); - vpsrlw(ymm2, 8); - vpsrlw(ymm6, 8); - - // GSVector8i rb01 = c01 & mask; - // GSVector8i ga01 = (c01 >> 8) & mask; - - vpsllw(ymm3, ymm4, 8); - vpsrlw(ymm3, 8); - vpsrlw(ymm4, 8); - - // ymm0 = uf - // ymm2 = rb00 - // ymm3 = rb01 - // ymm6 = ga00 - // ymm4 = ga01 - // ymm1 = c10 - // ymm5 = c11 - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb01, uf); - // ga00 = ga00.lerp16_4(ga01, uf); - - lerp16_4(ymm3, ymm2, ymm0); - lerp16_4(ymm4, ymm6, ymm0); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = c10 - // ymm5 = c11 - // ymm2, ymm6 = free - // ymm7 = used - - // GSVector8i rb10 = c10 & mask; - // GSVector8i ga10 = (c10 >> 8) & mask; - - vpsrlw(ymm2, ymm1, 8); - vpsllw(ymm1, 8); - vpsrlw(ymm1, 8); - - // GSVector8i rb11 = c11 & mask; - // GSVector8i ga11 = (c11 >> 8) & mask; - - vpsrlw(ymm6, ymm5, 8); - vpsllw(ymm5, 8); - vpsrlw(ymm5, 8); - - // ymm0 = uf - // ymm3 = rb00 - // ymm4 = ga00 - // ymm1 = rb10 - // ymm5 = rb11 - // ymm2 = ga10 - // ymm6 = ga11 - // ymm7 = used - - // rb10 = rb10.lerp16_4(rb11, uf); - // ga10 = ga10.lerp16_4(ga11, uf); - - lerp16_4(ymm5, ymm1, ymm0); - lerp16_4(ymm6, ymm2, ymm0); - - // ymm3 = rb00 - // ymm4 = ga00 - // ymm5 = rb10 - // ymm6 = ga10 - // ymm0, ymm1, ymm2 = free - // ymm7 = used - - // rb00 = rb00.lerp16_4(rb10, vf); - // ga00 = ga00.lerp16_4(ga10, vf); - - vmovdqa(ymm0, ptr[&m_local.temp.vf]); - - lerp16_4(ymm5, ymm3, ymm0); - lerp16_4(ymm6, ymm4, ymm0); - } - else - { - // GSVector8i addr00 = y0 + x0; - - vpaddd(ymm5, ymm2, ymm4); - - // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); - - ReadTexel(1, 1); - - // GSVector8i mask = GSVector8i::x00ff(); - - // c[0] = c00 & mask; - // c[1] = (c00 >> 8) & mask; - - vpsllw(ymm5, ymm6, 8); - vpsrlw(ymm5, 8); - vpsrlw(ymm6, 8); - } - - vmovdqa(ymm0, ptr[m_sel.lcm ? &m_local.gd->lod.f : &m_local.temp.lod.f]); - vpsrlw(ymm0, ymm0, 1); - - vmovdqa(ymm2, ptr[&m_local.temp.trb]); - vmovdqa(ymm3, ptr[&m_local.temp.tga]); - - lerp16(ymm5, ymm2, ymm0, 0); - lerp16(ymm6, ymm3, ymm0, 0); - } - - pop(ebp); -} - -void GSDrawScanlineCodeGenerator::WrapLOD(const Ymm& uv) -{ - // ymm5 = minuv - // ymm6 = maxuv - // ymm0, ymm1, ymm4 = free - - int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; - int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; - - int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; - - if(wms_clamp == wmt_clamp) - { - if(wms_clamp) - { - if(region) - { - vpmaxsw(uv, ymm5); - } - else - { - vpxor(ymm0, ymm0); - vpmaxsw(uv, ymm0); - } - - vpminsw(uv, ymm6); - } - else - { - vpand(uv, ymm5); - - if(region) - { - vpor(uv, ymm6); - } - } - } - else - { - vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv, ymm5); - - if(region) - { - vpor(ymm1, ymm6); - } - - // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv, ymm5); - vpminsw(uv, ymm6); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv, ymm1, ymm0); - } -} - -void GSDrawScanlineCodeGenerator::WrapLOD(const Ymm& uv0, const Ymm& uv1) -{ - // ymm5 = minuv - // ymm6 = maxuv - // ymm0, ymm1, ymm4 = free - - int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; - int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; - - int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; - - if(wms_clamp == wmt_clamp) - { - if(wms_clamp) - { - if(region) - { - vpmaxsw(uv0, ymm5); - vpmaxsw(uv1, ymm5); - } - else - { - vpxor(ymm0, ymm0); - vpmaxsw(uv0, ymm0); - vpmaxsw(uv1, ymm0); - } - - vpminsw(uv0, ymm6); - vpminsw(uv1, ymm6); - } - else - { - vpand(uv0, ymm5); - vpand(uv1, ymm5); - - if(region) - { - vpor(uv0, ymm6); - vpor(uv1, ymm6); - } - } - } - else - { - vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); - - // uv0 - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv0, ymm5); - - if(region) - { - vpor(ymm1, ymm6); - } - - // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv0, ymm5); - vpminsw(uv0, ymm6); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv0, ymm1, ymm0); - - // uv1 - - // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; - - vpand(ymm1, uv1, ymm5); - - if(region) - { - vpor(ymm1, ymm6); - } - - // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); - - vpmaxsw(uv1, ymm5); - vpminsw(uv1, ymm6); - - // clamp.blend8(repeat, m_local.gd->t.mask); - - vpblendvb(uv1, ymm1, ymm0); - } -} - -void GSDrawScanlineCodeGenerator::AlphaTFX() -{ - if(!m_sel.fb) - { - return; - } - - switch(m_sel.tfx) - { - case TFX_MODULATE: - - // GSVector8i ga = iip ? gaf : m_local.c.ga; - - vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); - - // gat = gat.modulate16<1>(ga).clamp8(); - - modulate16(ymm6, ymm4, 1); - - clamp16(ymm6, ymm3); - - // if(!tcc) gat = gat.mix16(ga.srl16(7)); - - if(!m_sel.tcc) - { - vpsrlw(ymm4, 7); - - mix16(ymm6, ymm4, ymm3); - } - - break; - - case TFX_DECAL: - - // if(!tcc) gat = gat.mix16(ga.srl16(7)); - - if(!m_sel.tcc) - { - // GSVector4i ga = iip ? gaf : m_local.c.ga; - - vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); - - vpsrlw(ymm4, 7); - - mix16(ymm6, ymm4, ymm3); - } - - break; - - case TFX_HIGHLIGHT: - - // GSVector4i ga = iip ? gaf : m_local.c.ga; - - vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); - vmovdqa(ymm2, ymm4); - - // gat = gat.mix16(!tcc ? ga.srl16(7) : gat.addus8(ga.srl16(7))); - - vpsrlw(ymm4, 7); - - if(m_sel.tcc) - { - vpaddusb(ymm4, ymm6); - } - - mix16(ymm6, ymm4, ymm3); - - break; - - case TFX_HIGHLIGHT2: - - // if(!tcc) gat = gat.mix16(ga.srl16(7)); - - if(!m_sel.tcc) - { - // GSVector4i ga = iip ? gaf : m_local.c.ga; - - vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); - vmovdqa(ymm2, ymm4); - - vpsrlw(ymm4, 7); - - mix16(ymm6, ymm4, ymm3); - } - - break; - - case TFX_NONE: - - // gat = iip ? ga.srl16(7) : ga; - - if(m_sel.iip) - { - vpsrlw(ymm6, 7); - } - - break; - } - - if(m_sel.aa1) - { - // gs_user figure 3-2: anti-aliasing after tfx, before tests, modifies alpha - - // FIXME: bios config screen cubes - - if(!m_sel.abe) - { - // a = cov - - if(m_sel.edge) - { - vmovdqa(ymm0, ptr[&m_local.temp.cov]); - } - else - { - vpcmpeqd(ymm0, ymm0); - vpsllw(ymm0, 15); - vpsrlw(ymm0, 8); - } - - mix16(ymm6, ymm0, ymm1); - } - else - { - // a = a == 0x80 ? cov : a - - vpcmpeqd(ymm0, ymm0); - vpsllw(ymm0, 15); - vpsrlw(ymm0, 8); - - if(m_sel.edge) - { - vmovdqa(ymm1, ptr[&m_local.temp.cov]); - } - else - { - vmovdqa(ymm1, ymm0); - } - - vpcmpeqw(ymm0, ymm6); - vpsrld(ymm0, 16); - vpslld(ymm0, 16); - - vpblendvb(ymm6, ymm1, ymm0); - } - } -} - -void GSDrawScanlineCodeGenerator::ReadMask() -{ - if(m_sel.fwrite) - { - vpbroadcastd(ymm3, ptr[&m_local.gd->fm]); - } - - if(m_sel.zwrite) - { - vpbroadcastd(ymm4, ptr[&m_local.gd->zm]); - } -} - -void GSDrawScanlineCodeGenerator::TestAlpha() -{ - switch(m_sel.afail) - { - case AFAIL_FB_ONLY: - if(!m_sel.zwrite) return; - break; - - case AFAIL_ZB_ONLY: - if(!m_sel.fwrite) return; - break; - - case AFAIL_RGB_ONLY: - if(!m_sel.zwrite && m_sel.fpsm == 1) return; - break; - } - - switch(m_sel.atst) - { - case ATST_NEVER: - // t = GSVector8i::xffffffff(); - vpcmpeqd(ymm1, ymm1); - break; - - case ATST_ALWAYS: - return; - - case ATST_LESS: - case ATST_LEQUAL: - // t = (ga >> 16) > m_local.gd->aref; - vpsrld(ymm1, ymm6, 16); - vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); - vpcmpgtd(ymm1, ymm0); - break; - - case ATST_EQUAL: - // t = (ga >> 16) != m_local.gd->aref; - vpsrld(ymm1, ymm6, 16); - vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); - vpcmpeqd(ymm1, ymm0); - vpcmpeqd(ymm0, ymm0); - vpxor(ymm1, ymm0); - break; - - case ATST_GEQUAL: - case ATST_GREATER: - // t = (ga >> 16) < m_local.gd->aref; - vpsrld(ymm0, ymm6, 16); - vbroadcasti128(ymm1, ptr[&m_local.gd->aref]); - vpcmpgtd(ymm1, ymm0); - break; - - case ATST_NOTEQUAL: - // t = (ga >> 16) == m_local.gd->aref; - vpsrld(ymm1, ymm6, 16); - vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); - vpcmpeqd(ymm1, ymm0); - break; - } - - switch(m_sel.afail) - { - case AFAIL_KEEP: - // test |= t; - vpor(ymm7, ymm1); - alltrue(); - break; - - case AFAIL_FB_ONLY: - // zm |= t; - vpor(ymm4, ymm1); - break; - - case AFAIL_ZB_ONLY: - // fm |= t; - vpor(ymm3, ymm1); - break; - - case AFAIL_RGB_ONLY: - // zm |= t; - vpor(ymm4, ymm1); - // fm |= t & GSVector8i::xff000000(); - vpsrld(ymm1, 24); - vpslld(ymm1, 24); - vpor(ymm3, ymm1); - break; - } -} - -void GSDrawScanlineCodeGenerator::ColorTFX() -{ - if(!m_sel.fwrite) - { - return; - } - - switch(m_sel.tfx) - { - case TFX_MODULATE: - - // GSVector8i rb = iip ? rbf : m_local.c.rb; - - // rbt = rbt.modulate16<1>(rb).clamp8(); - - modulate16(ymm5, ptr[m_sel.iip ? &m_local.temp.rb : &m_local.c.rb], 1); - - clamp16(ymm5, ymm1); - - break; - - case TFX_DECAL: - - break; - - case TFX_HIGHLIGHT: - case TFX_HIGHLIGHT2: - - if(m_sel.tfx == TFX_HIGHLIGHT2 && m_sel.tcc) - { - // GSVector8i ga = iip ? gaf : m_local.c.ga; - - vmovdqa(ymm2, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); - } - - // gat = gat.modulate16<1>(ga).add16(af).clamp8().mix16(gat); - - vmovdqa(ymm1, ymm6); - - modulate16(ymm6, ymm2, 1); - - vpshuflw(ymm2, ymm2, _MM_SHUFFLE(3, 3, 1, 1)); - vpshufhw(ymm2, ymm2, _MM_SHUFFLE(3, 3, 1, 1)); - vpsrlw(ymm2, 7); - - vpaddw(ymm6, ymm2); - - clamp16(ymm6, ymm0); - - mix16(ymm6, ymm1, ymm0); - - // GSVector8i rb = iip ? rbf : m_local.c.rb; - - // rbt = rbt.modulate16<1>(rb).add16(af).clamp8(); - - modulate16(ymm5, ptr[m_sel.iip ? &m_local.temp.rb : &m_local.c.rb], 1); - - vpaddw(ymm5, ymm2); - - clamp16(ymm5, ymm0); - - break; - - case TFX_NONE: - - // rbt = iip ? rb.srl16(7) : rb; - - if(m_sel.iip) - { - vpsrlw(ymm5, 7); - } - - break; - } -} - -void GSDrawScanlineCodeGenerator::Fog() -{ - if(!m_sel.fwrite || !m_sel.fge) - { - return; - } - - // rb = m_local.gd->frb.lerp16<0>(rb, f); - // ga = m_local.gd->fga.lerp16<0>(ga, f).mix16(ga); - - if(m_sel.prim != GS_SPRITE_CLASS) - { - vmovdqa(ymm0, ptr[&m_local.temp.f]); - } - else - { - vpbroadcastw(ymm0, ptr[&m_local.p.f]); - } - - vmovdqa(ymm1, ymm6); - - vpbroadcastd(ymm2, ptr[&m_local.gd->frb]); - lerp16(ymm5, ymm2, ymm0, 0); - - vpbroadcastd(ymm2, ptr[&m_local.gd->fga]); - lerp16(ymm6, ymm2, ymm0, 0); - mix16(ymm6, ymm1, ymm0); -} - -void GSDrawScanlineCodeGenerator::ReadFrame() -{ - if(!m_sel.fb) - { - return; - } - - // int fa = fza_base.x + fza_offset->x; - - mov(ebx, ptr[esi]); - add(ebx, ptr[edi]); - - if(!m_sel.rfb) - { - return; - } - - ReadPixel(ymm2, ymm0, ebx); -} - -void GSDrawScanlineCodeGenerator::TestDestAlpha() -{ - if(!m_sel.date || m_sel.fpsm != 0 && m_sel.fpsm != 2) - { - return; - } - - // test |= ((fd [<< 16]) ^ m_local.gd->datm).sra32(31); - - if(m_sel.datm) - { - if(m_sel.fpsm == 2) - { - vpxor(ymm0, ymm0); - vpsrld(ymm1, ymm2, 15); - vpcmpeqd(ymm1, ymm0); - } - else - { - vpcmpeqd(ymm0, ymm0); - vpxor(ymm1, ymm2, ymm0); - vpsrad(ymm1, 31); - } - } - else - { - if(m_sel.fpsm == 2) - { - vpslld(ymm1, ymm2, 16); - vpsrad(ymm1, 31); - } - else - { - vpsrad(ymm1, ymm2, 31); - } - } - - vpor(ymm7, ymm1); - - alltrue(); -} - -void GSDrawScanlineCodeGenerator::WriteMask() -{ - if(m_sel.notest) - { - return; - } - - // fm |= test; - // zm |= test; - - if(m_sel.fwrite) - { - vpor(ymm3, ymm7); - } - - if(m_sel.zwrite) - { - vpor(ymm4, ymm7); - } - - // int fzm = ~(fm == GSVector8i::xffffffff()).ps32(zm == GSVector8i::xffffffff()).mask(); - - vpcmpeqd(ymm1, ymm1); - - if(m_sel.fwrite && m_sel.zwrite) - { - vpcmpeqd(ymm0, ymm1, ymm4); - vpcmpeqd(ymm1, ymm3); - vpackssdw(ymm1, ymm0); - } - else if(m_sel.fwrite) - { - vpcmpeqd(ymm1, ymm3); - vpackssdw(ymm1, ymm1); - } - else if(m_sel.zwrite) - { - vpcmpeqd(ymm1, ymm4); - vpackssdw(ymm1, ymm1); - } - - vpmovmskb(edx, ymm1); - - not(edx); -} - -void GSDrawScanlineCodeGenerator::WriteZBuf() -{ - if(!m_sel.zwrite) - { - return; - } - - if(m_sel.prim != GS_SPRITE_CLASS) - { - vmovdqa(ymm1, ptr[&m_local.temp.zs]); - } - else - { - vpbroadcastd(ymm1, ptr[&m_local.p.z]); - } - - if(m_sel.ztest && m_sel.zpsm < 2) - { - // zs = zs.blend8(zd, zm); - - vpblendvb(ymm1, ptr[&m_local.temp.zd], ymm4); - } - - bool fast = m_sel.ztest ? m_sel.zpsm < 2 : m_sel.zpsm == 0 && m_sel.notest; - - WritePixel(ymm1, ymm0, ebp, edx, fast, m_sel.zpsm, 1); -} - -void GSDrawScanlineCodeGenerator::AlphaBlend() -{ - if(!m_sel.fwrite) - { - return; - } - - if(m_sel.abe == 0 && m_sel.aa1 == 0) - { - return; - } - - if((m_sel.aba != m_sel.abb) && (m_sel.aba == 1 || m_sel.abb == 1 || m_sel.abc == 1) || m_sel.abd == 1) - { - switch(m_sel.fpsm) - { - case 0: - case 1: - - // c[2] = fd & mask; - // c[3] = (fd >> 8) & mask; - - vpsllw(ymm0, ymm2, 8); - vpsrlw(ymm0, 8); - vpsrlw(ymm1, ymm2, 8); - - break; - - case 2: - - // c[2] = ((fd & 0x7c00) << 9) | ((fd & 0x001f) << 3); - // c[3] = ((fd & 0x8000) << 8) | ((fd & 0x03e0) >> 2); - - vpcmpeqd(ymm7, ymm7); - - vpsrld(ymm7, 27); // 0x0000001f - vpand(ymm0, ymm2, ymm7); - vpslld(ymm0, 3); - - vpslld(ymm7, 10); // 0x00007c00 - vpand(ymm4, ymm2, ymm7); - vpslld(ymm4, 9); - - vpor(ymm0, ymm4); - - vpsrld(ymm7, 5); // 0x000003e0 - vpand(ymm1, ymm2, ymm7); - vpsrld(ymm1, 2); - - vpsllw(ymm7, 10); // 0x00008000 - vpand(ymm4, ymm2, ymm7); - vpslld(ymm4, 8); - - vpor(ymm1, ymm4); - - break; - } - } - - // ymm5, ymm6 = src rb, ga - // ymm0, ymm1 = dst rb, ga - // ymm2, ymm3 = used - // ymm4, ymm7 = free - - if(m_sel.pabe || (m_sel.aba != m_sel.abb) && (m_sel.abb == 0 || m_sel.abd == 0)) - { - vmovdqa(ymm4, ymm5); - } - - if(m_sel.aba != m_sel.abb) - { - // rb = c[aba * 2 + 0]; - - switch(m_sel.aba) - { - case 0: break; - case 1: vmovdqa(ymm5, ymm0); break; - case 2: vpxor(ymm5, ymm5); break; - } - - // rb = rb.sub16(c[abb * 2 + 0]); - - switch(m_sel.abb) - { - case 0: vpsubw(ymm5, ymm4); break; - case 1: vpsubw(ymm5, ymm0); break; - case 2: break; - } - - if(!(m_sel.fpsm == 1 && m_sel.abc == 1)) - { - // GSVector4i a = abc < 2 ? c[abc * 2 + 1].yywwlh().sll16(7) : m_local.gd->afix; - - switch(m_sel.abc) - { - case 0: - case 1: - vpshuflw(ymm7, m_sel.abc ? ymm1 : ymm6, _MM_SHUFFLE(3, 3, 1, 1)); - vpshufhw(ymm7, ymm7, _MM_SHUFFLE(3, 3, 1, 1)); - vpsllw(ymm7, 7); - break; - case 2: - vpbroadcastw(ymm7, ptr[&m_local.gd->afix]); - break; - } - - // rb = rb.modulate16<1>(a); - - modulate16(ymm5, ymm7, 1); - } - - // rb = rb.add16(c[abd * 2 + 0]); - - switch(m_sel.abd) - { - case 0: vpaddw(ymm5, ymm4); break; - case 1: vpaddw(ymm5, ymm0); break; - case 2: break; - } - } - else - { - // rb = c[abd * 2 + 0]; - - switch(m_sel.abd) - { - case 0: break; - case 1: vmovdqa(ymm5, ymm0); break; - case 2: vpxor(ymm5, ymm5); break; - } - } - - if(m_sel.pabe) - { - // mask = (c[1] << 8).sra32(31); - - vpslld(ymm0, ymm6, 8); - vpsrad(ymm0, 31); - - // rb = c[0].blend8(rb, mask); - - vpblendvb(ymm5, ymm4, ymm5, ymm0); - } - - // ymm6 = src ga - // ymm1 = dst ga - // ymm5 = rb - // ymm7 = a - // ymm2, ymm3 = used - // ymm0, ymm4 = free - - vmovdqa(ymm4, ymm6); - - if(m_sel.aba != m_sel.abb) - { - // ga = c[aba * 2 + 1]; - - switch(m_sel.aba) - { - case 0: break; - case 1: vmovdqa(ymm6, ymm1); break; - case 2: vpxor(ymm6, ymm6); break; - } - - // ga = ga.sub16(c[abeb * 2 + 1]); - - switch(m_sel.abb) - { - case 0: vpsubw(ymm6, ymm4); break; - case 1: vpsubw(ymm6, ymm1); break; - case 2: break; - } - - if(!(m_sel.fpsm == 1 && m_sel.abc == 1)) - { - // ga = ga.modulate16<1>(a); - - modulate16(ymm6, ymm7, 1); - } - - // ga = ga.add16(c[abd * 2 + 1]); - - switch(m_sel.abd) - { - case 0: vpaddw(ymm6, ymm4); break; - case 1: vpaddw(ymm6, ymm1); break; - case 2: break; - } - } - else - { - // ga = c[abd * 2 + 1]; - - switch(m_sel.abd) - { - case 0: break; - case 1: vmovdqa(ymm6, ymm1); break; - case 2: vpxor(ymm6, ymm6); break; - } - } - - // ymm4 = src ga - // ymm5 = rb - // ymm6 = ga - // ymm2, ymm3 = used - // ymm0, ymm1, ymm7 = free - - if(m_sel.pabe) - { - vpsrld(ymm0, 16); // zero out high words to select the source alpha in blend (so it also does mix16) - - // ga = c[1].blend8(ga, mask).mix16(c[1]); - - vpblendvb(ymm6, ymm4, ymm6, ymm0); - } - else - { - if(m_sel.fpsm != 1) // TODO: fm == 0xffxxxxxx - { - mix16(ymm6, ymm4, ymm7); - } - } -} - -void GSDrawScanlineCodeGenerator::WriteFrame() -{ - if(!m_sel.fwrite) - { - return; - } - - if(m_sel.fpsm == 2 && m_sel.dthe) - { - mov(eax, ptr[esp + _top]); - and(eax, 3); - shl(eax, 5); - mov(ebp, ptr[&m_local.gd->dimx]); - vbroadcasti128(ymm7, ptr[ebp + eax + sizeof(GSVector4i) * 0]); - vpaddw(ymm5, ymm7); - vbroadcasti128(ymm7, ptr[ebp + eax + sizeof(GSVector4i) * 1]); - vpaddw(ymm6, ymm7); - } - - if(m_sel.colclamp == 0) - { - // c[0] &= 0x00ff00ff; - // c[1] &= 0x00ff00ff; - - vpcmpeqd(ymm7, ymm7); - vpsrlw(ymm7, 8); - vpand(ymm5, ymm7); - vpand(ymm6, ymm7); - } - - // GSVector8i fs = c[0].upl16(c[1]).pu16(c[0].uph16(c[1])); - - vpunpckhwd(ymm7, ymm5, ymm6); - vpunpcklwd(ymm5, ymm6); - vpackuswb(ymm5, ymm7); - - if(m_sel.fba && m_sel.fpsm != 1) - { - // fs |= 0x80000000; - - vpcmpeqd(ymm7, ymm7); - vpslld(ymm7, 31); - vpor(ymm5, ymm7); - } - - if(m_sel.fpsm == 2) - { - // GSVector8i rb = fs & 0x00f800f8; - // GSVector8i ga = fs & 0x8000f800; - - mov(eax, 0x00f800f8); - vmovd(xmm6, eax); - vpbroadcastd(ymm6, xmm6); - - mov(eax, 0x8000f800); - vmovd(xmm7, eax); - vpbroadcastd(ymm7, xmm7); - - vpand(ymm4, ymm5, ymm6); - vpand(ymm5, ymm7); - - // fs = (ga >> 16) | (rb >> 9) | (ga >> 6) | (rb >> 3); - - vpsrld(ymm6, ymm4, 9); - vpsrld(ymm4, 3); - vpsrld(ymm7, ymm5, 16); - vpsrld(ymm5, 6); - - vpor(ymm5, ymm4); - vpor(ymm7, ymm6); - vpor(ymm5, ymm7); - } - - if(m_sel.rfb) - { - // fs = fs.blend(fd, fm); - - blend(ymm5, ymm2, ymm3); // TODO: could be skipped in certain cases, depending on fpsm and fm - } - - bool fast = m_sel.rfb ? m_sel.fpsm < 2 : m_sel.fpsm == 0 && m_sel.notest; - - WritePixel(ymm5, ymm0, ebx, edx, fast, m_sel.fpsm, 0); -} - -void GSDrawScanlineCodeGenerator::ReadPixel(const Ymm& dst, const Ymm& temp, const Reg32& addr) -{ - vmovq(Xmm(dst.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm]); - vmovhps(Xmm(dst.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2]); - vmovq(Xmm(temp.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2]); - vmovhps(Xmm(temp.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2]); - vinserti128(dst, dst, temp, 1); -/* - vmovdqu(dst, ptr[addr * 2 + (size_t)m_local.gd->vm]); - vmovdqu(temp, ptr[addr * 2 + (size_t)m_local.gd->vm + 16 * 2]); - vpunpcklqdq(dst, dst, temp); - vpermq(dst, dst, _MM_SHUFFLE(3, 1, 2, 0)); -*/ -} - -void GSDrawScanlineCodeGenerator::WritePixel(const Ymm& src, const Ymm& temp, const Reg32& addr, const Reg32& mask, bool fast, int psm, int fz) -{ - Xmm src1 = Xmm(src.getIdx()); - Xmm src2 = Xmm(temp.getIdx()); - - vextracti128(src2, src, 1); - - if(m_sel.notest) - { - if(fast) - { - vmovq(qword[addr * 2 + (size_t)m_local.gd->vm], src1); - vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2], src1); - vmovq(qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2], src2); - vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2], src2); - } - else - { - WritePixel(src1, addr, 0, 0, psm); - WritePixel(src1, addr, 1, 1, psm); - WritePixel(src1, addr, 2, 2, psm); - WritePixel(src1, addr, 3, 3, psm); - WritePixel(src2, addr, 4, 0, psm); - WritePixel(src2, addr, 5, 1, psm); - WritePixel(src2, addr, 6, 2, psm); - WritePixel(src2, addr, 7, 3, psm); - } - } - else - { - // cascade tests? - - if(fast) - { - test(mask, 0x0000000f << (fz * 8)); - je("@f"); - vmovq(qword[addr * 2 + (size_t)m_local.gd->vm], src1); - L("@@"); - - test(mask, 0x000000f0 << (fz * 8)); - je("@f"); - vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2], src1); - L("@@"); - - test(mask, 0x000f0000 << (fz * 8)); - je("@f"); - vmovq(qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2], src2); - L("@@"); - - test(mask, 0x00f00000 << (fz * 8)); - je("@f"); - vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2], src2); - L("@@"); - - // vmaskmovps? - } - else - { - test(mask, 0x00000003 << (fz * 8)); - je("@f"); - WritePixel(src1, addr, 0, 0, psm); - L("@@"); - - test(mask, 0x0000000c << (fz * 8)); - je("@f"); - WritePixel(src1, addr, 1, 1, psm); - L("@@"); - - test(mask, 0x00000030 << (fz * 8)); - je("@f"); - WritePixel(src1, addr, 2, 2, psm); - L("@@"); - - test(mask, 0x000000c0 << (fz * 8)); - je("@f"); - WritePixel(src1, addr, 3, 3, psm); - L("@@"); - - test(mask, 0x00030000 << (fz * 8)); - je("@f"); - WritePixel(src2, addr, 4, 0, psm); - L("@@"); - - test(mask, 0x000c0000 << (fz * 8)); - je("@f"); - WritePixel(src2, addr, 5, 1, psm); - L("@@"); - - test(mask, 0x00300000 << (fz * 8)); - je("@f"); - WritePixel(src2, addr, 6, 2, psm); - L("@@"); - - test(mask, 0x00c00000 << (fz * 8)); - je("@f"); - WritePixel(src2, addr, 7, 3, psm); - L("@@"); - } - } -} - -static const int s_offsets[] = {0, 2, 8, 10, 16, 18, 24, 26}; - -void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg32& addr, uint8 i, uint8 j, int psm) -{ - Address dst = ptr[addr * 2 + (size_t)m_local.gd->vm + s_offsets[i] * 2]; - - switch(psm) - { - case 0: - if(j == 0) vmovd(dst, src); - else vpextrd(dst, src, j); - break; - case 1: - if(j == 0) vmovd(eax, src); - else vpextrd(eax, src, j); - xor(eax, dst); - and(eax, 0xffffff); - xor(dst, eax); - break; - case 2: - if(j == 0) vmovd(eax, src); - else vpextrw(eax, src, j * 2); - mov(dst, ax); - break; - } -} - -void GSDrawScanlineCodeGenerator::ReadTexel(int pixels, int mip_offset) -{ - // in - // ymm5 = addr00 - // ymm2 = addr01 - // ymm0 = addr10 - // ymm3 = addr11 - // ebx = m_local.tex[0] (!m_sel.mmin) - // ebp = m_local.tex (m_sel.mmin) - // edx = m_local.clut (m_sel.tlu) - - // out - // ymm6 = c00 - // ymm4 = c01 - // ymm1 = c10 - // ymm5 = c11 - - ASSERT(pixels == 1 || pixels == 4); - - mip_offset *= sizeof(void*); - - const GSVector8i* lod_i = m_sel.lcm ? &m_local.gd->lod.i : &m_local.temp.lod.i; - - if(m_sel.mmin && !m_sel.lcm) - { - const int r[] = {5, 6, 2, 4, 0, 1, 3, 5}; - const int t[] = {1, 4, 5, 1, 2, 5, 0, 2}; - - for(int i = 0; i < pixels; i++) - { - Ymm src = Ymm(r[i * 2 + 0]); - Ymm dst = Ymm(r[i * 2 + 1]); - Ymm t1 = Ymm(t[i * 2 + 0]); - Ymm t2 = Ymm(t[i * 2 + 1]); - - vextracti128(Xmm(t1.getIdx()), src, 1); - - for(uint8 j = 0; j < 4; j++) - { - mov(ebx, ptr[&lod_i->u32[j + 0]]); - mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); - - ReadTexel(dst, src, j); - - mov(ebx, ptr[&lod_i->u32[j + 4]]); - mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); - - ReadTexel(t2, t1, j); - } - - vinserti128(dst, dst, t2, 1); - } - } - else - { - const int r[] = {5, 6, 2, 4, 0, 1, 3, 5}; - const int t[] = {1, 4, 5, 1, 2, 5, 0, 2}; - - if(m_sel.mmin && m_sel.lcm) - { - mov(ebx, ptr[&lod_i->u32[0]]); - mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); - } - - for(int i = 0; i < pixels; i++) - { - Ymm src = Ymm(r[i * 2 + 0]); - Ymm dst = Ymm(r[i * 2 + 1]); - Ymm t1 = Ymm(t[i * 2 + 0]); - Ymm t2 = Ymm(t[i * 2 + 1]); - - if(!m_sel.tlu) - { - vpcmpeqd(t1, t1); - vpgatherdd(dst, ptr[ebx + src * 4], t1); - } - else - { - vextracti128(Xmm(t1.getIdx()), src, 1); - - for(uint8 j = 0; j < 4; j++) - { - ReadTexel(dst, src, j); - ReadTexel(t2, t1, j); - } - - vinserti128(dst, dst, t2, 1); - /* - vpcmpeqd(t1, t1); - vpgatherdd(t2, ptr[ebx + src * 1], t1); // either this 1x scale, or the latency of two dependendent gathers are too slow - vpslld(t2, 24); - vpsrld(t2, 24); - vpcmpeqd(t1, t1); - vpgatherdd(dst, ptr[edx + t2 * 4], t1); - */ - } - } - } -} - -void GSDrawScanlineCodeGenerator::ReadTexel(const Ymm& dst, const Ymm& addr, uint8 i) -{ - ASSERT(i < 4); - - const Address& src = m_sel.tlu ? ptr[edx + eax * 4] : ptr[ebx + eax * 4]; - - if(i == 0) vmovd(eax, Xmm(addr.getIdx())); - else vpextrd(eax, Xmm(addr.getIdx()), i); - - if(m_sel.tlu) movzx(eax, byte[ebx + eax]); - - if(i == 0) vmovd(Xmm(dst.getIdx()), src); - else vpinsrd(Xmm(dst.getIdx()), src, i); -} - - +/* + * Copyright (C) 2007-2009 Gabest + * http://www.gabest.org + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "stdafx.h" +#include "GSDrawScanlineCodeGenerator.h" +#include "GSVertexSW.h" + +#if _M_SSE >= 0x501 && !(defined(_M_AMD64) || defined(_WIN64)) + +static const int _args = 16; +static const int _top = _args + 4; +static const int _v = _args + 8; + +void GSDrawScanlineCodeGenerator::Generate() +{ +//ret(8); + + push(ebx); + push(esi); + push(edi); + push(ebp); + + //db(0xcc); + + Init(); + + if(!m_sel.edge) + { + align(16); + } + +L("loop"); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ymm0 = z/zi + // ymm2 = s/u (tme) + // ymm3 = t/v (tme) + // ymm4 = q (tme) + // ymm5 = rb (!tme) + // ymm6 = ga (!tme) + // ymm7 = test + + bool tme = m_sel.tfx != TFX_NONE; + + TestZ(tme ? ymm5 : ymm2, tme ? ymm6 : ymm3); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // - ymm0 + // ymm2 = s/u (tme) + // ymm3 = t/v (tme) + // ymm4 = q (tme) + // ymm5 = rb (!tme) + // ymm6 = ga (!tme) + // ymm7 = test + + if(m_sel.mmin) + { + SampleTextureLOD(); + } + else + { + SampleTexture(); + } + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // - ymm2 + // - ymm3 + // - ymm4 + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + AlphaTFX(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + ReadMask(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + TestAlpha(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = gaf (TFX_HIGHLIGHT || TFX_HIGHLIGHT2 && !tcc) + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + ColorTFX(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + Fog(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + ReadFrame(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = fd + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + TestDestAlpha(); + + // ecx = steps + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = fd + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + // ymm7 = test + + WriteMask(); + + // ebx = fa + // ecx = steps + // edx = fzm + // esi = fzbr + // edi = fzbc + // ebp = za + // ymm2 = fd + // ymm3 = fm + // ymm4 = zm + // ymm5 = rb + // ymm6 = ga + + WriteZBuf(); + + // ebx = fa + // ecx = steps + // edx = fzm + // esi = fzbr + // edi = fzbc + // - ebp + // ymm2 = fd + // ymm3 = fm + // - ymm4 + // ymm5 = rb + // ymm6 = ga + + AlphaBlend(); + + // ebx = fa + // ecx = steps + // edx = fzm + // esi = fzbr + // edi = fzbc + // ymm2 = fd + // ymm3 = fm + // ymm5 = rb + // ymm6 = ga + + WriteFrame(); + +L("step"); + + // if(steps <= 0) break; + + if(!m_sel.edge) + { + test(ecx, ecx); + + jle("exit", T_NEAR); + + Step(); + + jmp("loop", T_NEAR); + } + +L("exit"); + + pop(ebp); + pop(edi); + pop(esi); + pop(ebx); + + ret(8); +} + +void GSDrawScanlineCodeGenerator::Init() +{ + if(!m_sel.notest) + { + // int skip = left & 7; + + mov(ebx, edx); + and(edx, 7); + + // int steps = pixels + skip - 8; + + lea(ecx, ptr[ecx + edx - 8]); + + // left -= skip; + + sub(ebx, edx); + + // GSVector4i test = m_test[skip] | m_test[15 + (steps & (steps >> 31))]; + + mov(eax, ecx); + sar(eax, 31); + and(eax, ecx); + + vpmovsxbd(ymm7, ptr[edx * 8 + (size_t)&m_test[0]]); + vpmovsxbd(ymm0, ptr[eax * 8 + (size_t)&m_test[15]]); + vpor(ymm7, ymm0); + + shl(edx, 5); + } + else + { + mov(ebx, edx); // left + xor(edx, edx); // skip + lea(ecx, ptr[ecx - 8]); // steps + } + + // GSVector2i* fza_base = &m_local.gd->fzbr[top]; + + mov(esi, ptr[esp + _top]); + lea(esi, ptr[esi * 8]); + add(esi, ptr[&m_local.gd->fzbr]); + + // GSVector2i* fza_offset = &m_local.gd->fzbc[left >> 2]; + + lea(edi, ptr[ebx * 2]); + add(edi, ptr[&m_local.gd->fzbc]); + + if(m_sel.prim != GS_SPRITE_CLASS && (m_sel.fwrite && m_sel.fge || m_sel.zb) || m_sel.fb && (m_sel.edge || m_sel.tfx != TFX_NONE || m_sel.iip)) + { + // edx = &m_local.d[skip] + + lea(edx, ptr[edx * 8 + (size_t)m_local.d]); + + // ebx = &v + + mov(ebx, ptr[esp + _v]); + } + + if(m_sel.prim != GS_SPRITE_CLASS) + { + if(m_sel.fwrite && m_sel.fge || m_sel.zb) + { + vbroadcastf128(ymm0, ptr[ebx + offsetof(GSVertexSW, p)]); // v.p + + if(m_sel.fwrite && m_sel.fge) + { + // f = GSVector8i(vp).zzzzh().zzzz().add16(m_local.d[skip].f); + + vcvttps2dq(ymm1, ymm0); + vpshufhw(ymm1, ymm1, _MM_SHUFFLE(2, 2, 2, 2)); + vpshufd(ymm1, ymm1, _MM_SHUFFLE(2, 2, 2, 2)); + vpaddw(ymm1, ptr[edx + offsetof(GSScanlineLocalData::skip, f)]); + + vmovdqa(ptr[&m_local.temp.f], ymm1); + } + + if(m_sel.zb) + { + // z = vp.zzzz() + m_local.d[skip].z; + + vshufps(ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); + vmovaps(ptr[&m_local.temp.z], ymm0); + vmovaps(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, z)]); + vmovaps(ptr[&m_local.temp.zo], ymm2); + vaddps(ymm0, ymm2); + } + } + } + else + { + if(m_sel.ztest) + { + vpbroadcastd(ymm0, ptr[&m_local.p.z]); + } + } + + if(m_sel.fb) + { + if(m_sel.edge || m_sel.tfx != TFX_NONE) + { + vbroadcastf128(ymm4, ptr[ebx + offsetof(GSVertexSW, t)]); // v.t + } + + if(m_sel.edge) + { + // m_local.temp.cov = GSVector4i::cast(v.t).zzzzh().wwww().srl16(9); + + vpshufhw(ymm3, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); + vpshufd(ymm3, ymm3, _MM_SHUFFLE(3, 3, 3, 3)); + vpsrlw(ymm3, 9); + + vmovdqa(ptr[&m_local.temp.cov], ymm3); + } + + if(m_sel.tfx != TFX_NONE) + { + if(m_sel.fst) + { + // GSVector4i vti(vt); + + vcvttps2dq(ymm6, ymm4); + + // s = vti.xxxx() + m_local.d[skip].s; + // t = vti.yyyy(); if(!sprite) t += m_local.d[skip].t; + + vpshufd(ymm2, ymm6, _MM_SHUFFLE(0, 0, 0, 0)); + vpshufd(ymm3, ymm6, _MM_SHUFFLE(1, 1, 1, 1)); + + vpaddd(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, s)]); + + if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) + { + vpaddd(ymm3, ptr[edx + offsetof(GSScanlineLocalData::skip, t)]); + } + else + { + if(m_sel.ltf) + { + vpshuflw(ymm6, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm6, ymm6, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm6, 12); + vmovdqa(ptr[&m_local.temp.vf], ymm6); + } + } + + vmovdqa(ptr[&m_local.temp.s], ymm2); + vmovdqa(ptr[&m_local.temp.t], ymm3); + } + else + { + // s = vt.xxxx() + m_local.d[skip].s; + // t = vt.yyyy() + m_local.d[skip].t; + // q = vt.zzzz() + m_local.d[skip].q; + + vshufps(ymm2, ymm4, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); + vshufps(ymm3, ymm4, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); + vshufps(ymm4, ymm4, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); + + vaddps(ymm2, ptr[edx + offsetof(GSScanlineLocalData::skip, s)]); + vaddps(ymm3, ptr[edx + offsetof(GSScanlineLocalData::skip, t)]); + vaddps(ymm4, ptr[edx + offsetof(GSScanlineLocalData::skip, q)]); + + vmovaps(ptr[&m_local.temp.s], ymm2); + vmovaps(ptr[&m_local.temp.t], ymm3); + vmovaps(ptr[&m_local.temp.q], ymm4); + } + } + + if(!(m_sel.tfx == TFX_DECAL && m_sel.tcc)) + { + if(m_sel.iip) + { + // GSVector4i vc = GSVector4i(v.c); + + vbroadcastf128(ymm6, ptr[ebx + offsetof(GSVertexSW, c)]); // v.c + vcvttps2dq(ymm6, ymm6); + + // vc = vc.upl16(vc.zwxy()); + + vpshufd(ymm5, ymm6, _MM_SHUFFLE(1, 0, 3, 2)); + vpunpcklwd(ymm6, ymm5); + + // rb = vc.xxxx().add16(m_local.d[skip].rb); + // ga = vc.zzzz().add16(m_local.d[skip].ga); + + vpshufd(ymm5, ymm6, _MM_SHUFFLE(0, 0, 0, 0)); + vpshufd(ymm6, ymm6, _MM_SHUFFLE(2, 2, 2, 2)); + + vpaddw(ymm5, ptr[edx + offsetof(GSScanlineLocalData::skip, rb)]); + vpaddw(ymm6, ptr[edx + offsetof(GSScanlineLocalData::skip, ga)]); + + vmovdqa(ptr[&m_local.temp.rb], ymm5); + vmovdqa(ptr[&m_local.temp.ga], ymm6); + } + else + { + if(m_sel.tfx == TFX_NONE) + { + vmovdqa(ymm5, ptr[&m_local.c.rb]); + vmovdqa(ymm6, ptr[&m_local.c.ga]); + } + } + } + } +} + +void GSDrawScanlineCodeGenerator::Step() +{ + // steps -= 8; + + sub(ecx, 8); + + // fza_offset += 2; + + add(edi, 16); + + if(m_sel.prim != GS_SPRITE_CLASS) + { + // zo += GSVector8::broadcast32(&m_local.d8.p.z); + + if(m_sel.zb) + { + vbroadcastss(ymm0, ptr[&m_local.d8.p.z]); + vaddps(ymm0, ptr[&m_local.temp.zo]); + vmovaps(ptr[&m_local.temp.zo], ymm0); + vaddps(ymm0, ptr[&m_local.temp.z]); + } + + // f = f.add16(GSVector8i::broadcast16(&m_local.d8.p.f)); + + if(m_sel.fwrite && m_sel.fge) + { + vpbroadcastw(ymm1, ptr[&m_local.d8.p.f]); + vpaddw(ymm1, ptr[&m_local.temp.f]); + vmovdqa(ptr[&m_local.temp.f], ymm1); + } + } + else + { + if(m_sel.ztest) + { + vpbroadcastd(ymm0, ptr[&m_local.p.z]); + } + } + + if(m_sel.fb) + { + if(m_sel.tfx != TFX_NONE) + { + if(m_sel.fst) + { + // GSVector8i stq = GSVector8i::cast(GSVector8(m_local.d8.stq)); + + vbroadcasti128(ymm4, ptr[&m_local.d8.stq]); + + // s = GSVector8::cast(GSVector8i::cast(s) + stq.xxxx()); + + vpshufd(ymm2, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); + vpaddd(ymm2, ptr[&m_local.temp.s]); + vmovdqa(ptr[&m_local.temp.s], ymm2); + + if(m_sel.prim != GS_SPRITE_CLASS || m_sel.mmin) + { + // t = GSVector8::cast(GSVector8i::cast(t) + stq.yyyy()); + + vpshufd(ymm3, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); + vpaddd(ymm3, ptr[&m_local.temp.t]); + vmovdqa(ptr[&m_local.temp.t], ymm3); + } + else + { + vmovdqa(ymm3, ptr[&m_local.temp.t]); + } + } + else + { + // GSVector8 stq(m_local.d8.stq); + + // s += stq.xxxx(); + // t += stq.yyyy(); + // q += stq.zzzz(); + + vbroadcastf128(ymm4, ptr[&m_local.d8.stq]); + + vshufps(ymm2, ymm4, ymm4, _MM_SHUFFLE(0, 0, 0, 0)); + vshufps(ymm3, ymm4, ymm4, _MM_SHUFFLE(1, 1, 1, 1)); + vshufps(ymm4, ymm4, ymm4, _MM_SHUFFLE(2, 2, 2, 2)); + + vaddps(ymm2, ptr[&m_local.temp.s]); + vaddps(ymm3, ptr[&m_local.temp.t]); + vaddps(ymm4, ptr[&m_local.temp.q]); + + vmovaps(ptr[&m_local.temp.s], ymm2); + vmovaps(ptr[&m_local.temp.t], ymm3); + vmovaps(ptr[&m_local.temp.q], ymm4); + } + } + + if(!(m_sel.tfx == TFX_DECAL && m_sel.tcc)) + { + if(m_sel.iip) + { + // GSVector8i c = GSVector8i::broadcast64(&m_local.d8.c); + + vpbroadcastq(ymm7, ptr[&m_local.d8.c]); + + // rb = rb.add16(c.xxxx()).max_i16(GSVector8i::zero()); + // ga = ga.add16(c.yyyy()).max_i16(GSVector8i::zero()); + + vpshufd(ymm5, ymm7, _MM_SHUFFLE(0, 0, 0, 0)); + vpshufd(ymm6, ymm7, _MM_SHUFFLE(1, 1, 1, 1)); + + vpaddw(ymm5, ptr[&m_local.temp.rb]); + vpaddw(ymm6, ptr[&m_local.temp.ga]); + + // FIXME: color may underflow and roll over at the end of the line, if decreasing + + vpxor(ymm7, ymm7); + vpmaxsw(ymm5, ymm7); + vpmaxsw(ymm6, ymm7); + + vmovdqa(ptr[&m_local.temp.rb], ymm5); + vmovdqa(ptr[&m_local.temp.ga], ymm6); + } + else + { + if(m_sel.tfx == TFX_NONE) + { + vmovdqa(ymm5, ptr[&m_local.c.rb]); + vmovdqa(ymm6, ptr[&m_local.c.ga]); + } + } + } + } + + if(!m_sel.notest) + { + // test = m_test[15 + (steps & (steps >> 31))]; + + mov(edx, ecx); + sar(edx, 31); + and(edx, ecx); + + vpmovsxbd(ymm7, ptr[edx * 8 + (size_t)&m_test[15]]); + } +} + +void GSDrawScanlineCodeGenerator::TestZ(const Ymm& temp1, const Ymm& temp2) +{ + if(!m_sel.zb) + { + return; + } + + // int za = fza_base.y + fza_offset->y; + + mov(ebp, ptr[esi + 4]); + add(ebp, ptr[edi + 4]); + + // GSVector8i zs = zi; + + if(m_sel.prim != GS_SPRITE_CLASS) + { + if(m_sel.zoverflow) + { + // zs = (GSVector8i(z * 0.5f) << 1) | (GSVector8i(z) & GSVector8i::x00000001()); + + vbroadcastss(temp1, ptr[&GSVector8::m_half]); + vmulps(temp1, ymm0); + vcvttps2dq(temp1, temp1); + vpslld(temp1, 1); + + vcvttps2dq(ymm0, ymm0); + vpcmpeqd(temp2, temp2); + vpsrld(temp2, 31); + vpand(ymm0, temp2); + + vpor(ymm0, temp1); + } + else + { + // zs = GSVector8i(z); + + vcvttps2dq(ymm0, ymm0); + } + + if(m_sel.zwrite) + { + vmovdqa(ptr[&m_local.temp.zs], ymm0); + } + } + + if(m_sel.ztest) + { + ReadPixel(ymm1, temp1, ebp); + + if(m_sel.zwrite && m_sel.zpsm < 2) + { + vmovdqa(ptr[&m_local.temp.zd], ymm1); + } + + // zd &= 0xffffffff >> m_sel.zpsm * 8; + + if(m_sel.zpsm) + { + vpslld(ymm1, (uint8)(m_sel.zpsm * 8)); + vpsrld(ymm1, (uint8)(m_sel.zpsm * 8)); + } + + if(m_sel.zoverflow || m_sel.zpsm == 0) + { + // GSVector8i o = GSVector8i::x80000000(); + + vpcmpeqd(temp1, temp1); + vpslld(temp1, 31); + + // GSVector8i zso = zs - o; + // GSVector8i zdo = zd - o; + + vpsubd(ymm0, temp1); + vpsubd(ymm1, temp1); + } + + switch(m_sel.ztst) + { + case ZTST_GEQUAL: + // test |= zso < zdo; // ~(zso >= zdo) + vpcmpgtd(ymm1, ymm0); + vpor(ymm7, ymm1); + break; + + case ZTST_GREATER: // TODO: tidus hair and chocobo wings only appear fully when this is tested as ZTST_GEQUAL + // test |= zso <= zdo; // ~(zso > zdo) + vpcmpgtd(ymm0, ymm1); + vpcmpeqd(temp1, temp1); + vpxor(ymm0, temp1); + vpor(ymm7, ymm0); + break; + } + + alltrue(); + } +} + +void GSDrawScanlineCodeGenerator::SampleTexture() +{ + if(!m_sel.fb || m_sel.tfx == TFX_NONE) + { + return; + } + + mov(ebx, ptr[&m_local.gd->tex[0]]); + + if(m_sel.tlu) + { + mov(edx, ptr[&m_local.gd->clut]); + } + + // ebx = tex + // edx = clut + + if(!m_sel.fst) + { + vrcpps(ymm0, ymm4); + + vmulps(ymm2, ymm0); + vmulps(ymm3, ymm0); + + vcvttps2dq(ymm2, ymm2); + vcvttps2dq(ymm3, ymm3); + + if(m_sel.ltf) + { + // u -= 0x8000; + // v -= 0x8000; + + mov(eax, 0x8000); + vmovd(xmm4, eax); + vpbroadcastd(ymm4, xmm4); + + vpsubd(ymm2, ymm4); + vpsubd(ymm3, ymm4); + } + } + + // ymm2 = u + // ymm3 = v + + if(m_sel.ltf) + { + // GSVector8i uf = u.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.uf], ymm0); + + if(m_sel.prim != GS_SPRITE_CLASS) + { + // GSVector8i vf = v.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.vf], ymm0); + } + } + + // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); + + vpsrad(ymm2, 16); + vpsrad(ymm3, 16); + vpackssdw(ymm2, ymm3); + + if(m_sel.ltf) + { + // GSVector8i uv1 = uv0.add16(GSVector8i::x0001()); + + vpcmpeqd(ymm1, ymm1); + vpsrlw(ymm1, 15); + vpaddw(ymm3, ymm2, ymm1); + + // uv0 = Wrap(uv0); + // uv1 = Wrap(uv1); + + Wrap(ymm2, ymm3); + } + else + { + // uv0 = Wrap(uv0); + + Wrap(ymm2); + } + + // ymm2 = uv0 + // ymm3 = uv1 (ltf) + // ymm0, ymm1, ymm4, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i y0 = uv0.uph16() << tw; + // GSVector8i x0 = uv0.upl16(); + + vpxor(ymm0, ymm0); + + vpunpcklwd(ymm4, ymm2, ymm0); + vpunpckhwd(ymm2, ymm2, ymm0); + vpslld(ymm2, (uint8)(m_sel.tw + 3)); + + // ymm0 = 0 + // ymm2 = y0 + // ymm3 = uv1 (ltf) + // ymm4 = x0 + // ymm1, ymm5, ymm6 = free + // ymm7 = used + + if(m_sel.ltf) + { + // GSVector8i y1 = uv1.uph16() << tw; + // GSVector8i x1 = uv1.upl16(); + + vpunpcklwd(ymm6, ymm3, ymm0); + vpunpckhwd(ymm3, ymm3, ymm0); + vpslld(ymm3, (uint8)(m_sel.tw + 3)); + + // ymm2 = y0 + // ymm3 = y1 + // ymm4 = x0 + // ymm6 = x1 + // ymm0, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i addr00 = y0 + x0; + // GSVector8i addr01 = y0 + x1; + // GSVector8i addr10 = y1 + x0; + // GSVector8i addr11 = y1 + x1; + + vpaddd(ymm5, ymm2, ymm4); + vpaddd(ymm2, ymm2, ymm6); + vpaddd(ymm0, ymm3, ymm4); + vpaddd(ymm3, ymm3, ymm6); + + // ymm5 = addr00 + // ymm2 = addr01 + // ymm0 = addr10 + // ymm3 = addr11 + // ymm1, ymm4, ymm6 = free + // ymm7 = used + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); + // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); + // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(4, 0); + + // ymm6 = c00 + // ymm4 = c01 + // ymm1 = c10 + // ymm5 = c11 + // ymm0, ymm2, ymm3 = free + // ymm7 = used + + vmovdqa(ymm0, ptr[&m_local.temp.uf]); + + // GSVector8i rb00 = c00 & mask; + // GSVector8i ga00 = (c00 >> 8) & mask; + + vpsllw(ymm2, ymm6, 8); + vpsrlw(ymm2, 8); + vpsrlw(ymm6, 8); + + // GSVector8i rb01 = c01 & mask; + // GSVector8i ga01 = (c01 >> 8) & mask; + + vpsllw(ymm3, ymm4, 8); + vpsrlw(ymm3, 8); + vpsrlw(ymm4, 8); + + // ymm0 = uf + // ymm2 = rb00 + // ymm3 = rb01 + // ymm6 = ga00 + // ymm4 = ga01 + // ymm1 = c10 + // ymm5 = c11 + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb01, uf); + // ga00 = ga00.lerp16_4(ga01, uf); + + lerp16_4(ymm3, ymm2, ymm0); + lerp16_4(ymm4, ymm6, ymm0); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = c10 + // ymm5 = c11 + // ymm2, ymm6 = free + // ymm7 = used + + // GSVector8i rb10 = c10 & mask; + // GSVector8i ga10 = (c10 >> 8) & mask; + + vpsrlw(ymm2, ymm1, 8); + vpsllw(ymm1, 8); + vpsrlw(ymm1, 8); + + // GSVector8i rb11 = c11 & mask; + // GSVector8i ga11 = (c11 >> 8) & mask; + + vpsrlw(ymm6, ymm5, 8); + vpsllw(ymm5, 8); + vpsrlw(ymm5, 8); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = rb10 + // ymm5 = rb11 + // ymm2 = ga10 + // ymm6 = ga11 + // ymm7 = used + + // rb10 = rb10.lerp16_4(rb11, uf); + // ga10 = ga10.lerp16_4(ga11, uf); + + lerp16_4(ymm5, ymm1, ymm0); + lerp16_4(ymm6, ymm2, ymm0); + + // ymm3 = rb00 + // ymm4 = ga00 + // ymm5 = rb10 + // ymm6 = ga10 + // ymm0, ymm1, ymm2 = free + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb10, vf); + // ga00 = ga00.lerp16_4(ga10, vf); + + vmovdqa(ymm0, ptr[&m_local.temp.vf]); + + lerp16_4(ymm5, ymm3, ymm0); + lerp16_4(ymm6, ymm4, ymm0); + } + else + { + // GSVector8i addr00 = y0 + x0; + + vpaddd(ymm5, ymm2, ymm4); + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(1, 0); + + // GSVector8i mask = GSVector8i::x00ff(); + + // c[0] = c00 & mask; + // c[1] = (c00 >> 8) & mask; + + vpsllw(ymm5, ymm6, 8); + vpsrlw(ymm5, 8); + vpsrlw(ymm6, 8); + } +} + +void GSDrawScanlineCodeGenerator::Wrap(const Ymm& uv) +{ + // ymm0, ymm1, ymm4, ymm5, ymm6 = free + + int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; + int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; + + int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; + + if(wms_clamp == wmt_clamp) + { + if(wms_clamp) + { + if(region) + { + vbroadcasti128(ymm0, ptr[&m_local.gd->t.min]); + vpmaxsw(uv, ymm0); + } + else + { + vpxor(ymm0, ymm0); + vpmaxsw(uv, ymm0); + } + + vbroadcasti128(ymm0, ptr[&m_local.gd->t.max]); + vpminsw(uv, ymm0); + } + else + { + vbroadcasti128(ymm0, ptr[&m_local.gd->t.min]); + vpand(uv, ymm0); + + if(region) + { + vbroadcasti128(ymm0, ptr[&m_local.gd->t.max]); + vpor(uv, ymm0); + } + } + } + else + { + vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); + vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); + vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv, ymm4); + + if(region) + { + vpor(ymm1, ymm5); + } + + // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv, ymm4); + vpminsw(uv, ymm5); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv, ymm1, ymm0); + } +} + +void GSDrawScanlineCodeGenerator::Wrap(const Ymm& uv0, const Ymm& uv1) +{ + // ymm0, ymm1, ymm4, ymm5, ymm6 = free + + int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; + int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; + + int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; + + if(wms_clamp == wmt_clamp) + { + if(wms_clamp) + { + if(region) + { + vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); + vpmaxsw(uv0, ymm4); + vpmaxsw(uv1, ymm4); + } + else + { + vpxor(ymm0, ymm0); + vpmaxsw(uv0, ymm0); + vpmaxsw(uv1, ymm0); + } + + vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); + vpminsw(uv0, ymm5); + vpminsw(uv1, ymm5); + } + else + { + vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); + vpand(uv0, ymm4); + vpand(uv1, ymm4); + + if(region) + { + vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); + vpor(uv0, ymm5); + vpor(uv1, ymm5); + } + } + } + else + { + vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); + vbroadcasti128(ymm5, ptr[&m_local.gd->t.max]); + vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); + + // uv0 + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv0, ymm4); + + if(region) + { + vpor(ymm1, ymm5); + } + + // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv0, ymm4); + vpminsw(uv0, ymm5); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv0, ymm1, ymm0); + + // uv1 + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv1, ymm4); + + if(region) + { + vpor(ymm1, ymm5); + } + + // GSVector4i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv1, ymm4); + vpminsw(uv1, ymm5); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv1, ymm1, ymm0); + } +} + +void GSDrawScanlineCodeGenerator::SampleTextureLOD() +{ + if(!m_sel.fb || m_sel.tfx == TFX_NONE) + { + return; + } + + push(ebp); + + mov(ebp, (size_t)m_local.gd->tex); + + if(m_sel.tlu) + { + mov(edx, ptr[&m_local.gd->clut]); + } + + if(!m_sel.fst) + { + vrcpps(ymm0, ymm4); + + vmulps(ymm2, ymm0); + vmulps(ymm3, ymm0); + + vcvttps2dq(ymm2, ymm2); + vcvttps2dq(ymm3, ymm3); + } + + // ymm2 = u + // ymm3 = v + // ymm4 = q + // ymm0 = ymm1 = ymm5 = ymm6 = free + + // TODO: if the fractional part is not needed in round-off mode then there is a faster integer log2 (just take the exp) (but can we round it?) + + if(!m_sel.lcm) + { + // lod = -log2(Q) * (1 << L) + K + + vpcmpeqd(ymm1, ymm1); + vpsrld(ymm1, ymm1, 25); + vpslld(ymm0, ymm4, 1); + vpsrld(ymm0, ymm0, 24); + vpsubd(ymm0, ymm1); + vcvtdq2ps(ymm0, ymm0); + + // ymm0 = (float)(exp(q) - 127) + + vpslld(ymm4, ymm4, 9); + vpsrld(ymm4, ymm4, 9); + vorps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); + + // ymm4 = mant(q) | 1.0f + + if(m_cpu.has(util::Cpu::tFMA)) + { + vmovaps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[0]]); // c0 + vfmadd213ps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[1]]); // c0 * ymm4 + c1 + vfmadd213ps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[2]]); // (c0 * ymm4 + c1) * ymm4 + c2 + vsubps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); // ymm4 - 1.0f + vfmadd213ps(ymm4, ymm5, ymm0); // ((c0 * ymm4 + c1) * ymm4 + c2) * (ymm4 - 1.0f) + ymm0 + } + else + { + vmulps(ymm5, ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[0]]); + vaddps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[1]]); + vmulps(ymm5, ymm4); + vsubps(ymm4, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[3]]); + vaddps(ymm5, ptr[&GSDrawScanlineCodeGenerator::m_log2_coef[2]]); + vmulps(ymm4, ymm5); + vaddps(ymm4, ymm0); + } + + // ymm4 = log2(Q) = ((((c0 * ymm4) + c1) * ymm4) + c2) * (ymm4 - 1.0f) + ymm0 + + if(m_cpu.has(util::Cpu::tFMA)) + { + vmovaps(ymm5, ptr[&m_local.gd->l]); + vfmadd213ps(ymm4, ymm5, ptr[&m_local.gd->k]); + } + else + { + vmulps(ymm4, ptr[&m_local.gd->l]); + vaddps(ymm4, ptr[&m_local.gd->k]); + } + + // ymm4 = (-log2(Q) * (1 << L) + K) * 0x10000 + + vxorps(ymm0, ymm0); + vminps(ymm4, ptr[&m_local.gd->mxl]); + vmaxps(ymm4, ymm0); + vcvtps2dq(ymm4, ymm4); + + if(m_sel.mmin == 1) // round-off mode + { + mov(eax, 0x8000); + vmovd(xmm0, eax); + vpbroadcastd(ymm0, xmm0); + vpaddd(ymm4, ymm0); + } + + vpsrld(ymm0, ymm4, 16); + + vmovdqa(ptr[&m_local.temp.lod.i], ymm0); +/* +vpslld(ymm5, ymm0, 6); +vpslld(ymm6, ymm4, 16); +vpsrld(ymm6, ymm6, 24); +return; +*/ + if(m_sel.mmin == 2) // trilinear mode + { + vpshuflw(ymm1, ymm4, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm1, ymm1, _MM_SHUFFLE(2, 2, 0, 0)); + vmovdqa(ptr[&m_local.temp.lod.f], ymm1); + } + + // shift u/v/minmax by (int)lod + + vpsravd(ymm2, ymm2, ymm0); + vpsravd(ymm3, ymm3, ymm0); + + vmovdqa(ptr[&m_local.temp.uv[0]], ymm2); + vmovdqa(ptr[&m_local.temp.uv[1]], ymm3); + + // m_local.gd->t.minmax => m_local.temp.uv_minmax[0/1] + + vpxor(ymm1, ymm1); + + vbroadcasti128(ymm4, ptr[&m_local.gd->t.min]); + vpunpcklwd(ymm5, ymm4, ymm1); // minu + vpunpckhwd(ymm6, ymm4, ymm1); // minv + vpsrlvd(ymm5, ymm5, ymm0); + vpsrlvd(ymm6, ymm6, ymm0); + vpackusdw(ymm5, ymm6); + + vbroadcasti128(ymm4, ptr[&m_local.gd->t.max]); + vpunpcklwd(ymm6, ymm4, ymm1); // maxu + vpunpckhwd(ymm4, ymm4, ymm1); // maxv + vpsrlvd(ymm6, ymm6, ymm0); + vpsrlvd(ymm4, ymm4, ymm0); + vpackusdw(ymm6, ymm4); + + vmovdqa(ptr[&m_local.temp.uv_minmax[0]], ymm5); + vmovdqa(ptr[&m_local.temp.uv_minmax[1]], ymm6); + } + else + { + // lod = K + + vmovd(xmm0, ptr[&m_local.gd->lod.i.u32[0]]); + + vpsrad(ymm2, xmm0); + vpsrad(ymm3, xmm0); + + vmovdqa(ptr[&m_local.temp.uv[0]], ymm2); + vmovdqa(ptr[&m_local.temp.uv[1]], ymm3); + + vmovdqa(ymm5, ptr[&m_local.temp.uv_minmax[0]]); + vmovdqa(ymm6, ptr[&m_local.temp.uv_minmax[1]]); + } + + // ymm2 = m_local.temp.uv[0] = u (level m) + // ymm3 = m_local.temp.uv[1] = v (level m) + // ymm5 = minuv + // ymm6 = maxuv + + if(m_sel.ltf) + { + // u -= 0x8000; + // v -= 0x8000; + + mov(eax, 0x8000); + vmovd(xmm4, eax); + vpbroadcastd(ymm4, xmm4); + + vpsubd(ymm2, ymm4); + vpsubd(ymm3, ymm4); + + // GSVector8i uf = u.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.uf], ymm0); + + // GSVector8i vf = v.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.vf], ymm0); + } + + // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); + + vpsrad(ymm2, 16); + vpsrad(ymm3, 16); + vpackssdw(ymm2, ymm3); + + if(m_sel.ltf) + { + // GSVector8i uv1 = uv0.add16(GSVector8i::x0001()); + + vpcmpeqd(ymm1, ymm1); + vpsrlw(ymm1, 15); + vpaddw(ymm3, ymm2, ymm1); + + // uv0 = Wrap(uv0); + // uv1 = Wrap(uv1); + + WrapLOD(ymm2, ymm3); + } + else + { + // uv0 = Wrap(uv0); + + WrapLOD(ymm2); + } + + // ymm2 = uv0 + // ymm3 = uv1 (ltf) + // ymm0, ymm1, ymm4, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i x0 = uv0.upl16(); + // GSVector8i y0 = uv0.uph16() << tw; + + vpxor(ymm0, ymm0); + + vpunpcklwd(ymm4, ymm2, ymm0); + vpunpckhwd(ymm2, ymm2, ymm0); + vpslld(ymm2, (uint8)(m_sel.tw + 3)); + + // ymm0 = 0 + // ymm2 = y0 + // ymm3 = uv1 (ltf) + // ymm4 = x0 + // ymm1, ymm5, ymm6 = free + // ymm7 = used + + if(m_sel.ltf) + { + // GSVector8i x1 = uv1.upl16(); + // GSVector8i y1 = uv1.uph16() << tw; + + vpunpcklwd(ymm6, ymm3, ymm0); + vpunpckhwd(ymm3, ymm3, ymm0); + vpslld(ymm3, (uint8)(m_sel.tw + 3)); + + // ymm2 = y0 + // ymm3 = y1 + // ymm4 = x0 + // ymm6 = x1 + // ymm0, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i addr00 = y0 + x0; + // GSVector8i addr01 = y0 + x1; + // GSVector8i addr10 = y1 + x0; + // GSVector8i addr11 = y1 + x1; + + vpaddd(ymm5, ymm2, ymm4); + vpaddd(ymm2, ymm2, ymm6); + vpaddd(ymm0, ymm3, ymm4); + vpaddd(ymm3, ymm3, ymm6); + + // ymm5 = addr00 + // ymm2 = addr01 + // ymm0 = addr10 + // ymm3 = addr11 + // ymm1, ymm4, ymm6 = free + // ymm7 = used + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); + // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); + // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(4, 0); + + // ymm6 = c00 + // ymm4 = c01 + // ymm1 = c10 + // ymm5 = c11 + // ymm0, ymm2, ymm3 = free + // ymm7 = used + + vmovdqa(ymm0, ptr[&m_local.temp.uf]); + + // GSVector8i rb00 = c00 & mask; + // GSVector8i ga00 = (c00 >> 8) & mask; + + vpsllw(ymm2, ymm6, 8); + vpsrlw(ymm2, 8); + vpsrlw(ymm6, 8); + + // GSVector8i rb01 = c01 & mask; + // GSVector8i ga01 = (c01 >> 8) & mask; + + vpsllw(ymm3, ymm4, 8); + vpsrlw(ymm3, 8); + vpsrlw(ymm4, 8); + + // ymm0 = uf + // ymm2 = rb00 + // ymm3 = rb01 + // ymm6 = ga00 + // ymm4 = ga01 + // ymm1 = c10 + // ymm5 = c11 + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb01, uf); + // ga00 = ga00.lerp16_4(ga01, uf); + + lerp16_4(ymm3, ymm2, ymm0); + lerp16_4(ymm4, ymm6, ymm0); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = c10 + // ymm5 = c11 + // ymm2, ymm6 = free + // ymm7 = used + + // GSVector8i rb10 = c10 & mask; + // GSVector8i ga10 = (c10 >> 8) & mask; + + vpsrlw(ymm2, ymm1, 8); + vpsllw(ymm1, 8); + vpsrlw(ymm1, 8); + + // GSVector8i rb11 = c11 & mask; + // GSVector8i ga11 = (c11 >> 8) & mask; + + vpsrlw(ymm6, ymm5, 8); + vpsllw(ymm5, 8); + vpsrlw(ymm5, 8); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = rb10 + // ymm5 = rb11 + // ymm2 = ga10 + // ymm6 = ga11 + // ymm7 = used + + // rb10 = rb10.lerp16_4(rb11, uf); + // ga10 = ga10.lerp16_4(ga11, uf); + + lerp16_4(ymm5, ymm1, ymm0); + lerp16_4(ymm6, ymm2, ymm0); + + // ymm3 = rb00 + // ymm4 = ga00 + // ymm5 = rb10 + // ymm6 = ga10 + // ymm0, ymm1, ymm2 = free + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb10, vf); + // ga00 = ga00.lerp16_4(ga10, vf); + + vmovdqa(ymm0, ptr[&m_local.temp.vf]); + + lerp16_4(ymm5, ymm3, ymm0); + lerp16_4(ymm6, ymm4, ymm0); + } + else + { + // GSVector8i addr00 = y0 + x0; + + vpaddd(ymm5, ymm2, ymm4); + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(1, 0); + + // GSVector8i mask = GSVector8i::x00ff(); + + // c[0] = c00 & mask; + // c[1] = (c00 >> 8) & mask; + + vpsllw(ymm5, ymm6, 8); + vpsrlw(ymm5, 8); + vpsrlw(ymm6, 8); + } + + if(m_sel.mmin != 1) // !round-off mode + { + vmovdqa(ptr[&m_local.temp.trb], ymm5); + vmovdqa(ptr[&m_local.temp.tga], ymm6); + + vmovdqa(ymm2, ptr[&m_local.temp.uv[0]]); + vmovdqa(ymm3, ptr[&m_local.temp.uv[1]]); + + vpsrad(ymm2, 1); + vpsrad(ymm3, 1); + + vmovdqa(ymm5, ptr[&m_local.temp.uv_minmax[0]]); + vmovdqa(ymm6, ptr[&m_local.temp.uv_minmax[1]]); + + vpsrlw(ymm5, 1); + vpsrlw(ymm6, 1); + + if(m_sel.ltf) + { + // u -= 0x8000; + // v -= 0x8000; + + mov(eax, 0x8000); + vmovd(xmm4, eax); + vpbroadcastd(ymm4, xmm4); + + vpsubd(ymm2, ymm4); + vpsubd(ymm3, ymm4); + + // GSVector8i uf = u.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm2, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.uf], ymm0); + + // GSVector8i vf = v.xxzzlh().srl16(1); + + vpshuflw(ymm0, ymm3, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpsrlw(ymm0, 12); + vmovdqa(ptr[&m_local.temp.vf], ymm0); + } + + // GSVector8i uv0 = u.sra32(16).ps32(v.sra32(16)); + + vpsrad(ymm2, 16); + vpsrad(ymm3, 16); + vpackssdw(ymm2, ymm3); + + if(m_sel.ltf) + { + // GSVector8i uv1 = uv0.add16(GSVector4i::x0001()); + + vpcmpeqd(ymm1, ymm1); + vpsrlw(ymm1, 15); + vpaddw(ymm3, ymm2, ymm1); + + // uv0 = Wrap(uv0); + // uv1 = Wrap(uv1); + + WrapLOD(ymm2, ymm3); + } + else + { + // uv0 = Wrap(uv0); + + WrapLOD(ymm2); + } + + // ymm2 = uv0 + // ymm3 = uv1 (ltf) + // ymm0, ymm1, ymm4, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i x0 = uv0.upl16(); + // GSVector8i y0 = uv0.uph16() << tw; + + vpxor(ymm0, ymm0); + + vpunpcklwd(ymm4, ymm2, ymm0); + vpunpckhwd(ymm2, ymm2, ymm0); + vpslld(ymm2, (uint8)(m_sel.tw + 3)); + + // ymm0 = 0 + // ymm2 = y0 + // ymm3 = uv1 (ltf) + // ymm4 = x0 + // ymm1, ymm5, ymm6 = free + // ymm7 = used + + if(m_sel.ltf) + { + // GSVector8i x1 = uv1.upl16(); + // GSVector8i y1 = uv1.uph16() << tw; + + vpunpcklwd(ymm6, ymm3, ymm0); + vpunpckhwd(ymm3, ymm3, ymm0); + vpslld(ymm3, (uint8)(m_sel.tw + 3)); + + // ymm2 = y0 + // ymm3 = y1 + // ymm4 = x0 + // ymm6 = x1 + // ymm0, ymm5, ymm6 = free + // ymm7 = used + + // GSVector8i addr00 = y0 + x0; + // GSVector8i addr01 = y0 + x1; + // GSVector8i addr10 = y1 + x0; + // GSVector8i addr11 = y1 + x1; + + vpaddd(ymm5, ymm2, ymm4); + vpaddd(ymm2, ymm2, ymm6); + vpaddd(ymm0, ymm3, ymm4); + vpaddd(ymm3, ymm3, ymm6); + + // ymm5 = addr00 + // ymm2 = addr01 + // ymm0 = addr10 + // ymm3 = addr11 + // ymm1, ymm4, ymm6 = free + // ymm7 = used + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + // c01 = addr01.gather32_32((const uint32/uint8*)tex[, clut]); + // c10 = addr10.gather32_32((const uint32/uint8*)tex[, clut]); + // c11 = addr11.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(4, 1); + + // ymm6 = c00 + // ymm4 = c01 + // ymm1 = c10 + // ymm5 = c11 + // ymm0, ymm2, ymm3 = free + // ymm7 = used + + vmovdqa(ymm0, ptr[&m_local.temp.uf]); + + // GSVector8i rb00 = c00 & mask; + // GSVector8i ga00 = (c00 >> 8) & mask; + + vpsllw(ymm2, ymm6, 8); + vpsrlw(ymm2, 8); + vpsrlw(ymm6, 8); + + // GSVector8i rb01 = c01 & mask; + // GSVector8i ga01 = (c01 >> 8) & mask; + + vpsllw(ymm3, ymm4, 8); + vpsrlw(ymm3, 8); + vpsrlw(ymm4, 8); + + // ymm0 = uf + // ymm2 = rb00 + // ymm3 = rb01 + // ymm6 = ga00 + // ymm4 = ga01 + // ymm1 = c10 + // ymm5 = c11 + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb01, uf); + // ga00 = ga00.lerp16_4(ga01, uf); + + lerp16_4(ymm3, ymm2, ymm0); + lerp16_4(ymm4, ymm6, ymm0); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = c10 + // ymm5 = c11 + // ymm2, ymm6 = free + // ymm7 = used + + // GSVector8i rb10 = c10 & mask; + // GSVector8i ga10 = (c10 >> 8) & mask; + + vpsrlw(ymm2, ymm1, 8); + vpsllw(ymm1, 8); + vpsrlw(ymm1, 8); + + // GSVector8i rb11 = c11 & mask; + // GSVector8i ga11 = (c11 >> 8) & mask; + + vpsrlw(ymm6, ymm5, 8); + vpsllw(ymm5, 8); + vpsrlw(ymm5, 8); + + // ymm0 = uf + // ymm3 = rb00 + // ymm4 = ga00 + // ymm1 = rb10 + // ymm5 = rb11 + // ymm2 = ga10 + // ymm6 = ga11 + // ymm7 = used + + // rb10 = rb10.lerp16_4(rb11, uf); + // ga10 = ga10.lerp16_4(ga11, uf); + + lerp16_4(ymm5, ymm1, ymm0); + lerp16_4(ymm6, ymm2, ymm0); + + // ymm3 = rb00 + // ymm4 = ga00 + // ymm5 = rb10 + // ymm6 = ga10 + // ymm0, ymm1, ymm2 = free + // ymm7 = used + + // rb00 = rb00.lerp16_4(rb10, vf); + // ga00 = ga00.lerp16_4(ga10, vf); + + vmovdqa(ymm0, ptr[&m_local.temp.vf]); + + lerp16_4(ymm5, ymm3, ymm0); + lerp16_4(ymm6, ymm4, ymm0); + } + else + { + // GSVector8i addr00 = y0 + x0; + + vpaddd(ymm5, ymm2, ymm4); + + // c00 = addr00.gather32_32((const uint32/uint8*)tex[, clut]); + + ReadTexel(1, 1); + + // GSVector8i mask = GSVector8i::x00ff(); + + // c[0] = c00 & mask; + // c[1] = (c00 >> 8) & mask; + + vpsllw(ymm5, ymm6, 8); + vpsrlw(ymm5, 8); + vpsrlw(ymm6, 8); + } + + vmovdqa(ymm0, ptr[m_sel.lcm ? &m_local.gd->lod.f : &m_local.temp.lod.f]); + vpsrlw(ymm0, ymm0, 1); + + vmovdqa(ymm2, ptr[&m_local.temp.trb]); + vmovdqa(ymm3, ptr[&m_local.temp.tga]); + + lerp16(ymm5, ymm2, ymm0, 0); + lerp16(ymm6, ymm3, ymm0, 0); + } + + pop(ebp); +} + +void GSDrawScanlineCodeGenerator::WrapLOD(const Ymm& uv) +{ + // ymm5 = minuv + // ymm6 = maxuv + // ymm0, ymm1, ymm4 = free + + int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; + int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; + + int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; + + if(wms_clamp == wmt_clamp) + { + if(wms_clamp) + { + if(region) + { + vpmaxsw(uv, ymm5); + } + else + { + vpxor(ymm0, ymm0); + vpmaxsw(uv, ymm0); + } + + vpminsw(uv, ymm6); + } + else + { + vpand(uv, ymm5); + + if(region) + { + vpor(uv, ymm6); + } + } + } + else + { + vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv, ymm5); + + if(region) + { + vpor(ymm1, ymm6); + } + + // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv, ymm5); + vpminsw(uv, ymm6); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv, ymm1, ymm0); + } +} + +void GSDrawScanlineCodeGenerator::WrapLOD(const Ymm& uv0, const Ymm& uv1) +{ + // ymm5 = minuv + // ymm6 = maxuv + // ymm0, ymm1, ymm4 = free + + int wms_clamp = ((m_sel.wms + 1) >> 1) & 1; + int wmt_clamp = ((m_sel.wmt + 1) >> 1) & 1; + + int region = ((m_sel.wms | m_sel.wmt) >> 1) & 1; + + if(wms_clamp == wmt_clamp) + { + if(wms_clamp) + { + if(region) + { + vpmaxsw(uv0, ymm5); + vpmaxsw(uv1, ymm5); + } + else + { + vpxor(ymm0, ymm0); + vpmaxsw(uv0, ymm0); + vpmaxsw(uv1, ymm0); + } + + vpminsw(uv0, ymm6); + vpminsw(uv1, ymm6); + } + else + { + vpand(uv0, ymm5); + vpand(uv1, ymm5); + + if(region) + { + vpor(uv0, ymm6); + vpor(uv1, ymm6); + } + } + } + else + { + vbroadcasti128(ymm0, ptr[&m_local.gd->t.mask]); + + // uv0 + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv0, ymm5); + + if(region) + { + vpor(ymm1, ymm6); + } + + // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv0, ymm5); + vpminsw(uv0, ymm6); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv0, ymm1, ymm0); + + // uv1 + + // GSVector8i repeat = (t & m_local.gd->t.min) | m_local.gd->t.max; + + vpand(ymm1, uv1, ymm5); + + if(region) + { + vpor(ymm1, ymm6); + } + + // GSVector8i clamp = t.sat_i16(m_local.gd->t.min, m_local.gd->t.max); + + vpmaxsw(uv1, ymm5); + vpminsw(uv1, ymm6); + + // clamp.blend8(repeat, m_local.gd->t.mask); + + vpblendvb(uv1, ymm1, ymm0); + } +} + +void GSDrawScanlineCodeGenerator::AlphaTFX() +{ + if(!m_sel.fb) + { + return; + } + + switch(m_sel.tfx) + { + case TFX_MODULATE: + + // GSVector8i ga = iip ? gaf : m_local.c.ga; + + vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); + + // gat = gat.modulate16<1>(ga).clamp8(); + + modulate16(ymm6, ymm4, 1); + + clamp16(ymm6, ymm3); + + // if(!tcc) gat = gat.mix16(ga.srl16(7)); + + if(!m_sel.tcc) + { + vpsrlw(ymm4, 7); + + mix16(ymm6, ymm4, ymm3); + } + + break; + + case TFX_DECAL: + + // if(!tcc) gat = gat.mix16(ga.srl16(7)); + + if(!m_sel.tcc) + { + // GSVector4i ga = iip ? gaf : m_local.c.ga; + + vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); + + vpsrlw(ymm4, 7); + + mix16(ymm6, ymm4, ymm3); + } + + break; + + case TFX_HIGHLIGHT: + + // GSVector4i ga = iip ? gaf : m_local.c.ga; + + vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); + vmovdqa(ymm2, ymm4); + + // gat = gat.mix16(!tcc ? ga.srl16(7) : gat.addus8(ga.srl16(7))); + + vpsrlw(ymm4, 7); + + if(m_sel.tcc) + { + vpaddusb(ymm4, ymm6); + } + + mix16(ymm6, ymm4, ymm3); + + break; + + case TFX_HIGHLIGHT2: + + // if(!tcc) gat = gat.mix16(ga.srl16(7)); + + if(!m_sel.tcc) + { + // GSVector4i ga = iip ? gaf : m_local.c.ga; + + vmovdqa(ymm4, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); + vmovdqa(ymm2, ymm4); + + vpsrlw(ymm4, 7); + + mix16(ymm6, ymm4, ymm3); + } + + break; + + case TFX_NONE: + + // gat = iip ? ga.srl16(7) : ga; + + if(m_sel.iip) + { + vpsrlw(ymm6, 7); + } + + break; + } + + if(m_sel.aa1) + { + // gs_user figure 3-2: anti-aliasing after tfx, before tests, modifies alpha + + // FIXME: bios config screen cubes + + if(!m_sel.abe) + { + // a = cov + + if(m_sel.edge) + { + vmovdqa(ymm0, ptr[&m_local.temp.cov]); + } + else + { + vpcmpeqd(ymm0, ymm0); + vpsllw(ymm0, 15); + vpsrlw(ymm0, 8); + } + + mix16(ymm6, ymm0, ymm1); + } + else + { + // a = a == 0x80 ? cov : a + + vpcmpeqd(ymm0, ymm0); + vpsllw(ymm0, 15); + vpsrlw(ymm0, 8); + + if(m_sel.edge) + { + vmovdqa(ymm1, ptr[&m_local.temp.cov]); + } + else + { + vmovdqa(ymm1, ymm0); + } + + vpcmpeqw(ymm0, ymm6); + vpsrld(ymm0, 16); + vpslld(ymm0, 16); + + vpblendvb(ymm6, ymm1, ymm0); + } + } +} + +void GSDrawScanlineCodeGenerator::ReadMask() +{ + if(m_sel.fwrite) + { + vpbroadcastd(ymm3, ptr[&m_local.gd->fm]); + } + + if(m_sel.zwrite) + { + vpbroadcastd(ymm4, ptr[&m_local.gd->zm]); + } +} + +void GSDrawScanlineCodeGenerator::TestAlpha() +{ + switch(m_sel.afail) + { + case AFAIL_FB_ONLY: + if(!m_sel.zwrite) return; + break; + + case AFAIL_ZB_ONLY: + if(!m_sel.fwrite) return; + break; + + case AFAIL_RGB_ONLY: + if(!m_sel.zwrite && m_sel.fpsm == 1) return; + break; + } + + switch(m_sel.atst) + { + case ATST_NEVER: + // t = GSVector8i::xffffffff(); + vpcmpeqd(ymm1, ymm1); + break; + + case ATST_ALWAYS: + return; + + case ATST_LESS: + case ATST_LEQUAL: + // t = (ga >> 16) > m_local.gd->aref; + vpsrld(ymm1, ymm6, 16); + vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); + vpcmpgtd(ymm1, ymm0); + break; + + case ATST_EQUAL: + // t = (ga >> 16) != m_local.gd->aref; + vpsrld(ymm1, ymm6, 16); + vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); + vpcmpeqd(ymm1, ymm0); + vpcmpeqd(ymm0, ymm0); + vpxor(ymm1, ymm0); + break; + + case ATST_GEQUAL: + case ATST_GREATER: + // t = (ga >> 16) < m_local.gd->aref; + vpsrld(ymm0, ymm6, 16); + vbroadcasti128(ymm1, ptr[&m_local.gd->aref]); + vpcmpgtd(ymm1, ymm0); + break; + + case ATST_NOTEQUAL: + // t = (ga >> 16) == m_local.gd->aref; + vpsrld(ymm1, ymm6, 16); + vbroadcasti128(ymm0, ptr[&m_local.gd->aref]); + vpcmpeqd(ymm1, ymm0); + break; + } + + switch(m_sel.afail) + { + case AFAIL_KEEP: + // test |= t; + vpor(ymm7, ymm1); + alltrue(); + break; + + case AFAIL_FB_ONLY: + // zm |= t; + vpor(ymm4, ymm1); + break; + + case AFAIL_ZB_ONLY: + // fm |= t; + vpor(ymm3, ymm1); + break; + + case AFAIL_RGB_ONLY: + // zm |= t; + vpor(ymm4, ymm1); + // fm |= t & GSVector8i::xff000000(); + vpsrld(ymm1, 24); + vpslld(ymm1, 24); + vpor(ymm3, ymm1); + break; + } +} + +void GSDrawScanlineCodeGenerator::ColorTFX() +{ + if(!m_sel.fwrite) + { + return; + } + + switch(m_sel.tfx) + { + case TFX_MODULATE: + + // GSVector8i rb = iip ? rbf : m_local.c.rb; + + // rbt = rbt.modulate16<1>(rb).clamp8(); + + modulate16(ymm5, ptr[m_sel.iip ? &m_local.temp.rb : &m_local.c.rb], 1); + + clamp16(ymm5, ymm1); + + break; + + case TFX_DECAL: + + break; + + case TFX_HIGHLIGHT: + case TFX_HIGHLIGHT2: + + if(m_sel.tfx == TFX_HIGHLIGHT2 && m_sel.tcc) + { + // GSVector8i ga = iip ? gaf : m_local.c.ga; + + vmovdqa(ymm2, ptr[m_sel.iip ? &m_local.temp.ga : &m_local.c.ga]); + } + + // gat = gat.modulate16<1>(ga).add16(af).clamp8().mix16(gat); + + vmovdqa(ymm1, ymm6); + + modulate16(ymm6, ymm2, 1); + + vpshuflw(ymm2, ymm2, _MM_SHUFFLE(3, 3, 1, 1)); + vpshufhw(ymm2, ymm2, _MM_SHUFFLE(3, 3, 1, 1)); + vpsrlw(ymm2, 7); + + vpaddw(ymm6, ymm2); + + clamp16(ymm6, ymm0); + + mix16(ymm6, ymm1, ymm0); + + // GSVector8i rb = iip ? rbf : m_local.c.rb; + + // rbt = rbt.modulate16<1>(rb).add16(af).clamp8(); + + modulate16(ymm5, ptr[m_sel.iip ? &m_local.temp.rb : &m_local.c.rb], 1); + + vpaddw(ymm5, ymm2); + + clamp16(ymm5, ymm0); + + break; + + case TFX_NONE: + + // rbt = iip ? rb.srl16(7) : rb; + + if(m_sel.iip) + { + vpsrlw(ymm5, 7); + } + + break; + } +} + +void GSDrawScanlineCodeGenerator::Fog() +{ + if(!m_sel.fwrite || !m_sel.fge) + { + return; + } + + // rb = m_local.gd->frb.lerp16<0>(rb, f); + // ga = m_local.gd->fga.lerp16<0>(ga, f).mix16(ga); + + if(m_sel.prim != GS_SPRITE_CLASS) + { + vmovdqa(ymm0, ptr[&m_local.temp.f]); + } + else + { + vpbroadcastw(ymm0, ptr[&m_local.p.f]); + } + + vmovdqa(ymm1, ymm6); + + vpbroadcastd(ymm2, ptr[&m_local.gd->frb]); + lerp16(ymm5, ymm2, ymm0, 0); + + vpbroadcastd(ymm2, ptr[&m_local.gd->fga]); + lerp16(ymm6, ymm2, ymm0, 0); + mix16(ymm6, ymm1, ymm0); +} + +void GSDrawScanlineCodeGenerator::ReadFrame() +{ + if(!m_sel.fb) + { + return; + } + + // int fa = fza_base.x + fza_offset->x; + + mov(ebx, ptr[esi]); + add(ebx, ptr[edi]); + + if(!m_sel.rfb) + { + return; + } + + ReadPixel(ymm2, ymm0, ebx); +} + +void GSDrawScanlineCodeGenerator::TestDestAlpha() +{ + if(!m_sel.date || m_sel.fpsm != 0 && m_sel.fpsm != 2) + { + return; + } + + // test |= ((fd [<< 16]) ^ m_local.gd->datm).sra32(31); + + if(m_sel.datm) + { + if(m_sel.fpsm == 2) + { + vpxor(ymm0, ymm0); + //vpsrld(ymm1, ymm2, 15); + vpslld(ymm1, ymm2, 16); + vpsrad(ymm1, 31); + vpcmpeqd(ymm1, ymm0); + } + else + { + vpcmpeqd(ymm0, ymm0); + vpxor(ymm1, ymm2, ymm0); + vpsrad(ymm1, 31); + } + } + else + { + if(m_sel.fpsm == 2) + { + vpslld(ymm1, ymm2, 16); + vpsrad(ymm1, 31); + } + else + { + vpsrad(ymm1, ymm2, 31); + } + } + + vpor(ymm7, ymm1); + + alltrue(); +} + +void GSDrawScanlineCodeGenerator::WriteMask() +{ + if(m_sel.notest) + { + return; + } + + // fm |= test; + // zm |= test; + + if(m_sel.fwrite) + { + vpor(ymm3, ymm7); + } + + if(m_sel.zwrite) + { + vpor(ymm4, ymm7); + } + + // int fzm = ~(fm == GSVector8i::xffffffff()).ps32(zm == GSVector8i::xffffffff()).mask(); + + vpcmpeqd(ymm1, ymm1); + + if(m_sel.fwrite && m_sel.zwrite) + { + vpcmpeqd(ymm0, ymm1, ymm4); + vpcmpeqd(ymm1, ymm3); + vpackssdw(ymm1, ymm0); + } + else if(m_sel.fwrite) + { + vpcmpeqd(ymm1, ymm3); + vpackssdw(ymm1, ymm1); + } + else if(m_sel.zwrite) + { + vpcmpeqd(ymm1, ymm4); + vpackssdw(ymm1, ymm1); + } + + vpmovmskb(edx, ymm1); + + not(edx); +} + +void GSDrawScanlineCodeGenerator::WriteZBuf() +{ + if(!m_sel.zwrite) + { + return; + } + + if(m_sel.prim != GS_SPRITE_CLASS) + { + vmovdqa(ymm1, ptr[&m_local.temp.zs]); + } + else + { + vpbroadcastd(ymm1, ptr[&m_local.p.z]); + } + + if(m_sel.ztest && m_sel.zpsm < 2) + { + // zs = zs.blend8(zd, zm); + + vpblendvb(ymm1, ptr[&m_local.temp.zd], ymm4); + } + + bool fast = m_sel.ztest ? m_sel.zpsm < 2 : m_sel.zpsm == 0 && m_sel.notest; + + WritePixel(ymm1, ymm0, ebp, edx, fast, m_sel.zpsm, 1); +} + +void GSDrawScanlineCodeGenerator::AlphaBlend() +{ + if(!m_sel.fwrite) + { + return; + } + + if(m_sel.abe == 0 && m_sel.aa1 == 0) + { + return; + } + + if((m_sel.aba != m_sel.abb) && (m_sel.aba == 1 || m_sel.abb == 1 || m_sel.abc == 1) || m_sel.abd == 1) + { + switch(m_sel.fpsm) + { + case 0: + case 1: + + // c[2] = fd & mask; + // c[3] = (fd >> 8) & mask; + + vpsllw(ymm0, ymm2, 8); + vpsrlw(ymm0, 8); + vpsrlw(ymm1, ymm2, 8); + + break; + + case 2: + + // c[2] = ((fd & 0x7c00) << 9) | ((fd & 0x001f) << 3); + // c[3] = ((fd & 0x8000) << 8) | ((fd & 0x03e0) >> 2); + + vpcmpeqd(ymm7, ymm7); + + vpsrld(ymm7, 27); // 0x0000001f + vpand(ymm0, ymm2, ymm7); + vpslld(ymm0, 3); + + vpslld(ymm7, 10); // 0x00007c00 + vpand(ymm4, ymm2, ymm7); + vpslld(ymm4, 9); + + vpor(ymm0, ymm4); + + vpsrld(ymm7, 5); // 0x000003e0 + vpand(ymm1, ymm2, ymm7); + vpsrld(ymm1, 2); + + vpsllw(ymm7, 10); // 0x00008000 + vpand(ymm4, ymm2, ymm7); + vpslld(ymm4, 8); + + vpor(ymm1, ymm4); + + break; + } + } + + // ymm5, ymm6 = src rb, ga + // ymm0, ymm1 = dst rb, ga + // ymm2, ymm3 = used + // ymm4, ymm7 = free + + if(m_sel.pabe || (m_sel.aba != m_sel.abb) && (m_sel.abb == 0 || m_sel.abd == 0)) + { + vmovdqa(ymm4, ymm5); + } + + if(m_sel.aba != m_sel.abb) + { + // rb = c[aba * 2 + 0]; + + switch(m_sel.aba) + { + case 0: break; + case 1: vmovdqa(ymm5, ymm0); break; + case 2: vpxor(ymm5, ymm5); break; + } + + // rb = rb.sub16(c[abb * 2 + 0]); + + switch(m_sel.abb) + { + case 0: vpsubw(ymm5, ymm4); break; + case 1: vpsubw(ymm5, ymm0); break; + case 2: break; + } + + if(!(m_sel.fpsm == 1 && m_sel.abc == 1)) + { + // GSVector4i a = abc < 2 ? c[abc * 2 + 1].yywwlh().sll16(7) : m_local.gd->afix; + + switch(m_sel.abc) + { + case 0: + case 1: + vpshuflw(ymm7, m_sel.abc ? ymm1 : ymm6, _MM_SHUFFLE(3, 3, 1, 1)); + vpshufhw(ymm7, ymm7, _MM_SHUFFLE(3, 3, 1, 1)); + vpsllw(ymm7, 7); + break; + case 2: + vpbroadcastw(ymm7, ptr[&m_local.gd->afix]); + break; + } + + // rb = rb.modulate16<1>(a); + + modulate16(ymm5, ymm7, 1); + } + + // rb = rb.add16(c[abd * 2 + 0]); + + switch(m_sel.abd) + { + case 0: vpaddw(ymm5, ymm4); break; + case 1: vpaddw(ymm5, ymm0); break; + case 2: break; + } + } + else + { + // rb = c[abd * 2 + 0]; + + switch(m_sel.abd) + { + case 0: break; + case 1: vmovdqa(ymm5, ymm0); break; + case 2: vpxor(ymm5, ymm5); break; + } + } + + if(m_sel.pabe) + { + // mask = (c[1] << 8).sra32(31); + + vpslld(ymm0, ymm6, 8); + vpsrad(ymm0, 31); + + // rb = c[0].blend8(rb, mask); + + vpblendvb(ymm5, ymm4, ymm5, ymm0); + } + + // ymm6 = src ga + // ymm1 = dst ga + // ymm5 = rb + // ymm7 = a + // ymm2, ymm3 = used + // ymm0, ymm4 = free + + vmovdqa(ymm4, ymm6); + + if(m_sel.aba != m_sel.abb) + { + // ga = c[aba * 2 + 1]; + + switch(m_sel.aba) + { + case 0: break; + case 1: vmovdqa(ymm6, ymm1); break; + case 2: vpxor(ymm6, ymm6); break; + } + + // ga = ga.sub16(c[abeb * 2 + 1]); + + switch(m_sel.abb) + { + case 0: vpsubw(ymm6, ymm4); break; + case 1: vpsubw(ymm6, ymm1); break; + case 2: break; + } + + if(!(m_sel.fpsm == 1 && m_sel.abc == 1)) + { + // ga = ga.modulate16<1>(a); + + modulate16(ymm6, ymm7, 1); + } + + // ga = ga.add16(c[abd * 2 + 1]); + + switch(m_sel.abd) + { + case 0: vpaddw(ymm6, ymm4); break; + case 1: vpaddw(ymm6, ymm1); break; + case 2: break; + } + } + else + { + // ga = c[abd * 2 + 1]; + + switch(m_sel.abd) + { + case 0: break; + case 1: vmovdqa(ymm6, ymm1); break; + case 2: vpxor(ymm6, ymm6); break; + } + } + + // ymm4 = src ga + // ymm5 = rb + // ymm6 = ga + // ymm2, ymm3 = used + // ymm0, ymm1, ymm7 = free + + if(m_sel.pabe) + { + vpsrld(ymm0, 16); // zero out high words to select the source alpha in blend (so it also does mix16) + + // ga = c[1].blend8(ga, mask).mix16(c[1]); + + vpblendvb(ymm6, ymm4, ymm6, ymm0); + } + else + { + if(m_sel.fpsm != 1) // TODO: fm == 0xffxxxxxx + { + mix16(ymm6, ymm4, ymm7); + } + } +} + +void GSDrawScanlineCodeGenerator::WriteFrame() +{ + if(!m_sel.fwrite) + { + return; + } + + if(m_sel.fpsm == 2 && m_sel.dthe) + { + mov(eax, ptr[esp + _top]); + and(eax, 3); + shl(eax, 5); + mov(ebp, ptr[&m_local.gd->dimx]); + vbroadcasti128(ymm7, ptr[ebp + eax + sizeof(GSVector4i) * 0]); + vpaddw(ymm5, ymm7); + vbroadcasti128(ymm7, ptr[ebp + eax + sizeof(GSVector4i) * 1]); + vpaddw(ymm6, ymm7); + } + + if(m_sel.colclamp == 0) + { + // c[0] &= 0x00ff00ff; + // c[1] &= 0x00ff00ff; + + vpcmpeqd(ymm7, ymm7); + vpsrlw(ymm7, 8); + vpand(ymm5, ymm7); + vpand(ymm6, ymm7); + } + + // GSVector8i fs = c[0].upl16(c[1]).pu16(c[0].uph16(c[1])); + + vpunpckhwd(ymm7, ymm5, ymm6); + vpunpcklwd(ymm5, ymm6); + vpackuswb(ymm5, ymm7); + + if(m_sel.fba && m_sel.fpsm != 1) + { + // fs |= 0x80000000; + + vpcmpeqd(ymm7, ymm7); + vpslld(ymm7, 31); + vpor(ymm5, ymm7); + } + + if(m_sel.fpsm == 2) + { + // GSVector8i rb = fs & 0x00f800f8; + // GSVector8i ga = fs & 0x8000f800; + + mov(eax, 0x00f800f8); + vmovd(xmm6, eax); + vpbroadcastd(ymm6, xmm6); + + mov(eax, 0x8000f800); + vmovd(xmm7, eax); + vpbroadcastd(ymm7, xmm7); + + vpand(ymm4, ymm5, ymm6); + vpand(ymm5, ymm7); + + // fs = (ga >> 16) | (rb >> 9) | (ga >> 6) | (rb >> 3); + + vpsrld(ymm6, ymm4, 9); + vpsrld(ymm4, 3); + vpsrld(ymm7, ymm5, 16); + vpsrld(ymm5, 6); + + vpor(ymm5, ymm4); + vpor(ymm7, ymm6); + vpor(ymm5, ymm7); + } + + if(m_sel.rfb) + { + // fs = fs.blend(fd, fm); + + blend(ymm5, ymm2, ymm3); // TODO: could be skipped in certain cases, depending on fpsm and fm + } + + bool fast = m_sel.rfb ? m_sel.fpsm < 2 : m_sel.fpsm == 0 && m_sel.notest; + + WritePixel(ymm5, ymm0, ebx, edx, fast, m_sel.fpsm, 0); +} + +void GSDrawScanlineCodeGenerator::ReadPixel(const Ymm& dst, const Ymm& temp, const Reg32& addr) +{ + vmovq(Xmm(dst.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm]); + vmovhps(Xmm(dst.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2]); + vmovq(Xmm(temp.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2]); + vmovhps(Xmm(temp.getIdx()), qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2]); + vinserti128(dst, dst, temp, 1); +/* + vmovdqu(dst, ptr[addr * 2 + (size_t)m_local.gd->vm]); + vmovdqu(temp, ptr[addr * 2 + (size_t)m_local.gd->vm + 16 * 2]); + vpunpcklqdq(dst, dst, temp); + vpermq(dst, dst, _MM_SHUFFLE(3, 1, 2, 0)); +*/ +} + +void GSDrawScanlineCodeGenerator::WritePixel(const Ymm& src, const Ymm& temp, const Reg32& addr, const Reg32& mask, bool fast, int psm, int fz) +{ + Xmm src1 = Xmm(src.getIdx()); + Xmm src2 = Xmm(temp.getIdx()); + + vextracti128(src2, src, 1); + + if(m_sel.notest) + { + if(fast) + { + vmovq(qword[addr * 2 + (size_t)m_local.gd->vm], src1); + vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2], src1); + vmovq(qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2], src2); + vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2], src2); + } + else + { + WritePixel(src1, addr, 0, 0, psm); + WritePixel(src1, addr, 1, 1, psm); + WritePixel(src1, addr, 2, 2, psm); + WritePixel(src1, addr, 3, 3, psm); + WritePixel(src2, addr, 4, 0, psm); + WritePixel(src2, addr, 5, 1, psm); + WritePixel(src2, addr, 6, 2, psm); + WritePixel(src2, addr, 7, 3, psm); + } + } + else + { + // cascade tests? + + if(fast) + { + test(mask, 0x0000000f << (fz * 8)); + je("@f"); + vmovq(qword[addr * 2 + (size_t)m_local.gd->vm], src1); + L("@@"); + + test(mask, 0x000000f0 << (fz * 8)); + je("@f"); + vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 8 * 2], src1); + L("@@"); + + test(mask, 0x000f0000 << (fz * 8)); + je("@f"); + vmovq(qword[addr * 2 + (size_t)m_local.gd->vm + 16 * 2], src2); + L("@@"); + + test(mask, 0x00f00000 << (fz * 8)); + je("@f"); + vmovhps(qword[addr * 2 + (size_t)m_local.gd->vm + 24 * 2], src2); + L("@@"); + + // vmaskmovps? + } + else + { + test(mask, 0x00000003 << (fz * 8)); + je("@f"); + WritePixel(src1, addr, 0, 0, psm); + L("@@"); + + test(mask, 0x0000000c << (fz * 8)); + je("@f"); + WritePixel(src1, addr, 1, 1, psm); + L("@@"); + + test(mask, 0x00000030 << (fz * 8)); + je("@f"); + WritePixel(src1, addr, 2, 2, psm); + L("@@"); + + test(mask, 0x000000c0 << (fz * 8)); + je("@f"); + WritePixel(src1, addr, 3, 3, psm); + L("@@"); + + test(mask, 0x00030000 << (fz * 8)); + je("@f"); + WritePixel(src2, addr, 4, 0, psm); + L("@@"); + + test(mask, 0x000c0000 << (fz * 8)); + je("@f"); + WritePixel(src2, addr, 5, 1, psm); + L("@@"); + + test(mask, 0x00300000 << (fz * 8)); + je("@f"); + WritePixel(src2, addr, 6, 2, psm); + L("@@"); + + test(mask, 0x00c00000 << (fz * 8)); + je("@f"); + WritePixel(src2, addr, 7, 3, psm); + L("@@"); + } + } +} + +static const int s_offsets[] = {0, 2, 8, 10, 16, 18, 24, 26}; + +void GSDrawScanlineCodeGenerator::WritePixel(const Xmm& src, const Reg32& addr, uint8 i, uint8 j, int psm) +{ + Address dst = ptr[addr * 2 + (size_t)m_local.gd->vm + s_offsets[i] * 2]; + + switch(psm) + { + case 0: + if(j == 0) vmovd(dst, src); + else vpextrd(dst, src, j); + break; + case 1: + if(j == 0) vmovd(eax, src); + else vpextrd(eax, src, j); + xor(eax, dst); + and(eax, 0xffffff); + xor(dst, eax); + break; + case 2: + if(j == 0) vmovd(eax, src); + else vpextrw(eax, src, j * 2); + mov(dst, ax); + break; + } +} + +void GSDrawScanlineCodeGenerator::ReadTexel(int pixels, int mip_offset) +{ + // in + // ymm5 = addr00 + // ymm2 = addr01 + // ymm0 = addr10 + // ymm3 = addr11 + // ebx = m_local.tex[0] (!m_sel.mmin) + // ebp = m_local.tex (m_sel.mmin) + // edx = m_local.clut (m_sel.tlu) + + // out + // ymm6 = c00 + // ymm4 = c01 + // ymm1 = c10 + // ymm5 = c11 + + ASSERT(pixels == 1 || pixels == 4); + + mip_offset *= sizeof(void*); + + const GSVector8i* lod_i = m_sel.lcm ? &m_local.gd->lod.i : &m_local.temp.lod.i; + + if(m_sel.mmin && !m_sel.lcm) + { + const int r[] = {5, 6, 2, 4, 0, 1, 3, 5}; + const int t[] = {1, 4, 5, 1, 2, 5, 0, 2}; + + for(int i = 0; i < pixels; i++) + { + Ymm src = Ymm(r[i * 2 + 0]); + Ymm dst = Ymm(r[i * 2 + 1]); + Ymm t1 = Ymm(t[i * 2 + 0]); + Ymm t2 = Ymm(t[i * 2 + 1]); + + vextracti128(Xmm(t1.getIdx()), src, 1); + + for(uint8 j = 0; j < 4; j++) + { + mov(ebx, ptr[&lod_i->u32[j + 0]]); + mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); + + ReadTexel(dst, src, j); + + mov(ebx, ptr[&lod_i->u32[j + 4]]); + mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); + + ReadTexel(t2, t1, j); + } + + vinserti128(dst, dst, t2, 1); + } + } + else + { + const int r[] = {5, 6, 2, 4, 0, 1, 3, 5}; + const int t[] = {1, 4, 5, 1, 2, 5, 0, 2}; + + if(m_sel.mmin && m_sel.lcm) + { + mov(ebx, ptr[&lod_i->u32[0]]); + mov(ebx, ptr[ebp + ebx * sizeof(void*) + mip_offset]); + } + + for(int i = 0; i < pixels; i++) + { + Ymm src = Ymm(r[i * 2 + 0]); + Ymm dst = Ymm(r[i * 2 + 1]); + Ymm t1 = Ymm(t[i * 2 + 0]); + Ymm t2 = Ymm(t[i * 2 + 1]); + + if(!m_sel.tlu) + { + vpcmpeqd(t1, t1); + vpgatherdd(dst, ptr[ebx + src * 4], t1); + } + else + { + vextracti128(Xmm(t1.getIdx()), src, 1); + + for(uint8 j = 0; j < 4; j++) + { + ReadTexel(dst, src, j); + ReadTexel(t2, t1, j); + } + + vinserti128(dst, dst, t2, 1); + /* + vpcmpeqd(t1, t1); + vpgatherdd(t2, ptr[ebx + src * 1], t1); // either this 1x scale, or the latency of two dependendent gathers are too slow + vpslld(t2, 24); + vpsrld(t2, 24); + vpcmpeqd(t1, t1); + vpgatherdd(dst, ptr[edx + t2 * 4], t1); + */ + } + } + } +} + +void GSDrawScanlineCodeGenerator::ReadTexel(const Ymm& dst, const Ymm& addr, uint8 i) +{ + ASSERT(i < 4); + + const Address& src = m_sel.tlu ? ptr[edx + eax * 4] : ptr[ebx + eax * 4]; + + if(i == 0) vmovd(eax, Xmm(addr.getIdx())); + else vpextrd(eax, Xmm(addr.getIdx()), i); + + if(m_sel.tlu) movzx(eax, byte[ebx + eax]); + + if(i == 0) vmovd(Xmm(dst.getIdx()), src); + else vpinsrd(Xmm(dst.getIdx()), src, i); +} + + #endif \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx.cpp pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx.cpp 2013-06-23 10:46:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawScanlineCodeGenerator.x86.avx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -2330,7 +2330,9 @@ if(m_sel.fpsm == 2) { vpxor(xmm0, xmm0); - vpsrld(xmm1, xmm2, 15); + //vpsrld(xmm1, xmm2, 15); + vpslld(xmm1, xmm2, 16); + vpsrad(xmm1, 31); vpcmpeqd(xmm1, xmm0); } else diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanline.cpp pcsx2-1.4.0/plugins/GSdx/GSDrawScanline.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDrawScanline.cpp 2014-09-16 03:37:06.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDrawScanline.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1148,7 +1148,8 @@ { if(sel.fpsm == 2) { - test |= fd.srl32(15) == GSVector8i::zero(); + // test |= fd.srl32(15) == GSVector8i::zero(); + test |= fd.sll32(16).sra32(31) == GSVector8i::zero(); } else { @@ -1159,7 +1160,7 @@ { if(sel.fpsm == 2) { - test |= fd.sll32(16).sra32(31); + test |= fd.sll32(16).sra32(31); // == GSVector8i::xffffffff(); } else { @@ -2264,7 +2265,8 @@ { if(sel.fpsm == 2) { - test |= fd.srl32(15) == GSVector4i::zero(); + // test |= fd.srl32(15) == GSVector4i::zero(); + test |= fd.sll32(16).sra32(31) == GSVector4i::zero(); } else { @@ -2275,7 +2277,7 @@ { if(sel.fpsm == 2) { - test |= fd.sll32(16).sra32(31); + test |= fd.sll32(16).sra32(31); // == GSVector4i::xffffffff(); } else { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDump.cpp pcsx2-1.4.0/plugins/GSdx/GSDump.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDump.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDump.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -25,6 +25,7 @@ GSDump::GSDump() : m_gs(NULL) , m_frames(0) + , m_extra_frames(0) { } @@ -38,6 +39,7 @@ m_gs = fopen((fn + ".gs").c_str(), "wb"); m_frames = 0; + m_extra_frames = 2; if(m_gs) { @@ -83,9 +85,11 @@ fputc(1, m_gs); fputc(field, m_gs); - if((++m_frames & 1) == 0 && last) + if((++m_frames & 1) == 0 && last && (m_extra_frames <= 0)) { Close(); + } else if (last) { + m_extra_frames--; } } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSDump.h pcsx2-1.4.0/plugins/GSdx/GSDump.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSDump.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSDump.h 2016-01-05 17:28:08.000000000 +0000 @@ -47,6 +47,7 @@ { FILE* m_gs; int m_frames; + int m_extra_frames; public: GSDump(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.cpp pcsx2-1.4.0/plugins/GSdx/GSdx.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.cpp 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,6 +21,7 @@ #include "stdafx.h" #include "GSdx.h" +#include "GS.h" static void* s_hModule; @@ -127,20 +128,36 @@ m_ini = "inis/GSdx.ini"; m_section = "Settings"; - m_gs_renderers.push_back(GSSetting(0, "Direct3D9", "Hardware")); - m_gs_renderers.push_back(GSSetting(1, "Direct3D9", "Software")); - m_gs_renderers.push_back(GSSetting(14, "Direct3D9", "OpenCL")); - m_gs_renderers.push_back(GSSetting(2, "Direct3D9", "Null")); - m_gs_renderers.push_back(GSSetting(3, "Direct3D", "Hardware")); - m_gs_renderers.push_back(GSSetting(4, "Direct3D", "Software")); - m_gs_renderers.push_back(GSSetting(15, "Direct3D", "OpenCL")); - m_gs_renderers.push_back(GSSetting(5, "Direct3D", "Null")); - m_gs_renderers.push_back(GSSetting(10, "Null", "Software")); - m_gs_renderers.push_back(GSSetting(16, "Null", "OpenCL")); - m_gs_renderers.push_back(GSSetting(11, "Null", "Null")); - m_gs_renderers.push_back(GSSetting(12, "OpenGL", "Hardware")); - m_gs_renderers.push_back(GSSetting(13, "OpenGL", "Software")); - m_gs_renderers.push_back(GSSetting(17, "OpenGL", "OpenCL")); +#ifdef _WINDOWS + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL_HW), "OpenGL", "Hardware")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX1011_HW), "Direct3D11", "Hardware")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX9_HW), "Direct3D9", "Hardware")); + + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL_SW), "OpenGL", "Software")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX1011_SW), "Direct3D11", "Software")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX9_SW), "Direct3D9", "Software")); + +#ifdef _DEBUG + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX9_Null), "Direct3D9", "Null")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX1011_Null), "Direct3D11", "Null")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::Null_SW), "Null", "Software")); +#endif +#else // Linux + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL_HW), "OpenGL", "Hardware")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL_SW), "OpenGL", "Software")); +#endif + + // The null renderer goes third, it has use for benchmarking purposes in a release build + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::Null_Null), "None", "Core Benchmark")); + +#ifdef ENABLE_OPENCL + // OpenCL stuff goes last + // FIXME openCL isn't attached to a device (could be impacted by the window management stuff however) + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX9_OpenCL), "Direct3D9", "OpenCL")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::DX1011_OpenCL), "Direct3D11", "OpenCL")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::Null_OpenCL), "Null", "OpenCL")); + m_gs_renderers.push_back(GSSetting(static_cast(GSRendererType::OGL_OpenCL), "OpenGL", "OpenCL")); +#endif m_gs_interlace.push_back(GSSetting(0, "None", "")); m_gs_interlace.push_back(GSSetting(1, "Weave tff", "saw-tooth")); @@ -155,19 +172,52 @@ m_gs_aspectratio.push_back(GSSetting(1, "4:3", "")); m_gs_aspectratio.push_back(GSSetting(2, "16:9", "")); - m_gs_upscale_multiplier.push_back(GSSetting(1, "Custom", "")); + m_gs_upscale_multiplier.push_back(GSSetting(1, "Native", "")); m_gs_upscale_multiplier.push_back(GSSetting(2, "2x Native", "")); m_gs_upscale_multiplier.push_back(GSSetting(3, "3x Native", "")); m_gs_upscale_multiplier.push_back(GSSetting(4, "4x Native", "")); m_gs_upscale_multiplier.push_back(GSSetting(5, "5x Native", "")); m_gs_upscale_multiplier.push_back(GSSetting(6, "6x Native", "")); + m_gs_upscale_multiplier.push_back(GSSetting(8, "8x Native", "")); + m_gs_upscale_multiplier.push_back(GSSetting(0, "Custom", "")); - m_gs_max_anisotropy.push_back(GSSetting(1, "1x", "")); + m_gs_max_anisotropy.push_back(GSSetting(0, "Off", "")); m_gs_max_anisotropy.push_back(GSSetting(2, "2x", "")); m_gs_max_anisotropy.push_back(GSSetting(4, "4x", "")); m_gs_max_anisotropy.push_back(GSSetting(8, "8x", "")); m_gs_max_anisotropy.push_back(GSSetting(16, "16x", "")); + m_gs_filter.push_back(GSSetting(0, "Nearest", "")); + m_gs_filter.push_back(GSSetting(1, "Bilinear", "Forced")); + m_gs_filter.push_back(GSSetting(2, "Bilinear", "PS2")); + + m_gs_gl_ext.push_back(GSSetting(-1, "Auto", "")); + m_gs_gl_ext.push_back(GSSetting(0, "Force-Disabled", "")); + m_gs_gl_ext.push_back(GSSetting(1, "Force-Enabled", "")); + + m_gs_hack.push_back(GSSetting(0, "Off", "")); + m_gs_hack.push_back(GSSetting(1, "Half", "")); + m_gs_hack.push_back(GSSetting(2, "Full", "")); + + m_gs_crc_level.push_back(GSSetting(0 , "None", "Debug")); + m_gs_crc_level.push_back(GSSetting(1 , "Minimum", "Debug")); + m_gs_crc_level.push_back(GSSetting(2 , "Partial", "OpenGL Recommended")); + m_gs_crc_level.push_back(GSSetting(3 , "Full", "Safest")); + m_gs_crc_level.push_back(GSSetting(4 , "Aggressive", "")); + + m_gs_acc_blend_level.push_back(GSSetting(0, "None", "Fastest")); + m_gs_acc_blend_level.push_back(GSSetting(1, "Basic", "Recommended low-end PC")); + m_gs_acc_blend_level.push_back(GSSetting(2, "Medium", "")); + m_gs_acc_blend_level.push_back(GSSetting(3, "High", "Recommended high-end PC")); + m_gs_acc_blend_level.push_back(GSSetting(4, "Full", "Very Slow")); + m_gs_acc_blend_level.push_back(GSSetting(5, "Ultra", "Ultra Slow")); + + m_gs_tv_shaders.push_back(GSSetting(0, "None", "")); + m_gs_tv_shaders.push_back(GSSetting(1, "Scanline filter", "")); + m_gs_tv_shaders.push_back(GSSetting(2, "Diagonal filter", "")); + m_gs_tv_shaders.push_back(GSSetting(3, "Triangular filter", "")); + m_gs_tv_shaders.push_back(GSSetting(4, "Wave filter", "")); + m_gpu_renderers.push_back(GSSetting(0, "Direct3D9 (Software)", "")); m_gpu_renderers.push_back(GSSetting(1, "Direct3D11 (Software)", "")); m_gpu_renderers.push_back(GSSetting(2, "SDL 1.3 (Software)", "")); @@ -216,13 +266,13 @@ m_configuration_map["inifile"] = inifile_value; // Load config from file - char value[255]; - char key[255]; + char value[256]; + char key[256]; FILE* f = fopen(lpFileName, "r"); if (f == NULL) return; // FIXME print a nice message - while( fscanf(f, "%s = %s\n", key, value) != EOF ) { + while( fscanf(f, "%255s = %255s\n", key, value) != EOF ) { std::string key_s(key); std::string value_s(value); m_configuration_map[key_s] = value_s; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.def pcsx2-1.4.0/plugins/GSdx/GSdx.def --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.def 2014-05-02 21:03:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.def 2016-01-05 17:28:08.000000000 +0000 @@ -5,8 +5,7 @@ PS2EgetLibType PS2EgetLibName PS2EgetLibVersion2 - PS2EgetCpuPlatform - PS2EsetEmuVersion + PS2EgetCpuPlatform GSsetBaseMem GSinit GSshutdown @@ -69,4 +68,4 @@ GPUfreeze GPUshowScreenPic GPUgetScreenPic - GPUcursor \ No newline at end of file + GPUcursor diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.h pcsx2-1.4.0/plugins/GSdx/GSdx.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.h 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.h 2016-01-05 17:28:08.000000000 +0000 @@ -63,6 +63,12 @@ vector m_gs_aspectratio; vector m_gs_upscale_multiplier; vector m_gs_max_anisotropy; + vector m_gs_filter; + vector m_gs_gl_ext; + vector m_gs_hack; + vector m_gs_crc_level; + vector m_gs_acc_blend_level; + vector m_gs_tv_shaders; vector m_gpu_renderers; vector m_gpu_filter; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.props pcsx2-1.4.0/plugins/GSdx/GSdx.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.props 2011-02-19 10:57:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,24 +1,20 @@ - - - <_PropertySheetDisplayName>GSdx - $(ProjectName)-$(SSEtype) - - - - Level4 - 4995;4324;%(DisableSpecificWarnings) - - - JITProfiling.lib;d3d11_beta.lib;d3dx11.lib;d3d10.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;cg.lib;cgGL.lib;glut32.lib;glew32.lib;%(AdditionalDependencies) - ./vtune;%(AdditionalLibraryDirectories) - d3d9.dll;d3dx9_41.dll;d3d10.dll;d3d10_1.dll;d3dx10_41.dll;d3d11.dll;d3d11_beta.dll;d3dx11_41.dll;%(DelayLoadDLLs) - - - - - - - "$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)." - - + + + <_PropertySheetDisplayName>GSdx + $(ProjectName)-$(SSEtype) + + + + Level4 + 4995;4324;%(DisableSpecificWarnings) + + + JITProfiling.lib;d3d11_beta.lib;d3dx11.lib;d3d10.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;ddraw.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;cg.lib;cgGL.lib;glut32.lib;glew32.lib;%(AdditionalDependencies) + ./vtune;%(AdditionalLibraryDirectories) + d3d9.dll;d3dx9_41.dll;d3d10.dll;d3d10_1.dll;d3dx10_41.dll;d3d11.dll;d3d11_beta.dll;d3dx11_41.dll;%(DelayLoadDLLs) + + + "$(SolutionDir)common\vsprops\preBuild.cmd" "$(ProjectDir)." + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.rc pcsx2-1.4.0/plugins/GSdx/GSdx.rc --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,374 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#ifndef APSTUDIO_INVOKED +#include "targetver.h" +#endif +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#ifndef APSTUDIO_INVOKED\r\n" + "#include ""targetver.h""\r\n" + "#endif\r\n" + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""res/tfx.fx""\r\n" + "#include ""res/convert.fx""\r\n" + "#include ""res/interlace.fx""\r\n" + "#include ""res/merge.fx""\r\n" + "#include ""res/fxaa.fx""\r\n" + "#include ""res/cs.fx""\r\n" + "#include ""res/shadeboost.fx""\r\n" + "#include ""res/tfx.cl""\r\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// RCDATA +// + +IDR_TFX_FX RCDATA "res\\tfx.fx" +IDR_CONVERT_FX RCDATA "res\\convert.fx" +IDR_INTERLACE_FX RCDATA "res\\interlace.fx" +IDR_MERGE_FX RCDATA "res\\merge.fx" +IDR_FXAA_FX RCDATA "res\\fxaa.fx" +IDR_CS_FX RCDATA "res\\cs.fx" +IDR_SHADEBOOST_FX RCDATA "res\\shadeboost.fx" +IDR_TFX_CL RCDATA "res\\tfx.cl" + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_LOGO9 BITMAP "res\\logo9.bmp" +IDB_LOGO10 BITMAP "res\\logo10.bmp" +IDB_LOGOGL BITMAP "res\\logo-ogl.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_HACKS DIALOGEX 0, 0, 161, 200 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Hacks Configuration" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,88,181,66,14 + GROUPBOX "USE AT YOUR OWN RISK!",IDC_STATIC,7,7,147,171,0,WS_EX_TRANSPARENT + CONTROL "Preload Data Frame",IDC_PRELOAD_GS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,8 + RTEXT "MSAA:",IDC_STATIC,62,20,22,8 + RTEXT "Skipdraw:",IDC_STATIC,52,36,32,8 + EDITTEXT IDC_SKIPDRAWHACKEDIT,88,33,58,14,ES_RIGHT | ES_AUTOHSCROLL + CONTROL "",IDC_SKIPDRAWHACK,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,113,34,11,14 + CONTROL "Alpha",IDC_ALPHAHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,88,64,34,8 + CONTROL "Half-pixel Offset",IDC_OFFSETHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,51,70,8 + COMBOBOX IDC_MSAACB,88,17,58,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Wild Arms Offset",IDC_WILDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,64,70,8 + CONTROL "Alpha Stencil",IDC_ALPHASTENCIL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,77,57,8 + CONTROL "Align Sprite",IDC_ALIGN_SPRITE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,88,51,58,8 + RTEXT "TC Offset X:",IDC_STATIC,40,146,44,8 + EDITTEXT IDC_TCOFFSETX2,88,144,58,14,ES_RIGHT | ES_AUTOHSCROLL + CONTROL "",IDC_TCOFFSETX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,135,145,11,14 + EDITTEXT IDC_TCOFFSETY2,88,162,58,14,ES_RIGHT | ES_AUTOHSCROLL + CONTROL "",IDC_TCOFFSETY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,135,162,11,14 + RTEXT "TC Offset Y:",IDC_STATIC,36,165,48,8 + COMBOBOX IDC_ROUND_SPRITE,88,109,58,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "Round Sprite:",IDC_STATIC,39,111,45,8 + RTEXT "Sprite:",IDC_STATIC,62,127,22,8 + COMBOBOX IDC_SPRITEHACK,88,125,58,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_SHADER DIALOGEX 0, 0, 248, 250 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Shader Configuration" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,69,231,50,14 + DEFPUSHBUTTON "Cancel",IDCANCEL,126,231,50,14 + CONTROL "Enable Shade Boost",IDC_SHADEBOOST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,46,90,10 + LTEXT "Saturation",IDC_STATIC,15,64,34,8 + CONTROL "",IDC_SATURATION_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,62,165,15 + LTEXT "Brightness",IDC_STATIC,15,89,34,8 + CONTROL "",IDC_BRIGHTNESS_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,87,165,15 + LTEXT "Contrast",IDC_STATIC,15,114,29,8 + CONTROL "",IDC_CONTRAST_SLIDER,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,55,111,165,15 + RTEXT "100",IDC_SATURATION_TEXT,220,64,15,8 + RTEXT "100",IDC_BRIGHTNESS_TEXT,220,89,15,8 + RTEXT "100",IDC_CONTRAST_TEXT,220,114,15,8 + CONTROL "Enable FXAA",IDC_FXAA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,188,6,54,10 + CONTROL "Enable External Shader",IDC_SHADER_FX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,156,90,10 + LTEXT "External Shader",IDC_SHADER_FX_TEXT,15,171,75,8 + EDITTEXT IDC_SHADER_FX_EDIT,15,179,170,14,ES_AUTOHSCROLL + PUSHBUTTON "Browse",IDC_SHADER_FX_BUTTON,196,179,36,14 + LTEXT "External Shader Config",IDC_SHADER_FX_CONF_TEXT,15,196,75,8 + PUSHBUTTON "Browse",IDC_SHADER_FX_CONF_BUTTON,196,204,36,14 + EDITTEXT IDC_SHADER_FX_CONF_EDIT,15,204,170,14,ES_AUTOHSCROLL + COMBOBOX IDC_TVSHADER,75,4,76,14,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "TV Shader (F7):",IDC_STATIC,15,6,55,8 + GROUPBOX "Shade-Boost Settings",IDC_STATIC,6,28,236,106,BS_CENTER + GROUPBOX "External Shader Settings",IDC_STATIC,6,138,236,88,BS_CENTER +END + +IDD_CAPTURE DIALOGEX 0, 0, 279, 71 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Capture settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_FILENAME,7,7,207,14,ES_AUTOHSCROLL + PUSHBUTTON "Browse...",IDC_BROWSE,222,7,50,14 + COMBOBOX IDC_CODECS,7,27,207,122,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Config...",IDC_CONFIGURE,222,26,50,14 + LTEXT "Size:",IDC_STATIC,6,50,16,8 + EDITTEXT IDC_WIDTH,30,47,31,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + EDITTEXT IDC_HEIGHT,64,47,31,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + PUSHBUTTON "Cancel",IDCANCEL,169,47,50,14 + DEFPUSHBUTTON "OK",IDOK,221,47,50,14 + COMBOBOX IDC_COLORSPACE,102,47,48,32,CBS_DROPDOWNLIST | WS_TABSTOP +END + +IDD_GPUCONFIG DIALOGEX 0, 0, 189, 199 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Settings..." +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL IDB_LOGO9,IDC_LOGO9,"Static",SS_BITMAP,7,7,175,44 + LTEXT "Resolution:",IDC_STATIC,7,59,37,8 + COMBOBOX IDC_RESOLUTION,80,57,102,125,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Renderer:",IDC_STATIC,7,74,34,8 + COMBOBOX IDC_RENDERER,80,72,102,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Texture Filter (Del):",IDC_STATIC,7,90,64,8 + COMBOBOX IDC_FILTER,80,87,102,98,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Dithering (End):",IDC_STATIC,7,105,52,8 + COMBOBOX IDC_DITHERING,80,102,102,98,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Aspect Ratio (PgDn):",IDC_STATIC,7,120,68,8 + COMBOBOX IDC_ASPECTRATIO,80,117,102,98,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Extra Rend. Threads:",IDC_STATIC,7,157,70,8 + EDITTEXT IDC_SWTHREADS_EDIT,80,155,35,13,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SWTHREADS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,99,161,11,14 + DEFPUSHBUTTON "OK",IDOK,43,178,50,14 + PUSHBUTTON "Cancel",IDCANCEL,96,178,50,14 + CONTROL IDB_LOGO10,IDC_LOGO11,"Static",SS_BITMAP,7,7,173,42 + LTEXT "Internal Resolution:",IDC_STATIC,7,135,64,8 + COMBOBOX IDC_SCALE,80,132,102,98,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Windowed",IDC_WINDOWED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,129,157,49,10 +END + +IDD_CONFIG DIALOGEX 0, 0, 243, 373 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "GSdx Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL IDB_LOGO10,IDC_LOGO11,"Static",SS_BITMAP | SS_REALSIZECONTROL,35,6,173,42 + CONTROL IDB_LOGO9,IDC_LOGO9,"Static",SS_BITMAP | SS_REALSIZECONTROL,34,6,175,44 + CONTROL IDB_LOGOGL,IDC_LOGOGL,"Static",SS_BITMAP | SS_REALSIZECONTROL,34,6,175,44 + LTEXT "Adapter:",IDC_STATIC,6,57,30,8 + COMBOBOX IDC_ADAPTER,71,55,166,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Renderer:",IDC_STATIC,6,72,34,8 + COMBOBOX IDC_RENDERER,71,70,166,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "OpenCL Device:",IDC_OPENCL_TEXT,6,102,53,8 + COMBOBOX IDC_OPENCL_DEVICE,71,100,166,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Interlacing (F5):",IDC_STATIC,6,87,52,8 + COMBOBOX IDC_INTERLACE,71,85,166,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Hardware Mode Settings",IDC_STATIC,6,116,231,152,BS_CENTER + CONTROL "Allow 8-Bit Textures",IDC_PALTEX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,128,90,10 + LTEXT "Internal Resolution:",IDC_UPSCALE_MULTIPLIER_TEXT,22,144,79,8 + COMBOBOX IDC_UPSCALE_MULTIPLIER,105,142,127,98,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Custom Resolution:",IDC_CUSTOM_TEXT,22,160,79,8 + EDITTEXT IDC_RESX_EDIT,105,158,61,13,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_RESX,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,145,158,11,14 + EDITTEXT IDC_RESY_EDIT,171,158,61,13,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_RESY,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,221,158,11,14 + LTEXT "Texture Filtering:",IDC_FILTER_TEXT,22,176,79,8 + COMBOBOX IDC_FILTER,105,174,127,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Anisotropic Filtering:",IDC_AFCOMBO_TEXT,22,192,79,8 + COMBOBOX IDC_AFCOMBO,105,190,127,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "CRC Hack Level:",IDC_CRC_LEVEL_TEXT,22,208,79,8 + COMBOBOX IDC_CRC_LEVEL,105,206,127,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Enable HW Hacks",IDC_HACKS_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,223,71,10 + PUSHBUTTON "Configure Hacks",IDC_HACKSBUTTON,105,221,127,14 + CONTROL "Accurate Date",IDC_ACCURATE_DATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,239,67,8 + CONTROL "Hardware Depth",IDC_TC_DEPTH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,239,72,8 + LTEXT "Blending Unit Accuracy:",IDC_ACCURATE_BLEND_UNIT_TEXT,22,252,79,10 + COMBOBOX IDC_ACCURATE_BLEND_UNIT,105,251,127,63,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Logarithmic Z",IDC_LOGZ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,239,90,8 + CONTROL "Alpha Correction",IDC_FBA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,105,239,74,8 + CONTROL "Mipmapping",IDC_MIPMAP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,304,90,8 + GROUPBOX "Software Mode Settings",IDC_STATIC,6,275,231,40,BS_CENTER + CONTROL "Edge Anti-aliasing (AA1)",IDC_AA1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,287,91,10 + LTEXT "Rendering threads:",IDC_SWTHREADS_TEXT,124,288,80,8 + EDITTEXT IDC_SWTHREADS_EDIT,198,286,34,13,ES_AUTOHSCROLL | ES_NUMBER + CONTROL "",IDC_SWTHREADS,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,221,285,11,14 + PUSHBUTTON "Configure",IDC_SHADEBUTTON,105,323,127,14 + LTEXT "Shader Configuration:",IDC_STATIC,11,326,90,14 + DEFPUSHBUTTON "OK",IDOK,69,353,50,14 + PUSHBUTTON "Cancel",IDCANCEL,125,353,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_HACKS, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 154 + VERTGUIDE, 14 + VERTGUIDE, 84 + VERTGUIDE, 88 + VERTGUIDE, 146 + TOPMARGIN, 7 + BOTTOMMARGIN, 177 + HORZGUIDE, 51 + HORZGUIDE, 64 + HORZGUIDE, 77 + END + + IDD_SHADER, DIALOG + BEGIN + LEFTMARGIN, 6 + RIGHTMARGIN, 242 + TOPMARGIN, 7 + BOTTOMMARGIN, 244 + END + + IDD_CAPTURE, DIALOG + BEGIN + VERTGUIDE, 6 + VERTGUIDE, 30 + VERTGUIDE, 271 + HORZGUIDE, 54 + END + + IDD_GPUCONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 182 + VERTGUIDE, 80 + VERTGUIDE, 182 + TOPMARGIN, 7 + BOTTOMMARGIN, 192 + END + + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 6 + RIGHTMARGIN, 237 + VERTGUIDE, 11 + VERTGUIDE, 22 + VERTGUIDE, 101 + VERTGUIDE, 105 + VERTGUIDE, 232 + TOPMARGIN, 6 + BOTTOMMARGIN, 367 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,1,9 + PRODUCTVERSION 1,0,1,9 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "Comments", "http://guliverkli.sf.net/" + VALUE "CompanyName", "Gabest" + VALUE "FileDescription", "GS plugin for ps2 emulators" + VALUE "FileVersion", "1, 0, 1, 9" + VALUE "InternalName", "GSdx.dll" + VALUE "LegalCopyright", "Copyright (c) 2007-2008 Gabest. All rights reserved." + VALUE "OriginalFilename", "GSdx.dll" + VALUE "ProductName", "GSdx" + VALUE "ProductVersion", "1, 0, 1, 9" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "res/tfx.fx" +#include "res/convert.fx" +#include "res/interlace.fx" +#include "res/merge.fx" +#include "res/fxaa.fx" +#include "res/cs.fx" +#include "res/shadeboost.fx" +#include "res/tfx.cl" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.vcxproj pcsx2-1.4.0/plugins/GSdx/GSdx.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.vcxproj 2014-01-09 21:51:42.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,1718 +1,2099 @@ - - - - - Debug AVX - Win32 - - - Debug AVX - x64 - - - Debug SSE2 - Win32 - - - Debug SSE2 - x64 - - - Debug SSE4 - Win32 - - - Debug SSE4 - x64 - - - Debug SSSE3 - Win32 - - - Debug SSSE3 - x64 - - - Release AVX - Win32 - - - Release AVX - x64 - - - Release SSE2 - Win32 - - - Release SSE2 - x64 - - - Release SSE4 - Win32 - - - Release SSE4 - x64 - - - Release SSSE3 - Win32 - - - Release SSSE3 - x64 - - - - GSdx - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} - GSdx - Win32Proj - - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - true - - - DynamicLibrary - MultiByte - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - - - - - - - - AssemblyAndSourceCode - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - - AssemblyAndSourceCode - - - - - - - - - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug AVX2 + Win32 + + + Debug AVX2 + x64 + + + Debug AVX + Win32 + + + Debug AVX + x64 + + + Debug + Win32 + + + Debug + x64 + + + Debug SSE4 + Win32 + + + Debug SSE4 + x64 + + + Debug SSSE3 + Win32 + + + Debug SSSE3 + x64 + + + Release AVX2 + Win32 + + + Release AVX2 + x64 + + + Release AVX + Win32 + + + Release AVX + x64 + + + Release + Win32 + + + Release + x64 + + + Release SSE4 + Win32 + + + Release SSE4 + x64 + + + Release SSSE3 + Win32 + + + Release SSSE3 + x64 + + + + GSdx + {18E42F6F-3A62-41EE-B42F-79366C4F1E95} + GSdx + Win32Proj + + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + true + $(DefaultPlatformToolset)_xp + + + DynamicLibrary + MultiByte + false + $(DefaultPlatformToolset)_xp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) + + + + + Use + + + + + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) + + + + + Use + + + + + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) + + + + + Use + + + + + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) + + + + + Use + + + + + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) + + + + + X64 + + + Use + + + + + + + + + X64 + + + Use + + + + + + + + + X64 + + + Use + + + + + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) + + + + + Use + + + .\GSdx.def + MachineX86 + $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) + + + + + X64 + + + Use + + + + + + + + + X64 + + + Use + + + + + + + + + X64 + + + Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + + AssemblyAndSourceCode + AssemblyAndSourceCode + AssemblyAndSourceCode + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + true + true + true + true + true + true + true + true + true + true + true + true + true + true + + + + + + + + + + + + + + + + + + + + + + AssemblyAndSourceCode + AssemblyAndSourceCode + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {d80d4a75-c385-41bd-ae62-83d2e2b595a7} + false + + + + + + + + + + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.vcxproj.filters pcsx2-1.4.0/plugins/GSdx/GSdx.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx.vcxproj.filters 2013-08-05 20:25:25.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -1,743 +1,772 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - {6d029896-e5fd-4b46-8576-52d7d90125e6} - - - {3c2d6a4a-ff5a-420d-a0f7-4c17cc5c19df} - - - {d6fcc23b-bc82-4390-8a9a-928910bc4123} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Resource Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Xbyak - - - Xbyak - - - Xbyak - - - Xbyak - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - Resource Files - - - Shaders - - - Shaders - - - Shaders - - - Shaders - - - Baseclasses - - - Baseclasses - - - - Shaders - - - Shaders - - - Shaders - - - - - Resource Files - - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + {6d029896-e5fd-4b46-8576-52d7d90125e6} + + + {3c2d6a4a-ff5a-420d-a0f7-4c17cc5c19df} + + + {d6fcc23b-bc82-4390-8a9a-928910bc4123} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Resource Files + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Baseclasses + + + Xbyak + + + Xbyak + + + Xbyak + + + Xbyak + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + Resource Files + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Baseclasses + + + Baseclasses + + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Resource Files + + + + + Resource Files + + + + + Resource Files + + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2012.vcxproj pcsx2-1.4.0/plugins/GSdx/GSdx_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,2075 +0,0 @@ - - - - - Debug AVX2 - Win32 - - - Debug AVX2 - x64 - - - Debug AVX - Win32 - - - Debug AVX - x64 - - - Debug SSE2 - Win32 - - - Debug SSE2 - x64 - - - Debug SSE4 - Win32 - - - Debug SSE4 - x64 - - - Debug SSSE3 - Win32 - - - Debug SSSE3 - x64 - - - Release AVX2 - Win32 - - - Release AVX2 - x64 - - - Release AVX - Win32 - - - Release AVX - x64 - - - Release SSE2 - Win32 - - - Release SSE2 - x64 - - - Release SSE4 - Win32 - - - Release SSE4 - x64 - - - Release SSSE3 - Win32 - - - Release SSSE3 - x64 - - - - GSdx - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} - GSdx - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - false - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - Use - - - .\GSdx.def - MachineX86 - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - - - - - AssemblyAndSourceCode - AssemblyAndSourceCode - AssemblyAndSourceCode - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - - AssemblyAndSourceCode - AssemblyAndSourceCode - - - - - - - - - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/GSdx/GSdx_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,752 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - {6d029896-e5fd-4b46-8576-52d7d90125e6} - - - {3c2d6a4a-ff5a-420d-a0f7-4c17cc5c19df} - - - {d6fcc23b-bc82-4390-8a9a-928910bc4123} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Resource Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Xbyak - - - Xbyak - - - Xbyak - - - Xbyak - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - Resource Files - - - Shaders - - - Shaders - - - Shaders - - - Shaders - - - Baseclasses - - - Baseclasses - - - - Shaders - - - Shaders - - - Shaders - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2013.vcxproj pcsx2-1.4.0/plugins/GSdx/GSdx_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2013.vcxproj 2014-09-19 20:48:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,2088 +0,0 @@ - - - - - Debug AVX2 - Win32 - - - Debug AVX2 - x64 - - - Debug AVX - Win32 - - - Debug AVX - x64 - - - Debug SSE2 - Win32 - - - Debug SSE2 - x64 - - - Debug SSE4 - Win32 - - - Debug SSE4 - x64 - - - Debug SSSE3 - Win32 - - - Debug SSSE3 - x64 - - - Release AVX2 - Win32 - - - Release AVX2 - x64 - - - Release AVX - Win32 - - - Release AVX - x64 - - - Release SSE2 - Win32 - - - Release SSE2 - x64 - - - Release SSE4 - Win32 - - - Release SSE4 - x64 - - - Release SSSE3 - Win32 - - - Release SSSE3 - x64 - - - - GSdx - {18E42F6F-3A62-41EE-B42F-79366C4F1E95} - GSdx - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - false - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) - - - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Debug;%(AdditionalLibraryDirectories) - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) - - - - - Use - - - .\GSdx.def - MachineX86 - $(SvnRootDir)\deps\$(Platform)\Release;%(AdditionalLibraryDirectories) - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - X64 - - - Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - - - - - AssemblyAndSourceCode - AssemblyAndSourceCode - AssemblyAndSourceCode - - - - - - - - - - - - - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - true - true - true - true - true - true - true - true - true - true - true - true - true - true - - - - - - - - - - - - - - - - - - - - - - AssemblyAndSourceCode - AssemblyAndSourceCode - - - - - - - - - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/GSdx/GSdx_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSdx_vs2013.vcxproj.filters 2014-09-15 13:49:16.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSdx_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,761 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - {6d029896-e5fd-4b46-8576-52d7d90125e6} - - - {3c2d6a4a-ff5a-420d-a0f7-4c17cc5c19df} - - - {d6fcc23b-bc82-4390-8a9a-928910bc4123} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Resource Files - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Baseclasses - - - Xbyak - - - Xbyak - - - Xbyak - - - Xbyak - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - Resource Files - - - Shaders - - - Shaders - - - Shaders - - - Shaders - - - Baseclasses - - - Baseclasses - - - - Shaders - - - Shaders - - - Shaders - - - Shaders - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSFunctionMap.h pcsx2-1.4.0/plugins/GSdx/GSFunctionMap.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSFunctionMap.h 2013-06-24 01:11:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSFunctionMap.h 2016-01-05 17:28:08.000000000 +0000 @@ -125,7 +125,7 @@ KEY key = i->first; ActivePtr* p = i->second; - if(p->frames > 0) + if(p->frames && ttpf) { uint64 tpp = p->actual > 0 ? p->ticks / p->actual : 0; uint64 tpf = p->frames > 0 ? p->ticks / p->frames : 0; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GS.h pcsx2-1.4.0/plugins/GSdx/GS.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GS.h 2013-04-14 10:48:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GS.h 2016-01-05 17:28:08.000000000 +0000 @@ -21,7 +21,7 @@ #pragma once -#define PLUGIN_VERSION 16 +#define PLUGIN_VERSION 0 #define VM_SIZE 4194304 #define PAGE_SIZE 8192 @@ -216,6 +216,40 @@ AFAIL_RGB_ONLY = 3, }; +enum class GSRendererType : int8_t +{ + Undefined = -1, + + DX9_HW = 0, + DX9_SW = 1, + DX9_OpenCL = 14, + DX9_Null = 2, + + DX1011_HW = 3, + DX1011_SW = 4, + DX1011_OpenCL = 15, + DX1011_Null = 5, + + Null_HW = 9, + Null_SW = 10, + Null_OpenCL = 16, + Null_Null = 11, + + OGL_HW = 12, + OGL_SW = 13, + OGL_OpenCL = 17, + +#ifdef _WINDOWS + Default = DX9_HW +#else + // Use ogl renderer as default otherwise it crash at startup + // GSRenderOGL only GSDeviceOGL (not GSDeviceNULL) + Default = OGL_HW +#endif + +}; + + #define REG32(name) \ union name \ { \ @@ -523,6 +557,7 @@ // opaque => output will be Cs/As __forceinline bool IsOpaque() const {return ((A == B || (C == 2 && FIX == 0)) && D == 0) || (A == 0 && B == D && C == 2 && FIX == 0x80);} __forceinline bool IsOpaque(int amin, int amax) const {return ((A == B || amax == 0) && D == 0) || (A == 0 && B == D && amin == 0x80 && amax == 0x80);} + __forceinline bool IsCd() { return (A == B) && (D == 1);} REG_END2 REG64_(GIFReg, BITBLTBUF) @@ -1245,3 +1280,7 @@ struct GSFreezeData {int size; uint8* data;}; enum stateType {ST_WRITE, ST_TRANSFER, ST_VSYNC}; + +// default gs config settings +#define DEFAULT_EXTRA_RENDERING_THREADS 2 + diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLinuxDialog.cpp pcsx2-1.4.0/plugins/GSdx/GSLinuxDialog.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLinuxDialog.cpp 2014-12-07 22:40:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLinuxDialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,164 +21,423 @@ #include "stdafx.h" #include +#include "GS.h" #include "GSdx.h" #include "GSLinuxLogo.h" +#include "GSSetting.h" -GtkWidget* CreateRenderComboBox() +void AddTooltip(GtkWidget* w, int idc) { - GtkWidget *render_combo_box; - int renderer_box_position = 0; + gtk_widget_set_tooltip_text(w, dialog_message(idc)); +} + +void AddTooltip(GtkWidget* w1, GtkWidget* w2, int idc) +{ + AddTooltip(w1, idc); + AddTooltip(w2, idc); +} + +GtkWidget* left_label(const char* lbl) +{ + GtkWidget* w = gtk_label_new(lbl); +#if GTK_MAJOR_VERSION >= 3 + gtk_widget_set_halign(w, GTK_ALIGN_START); +#else + gtk_misc_set_alignment(GTK_MISC(w),0.0,0.5); +#endif + return w; +} + +void CB_ChangedComboBox(GtkComboBox *combo, gpointer user_data) +{ + int p = gtk_combo_box_get_active(combo); + vector* s = (vector*)g_object_get_data(G_OBJECT(combo), "Settings"); + + try { + theApp.SetConfig((char*)user_data, s->at(p).id); + } catch (...) { + } +} - render_combo_box = gtk_combo_box_text_new (); +GtkWidget* CreateComboBoxFromVector(const vector& s, const char* opt_name, int opt_default = 0) +{ + GtkWidget* combo_box = gtk_combo_box_text_new(); + int opt_value = theApp.GetConfig(opt_name, opt_default); + int opt_position = 0; - for(auto s = theApp.m_gs_renderers.begin(); s != theApp.m_gs_renderers.end(); s++) + for(size_t i = 0; i < s.size(); i++) { - string label = s->name; + string label = s[i].name; - if(!s->note.empty()) label += format(" (%s)", s->note.c_str()); + if(!s[i].note.empty()) label += format(" (%s)", s[i].note.c_str()); - // Add some tags to ease users selection - switch (s->id) { - // Supported opengl - case 12: - case 13: - case 17: - break; - - // (dev only) for any NULL stuff - case 10: - case 11: - case 16: - label += " (debug only)"; - break; - - default: - continue; - } + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), label.c_str()); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(render_combo_box), label.c_str()); + if ((int)s[i].id == opt_value) + opt_position = i; } - switch (theApp.GetConfig("renderer", 0)) { - // Note the value are based on m_gs_renderers vector on GSdx.cpp - case 10: renderer_box_position = 0; break; - case 16: renderer_box_position = 1; break; - case 11: renderer_box_position = 2; break; - case 12: renderer_box_position = 3; break; - case 13: renderer_box_position = 4; break; - case 17: renderer_box_position = 5; break; + gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), opt_position); - // Fallback to openGL SW - default: renderer_box_position = 4; break; - } - gtk_combo_box_set_active(GTK_COMBO_BOX(render_combo_box), renderer_box_position); - return render_combo_box; + g_signal_connect(combo_box, "changed", G_CALLBACK(CB_ChangedComboBox), const_cast(opt_name)); + g_object_set_data(G_OBJECT(combo_box), "Settings", (void*)&s); + + return combo_box; } -GtkWidget* CreateInterlaceComboBox() +void CB_PreEntryActived(GtkEntry *entry, gchar* preedit, gpointer user_data) { - GtkWidget *combo_box; - combo_box = gtk_combo_box_text_new (); + int hex_value = 0; + sscanf(preedit,"%X",&hex_value); - for(size_t i = 0; i < theApp.m_gs_interlace.size(); i++) - { - const GSSetting& s = theApp.m_gs_interlace[i]; + theApp.SetConfig((char*)user_data, hex_value); +} + +void CB_EntryActived(GtkEntry *entry, gpointer user_data) +{ + int hex_value = 0; + const gchar *data = gtk_entry_get_text(entry); + sscanf(data,"%X",&hex_value); - string label = s.name; + theApp.SetConfig((char*)user_data, hex_value); +} - if(!s.note.empty()) label += format(" (%s)", s.note.c_str()); +GtkWidget* CreateTextBox(const char* opt_name, int opt_default = 0) { + GtkWidget* entry = gtk_entry_new(); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), label.c_str()); - } + int hex_value = theApp.GetConfig(opt_name, opt_default); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), theApp.GetConfig("interlace", 0)); - return combo_box; + gchar* data=(gchar *)g_malloc(sizeof(gchar)*40); + sprintf(data,"%X", hex_value); + gtk_entry_set_text(GTK_ENTRY(entry),data); + g_free(data); + + g_signal_connect(entry, "activate", G_CALLBACK(CB_EntryActived), const_cast(opt_name)); + // Note it doesn't seem to work as expected + g_signal_connect(entry, "preedit-changed", G_CALLBACK(CB_PreEntryActived), const_cast(opt_name)); + + return entry; +} + +void CB_ToggleCheckBox(GtkToggleButton *togglebutton, gpointer user_data) +{ + theApp.SetConfig((char*)user_data, (int)gtk_toggle_button_get_active(togglebutton)); } -GtkWidget* CreateMsaaComboBox() +GtkWidget* CreateCheckBox(const char* label, const char* opt_name, bool opt_default = false) { - GtkWidget *combo_box; - combo_box = gtk_combo_box_text_new (); + GtkWidget* check = gtk_check_button_new_with_label(label); - // For now, let's just put in the same vaues that show up in the windows combo box. - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "Custom"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "2x"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "3x"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "4x"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "5x"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "6x"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), theApp.GetConfig(opt_name, opt_default)); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), theApp.GetConfig("upscale_multiplier", 2)-1); - return combo_box; + g_signal_connect(check, "toggled", G_CALLBACK(CB_ToggleCheckBox), const_cast(opt_name)); + + return check; +} + +void CB_SpinButton(GtkSpinButton *spin, gpointer user_data) +{ + theApp.SetConfig((char*)user_data, (int)gtk_spin_button_get_value(spin)); } -GtkWidget* CreateFilterComboBox() +GtkWidget* CreateSpinButton(double min, double max, const char* opt_name, int opt_default = 0) { - GtkWidget *combo_box; - combo_box = gtk_combo_box_text_new (); + GtkWidget* spin = gtk_spin_button_new_with_range(min, max, 1); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "Off"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "Normal"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box), "Forced"); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), theApp.GetConfig(opt_name, opt_default)); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box), theApp.GetConfig("filter", 0)); - return combo_box; + g_signal_connect(spin, "value-changed", G_CALLBACK(CB_SpinButton), const_cast(opt_name)); + + return spin; } -void set_hex_entry(GtkWidget *text_box, int hex_value) { - gchar* data=(gchar *)g_malloc(sizeof(gchar)*40); - sprintf(data,"%X", hex_value); - gtk_entry_set_text(GTK_ENTRY(text_box),data); +void CB_RangeChanged(GtkRange* range, gpointer user_data) +{ + theApp.SetConfig((char*)user_data, (int)gtk_range_get_value(range)); } -int get_hex_entry(GtkWidget *text_box) { - int hex_value = 0; - const gchar *data = gtk_entry_get_text(GTK_ENTRY(text_box)); +GtkWidget* CreateScale(const char* opt_name, int opt_default = 0) +{ +#if GTK_MAJOR_VERSION < 3 + GtkWidget* scale = gtk_hscale_new_with_range(0, 200, 10); +#else + GtkWidget* scale = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 200, 10); +#endif - sscanf(data,"%X",&hex_value); + gtk_scale_set_value_pos(GTK_SCALE(scale), GTK_POS_RIGHT); + gtk_range_set_value(GTK_RANGE(scale), theApp.GetConfig(opt_name, opt_default)); + + g_signal_connect(scale, "value-changed", G_CALLBACK(CB_RangeChanged), const_cast(opt_name)); + + return scale; +} - return hex_value; +void CB_PickFile(GtkFileChooserButton *chooser, gpointer user_data) +{ + theApp.SetConfig((char*)user_data, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser))); } -GtkWidget* CreateGlComboBox(const char* option) +GtkWidget* CreateFileChooser(GtkFileChooserAction action, const char* label, const char* opt_name, const char* opt_default) { - GtkWidget* combo; - combo = gtk_combo_box_text_new(); + GtkWidget* chooser = gtk_file_chooser_button_new(label, action); + + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser), theApp.GetConfig(opt_name, opt_default).c_str()); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "Auto"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "Force-Disabled"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "Force-Enabled"); + g_signal_connect(chooser, "file-set", G_CALLBACK(CB_PickFile), const_cast(opt_name)); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo), theApp.GetConfig(option, -1) + 1); - return combo; + return chooser; } -bool RunLinuxDialog() +static int s_table_line = 0; +static void InsertWidgetInTable(GtkWidget* table, GtkWidget *left, GtkWidget *right = NULL, GtkWidget *third = NULL) { + GtkAttachOptions opt = (GtkAttachOptions)(GTK_EXPAND | GTK_FILL); // default + guint l_xpad = GTK_IS_CHECK_BUTTON(left) ? 0 : 22; + guint r_xpad = 0; + guint ypad = 0; + if (!left) { + gtk_table_attach(GTK_TABLE(table), right, 1, 2, s_table_line, s_table_line+1, opt, opt, r_xpad, ypad); + } else if (!right) { + gtk_table_attach(GTK_TABLE(table), left, 0, 1, s_table_line, s_table_line+1, opt, opt, l_xpad, ypad); + } else if (right == left) { + gtk_table_attach(GTK_TABLE(table), left, 0, 2, s_table_line, s_table_line+1, opt, opt, r_xpad, ypad); + } else { + gtk_table_attach(GTK_TABLE(table), left, 0, 1, s_table_line, s_table_line+1, opt, opt, l_xpad, ypad); + gtk_table_attach(GTK_TABLE(table), right, 1, 2, s_table_line, s_table_line+1, opt, opt, r_xpad, ypad); + } + if (third) { + gtk_table_attach(GTK_TABLE(table), third, 2, 3, s_table_line, s_table_line+1, opt, opt, r_xpad, ypad); + } + s_table_line++; +} + +GtkWidget* CreateTableInBox(GtkWidget* parent_box, const char* frame_title, int row, int col) { + GtkWidget* table = gtk_table_new(row, col, false); + GtkWidget* container = (frame_title) ? gtk_frame_new (frame_title) : gtk_vbox_new(false, 5); + gtk_container_add(GTK_CONTAINER(container), table); + gtk_container_add(GTK_CONTAINER(parent_box), container); + + return table; +} + +void populate_hw_table(GtkWidget* hw_table) { - GtkWidget *dialog; - GtkWidget *main_box, *central_box, *advance_box, *res_box, *hw_box, *sw_box, *shader_box; - GtkWidget *native_box, *fsaa_box, *resxy_box, *renderer_box, *interlace_box, *threads_box, *filter_box; - GtkWidget *hw_table, *shader_table, *res_frame, *hw_frame, *sw_frame, *shader_frame; - GtkWidget *interlace_combo_box, *threads_spin; - GtkWidget *interlace_label, *threads_label, *native_label, *fsaa_label, *rexy_label, *render_label, *filter_label; - - GtkWidget *fsaa_combo_box, *render_combo_box, *filter_combo_box; - GtkWidget *shader, *shader_conf, *shader_label, *shader_conf_label; - GtkWidget *shadeboost_check, *paltex_check, *fba_check, *aa_check, *native_res_check, *fxaa_check, *shaderfx_check; - GtkWidget *sb_contrast, *sb_brightness, *sb_saturation; - GtkWidget *resx_spin, *resy_spin; - - GtkWidget *hack_table, *hack_skipdraw_label, *hack_box, *hack_frame; - GtkWidget *hack_alpha_check, *hack_date_check, *hack_offset_check, *hack_skipdraw_spin, *hack_msaa_check, *hack_sprite_check, * hack_wild_check, *hack_enble_check, *hack_logz_check; - GtkWidget *hack_tco_label, *hack_tco_entry; - GtkWidget *gl_box, *gl_frame, *gl_table; + GtkWidget* filter_label = left_label("Texture Filtering:"); + GtkWidget* filter_combo_box = CreateComboBoxFromVector(theApp.m_gs_filter, "filter", 2); - GtkWidget *notebook, *page_label[2]; + GtkWidget* fsaa_label = left_label("Internal Resolution:"); + GtkWidget* fsaa_combo_box = CreateComboBoxFromVector(theApp.m_gs_upscale_multiplier, "upscale_multiplier", 1); - int return_value; + GtkWidget* af_label = left_label("Anisotropic Filtering:"); + GtkWidget* af_combo_box = CreateComboBoxFromVector(theApp.m_gs_max_anisotropy, "MaxAnisotropy", 0); + + GtkWidget* crc_label = left_label("Automatic CRC level:"); + GtkWidget* crc_combo_box = CreateComboBoxFromVector(theApp.m_gs_crc_level, "crc_hack_level", 3); + + GtkWidget* paltex_check = CreateCheckBox("Allow 8 bits textures", "paltex"); + GtkWidget* acc_date_check = CreateCheckBox("Accurate Date", "accurate_date", false); + GtkWidget* tc_depth_check = CreateCheckBox("Full Depth Emulation", "texture_cache_depth", true); + + GtkWidget* acc_bld_label = left_label("Blending Unit Accuracy:"); + GtkWidget* acc_bld_combo_box = CreateComboBoxFromVector(theApp.m_gs_acc_blend_level, "accurate_blending_unit", 1); + + // Some helper string + AddTooltip(paltex_check, IDC_PALTEX); + AddTooltip(acc_date_check, IDC_ACCURATE_DATE); + AddTooltip(crc_label, crc_combo_box, IDC_CRC_LEVEL); + AddTooltip(acc_bld_label, acc_bld_combo_box, IDC_ACCURATE_BLEND_UNIT); + AddTooltip(tc_depth_check, IDC_TC_DEPTH); + AddTooltip(filter_label, filter_combo_box, IDC_FILTER); + AddTooltip(af_label, af_combo_box, IDC_AFCOMBO); + + s_table_line = 0; + InsertWidgetInTable(hw_table, paltex_check, tc_depth_check); + InsertWidgetInTable(hw_table, acc_date_check); + InsertWidgetInTable(hw_table, fsaa_label, fsaa_combo_box); + InsertWidgetInTable(hw_table, filter_label, filter_combo_box); + InsertWidgetInTable(hw_table, af_label, af_combo_box); + InsertWidgetInTable(hw_table, acc_bld_label, acc_bld_combo_box); + InsertWidgetInTable(hw_table, crc_label, crc_combo_box); +} + +void populate_gl_table(GtkWidget* gl_table) +{ + GtkWidget* gl_bs_label = left_label("Buffer Storage:"); + GtkWidget* gl_bs_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_buffer_storage", -1); + GtkWidget* gl_sso_label = left_label("Separate Shader:"); + GtkWidget* gl_sso_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_separate_shader_objects", -1); + GtkWidget* gl_gs_label = left_label("Geometry Shader:"); + GtkWidget* gl_gs_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_geometry_shader", -1); + GtkWidget* gl_ils_label = left_label("Image Load Store:"); + GtkWidget* gl_ils_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_shader_image_load_store", -1); + GtkWidget* gl_cc_label = left_label("Clip Control (depth accuracy):"); + GtkWidget* gl_cc_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_clip_control", -1); + GtkWidget* gl_tb_label = left_label("Texture Barrier:"); + GtkWidget* gl_tb_combo = CreateComboBoxFromVector(theApp.m_gs_gl_ext, "override_GL_ARB_texture_barrier", -1); + + s_table_line = 0; + InsertWidgetInTable(gl_table , gl_gs_label , gl_gs_combo); + InsertWidgetInTable(gl_table , gl_bs_label , gl_bs_combo); + InsertWidgetInTable(gl_table , gl_sso_label , gl_sso_combo); + InsertWidgetInTable(gl_table , gl_ils_label , gl_ils_combo); + InsertWidgetInTable(gl_table , gl_cc_label , gl_cc_combo); + InsertWidgetInTable(gl_table , gl_tb_label , gl_tb_combo); +} + +void populate_sw_table(GtkWidget* sw_table) +{ + GtkWidget* threads_label = left_label("Extra rendering threads:"); + GtkWidget* threads_spin = CreateSpinButton(0, 32, "extrathreads", DEFAULT_EXTRA_RENDERING_THREADS); + + GtkWidget* aa_check = CreateCheckBox("Edge anti-aliasing (AA1)", "aa1"); + GtkWidget* mipmap_check = CreateCheckBox("Mipmap", "mipmap", true); + + AddTooltip(aa_check, IDC_AA1); + AddTooltip(mipmap_check, IDC_MIPMAP); + AddTooltip(threads_label, threads_spin, IDC_SWTHREADS); + + s_table_line = 0; + InsertWidgetInTable(sw_table , threads_label , threads_spin); + InsertWidgetInTable(sw_table , aa_check, mipmap_check); +} + +void populate_shader_table(GtkWidget* shader_table) +{ + GtkWidget* shader = CreateFileChooser(GTK_FILE_CHOOSER_ACTION_OPEN, "Select an external shader", "shaderfx_glsl", "dummy.glsl"); + GtkWidget* shader_conf = CreateFileChooser(GTK_FILE_CHOOSER_ACTION_OPEN, "Then select a config", "shaderfx_conf", "dummy.ini"); + GtkWidget* shader_label = left_label("External shader glsl"); + GtkWidget* shader_conf_label = left_label("External shader conf"); + + GtkWidget* shadeboost_check = CreateCheckBox("Shade boost", "ShadeBoost"); + GtkWidget* fxaa_check = CreateCheckBox("Fxaa shader", "fxaa"); + GtkWidget* shaderfx_check = CreateCheckBox("External shader", "shaderfx"); - GdkPixbuf* logo_pixmap; - GtkWidget *logo_image; + GtkWidget* tv_shader_label = left_label("TV shader:"); + GtkWidget* tv_shader = CreateComboBoxFromVector(theApp.m_gs_tv_shaders, "TVShader"); + + // Shadeboost scale + GtkWidget* sb_brightness = CreateScale("ShadeBoost_Brightness", 50); + GtkWidget* sb_brightness_label = left_label("Shade Boost Brightness:"); + + GtkWidget* sb_contrast = CreateScale("ShadeBoost_Contrast", 50); + GtkWidget* sb_contrast_label = left_label("Shade Boost Contrast:"); + + GtkWidget* sb_saturation = CreateScale("ShadeBoost_Saturation", 50); + GtkWidget* sb_saturation_label = left_label("Shade Boost Saturation:"); + + AddTooltip(shadeboost_check, IDC_SHADEBOOST); + AddTooltip(shaderfx_check, IDC_SHADER_FX); + AddTooltip(fxaa_check, IDC_FXAA); + + s_table_line = 0; + InsertWidgetInTable(shader_table , fxaa_check); + InsertWidgetInTable(shader_table , shadeboost_check); + InsertWidgetInTable(shader_table , sb_brightness_label , sb_brightness); + InsertWidgetInTable(shader_table , sb_contrast_label , sb_contrast); + InsertWidgetInTable(shader_table , sb_saturation_label , sb_saturation); + InsertWidgetInTable(shader_table , shaderfx_check); + InsertWidgetInTable(shader_table , shader_label , shader); + InsertWidgetInTable(shader_table , shader_conf_label , shader_conf); + InsertWidgetInTable(shader_table , tv_shader_label, tv_shader); +} + +void populate_hack_table(GtkWidget* hack_table) +{ + GtkWidget* hack_offset_check = CreateCheckBox("Half-pixel Offset Hack", "UserHacks_HalfPixelOffset"); + GtkWidget* hack_skipdraw_label = left_label("Skipdraw:"); + GtkWidget* hack_skipdraw_spin = CreateSpinButton(0, 1000, "UserHacks_SkipDraw"); + GtkWidget* hack_enble_check = CreateCheckBox("Enable User Hacks", "UserHacks"); + GtkWidget* hack_wild_check = CreateCheckBox("Wild Arms Hack", "UserHacks_WildHack"); + GtkWidget* hack_tco_label = left_label("Texture Offset: 0x"); + GtkWidget* hack_tco_entry = CreateTextBox("UserHacks_TCOffset"); + GtkWidget* align_sprite_check = CreateCheckBox("Align sprite hack", "UserHacks_align_sprite_X"); + GtkWidget* preload_gs_check = CreateCheckBox("Preload Frame", "preload_frame_with_gs_data"); + + GtkWidget* hack_sprite_box = CreateComboBoxFromVector(theApp.m_gs_hack, "UserHacks_SpriteHack"); + GtkWidget* hack_sprite_label = left_label("Alpha-Sprite Hack:"); + GtkWidget* stretch_hack_box = CreateComboBoxFromVector(theApp.m_gs_hack, "UserHacks_round_sprite_offset"); + GtkWidget* stretch_hack_label = left_label("Align Sprite Texture:"); + + // Reuse windows helper string :) + AddTooltip(hack_offset_check, IDC_OFFSETHACK); + AddTooltip(hack_skipdraw_label, IDC_SKIPDRAWHACK); + AddTooltip(hack_skipdraw_spin, IDC_SKIPDRAWHACK); + gtk_widget_set_tooltip_text(hack_enble_check, "Allows the use of the hack below"); + AddTooltip(hack_wild_check, IDC_WILDHACK); + AddTooltip(hack_sprite_label, hack_sprite_box, IDC_SPRITEHACK); + AddTooltip(hack_tco_label, IDC_TCOFFSETX); + AddTooltip(hack_tco_entry, IDC_TCOFFSETX); + AddTooltip(align_sprite_check, IDC_ALIGN_SPRITE); + AddTooltip(stretch_hack_label, stretch_hack_box, IDC_ROUND_SPRITE); + AddTooltip(preload_gs_check, IDC_PRELOAD_GS); + + + s_table_line = 0; + InsertWidgetInTable(hack_table , hack_enble_check); + InsertWidgetInTable(hack_table , hack_wild_check , align_sprite_check); + InsertWidgetInTable(hack_table , hack_offset_check , preload_gs_check); + InsertWidgetInTable(hack_table , hack_sprite_label , hack_sprite_box ); + InsertWidgetInTable(hack_table , stretch_hack_label , stretch_hack_box ); + InsertWidgetInTable(hack_table , hack_skipdraw_label , hack_skipdraw_spin); + InsertWidgetInTable(hack_table , hack_tco_label , hack_tco_entry); +} + +void populate_main_table(GtkWidget* main_table) +{ + GtkWidget* render_label = left_label("Renderer:"); + GtkWidget* render_combo_box = CreateComboBoxFromVector(theApp.m_gs_renderers, "Renderer", static_cast(GSRendererType::Default)); + GtkWidget* interlace_label = left_label("Interlacing (F5):"); + GtkWidget* interlace_combo_box = CreateComboBoxFromVector(theApp.m_gs_interlace, "interlace", 7); + + s_table_line = 0; + InsertWidgetInTable(main_table, render_label, render_combo_box); + InsertWidgetInTable(main_table, interlace_label, interlace_combo_box); +} + +void populate_debug_table(GtkWidget* debug_table) +{ + GtkWidget* glsl_debug_check = CreateCheckBox("GLSL compilation", "debug_glsl_shader"); + GtkWidget* gl_debug_check = CreateCheckBox("Print GL error", "debug_opengl"); + GtkWidget* gs_dump_check = CreateCheckBox("Dump GS data", "dump"); + GtkWidget* gs_save_check = CreateCheckBox("Save RT", "save"); + GtkWidget* gs_savef_check = CreateCheckBox("Save Frame", "savef"); + GtkWidget* gs_savet_check = CreateCheckBox("Save Texture", "savet"); + GtkWidget* gs_savez_check = CreateCheckBox("Save Depth", "savez"); + + GtkWidget* gs_saven_label = left_label("Start of Dump"); + GtkWidget* gs_saven_spin = CreateSpinButton(0, pow(10, 9), "saven"); + GtkWidget* gs_savel_label = left_label("Length of Dump"); + GtkWidget* gs_savel_spin = CreateSpinButton(0, pow(10, 5), "savel"); + + s_table_line = 0; + InsertWidgetInTable(debug_table, gl_debug_check, glsl_debug_check); + InsertWidgetInTable(debug_table, gs_dump_check); + InsertWidgetInTable(debug_table, gs_save_check, gs_savef_check); + InsertWidgetInTable(debug_table, gs_savet_check, gs_savez_check); + InsertWidgetInTable(debug_table, gs_saven_label, gs_saven_spin); + InsertWidgetInTable(debug_table, gs_savel_label, gs_savel_spin); +} + +void populate_record_table(GtkWidget* record_table) +{ + GtkWidget* capture_check = CreateCheckBox("Enable Recording (with F12)", "capture_enabled"); + GtkWidget* resxy_label = left_label("Resolution:"); + GtkWidget* resx_spin = CreateSpinButton(256, 8192, "capture_resx", 1280); + GtkWidget* resy_spin = CreateSpinButton(256, 8192, "capture_resy", 1024); + GtkWidget* threads_label = left_label("Saving Threads:"); + GtkWidget* threads_spin = CreateSpinButton(1, 32, "capture_threads", 4); + GtkWidget* out_dir_label = left_label("Output Directory:"); + GtkWidget* out_dir = CreateFileChooser(GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "Select a directory", "capture_out_dir", "/tmp"); + + InsertWidgetInTable(record_table , capture_check); + InsertWidgetInTable(record_table , resxy_label , resx_spin , resy_spin); + InsertWidgetInTable(record_table , threads_label , threads_spin); + InsertWidgetInTable(record_table , out_dir_label , out_dir); +} + +bool RunLinuxDialog() +{ + GtkWidget *dialog; + int return_value; /* Create the widgets */ dialog = gtk_dialog_new_with_buttons ( @@ -186,384 +445,68 @@ NULL, /* parent window*/ (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), "OK", GTK_RESPONSE_ACCEPT, - "Cancel", GTK_RESPONSE_REJECT, + // "Cancel", GTK_RESPONSE_REJECT, // Drop because it is too annoying to support call back this way NULL); // The main area for the whole dialog box. - main_box = gtk_vbox_new(false, 5); - central_box = gtk_vbox_new(false, 5); - advance_box = gtk_vbox_new(false, 5); - - // The Internal resolution frame and container. - res_box = gtk_vbox_new(false, 5); - res_frame = gtk_frame_new ("OpenGL Internal Resolution (can cause glitches)"); - gtk_container_add(GTK_CONTAINER(res_frame), res_box); - - // The extra shader setting frame/container/table - shader_box = gtk_vbox_new(false, 5); - shader_frame = gtk_frame_new("Custom Shader Settings"); - gtk_container_add(GTK_CONTAINER(shader_frame), shader_box); - shader_table = gtk_table_new(8,2, false); - gtk_container_add(GTK_CONTAINER(shader_box), shader_table); - - // The hardware mode frame, container, and table. - hw_box = gtk_vbox_new(false, 5); - hw_frame = gtk_frame_new ("Hardware Mode Settings"); - gtk_container_add(GTK_CONTAINER(hw_frame), hw_box); - hw_table = gtk_table_new(5,2, false); - gtk_container_add(GTK_CONTAINER(hw_box), hw_table); - - // The software mode frame and container. (It doesn't have enough in it for a table.) - sw_box = gtk_vbox_new(false, 5); - sw_frame = gtk_frame_new ("Software Mode Settings"); - gtk_container_add(GTK_CONTAINER(sw_frame), sw_box); - - // The hack frame and container. - hack_box = gtk_hbox_new(false, 5); - hack_frame = gtk_frame_new ("Hacks"); - gtk_container_add(GTK_CONTAINER(hack_frame), hack_box); - hack_table = gtk_table_new(3,3, false); - gtk_container_add(GTK_CONTAINER(hack_box), hack_table); + GtkWidget* main_box = gtk_vbox_new(false, 5); + GtkWidget* central_box = gtk_vbox_new(false, 5); + GtkWidget* advance_box = gtk_vbox_new(false, 5); + GtkWidget* debug_box = gtk_vbox_new(false, 5); // Grab a logo, to make things look nice. - logo_pixmap = gdk_pixbuf_from_pixdata(&gsdx_ogl_logo, false, NULL); - logo_image = gtk_image_new_from_pixbuf(logo_pixmap); + GdkPixbuf* logo_pixmap = gdk_pixbuf_from_pixdata(&gsdx_ogl_logo, false, NULL); + GtkWidget* logo_image = gtk_image_new_from_pixbuf(logo_pixmap); gtk_box_pack_start(GTK_BOX(main_box), logo_image, true, true, 0); - // Create the renderer combo box and label, and stash them in a box. - render_label = gtk_label_new ("Renderer:"); - render_combo_box = CreateRenderComboBox(); - renderer_box = gtk_hbox_new(false, 5); - // Use gtk_box_pack_start instead of gtk_container_add so it lines up nicely. - gtk_box_pack_start(GTK_BOX(renderer_box), render_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(renderer_box), render_combo_box, false, false, 5); - - // Create the interlace combo box and label, and stash them in a box. - interlace_label = gtk_label_new ("Interlacing (F5):"); - interlace_combo_box = CreateInterlaceComboBox(); - interlace_box = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(interlace_box), interlace_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(interlace_box), interlace_combo_box, false, false, 5); - - // Create the filter combo box. - filter_label = gtk_label_new ("Texture Filtering:"); - filter_combo_box = CreateFilterComboBox(); - filter_box = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(filter_box), filter_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(filter_box), filter_combo_box, false, false, 0); - - // Create the threading spin box and label, and stash them in a box. (Yes, we do a lot of that.) - threads_label = gtk_label_new("Extra rendering threads:"); - threads_spin = gtk_spin_button_new_with_range(0,100,1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(threads_spin), theApp.GetConfig("extrathreads", 0)); - threads_box = gtk_hbox_new(false, 0); - gtk_box_pack_start(GTK_BOX(threads_box), threads_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(threads_box), threads_spin, false, false, 5); - - // A bit of funkiness for the resolution box. - native_label = gtk_label_new("Original PS2 Resolution: "); - native_res_check = gtk_check_button_new_with_label("Native"); - native_box = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(native_box), native_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(native_box), native_res_check, false, false, 5); - - fsaa_label = gtk_label_new("Or Use Scaling:"); - fsaa_combo_box = CreateMsaaComboBox(); - fsaa_box = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(fsaa_box), fsaa_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(fsaa_box), fsaa_combo_box, false, false, 5); - - rexy_label = gtk_label_new("Custom Resolution:"); - resx_spin = gtk_spin_button_new_with_range(256,8192,1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(resx_spin), theApp.GetConfig("resx", 1024)); - resy_spin = gtk_spin_button_new_with_range(256,8192,1); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(resy_spin), theApp.GetConfig("resy", 1024)); - resxy_box = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(resxy_box), rexy_label, false, false, 5); - gtk_box_pack_start(GTK_BOX(resxy_box), resx_spin, false, false, 5); - gtk_box_pack_start(GTK_BOX(resxy_box), resy_spin, false, false, 5); - - // shader fx entry - shader = gtk_file_chooser_button_new("Select an external shader", GTK_FILE_CHOOSER_ACTION_OPEN); - shader_conf = gtk_file_chooser_button_new("Then select a config", GTK_FILE_CHOOSER_ACTION_OPEN); - shader_label = gtk_label_new("External shader glsl"); - shader_conf_label = gtk_label_new("External shader conf"); - - // Create our hack settings. - hack_alpha_check = gtk_check_button_new_with_label("Alpha Hack"); - hack_date_check = gtk_check_button_new_with_label("Date Hack"); - hack_offset_check = gtk_check_button_new_with_label("Offset Hack"); - hack_skipdraw_label = gtk_label_new("Skipdraw:"); - hack_skipdraw_spin = gtk_spin_button_new_with_range(0,1000,1); - hack_enble_check = gtk_check_button_new_with_label("Enable User Hacks"); - hack_wild_check = gtk_check_button_new_with_label("Wild arm Hack"); - hack_sprite_check = gtk_check_button_new_with_label("Sprite Hack"); - hack_msaa_check = gtk_check_button_new_with_label("Msaa Hack"); - hack_tco_label = gtk_label_new("Texture Offset: 0x"); - hack_tco_entry = gtk_entry_new(); - hack_logz_check = gtk_check_button_new_with_label("Log Depth Hack"); - - gtk_spin_button_set_value(GTK_SPIN_BUTTON(hack_skipdraw_spin), theApp.GetConfig("UserHacks_SkipDraw", 0)); - set_hex_entry(hack_tco_entry, theApp.GetConfig("UserHacks_TCOffset", 0)); - - // Tables are strange. The numbers are for their position: left, right, top, bottom. - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_alpha_check, 0, 1, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_offset_check, 1, 2, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_sprite_check, 0, 1, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_wild_check, 1, 2, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_logz_check, 0, 1, 2, 3); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_date_check, 1, 2, 2, 3); - // Note: MSAA is not implemented yet. I disable it to make the table square - //gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_msaa_check, 2, 3, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_skipdraw_label, 0, 1, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_skipdraw_spin, 1, 2, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_tco_label, 0, 1, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(hack_table), hack_tco_entry, 1, 2, 4, 5); - - // Create our checkboxes. - shadeboost_check = gtk_check_button_new_with_label("Shade boost"); - paltex_check = gtk_check_button_new_with_label("Allow 8 bits textures"); - fba_check = gtk_check_button_new_with_label("Alpha correction (FBA)"); - aa_check = gtk_check_button_new_with_label("Edge anti-aliasing (AA1)"); - fxaa_check = gtk_check_button_new_with_label("Fxaa shader"); - shaderfx_check = gtk_check_button_new_with_label("External shader"); - - // Set the checkboxes. - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shadeboost_check), theApp.GetConfig("shadeboost", 1)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(paltex_check), theApp.GetConfig("paltex", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fba_check), theApp.GetConfig("fba", 1)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(aa_check), theApp.GetConfig("aa1", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(fxaa_check), theApp.GetConfig("fxaa", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(shaderfx_check), theApp.GetConfig("shaderfx", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(native_res_check), theApp.GetConfig("nativeres", 0)); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_alpha_check), theApp.GetConfig("UserHacks_AlphaHack", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_offset_check), theApp.GetConfig("UserHacks_HalfPixelOffset", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_date_check), theApp.GetConfig("UserHacks_DateGL4", 0)); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_enble_check), theApp.GetConfig("UserHacks", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_msaa_check), theApp.GetConfig("UserHacks_MSAA", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_wild_check), theApp.GetConfig("UserHacks_WildHack", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_sprite_check), theApp.GetConfig("UserHacks_SpriteHack", 0)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hack_logz_check), theApp.GetConfig("logz", 1)); + GtkWidget* main_table = CreateTableInBox(main_box , NULL , 2 , 2); - // Shadeboost scale -#if GTK_MAJOR_VERSION < 3 - sb_brightness = gtk_hscale_new_with_range(0, 200, 10); -#else - sb_brightness = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 200, 10); -#endif - GtkWidget* sb_brightness_label = gtk_label_new("Shade Boost Brightness"); - gtk_scale_set_value_pos(GTK_SCALE(sb_brightness), GTK_POS_RIGHT); - gtk_range_set_value(GTK_RANGE(sb_brightness), theApp.GetConfig("ShadeBoost_Brightness", 50)); + GtkWidget* shader_table = CreateTableInBox(central_box , "Custom Shader Settings" , 9 , 2); + GtkWidget* hw_table = CreateTableInBox(central_box , "Hardware Mode Settings" , 7 , 2); + GtkWidget* sw_table = CreateTableInBox(central_box , "Software Mode Settings" , 2 , 2); -#if GTK_MAJOR_VERSION < 3 - sb_contrast = gtk_hscale_new_with_range(0, 200, 10); -#else - sb_contrast = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 200, 10); -#endif - GtkWidget* sb_contrast_label = gtk_label_new("Shade Boost Contrast"); - gtk_scale_set_value_pos(GTK_SCALE(sb_contrast), GTK_POS_RIGHT); - gtk_range_set_value(GTK_RANGE(sb_contrast), theApp.GetConfig("ShadeBoost_Contrast", 50)); + GtkWidget* hack_table = CreateTableInBox(advance_box , "Hacks" , 7 , 2); + GtkWidget* gl_table = CreateTableInBox(advance_box , "OpenGL Very Advanced Custom Settings" , 6 , 2); -#if GTK_MAJOR_VERSION < 3 - sb_saturation = gtk_hscale_new_with_range(0, 200, 10); -#else - sb_saturation = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 200, 10); -#endif - GtkWidget* sb_saturation_label = gtk_label_new("Shade Boost Saturation"); - gtk_scale_set_value_pos(GTK_SCALE(sb_saturation), GTK_POS_RIGHT); - gtk_range_set_value(GTK_RANGE(sb_saturation), theApp.GetConfig("ShadeBoost_Saturation", 50)); - - // external shader entry - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(shader), theApp.GetConfig("shaderfx_glsl", "dummy.glsl").c_str()); - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(shader_conf), theApp.GetConfig("shaderfx_conf", "dummy.ini").c_str()); - - // Populate all those boxes we created earlier with widgets. - gtk_container_add(GTK_CONTAINER(res_box), native_box); - gtk_container_add(GTK_CONTAINER(res_box), fsaa_box); - gtk_container_add(GTK_CONTAINER(res_box), resxy_box); - - gtk_container_add(GTK_CONTAINER(sw_box), threads_box); - gtk_container_add(GTK_CONTAINER(sw_box), aa_check); - - // Tables are strange. The numbers are for their position: left, right, top, bottom. - gtk_table_attach_defaults(GTK_TABLE(shader_table), fxaa_check, 0, 1, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shadeboost_check, 0, 1, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_brightness_label, 0, 1, 2, 3); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_brightness, 1, 2, 2, 3); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_contrast_label, 0, 1, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_contrast, 1, 2, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_saturation_label, 0, 1, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(shader_table), sb_saturation, 1, 2, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shaderfx_check, 0, 1, 5, 6); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shader_label, 0, 1, 6, 7); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shader, 1, 2, 6, 7); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shader_conf_label, 0, 1, 7, 8); - gtk_table_attach_defaults(GTK_TABLE(shader_table), shader_conf, 1, 2, 7, 8); - - // Tables are strange. The numbers are for their position: left, right, top, bottom. - gtk_table_attach_defaults(GTK_TABLE(hw_table), filter_box, 0, 1, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(hw_table), paltex_check, 0, 1, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(hw_table), fba_check, 1, 2, 1, 2); - - // The GL advance options - gl_box = gtk_vbox_new(false, 5); - gl_frame = gtk_frame_new ("OpenGL Very Advanced Custom Settings"); - gtk_container_add(GTK_CONTAINER(gl_frame), gl_box); - gl_table = gtk_table_new(10, 2, false); - gtk_container_add(GTK_CONTAINER(gl_box), gl_table); - - GtkWidget* gl_bs_label = gtk_label_new("Buffer Storage:"); - GtkWidget* gl_bs_combo = CreateGlComboBox("override_GL_ARB_buffer_storage"); - GtkWidget* gl_bt_label = gtk_label_new("Bindless Texture:"); - GtkWidget* gl_bt_combo = CreateGlComboBox("override_GL_ARB_bindless_texture"); - GtkWidget* gl_sso_label = gtk_label_new("Separate Shader:"); - GtkWidget* gl_sso_combo = CreateGlComboBox("override_GL_ARB_separate_shader_objects"); - GtkWidget* gl_ss_label = gtk_label_new("Shader Subroutine:"); - GtkWidget* gl_ss_combo = CreateGlComboBox("override_GL_ARB_shader_subroutine"); - GtkWidget* gl_gs_label = gtk_label_new("Geometry Shader:"); - GtkWidget* gl_gs_combo = CreateGlComboBox("override_geometry_shader"); - GtkWidget* gl_ils_label = gtk_label_new("Image Load Store:"); - GtkWidget* gl_ils_combo = CreateGlComboBox("override_GL_ARB_shader_image_load_store"); - GtkWidget* gl_cc_label = gtk_label_new("Clip Control (depth accuracy):"); - GtkWidget* gl_cc_combo = CreateGlComboBox("override_GL_ARB_clip_control"); - GtkWidget* gl_ct_label = gtk_label_new("Clear Texture:"); - GtkWidget* gl_ct_combo = CreateGlComboBox("override_GL_ARB_clear_texture"); - - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_gs_label, 0, 1, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_gs_combo, 1, 2, 0, 1); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_bs_label, 0, 1, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_bs_combo, 1, 2, 1, 2); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_bt_label, 0, 1, 2, 3); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_bt_combo, 1, 2, 2, 3); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_sso_label, 0, 1, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_sso_combo, 1, 2, 3, 4); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ss_label, 0, 1, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ss_combo, 1, 2, 4, 5); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ils_label, 0, 1, 5, 6); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ils_combo, 1, 2, 5, 6); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_cc_label, 0, 1, 6, 7); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_cc_combo, 1, 2, 6, 7); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ct_label, 0, 1, 7, 8); - gtk_table_attach_defaults(GTK_TABLE(gl_table), gl_ct_combo, 1, 2, 7, 8); - // those one are properly detected so no need a gui -#if 0 -override_GL_ARB_copy_image = -1 -override_GL_ARB_explicit_uniform_location = -1 -override_GL_ARB_gpu_shader5 = -1 -override_GL_ARB_shading_language_420pack = -1 -#endif + GtkWidget* record_table = CreateTableInBox(debug_box , "Recording Settings" , 4 , 3); + GtkWidget* debug_table = CreateTableInBox(debug_box , "OpenGL / GSdx Debug Settings" , 6 , 3); - // Handle some nice tab - notebook = gtk_notebook_new(); - page_label[0] = gtk_label_new("Global Setting"); - page_label[1] = gtk_label_new("Advance Setting"); + // Populate all the tables + populate_main_table(main_table); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), central_box, page_label[0]); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advance_box, page_label[1]); + populate_shader_table(shader_table); + populate_hw_table(hw_table); + populate_sw_table(sw_table); - // Put everything in the big box. - gtk_container_add(GTK_CONTAINER(main_box), renderer_box); - gtk_container_add(GTK_CONTAINER(main_box), interlace_box); - gtk_container_add(GTK_CONTAINER(main_box), notebook); + populate_hack_table(hack_table); + populate_gl_table(gl_table); - gtk_container_add(GTK_CONTAINER(central_box), res_frame); - gtk_container_add(GTK_CONTAINER(central_box), shader_frame); - gtk_container_add(GTK_CONTAINER(central_box), hw_frame); - gtk_container_add(GTK_CONTAINER(central_box), sw_frame); + populate_debug_table(debug_table); + populate_record_table(record_table); - gtk_container_add(GTK_CONTAINER(advance_box), hack_frame); - gtk_container_add(GTK_CONTAINER(advance_box), gl_frame); + // Handle some nice tab + GtkWidget* notebook = gtk_notebook_new(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), central_box, gtk_label_new("Global Setting")); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advance_box, gtk_label_new("Advance Setting")); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), debug_box , gtk_label_new("Debug/Recording Setting")); + + // Put everything in the big box. + gtk_container_add(GTK_CONTAINER(main_box), notebook); // Put the box in the dialog and show it to the world. gtk_container_add (GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), main_box); gtk_widget_show_all (dialog); return_value = gtk_dialog_run (GTK_DIALOG (dialog)); - if (return_value == GTK_RESPONSE_ACCEPT) - { - int mode_height = 0, mode_width = 0; - - mode_width = theApp.GetConfig("ModeWidth", 640); - mode_height = theApp.GetConfig("ModeHeight", 480); - theApp.SetConfig("ModeHeight", mode_height); - theApp.SetConfig("ModeWidth", mode_width); - - // Get all the settings from the dialog box. - if (gtk_combo_box_get_active(GTK_COMBO_BOX(render_combo_box)) != -1) { - // Note the value are based on m_gs_renderers vector on GSdx.cpp - switch (gtk_combo_box_get_active(GTK_COMBO_BOX(render_combo_box))) { - case 0: theApp.SetConfig("renderer", 10); break; - case 1: theApp.SetConfig("renderer", 16); break; - case 2: theApp.SetConfig("renderer", 11); break; - case 3: theApp.SetConfig("renderer", 12); break; - case 4: theApp.SetConfig("renderer", 13); break; - case 5: theApp.SetConfig("renderer", 17); break; - - // Fallback to SW opengl - default: theApp.SetConfig("renderer", 13); break; - } - } - - if (gtk_combo_box_get_active(GTK_COMBO_BOX(interlace_combo_box)) != -1) - theApp.SetConfig( "interlace", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(interlace_combo_box))); - - theApp.SetConfig("extrathreads", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(threads_spin))); - - theApp.SetConfig("filter", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(filter_combo_box))); - theApp.SetConfig("shadeboost", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(shadeboost_check))); - theApp.SetConfig("paltex", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(paltex_check))); - theApp.SetConfig("fba", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(fba_check))); - theApp.SetConfig("aa1", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(aa_check))); - theApp.SetConfig("fxaa", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(fxaa_check))); - theApp.SetConfig("shaderfx", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(shaderfx_check))); - theApp.SetConfig("nativeres", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(native_res_check))); - - theApp.SetConfig("shaderfx_glsl", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(shader))); - theApp.SetConfig("shaderfx_conf", gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(shader_conf))); - - theApp.SetConfig("ShadeBoost_Saturation", (int)gtk_range_get_value(GTK_RANGE(sb_saturation))); - theApp.SetConfig("ShadeBoost_Brightness", (int)gtk_range_get_value(GTK_RANGE(sb_brightness))); - theApp.SetConfig("ShadeBoost_Contrast", (int)gtk_range_get_value(GTK_RANGE(sb_contrast))); - - theApp.SetConfig("upscale_multiplier", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(fsaa_combo_box))+1); - theApp.SetConfig("resx", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(resx_spin))); - theApp.SetConfig("resy", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(resy_spin))); - - theApp.SetConfig("UserHacks_SkipDraw", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(hack_skipdraw_spin))); - theApp.SetConfig("UserHacks_HalfPixelOffset", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_offset_check))); - theApp.SetConfig("UserHacks_AlphaHack", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_alpha_check))); - theApp.SetConfig("logz", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_logz_check))); - theApp.SetConfig("UserHacks_DateGL4", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_date_check))); - - theApp.SetConfig("UserHacks_MSAA", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_msaa_check))); - theApp.SetConfig("UserHacks_WildHack", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_wild_check))); - theApp.SetConfig("UserHacks_SpriteHack", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_sprite_check))); - theApp.SetConfig("UserHacks", (int)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hack_enble_check))); - theApp.SetConfig("UserHacks_TCOffset", get_hex_entry(hack_tco_entry)); - - theApp.SetConfig("override_GL_ARB_clear_texture", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_ct_combo)) - 1); - theApp.SetConfig("override_GL_ARB_bindless_texture", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_bt_combo)) - 1); - theApp.SetConfig("override_GL_ARB_buffer_storage", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_bs_combo)) - 1); - theApp.SetConfig("override_GL_ARB_separate_shader_objects", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_sso_combo)) - 1); - theApp.SetConfig("override_GL_ARB_shader_subroutine", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_ss_combo)) - 1); - theApp.SetConfig("override_geometry_shader", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_gs_combo)) - 1); - theApp.SetConfig("override_GL_ARB_shader_image_load_store", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_ils_combo)) - 1); - theApp.SetConfig("override_GL_ARB_clip_control", (int)gtk_combo_box_get_active(GTK_COMBO_BOX(gl_cc_combo)) - 1); - - // NOT supported yet - theApp.SetConfig("msaa", 0); - - // Let's just be windowed for the moment. - theApp.SetConfig("windowed", 1); - - gtk_widget_destroy (dialog); - - return true; - } + // Compatibility & not supported option + int mode_width = theApp.GetConfig("ModeWidth", 640); + int mode_height = theApp.GetConfig("ModeHeight", 480); + theApp.SetConfig("ModeHeight", mode_height); + theApp.SetConfig("ModeWidth", mode_width); + theApp.SetConfig("msaa", 0); + theApp.SetConfig("windowed", 1); gtk_widget_destroy (dialog); - return false; + return (return_value == GTK_RESPONSE_ACCEPT); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLinuxLogo.h pcsx2-1.4.0/plugins/GSdx/GSLinuxLogo.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLinuxLogo.h 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLinuxLogo.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,6 +1,5 @@ /* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org + * Generated file * * 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 @@ -19,2652 +18,1600 @@ * */ -/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ +/* GdkPixbuf RGB C-Source image dump 1-byte-run-length-encoded */ #include +//gdk-pixbuf-csource res/logo-ogl.bmp --struct >! GSLinuxLogo.h + static const GdkPixdata gsdx_ogl_logo = { 0x47646b50, /* Pixbuf magic: 'GdkP' */ - 24 + 71939, /* header length + pixel_data length */ - 0x2010002, /* pixdata_type */ - 1048, /* rowstride */ + 24 + 43884, /* header length + pixel_data length */ + 0x2010001, /* pixdata_type */ + 786, /* rowstride */ 262, /* width */ 71, /* height */ /* pixel_data: */ - (unsigned char*)"\177\306M\223\377\322H\237\377\310E\227\377\303=\222\377\2513\200\377" - "\2521o\377\241)j\377\257&f\377\256*g\377\242(u\377\245\37g\377\244%l" - "\377\254/e\377\244\37`\377\2261c\377\217+e\377\2468i\377\2516q\377\225" - "@v\377\2216{\377\232,z\377\2328z\377\216.t\377\2200v\377\216/s\377\205" - "7v\377|-s\377|;a\377v,i\377\204*o\377~5v\377r-x\377\2031\204\377}6\177" - "\377z:}\377|\203\377cB\201\377r0t\377o6r\377" - "`D\205\377gA\205\377[\77\205\377^E}\377PFw\377U<\203\377W/\205\377L&" - "}\377\77$o\377\77/z\377H0t\377R(w\377R)v\377F0y\377L+k\377F0~\377D.\215" - "\377@+\204\377@7\210\37789\201\3776D{\377\216\377*C\227\377\35<\231\377#2\210\377'$z\377$" - "5~\37734\200\377>4\225\377A1\221\377@+\230\377<3\231\377:8\244\377A6" - "\243\37785\224\377G1\227\377>%\244\377=(\236\3776,\232\3771\36\243\377" - "2\30\224\3778\11\226\377\77\17\241\377@\35\222\3770\22\233\377/\23\234" - "\377-\32\242\3776\31\247\3771\16\246\3771\15\227\377/\22\234\377>\22" - "\232\3776\1\214\377A\0\214\377;\20\220\377C\14}\3779\5\210\3775\17}\377" - ":\10\204\377N\5\225\377D\0\204\377R\0\210\377^\2\215\377T\0\217\377S" - "\4\235\377Y\12\234\377T\14\216\377T\26\215\377R\23\226\377L\23\213\377" - "S\13\225\377Y\33\230\377S\3\214\377G\23\210\377J\33\204\377O\32\202\377" - "P\0v\377V\0p\377D\0m\377V\0q\377G\6}\377V\0j\377X\6w\377Y\20i\377K\1" - "r\377R\0{\377T\6l\377O\0m\377V\3x\377Z\14x\377S\11\211\377F\13\216\377" - "J\3\214\377Q\31\217\377R\40\231\377V*\241\377i\35\243\377Z/\242\377[" - "&\243\377Q)\254\377[&\252\377W1\252\377e+\240\377_4\244\377`0\250\377" - "]$\257\377g-\261\377e)\267\377c/\300\377j$\260\377k:\262\377sE\306\377" - "jK\273\377u\77\301\377pL\273\377zF\303\377mE\310\377r=\305\377x5\311" - "\377\177B\302\377\207/\313\377\2067\301\377x4\317\377\202>\322\377\201" - "+\311\377\1776\333\377\1778\324\377};\317\377\2029\317\377\2217\317\377" - "\2041\314\377\204>\306\377\203=\323\377\2160\324\377\231=\321\377\234" - "B\302\377\234>\327\377\246C\316\377\237%\337\377\2270\341\377\230\77" - "\352\377\245\77\355\377s\250L\345\377\262R\335\377\257S\353\377\255K" - "\344\377\253<\332\377\2110\265\377g\12\244\377:\0\200\377\2760\216\377" - "\311B\202\377\263C{\377\231\37k\377\177\2O\377q\0""8\377k\0""3\377e\0" - "6\377\\\0%\377[\0""2\377`\0\34\377]\0\36\377V\0#\377\\\0%\377X\0%\377" - "O\0#\377U\0!\377K\0%\377T\0""3\377Q\0+\377O\0*\377Q\0""1\377@\0\40\377" - "F\0\40\3775\0*\377.\0.\3771\0\37\377A\0\32\377:\0\"\3774\0""9\3772\0" - "@\377-\0@\3770\0E\377F\0B\377.\6-\3771\5.\377A\0.\377A\0B\377=\17C\377" - "<\4A\377=\13=\377I\22;\377F\11\77\377M\0""7\377E\11K\377C\15A\377P\13" - "3\377J\23""9\377E\24""2\377I\11""8\377M\4+\377>\2.\377J\0-\377M\0>\377" - "B\0<\377<\0D\3773\3A\377A\10I\377C\7""5\377<\7-\377N\11""2\377H\0""4" - "\377G\0&\377F\0""7\377D\0\77\377I\0""8\377<\0'\377M\0""4\377C\0:\377" - "6\0I\377A\0:\377N\0M\377A\0L\3779\0E\377F\0I\3777\0O\377/\0I\377;\0[" - "\377:\0Z\3776\0L\377.\0O\377.\2G\3771\0N\377'\2R\377-\0N\377\37\0I\377" - "\27\0E\377%\10:\377\33\10""9\377#\0<\377&\3H\377!\11A\377\"\0""1\377" - "\36\0#\377\31\6""2\377\12\5""4\377\34\4@\377\34\2C\377\21\3G\377\20\0" - "B\377\25\0;\377\16\0""2\377\20\0""2\377\13\0:\377\1\0""0\377\0\0""4\377" - "\0\0""9\377\202\0\0<\377'\0\0""1\377\1\0""7\377\0\0C\377\0\0E\377\0\0" - "8\377\2\0\77\377\0\0""8\377\0\0=\377\0\0""9\377\0\11F\377\0\0T\377\0" - "\10S\377\0\12L\377\0\16R\377\0\15""4\377\0\16""9\377\0\20K\377\0\26C" - "\377\0\30O\377\0\37A\377\0\40<\377\0\20D\377\0\13A\377\0\13E\377\0\2" - "\77\377\0\0\77\377\0\1@\377\0\0""5\377\0\0""8\377\0\0""0\377\0\0""3\377" - "\0\0C\377\0\0H\377\0\0J\377\0\0H\377\0\0O\377\0\0A\377\0\0M\377\6\0S" - "\377\202\0\0S\377\2\2\0K\377\0\0S\377\202\0\0Z\377}\0\0L\377\0\0N\377" - "\0\0I\377\0\0Z\377\0\0U\377\0\0_\377\0\0P\377\0\0I\377\0\0R\377\0\0O" - "\377\0\0P\377\0\0U\377\0\0A\377\0\0N\377\0\0K\377\0\0J\377\7\0@\377\4" - "\0P\377\7\0T\377\30\0T\377\17\0M\377\16\0S\377\0\0S\377\5\0N\377\3\0" - "\77\377\1\0I\377\0\0H\377\5\0E\377\0\0E\377\12\0N\377\0\0F\377\15\0\77" - "\377\13\0*\377\23\0,\377\4\0\36\377\0\0-\377\13\0""1\377\33\0-\377\12" - "\0%\377\12\0*\377\22\0""0\377\15\0'\377\32\0/\377\15\0%\377\20\0'\377" - "\7\0""5\377\11\0""1\377\22\0:\377\10\0B\377\0\0D\377\2\0P\377\0\0N\377" - "\3\0R\377\36\0f\377\"\0a\377\35\0]\377\13\0h\377\26\0f\377\27\0d\377" - "\40\0c\377\27\0V\377\13\0`\377\25\0X\377\"\0i\377'\0y\377\36\0w\377$" - "\0x\377#\0\200\377+\0z\3771\2\203\377%\0x\3772\0\202\3776\0\204\3777" - "\12\201\377*\21\211\3778\0\224\377:\5{\377;\0{\3777\0\211\3779\4\206" - "\377I\4\215\377K\0\214\377H\0\221\377D\4\223\377J\0\217\377@\1\226\377" - "2\0}\3772\0|\377I\0\210\377=\0\214\377H\1\223\377W\0\204\377T\0\221\377" - "O\0\205\377N\0\220\377Y\0\234\377T\0\214\377T\0\215\377U\0\224\377Z\0" - "\236\377s\24\251\377~!\266\377\2154\266\377\2347\277\377\205*\306\377" - "Y\15\236\3776\0y\3777\0`\377\233$v\377\255)p\377\227\23]\377g\0<\377" - ",\0\0\3777\0\0\3771\0\0\377-\0\11\3775\0\0\3778\0\0\377)\0\0\377*\0\0" - "\377\"\0\0\377&\0\0\377/\0\0\377%\0\0\377\35\0\0\377\202\31\0\0\377\7" - "\34\0\0\377\21\0\0\377\10\0\0\377\26\0\0\377\14\0\0\377\26\0\0\377\10" - "\0\0\377\202\7\0\0\377\77\2\0\0\377\13\0\0\377\4\0\21\377\0\0\17\377" - "\2\0\7\377\5\0\2\377\0\0\0\377\10\0\0\377\0\0\10\377\0\0\17\377\0\0\27" - "\377\16\0\15\377\11\0\7\377\17\0\11\377\12\0\17\377\20\0\17\377\27\0" - "\24\377\24\0\17\377\3\0\6\377\7\0\17\377\34\0\15\377\27\0\15\377\21\0" - "\0\377\37\0\1\377\17\0\0\377!\0\11\377\22\0\4\377\17\0\25\377\27\0\1" - "\377\31\0\3\377\32\0\6\377\35\0\0\377\22\0\0\377\25\0\26\377\21\0\13" - "\377\13\0\27\377\5\0\27\377\15\0\3\377\23\0\11\377\10\0\11\377\15\0\11" - "\377\15\0\27\377\10\0\17\377\1\0$\377\22\0'\377\14\0\35\377\7\0#\377" - "\13\0\40\377\0\0\"\377\13\0\26\377\0\0\37\377\0\0\23\377\1\0\21\377\0" - "\0\17\377\0\0\"\377\0\0\35\377\0\0\21\377\0\0\16\377\0\0\23\377\0\0\4" - "\377\0\0\10\377\0\0\5\377\0\0\12\377\204\0\0\0\377\2\0\0\21\377\0\0\14" - "\377\202\0\0\0\377\2\0\0\6\377\0\0\2\377\203\0\0\0\377\3\0\0\5\377\0" - "\0\17\377\0\0\26\377\203\0\0\0\377\17\0\0\3\377\0\0\13\377\0\0\15\377" - "\0\0\5\377\0\0\14\377\0\0\11\377\0\0\20\377\0\0\25\377\0\0\27\377\0\0" - "\16\377\0\0\12\377\0\0\22\377\0\0\12\377\0\0\10\377\0\0\7\377\206\0\0" - "\0\377\2\0\0\2\377\0\0\11\377\202\0\0\0\377\2\0\0\16\377\0\0\2\377\203" - "\0\0\0\377\36\0\0\11\377\0\0\5\377\0\0\12\377\0\0\16\377\0\0\24\377\0" - "\0\27\377\0\0\31\377\0\0\23\377\0\0\32\377\0\0\20\377\0\0\24\377\0\0" - "\31\377\0\0\16\377\0\0\23\377\0\0\13\377\0\0\22\377\0\0\27\377\0\0'\377" - "\0\0\24\377\0\0\33\377\0\0\31\377\0\0\21\377\0\0\24\377\0\0\36\377\0" - "\0\27\377\0\0\36\377\0\0\32\377\0\0\10\377\0\0\21\377\0\0\20\377\202" - "\0\0\17\377\12\0\0\15\377\0\0\30\377\0\0\36\377\0\0\22\377\0\0\17\377" - "\0\0\20\377\0\0\"\377\0\0\26\377\0\0\10\377\0\0\16\377\202\0\0\21\377" - "\3\0\0\2\377\0\0\17\377\0\0\3\377\214\0\0\0\377\11\0\0\4\377\0\0\20\377" - "\0\0\12\377\0\0\21\377\0\0\32\377\0\0\27\377\0\0'\377\0\0\40\377\0\0" - "\34\377\202\0\0)\377\177\0\0'\377\0\0""4\377\0\0+\377\0\0-\377\0\0/\377" - "\0\0(\377\0\0""1\377\0\0""6\377\0\0G\377\0\0I\377\0\0>\377\0\0N\377\0" - "\0U\377\0\0M\377\0\0O\377\0\0Q\377\0\0O\377\7\0T\377\4\0M\377\4\0V\377" - "\13\0V\377\17\0N\377\17\0M\377\21\0Q\377\30\0^\377\31\0_\377\1\0P\377" - "\10\0Q\377\15\0N\377\0\0G\377\14\0M\377\17\0U\377\2\0X\377\0\0V\377\15" - "\0Z\377\31\0X\377\37\0a\377\20\0T\377\25\0]\377\14\0^\377\17\0_\377\30" - "\0Z\377+\0f\377!\0e\377\34\0c\377\40\0c\377>\0\201\377M\7\233\377P\4" - "\227\377:\0x\377)\0f\377/\0o\377\214\3W\377y\0N\377`\0\35\3775\0\0\377" - "4\0\0\377,\0\0\377+\0\0\3776\0\0\3771\0\0\377)\0\0\3776\0\0\377#\0\0" - "\3776\0\0\377)\0\0\377*\0\0\377%\0\0\377+\0\0\377\30\0\0\377!\0\0\377" - "-\0\0\377\24\0\0\377\13\0\4\377\22\0\0\377\23\0\11\377\23\0\0\377\16" - "\0\0\377\0\0\0\377\0\0\2\377\0\0\0\377\1\0\1\377\2\0\7\377\15\0\26\377" - "\2\0\14\377\0\0\0\377\0\0\5\377\0\0\17\377\0\0\6\377\11\0\13\377\7\0" - "\23\377\25\0\30\377\17\0\4\377\6\0\10\377\23\0\32\377\17\0\36\377\17" - "\0\20\377\15\0\22\377\22\0\31\377\15\0\34\377\17\0\23\377\32\0\24\377" - "\27\0\21\377\15\0\5\377\21\0\11\377\30\0\11\377\22\0\6\377\21\0\21\377" - "\17\0\15\377\27\0\20\377\22\0\16\377\30\0\16\377\10\0\11\377\6\0\27\377" - "\0\0\24\377\0\0\37\377\0\0\10\377\25\0\31\377\17\0\21\377\23\0\26\377" - "\21\0\26\377\12\0\30\377\0\0\35\377\3\0$\377\0\0*\377\0\0#\377\0\0*\377" - "\4\0\0,\377\5\0\36\377\0\0\34\377\0\0)\377\202\0\0\25\377\10\0\0!\377" - "\0\0'\377\0\0\32\377\0\0\25\377\0\0\17\377\0\0\26\377\0\0\5\377\0\0\22" - "\377\202\0\0\14\377\204\0\0\0\377\5\0\0\1\377\0\0\2\377\0\0\7\377\0\0" - "\13\377\0\0\14\377\203\0\0\0\377\202\0\0\3\377\204\0\0\0\377\15\0\0\5" - "\377\0\0\2\377\0\0\6\377\0\0\23\377\0\0\13\377\0\0\12\377\0\0\6\377\0" - "\0\0\377\0\0\13\377\0\0\11\377\0\0\5\377\0\0\7\377\0\0\10\377\213\0\0" - "\0\377\3\0\0\2\377\0\0\0\377\0\0\5\377\203\0\0\0\377\1\0\0\1\377\202" - "\0\0\3\377\24\0\0\10\377\0\0\0\377\0\0\21\377\0\0\17\377\0\0\33\377\0" - "\0\37\377\0\0\22\377\0\0\10\377\0\0\16\377\0\0\33\377\0\0\34\377\0\0" - "\32\377\0\0\36\377\0\0\31\377\0\0\26\377\0\0\25\377\0\0\21\377\0\0\12" - "\377\0\0\24\377\0\0\36\377\202\0\0\34\377\7\0\0\31\377\0\0\20\377\0\0" - "\6\377\0\0\15\377\0\0\30\377\0\0\21\377\0\0\20\377\202\0\0\23\377\11" - "\0\0\25\377\0\0\13\377\0\0\10\377\0\0\4\377\0\0\16\377\0\0\12\377\0\0" - "\15\377\0\0\0\377\0\0\5\377\203\0\0\0\377\5\0\0\2\377\0\0\0\377\0\0\1" - "\377\0\0\0\377\0\0\5\377\211\0\0\0\377\177\0\0\14\377\0\0\11\377\0\0" - "\20\377\0\0\17\377\0\0\33\377\0\0\22\377\0\0\25\377\0\0\"\377\0\0*\377" - "\0\0\36\377\0\0(\377\0\0#\377\0\0/\377\0\0""2\377\0\0+\377\0\0(\377\0" - "\0.\377\0\0\77\377\0\0F\377\0\0P\377\0\0E\377\0\0F\377\0\0L\377\0\0J" - "\377\0\0N\377\0\0T\377\0\0I\377\0\0J\377\0\0L\377\0\0N\377\0\0G\377\10" - "\0P\377\0\0Z\377\0\0R\377\4\0T\377\0\0Y\377\5\0Q\377\7\0U\377\13\0T\377" - "\0\0W\377\0\0[\377\0\0R\377\3\0G\377\6\0K\377\5\0X\377\0\0E\377\25\0" - "Z\377\10\0S\377\4\0b\377\23\0R\377\13\0V\377\32\0Z\377%\0[\377\27\0V" - "\377\37\0h\377!\0X\377*\0V\377(\0e\3779\0m\3771\0m\3775\0v\377+\0q\377" - "3\0o\377s\0""6\377k\0\25\377;\0\2\3777\0\0\377A\7\1\377M\24\0\377;\22" - "\1\377-\31\0\3775\15\0\3770\25\0\377F\13\0\377L\20\0\377@\32\0\377E\23" - "\0\377C\20\5\377@\21\13\377:\31\10\377/\25\10\3778\37\11\377,\36\14\377" - "\32\25\6\377\25\22\7\377\32\21\25\377\25\24\34\377\10\35\7\377\11+\1" - "\377\4!\12\377\4\37\6\377\10(\13\377\0*\25\377\17+\25\377\6'\20\377\16" - "'\27\377\12)\35\377\6.\20\377\3)\27\377\16''\377\14.)\377\15""7\26\377" - "\20""8\11\377#7\26\377!S\36\377$Z\"\377\34X\37\377\32X2\377\37W#\377" - "\30d.\377\26e3\377\20h\33\377\21T\36\377\33[\32\377\23S\31\377\"X/\377" - "\26I\35\377\12@\37\377\11""6\27\377\31-#\377\14$\26\377\25/!\377\27""7" - "\"\377\16.!\377\6,\16\377\25&\37\377\25'*\377@\37%\34\377\15/\26\377" - "\25""2\24\377\33&%\377\17+3\377\2\37-\377\2""09\377\5(1\377\0""4=\377" - "\0""6>\377\0B0\377\0I3\377\0K-\377\1""8'\377\0\77)\377\11I1\377\3<&\377" - "\0""61\377\0E2\377\0:\32\377\0O&\377\4P$\377\0I\32\377\0M\30\377\0G%" - "\377\0D\13\377\0""8\20\377\0.\33\377\0""0\12\377\0,\6\377\0=\20\377\0" - "-\22\377\0""0\5\377\0/\16\377\0)\13\377\0!\10\377\0(\10\377\0""1\11\377" - "\0""1\34\377\0-\15\377\0\33\0\377\0.\1\377\0%\0\377\0#\0\377\0'\14\377" - "\0\32\6\377\0\36\0\377\0\31\15\377\0+\12\377\0&\0\377\0*\0\377\0(\0\377" - "\0!\11\377\0'\11\377\0""6\13\377\0/\0\377\0""7\0\377\0=\0\377\0;\0\377" - "\0/\0\377\0>\0\377\0N\0\377\0T\0\377\0L\0\377\202\0B\0\377,\0<\0\377" - "\0+\0\377\0""1\0\377\0:\0\377\0/\0\377\0""1\0\377\0(\0\377\0)\0\377\0" - "\27\10\377\0\37\0\377\0&\0\377\0\40\5\377\0\26\11\377\0\36\12\377\0\37" - "\26\377\0\20\26\377\0\23\14\377\0\31\37\377\0\0\26\377\0\7\10\377\0\0" - "\10\377\0\1\27\377\0\5\12\377\0\23\26\377\0\0\13\377\0\0\32\377\0\0\23" - "\377\0\0\0\377\0\0\10\377\0\0\21\377\0\0(\377\0\0\34\377\0\0\30\377\0" - "\0\21\377\0\0\25\377\0\0\36\377\0\23\35\377\0\30\31\377\0\"\37\377\0" - "\32\31\377\0\0\23\377\0\0\21\377\0\0\26\377\0\0\16\377\203\0\0\0\377" - "\3\0\0\2\377\0\0\4\377\0\0\1\377\205\0\0\0\377\2\0\0\7\377\0\0\1\377" - "\203\0\0\0\377\35\0\7\3\377\0\26\0\377\0+\3\377\0""4\17\377\0L\11\377" - "\0M\23\377\0G(\377\4^'\377\5]&\377\5[+\377\0^$\377\4R\33\377\0E\36\377" - "\0M(\377\0L+\377\0N3\377\6G/\377\0>0\377\0):\377\0%7\377\0\30""4\377" - "\0\21""4\377\0\32/\377\0\26""5\377\0\27<\377\0\20@\377\0\14\77\377\0" - "\0\77\377\0\14H\377\202\0\2L\377\177\0\3[\377\0\0J\377\0\15R\377\0\20" - "L\377\0\30T\377\0$M\377\0#R\377\2;P\377\11YY\377\0mj\377\16lv\377+xu" - "\377\37kq\377\25Mi\377\0;e\377\6%W\377\0\37_\377\3&e\377\0""9a\377\4" - "0`\377\5&V\377\0/R\377\4EZ\377\7;U\377\17""4Y\377\0""5`\377\3A[\377\10" - ":a\377\23-W\377\34$^\377\36+`\377&#d\377&\35\\\377\35!b\377-&g\377.5" - "t\3775=u\377.\0g\377+\0u\377/\0q\3773\0r\377k\0""7\377B\0\17\377,\0\0" - "\3774\0\0\377>\21\0\3771\15\0\3774\30\5\377+\31\7\377>\21\5\377<\37\7" - "\377I\26\12\377H\26\1\377=\21\15\377R\27\22\377C,\20\377>&\13\3777\32" - "\22\3770\32\6\377'\30\20\377/\34\21\377\35\34\15\377\32\35\31\377\33" - "\24\11\377\36\31\26\377\16\30\1\377\20\33\1\377\0\36\14\377\2\33\0\377" - "\10!\6\377\3(\16\377\0""4\36\377\10(\21\377\15""1\33\377\7""7\23\377" - "\13.\"\377\24*/\377\17)&\377#3'\377\27;\15\377\32\77\20\377&I\21\377" - "#F\24\377\30P'\377\32^0\377\25c+\377\27S)\377!].\377\40b(\377\24h$\377" - "\27i-\377%[&\377\37Y-\377\20L'\377\21P1\377\13=.\377\22A*\377\3""8#\377" - "\15>,\377\6""3!\377\13;+\377\32\40""3\377\21""3'\377\26\"-\377\32#&\377" - "\24.+\377\24,3\377\13+*\377\1\35\34\377\12#$\377\4\",\377\26-.\377\5" - "E6\377\2F-\377\0""6.\377\0;+\377\14F5\377\12K<\377\15@.\377\1F(\377\0" - "=/\377\0Q-\377\1F,\377\0A#\377\0C0\377\0E1\377\0D\35\377\33\1<\37\377" - "\0;\40\377\0@\37\377\0""2\22\377\0:\26\377\0-\20\377\0+\30\377\0)\10" - "\377\0""3\22\377\0*\10\377\0""1\14\377\0""4\2\377\0*\10\377\0""1\0\377" - "\0-\12\377\0""0\0\377\0\"\0\377\0""4\2\377\0.\16\377\0(\11\377\0*\3\377" - "\0(\6\377\0+\7\377\0)\12\377\0\34\15\377\0#\4\377\0+\0\377\202\0""1\0" - "\377\25\0""3\0\377\0.\0\377\0""1\0\377\0""2\0\377\0>\2\377\0E\0\377\0" - "3\0\377\0@\0\377\0J\0\377\0H\0\377\0O\0\377\0L\0\377\0M\0\377\0H\0\377" - "\0F\0\377\0B\0\377\0G\0\377\0K\0\377\0<\4\377\0""2\0\377\0*\0\377\202" - "\0+\0\377\21\0""4\0\377\0""5\0\377\0(\0\377\0\32\0\377\0\40\12\377\0" - ",\13\377\0(\5\377\0)\21\377\0\40\15\377\0'\22\377\0\35\21\377\0\31\4" - "\377\0\6\14\377\0\22\14\377\0\27\5\377\0\27\14\377\0\17\5\377\202\0\0" - "\0\377\21\0\0\3\377\0\0\33\377\0\0\32\377\0\0\30\377\0\0\16\377\0\0\12" - "\377\0\0\3\377\0\0\12\377\0\0\35\377\0\11\15\377\0!\13\377\0\32\14\377" - "\0\14\15\377\0\0\10\377\0\0\26\377\0\0\0\377\0\0\4\377\203\0\0\0\377" - "\1\0\0\3\377\210\0\0\0\377\177\0\0\10\377\0\0\0\377\0\7\0\377\0\0\0\377" - "\0\5\0\377\0\24\11\377\0%\10\377\0=\20\377\0\77\11\377\0B\22\377\10N" - "\24\377\0U$\377\0h7\377\0c\36\377\0f\33\377\0U1\377\0Q0\377\0Q2\377\0" - "V/\377\0Q.\377\0K;\377\2Q\77\377\0JB\377\0A9\377\0%6\377\0\35""7\377" - "\0\32.\377\0\35""2\377\0\20""4\377\0\10""4\377\0\1E\377\0\6>\377\0\0" - ";\377\0\7L\377\0\4Q\377\0\1I\377\0\6M\377\0\4]\377\0\23[\377\0\32`\377" - "\0\30e\377\0\"X\377\0+Y\377\0IZ\377\2vk\377\24{q\377\30s\177\377\14r" - "u\377\11_n\377\4Il\377\0,j\377\0""3i\377\0""6\\\377\0""3e\377\0-Z\377" - "\0""7c\377\0NX\377\0\\K\377\6Lc\377\20@`\377\4Kd\377\21M]\377\10Ue\377" - "\14Kf\377\33=Y\377\30""7X\377\30.`\377\35'f\377\21\36m\377\30'o\377\35" - ",\202\377,=|\377)\0n\377'\0}\377-\0z\377-\5x\377k\0)\377O\0\15\377A\0" - "\0\3778\0\5\3772\10\21\3778\16\6\377;\31\13\3777\32\30\377\77\33\26\377" - "C(\20\377=#\40\3778\31\24\3771!\5\377<*\31\3772+\17\377=/\17\3774\37" - "\12\3770)\11\377'\32\7\377\40\27\21\377\24\35\23\377\34!\16\377\34*\26" - "\377\10)&\377\23-\14\377\10\"\5\377\22\"\4\377\14-\1\377\32+\30\377\22" - "<\27\377\20%\40\377\5(\33\377\20-\30\377\16.\17\377\14""6\25\377\16""4" - "\33\377\16=\15\377\20/\27\377\21=\23\377\34\77\25\377\34>!\377!H%\377" - "\32K&\377\16N\36\377\14[\30\377\16Y*\377\16k\30\377\14d\30\377\15j)\377" - "\11i!\377\20b*\377V\25a0\377\21R;\377\23T3\377\12L-\377\6O+\377\15E1" - "\377\26>>\377\10;\77\377\20""2.\377\2""4,\377\11/(\377\0""8,\377\0""5" - "9\377\0'9\377\0\35""1\377\0'\"\377\2(1\377\7)+\377\0""6'\377\12""1!\377" - "\12""76\377\0""7-\377\0""74\377\2H5\377\0G.\377\16D,\377\2G)\377\6=." - "\377\13K2\377\20>'\377\1=$\377\0D-\377\0T(\377\0J.\377\0""7\"\377\0=" - "!\377\0""4\27\377\0""7\36\377\0""2\35\377\0""7!\377\0""6\23\377\0+\2" - "\377\0""7\22\377\0'\14\377\0\37\21\377\0-\6\377\0%\0\377\0""6\0\377\0" - ")\1\377\0""1\6\377\0""0\15\377\0""1\16\377\0;\30\377\0""7\24\377\0D\6" - "\377\0\77\4\377\0""8\0\377\0;\0\377\0-\0\377\0\35\0\377\0#\0\377\0!\0" - "\377\0""2\0\377\0""3\0\377\0!\0\377\0/\0\377\0,\0\377\0=\0\377\0@\0\377" - "\0=\0\377\0L\0\377\0D\0\377\0E\0\377\0S\0\377\0""5\0\377\0""7\0\377\0" - "C\0\377\0@\0\377\0D\0\377\0V\0\377\0B\0\377\0<\0\377\0""5\0\377\0""2" - "\0\377\0""1\0\377\0&\0\377\202\0,\0\377\24\0\40\0\377\0*\3\377\0(\0\377" - "\0,\0\377\0&\5\377\0%\1\377\0""1\0\377\0\34\7\377\0!\0\377\0\33\0\377" - "\0&\0\377\0\25\0\377\0\32\0\377\0\32\5\377\0\32\0\377\0\27\0\377\0\26" - "\0\377\0\0\15\377\0\13\22\377\0\0\6\377\205\0\0\0\377\6\0\0\10\377\0" - "\0\2\377\0\4\2\377\0\20\2\377\0\16\16\377\0\10\23\377\202\0\0\0\377\1" - "\0\0\4\377\204\0\0\0\377\2\0\0\1\377\0\0\3\377\205\0\0\0\377\3\0\0\7" - "\377\0\0\17\377\0\0\3\377\203\0\0\0\377\177\0\14\0\377\0\36\13\377\0" - "'\14\377\0-\27\377\0""6\24\377\0B\33\377\0S\37\377\0[\"\377\0\\#\377" - "\0o(\377\0p,\377\0h8\377\0n2\377\0X9\377\0b4\377\6n8\377\14cF\377\0g" - "K\377\0b<\377\0UI\377\0;=\377\0(1\377\0%+\377\0\30""0\377\0\32:\377\0" - "\13E\377\0\26<\377\0\7/\377\0\7@\377\0\20O\377\0\14G\377\0\24M\377\0" - "\15W\377\0\20^\377\0\36`\377\0\27e\377\0%`\377\0)[\377\0Ij\377\0la\377" - "\12\177j\377\31\221v\377\26\214{\377\2zy\377\14_p\377\3N^\377\0\77a\377" - "\6/k\377\0""3l\377\0""2Y\377\0""4c\377\0B]\377\0KX\377\0Ye\377\0Vd\377" - "\2N]\377\0Xa\377\0^i\377\5Q^\377\23FW\377$Ab\377\21;a\377!7[\377\32""8" - "i\377\36&n\377\24""5o\377)5v\377#:\203\377\40\25u\377,\13f\3771\15l\377" - ":\4\177\377s\0'\377N\0\15\3770\0\11\3779\0\5\377.\22\17\377,\24\25\377" - "2\36\25\377+\37#\37723\26\377<4\37\377>\"\22\3770*\20\377*\34\22\377" - "\36!\20\377(\40\31\377\37\35\10\377\35\15\0\377\35\23\11\377\17\30\30" - "\377\5\22\26\377\24\34\27\377\26!\27\377\10""8\33\377\12""3(\377\22""3" - "\21\377\13""5\14\377\26""8\27\377\16,\32\377\7""4!\377\0,\31\377\0'\36" - "\377\0$\24\377\0\40\13\377\2(\36\377\0""6\23\377\15D\23\377\13""4#\377" - "\17""2\36\377\27""8\34\377\27""8\"\377\24=\35\377\34B\35\377\35\\-\377" - "\24f$\377\3b%\377\15d\40\377\10l-\377\14o\26\377\0^\40\377\1]%\377\16" - "^2\377\5Y1\377\5^3\377\0]7\377\0O1\377=\0I-\377\0D6\377\3C-\377\25""7" - "1\377\27""5;\377\5/=\377\10""8.\377\11""21\377\2-/\377\2\";\377\12(," - "\377\0-)\377\0\"0\377\4.,\377\10,!\377\13""8\34\377\0""8$\377\0>*\377" - "\0""85\377\0D0\377\0E0\377\5G4\377\3=(\377\4E'\377\2W(\377\11Q-\377\16" - "E(\377\2H%\377\1J*\377\0\77%\377\1;#\377\0E!\377\0@\37\377\0""1&\377" - "\0""3\23\377\0""8\17\377\0'\10\377\0*\11\377\0\30!\377\0'\20\377\0""5" - "\23\377\0/\7\377\0""1\0\377\0""5\2\377\0""8\20\377\0-\14\377\0A\15\377" - "\0=\16\377\0""4\12\377\0""1\12\377\0J\0\377\0;\0\377\0""3\0\377\0""2" - "\0\377\0-\0\377\0""0\0\377\0""2\0\377\0\"\0\377\0+\0\377\0'\0\377\0/" - "\0\377\202\0,\0\377\35\0""2\0\377\0""0\0\377\0""4\0\377\0F\0\377\0""8" - "\0\377\0@\0\377\0=\0\377\0""7\0\377\0""2\0\377\0D\0\377\0:\0\377\0B\0" - "\377\0""0\0\377\0D\0\377\0P\0\377\0L\0\377\0:\0\377\0""6\0\377\0.\0\377" - "\0-\0\377\0.\0\377\0*\0\377\0-\0\377\0""0\0\377\0:\0\377\0""3\0\377\0" - "/\0\377\0""8\0\377\0)\0\377\203\0*\0\377\11\0\30\2\377\0\17\0\377\0#" - "\0\377\0\"\0\377\0\33\0\377\0\16\0\377\0\21\11\377\0\14\5\377\0\0\1\377" - "\205\0\0\0\377\7\0\0\1\377\0\0\3\377\0\5\0\377\0\10\16\377\0\0\2\377" - "\0\0\4\377\0\0\1\377\216\0\0\0\377$\0\0\10\377\0\0\0\377\0\0\11\377\0" - "\0\20\377\0\0\0\377\0\14\2\377\0\26\16\377\0\40\16\377\0""4\16\377\0" - "1\11\377\0+\23\377\0>\31\377\0`\34\377\0f(\377\0n8\377\0r<\377\15l6\377" - "\3s\77\377\11u>\377\0}=\377\0yG\377\0{;\377\0~\77\377\0t;\377\0p7\377" - "\0oC\377\0Q5\377\0""9.\377\0#.\377\0\26""8\377\0\25+\377\0\24""6\377" - "\0\15;\377\0\11G\377\0\35D\377\0\34Q\377\202\0*R\377\177\0""2]\377\0" - ",^\377\0""2b\377\0.W\377\0=g\377\0Kh\377\0ae\377\3\211t\377\15\214p\377" - "\27zp\377\5mm\377\0cp\377\0X\\\377\0Un\377\0Co\377\0L]\377\0q\377\36Lu\377*'\203\377$!z\377&\23l\377&\26q\377e\0""8\377H\0\25" - "\377*\0\0\377&\0\16\377,\15\40\3770\34\17\377$\33\25\377(\26\34\377)" - "\21\33\377\"'\22\377\36)\31\377\37+\25\377\23\33\7\377\17\31\26\377\34" - "\36\13\377\36&\12\377\16\40\34\377\24#.\377\11\33\26\377\0\40\40\377" - "\17\35&\377\21\40\35\377\0,\25\377\0!\"\377\11\"\35\377\3%'\377\16!&" - "\377\5\"\36\377\3.\37\377\0)\30\377\0!\23\377\0&\34\377\0""1\31\377\0" - "/\35\377\7""6\33\377\2""6\30\377\0""8\33\377\5>\27\377\0\77!\377\0>\40" - "\377\23R\40\377\27E\37\377\0Z\33\377\0\\\31\377\3b/\377\0h\36\377\0g" - ")\377\0\\0\377\1n6\377\3Z)\377\11Z6\377\0R4\377\0U-\377\0^;\377\0\\-" - "\377\0O\"\377\5L0\377\5B*\377\1=5\377\2/3\377\0,-\377\0-*\377\5,2\377" - "\30)7\377\24'0\377\0""0&\377\0--\377\0$%\377\3$)\377\0,.\377\0""1%\377" - "\0.#\377\0""3,\377\0B\36\377\0<(\377\0:\"\377\0I!\377\0Q*\377\0W$\377" - "\13K\32\377\0;\31\377\0H\25\377\0I\23\377\0D\13\377\1E\27\377\0F\36\377" - "\0J\36\377\0>\30\377\35\0D\13\377\0/\20\377\0""0\10\377\0'\13\377\0." - "\26\377\0""0\20\377\0""9\31\377\0&\16\377\0#\20\377\0+\22\377\0\"\6\377" - "\0-\20\377\0""8\3\377\0""0\0\377\0""1\23\377\0A\2\377\0F\0\377\0""1\0" - "\377\0\77\0\377\0@\0\377\0I\0\377\0:\0\377\0<\0\377\0I\0\377\0E\0\377" - "\0B\0\377\0""5\0\377\0)\0\377\0$\0\377\202\0\35\0\377'\0-\0\377\0>\0" - "\377\0""9\0\377\0""4\0\377\0-\0\377\0'\0\377\0C\0\377\0E\0\377\0\77\0" - "\377\0F\0\377\0=\0\377\0D\0\377\0C\0\377\0""6\0\377\0=\0\377\0Q\0\377" - "\0R\0\377\0@\0\377\0F\0\377\0;\0\377\0:\0\377\0""7\0\377\0+\0\377\0;" - "\0\377\0M\0\377\0;\0\377\0\77\0\377\0<\0\377\0/\0\377\0%\0\377\0\25\0" - "\377\0\30\0\377\0\"\0\377\0,\0\377\0\31\0\377\0$\0\377\0\34\0\377\0\20" - "\0\377\0\26\0\377\213\0\0\0\377\1\0\4\0\377\204\0\0\0\377\4\0\0\13\377" - "\0\0\2\377\0\0\14\377\0\0\3\377\211\0\0\0\377\177\0\0\13\377\0\6\0\377" - "\0\16\0\377\0\31\0\377\0""1\7\377\0'\13\377\0""5\15\377\0""2\21\377\0" - ";\17\377\0=\14\377\0N\40\377\0K\40\377\0`1\377\0i2\377\0n6\377\0q;\377" - "\0p:\377\0\202:\377\0wB\377\0{7\377\0\2056\377\0\205F\377\0\200E\377" - "\0yI\377\0`2\377\0O6\377\0""17\377\0\21""8\377\0\31""3\377\0\17<\377" - "\0\17A\377\0\21E\377\0#K\377\0*M\377\0-Y\377\0""6P\377\0""9O\377\0""6" - "Z\377\0""8H\377\0DM\377\0NY\377\0Dg\377\0j_\377\0\215`\377\0\212i\377" - "\0\226u\377\0xm\377\0gj\377\0^b\377\0T_\377\0Vg\377\0Mf\377\0B`\377\0" - "\77c\377\0Ci\377\0G]\377\0L`\377\0Xc\377\0]a\377\4\\h\377\2Vi\377\2Y" - "h\377\20Xx\377\20Mw\377\17Nt\377\5\77v\377\0>\203\377\0E\202\377\0=~" - "\377\5:\202\377\23""6\200\3771O\242\377\32""2\222\377\3\36u\377\26\23" - "|\377g\0\77\377H\0&\377*\0\30\377-\0\25\377.\14\34\377,\11\"\377#\13" - "\40\377&\11%\377(\32\26\377\35\21\17\377\26\32\26\377\32\27\25\377\16" - "\34\13\377\10\25\17\377\27\34\24\377\21\30\31\377\5\36\33\377\20\26\31" - "\377\11\27\36\377\15\14$\377\6\17\31\377\13\25\32\377\1\36\26\377\6\27" - "$\377\11\34\40\377\11\36\32\377\1%(\377\10\34%\377\0$\24\377\0'\25\377" - "\0""0\34\377\0""2$\377\0%'\377\0.\"\377\0""4+\377\0/\"\377\0C)\377\0" - ":+\377\4<.\377\0:'\377\2B7\377\0J0\377\0R+\377\0[/\377\0l-\377\0i*\377" - "\14b8\377\7h\77\377\1b=\377\0\\8\377\0\\+\377\0^7\377>\4a0\377\10b3\377" - "\0T+\377\0M/\377\0J.\377\0E4\377\0=2\377\1""71\377\7;*\377\20@)\377\5" - "94\377\4/6\377\0/2\377\7""4!\377\4%\40\377\11/(\377\3.+\377\0-&\377\0" - "1*\377\3/\37\377\0-(\377\0+&\377\0\77\"\377\0V\35\377\3_\35\377\0\\#" - "\377\2W\40\377\3D\15\377\0H\13\377\0N%\377\0@+\377\0B\22\377\0S\27\377" - "\0N\35\377\0A#\377\0J\17\377\0>\10\377\0""9\0\377\0A\10\377\0>\12\377" - "\0""2\13\377\0+\15\377\0""7\34\377\0\"\27\377\0#\20\377\0!\14\377\0\"" - "\16\377\0(\12\377\0.\0\377\0<\17\377\0J\7\377\0@\22\377\0A\10\377\0I" - "\0\377\0<\0\377\0""7\0\377\0<\0\377\0F\0\377\0O\0\377\0G\0\377\0R\0\377" - "\0T\0\377\202\0A\0\377\1\0""6\0\377\202\0=\0\377\4\0+\0\377\0""6\0\377" - "\0(\0\377\0""5\0\377\202\0A\0\377\2\0D\0\377\0F\0\377\202\0C\0\377\26" - "\0""7\0\377\0=\0\377\0@\0\377\0E\0\377\0G\0\377\0M\0\377\0S\0\377\0E" - "\0\377\0A\0\377\0""3\0\377\0""2\0\377\0C\0\377\0B\0\377\0I\0\377\0O\0" - "\377\0I\0\377\0C\0\377\0>\0\377\0.\0\377\0%\0\377\0\36\0\377\0#\0\377" - "\202\0$\0\377\6\0\35\0\377\0\30\0\377\0\21\0\377\0\22\0\377\0\14\0\377" - "\0\1\0\377\210\0\0\0\377\202\0\13\0\377\212\0\0\0\377\3\0\0\15\377\0" - "\0\0\377\0\0\10\377\205\0\0\0\377\177\0\16\0\377\0\30\0\377\0\22\0\377" - "\0\40\14\377\0%\2\377\0\77\26\377\0@\16\377\0""8\27\377\0;\4\377\0D\10" - "\377\0B\37\377\0""9\37\377\0S(\377\0Y/\377\0l8\377\0p\77\377\0\1778\377" - "\0\202D\377\0|5\377\0x:\377\0\200F\377\0\213H\377\0\220K\377\0\211@\377" - "\0\201@\377\0a\77\377\0CB\377\0""2\77\377\0\32E\377\0\32>\377\0\31H\377" - "\0\"J\377\0\30P\377\0%Q\377\0*P\377\0$Q\377\0""2U\377\0/W\377\0FS\377" - "\0Ab\377\0Dg\377\0T[\377\0pd\377\0\222a\377\0\232\201\377\0\240\177\377" - "\0\215y\377\0pr\377\0gm\377\0U\\\377\0Ce\377\0\77i\377\0@o\377\0Hp\377" - "\0\0\377\0;\0\377\0B\0\377\0H\13\377\0E\17\377\0""5\16\377\0,\23\377" - "\0*\26\377\0&\15\377\0""7\0\377\0""8\3\377\0=\15\377\0@\26\377\0;\30" - "\377\0E\17\377\0F\10\377\0R\0\377\0J\0\377\0B\0\377\0G\0\377\0D\0\377" - "\0;\0\377\0N\0\377\0f\0\377\0d\0\377\0g\0\377\0O\0\377\0V\0\377\0J\0" - "\377\0""3\0\377\0;\0\377\0""2\0\377\0""7\0\377\0""0\0\377\0""4\0\377" - "\0>\0\377\0C\0\377\0:\0\377\0P\0\377\0\77\0\377\0""9\0\377\0<\0\377\0" - "@\0\377\0G\0\377\0N\0\377\0K\0\377\0O\0\377\0E\0\377\0:\0\377\0""8\0" - "\377\0""6\0\377\0""9\0\377\0""6\0\377\0:\0\377\0D\0\377\0E\0\377\0I\0" - "\377\0A\0\377\0""3\0\377\0;\0\377\202\0""1\0\377\13\0'\0\377\0)\0\377" - "\0""0\0\377\0\"\0\377\0\31\0\377\0\22\0\377\0\24\0\377\0\20\0\377\0\17" - "\0\377\0\21\0\377\0\5\0\377\203\0\3\0\377\6\0\11\0\377\0\16\0\377\0\5" - "\0\377\0\11\0\377\0\0\0\377\0\2\0\377\203\0\0\0\377\3\0\2\0\377\0\0\0" - "\377\0\0\2\377\203\0\0\0\377\1\0\0\7\377\203\0\0\0\377\2\0\0\1\377\0" - "\1\2\377\202\1\1\3\377\177\2\21\4\377\2\20\4\377\2/\4\377\1*\2\377\1" - "4\1\377\0""5\0\377\0""3\13\377\0-\0\377\0;\13\377\0""4\12\377\0""5\13" - "\377\0>\20\377\0Q\27\377\0d\34\377\0f\33\377\0y2\377\0\201*\377\0\206" - "*\377\0\206+\377\0\2149\377\0\220<\377\0\231;\377\0\223B\377\0\2154\377" - "\0|<\377\0`<\377\0T\77\377\0>/\377\0""49\377\0\36""1\377\0!>\377\0\21" - "B\377\0\31L\377\0\35F\377\0#;\377\0(=\377\0/P\377\0@O\377\0RU\377\0T" - "T\377\0QX\377\0[S\377\0mV\377\0\200m\377\0\224{\377\0\227\201\377\0\216" - "y\377\0n[\377\0U^\377\0S]\377\0MY\377\0Dh\377\0Ft\377\0Ck\377\0F_\377" - "\0Er\377\0Cr\377\0Js\377\0Oo\377\0Nh\377\0`e\377\0Ua\377\0Oe\377\0Po" - "\377\0Pq\377\0V|\377\0F\177\377\0Wm\377\0L{\377\0>x\377\0:\202\377$Q" - "\255\377\11/\213\377\0\17v\377\0\37k\377`\11G\377C\0!\377\35\0\17\377" - "\37\0\2\377'\5\"\377%\12$\377!\0\25\377\34\0\30\377\30\1\22\377\31\0" - "\33\377\11\12\22\377\13\25\23\377\13\4\16\377\15\6\26\377\16\26$\377" - "\6\32+\377\0\24\35\377\0\40%\377\7\31*\377\7\33%\377\16\35*\377\7\37" - "\37\377\21\25""4\377\20+*\377\0#+\377\16\"#\377\0&*\377\0\34!\377\0""3" - "(\377\0""5&\377\0,3\377\0""56\377\0%\37\377\0*+\377\0+%\377\0)'\377\0" - "7\"\377\0""6+\377\0>-\377\0""3'\377\0:+\377\0@'\377\0`.\377\0\\4\377" - "\0_*\377\4g$\377\5t0\377\16o;\377\5h,\377\10k-\377\7n@\377\15p6\377F" - "\0c(\377\3j)\377\0U+\377\0H#\377\0R+\377\0@$\377\0>&\377\3""02\377\2" - "/(\377\11,&\377\0-\37\377\4""01\377\6""5%\377\6-/\377\4""3*\377\0!*\377" - "\0\15""0\377\1\40$\377\2!'\377\0\40$\377\4%\40\377\0.\40\377\0""6\31" - "\377\0A\30\377\0N\27\377\0M\35\377\0M\23\377\0B\35\377\0M'\377\0A\27" - "\377\0@\24\377\0B\20\377\0C\13\377\0O\3\377\0J\4\377\0K\16\377\0I\14" - "\377\0S\7\377\0A\7\377\0""9\11\377\0B\12\377\0""4\4\377\0'\15\377\0+" - "\21\377\0""5\15\377\0:\5\377\0""6\0\377\0J\10\377\0G\6\377\0G\11\377" - "\0\77\7\377\0X\0\377\0V\0\377\0G\0\377\0I\0\377\0C\0\377\0;\0\377\0G" - "\0\377\0O\0\377\0f\0\377\0^\0\377\0Z\0\377\0]\0\377\0P\0\377\0L\0\377" - "\0B\0\377\0>\0\377\0""1\0\377\0.\0\377\0""5\0\377\202\0""4\0\377-\0+" - "\0\377\0>\0\377\0""8\0\377\0""5\0\377\0B\0\377\0E\0\377\0>\0\377\0@\0" - "\377\0=\0\377\0L\0\377\0C\0\377\0F\0\377\0;\0\377\0\77\0\377\0B\0\377" - "\0""5\0\377\0<\0\377\0""9\0\377\0H\0\377\0\77\0\377\0=\0\377\0/\0\377" - "\0""6\0\377\0""1\0\377\0""8\0\377\0""6\1\377\0,\0\377\0/\0\377\0(\0\377" - "\0\33\0\377\0'\0\377\0\40\0\377\0\34\0\377\0\36\0\377\0\12\0\377\0\24" - "\0\377\0\26\0\377\0\32\0\377\0\17\0\377\0\20\0\377\0\22\0\377\0\15\0" - "\377\0\14\0\377\0\22\0\377\0\6\0\377\213\0\0\0\377\177\2\4\6\377\5\7" - "\13\377\10\17\25\377\13\26\36\377\20\36,\377\13$7\377\20,8\377\15""0" - "#\377\7/\35\377\5=\12\377\4/\27\377\3""4\14\377\2(\22\377\0-\11\377\0" - "8\4\377\0=\10\377\0H\15\377\0""6\14\377\0<\12\377\0\77\14\377\0V\10\377" - "\0T\30\377\0y\27\377\0u\32\377\0\210\31\377\0\205\25\377\0\221\25\377" - "\0\2153\377\0\2201\377\0\202)\377\0z/\377\0b4\377\0R%\377\0T)\377\0>" - "&\377\0""51\377\0*6\377\0\35-\377\0\35""0\377\0\36<\377\0!6\377\0'4\377" - "\0,9\377\0""43\377\0@D\377\0KD\377\0CU\377\0VW\377\0OQ\377\0qg\377\0" - "\201]\377\0\217v\377\0\210q\377\0\203g\377\0rV\377\0jM\377\0Ke\377\0" - "Ge\377\0>k\377\0Ek\377\0Df\377\0\0\377\0""5\0\377\0D\0\377\0G\0\377\0E\0\377" - "\0A\0\377\0:\0\377\202\0>\0\377\1\0<\0\377\202\0C\0\377\36\0<\0\377\0" - "B\0\377\0""4\0\377\0.\0\377\0<\0\377\0""0\0\377\0;\0\377\0=\0\377\0""2" - "\0\377\0""1\0\377\0,\0\377\0F\0\377\0""5\0\377\0.\0\377\0!\0\377\0\"" - "\0\377\0\30\0\377\0\25\0\377\0&\0\377\0$\0\377\0\27\0\377\0\26\0\377" - "\0\36\0\377\0$\0\377\0\22\0\377\0\12\0\377\0\27\0\377\0\7\0\377\0\3\12" - "\377\0\0\2\377\205\0\0\0\377z\6\23\34\377\20%/\377\11\30\37\377\7\26" - "\27\377\12(0\377\14A4\377\15""1B\377\13""8=\377\12""83\377\7,\33\377" - "\10""3\22\377\6>\30\377\4<\37\377\5;\37\377\5@\32\377\4@\26\377\2>\4" - "\377\0M\0\377\0A\17\377\0E\20\377\0<\16\377\0C\14\377\0@\16\377\0S\10" - "\377\0U\12\377\0^\32\377\0b\24\377\0u\26\377\0\206\25\377\0|\30\377\0" - "\206\34\377\0\211\33\377\0\203!\377\0m\40\377\0_\25\377\0F\21\377\0H" - "'\377\0D\37\377\0A,\377\0/-\377\0-*\377\0)-\377\0%'\377\0\40/\377\0&" - ",\377\0+-\377\0:\77\377\0;I\377\0\77G\377\0DB\377\0HB\377\0SR\377\0r" - "K\377\0tb\377\0\200o\377\0\201g\377\0\200b\377\0gc\377\0ii\377\0k[\377" - "\0Ul\377\0Jb\377\0F]\377\0""9e\377\0""5a\377\0""7g\377\0Cv\377\0""0v" - "\377\0Dg\377\0@j\377\0Qo\377\0\77u\377\0R\204\377\0K\204\377\0R\203\377" - "\0Xl\377\0[j\377\0Oi\377\0Gd\377\0Mw\377\0Ch\377\27V\242\377\0""6z\377" - "\0\35q\377\0\35|\377\\\16""3\3774\0\34\377\34\0\5\377\25\0\4\377\21\34" - "\24\377\25\40\20\377\23&%\377\13\31\40\377\25\13\37\377\26\25!\377\26" - "\23\33\377\23\23\31\377\20\23&\377\22\27\35\377\15\26\22\377\5\20#\377" - "\0\32\25\377\15$!\377\4\23*\377\0\27""4\377\5'1\377\10\37A\377\5\34*" - "\377\5#,\377\16""0.\377\12""2.\377\0-+\377\0.5\377\0""5+\377\0,+\377" - "\0.@\377\0)5\377\0+(\377\0*(\377\0+1\377\0+%\377\0-\37\377\202\0\0\377\0" - "B\0\377\0\77\0\377\0J\0\377\0R\0\377\0Q\0\377\0G\0\377\0O\0\377\0L\0" - "\377\0M\0\377\0=\0\377\0\77\0\377\0;\0\377\0""7\0\377\0@\0\377\0""5\0" - "\377\0+\0\377\0""8\0\377\0""2\0\377\0=\0\377\0G\0\377\0F\0\377\0;\0\377" - "\0P\0\377\0O\0\377\0G\0\377\0S\0\377\0W\0\377\0=\0\377\0@\0\377\202\0" - "<\0\377\13\0;\0\377\0<\0\377\0""7\0\377\0""9\0\377\0""5\0\377\0""6\0" - "\377\0:\0\377\0C\0\377\0I\0\377\0D\0\377\0""0\0\377\202\0(\0\377\177" - "\0\35\0\377\0\27\0\377\0#\0\377\0\27\0\377\0\"\0\377\0\37\0\377\0\24" - "\0\377\0\32\0\377\0\34\0\377\0\24\0\377\0\22\0\377\0\33\0\377\0\35\0" - "\377\0\30\0\377\0\24\0\377\0\32\0\377\0\4\0\377\0\10\0\377\0\4\0\377" - "\3\27\23\377\2%\15\377\10\"\35\377\6$\33\377\11-!\377\13@6\377\11""8" - "<\377\13C1\377\15:)\377\10""5,\377\10""4$\377\10/\40\377\6\77\24\377" - "\4H\21\377\7F\16\377\4A\11\377\3C\6\377\3@\5\377\3H\5\377\0L\30\377\0" - "G\27\377\0C\21\377\0E\26\377\0Q\0\377\0Z\26\377\0T\21\377\0S\25\377\0" - "_\26\377\0r\30\377\0m\34\377\0w\17\377\0x\35\377\0\177(\377\0^#\377\0" - "c\22\377\0U\17\377\0<\15\377\0B\34\377\0""3\30\377\0""8$\377\0""5\34" - "\377\0($\377\0.+\377\0()\377\0&3\377\0\37""6\377\0+.\377\0\40""5\377" - "\0""40\377\0@:\377\0>5\377\0A<\377\0FK\377\0fM\377\0mY\377\0s_\377\0" - "o_\377\0kW\377\0mS\377\0aZ\377\0ZX\377\0H_\377\0I_\377\0CT\377\0>c\377" - "\0""5[\377\0\77f\377\0""6n\377\0(q\377\0-j\377\0""5y\377\0C|\377\0:{" - "\377\0E{\377\0V\201\377\0_\203\377\0^g\377\0Ym\377\0Xi\377\0Zc\377\0" - "U`\377\0Gd\377\32R\227\377\0""9\202\377\0)g\377\0.s\377Q\15+\377.\0\31" - "\377\15\0\0\377\21\0\4\377\36.\16\377\31'\6\377\36\31\16\377\35\40\23" - "\377\35\22\25\377\20\15\27\377\34\25'\377\36\16\30\377\13\6\34\377\2" - "\40\"\377\17\16\13\377\0\16\27\377\0\16\36\377\15\36)\377\10\33(\377" - "\4\33""1\377\3\35""3\377\10\25""3\377\20\7#6\377\21\30-\377\0#\40\377" - "\6#%\377\0!$\377\0$*\377\0%1\377\0'1\377\0""3'\377\0""30\377\0*.\377" - "\0(\37\377\0""4!\377\2*\32\377\0""0&\377\0/\"\377\202\0""8,\377\36\0" - "B\35\377\0A'\377\4V\35\377\0V#\377\0R\"\377\2M\35\377\26f(\377\35g(\377" - "\10X'\377\5P&\377\26X\32\377\13b\"\377\15T!\377\22'(\377\21\4\24\377" - "\7\0\25\377\0\0\22\377\0\0\23\377\0\0\16\377\0\0\11\377\5\0\23\377\3" - "\0\27\377\0\0\24\377\0\0\27\377\0\0\24\377\0\0\26\377\0\0\32\377\0\0" - "\40\377\0\0#\377\0\0\37\377\202\0\0\27\377\27\0\0\25\377\0\0\7\377\0" - "\0\15\377\0\0\34\377\0\0\26\377\0\0\24\377\0\10\26\377\0G\20\377\0F\24" - "\377\0R\40\377\0M\31\377\0\\\27\377\0P!\377\0I\24\377\0\16\2\377\0\0" - "\0\377\0\0\11\377\0\0\7\377\0\0\0\377\0\0\12\377\0\0\3\377\0\0\7\377" - "\0\0\2\377\216\0\0\0\377\177\0\22\0\377\0K\0\377\0C\0\377\0=\0\377\0" - "I\0\377\0F\0\377\0H\0\377\0R\0\377\0J\0\377\0U\0\377\0K\0\377\0N\0\377" - "\0Q\0\377\0Z\0\377\0N\0\377\0@\0\377\0<\0\377\0""8\0\377\0""4\0\377\0" - ";\0\377\0""9\0\377\0""5\0\377\0>\0\377\0\16\0\377\0\0\0\377\0\4\0\377" - "\0\1\0\377\0\16\0\377\0\5\0\377\0\0\0\377\0\37\0\377\0G\0\377\0J\0\377" - "\0M\0\377\0O\0\377\0I\0\377\0L\0\377\0\77\0\377\0""8\0\377\0=\0\377\0" - "9\0\377\0\77\0\377\0""7\0\377\0N\0\377\0D\0\377\0""0\0\377\0<\0\377\0" - "\37\0\377\0\36\0\377\0$\0\377\0\40\0\377\0\27\0\377\0\"\0\377\0\23\0" - "\377\0\25\0\377\0%\0\377\0\27\0\377\0\36\0\377\0\27\0\377\0&\0\377\0" - "\36\0\377\0\32\0\377\0\31\0\377\0\30\0\377\0\26\0\377\0\22\0\377\0\27" - "\11\377\20;2\377\5(\27\377\10\"\33\377\4""8\40\377\7""4\40\377\7H4\377" - "\16I/\377\7E+\377\12""8\"\377\10""5#\377\5""9\37\377\6A\"\377\5\77\23" - "\377\5L\33\377\3H\25\377\3G\16\377\3@\20\377\2J\4\377\1L\7\377\1T\40" - "\377\0Y\21\377\0P\22\377\0X\16\377\0e\33\377\0Z!\377\0[\31\377\0b\23" - "\377\0W\31\377\0Y\16\377\0Z\33\377\0k\27\377\0_\27\377\0f%\377\0^#\377" - "\0f)\377\0N$\377\0""9\37\377\0""5(\377\0(\"\377\0(!\377\0)\35\377\0'" - "#\377\0\31'\377\0#6\377\0&4\377\0\40.\377\0%,\377\0""3#\377\0""71\377" - "\0""57\377\0<4\377\0V:\377\0PC\377\0^S\377\0sI\377\0vU\377\0\213T\377" - "\0oS\377\0gO\377\0aP\377\177\0UJ\377\0QW\377\0Cg\377\0;\\\377\0:i\377" - "\0""5j\377\0+n\377\0,x\377\0)o\377\0""6u\377\0At\377\0@t\377\0Nz\377" - "\0Qq\377\0Z{\377\0^\205\377\0[o\377\0_|\377\0^t\377\0[p\377\0Vl\377\0" - "Zi\377\22h\234\377\0C\216\377\0\40q\377\0$q\377Y\0,\3778\0\33\377\25" - "\0\6\377\26\0\0\377%*\16\377$'\4\377\23)\4\377\30\33\23\377!\16\33\377" - "\31\36\34\377\25\37\11\377\25\23\20\377\5\37\17\377\17\16\15\377\5\15" - "\25\377\0\10\25\377\7\20\37\377\4\16*\377\0\26&\377\0\26\"\377\11\27" - ")\377\6\23(\377\11\30&\377\5$!\377\14#\40\377\11\36\33\377\16\"(\377" - "\0#.\377\3\"\34\377\0-0\377\2/,\377\0\34*\377\0\33\34\377\0#'\377\0$" - "\24\377\0(\"\377\0.$\377\0""1)\377\0""4\"\377\0""4)\377\0C\30\377\0F" - "-\377\0J(\377\2K&\377\4Q\37\377\11K)\377\27V#\377\22[\17\377\16K'\377" - "\15P&\377\12S\26\377\0\"\35\377\0\0\16\3774:g\377Nl\271\377N\213\336" - "\377\\\214\327\377X\231\334\377Q\213\334\377T\220\327\377\\\216\345\377" - "D\215\342\377U\203\342\377S\216\347\377X\222\327\377N\200\346\377b\207" - "\357\377L\202\355\377O\220\347\377H\211\327\377T\212\324\377N\224\340" - "\377G\205\347\377;\211\331\377H\216\332\3779\212\337\3777\222\345\377" - ";\223\325\377\0\0\"\377\0C\36\377\0J\34\377\0M\23\377\0Z\16\377\0O\34" - "\377\0\33\22\377\0\11%\377\12a\204\377\33\237\300\377\32\244\313\377" - "\24\231\330\377\34\241\324\377\31\234\323\377\12\236\305\377\25\227\311" - "\377\23\245\306\377\25\232\313\377\21\241\322\377\21\247\304\377\5\246" - "\307\377\22\230\316\377\10\246\305\377\21\15\237\276\377\26\243\271\377" - "\14\243\267\377\16\245\275\377\20\234\263\377\27\235\262\377\16\235\254" - "\377\13\253\275\377\0\5\0\377\0J\0\377\0O\0\377\0Q\0\377\0J\0\377\0E" - "\0\377\0O\0\377\0K\0\377\0F\0\377\202\0O\0\377\7\0V\0\377\0O\0\377\0" - "Z\0\377\0J\0\377\0P\0\377\0D\0\377\0K\0\377\202\0:\0\377\26\0\77\0\377" - "\0""8\0\377\0A\0\377\0\26\0\377\0\260\250\377\2\262\252\377\0\303\260" - "\377\0\277\232\377\0\272\241\377\0\261\234\377\0L:\377\0-\0\377\0G\0" - "\377\0I\0\377\0H\0\377\0F\0\377\0C\0\377\0H\0\377\0:\0\377\0H\0\377\0" - "C\0\377\0D\0\377\202\0H\0\377\2\0F\0\377\0""7\0\377\202\0,\0\377\4\0" - "(\0\377\0%\0\377\0#\0\377\0%\0\377\202\0\33\0\377\3\0)\0\377\0/\0\377" - "\0\40\0\377\202\0)\0\377\202\0'\0\377\177\0\30\0\377\0\33\0\377\0$\0" - "\377\0\37\0\377\0\23\0\377\5(%\377\5.)\377\4""5\40\377\4,\33\377\6""8" - "\34\377\11L$\377\11M\36\377\5J\34\377\6A$\377\5G\25\377\5I\24\377\2L" - "\21\377\5J\23\377\3G\34\377\5X\33\377\4T\36\377\5A\31\377\4T\34\377\3" - "O\26\377\2R\31\377\1L\2\377\0X\7\377\0V\11\377\0Y\27\377\0^\31\377\0" - "W\31\377\0S\40\377\0V!\377\0Y\34\377\0V\20\377\0M\27\377\0V\31\377\0" - "O\32\377\0V!\377\0M\24\377\0X\25\377\0K$\377\0D\25\377\0B\32\377\0""1" - "\35\377\0$\13\377\0\31$\377\0!\26\377\0\33#\377\0""5*\377\0""2.\377\0" - "-8\377\0&%\377\0)4\377\0""74\377\0""9:\377\0L;\377\0OA\377\0VF\377\0" - "oQ\377\0}W\377\0\211^\377\0{[\377\0r^\377\0rb\377\0nE\377\0QU\377\0M" - "S\377\0Ma\377\0Ie\377\0Gd\377\0Cf\377\0" - "\31\377\4U\24\377\3S\22\377\22Y\33\377\2W\37\377\12O\30\377\12P\33\377" - "\2L\21\377\0\0\12\377En\261\377a\222\320\377E\215\340\377J\213\315\377" - "F\217\330\377S\204\314\377Q\202\333\377F\203\327\377A\201\344\377E\207" - "\337\377M\203\322\377D\210\323\377O\177\323\377Rw\345\377Q}\335\377K" - "\215\347\377V\212\317\377N\201\307\377F\220\326\377E\210\341\377C\222" - "\327\377;\220\323\377D\213\341\377F\223\323\377:\213\321\377A\213\320" - "\377\0\20\77\377\0""4\4\377\0N\26\377\0G\22\377\0R\22\377\0\31\21\377" - "\0\17O\377*\226\322\377.\220\332\377\27\226\326\377\14\232\330\377\32" - "\223\327\377\33\222\320\377\24\233\304\377\27\216\305\377\36\232\310" - "\377\30\244\305\377\17\234\310\377\40\264\311\377\40\235\306\377\16\233" - "\304\377!\230\275\377\"\233\271\377\26\253\273\377\31\244\301\377\31" - "\241\271\377\31\253\257\377\16\251\254\377\31\242\264\377\23\242\264" - "\377\5\253\261\377\0)\36\377\0""7\0\377\0M\0\377\0P\0\377\0T\0\377\0" - "P\0\377\0D\0\377\0B\0\377\0L\0\377\0I\0\377\0R\0\377\0H\0\377\0I\0\377" - "\0@\0\377\0H\0\377\0A\0\377\0""9\0\377\0B\0\377\0""7\0\377\0:\0\377\0" - ";\0\377\0A\0\377\0<\0\377\0\22\0\377\0\212\202\377\0\267\243\377\0\264" - "\246\377\0\255\241\377\0\270\245\377\0\245\241\377\0H>\377\0\35\0\377" - "\0;\0\377\0=\0\377\0M\0\377\0J\0\377\0U\0\377\0R\0\377\0S\0\377\0D\0" - "\377\0M\0\377\0@\0\377\0E\0\377\0A\0\377\0\77\0\377\0""9\0\377\0-\0\377" - "\0:\0\377\202\0,\0\377\177\0$\0\377\0\34\0\377\0\25\0\377\0)\0\377\0" - "\34\0\377\0$\0\377\0)\0\377\0""3\0\377\0""9\0\377\0""5\0\377\0!\0\377" - "\0\33\0\377\0\36\0\377\0\15\0\377\0\25\0\377\1\33\11\377\1\36\11\377" - "\2,\27\377\2""1\34\377\3=\36\377\5G$\377\5D\36\377\3P\33\377\2D\27\377" - "\3I\14\377\1J\12\377\3N\14\377\3P\21\377\2I\31\377\4Y)\377\5S\35\377" - "\5M\37\377\4P\36\377\4M\34\377\4U\30\377\2I\13\377\1K\11\377\0G\6\377" - "\0P\16\377\0^\6\377\0Z\27\377\0Y\25\377\0R\35\377\0X\25\377\0X\16\377" - "\0P\25\377\0J\25\377\0N\14\377\0C\35\377\0@\24\377\0E(\377\0J\31\377" - "\0F\35\377\0K\31\377\0B\32\377\0.\22\377\0.\17\377\0'\27\377\0\34\25" - "\377\0-+\377\0\77&\377\0D&\377\0""7,\377\0""35\377\0""1:\377\0>5\377" - "\0""9@\377\0L6\377\0[@\377\0gB\377\0fT\377\0~S\377\0\215Z\377\0\207`" - "\377\0{Y\377\0tS\377\0m;\377\0[N\377\0ZQ\377\0A_\377\0B_\377\0>^\377" - "\0Ll\377\0Ee\377\0Gs\377\0Ej\377\0Hp\377\0Gj\377\0K^\377\0Se\377\0Gd" - "\377\0Ou\377\0Oi\377\0Ta\377\0Iw\377\0Mj\377\0bl\377\0Tf\377\0Vl\377" - "\14d\245\377\0R\217\377\0>{\377\0>\177\377R\0B\3778\0\35\377\37\0\3\377" - "\17\0\0\377\33\33\2\377\32\"\12\377$\32\15\377)\25\10\377\37\12\14\377" - "\30\24\34\377\26\23\14\377\21\34\15\377\17\21\2\377\17\16\4\377\7\15" - "\13\377\15\26\17\377\0\15\12\377\2\16\13\377\14\33\0\377\11\7\13\377" - "\4\13\10\377\7\34\10\377\6\22\13\377\13\25\5\377~\16\27\6\377\22\35\20" - "\377\11\22\12\377\21\22\26\377\4\12\22\377\17\33\24\377\0\40\24\377\1" - "-\10\377\5\"\36\377\1""3\25\377\4/\30\377\0""6\25\377\0\37\25\377\0\"" - "\31\377\0""4\37\377\0""2\35\377\0=\17\377\0""3!\377\0B\22\377\0P\20\377" - "\0C\5\377\2D\14\377\4P\14\377\1>\6\377\0B\10\377\0J\0\377\0\30\3\377" - "\3\24O\377F\201\313\377\77}\312\377Dv\323\377Mu\306\3777\205\320\377" - "2x\320\377\"^\253\377\13-f\377\22\27j\377\21\16m\377\11\40o\377\6\34" - "o\377\21\26p\377\14\30n\377\14\34n\377\13\30`\377\0#B\377\13(]\377\14" - "!Z\377\6-[\377\0)e\377\0+Y\377\0>c\377\13""0a\377\5Li\377,n\236\377\13" - "3X\377\0\"\0\377\0M\0\377\0Q\14\377\0O\0\377\0\0\1\377\37r\260\377'\177" - "\301\377\31\206\307\377!\205\302\377#\214\312\377\34\222\304\377\21~" - "\265\377\0>S\377\0AH\377\0EQ\377\0CI\377\0JJ\377\0FY\377\0HI\377\0>@" - "\377\0EJ\377\0QV\377\0KI\377\0H;\377\0M7\377\0L+\377\0""99\377\0C<\377" - "\0WC\377\0{q\377\0SA\377\0)\0\377\0M\0\377\0D\0\377\0O\0\377\0>\0\377" - "\0""8\0\377\0""3\0\377\0""8\0\377\0C\0\377\0>\0\377\0""6\0\377\0>\0\377" - "\0\77\0\377\0""3\0\377\0&\0\377\0""7\0\377\0C\0\377\0K\0\377\0;\0\377" - "\0""9\0\377\0""6\0\377\0""7\0\377\0\0\0\377\0vv\377\0\240\250\377\0\230" - "\230\377\0\237\257\377\0\234\253\377\0\250\261\377\0OD\377\0&\0\377\0" - "L\0\377\0""8\0\377\0:\0\377\0L\0\377\0`\0\377\0T\0\377\0W\0\377\0J\0" - "\377\0H\0\377\202\0\77\0\377\3\0=\0\377\0*\0\377\0'\0\377\202\0*\0\377" - "\6\0,\0\377\0\35\0\377\0\24\0\377\0\31\0\377\0#\0\377\0\23\0\377\202" - "\0(\0\377\177\0#\0\377\0)\0\377\0""1\0\377\0&\0\377\0,\0\377\0\26\0\377" - "\0\30\0\377\0\24\0\377\0\15\0\377\3&\33\377\6)\"\377\3,\32\377\6/\35" - "\377\5<%\377\2H\"\377\4D#\377\3P\24\377\0S\7\377\1S\3\377\1O\4\377\1" - "W\5\377\1T\7\377\3]\21\377\3L\33\377\4K\26\377\4K\14\377\3E\22\377\4" - "D\25\377\2O\13\377\1=\7\377\1J\5\377\0H\16\377\0Q\6\377\0\\\13\377\0" - "[\14\377\0W\12\377\0W\11\377\0_\14\377\0X\15\377\0O\11\377\0L\23\377" - "\0""9\17\377\0=\27\377\0C\20\377\0:\27\377\0;(\377\0=\24\377\0H\30\377" - "\0""2\27\377\0""1\26\377\0""1\30\377\0(\20\377\0""9\32\377\0-\40\377" - "\0@&\377\0>\37\377\0H/\377\0=(\377\0@-\377\0V/\377\0P=\377\0_4\377\0" - "h9\377\0vA\377\0wD\377\0\213E\377\0\207L\377\0{O\377\0cE\377\0aJ\377" - "\0XD\377\0DT\377\0KM\377\0DQ\377\0\77\\\377\0NZ\377\0Ak\377\0Sf\377\0" - "Kj\377\0KZ\377\0Hf\377\0Sd\377\0G]\377\0E\\\377\0Jd\377\0L^\377\0BV\377" - "\0@S\377\0\77U\377\0R]\377\0_Z\377\0sh\377\0xd\377\23n\240\377\0U\215" - "\377\0Ds\377\0Ap\377W\0(\3770\0\11\377\31\0\0\377\13\0\0\377#\37\4\377" - ".#\0\377\"\22\4\377#\20\0\377\36\36\0\377\"\31\0\377\36\32\0\377\14\24" - "\0\377\14\35\0\377\15\30\2\377\6\21\6\377\1\25\0\377\15\30\1\377\16\33" - "\0\377\7\17\0\377\7\22\0\377\13\25\0\377\7\27\0\377\10\15\0\377\15\4" - "\3\377\20\13\0\377\13\31\0\377\7\32\2\377\2\25\4\377\7\31\1\377\3\35" - "\0\377#\7%\1\377\10\33\13\377\23-\4\377\13""6\23\377\7;\11\377\0""4\2" - "\377\0""1\13\377\0""4\7\377\0,\0\377\0<\0\377\0\77\4\377\0G\22\377\0" - "F\24\377\0E\6\377\0<\4\377\0@\15\377\0;\6\377\0;\1\377\0;\0\377\0C\0" - "\377\0\0\0\377,C\204\377I\200\303\377Mu\275\377D{\305\377=x\270\377F" - "u\306\377\77u\275\377\0\0\16\377\0\4\0\377\0\0\0\377\0\0\5\377\0\0\6" - "\377\0\0\22\377\0\0\20\377\204\0\0\0\377\177\0\2\0\377\0\5\0\377\0\4" - "\0\377\0\0\0\377\0\11\0\377\0\27\0\377\0\34\2\377\0\30\3\377\0\10\3\377" - "\0*\0\377\0@\15\377\0U\14\377\0I\3\377\0""7\0\377\0\0\17\377\"\212\257" - "\3771|\276\377+\200\270\377+\212\273\377\40\204\273\377\30\222\263\377" - "\0DU\377\0\21\0\377\0\35\0\377\0%\0\377\0\31\0\377\0\27\0\377\0\30\0" - "\377\0\23\0\377\0!\0\377\0\35\0\377\0%\0\377\0-\0\377\0\37\0\377\0\36" - "\0\377\0\33\0\377\0\27\0\377\0\32\0\377\0\20\0\377\0\12\0\377\0$\0\377" - "\0+\0\377\0@\0\377\0B\0\377\0A\0\377\0;\0\377\0""5\0\377\0""1\0\377\0" - "9\0\377\0)\0\377\0""1\0\377\0""0\0\377\0-\0\377\0+\0\377\0""0\0\377\0" - "*\0\377\0=\0\377\0""0\0\377\0B\0\377\0)\0\377\0""8\0\377\0""9\0\377\0" - "$\0\377\0\0\0\377\0io\377\0\214\251\377\0\226\270\377\0\232\253\377\0" - "\223\266\377\0\233\247\377\0HB\377\0$\0\377\0<\0\377\0R\0\377\0I\0\377" - "\0X\0\377\0`\0\377\0W\0\377\0I\0\377\0A\0\377\0E\0\377\0F\0\377\0E\0" - "\377\0""9\0\377\0.\0\377\0&\0\377\0,\0\377\0&\0\377\0\37\0\377\0\27\0" - "\377\0\32\0\377\0\40\0\377\0\36\0\377\0\40\0\377\0)\0\377\0\35\0\377" - "\0(\0\377\0;\0\377\0""6\0\377\0""5\0\377\0$\0\377\0\30\0\377\0\26\0\377" - "\0\17\0\377\0\31\0\377\5""2)\377\5""7)\377\15""4-\377\12""5-\377\11*" - "&\377\7/!\377\7@\31\377\5L\20\377\0\\\2\377\0Y\0\377\0U\1\377\0^\1\377" - "\1Y\3\377\1`\14\377\2R\7\377\3B\10\377\2D\16\377\1;\11\377\2:\16\377" - "\2=\13\377\2\77\11\377\1\\\5\377m\0i\16\377\0b\0\377\0X\0\377\0d\6\377" - "\0Z\17\377\0]\6\377\0]\2\377\0[\0\377\0I\7\377\0F\10\377\0;\7\377\0F" - "\25\377\0E\27\377\0F\25\377\0<\30\377\0G\12\377\0H\6\377\0;\17\377\0" - "6\30\377\0""6\20\377\0""1\21\377\0""8\33\377\0/\40\377\0F\21\377\0""9" - "\33\377\0@\34\377\0""9&\377\0F.\377\0O,\377\0\\/\377\0e5\377\0r;\377" - "\0x=\377\0y5\377\0\177C\377\0r2\377\0e4\377\0];\377\0_\77\377\0Y8\377" - "\0UC\377\0@A\377\0""9R\377\0IW\377\0:X\377\0\77a\377\0Dl\377\0Of\377" - "\0RZ\377\0PQ\377\0IM\377\0BC\377\0@M\377\0DL\377\0KF\377\0FL\377\0XP" - "\377\0PD\377\0SR\377\0dF\377\0wT\377\0oT\377\6p\240\377\0V|\377\0""4" - "g\377\0=^\377b\0""1\377@\0\10\377\24\0\0\377\27\0\0\377%%\0\377,\35\0" - "\377&%\0\3770\30\0\377\40\16\0\377/\20\0\377#\31\0\377\22\27\0\377\5" - "\20\0\377\30\24\0\377\26\17\0\377\16\17\0\377\14\21\0\377\12\31\0\377" - "\27\25\0\377\15\21\0\377\33\5\0\377\24\16\0\377\20\10\2\377\32\27\0\377" - "\16\23\0\377\30\22\1\377\32\20\4\377\21\36\0\377\20\24\3\377\24\30\3" - "\377\24\33\11\377\22\23\2\377\17%\0\377\7.\3\377\3/\12\377\0-\10\377" - "\0%\4\377\0""2\3\377\0""9\0\377\0""4\0\377\4G\13\377\0F\15\377\0L\0\377" - "\202\0<\0\377\202\0I\0\3770\0=\0\377\0A\0\377\0D\0\377\0\0\0\377,F\214" - "\377>q\274\377D\200\301\377Dz\257\377Hx\270\377>r\300\377;l\302\377\0" - "\0\0\377\0%\0\377\0\27\14\377\0\30\12\377\0\22\4\377\0\36\15\377\0\34" - "\0\377\0\36\0\377\0\26\0\377\0&\3\377\0#\0\377\0&\0\377\0#\0\377\0'\0" - "\377\0$\0\377\0/\0\377\0""2\0\377\0""8\0\377\0:\0\377\0H\0\377\0I\0\377" - "\0H\0\377\0L\4\377\0J\0\377\0""0\0\377\0\25\24\377&\205\256\377$\201" - "\266\377.\205\257\377\34\204\272\377\33\201\266\377\21\220\270\377\0" - "\0\377\202\0""2\0\377\2\0""9\0\377\0<\0\377\202\0.\0\377-\0""3\0\377" - "\0,\0\377\0""7\0\377\0-\0\377\0""4\0\377\0""0\0\377\0&\0\377\0""0\0\377" - "\0""6\0\377\0'\0\377\0""9\0\377\0.\0\377\0*\0\377\0\0\0\377\0Sd\377\0" - "\203\270\377\0\222\253\377\0\215\255\377\0\213\241\377\0\216\247\377" - "\0L;\377\0*\0\377\0<\0\377\0>\0\377\0I\0\377\0W\0\377\0V\0\377\0D\0\377" - "\0E\0\377\0D\0\377\0E\0\377\0>\0\377\0H\0\377\0""6\0\377\0""0\0\377\0" - ")\0\377\0#\0\377\0\26\0\377\0\40\0\377\0%\0\377\0-\0\377\0&\0\377\0'" - "\0\377\0\36\0\377\0$\0\377\202\0*\0\377\40\0I\0\377\0M\0\377\0""8\0\377" - "\0\40\0\377\0\33\0\377\0\25\0\377\0\20\0\377\0\24\0\377\14""5+\377\15" - ")'\377\14\"!\377\13\37\37\377\17\37\35\377\13-\33\377\7<\23\377\10S\15" - "\377G\216G\377\225\265\225\377\314\333\314\377\351\360\351\377\371\372" - "\371\377\340\351\340\377\234\274\235\377%`)\377\2E\7\377\3L\10\377\3" - "X\12\377\5P\13\377\4Z\12\377\1_\6\377\0h\1\377\0f\0\377\202\0b\0\377" - "@\0i\1\377\0o\10\377\0p\3\377\0X\16\377\2O\5\377:p>\377\216\260\221\377" - "\304\323\305\377\336\345\340\377\370\371\370\377\360\364\360\377\323" - "\336\324\377\201\240\204\377\11B\34\377\0""2\"\377\0""1\23\377\0""2\15" - "\377\0A%\377\0B'\377\0D*\377\0;#\377\0@!\377\0A\40\377\0G'\377\0Y\35" - "\377\0b)\377\1\207+\377T\263z\377\306\345\324\377\352\366\357\377\372" - "\374\373\377l\253\215\377\0b&\377\0P-\377\0S0\377\0R9\377\0IO\377\0>" - "G\377\0:T\377\0/M\377\0=O\377\0Ma\377\0GU\377\0NV\377\0SW\377\0HV\377" - "\0O[\377\0AF\377\0O;\377\0NM\377\0UK\377\0YB\377\0YM\377\0^I\377\0bJ" - "\377\0hH\377\0oX\377\0gW\377\7y\203\377\0gk\377\0CP\377\0BB\377^\0/\377" - ":\0\16\377\202\31\0\0\377\10#-\5\377)+\0\377*\40\0\377&\34\0\377#\30" - "\0\377\33\31\0\377#\32\0\377\35\26\0\377\202\34\20\0\377.\22\7\0\377" - "\22\11\0\377\22\17\0\377\25\23\0\377\31\12\0\377\34\26\0\377\21\11\0" - "\377!\17\0\377\16\34\2\377#\23\0\377$\25\0\377\40\20\0\377\31\33\10\377" - "\30\11\3\377\23\11\15\377\34\14\13\377\23\31\0\377\26\32\4\377\13\22" - "\4\377\13\"\14\377\6\36\14\377\10!\11\377\6(\10\377\21(\2\377\13(\0\377" - "\3""6\0\377\2K\0\377\0G\0\377\0E\0\377\0C\0\377\0H\0\377\0\77\0\377\0" - "B\0\377\0""5\0\377\0\77\0\377\0>\0\377\0\0\0\377-;\204\377Cj\275\377" - ";v\261\3778l\260\377>t\262\377:m\263\3775d\265\377\0\0\0\377\0\35\0\377" - "\202\0\30\0\377\5\0\32\0\377\0\22\4\377\0\24\0\377\0\32\0\377\0\26\0" - "\377\202\0\36\0\377e\0\25\0\377\0\"\0\377\0""1\0\377\0(\0\377\0,\0\377" - "\0""4\0\377\0""1\0\377\0""7\0\377\0""1\0\377\0C\0\377\0G\0\377\0;\0\377" - "\0G\0\377\0,\0\377\0\4\31\377\36\204\301\377\23\215\272\377!\222\276" - "\377\40\214\262\377\27\215\305\377\37\202\265\377\0""3V\377\0\36\0\377" - "\0L\0\377\0""1\0\377\0""0\0\377\0""2\0\377\0@\0\377\0""6\0\377\0;\0\377" - "\0>\0\377\0""7\0\377\0""6\0\377\0.\0\377\0=\0\377\0E\0\377\0+\0\377\0" - "1\0\377\0-\0\377\0""5\0\377\0""6\0\377\0""2\0\377\0<\0\377\0""7\0\377" - "\0:\0\377\0*\0\377\0+\0\377\0$\0\377\0#\0\377\0\23\0\377\0\32\0\377\0" - "\33\0\377\0\40\0\377\0\23\0\377\0\25\0\377\0\16\0\377\0\32\0\377\0\20" - "\0\377\0\16\0\377\0\15\0\377\0\25\0\377\0\32\0\377\0*\0\377\0\0\0\377" - "\0Bq\377\0\200\260\377\0\200\246\377\0y\247\377\0\214\240\377\0\231\241" - "\377\0""58\377\0\24\0\377\0""3\0\377\0:\0\377\0#\0\377\0(\0\377\0,\0" - "\377\0-\0\377\0""1\0\377\0-\0\377\0&\0\377\0+\0\377\0*\0\377\0""6\0\377" - "\0\77\0\377\0""2\0\377\0!\0\377\0\26\0\377\0\17\0\377\0\35\0\377\0\26" - "\0\377\0\40\0\377\0(\0\377\0\33\0\377\0'\0\377\0\"\0\377\0,\0\377\0/" - "\0\377\0""6\0\377\0;\0\377\0""9\0\377\202\0-\0\377\17\0\30\0\377\0\11" - "\0\377\3'\26\377\10!\34\377\12\40\35\377\14\31\26\377\11)\30\377\31""2" - "\37\377|\235\177\377\345\357\345\377\261\310\261\377\204\246\204\377" - "r\244r\377\227\275\227\377\353\361\353\377\202\377\377\377\377\25\367" - "\371\367\377H\211M\377\3L\12\377\5U\13\377\5X\14\377\5U\12\377\2Y\4\377" - "\0e\1\377\0d\0\377\0Z\0\377\0r\0\377\0n\0\377\0q\3\377\1`\1\377[\241" - "[\377\340\353\340\377\265\317\266\377x\243x\377X\210X\377z\243z\377\265" - "\310\265\377\203\377\377\377\377\16\300\317\303\377\2>\15\377\0<\5\377" - "\0A\0\377\0E\21\377\0H)\377\0""9\37\377\0;\"\377\0""8\34\377\0""8\33" - "\377\0E\17\377\0`\31\377\24\222B\377\300\351\312\377\203\377\377\377" - "\377\17\304\337\316\377\4e\"\377\0c%\377\0U,\377\0]0\377\0W9\377\0[5" - "\377\0QM\377\0\77M\377\0F\77\377\0E9\377\0""6C\377\0>P\377\0FP\377\0" - "EW\377\202\0NL\377O\0[H\377\0VE\377\0SA\377\0H=\377\0S<\377\0\\=\377" - "\0RK\377\0cI\377\0jG\377\0]T\377\0iS\377\13v\205\377\0Mq\377\0""8Y\377" - "\0-Y\377^\0-\377D\0\23\377\26\0\0\377\24\0\0\377\"3\0\3774+\0\377*&\0" - "\3772\30\0\377\"\34\0\377#\22\0\377\32\3\0\377\40\13\0\377\40\5\0\377" - "(\12\0\377\36\14\0\377\30\6\0\377$\17\0\377\31\5\0\377\25\7\0\377\34" - "\15\0\377\22\23\0\377\"\22\2\377\37\25\0\377\"\31\3\377%\24\10\377'\15" - "\0\377\36\12\0\377\40\0\4\377\30\2\0\377'\3\2\377\22\11\4\377\24\12\0" - "\377\22\11\0\377\15\22\17\377\16\6\7\377\25\14\15\377\25\35\0\377\23" - "-\3\377\0""7\0\377\0""4\0\377\0:\0\377\0""5\0\377\0@\0\377\0G\6\377\0" - "F\0\377\0;\0\377\0D\0\377\0H\0\377\0C\0\377\0""7\0\377\0\0\0\377/C\205" - "\3778q\260\377:g\274\3771Z\257\377'_\272\377*_\261\3777^\271\377\0\0" - "\0\377\0\37\0\377\0\17\0\377\0\31\0\377\0\23\0\377\0\35\0\377\202\0\34" - "\0\377\33\0\20\0\377\0#\0\377\0%\0\377\0\36\0\377\0\40\0\377\0\32\0\377" - "\0!\0\377\0\"\0\377\0'\0\377\0""5\0\377\0""1\0\377\0%\6\377\0""3\0\377" - "\0\35\2\377\0\33\0\377\0/\0\377\0\33\0\377\0\27""6\377(\211\321\377*" - "\217\312\377!\220\311\377\22\205\307\377\17\203\305\377\14}\275\377\0" - "1V\377\0\13\0\377\0""7\1\377\202\0""7\0\377\25\0<\0\377\0@\0\377\0""7" - "\0\377\0E\0\377\0A\0\377\0""7\0\377\0B\0\377\0J\0\377\0""9\0\377\0=\0" - "\377\0<\0\377\0)\0\377\0""1\0\377\0""9\0\377\0""2\0\377\0-\0\377\0=\0" - "\377\0""7\0\377\0!\0\377\0\37\0\377\0\25\0\377\202\0\0\0\377\15\0\33" - "\24\377\0\25\11\377\0\35\12\377\0\6\1\377\0\17\16\377\0\27\5\377\0\12" - "\10\377\0\7\12\377\0\16\10\377\0\26\15\377\0\23\23\377\0\10\15\377\0" - "\0\16\377\202\0\0\0\377\30\0Jq\377\0k\262\377\0z\252\377\0t\250\377\0" - "y\234\377\0y\242\377\0\":\377\0\0\0\377\0\34\0\377\0\35\0\377\0\31\0" - "\377\0\32\0\377\0\34\11\377\0\21\0\377\0\35\7\377\0!\0\377\0\33\1\377" - "\0\32\2\377\0\15\0\377\0\23\0\377\0""0\0\377\0""5\0\377\0%\0\377\0\12" - "\0\377\202\0\20\0\377\35\0\31\0\377\0\16\0\377\0\23\0\377\0\11\0\377" - "\0\0\0\377\0\35\0\377\0\32\0\377\0\35\0\377\0\36\4\377\0\3\0\377\0<\0" - "\377\0$\0\377\0\35\0\377\0\33\0\377\0\23\0\377\6\35\17\377\14#\25\377" - "\11\36\22\377\11\21\23\377Uj_\377\353\357\354\377\243\272\246\377\31" - "Z\35\377\0T\1\377\0T\0\377\0R\0\377\0c\1\377\21e\21\377\266\316\266\377" - "\202\377\377\377\377\25\355\363\355\377\33r\40\377\11d\14\377\10g\16" - "\377\10c\13\377\3b\5\377\1Q\1\377\0Z\0\377\0e\0\377\0c\0\377\0j\0\377" - "%\203&\377\306\337\306\377\276\327\276\377'\205'\377\0Z\0\377\0W\0\377" - "\0S\0\377\0V\0\377\0L\0\377U\177U\377\203\377\377\377\377]\25\377\0C\14\377\0B\37\377\0@\23\377\0@\13\377\0-" - "\26\377\0F\14\377'z=\377\334\354\340\377\244\340\257\377,\303N\377\16" - "\277U\377\14\242<\377\5\215&\377\0q\40\377\0h/\377\0P-\377\0R&\377\0" - "R'\377\0Q7\377\0B\77\377\0S8\377\0J=\377\0D=\377\0AN\377\0DR\377\0SU" - "\377\0J@\377\0IG\377\0PB\377\0`7\377\0O6\377\0\\C\377\0X;\377\0N@\377" - "\0JH\377\0PB\377\0SG\377\0hW\377\0OX\377\0Yb\377\15f\236\377\0C\214\377" - "\0\"m\377\0\40f\377Z\0\37\377<\0\4\377$\0\0\377/\0\0\37754\0\377\40," - "\0\3772*\5\377-0\0\3774\13\0\377,\22\0\3773\15\0\3772\14\0\377\33\12" - "\0\377\30\3\0\377\33\13\0\377\35\2\0\377#\0\0\377\26\11\0\377\25\4\0" - "\377\33\13\0\377(\12\0\377\37\32\0\3770\17\5\377-\31\0\377(\10\0\377" - "\"\20\0\377(\1\0\377\40\0\0\377\36\4\0\377&\3\0\377\22\13\0\377\31\0" - "\0\377\21\7\2\377#\16\0\377\"\3\0\377#\5\4\377\35\26\0\377\35\34\0\377" - "\16,\0\377\0;\0\377\11:\0\377\0B\0\377\0""5\0\377\0<\0\377\0""7\0\377" - "\202\0""8\0\377\21\0B\0\377\0>\0\377\0""8\0\377\0\0\0\377/4~\377=a\272" - "\377;U\267\377,W\262\377\36I\251\3776W\305\377;U\264\377\0\0\0\377\0" - "\17\0\377\0\31\0\377\0\33\0\377\0\17\0\377\0\30\0\377\202\0\21\0\377" - "\4\0\17\0\377\0'\0\377\0,\0\377\0\31\0\377\202\0\25\0\377\25\0\23\1\377" - "\0\"\0\377\0(\0\377\0%\0\377\0\37\0\377\0$\0\377\0\40\6\377\0,\0\377" - "\0/\20\377\0\"\0\377\0\32\2\377\0\0*\377!v\274\377\37v\313\377\33\203" - "\314\377+{\307\377\37~\313\377\26\177\304\377\0%[\377\0\15\0\377\0""8" - "\0\377\202\0@\0\377^\0E\0\377\0B\0\377\0A\0\377\0B\0\377\0@\0\377\0>" - "\0\377\0B\0\377\0=\0\377\0>\0\377\0""3\0\377\0""8\0\377\0""1\0\377\0" - "=\0\377\0""2\0\377\0/\0\377\0,\0\377\0+\0\377\0""4\0\377\0\"\0\377\0" - "\0\0\377\0\36\32\377\0m\215\377\0\207\233\377\0\222\257\377\0\212\253" - "\377\0\206\244\377\0|\231\377\0\207\227\377\0\206\226\377\0}\224\377" - "\0\200\227\377\0\200\232\377\0r\250\377\0\202\241\377\0\201\235\377\0" - "v\243\377\0n\254\377\0Hn\377\0Qy\377\0o\257\377\0k\256\377\0r\257\377" - "\0m\270\377\0a\224\377\0\34/\377\0\6\0\377\0#\0\377\0\30\0\377\0\0\0" - "\377\0qi\377\0\203\227\377\0\205\236\377\0{\250\377\0\210\241\377\0\220" - "\232\377\0\215\235\377\0\177\224\377\0\11\0\377\0\17\0\377\0\40\0\377" - "\0'\0\377\0\27\0\377\0\20\0\377\0\31\0\377\0\15\0\377\0\30\0\377\0\7" - "\0\377\0\0\0\377\0XO\377\0\205\227\377\0\213\222\377\0\201\211\377\0" - "$\14\377\0""8\0\377\0L\0\377\0""3\0\377\0%\0\377\0\33\0\377\0\36\0\377" - "\4\35\14\377\7\33\22\377\7\16\20\377\230\234\234\377\377\377\377\377" - "j\200s\377\2=\15\377\0P\2\377\0c\0\377\0Z\0\377\0a\0\377\0Y\0\377\0[" - "\0\377\13`\13\377\353\361\353\377\202\377\377\377\377S|\257\177\377\10" - "h\16\377\13]\16\377\10_\14\377\3[\4\377\1Y\1\377\0[\0\377\0Z\0\377\0" - "d\0\3778\2238\377\353\363\353\377\211\274\211\377\3q\3\377\0z\0\377\0" - "n\0\377\0m\0\377\0b\0\377\0T\0\377\0G\0\377\0=\0\377\257\303\257\377" - "\377\377\377\377\214\251\214\377\1T\1\377\0E\0\377\0@\1\377\0>\7\377" - "\0G\5\377\0<\7\377\0""0\0\377\0D\22\377\0A\15\377\37_3\377\352\362\354" - "\377\302\343\310\377\2\264*\377\0\3041\377\0\303B\377\0\2511\377\0\230" - "1\377\0{(\377\0f-\377\0X.\377\0R+\377\0Z2\377\0I8\377\0C,\377\0G+\377" - "\0N2\377\0TJ\377\0FL\377\0NE\377\0RO\377\0GK\377\0N[\377\0OD\377\0L9" - "\377\0NE\377\0KI\377\0HG\377\0QB\377\0KA\377\0SF\377\0aP\377\0dL\377" - "\0ad\377\0b_\377\5e\222\377\0>s\377\0(f\377\0!h\377W\0#\377\77\0\0\377" - "&\0\0\377#\0\0\3776\37\0\3779%\0\3775&\0\377;\"\2\3771\25\0\377*\20\0" - "\3774\25\0\377,\0\0\377\202\37\0\0\3772+\0\0\3770\2\0\377&\6\0\377-\15" - "\0\377!\21\3\3771\10\0\377.\2\0\377,\11\0\3777\5\0\3771\16\3\3772\14" - "\0\377-\15\7\3773\13\5\377%\3\7\377!\3\0\377#\3\2\377$\0\3\377\36\12" - "\0\377!\26\0\377+\17\0\377\40\32\0\377\"\34\0\377\21\24\0\377\26\35\0" - "\377\21,\0\377\11""4\0\377\0/\0\377\0""1\1\377\0=\0\377\0""4\0\377\7" - "1\0\377\6B\0\377\0B\0\377\0H\0\377\0F\0\377\0-\0\377\0\0\0\377+8q\377" - "@`\246\3775[\253\377,G\256\377!K\277\377,S\267\3776D\276\377\0\0\0\377" - "\0\10\0\377\0\13\0\377\0\0\0\377\0\1\0\377\0\6\0\377\203\0\0\0\377\1" - "\0\3\0\377\207\0\0\0\377P\0\7\0\377\0\3\0\377\0\12\4\377\0\22\6\377\0" - "\"\0\377\0*\0\377\0,\0\377\0\27\0\377\0\0'\377&w\305\377#v\301\377!w" - "\303\377\34o\313\377*k\315\377\35t\311\377\0(v\377\0\6\5\377\0\6\0\377" - "\0\26\0\377\0\23\0\377\0\32\0\377\0\26\0\377\0\24\0\377\0\3\0\377\0\20" - "\0\377\0\27\0\377\0\13\0\377\0\31\0\377\0\20\0\377\0\22\0\377\0\31\0" - "\377\0\40\0\377\0/\0\377\0""9\0\377\0""5\0\377\0&\0\377\0\40\0\377\0" - "(\0\377\0\24\0\377\0\23\22\377\0~\241\377\0\200\237\377\0\207\242\377" - "\0\216\250\377\0~\230\377\0p\236\377\0r\237\377\0}\240\377\0w\216\377" - "\0o\222\377\0v\237\377\0v\232\377\0t\234\377\0s\226\377\0x\237\377\0" - "n\260\377\0j\255\377\1o\245\377\0b\261\377\0c\264\377\0g\251\377\0_\257" - "\377\0_\253\377\0l\256\377\0\32""7\377\0\0\0\377\0\14\0\377\0\27\0\377" - "\0\11\0\377\0\0\0\377\0bq\377\0p\235\377\0v\227\377\0z\230\377\0~\243" - "\377\0}\232\377\0~\237\377\0^w\377\0\0\0\377\0\12\0\377\202\0\34\0\377" - "\1\0%\0\377\202\0\17\0\377\35\0\5\0\377\0\0\0\377\0ha\377\0\220\216\377" - "\3\206\210\377\0sa\377\0\2\0\377\0:\0\377\0o\0\377\0_\0\377\0B\0\377" - "\0$\0\377\0\34\0\377\0\35\0\377\2$\6\377\3#\7\377\216\221\222\377\377" - "\377\377\377\200\207\206\377\6'\24\377\5N\13\377\0U\1\377\0Y\1\377\0" - "X\1\377\0T\0\377\0N\0\377\0Z\0\377\1a\3\377~\256\202\377\202\377\377" - "\377\377V\266\323\267\377\7e\16\377\13^\16\377\12O\17\377\5S\13\377\1" - "M\3\377\0`\1\377\0]\0\377C\215C\377\366\371\366\377\223\276\223\377\1" - "e\1\377\0\210\0\377\0\204\0\377\0t\0\377\0s\0\377\0f\0\377\0Q\0\377\0" - "E\0\377\0K\0\377`\220`\377\214\252\214\377\1A\1\377\0L\0\377\0X\0\377" - "\0G\0\377\0L\0\377\0F\0\377\0B\2\377\0""6\11\377\0\77\4\377\2W\23\377" - "\313\336\320\377\377\377\377\377V\275o\377\0\304\37\377\0\3033\377\0" - "\310I\377\0\276D\377\0\2479\377\0\213/\377\0p%\377\0]2\377\0U/\377\0" - "P)\377\0N\35\377\0\77""1\377\0C\"\377\0D'\377\0ZD\377\0`<\377\0Z@\377" - "\0hC\377\0OG\377\0JE\377\0LB\377\0B\77\377\0BL\377\0JM\377\0O9\377\0" - "RK\377\0]N\377\0\\L\377\0RS\377\0YL\377\0cZ\377\0\\^\377\0l\215\377\0" - "Ng\377\0/Q\377\0+X\377c\0\40\377:\0\15\377#\0\0\377*\0\0\377:)\0\377" - "/\33\0\377C\33\0\377B\14\0\377<\16\0\3776\7\0\3774\5\0\3776\1\0\377-" - "\0\0\377/\0\0\3773\0\0\377\202:\7\0\377\37+\26\0\377%\3\0\3773\1\0\377" - ",\2\0\3771\14\0\3778\10\0\377,\22\0\3775\5\0\3778\11\0\3779\23\0\377" - "+\12\0\377,\10\0\377'\15\2\377\36\13\0\377\31\22\0\377%\22\0\377&\27" - "\0\377$\22\0\377\34!\0\377\22\33\0\377\16/\0\377\11""1\0\377\11""8\0" - "\377\7""7\0\377\6""9\0\377\1""9\0\377\10""8\0\377\0\77\0\377\0""9\0\377" - "\0=\0\377\0C\0\377\202\0;\0\377\10\0\0\0\377@7z\377EN\246\377GQ\267\377" - "6R\256\3775K\270\377>=\266\3778G\256\377\203\0\0\0\377S\0\0\32\377\0" - "\0\26\377\3\0\20\377\4\0\34\377\0\0\31\377\1\0#\377\0\0\33\377\0\0\34" - "\377\0\0%\377\0\0)\377\0\0(\377\0\0\40\377\0\0""1\377\0\0.\377\0\0\40" - "\377\0\0#\377\0\0,\377\0\0%\377\0\0'\377\0\0\0\377\0\40\0\377\0\26\0" - "\377\0\7+\377\33}\305\377\"g\273\377!h\303\377\32g\300\377*g\302\377" - "\36x\276\377\35e\263\377\0\"b\377\0\35V\377\0%T\377\0$I\377\0\"B\377" - "\0""0H\377\0*E\377\0&>\377\0\36H\377\0,I\377\0+@\377\0.>\377\0""38\377" - "\0""06\377\0""4+\377\0+7\377\0\10\0\377\0\2\0\377\0\23\0\377\0!\0\377" - "\0(\0\377\0$\0\377\0\0\0\377\0C\\\377\0\203\230\377\0|\241\377\0w\235" - "\377\0u\240\377\0r\241\377\0S\202\377\0\23\15\377\0\7\0\377\0\6\1\377" - "\0\0\0\377\0\6\4\377\0\0\0\377\0\0\2\377\0\0\6\377\0\0\15\377\0\0\14" - "\377\0\0\11\377\0\23""1\377\0c\246\377\0b\253\377\0`\236\377\0Z\241\377" - "\0Z\252\377\0d\242\377\0\25.\377\0\0\0\377\0\12\0\377\0\6\0\377\0\16" - "\0\377\202\0\0\0\377\15\0Im\377\0x\230\377\0z\231\377\0{\233\377\0\203" - "\241\377\0\202\230\377\0r\244\377\0iv\377\0\0\0\377\0\14\0\377\0\40\0" - "\377\0\30\0\377\0\22\0\377\202\0\0\0\377\34\0nw\377\0\227\217\377\0\215" - "\234\377\0p_\377\0\0\0\377\0""3\0\377\0i\0\377\0t\0\377\0h\0\377\0W\0" - "\377\0""7\0\377\0$\0\377\0\31\0\377\0\22\0\377jtk\377\377\377\377\377" - "\315\321\317\377\10%\30\377\6""9\26\377\5K\17\377\1d\11\377\1^\11\377" - "\2c\6\377\1`\2\377\1[\3\377\4O\10\377\6G\15\377*`4\377\202\377\377\377" - "\377\40\326\346\327\377\6k\16\377\6Z\20\377\11`\23\377\11]\17\377\4d" - "\7\377\0l\0\377\40v\40\377\355\363\355\377\302\330\302\377\3q\3\377\0" - "j\0\377\0x\0\377\0\201\0\377\0\207\0\377\0\202\0\377\0\203\0\377\0f\0" - "\377\0Z\0\377\0P\0\377\12Q\12\377\1Q\1\377\0K\0\377\0V\0\377\0W\0\377" - "\0H\1\377\0F\5\377\0I\0\377\0>\11\377\0L\6\377\0P\1\377P\210T\377\202" - "\377\377\377\377_\25\2425\377\0\273,\377\0\312=\377\0\300N\377\0\261" - "7\377\0\213\"\377\0\205\32\377\0x\40\377\0g$\377\0U)\377\0J(\377\0I!" - "\377\0L(\377\0E,\377\0P2\377\0W<\377\0^;\377\0jF\377\0]G\377\0WP\377" - "\0_M\377\0PO\377\0KP\377\0[P\377\0PK\377\0_O\377\0ZV\377\0UP\377\0VP" - "\377\0VQ\377\0YL\377\0_X\377\0^P\377\0g\214\377\0Jt\377\0-P\377\0""6" - "Z\377`\0+\377;\0\2\377$\0\0\3772\0\0\3777\30\0\3778\25\0\377@\26\0\377" - "4\17\0\377;\4\0\3775\11\0\3779\0\0\377-\3\0\3772\10\0\3777\10\0\377+" - "\4\0\3771\16\0\377/\25\0\3776\27\0\3774\11\0\377<\16\0\377<\12\0\377" - "0\7\0\377:\4\0\377A\10\0\377B\16\0\377@\13\0\3777\10\0\377\35\23\0\377" - "%\31\0\377$\24\0\377%\"\6\377&\31\2\377'\20\0\377)\23\0\377\31\33\0\377" - "\36\36\0\377\14&\0\377\16\"\0\377\16.\0\377\30>\0\377\6""8\0\377\1""7" - "\0\377\6""5\3\377\0:\0\377\0,\0\377\6=\0\377\4=\0\377\4""4\0\377\7=\0" - "\377\1>\0\377\0\0\0\377\77,y\377OI\260\377IK\257\377BI\253\377>@\265" - "\3778A\254\3774D\253\377\202\0\0\0\377=\5\0\20\377EB\246\377HQ\267\377" - "DB\264\377WB\262\377SE\265\377BE\261\3777J\261\3779G\261\377\33\377\4_\31\377\5X\23\377\6T\17\377\4_\14\377\5E\14\377\10E" - "\21\377\12\77\26\377\17E\30\377\376\376\376\377\377\377\377\377\365\371" - "\365\377\5c\15\377\10k\15\377\5l\16\377\5q\15\377\7p\13\377\12j\15\377" - "\315\341\315\377\371\373\371\377(\210(\377\0f\0\377\0l\0\377\202\0\204" - "\0\377s\0\233\0\377\0\224\0\377\0\211\0\377\0~\1\377\0d\5\377\0Y\11\377" - "\0Z\0\377\0L\0\377\0S\0\377\0c\0\377\0Y\0\377\0P\3\377\0W\12\377\0M\5" - "\377\0Q\2\377\0N\15\377\0a\14\377\277\327\300\377\377\377\377\377\322" - "\346\330\377\0\232/\377\0\2558\377\0\315=\377\0\304C\377\0\2501\377\0" - "\226\35\377\0\225\27\377\0\177\36\377\0i#\377\0c*\377\0c$\377\0\\.\377" - "\0P,\377\0Z0\377\0P7\377\0W:\377\0[B\377\0ZE\377\0[H\377\0XH\377\0aK" - "\377\0]L\377\0SR\377\0ZV\377\0`^\377\0[P\377\0[M\377\0`[\377\0[`\377" - "\0XZ\377\0\\U\377\0QW\377\0Zd\377\10[\233\377\0""9n\377\0\36^\377\0\37" - "b\377c\0(\3775\0\10\377\"\0\0\377$\0\0\377<\36\0\3773\7\0\377,\26\0\377" - "/\23\0\3772\10\0\3775\21\0\377+\6\0\377+\21\0\3776\27\0\3775\12\0\377" - "3\15\0\377%\15\0\3776\27\0\3772\30\0\377<\36\0\377B!\0\3773\27\0\377" - "8\2\0\3776\0\0\377;\1\0\377@\26\0\3777\4\0\3776\26\0\377#\31\0\377,\31" - "\0\377:\31\0\377,\34\0\377/\24\0\377#\35\0\377\35%\0\377\25\32\0\377" - "\35\40\3\377\36/\0\377\27F\0\377\0A\0\377\7>\0\377\10""8\0\377\10""7" - "\0\377\0""4\0\377\0""7\0\377\2""2\0\377\3.\0\377\1#\0\377\22(\0\377\24" - "\40\0\377\13\40\0\377\1\0\0\377G\40}\377G8\260\377N@\266\377G1\263\377" - "M5\261\377:\77\236\377;;\246\377\202\0\0\0\377`\0\0\11\377HD\255\377" - "BG\252\377KC\236\377Z:\254\377QQ\271\377>I\267\3771K\253\377*Q\266\377" - "-V\256\3770b\257\3779Q\245\3772T\256\377.d\245\3770R\263\377&Z\305\377" - "+^\303\377)b\266\377(^\260\377\0\15-\377\0\12\0\377\0(\0\377\0\20\0\377" - "\0\0\20\377)n\267\377%m\271\377$x\271\377\34l\255\377\34c\271\377\31" - "]\265\377\27b\253\377#t\233\377\26h\226\377\40i\235\377\16d\235\377\0" - "r\243\377\13x\245\377\11s\237\377\24s\241\377\6m\237\377\6q\230\377\0" - "n\232\377\0r\220\377\0k\227\377\2^\237\377\7m\237\377\5r\236\377\0m\232" - "\377\0k\252\377\0\23=\377\0\0\0\377\0\11\0\377\0\10\0\377\0\0\0\377\0" - "_\251\377\0c\257\377\0d\262\377\0m\250\377\0i\244\377\0g\231\377\0\0" - "\17\377\0\0\0\377\0\37\0\377\0\30\0\377\0\17\0\377\0\12\0\377\0\6\0\377" - "\0\25\0\377\0\21\0\377\0\36\0\377\0\33\0\377\0\24\0\377\0\0\0\377\0""8" - "\\\377\0b\235\377\0X\227\377\0W\236\377\0g\237\377\0v\235\377\0\40""2" - "\377\0\0\0\377\0\24\0\377\0\33\0\377\0\22\0\377\0\11\0\377\0\14\0\377" - "\0\0\0\377\0\10\0\377\0n\204\377\0|\224\377\5}\213\377\7~\212\377\0\212" - "\224\377\0\205\222\377\0z\214\377\0av\377\202\0\0\0\377\177\0\33\10\377" - "\0|\212\377\0\214\231\377\0\222\225\377\0""8#\377\0\12\0\377\0\24\0\377" - "\0""9\0\377\0""4\0\377\0L\0\377\0R\0\377\0b\0\377\0^\0\377\0P\0\377\0" - "9\0\377\0+\0\377\214\243\214\377\377\377\377\377\323\330\323\377\1+\5" - "\377\2%\12\377\6\77\24\377\5K\31\377\13W\36\377\15J\32\377\12;\25\377" - "\12@\23\377\10""8\26\377\11=\26\377\10""7\22\377\6K\21\377\345\355\346" - "\377\377\377\377\377\360\365\361\377\6o\21\377\4o\11\377\3o\7\377\6|" - "\7\377\5i\10\377z\267|\377\377\377\377\377\222\306\222\377\0n\0\377\0" - "r\0\377\0s\0\377\0w\0\377\0\211\0\377\0\237\13\377\0\241\2\377\0\234" - "\3\377\0\202\13\377\0}\20\377\0p\6\377\0g\0\377\0b\0\377\0O\0\377\0P" - "\1\377\0H\7\377\0V\0\377\0M\15\377\0S\24\377\0^\5\377\0a\4\377\22l\37" - "\377\374\375\374\377\377\377\377\377\221\306\241\377\0\235,\377\0\276" - "7\377\0\311>\377\0\275\77\377\0\245.\377\0\230\34\377\0\220!\377\0{)" - "\377\0\200$\377\0j#\377\0W5\377\0Z,\377\0c-\377\0P9\377\0V0\377\0MA\377" - "\0I\77\377\0XN\377\0ZK\377\0cG\377\0UA\377\0ZK\377\0TU\377\0Z[\377\0" - "cP\377\0[K\377\0f\\\377\0ed\377\0h]\377\0^X\377\0MU\377\0d`\377\0_m\377" - "\6O\226\377\0""4\201\377\0#a\377\0\36g\377T\0%\377C\0\6\377/\0\0\377" - "8\0\0\3774\33\0\377-\25\0\377/\10\0\377\"\7\0\377*\34\0\3770\16\0\377" - "/\11\0\377/\15\0\377)\14\0\3771\16\0\377;\26\0\3773\35\0\3778\40\0\377" - "\77\30\0\377>'\0\377:!\0\3777#\0\377<\24\0\377A\34\0\377#C\24\0\377B" - "\36\0\377=\40\0\3773\31\0\3774\36\0\3771'\0\3777!\0\377#\"\0\377)$\0" - "\377\32\37\0\37720\0\377)\"\0\377%$\0\377\11""6\0\377\15""9\0\377\23" - "(\0\377\24""4\0\377\0-\0\377\2'\0\377\12*\0\377\12+\0\377\13""5\0\377" - "\0""1\0\377\16)\0\377\20\32\0\377\20\"\0\377\21\35\0\377\0\0\0\377G\17" - "u\377PG\264\377FH\274\377O/\267\377C;\274\377G6\247\377ML\263\377\203" - "\0\0\0\377;\34\0""9\377\2\0\30\377\22\0\23\377\23\0\40\377\7\0\34\377" - "\4\0\32\377\7\0\21\377\0\0\26\377\0\0\17\377\0\0\21\377\0\0\24\377\0" - "\32R\3776_\251\3772j\271\377!g\271\377.[\301\377#e\262\377(Y\241\377" - "\0\0\27\377\0\24\0\377\0\34\0\377\0\37\0\377\0\0\0\377#]\241\377&s\236" - "\377,n\235\3771Y\265\377'^\256\377\37[\244\377\31_\242\377\27f\225\377" - "\23V\225\377\23d\216\377\11`\224\377\21i\224\377\20e\225\377\1r\225\377" - "\5o\225\377\3a\220\377\6l\215\377\0h\232\377\1b\230\377\0V\222\377\0" - "W\225\377\0_\221\377\15b\217\377\7Y\240\377\10M\237\377\0B\200\377\0" - "\0\0\377\0\7\0\377\0\5\0\377\0\0\0\377\0U\240\377\0]\264\377\0Z\267\377" - "\0[\243\377\0W\246\377\0[\247\377\202\0\0\0\377\31\0\14\0\377\0\7\0\377" - "\0\15\0\377\0\0\0\377\0\25\0\377\0\26\0\377\0\23\0\377\0\21\0\377\0\23" - "\0\377\0\20\0\377\0\0\0\377\0=^\377\0c\230\377\0P\244\377\0d\250\377" - "\0g\240\377\1V\233\377\0\16-\377\0\0\0\377\0\37\0\377\0\12\0\377\0\20" - "\0\377\0\24\0\377\0\7\0\377\0\3\0\377\202\0\0\0\377I\0sr\377\0}\210\377" - "\0\202\212\377\0\210\216\377\7\213\212\377\11\213\211\377\14\212\222" - "\377\0qk\377\0""1\17\377\10\220\226\377\6\234\216\377\11\227\212\377" - "\0\77\12\377\0\14\0\377\0#\0\377\0""8\0\377\0\77\0\377\0B\0\377\0J\0" - "\377\0i\0\377\0k\0\377\0c\0\377\0f\0\377\0U\0\377\10F\10\377\365\367" - "\365\377\377\377\377\377w\214w\377\1.\3\377\6,\21\377\6\77\31\377\7A" - "\25\377\6""8\24\377\11A\25\377\6F\26\377\10O\33\377\2F\27\377\4A\17\377" - "\3B\12\377\10B\22\377\344\355\346\377\377\377\377\377\333\352\335\377" - "\7h\23\377\5l\13\377\3|\7\377\2{\5\377\21\220\23\377\357\367\357\377" - "\377\377\377\377%\210%\377\0u\0\377\0x\0\377\0v\0\377\0\207\0\377\0\223" - "\0\377\0\233\0\377\0\247\0\377\0\240\25\377\0\234\22\377\0\205\5\377" - "\0w\0\377\0i\14\377\0R\12\377\0O\14\377\0I\1\377\0N\11\377\0N\2\377\0" - "G\22\377\0Z\20\377\0^\12\377\0Q\0\377Y\233c\377\202\377\377\377\377b" - "Q\244i\377\0\224%\377\0\2648\377\0\307E\377\0\302@\377\0\2635\377\0\213" - "/\377\0\201\37\377\0l\36\377\0b\32\377\0]\34\377\0T-\377\0[(\377\0\\" - ")\377\0`7\377\0L>\377\0I=\377\0B9\377\0HC\377\0NM\377\0KF\377\0RJ\377" - "\0UW\377\0NO\377\0QV\377\0bK\377\0^`\377\0ke\377\0_i\377\0ii\377\0Xm" - "\377\0Xl\377\0Zp\377\0dp\377\0\\\234\377\0=p\377\0&T\377\0/V\377f\0'" - "\377U\0\16\377>\0\0\377B\0\0\377;\37\0\377)\17\0\377/\40\0\377!\23\0" - "\377.\6\0\3777\22\0\377*\16\0\3770\33\0\377+\23\0\377:\15\0\3777\22\0" - "\3772\33\0\377@(\0\377B/\0\377*+\0\377.2\0\3772\36\0\3774%\0\377\77)" - "\0\377B(\0\377E#\0\377F\34\0\377/\34\0\3772\32\0\377+\37\0\377.\31\0" - "\377,$\0\377&-\0\377\30&\0\377\25%\0\377\36.\0\377\33*\0\377\24)\0\377" - "\21""2\0\377\13\37\0\377\14""1\0\377\1+\0\377\13-\0\377\27+\0\377\12" - "-\0\377\14/\0\377\16.\0\377\24\36\0\377\35\37\0\377\21\32\0\377\35\40" - "\0\377\0\0\0\377A\36\203\377SL\267\377P=\273\377R:\256\377K0\271\377" - "H>\261\377O:\272\377\0\0\0\377\0\23\0\377\214\0\0\0\3777\0\3""3\3776" - "X\255\377)[\250\3772X\253\3777Z\237\377)Y\242\377$V\255\377\0\0\10\377" - "\0\0\0\377\0%\0\377\0!\0\377\0\0\0\377\0\17-\3770O\232\3771V\237\377" - "\40L\224\377\40G\225\377.K\215\377\"S\216\377-]\234\377+W\225\377*h\214" - "\377\31n\225\377\20h\237\377\23l\215\377$a\216\377\33c\221\377\21d\232" - "\377\15b\223\377\13j\230\377\3f\205\377\7Y\220\377\5]\211\377\7L\210" - "\377\13V\233\377\0Z\251\377\0U\245\377\3S\232\377\0\0\0\377\0\4\0\377" - "\0\7\0\377\0\0\0\377\7P\242\377\12Y\235\377\0W\225\377\6Y\263\377\11" - "^\243\377\3b\240\377\0\0\11\377\0\0\0\377\0\11\0\377\0\10\0\377\0\0\0" - "\377\0\13\0\377\0\30\0\377\202\0\25\0\377\23\0\24\0\377\0\33\0\377\0" - "\"\0\377\0\0\0\377\0A\\\377\3[\235\377\0^\240\377\0b\227\377\2b\233\377" - "\0n\236\377\0\24""1\377\0\0\0\377\0\23\0\377\0\17\0\377\0\27\0\377\0" - "\4\0\377\0\2\0\377\0\0\0\377\0\25\0\377\202\0\0\0\377\17\0si\377\7z\202" - "\377\16\205\205\377\22\201\207\377\21|\202\377\7\206x\377\17\220t\377" - "\12\214s\377\3\220u\377\13\203j\377\0\17\0\377\0\7\0\377\0""1\0\377\0" - "/\0\377\0""7\0\377\202\0""9\0\377\7\0O\0\377\0c\0\377\0f\0\377\0s\0\377" - "\0x\0\377\0V\0\377HxH\377\202\377\377\377\377\177;^;\377\0,\0\377\4O" - "(\377\7:\26\377\7A\25\377\12T\30\377\5F\32\377\4N\34\377\4G\33\377\0" - "@\17\377\2G\13\377\2H\11\377\10Q\30\377\366\370\367\377\377\377\377\377" - "\303\332\311\377\7}\30\377\6\201\23\377\3\206\12\377\2\211\7\377\205" - "\320\206\377\377\377\377\377\301\346\301\377\0\233\0\377\0\215\0\377" - "\0z\0\377\0w\0\377\0\224\0\377\0\230\4\377\0\263\13\377\0\254\17\377" - "\0\263\20\377\0\261\23\377\0\255\21\377\0\227\22\377\0~\27\377\0^\32" - "\377\0Z\4\377\0U\0\377\0I\0\377\0K\13\377\0S\10\377\0Z\23\377\0Z\11\377" - "\0V\15\377\234\303\242\377\377\377\377\377\376\376\376\377\22oA\377\0" - "\203,\377\0\241<\377\0\274\77\377\0\277J\377\0\247S\377\0\230C\377\0" - "\207*\377\0g&\377\0U,\377\0X#\377\0T-\377\0g7\377\0V6\377\0X6\377\0\\" - "\77\377\0X6\377\0GK\377\0PI\377\0GR\377\0G@\377\0MJ\377\0XW\377\0UY\377" - "\0hS\377\0cR\377\0oe\377\0qj\377\0nc\377\0ir\377\0ck\377\0lq\377\0rj" - "\377\0df\377\2g\217\377\0Kt\377\0$Z\377\0\35T\377r\0+\377W\0\22\377;" - "\0\0\3772\0\0\377,\27\0\377*\32\0\377'\15\0\377!\25\0\377:\"\0\377@'" - "\0\3773\32\0\3774\23\0\3772\33\0\3773\24\0\377\77-\0\377:3\0\377\77-" - "\0\377=(\0\377D-\0\377;-\0\3775/\0\377>9\0\377G,\0\377=-\0\3778&\0\377" - "@%\0\3770!\0\3771$\0\377$\33\0\377\27$\0\377)'\0\377*.\0\377#+\0\377" - "\24""4\0\377\40&\0\377!+\0\377\31*\0\377!\36\0\377\26&\0\377\15+\0\377" - "\30\"\0\377\25\17,\0\377\15*\0\377\30%\0\377\16\34\0\377\31$\0\377\15" - "\30\0\377\20\35\0\377\7\21\0\377\3\34\0\377\0\0\0\377Q\32p\377ZE\255" - "\377VJ\245\377_7\251\377]/\262\377U3\271\377PB\257\377\0\0\0\377\0\6" - "\0\377\0\21\0\377\0\22\0\377\202\0\23\0\377\17\0\15\0\377\0\4\0\377\0" - "\24\0\377\0\14\0\377\0\7\0\377\0\0\0\377\0\5\0\377\0\0\0\377\15\26=\377" - "Hh\250\377\77\\\250\377=X\222\3777J\233\377EH\232\377DU\236\377\202\0" - "\0\0\377*\0\20\0\377\0\32\0\377\0\12\0\377\0\0\0\377\7\0\10\377!2[\377" - "0[\221\3779]\212\3775V\200\377.X\205\3772_\230\3779b\216\377\0\377]\377\30k\230\377\23j\231\377\37h\226\377\32t\203\377\34j" - "\211\377\0\7\30\377\204\0\0\0\377\6\0\6\0\377\0\10\0\377\0\31\0\377\0" - "\25\0\377\0\27\0\377\0(\0\377\202\0\0\0\377\36&\200h\377/\221y\377\"" - "\214j\377\32\230s\377\33\231o\377%\222r\377\24\220o\377\0X\"\377\0\14" - "\0\377\0\31\0\377\0,\0\377\0/\0\377\0""0\0\377\0D\0\377\0>\0\377\0X\0" - "\377\0d\0\377\0n\0\377\0\207\0\377\0\205\0\377\0o\0\377\303\326\303\377" - "\377\377\377\377\357\361\357\377\0""7\0\377\0""5\0\377\0""0\0\377\0H" - "\0\377\0T\0\377\0R\0\377\202\0W\0\377\5\0`\0\377\0c\0\377\0\\\0\377\0" - "b\0\377P\266s\377\202\377\377\377\377\5I\244U\377\4\230\16\377\4\230" - "\21\377\6\232\35\377>\256Q\377\202\377\377\377\377\7@\332@\377\0\325" - "\0\377\0\264\0\377\0\257\0\377\0\240\0\377\40\262\40\377\323\361\323" - "\377\207\377\377\377\377\11}\302\177\377\0~\10\377\0j\7\377\0o\23\377" - "\0^\15\377\0h\40\377\0h\17\377\0v\26\377\21v.\377\202\377\377\377\377" - "w\216\271\234\377\0v(\377\0v%\377\0\2331\377\0\270J\377\0\305U\377\0" - "\320W\377\0\310G\377\0\257;\377\0\232-\377\0\2000\377\0a\40\377\0e$\377" - "\0l0\377\0l'\377\0b5\377\0h1\377\0e3\377\0_4\377\0R6\377\0P7\377\0Y9" - "\377\0^>\377\0[J\377\0ZE\377\0kV\377\0nX\377\0j\\\377\0mT\377\0nL\377" - "\0q^\377\0yg\377\0\202U\377\0\177]\377\0vl\377\0j\240\377\0>x\377\0""3" - "f\377\0@k\377x\1<\377Y\0\27\3773\0\2\3775\0\0\377D\33\7\377D,\0\377:" - "'\0\377D7\0\377@.\0\377D,\0\37793\0\377<-\0\377J5\0\377C-\0\377B0\0\377" - "C)\0\377G2\0\377<2\0\377<-\0\377y\206\3776n\206\377;e\201\3777o\205\377.r\200\377\0\0\0\377\0\14\0\377" - "\0\22\0\377\0\0\0\377\"w\216\377&u\223\3776w\204\377)\204\204\377\36" - "yw\377%\202\216\377\0\0\4\377\0\0\0\377\0\30\0\377\0\12\0\377\0\5\0\377" - "\0\14\0\377\0\6\0\377\0\16\0\377\0\22\0\377\0\14\0\377\0\15\0\377\0\4" - "\0\377\0\0\0\377\0RF\377/r|\377%x\214\3771\177z\377(}{\377\40|r\377\0" - "\"\14\377\0\0\0\377\0\16\0\377\0\10\0\377\0\0\0\377\0\12\0\377\0\6\0" - "\377\0\15\0\377\0$\0\377\0\27\0\377\0\37\0\377\0\10\0\377\0\27\0\377" - "3\226m\377:\251}\3773\237p\377,\246e\3776\253m\377-\251v\377,\257\204" - "\377+\270|\377+\252\204\377\0n*\377\0\5\0\377\0!\0\377\0'\0\377\0@\0" - "\377\0=\0\377\0U\0\377\0k\0\377\0\221\0\377\0\251\0\377\0\243\0\377\0" - "\223\0\377\361\367\361\377\377\377\377\377\355\361\355\377\0""6\0\377" - "\0,\0\377\202\0""7\0\377\20\0B\0\377\0W\0\377\0c\0\377\0e\3\377\1_\3" - "\377\1d\7\377\1p\23\377\4\200\31\377\333\356\335\377\377\377\377\377" - "\203\274\207\377\1p\6\377\0v\7\377\0|\6\377\4~\25\377\245\323\245\377" - "\202\377\377\377\377\177\14\314\14\377\0\314\0\377\0\321\0\377\0\306" - "\0\377\0\267\0\377\0\275\0\377\0\300\0\377\0\322\16\377\0\323\25\377" - "\0\321\37\377\250\360\261\377\377\377\377\377\360\373\360\377\2\262\4" - "\377\0\223\5\377\0\206\3\377\0}\14\377\0r\13\377\0n\15\377\0u\3\377\0" - "u\2\377\0p\0\377\205\273\205\377\377\377\377\377\365\371\365\377\10p" - "\30\377\0f\10\377\0~\23\377\0\210\36\377\0\227-\377\0\274F\377\0\326" - "Q\377\0\361U\377\0\345A\377\0\266:\377\0\241\37\377\3\222-\377\0\205" - "5\377\0\177'\377\0g\34\377\0t\37\377\0d)\377\0j2\377\0j*\377\0j9\377" - "\0_9\377\0iB\377\0_8\377\0kI\377\0p>\377\0i>\377\0fJ\377\0gM\377\0{J" - "\377\0vO\377\0uN\377\0~X\377\0{P\377\0{U\377\0\206X\377\0t\220\377\0" - "Np\377\0:W\377\0""0S\377}\12A\377c\0\27\377=\0\12\3775\0\6\377E\"\13" - "\377M/\11\377Q3\4\377U6\34\377S3\13\377L=\23\377F<\6\377P>\4\377Q9\11" - "\377N=\0\377B5\12\377\77\77\0\377B9\4\377BA\0\37795\0\377@7\0\3776,\0" - "\377;#\0\377-(\0\377-2\0\377(%\0\377-&\0\377/1\0\377$,\0\377*0\0\377" - "\"B\0\377+7\0\377!>\0\377(0\0\377\"+\0\377\37(\0\377\"\40\0\377\"(\0" - "\377*!\0\377(&\0\377'\33\0\377-\14\0\377\33\0\0\377\40\15\0\377\22\20" - "\0\377\34\23\0\377&\16\0\377!\21\0\377!\7\0\377&\12\0\377\"\7\0\377\13" - "\0\0\377w&c\377\235V\241\377\241Y\256\377\236V\240\377\220Q\235\377\221" - "Z\231\377\207S\237\377\7\0\0\377\0\3\0\377\0\11\0\377\0\20\0\377\0\3" - "\0\377\4\0\6\0\377\2\14\0\377\5\22\0\377\10\22\0\377\203\0\0\0\377\12" - "\0\3\0\377\0\0\0\3779\0#\377}S\221\377uU\214\377rW\220\377g^\222\377" - "i`\224\377we\214\377\12\0\0\377\205\0\0\0\377\1\0\3\0\377\205\0\0\0\377" - "\7\0\14\0\377\0\25\0\377\0\6\0\377\0\21\0\377\0\17\0\377\0\40\0\377\0" - "\27\0\377\202\0\16\0\377\24\0\24\0\377\0\31\0\377\0\0\0\377\35eJ\377" - "E\207\203\377K{\201\377Nx\211\377Rs\205\3778z\177\3777p\206\377\0\0\0" - "\377\0\24\0\377\0\13\0\377\0\0\0\377As\221\377;z\212\377D\206\230\377" - "0\210\217\3772\214\200\3770\203\202\377\202\0\0\0\3774\0\7\0\377\0\25" - "\0\377\0\31\0\377\0\32\0\377\0\14\0\377\0\20\0\377\0\5\0\377\0\15\0\377" - "\0\24\0\377\0\14\0\377\0\0\0\377\0TP\3775\202\203\377-\177\204\377=\204" - "\177\377-v{\377=\210v\377\0\37\3\377\0\0\0\377\0\1\0\377\0\12\0\377\0" - "\2\0\377\0\11\0\377\0\24\0\377\0\31\0\377\0\30\0\377\0\36\0\377\0\0\0" - "\377\0""8\4\377:\241s\377F\251n\377H\254k\377\0g\27\377<\265i\377;\252" - "o\377>\264{\377;\272r\377=\274\200\3776\264|\3773\251z\377\0\77\0\377" - "\0\10\0\377\0.\0\377\0E\0\377\0A\0\377\0f\0\377\0g\0\377\0\231\0\377" - "\0\247\0\377\0\272\0\377\0\246\0\377\365\372\365\377\202\377\377\377" - "\377\24\14D\14\377\0,\0\377\0""4\0\377\0""9\0\377\0J\0\377\0Y\0\377\1" - "e\5\377\1e\12\377\4]\14\377\12l\31\377\13~\"\377J\261\\\377\377\377\377" - "\377\361\367\361\377\23{\31\377\1f\3\377\0h\2\377\0}\2\377\0\200\0\377" - "\303\337\303\377\202\377\377\377\377\177\17\256\17\377\0\272\0\377\0" - "\307\1\377\0\277\12\377\0\300\1\377\0\305\0\377\0\310\0\377\0\314\1\377" - "\0\341\20\377\1\340\37\377\347\375\351\377\377\377\377\377\265\366\270" - "\377\0\301\14\377\0\225\16\377\0\223\6\377\0|\2\377\0\205\5\377\0\204" - "\0\377\0z\7\377\0s\0\377\0r\0\377\307\337\307\377\377\377\377\377\257" - "\320\262\377\0p\5\377\0z\15\377\0\201\36\377\0\216\40\377\0\2151\377" - "\0\245;\377\0\313;\377\0\367J\377\0\351C\377\0\312<\377\0\2554\377s\305" - "\210\377#\221H\377\0\202-\377\0{)\377\0m%\377\0f$\377\0`4\377\0`<\377" - "\0h\77\377\0j9\377\0m;\377\0v>\377\0m7\377\0gE\377\0cO\377\0cG\377\0" - "sH\377\0tM\377\0\202N\377\0\205O\377\0\216K\377\0\222W\377\0\217c\377" - "\0\203V\377\0p\215\377\0Xl\377\0=W\377\0B`\377\204\26;\377e\0&\377E\0" - "\3\377<\0\7\377B$\5\377T+\6\377d/\10\377_-\23\377\\1\24\377W:\24\377" - "KD\14\377L>\33\377NE\17\377I;\0\377F<\14\377JG\15\377E=\27\377>8\12\377" - "A:\0\37768\0\377-3\0\37783\0\377:2\0\3772+\0\377\211\217\377\77\220\213\3774\212\215\3774\203\211\377\202\0\0\0" - "\377\2\0\17\0\377\0\30\0\377\202\0\36\0\377\24\0!\0\377\0\26\0\377\0" - "\27\0\377\0\"\0\377\0\23\0\377\0\15\0\377\0\0\0\377\7VH\3776\211|\377" - "<\223\210\377A\205\203\377<\206\206\377<\212n\377\0\37\17\377\0\0\0\377" - "\0\13\0\377\0\15\0\377\0\12\0\377\0\11\0\377\0\12\0\377\202\0\25\0\377" - "\32\0\0\0\377\0>\0\377R\257h\377S\246r\377\77\231^\377\0<\0\377\0\30" - "\0\377\0B\0\377F\262y\377J\272{\377=\305\202\377B\272\205\377G\274\202" - "\377@\266\202\377F\275\200\377\0T\3\377\0!\0\377\0\77\0\377\0K\0\377" - "\0Y\0\377\0o\0\377\0\232\0\377\0\275\0\377\0\307\0\377\0\257\0\377\326" - "\355\326\377\202\377\377\377\377\24/g/\377\0""8\0\377\0E\0\377\0J\0\377" - "\0Q\0\377\0^\0\377\5^\21\377\3k\25\377\4W\22\377\13j\34\377\13l\35\377" - "\305\343\311\377\377\377\377\377X\236^\377\1r\4\377\0z\2\377\0r\1\377" - "\0n\0\377\0m\0\377\316\343\316\377\202\377\377\377\377\12/\251/\377\0" - "\253\0\377\0\274\0\377\0\307\0\377\0\314\0\377\0\323\0\377\0\330\0\377" - "\0\316\0\377\0\332\0\377&\342+\377\202\377\377\377\377\6y\362\202\377" - "\0\315\1\377\0\254\0\377\0\213\0\377\0|\4\377\0w\0\377\202\0y\0\377\177" - "\0q\4\377\15z\15\377\374\375\374\377\377\377\377\377a\243d\377\0s\10" - "\377\0t\22\377\0v\25\377\0p\35\377\0q\36\377\0\216)\377\0\267'\377\0" - "\335:\377\0\347N\377\0\331M\377\15\317D\377\305\353\320\377\2\2150\377" - "\0\200.\377\0\203.\377\0x1\377\0m9\377\0mF\377\0`J\377\0e\77\377\0v8" - "\377\0x7\377\0m3\377\0xH\377\0pN\377\0mO\377\0iH\377\0qK\377\0jQ\377" - "\0|N\377\0\203N\377\0\215U\377\0\206X\377\0\222a\377\0\217V\377\0o\205" - "\377\0Sk\377\0GP\377\0\77R\377\207\7@\377\\\0\"\377E\0\0\377E\0\4\377" - "R\37\14\377Y)\17\377[(\22\377S/\15\377V0\20\377J*\12\377L5\20\377LA\27" - "\377C6\23\377D;\20\377N4\0\377P5\7\377D6\21\377O,\6\377>)\0\377<1\0\377" - "J7\0\377K-\0\377:.\0\377E3\0\377A0\0\377:1\0\377-6\0\3772:\0\3773-\0" - "\377(4\0\377&:\0\37719\0\377(7\0\377/1\0\377%6\0\377+>\0\377\40'\0\377" - "(\33\0\377%\40\0\377\"\27\0\377+\23\0\3771\32\0\377+\35\0\377\34\20\0" - "\377\37\17\0\377\"\31\0\377\30\21\0\377)\17\0\377\37\6\0\377/\14\0\377" - "'\0\0\377\2457y\377\271n\234\377\256n\240\377\251h\240\377\256m\250\377" - "\271k\234\377\257`\231\377\23\0\0\377\30\16\0\377\14\22\0\377\0\10\0" - "\377\17\13\0\377\21\22\0\377\0\17\0\377\1\17\0\377\0\12\0\377\10\0\0" - "\377\7\23\0\377\0\31\0\377\0\11\0\377\0\0\0\377A\6*\377\231r\231\377" - "\212y\222\377\223v\221\377\223q\230\377\215p\223\377zr\222\377\22\0\0" - "\377\0\0\0\377\0\15\0\377\0\7\0\377\202\0\5\0\377\207\0\0\0\377R\0\2" - "\0\377\0\0\0\377\0\3\0\377\0\13\0\377\0\5\0\377\0\12\0\377\0\16\0\377" - "\0\5\0\377\0\15\0\377\0\10\0\377\0\0\0\3776XD\377b\215\220\377T\202\205" - "\377`\211\206\377T\177\204\377M\205\177\377K\200\206\377\0\0\0\377\0" - "\11\0\377\0\3\0\377\0\0\0\377I}\207\377>\215\214\377J\227\223\377L\213" - "\223\377>}\220\3777\205\234\377\0\1\0\377\0\0\0\377\0\22\0\377\0\31\0" - "\377\0\40\0\377\0\30\0\377\0&\0\377\0(\0\377\0!\0\377\0*\0\377\0\25\0" - "\377\0\31\0\377\0\0\0\377\15fS\377U\226\202\377P\226w\377K\217v\377K" - "\236z\377F\221\200\377\0/\24\377\0\0\0\377\0\10\0\377\0\14\0\377\0!\0" - "\377\0\32\0\377\0$\0\377\0\7\0\377\0\0\0\377\16j\20\377L\302o\377G\265" - "g\377F\254f\377\0\36\0\377\0\27\0\377\0*\0\377\0\22\0\377\0Q\0\377S\302" - "u\377V\271x\377X\276~\377F\275\211\377D\302\213\377E\316\225\377J\304" - "\215\377\0W\10\377\0\37\0\377\0\77\0\377\0`\0\377\0~\0\377\0\244\0\377" - "\0\300\0\377\0\303\0\377\0\262\0\377\265\335\265\377\202\377\377\377" - "\377\24\224\267\224\377\0B\0\377\0H\0\377\0N\0\377\0Y\0\377\4P\10\377" - "\12v\30\377\5`\23\377\6`\13\377\6T\14\377|\263\200\377\377\377\377\377" - "\207\272\212\377\1k\6\377\0n\2\377\0m\0\377\0o\0\377\0q\0\377\0k\0\377" - "\256\320\256\377\202\377\377\377\377\4e\272e\377\0\220\0\377\0\245\0" - "\377\0\261\0\377\202\0\276\0\377\4\0\315\0\377\0\323\0\377\0\335\0\377" - "e\367n\377\202\377\377\377\377v=\353A\377\0\313\0\377\0\244\0\377\0\211" - "\2\377\0{\0\377\0z\10\377\0v\0\377\0j\6\377\0d\5\377g\243j\377\377\377" - "\377\377\320\342\323\377\6u\34\377\0x\37\377\0s\24\377\0n\15\377\0s\33" - "\377\0t\"\377\0\215\33\377\0\242\31\377\0\303&\377\0\345E\377\0\340H" - "\377}\362\236\377l\334\224\377\0\2437\377\0\2150\377\0\206A\377\0yB\377" - "\0yF\377\0m>\377\0w=\377\0h1\377\0jA\377\0sB\377\0pH\377\0mM\377\0h8" - "\377\0y\77\377\0nE\377\0i=\377\0fG\377\0hJ\377\0jD\377\0wN\377\0s\\\377" - "\0|a\377\0\215U\377\0x\214\377\0Oz\377\0""5W\377\0\77X\377\223\3<\377" - "k\0\33\377\77\0\0\377J\0\0\377R\"\12\377Z\"\0\377Z!\3\377Y%\30\377H&" - "\25\377^*\24\377W,\26\377S1\32\377W+\21\377W%\32\377\\/\31\377R-\21\377" - "L&\7\377G,\6\377H1\0\377J#\0\377C/\0\377G(\0\3775<\0\377D8\0\377@'\0" - "\377+<\0\37713\0\3774*\0\377/,\0\377(0\0\3771:\0\37729\0\377=9\0\377" - "&7\0\3771/\0\37774\0\377#!\0\377(\35\0\377\30\31\0\377*\"\0\377%\37\0" - "\3772\"\0\377\"%\0\377'\23\0\377)\31\0\377*\23\0\377>\16\0\3770\3\0\377" - "0\0\0\3776\15\0\377!\0\0\377\230\77r\377\305\201\233\377\273|\244\377" - "\314t\245\377\304l\262\377\270s\232\377\304z\243\377+\0\0\377\11\0\0" - "\377\13\0\0\377\2\0\0\377\13\0\0\377\6\0\0\377\0\0\0\377\7\0\0\377\204" - "\0\0\0\377\14\4\0\0\377\0\0\0\377h7D\377\252\207\234\377\246\210\235" - "\377\245s\240\377\244}\226\377\230v\242\377\224u\234\377\31\0\2\377\0" - "\0\0\377\0\13\0\377\225\0\0\0\377\7BcT\377^\212\211\377d\202\202\377" - "l\206\212\377d{\207\377ew\221\377[{\204\377\204\0\0\0\377\7Pv\213\377" - "Z\216\220\377Z\207\232\377L\212\260\377>\216\256\377H\214\231\377\0\23" - "$\377\206\0\0\0\377\1\0\3\0\377\205\0\0\0\377).{n\377S\240\211\377G\236" - "\177\377O\247\203\377H\255\215\377Q\236\210\377\0""5\37\377\0\0\0\377" - "\0\25\0\377\0\36\0\377\0!\0\377\0\34\0\377\0\3\0\377\0\0\0\377\33\227" - "Q\377F\274n\377J\270k\3774\233I\377\0\4\0\377\0$\0\377\0:\0\377\0>\0" - "\377\0C\0\377\0)\0\377\7`\22\377]\312z\377]\326\203\377O\326\225\377" - "N\332\235\377H\325\201\377C\323x\377M\337|\377\0]\17\377\0/\0\377\0M" - "\0\377\0b\0\377\0\206\0\377\0\265\0\377\0\304\0\377\0\262\0\377z\304" - "z\377\202\377\377\377\377\24\367\371\367\377\31`\32\377\6e\26\377\24" - "|'\377\35\2177\377\13x\25\377\13r\24\377\7g\15\377\4a\6\377^\217_\377" - "\371\373\371\377\202\254\204\377\3\\\12\377\1c\3\377\0f\0\377\0n\0\377" - "\0o\0\377\0p\0\377\0o\0\377\207\263\207\377\202\377\377\377\377\177\332" - "\354\332\377\4\217\4\377\0\221\0\377\0\252\0\377\0\271\0\377\0\275\0" - "\377\0\317\0\377\0\337\0\377'\356,\377\332\372\335\377\377\377\377\377" - "\371\376\371\377\10\341\24\377\0\256\2\377\0\231\10\377\0\204\0\377\0" - "y\5\377\0z\22\377\0}\5\377\0d\4\377\7r\15\377\333\352\334\377\336\355" - "\340\377\35\211$\377\0w\14\377\0u\11\377\0x\16\377\0}\24\377\0y\31\377" - "\0s\17\377\0\204\31\377\0\210\36\377\0\245'\377\0\314=\377<\344v\377" - "\352\375\357\377\15\345H\377\0\254<\377\0\226*\377\0|7\377\0pD\377\0" - "\200I\377\0q;\377\0j<\377\0m6\377\0iE\377\0qP\377\0zO\377\0{D\377\0x" - ">\377\0hD\377\0e;\377\0f\77\377\0gD\377\0_L\377\0fT\377\0ZD\377\0^\77" - "\377\0rL\377\0uQ\377\0_\215\377\0KZ\377\0""3G\377\0:R\377\200\11""2\377" - "p\0\34\377Z\0\1\377T\0\4\377T$\27\377R-\7\377O+\21\377\\-\21\377Z&\10" - "\377U5\13\377e@\32\377]2\22\377Z0\34\377V*\36\377V$\23\377]&\23\377T" - "'\17\377T#\0\377K(\0\377G\37\4\377F)\2\3778*\0\377B$\11\377A&\0\3772" - "%\0\377\77+\0\377;*\0\377(:\0\377/:\0\3778/\0\37711\0\37737\0\377\16\0\3777\7\0\3770\6\0\377%\12\0\377)" - "\0\0\377\247c\212\377\316\214\243\377\314\213\237\377\323{\255\377\311" - "\201\242\377\313x\251\377\302w\242\377\273w\251\377\301w\233\377\305" - "s\226\377\273f\201\377\303g{\377\302cy\377\275e\212\377\310x\212\377" - "\315n\202\377\304s\217\377\267x\212\377\274~\211\377\304\213\232\377" - "\314\204\240\377\301s\257\377f\275u\237\377\302\177\231\377\267w\227" - "\377\300q\244\377\302}\240\377N\0%\377\12\0\0\377\17\2\0\377\3\0\0\377" - "\37\0\6\377\247\220\243\377\245\212\216\377\245\207\211\377\250\225\230" - "\377\263\232\235\377\246\232\241\377\250\227\226\377\232\223\217\377" - "\227\231\225\377\202\220\227\377~\233\232\377y\232\220\377\177\225\214" - "\377}\224\221\377\200\232\213\377\202\241\215\377}\236\224\377\177\237" - "\211\377t\236\223\377r\227\226\377m\230\231\377g\234\237\377q\237\217" - "\377g\240\244\377^\217\221\377\0\0\0\377\0\11\0\377\0\13\0\377\0\25\0" - "\377\0\7\0\377\0\0\0\377W\234\232\377k\255\251\377l\253\254\377`\257" - "\246\377d\251\243\377`\254\253\377T\244\260\377J\243\264\377R\252\260" - "\377I\246\242\377C\261\244\377C\251\245\377\\\275\246\377N\273\246\377" - "H\274\243\377P\257\231\377G\271\232\377P\256\234\377O\266\216\377V\266" - "\221\377H\257\227\377Q\275\232\377M\254\222\377H\260\226\377\4fH\377" - "\0\0\0\377\0!\0\377\0\22\0\377\0\0\0\377\0\23\0\3779\261\203\377F\267" - "\216\377M\277\223\377\36iC\377\0\6\0\377\0\40\0\377\0)\0\377\0;\0\377" - "\0""1\0\377\0:\0\377\0<\0\377\0A\0\377\0:\0\377\0\33\0\377\3\2163\377" - "Y\350\203\377T\347}\377K\363\204\377N\345\220\377N\362\206\377U\370\203" - "\377V\375\226\377\0s\35\377\0)\0\377\0t\0\377\0\254\0\377\0\253\0\377" - "\0\254\0\377\0\237\0\377D\243D\377\365\372\365\377\202\377\377\377\377" - "\23\366\371\366\377\251\321\253\377\177\262\202\377\213\274\217\377\262" - "\317\263\377\353\362\353\377\202\254\203\377\15c\15\377\1d\1\377\2e\4" - "\377\0_\0\377\0Z\0\377\0]\0\377\0m\0\377\0q\0\377\0o\0\377\0k\0\377\0" - "d\0\377y\250y\377\203\377\377\377\377\7\341\361\341\377\241\324\241\377" - "\204\310\204\377\252\332\252\377\324\356\324\377v\330v\3776\3077\377" - "\202\377\377\377\377\7q\331\207\377\0\300)\377\0\255\26\377\0\232\15" - "\377\0\226\12\377\16\207\26\377\341\356\342\377\203\377\377\377\377\1" - "\376\376\376\377\206\374\375\374\377\206\377\377\377\377\177\365\374" - "\367\377\35\333Y\377\0\340M\377\0\315D\377\0\265O\377\0\236F\377\0\211" - "J\377\0nE\377\0n\77\377\0k[\377\0zO\377\0}H\377\0\177S\377\0zK\377\0" - "vC\377\0s8\377\0gG\377\0pO\377\0mT\377\0pP\377\0rS\377\0_Z\377\0PR\377" - "\0MI\377\0SR\377\0aL\377\0Y\220\377\0""2t\377\0%L\377\0*B\377\227\0E" - "\377j\0#\377Y\0\12\377W\0\12\377f\34\21\377a%\26\377d-\17\377i)\37\377" - "r3\20\377w*\34\377k6\33\377k0\37\377o2\26\377^-\20\377f\31\30\377l!\30" - "\377O\27\21\377L\33\17\377S\40\6\377X\31\15\377A\25\10\377K\20\14\377" - "M\40\2\377I\30\3\377H\37\0\377L*\0\3772'\0\37794\3\377<<\4\377E:\22\377" - "C7\12\377W8\10\377C3\1\377N*\0\377M3\10\377B-\0\377<&\0\377K$\0\377O" - "!\0\377Q(\0\377K\35\0\377=\22\0\377D\31\0\377C\31\0\377@\24\0\3775\17" - "\0\377<\7\0\3773\0\0\377+\10\0\377.\6\0\377%\0\0\377\40\0\0\377\32\0" - "\0\377k\16""4\377\253Zn\377\315\200\242\377\331{\250\377\323x\235\377" - "\312v\245\377\314p\234\377\315p\226\377\316y\217\377\306l\206\377\320" - "e\210\377\332^\211\377\324i|\377\327q\204\377\326n\207\377\320my\377" - "\320}\201\377\310\202\223\377\301^\205\377d\11$\377K\0\21\377\317z\246" - "\377\312s\230\377\312g\240\377\301s\232\377\274\201\237\377\230Bc\377" - "\11\0\0\377\13\13\0\377\12\1\0\377\5\0\0\377\277\205\225\377\271\207" - "\230\377\270\206\233\377\263\223\231\377\264\231\235\377\255\214\230" - "\377\242\232\235\377\222\222\224\377\227\223\227\377\225\206\242\377" - "\235\212\224\377\237\234\205\377\235\220\212\377\13\215\242\227\377}" - "\232\231\377\200\240\226\377\205\232\241\377\204\244\231\377z\253\236" - "\377u\252\223\377u\265\227\377y\256\242\377]\230\200\377*RS\377\202\0" - "\0\0\377\1\0(\0\377\202\0%\0\377^\0!\0\377\0\0\0\377\0\0\12\377$_d\377" - "U\232\220\377x\272\256\377p\244\251\377t\253\261\377d\267\261\377^\263" - "\251\377V\266\264\377T\277\245\377W\265\254\377`\273\246\377O\270\246" - "\377M\305\242\377Y\267\246\377V\266\235\377\\\274\244\377\0RA\377\0\6" - "\0\377X\305\234\377O\301\236\377R\266\235\377M\270\243\377W\256\226\377" - "B\254\204\377\0\0\0\377\0\22\0\377\0\2\0\377\0P<\377Z\304\235\377Z\300" - "\246\377a\303\227\377\40\202N\377\0\7\0\377\0\33\0\377\0""6\0\377\0." - "\0\377\0C\0\377\0@\0\377\0""0\0\377\0<\0\377\0""9\0\377\0""7\0\377\0" - "3\0\377\0\24\0\377(\256Y\377N\353\233\377Y\344\217\377k\361\177\377`" - "\366\214\377b\370\213\377X\366\200\377X\370\207\377\0\203\32\377\0R\0" - "\377\0\234\0\377\0\261\0\377\0\251\0\377\0\236\0\377\0\222\0\377#\224" - "#\377\230\307\232\377\335\353\336\377\370\373\370\377\357\366\357\377" - "\323\347\325\377\252\315\255\377[\241`\377\17p\21\377\1j\1\377\0`\0\377" - "\0f\0\377\0[\0\377\0^\0\377\0a\0\377\0j\0\377\0i\0\377\0c\0\377\0d\0" - "\377\0i\0\377\0b\0\377\0n\0\377Q\232Q\377\274\332\274\377\357\366\357" - "\377\364\371\364\377\334\355\334\377\245\321\246\377S\266V\377\4\232" - "\7\377\0\246\24\377d\311m\377\202\377\377\377\377e'\276C\377\0\254\40" - "\377\0\243\21\377\0\242\26\377\0\222\21\377w\274\202\377\330\351\335" - "\377\330\352\334\377\330\350\332\377\330\350\333\377\330\350\334\377" - "\330\350\332\377\330\352\333\377\330\354\334\377\333\353\337\377\341" - "\355\343\377\347\361\352\377\355\364\357\377\362\366\364\377\370\372" - "\371\377\376\376\376\377\370\373\371\377\320\352\331\377F\265r\377\0" - "\307A\377\0\313U\377\0\276V\377\0\267a\377\0\245M\377\0\211U\377\0uF" - "\377\0}K\377\0t[\377\0dF\377\0vW\377\0x:\377\0mP\377\0m;\377\0sG\377" - "\0dN\377\0iH\377\0hX\377\0gU\377\0`f\377\0hZ\377\0^_\377\0P]\377\0TQ" - "\377\0_C\377\0N\202\377\0*n\377\0\32P\377\0\36M\377\204\5R\377m\0""1" - "\377Y\0\7\377O\0\13\377R\30\37\377g)\36\377n#!\377x\32""4\377v\36\25" - "\377t$\26\377n1\"\377z\40\33\377g'$\377o\34\32\377u\23\30\377m\30\22" - "\377[\24\32\377b\34\"\377W\24\25\377_\26\14\377X\25\22\377X\30\10\377" - "T\20\7\377J\22\0\377D\30\2\377L#\0\377U*\4\377P<\6\377S1\15\377O5\3\377" - "W/\13\377V/\4\377Q&\12\377[+\20\377I,\24\377E)\4\377W$\1\377S(\0\377" - "X\"\5\377\\\27\0\377E\14\0\377>\12\0\377M\6\0\377B\5\0\377H\4\0\377H" - "\3\0\377=\0\0\3778\2\0\377\202.\0\0\377#1\0\0\3775\0\0\377%\0\0\377\34" - "\0\0\377\33\0\0\377#\0\0\377(\0\0\377\36\0\0\377\27\0\0\377\37\0\0\377" - "\24\0\0\377\21\0\0\377'\0\0\377$\0\0\377\40\0\0\377\37\0\0\377!\0\0\377" - "\15\0\0\377\26\0\0\377\35\0\0\377\20\0\0\377\30\0\0\377\40\0\0\377\"" - "\0\0\377\30\0\0\377\35\0\0\377\11\0\0\377\12\0\0\377\17\0\0\377\30\0" - "\0\377\35\0\0\377\4\0\0\377\15\0\0\377\11\0\0\377\1\0\0\377\227\0\0\0" - "\377\10\0\17\0\377\0'\0\377\0\37\0\377\0""5\0\377\0+\0\377\0""1\0\377" - "\0/\0\377\0\26\0\377\221\0\0\0\377\1\0\10\0\377\207\0\0\0\377\3\0\32" - "\0\377\0(\0\377\0\13\0\377\203\0\0\0\377\11\0\7\0\377\0\30\0\377\0""5" - "\0\377\0""2\0\377\0+\0\377\0G\0\377\0>\0\377\0@\0\377\0<\0\377\202\0" - "9\0\377\15\0%\0\377\0#\0\377\0\27\0\377\0\34\0\377\0\30\0\377\0\26\0" - "\377\0\20\0\377\0\27\0\377\0\17\0\377\0\31\0\377\0@\0\377\0x\0\377\0" - "\241\0\377\202\0\266\0\377D\0\233\0\377\0\200\0\377\0\204\0\377\0q\1" - "\377\1y\6\377\5u\16\377\5w\24\377\7p\22\377\4m\12\377\1r\4\377\0e\1\377" - "\0n\0\377\0i\0\377\0h\0\377\0f\0\377\0b\0\377\0j\0\377\0k\0\377\0e\0" - "\377\0f\0\377\0e\7\377\0g\6\377\0n\0\377\0o\0\377\0n\6\377\0a\7\377\0" - "t\7\377\0x\5\377\0}\27\377\0x\27\377\0|\21\377\0\202\12\377\0\216\"\377" - "\242\331\256\377\377\377\377\377\335\363\342\377\1\2402\377\0\2323\377" - "\0\221\23\377\0\2261\377\0\207-\377\0}0\377\0\2000\377\0\200\31\377\0" - "\177\16\377\0\203\33\377\0m&\377\0l&\377\0~1\377\0|%\377\0o(\377\0m3" - "\377\0q6\377\0c+\377\0i2\377\0i(\377\0p9\377\0`*\377\0f1\377\0\202>\377" - "\0\245K\377\0\277\\\377\1\274^\377\0\263]\377\0\230Q\377\0\227Z\377\0" - "\210P\377\0\203Q\377\202\0mO\377L\0uN\377\0jQ\377\0zK\377\0mG\377\0e" - "Q\377\0dR\377\0cZ\377\0lV\377\0VW\377\0SX\377\0X\\\377\0[g\377\0b^\377" - "\0[S\377\0UM\377\26G\207\377\0/n\377\0\16O\377\0\23X\377\214\0N\377n" - "\0.\377B\0\34\377\77\0\26\377`\32\37\377T\31\24\377k\40\36\377}\27""1" - "\377{\36'\377s+\33\377l%\36\377o\37+\377o\35#\377e\36%\377o&\33\377i" - "\22!\377e\23\17\377g\6\40\377a\21\32\377a\15\35\377_\16\16\377X\31\27" - "\377Q\22\7\377S\27\0\377U\34\0\377O$\2\377M'\6\377R4\4\377P6\1\377R6" - "\15\377V%\5\377e.\21\377\\4\0\377X7\4\377U'\4\377X\30\0\377S\23\0\377" - "Y\31\0\377W\25\0\377M\12\0\377L\12\0\377Q\0\0\377G\0\0\377L\0\0\377C" - "\0\0\377>\3\0\377D\2\0\377=\0\0\3775\0\0\3774\0\0\3776\0\0\3775\0\0\377" - "%\0\0\377\35\0\0\377/\0\0\3775\0\0\377*\0\0\377\202$\0\0\377\7\37\0\0" - "\377\31\0\0\377!\0\0\377-\0\0\377*\0\0\377&\0\0\377(\0\0\377\202$\0\0" - "\377\25!\0\0\377\33\4\0\377\31\0\0\377&\0\0\377+\14\0\377)\0\0\377$\7" - "\0\377\35\14\0\377\17\0\0\377\14\0\0\377\33\1\0\377\37\0\0\377\15\0\0" - "\377\24\1\0\377\17\12\0\377\0\0\0\377\0\2\0\377\0\0\0\377\7\6\0\377\1" - "\21\0\377\0\15\0\377\210\0\0\0\377\25\0\4\0\377\0\6\0\377\0\24\0\377" - "\0\7\0\377\0\22\0\377\0\21\0\377\0\32\0\377\0\30\0\377\0\34\0\377\0)" - "\0\377\0$\0\377\0\31\1\377\0""3\0\377\0.\0\377\0""8\0\377\0;\0\377\0" - "8\0\377\0.\0\377\0""2\0\377\0@\0\377\0""0\0\377\202\0""6\0\377\22\0""1" - "\1\377\0)\0\377\0-\0\377\0""8\0\377\0""6\0\377\0""5\0\377\0""8\0\377" - "\0""9\0\377\0""1\0\377\0""7\0\377\0,\0\377\0\40\0\377\0,\0\377\0""3\0" - "\377\0""2\0\377\0""8\0\377\0""0\0\377\0,\0\377\204\0""5\0\377\177\0:" - "\0\377\0-\0\377\0""5\0\377\0'\0\377\0%\0\377\0)\0\377\0""5\0\377\0:\0" - "\377\0E\0\377\0""7\0\377\0E\0\377\0""9\0\377\0<\0\377\0;\0\377\0<\0\377" - "\0*\0\377\0""7\0\377\0;\0\377\0D\0\377\0T\0\377\0D\0\377\0L\0\377\0O" - "\0\377\0M\0\377\0C\0\377\0Q\0\377\0n\0\377\0\213\0\377\0\264\0\377\0" - "\273\0\377\0\255\0\377\0\206\0\377\0~\0\377\0z\0\377\0{\0\377\0\202\0" - "\377\0z\0\377\0r\0\377\0e\0\377\0j\0\377\0_\0\377\0a\0\377\0n\0\377\0" - "e\0\377\0T\0\377\0\\\0\377\0a\0\377\0\\\0\377\0K\0\377\0`\0\377\0\\\0" - "\377\0]\0\377\0\\\0\377\0k\1\377\0h\3\377\0{\20\377\0x\20\377\0{\14\377" - "\0x\26\377\0w\12\377\0{\10\377\0z\37\377\0\204%\377\0\177%\377\341\362" - "\345\377\377\377\377\377\220\327\240\377\0\234+\377\0\216\34\377\0\207" - "$\377\0\206*\377\0\2027\377\0\207,\377\0~/\377\0\207!\377\0\2046\377" - "\0t1\377\0i%\377\0r.\377\0s:\377\0r=\377\0p$\377\0i+\377\0t)\377\0r'" - "\377\0h\40\377\0h%\377\0o1\377\0e+\377\0c$\377\0~;\377\0\215J\377\0\250" - "N\377\5\232f\377\0\244N\377\0\221N\377\0\230Z\377\0\223Q\377\0\203G\377" - "\0rV\377\0kT\377\0rR\377\0eQ\377\0rU\377\0oW\377\0lM\377\0c[\377\0^[" - "\377\0Yc\377\0G]\377\0CY\377\0JS\377\0aI\377\0bR\377\0UP\377\0NN\377" - "\26\77~\377\0""1f\377\0\23M\377\0\24Y\377\207\0E\377f\0'\377V\0\17\377" - "T\0\26\377e\25\36\377S\35\37\377q\24\35\377&y\31%\377e'\30\377e+\35\377" - "_!\31\377b$\37\377_&\23\377_-\30\377Y\31\16\377\\\36\21\377_\30\25\377" - "`\7&\377\\\26#\377g\35\15\377m\25\21\377^\20\0\377W\23\0\377L\30\0\377" - "D+\1\377E0\0\377Z2\0\377^,\0\377T.\0\377S0\0\377^.\0\377e.\0\377\\(\0" - "\377[\25\0\377`\36\0\377P!\0\377K\23\0\377Z\31\0\377T\25\0\377D\25\0" - "\377Q\20\0\377I\1\0\377M\4\0\377B\5\0\377G\10\0\377\202;\0\0\377\10""6" - "\3\0\3772\0\0\3775\0\0\377/\0\0\377'\0\0\3773\0\0\377+\0\0\3772\0\0\377" - "\202/\0\0\377\32,\0\0\377#\0\0\377$\0\0\377!\0\0\377.\0\0\377-\0\0\377" - "+\0\0\377-\0\0\377(\0\0\377)\0\0\377\40\1\0\377#\10\0\377\31\0\0\377" - "0\5\0\377!\1\0\377\36\0\0\377\21\0\0\377\35\11\0\377\26\4\0\377\6\17" - "\0\377\22\0\0\377\1\0\0\377\26\0\0\377\17\7\0\377\12\12\0\377\15\0\0" - "\377\202\0\0\0\377\2\10\0\0\377\3\7\0\377\204\0\0\0\377\1\0\12\0\377" - "\204\0\0\0\377\202\0\3\0\377\15\0\24\0\377\0\12\0\377\0\13\0\377\0\6" - "\0\377\0\11\0\377\0\20\0\377\0\10\0\377\0\14\0\377\0\26\0\377\0\35\0" - "\377\0+\6\377\0$\0\377\0""2\0\377\202\0/\0\377\5\0:\0\377\0>\0\377\0" - "<\0\377\0=\2\377\0@\0\377\202\0<\0\377\13\0""6\0\377\0""1\0\377\0""2" - "\0\377\0""1\0\377\0>\0\377\0:\0\377\0D\0\377\0<\0\377\0K\0\377\0G\7\377" - "\0<\0\377\202\0:\0\377\177\0""9\0\377\0;\0\377\0-\0\377\0<\0\377\0;\0" - "\377\0""1\0\377\0,\0\377\0""3\0\377\0E\0\377\0C\0\377\0>\0\377\0""6\0" - "\377\0;\0\377\0""7\0\377\0""4\0\377\0""8\0\377\0<\0\377\0G\0\377\0E\0" - "\377\0A\0\377\0O\0\377\0C\0\377\0;\0\377\0""6\0\377\0""2\0\377\0;\0\377" - "\0@\0\377\0E\0\377\0G\0\377\0N\0\377\0G\0\377\0H\0\377\0>\0\377\0I\0" - "\377\0Y\0\377\0n\0\377\0\204\0\377\0\252\0\377\0\263\0\377\0\244\0\377" - "\0\220\0\377\0\201\0\377\0\200\0\377\0y\0\377\0i\0\377\0X\0\377\0M\0" - "\377\0L\0\377\0V\0\377\0c\0\377\0b\0\377\0U\0\377\0B\0\377\0V\0\377\0" - "_\0\377\0c\0\377\0L\0\377\0a\0\377\0Q\0\377\0T\0\377\0W\0\377\0U\0\377" - "\0^\0\377\0^\4\377\0g\2\377\0l\0\377\0j\13\377\0k\13\377\0v\11\377\0" - "t\26\377\0p!\377\0q%\377\40\214A\377\377\377\377\377\373\374\373\377" - "\"\2157\377\0s\27\377\0t\32\377\0}\33\377\0t\26\377\0x.\377\0r-\377\0" - "z/\377\0pA\377\0l7\377\0lF\377\0\200:\377\0\2008\377\0h(\377\0g)\377" - "\0y,\377\0n(\377\0j\"\377\0r%\377\0f&\377\0u+\377\0l/\377\0s/\377\0i" - "\77\377\0sG\377\0}I\377\0\204N\377\0\177L\377\0\233J\377\0\226H\377\0" - "\216C\377\0~D\377\0xR\377\0pR\377\0u\\\377\0gY\377\0jR\377\0jV\377\0" - "nQ\377\0YM\377\0hM\377\0TT\377\0YL\377\0RS\377\0GI\377\0RQ\377\0cE\377" - "\0XW\377\0VK\377\0WQ\377\27Fy\377\0@`\377[\0\31L\377\0\22I\377|\0>\377" - "j\0\32\377L\0\14\377W\0\13\377T%\16\377Y\40\16\377`\40\14\377]#\24\377" - "\\/\23\377W4\31\377W>\33\377X8\35\377U3\20\377[-\21\377X1\32\377X\40" - "\24\377Y'\34\377O#\31\377Z\33\21\377_$\0\377`\27\2\377Z'\0\377O$\11\377" - "N(\16\377_)\0\377Y(\0\377Y)\0\377S)\0\377V,\0\377T!\0\377]2\0\377a.\0" - "\377]\"\0\377e0\0\377T\22\0\377J\16\0\377R$\0\377K\40\0\377J\26\0\377" - "J\21\0\377K\26\0\377E\13\0\377G\16\0\377O\30\0\377B\16\0\377G\14\0\377" - "5\0\0\3777\2\0\3770\0\0\377.\0\0\377)\0\0\3771\0\0\377/\0\0\3777\0\0" - "\377,\0\0\377#\0\0\377\40\0\0\377-\0\0\3772\0\0\3776\0\0\377(\0\0\377" - "4\0\0\377,\0\0\377-\0\0\377*\0\0\3773\0\0\377/\0\0\377\40\0\0\377\37" - "\0\0\377\34\0\0\377\40\0\0\377\23\0\0\377\26\0\0\377\23\0\0\377\10\14" - "\0\377\12\3\0\377\5\7\0\377\21\16\0\377\3\3\0\377\16\30\0\377\25\31\0" - "\377\6\21\0\377\15\11\0\377\5\0\0\377\0\13\0\377\0\6\0\377\2\0\0\377" - "\1\0\0\377\7\0\0\377\211\0\0\0\377\1\0\11\0\377\202\0\0\0\377\7\0\5\0" - "\377\0\16\0\377\0\10\0\377\0\0\0\377\0\11\0\377\0\22\0\377\0\36\0\377" - "\202\0\37\0\377\12\0#\0\377\0\33\0\377\0+\0\377\0.\0\377\0""5\12\377" - "\0\77\6\377\0\77\2\377\0=\0\377\0""8\0\377\0H\1\377\202\0H\0\377\10\0" - "0\4\377\0""8\0\377\0""5\0\377\0\77\0\377\0N\3\377\0\\\0\377\0W\0\377" - "\0Q\0\377\202\0M\0\377\10\0O\0\377\0""8\0\377\0)\0\377\0&\0\377\0'\0" - "\377\0/\0\377\0*\0\377\0(\0\377\202\0""9\0\377\5\0:\0\377\0A\0\377\0" - "D\0\377\0@\0\377\0""5\0\377\202\0""9\0\377\35\0""6\0\377\0""5\0\377\0" - "B\0\377\0A\0\377\0L\0\377\0J\0\377\0D\0\377\0X\0\377\0N\0\377\0O\0\377" - "\0A\0\377\0J\0\377\0L\0\377\0O\0\377\0H\0\377\0""5\0\377\0""7\0\377\0" - ">\0\377\0R\0\377\0n\0\377\0\214\0\377\0\256\0\377\0\300\3\377\0\303\11" - "\377\0\240\1\377\0\204\0\377\0s\3\377\0Z\0\377\0\\\0\377\202\0J\0\377" - "\177\0C\0\377\0I\0\377\0@\0\377\0M\0\377\0@\0\377\0""8\0\377\0I\0\377" - "\0B\0\377\0G\0\377\0I\0\377\0>\0\377\0\77\0\377\0=\0\377\0J\0\377\0N" - "\0\377\0U\0\377\0S\2\377\0U\5\377\0]\17\377\0c\7\377\0\\\2\377\0i\30" - "\377\0f\27\377\0d'\377\0]\37\377_\240q\377\377\377\377\377\214\271\226" - "\377\0h\25\377\0p\23\377\0m\24\377\0l%\377\0q%\377\0d%\377\0e+\377\0" - "g\33\377\0e5\377\0j8\377\0{4\377\0z\"\377\0{-\377\0u)\377\0r\37\377\0" - "s#\377\0l1\377\0h/\377\0f\40\377\0f.\377\0h&\377\0r0\377\0b4\377\0]C" - "\377\0d;\377\0nB\377\0rE\377\0r>\377\0w4\377\0s>\377\0q4\377\0^5\377" - "\0nN\377\0hM\377\0fM\377\0cN\377\0lU\377\0eM\377\0\\P\377\0[H\377\0W" - "G\377\0XS\377\0PP\377\0NI\377\0UF\377\0X@\377\0\\<\377\0TJ\377\0FN\377" - "\0VJ\377\21G|\377\0-f\377\0\27K\377\0\14Q\377\210\2D\377a\0*\377N\0\10" - "\377N\0\4\377^$\35\377N)\26\377V3\26\377W>\24\377Z2\24\377[>\30\377e" - "9\23\377`D\20\377c8\26\377a\77\23\377S9\20\377N-\34\377U0\2\377Q/\14" - "\377\\.\11\377T\"\12\377U)\0\377]\37\11\377],\10\377g-\10\377c4\0\377" - "i8\0\377],\0\377`-\0\377T*\0\377[*\0\377f9\0\377g$\0\377\\$\0\377Y*\0" - "\377a$\0\377V\24\0\377O\27\0\377R%\0\377\\\31\0\377Q&\0\377P\26\0\377" - "N!\0\377Q\27\0\377O\24\0\377I\16\0\377\6D\13\0\377J\14\0\377@\4\0\377" - "2\0\0\3774\0\0\377.\0\0\377\202%\0\0\377\15$\0\0\377*\0\0\377'\0\0\377" - "5\0\0\3771\0\0\377)\0\0\377,\0\0\377*\0\0\377.\0\0\3772\0\0\3775\0\0" - "\377:\0\0\377*\0\0\377\202(\0\0\377\23*\0\0\377+\0\0\377*\0\0\377\34" - "\0\0\377\21\4\0\377\32\2\0\377\11\6\0\377\34\0\0\377\26\17\0\377\36\13" - "\0\377\30\15\0\377\25\25\0\377\16\31\0\377\16\36\0\377\13\24\0\377\2" - "\7\0\377\17\16\0\377\21\11\0\377\10\15\0\377\202\11\0\0\377\211\0\0\0" - "\377\3\0\2\0\377\0\0\0\377\0\1\0\377\202\0\0\0\377%\0\6\0\377\0\2\0\377" - "\0\14\0\377\0\12\1\377\0\16\3\377\0\7\0\377\0\14\0\377\0\36\0\377\0\27" - "\0\377\0!\1\377\0$\2\377\0""0\21\377\0+\17\377\0""3\33\377\0""3\20\377" - "\0=\12\377\0@\15\377\0B\10\377\0>\6\377\0,\12\377\0E\0\377\0""3\7\377" - "\0\77\0\377\0I\0\377\0Q\0\377\0P\0\377\0]\0\377\0R\0\377\0T\0\377\0A" - "\2\377\0""5\2\377\0\37\0\377\0(\0\377\0+\0\377\0(\0\377\0&\0\377\0'\0" - "\377\202\0""7\0\377\177\0""1\0\377\0-\0\377\0,\0\377\0-\0\377\0*\1\377" - "\0(\0\377\0""4\0\377\0""8\0\377\0""5\0\377\0D\0\377\0I\0\377\0G\0\377" - "\0U\0\377\0P\0\377\0Q\0\377\0K\0\377\0D\1\377\0N\0\377\0M\0\377\0S\0" - "\377\0""6\0\377\0""7\0\377\0;\0\377\0.\0\377\0\77\0\377\0e\0\377\0\211" - "\0\377\0\260\0\377\0\277\23\377\0\304\26\377\0\254\20\377\0\222\4\377" - "\0|\3\377\0j\0\377\0U\3\377\0I\0\377\0=\3\377\0=\0\377\0<\0\377\0D\0" - "\377\0""8\0\377\0\77\0\377\0\77\2\377\0A\0\377\0<\6\377\0K\0\377\0E\0" - "\377\0;\0\377\0""9\2\377\0""6\0\377\0M\0\377\0I\0\377\0D\0\377\0M\23" - "\377\0]\21\377\0^\7\377\0d\24\377\0V\15\377\0`\25\377\0c'\377\0Z\32\377" - "\0]\37\377\0`\31\377\271\322\300\377\312\332\314\377\7V\25\377\0]\35" - "\377\0g\37\377\0V\27\377\0H\30\377\0P\34\377\0i\35\377\0\\!\377\0`-\377" - "\0r1\377\0t\37\377\0y(\377\0d\40\377\0o\40\377\0q.\377\0t!\377\0p*\377" - "\0h*\377\0k!\377\0b\25\377\0Y#\377\0]*\377\0X*\377\0Y,\377\0N5\377\0" - "SB\377\0[:\377\0TF\377\0W3\377\0f>\377\0o@\377\0j@\377\0Y9\377\0[/\377" - "\0\\.\377\0c;\377\0]>\377\0X<\377\0f\77\377\0P=\377\0OC\377\0aE\377\0" - "X=\377\0QG\377\0MC\377\0SA\377\0LN\377\0IO\377\0GP\377\0IH\377\0BC\377" - "\15""1z\377\0\14U\377\0\0\77\377\0\16E\377\200\5F\377h\0\24\377I\0\0" - "\377E\0\0\377T5\7\377R9\33\377R5\26\377>U=\30\377`7\7\377`<\22\377`T" - "\30\377aO\17\377bG\26\377W6\34\377U.\20\377S/\0\377Y*\11\377Z)\3\377" - "X\"\0\377V2\0\377X\40\0\377[.\2\377`9\0\377l4\0\377g+\0\377_4\0\377n" - "4\0\377o8\0\377c;\0\377f*\0\377_\37\0\377a*\0\377V'\0\377^\40\0\377b" - "\"\0\377V\26\0\377V\34\0\377g\21\0\377M\27\0\377S\"\0\377S\24\0\377H" - "\35\0\377L\22\0\377L\27\0\377N\15\0\377G\24\0\377<\20\0\3778\17\0\377" - ".\4\0\377/\0\0\3772\5\0\3777\5\0\377;\0\0\3774\0\0\3778\0\0\3777\0\0" - "\3774\0\0\377.\0\0\377'\0\0\3776\0\0\377/\10\0\377/\0\0\3775\0\0\377" - "D\0\0\377;\2\0\377/\0\0\3778\0\0\377,\0\0\377-\0\0\377\202*\0\0\377\23" - ")\12\0\377&\7\0\377$\3\0\377+\10\0\377\27\10\0\377\35\14\0\377\24\23" - "\0\377\27\37\0\377\13\40\0\377\7$\0\377\12\32\0\377\6\14\0\377\23\2\0" - "\377\14\3\0\377\0\25\0\377\0\11\0\377\0\3\0\377\0\0\0\377\3\3\0\377\210" - "\0\0\0\377\1\0\4\0\377\205\0\0\0\377\40\0\4\0\377\0\10\2\377\0\0\15\377" - "\0\5\0\377\0\0\0\377\0\16\21\377\0\4\0\377\0\16\0\377\0\23\11\377\0\22" - "\20\377\0\"\11\377\0$\24\377\0'\20\377\0""1\5\377\0""4\20\377\0:\21\377" - "\0A\23\377\0D\17\377\0H\0\377\0=\0\377\0""9\3\377\0\77\3\377\0S\0\377" - "\0M\0\377\0R\0\377\0P\0\377\0Q\0\377\0I\0\377\0""5\0\377\0/\0\377\0""6" - "\0\377\0""4\0\377\202\0/\0\377\177\0)\0\377\0\27\0\377\0#\0\377\0""3" - "\0\377\0)\0\377\0-\1\377\0+\6\377\0(\10\377\0&\10\377\0(\1\377\0B\4\377" - "\0;\5\377\0""9\0\377\0E\0\377\0\77\0\377\0K\3\377\0D\3\377\0J\4\377\0" - "E\12\377\0K\16\377\0M\24\377\0E\0\377\0F\0\377\0I\0\377\0B\0\377\0E\0" - "\377\0S\10\377\0M\14\377\0]\0\377\0h\6\377\0\200\13\377\0\257\10\377" - "\0\313\20\377\0\320\30\377\0\264\16\377\0\231\30\377\0\200\16\377\0_" - "\11\377\0[\3\377\0U\23\377\0K\2\377\0@\0\377\0""8\0\377\0\77\0\377\0" - "8\0\377\0""5\2\377\0""8\0\377\0;\0\377\0B\0\377\0G\7\377\0=\6\377\0E" - "\0\377\0F\0\377\0J\0\377\0E\0\377\0S\0\377\0L\4\377\0_\3\377\0[\12\377" - "\0U\17\377\0S\14\377\0M\34\377\0Y\27\377\0b\23\377\0M\34\377\0[\34\377" - "<|Y\377\325\343\327\377\25O)\377\0I\31\377\0R\37\377\0A%\377\0""8\40" - "\377\0C*\377\0N)\377\0S(\377\0S*\377\0R\27\377\0Y\21\377\0Q\22\377\0" - "S\23\377\0b\36\377\0a\27\377\0b#\377\0c\"\377\0d\24\377\0g\30\377\0a" - "\37\377\0`\27\377\0b+\377\0W%\377\0]\"\377\0Y\37\377\0O'\377\0I5\377" - "\0Y*\377\0X0\377\0W)\377\0[@\377\0`@\377\0Z=\377\0V-\377\0\\/\377\0U" - "9\377\0R2\377\0K3\377\0B.\377\0C4\377\0XA\377\0UD\377\0E9\377\0EB\377" - "\0MD\377\0CB\377\0\2\0\377=\4\0\377A\0\0" - "\377;\5\0\3778\0\0\3773\7\0\377'\0\0\3779\0\0\3776\0\0\3772\0\0\3778" - "\1\0\3771\0\0\377)\21\0\377\35\15\0\377\32\13\0\377%\12\0\377\33\21\0" - "\377\22\31\0\377\23.\0\377\15!\0\377\24\31\0\377\7\20\0\377\0\27\0\377" - "\0\23\0\377\0\32\0\377\3\23\0\377\20\10\0\377\11\2\0\377\213\0\0\0\377" - "\3\0\6\0\377\0\0\0\377\0\12\0\377\202\0\0\0\377\177\0\1\6\377\0\10\7" - "\377\0\13\2\377\0\12\10\377\0\21\0\377\0\23\6\377\0\35\10\377\0\35\14" - "\377\0\20\1\377\0\30\15\377\0\24\7\377\0\26\16\377\0""2\12\377\0,\5\377" - "\0""5\16\377\0G\22\377\0V\21\377\0E\0\377\0C\15\377\0""6\11\377\0Q\5" - "\377\0J\0\377\0N\0\377\0P\5\377\0X\6\377\0S\0\377\0B\5\377\0#\4\377\0" - "-\0\377\0""4\12\377\0-\0\377\0)\0\377\0""3\0\377\0-\0\377\0""3\0\377" - "\0)\0\377\0&\0\377\0""0\0\377\0,\0\377\0,\21\377\0\37\14\377\0\40\11" - "\377\0""1\20\377\0""0\6\377\0""4\6\377\0<\2\377\0B\20\377\0""2\7\377" - "\0\77\7\377\0<\15\377\0=\17\377\0""5\12\377\0D\30\377\0H\16\377\0K\16" - "\377\0;\0\377\0:\16\377\0D\14\377\0F\21\377\0H\12\377\0N\16\377\0N\13" - "\377\0^\3\377\0}\2\377\0\247\30\377\0\273\21\377\0\267\37\377\0\247\40" - "\377\0\224\25\377\0h\7\377\0`\7\377\0\\\21\377\0M\20\377\0H\30\377\0" - "<\25\377\0""1\4\377\0>\1\377\0>\0\377\0+\7\377\0""1\0\377\0>\7\377\0" - "E\14\377\0I\14\377\0O\3\377\0P\23\377\0Q\21\377\0[\12\377\0h\0\377\0" - "d\0\377\0c\21\377\0`\33\377\0f\27\377\0X\20\377\0X\25\377\0N\24\377\0" - "Q\21\377\1U\34\377\23]0\377Z\221p\377\273\316\303\377\34Z3\377\0""9\25" - "\377\0Q\30\377\0J\31\377\0*#\377\0-\37\377\0/&\377\0.#\377\0@,\377\0" - "\77*\377\0B\25\377\0;\31\377\0K\25\377\0B\27\377\0Q\25\377\0Y\36\377" - "\0h\27\377\0]\33\377\0Z\35\377\0^\31\377\0b\37\377\0Q)\377\0U#\377\0" - "I\31\377\0N#\377\0V\40\377\0Q)\377W\0G)\377\0T6\377\0N1\377\0A4\377\0" - "VA\377\0R5\377\0M9\377\0Q4\377\0RB\377\0EH\377\0;C\377\0@C\377\0>9\377" - "\0KB\377\0@A\377\0\77""9\377\0Q=\377\0C9\377\0GB\377\0G@\377\0@A\377" - "\0\77E\377\0LD\377\0""3N\377\0""6@\377\0\30\0\377U\2\0\377" - "W\0\0\377S\0\0\377N\0\0\377I\14\0\377J\0\0\377S\0\0\377\202B\0\0\377" - "\37P\0\0\377U\0\0\377E\0\0\377\77\10\0\377D\4\0\377M\10\0\3776\4\0\377" - "7\0\0\377E\0\0\377@\1\0\3779\4\0\377E\14\0\3770\5\0\3774\0\0\377#\4\0" - "\377(\1\0\377\31\16\0\377\34\22\0\377\20\36\0\377\27-\0\377#\34\0\377" - "\35!\0\377\0\27\0\377\0%\0\377\0\24\0\377\0\23\0\377\0\17\0\377\21\13" - "\0\377\0\26\0\377\0\20\0\377\3\14\0\377\204\0\0\0\377\1\5\0\0\377\206" - "\0\0\0\377+\0\13\0\377\0\27\0\377\0\17\0\377\0\4\20\377\0\34\14\377\0" - "\30\20\377\0\21\14\377\0\31\14\377\0\24\0\377\0\30\0\377\0\21\2\377\0" - "\24\12\377\0\26\4\377\0#\12\377\0\36\13\377\0\33\11\377\0'\20\377\0<" - "\14\377\0:\16\377\0G\7\377\0H\20\377\0J\22\377\0G\21\377\0D\25\377\0" - "S\0\377\0b\16\377\0i\10\377\0Z\2\377\0Z\14\377\0""9\13\377\0\77\15\377" - "\0""7\21\377\0""3\25\377\0""5\1\377\0""1\0\377\0@\0\377\0""9\0\377\0" - "1\0\377\0\40\5\377\0""4\5\377\0(\3\377\0%\12\377\0#\11\377\202\0#\4\377" - "5\0.\21\377\0+\3\377\0""2\13\377\0/\22\377\0,\37\377\0.\25\377\0C\31" - "\377\0""9\22\377\0""4\11\377\0""5\11\377\0""7\12\377\0>\6\377\0@\10\377" - "\0""7\24\377\0A\25\377\0""3\7\377\0""7\0\377\0@\5\377\0E\5\377\0:\4\377" - "\0C\7\377\0U\0\377\0k\25\377\0\206\31\377\0\247!\377\0\251$\377\0\240" - "\7\377\0\204\16\377\0f\13\377\0V\14\377\0M\34\377\0C\37\377\0>\12\377" - "\0B\16\377\0@\12\377\0""8\14\377\0:\11\377\0""3\5\377\0""9\20\377\0@" - "\22\377\0L\22\377\0O\15\377\0M\16\377\0P\23\377\0a\25\377\0n\16\377\0" - "m\20\377\0o'\377\0l'\377\0m\34\377\0h\35\377F\211V\377\375\375\375\377" - "\203\377\377\377\377\177\374\375\374\377\221\263\235\377\10Z\33\377\0" - "K\26\377\0N\37\377\0B\40\377\0\77\37\377\0""8\"\377\0$\36\377\0\"-\377" - "\0\40\35\377\0&\33\377\0-)\377\0*.\377\0""1#\377\0F.\377\0<4\377\0U(" - "\377\0P!\377\0\\\37\377\0M\30\377\0V&\377\0S#\377\0\\)\377\0M!\377\0" - ">5\377\0D,\377\0I.\377\0>3\377\0;3\377\0""82\377\0@-\377\0EA\377\0PQ" - "\377\0O0\377\0H1\377\0<>\377\0""0\77\377\0ID\377\0FJ\377\0""5Q\377\0" - ">J\377\0""1E\377\0\77D\377\0""83\377\0""7.\377\0""6A\377\0D:\377\0C=" - "\377\0EA\377\0:L\377\0""6E\377\0""2>\377\0""9C\377\0""6G\377\0""2F\377" - "\0+k\377\0\1M\377\0\0""7\377\0\0@\377\230\0L\377\203\0\"\377Z\0\0\377" - "U\0\0\377lH\16\377wW\40\377xS\22\377rc\21\377`_\10\377nh\10\377ga\0\377" - "tY\0\377hI\0\377l5\0\377n6\0\377j'\0\377\200'\0\377x#\0\377s$\0\377m" - "\33\0\377c\24\0\377p\26\0\377l\34\0\377j!\0\377d\36\0\377_'\0\377g'\0" - "\377l1\0\377_'\0\377`2\0\377d4\0\377Z+\0\377h\31\0\377l\37\0\377X\32" - "\0\377b\35\0\377f!\0\377i#\0\377P&\0\377K\33\0\377J\25\0\377W\14\0\377" - "S\6\0\377O\16\0\377E\11\0\377Y\1\0\377k\24\0\377d\31\0\377S\12\0\377" - "]\22\0\377Q\0\0\377U\0\0\377Q\4\0\377N\21\0\377^\0\0\377g\0\0\377_\0" - "\0\377W\0\0\377^\0\0\377X\0\0\377I\0\0\377N\6\0\377W\5\0\377U\5\0\377" - "E\12\0\377=\1\0\377=\15\0\377\32E\4\0\377A\16\0\377<\7\0\377.\0\0\377" - "0\13\0\377/\2\0\377\36\2\0\377\30\2\0\377\5\20\0\377\6\30\0\377\30\25" - "\0\377\17\35\0\377\12\31\0\377\7\33\0\377\11\21\0\377\0\24\0\377\0\35" - "\0\377\0\36\0\377\3\24\0\377\0\15\0\377\0\27\0\377\0\10\0\377\0\2\0\377" - "\0\0\0\377\5\0\0\377\0\7\0\377\206\0\0\0\377\177\0\6\3\377\0\15\7\377" - "\0\27\5\377\0\11\11\377\0\30\16\377\0\26\31\377\0\17\13\377\0\20\6\377" - "\0\24\7\377\0\31\4\377\0\30\6\377\0\34\21\377\0\12\0\377\0\12\3\377\0" - "\"\0\377\0\"\2\377\0\"\14\377\0.\23\377\0:\5\377\0>\7\377\0""6\16\377" - "\0;\34\377\0H\17\377\0Q\20\377\0O\25\377\0Y\11\377\0\\\16\377\0d\21\377" - "\0c\26\377\0U\32\377\0U\37\377\0G\31\377\0""8\21\377\0""1\11\377\0;\20" - "\377\0=\17\377\0""2\1\377\0""6\4\377\0(\0\377\0#\3\377\0$\10\377\0*\24" - "\377\0'\27\377\0\"\17\377\0\40\34\377\0*\32\377\0*\20\377\0-\21\377\0" - "2\2\377\0""1\20\377\0&\20\377\0""4\13\377\0""1\26\377\0""4\36\377\0'" - "\33\377\0)\21\377\0""0\32\377\0B\21\377\0\77\16\377\0/\21\377\0""2\22" - "\377\0""2\5\377\0""3\1\377\0""0\2\377\0""5\7\377\0""8\24\377\0-\12\377" - "\0""7\7\377\0M\10\377\0N\21\377\0v\16\377\0\212\17\377\0\214\36\377\0" - "q\4\377\0i\20\377\0K\32\377\0L\33\377\0C!\377\0C\17\377\0""2\23\377\0" - "4\3\377\0=\14\377\0=\24\377\0:\21\377\0>\0\377\0B\16\377\0M\37\377\0" - "<\20\377\0G\17\377\0Z\12\377\0f\30\377\0}\34\377\0\221!\377\0\221.\377" - "\0\2216\377\0\2170\377\0s1\377\12l,\377\260\317\271\377\320\340\325\377" - "\316\336\321\377\257\305\265\377{\250\221\377\32fA\377\0M,\377\0R2\377" - "\0H,\377\0<3\377\0@\37\377\0<)\377\0""1,\377\0\32""5\377\0\37""0\377" - "\0!8\377\0!%\377\0%+\377\0$'\377\0""52\377\0""40\377\0:3\377\0H(\377" - "\0\\9\377\0K\40\377\0M%\377\0K(\377\0Z!\377\0J$\377d\0G\40\377\0H,\377" - "\0""5)\377\0:0\377\0+/\377\0""14\377\0:G\377\0AL\377\0KE\377\0E@\377" - "\0AA\377\0""7G\377\0""86\377\0@B\377\0:J\377\0""4N\377\0+I\377\0""2B" - "\377\0""1:\377\0""30\377\0/8\377\0""0>\377\0""48\377\0""4:\377\0""3I" - "\377\0;@\377\0""5A\377\0@7\377\0.L\377\0""6D\377\0""1J\377\0""89\377" - "\1/j\377\0\34X\377\0\0\77\377\0\0A\377\216\1E\377t\0+\377^\0\0\377c\0" - "\2\377kP\14\377mG\32\377jY\22\377fP\15\377uW\0\377h\\\10\377|^\0\377" - "{L\0\377nD\0\377{3\0\377t:\0\377u\77\0\377y'\0\377w#\0\377i\25\0\377" - "m\32\0\377o\6\0\377_\5\0\377g\37\0\377m)\0\377a\34\0\377s!\0\377b&\0" - "\377e&\0\377Z+\0\377j\40\0\377c$\0\377g\32\0\377j\27\0\377[\37\0\377" - "`\33\0\377i\32\0\377^$\0\377[\31\0\377T%\0\377]\36\0\377X\23\0\377F\30" - "\0\377I\3\0\377R\1\0\377`\3\0\377\\\10\0\377^\20\0\377W\15\0\377`\12" - "\0\377Y\7\0\377e\1\0\377`\0\0\377~\24\5\377\246(W\377\2569R\377\2470" - "F\377\2302>\377l\20\0\377R\0\0\377\215\34(\377\230@Q\377\242AV\377\231" - "@K\377\2256\377\0""1+\377\0@\"\377\0B\40\377\0=,\377\0""8" - "-\377\0D.\377\0<\37\377\0D'\377\0@\37\377y\0""9/\377\0>0\377\0""5+\377" - "\0""72\377\0""04\377\0.6\377\0""6>\377\0<@\377\0DF\377\0OG\377\0=>\377" - "\0B4\377\0""4H\377\0+<\377\0-F\377\0'G\377\0+3\377\0)7\377\0""7:\377" - "\0""1\77\377\0""33\377\0/7\377\0'C\377\0.=\377\0*6\377\0B5\377\0F6\377" - "\0""2F\377\0""7K\377\0""8^\377\0FL\377\0AF\377\17""4k\377\0\21L\377\0" - "\0""2\377\0\0D\377\232\16:\377\202\0!\377e\0\2\377X\0\0\377s\77\15\377" - "rM\16\377pH\10\377lN\1\377p^\0\377yR\0\377~^\2\377vQ\0\377\177N\0\377" - "\177D\0\377~E\0\377\207\77\0\377w*\0\377s'\0\377i!\0\377t\34\0\377b\22" - "\0\377j\21\0\377p\34\0\377j\35\0\377l\32\0\377t\35\0\377[\33\0\377j(" - "\0\377m\"\0\377_%\0\377j\"\0\377m%\0\377^*\0\377f$\0\377j)\0\377c%\0" - "\377c*\0\377_\"\0\377`%\0\377V\21\0\377S\23\0\377e\6\0\377S\15\0\377" - "`\26\0\377j\34\0\377`\7\0\377_\6\0\377c\5\0\377_\3\0\377\\\10\0\377^" - "\7\0\377\200\36\3\377\260Ng\377\217/\32\377\216+\26\377\214-\40\377\205" - "0$\377e\3\0\377x%\3\377\253E}\377z3(\377y0,\377t7)\377{3B\377=\17\0\377" - "8\0\0\377\77\0\0\377F\0\0\377\\\21\0\377\232P\225\377z6>\377d0\"\377" - "c@,\377{Ys\377.#\0\377\32\32\0\3777;%\377zi\237\377\14\31\0\377\6\24" - "\0\377\10\13\0\377\3\12\0\377\3\2\0\377\4\13\0\377\1\0\0\377\203\0\0" - "\0\377\1\0\15\0\377\202\0\0\0\377\3\0\11\0\377\30.D\377\0\0\20\377\204" - "\0\0\0\377\177\0\16\0\377\0\7\10\377\0\21\13\377\0\10\20\377\0\33\12" - "\377\0\15\10\377\0*9\377\27Z\262\377\10N\203\377\0Fu\377\0!\33\377\0" - "\15\0\377\0\31\26\377\0\"\27\377\0\33\36\377\0\32\35\377\0\25\20\377" - "\0$\27\377\0&\33\377\0""1\"\377\0""7,\377\0B\35\377\0='\377\0.\30\377" - "\0""3\35\377\0QW\377\10\211\362\377\0u\244\377\0c\206\377\0d\222\377" - "\0\216\327\377\0gY\377\0RU\377\10y\333\377\0i\242\377\0X\234\377\0c\214" - "\377\0g\204\377\0""8(\377\0He\377\34m\317\377\0Jg\377\0Rv\377\0U\225" - "\377\7q\271\377\0)\13\377\0)\32\377\0(\27\377\0\26\32\377\0:W\3770x\361" - "\377\0X\214\377\0Tv\377\0Qt\377\0*G\377\0\"\26\377\0'\25\377\0)\24\377" - "\0'\30\377\0-\20\377\0$\14\377\0*\25\377\0/\22\377\0,\11\377\0#\25\377" - "\0\37\5\377\0#\7\377\0""3\22\377\0B\2\377\0K\15\377\0V\27\377\0^\33\377" - "D\213\334\377\27|x\377\0L\30\377\0I\"\377\0""6\15\377\0:\15\377\0""4" - "\20\377\0'\25\377\0""5\23\377\32hz\377V\235\342\377\0:\23\377\0;\21\377" - "\0""9\36\377\0""8\"\377\0>%\377\0J\35\377\0R\34\377\0d\27\377\0r!\377" - "\0\207#\377\0\237%\377\11\2709\377\3\253<\377\0\230;\377\0\2129\377\0" - "l2\377\0_\25\377\0Q\24\377\0T\32\377\0F\34\377\0T\34\377\0D(\377\0E1" - "\377\0=)\377\0>%\377\0:(\377\0*+\377\0-.\377\0(*\377\0\37\"\377\0&%\377" - "\0,\34\377\0\36&\377\0*%\377\0&/\377\0&!\377\0-#\377\0\77!\377\0""1)" - "\377\0""5#\377\0""70\377\0""8*\377\0))\377\0""5!\377\177\0""7)\377\0" - ",%\377\0""11\377\0""5#\377\0\40'\377\0/2\377\0;9\377\0\377\0" - "%H\377\0)8\377\0\37""9\377\0(=\377\0*A\377\0/\77\377\0)7\377\0)A\377" - "\0.9\377\0""5>\377\0""8B\377\0\77E\377\0MI\377\0]L\377\0SH\377\0IM\377" - "\16)o\377\0\13O\377\0\0/\377\0\0""3\377\223\11""7\377v\0\34\377\\\0\0" - "\377J\0\0\377h1\1\377j4\5\377\\:\0\377ZF\0\377\\M\0\377[W\1\377pN\0\377" - "qU\0\377|V\0\377\203Q\0\377\204Q\0\377{A\0\377\2027\0\377\1771\0\377" - "v#\0\377t\32\0\377e\21\0\377k\21\0\377w\30\0\377s\36\0\377x\32\0\377" - "k&\0\377j\27\0\377c%\0\377d-\0\377e'\0\377a0\0\377u6\0\377j;\0\377i<" - "\0\377i,\0\377`-\0\377e.\0\377Y\26\0\377a\36\0\377\\\33\0\377c\22\0\377" - "b\31\0\377Y\14\0\377a\33\0\377V\24\0\377S\12\0\377_\1\0\377W\5\0\377" - "K\13\0\377T\3\0\377\\\30\0\377\243Ib\377\23389\377Y\15\0\377S\27\0\377" - "V\26\0\377E\15\0\377N\2\0\377{'$\377\277O\213\377I\0\0\377C\2\0\377A" - "\10\0\377F\0\0\3777\0\0\377:\0\0\377\77\10\0\377;\10\0\377J'\17\377\231" - "k\233\377\77&\0\3770\24\0\3770\31\0\377\223o\232\377F,\0\377\23\27\0" - "\377K\77\77\377\212f\246\377\20\7\0\377A6.\377\"\30\0\377\0\0\0\377(" - ")\17\377\37\27\"\377\3\0\0\377\6\15\0\377(0<\377+,G\377\26""4A\377\20" - "&)\377\177\0\3\0\377\0\20\0\377\21/G\377\0\13\7\377\0\22\34\377\16/T" - "\377\33""7O\377\26:N\377\0\36#\377\0\11\0\377\0\21\0\377\0\11\22\377" - "\0\15\7\377\0\11\0\377\14N\213\3778q\345\377\6K\217\377\0\37\7\377\0" - "&\0\377\1Mr\377\7O\201\377\0D\200\377\5L\202\377\0\35\37\377\0#\30\377" - "\0Ii\377\0Mn\377\0c\226\377\0e\221\377\0@H\377\0""93\377\0""44\377\0" - "./\377\0JP\377\32\216\364\377\0Md\377\0""9,\377\0""1%\377$\215\372\377" - "\0^i\377\0[p\377\33\225\376\377\0Tg\377\0=6\377\0""5\37\377\0""4\27\377" - "\0""1\23\377\0;R\377\0It\377\0\33\13\377\0\35\36\377\0""7M\377%|\364" - "\377\0\37#\377\0\34\23\377\0\26#\377\0\36\22\377\0:X\377Cw\347\377\0" - "%H\377\0\24\7\377\0\27\20\377\0\32\12\377\0\40""1\377\17Gx\377\14Y\201" - "\377\1S\202\377\0I[\377\5Uw\377\12f\204\377\2o\177\377\0""0\0\377\0)" - "\11\377\0HU\377\0OP\377\0(\22\377\0<<\377\31d\202\377\0""2\11\377\0:" - "\26\377I\224\336\377\11t\203\377\0Q\25\377\0TR\377\15\\x\377\20k\202" - "\377\0Pl\377\0,\23\377\0<,\3779\213\261\377J\233\340\377\1Sc\377\0""4" - "\36\377\0H6\377(o\215\377\37m\217\377!k\221\377\30sy\377\0m!\377\3\202" - "B\377,\233\204\377\37\245p\3776\265\231\377(\246\206\377\0\235F\377\5" - "\203A\377\26\211\213\377\26\210w\377\35w\211\377\0G)\377\0P(\377\0G+" - "\377\0C\36\377\0""5#\377\0;\36\377\0D+\377\0-\36\377\0\40\35\377\0\37" - "(\377\0\32\35\377\0&\21\377\0,\25\377\0\40\35\377\0\33$\377\0$0\377\0" - "%'\377\0/%\377m\0""2\35\377\0""3\34\377\0""0)\377\0""02\377\0""10\377" - "\0,%\377\0""5'\377\0$)\377\0)1\377\0'!\377\0$)\377\0-,\377\0(.\377\0" - "&5\377\0""8\77\377\0""8F\377\0>D\377\0""4G\377\0>\77\377\0.:\377\0!=" - "\377\0,J\377\0#:\377\0%@\377\0#>\377\0\31;\377\0\"R\377\0+\77\377\0&" - "8\377\0&;\377\0""3@\377\0&D\377\0!9\377\0/7\377\0""3E\377\0""0F\377\0" - "BL\377\0[L\377\0[O\377\0[X\377\0SK\377\0+u\377\0\4Q\377\0\0.\377\0\0" - "8\377\215\2""7\377[\0\25\377M\0\1\377I\0\0\377V-\6\377T%\0\377K/\0\377" - "]:\0\377S\77\0\377aC\0\377gO\0\377eX\0\377tQ\0\377|f\0\377\200T\0\377" - "~W\0\377\205V\0\377\206M\0\377u/\0\377l\40\0\377n\36\0\377v\22\0\377" - "\203\23\0\377\200\22\0\377m\17\0\377j\36\0\377g\40\0\377g\36\0\377h)" - "\0\377Z,\0\377c3\0\377fL\0\377m7\0\377gD\0\377f>\0\377Z/\0\377^;\0\377" - "X)\0\377\\$\0\377H\37\0\377S(\0\377L\25\0\377Q\31\0\377N\20\0\377P\11" - "\0\377A\14\0\377@\26\0\377.\12\0\377:\21\0\377<\34\0\377b+\0\377\301" - "b\224\377l&\0\377\77\23\0\377K\37\0\377=\35\0\377\77\15\0\377A\1\0\377" - "x31\377\270Z\234\3777\25\0\377G\11\0\3770\15\0\3772\11\0\377\2020\0\0" - "\377\177.\11\0\377(\24\0\377H&\17\377\251c\267\377P\37\22\377$\13\0\377" - ")\7\0\377\227p\270\3772\40\2\377\37\0\0\377S0J\377\215j\247\377\12\6" - "\0\377\177c\235\377G.-\377\2\2\0\377bF{\377WXz\377\2\0\0\377G@`\377X" - "b\221\377GZ~\377Qq\251\377;N\205\377\0\0\0\377\0%\26\377Wo\251\377\0" - "\32\11\377%.H\377\\y\267\377%Ps\377(W\224\377\36Z\200\377\0\30\12\377" - "\0\32\0\377\0\17\0\377\0\25\3\377\0\13\15\377,p\304\377C\177\336\377" - ",k\270\377\0\30\10\377\2""2M\377=}\324\377\35^\264\377\36`\265\377/v" - "\321\377\0>n\377\0\37\37\377\24c\314\377\37|\336\377\33\203\353\377\12" - "\177\310\377\0DT\377\0<0\377\0""9$\377\0""2(\377\0Bc\377+\226\376\377" - "\0\77g\377\0""3=\377\0""1$\3776\226\377\377\0Ee\377\0Wo\3777\225\377" - "\377\0Mf\377\0)&\377\0-\36\377\0*\26\377\0(\22\377\0.\34\377\0!\36\377" - "\0\35\"\377\0!=\377\22[\233\377(q\326\377\0\36!\377\0\12!\377\0\4!\377" - "\0\24\25\377\0""6S\377D\177\343\377\0.B\377\0\26\32\377\0\21\21\377\0" - "\20\11\377\0(M\377J\204\346\3775u\274\377,j\245\377=\177\303\3778\216" - "\312\3772\206\245\3779\212\274\377\24Zs\377\0\30\16\3777{\255\377G|\265" - "\377\0\23\31\377\35Tj\377\\\224\334\377\0\37\31\377\0""1\35\377V\222" - "\366\377!c\207\377\0""9\22\377\3OU\377-}\260\377.}\266\377N\211\320\377" - "\0CO\377\0""7@\377H\210\311\377R\227\375\377\35v\233\377\0,#\377,y\256" - "\377Y\214\342\377H\205\274\377B\207\260\377K\222\313\377\27i_\377!}_" - "\377c\246\346\377h\247\326\377U\260\306\377\177>\256\240\377\0\222#\377" - "E\223\243\377Z\236\323\377N\227\272\377Q\215\267\377\0J(\377\0<%\377" - "\0;(\377\0""0$\377\0-\31\377\0+\21\377\0!\32\377\0+%\377\0*\32\377\0" - "%\36\377\0\32.\377\0\40$\377\0\25*\377\0\6&\377\0\11,\377\0#!\377\0\31" - "4\377\0$+\377\0""2#\377\0-'\377\0/-\377\0--\377\0/,\377\0\"'\377\0,\30" - "\377\0\33$\377\0\40\36\377\0\36+\377\0#-\377\0\35""1\377\0.#\377\0\40" - "<\377\0,@\377\0,=\377\0;>\377\0>=\377\0:1\377\0)'\377\0+D\377\0+6\377" - "\0\26""6\377\0\26@\377\0\"\77\377\0""2:\377\0""3\77\377\0&\77\377\0""7" - "2\377\0""3\77\377\0""1G\377\0\40@\377\0""9M\377\0+<\377\0-;\377\0""8" - "\77\377\0FC\377\0ZK\377\0VN\377\0kJ\377\0kN\377\17'q\377\0\0X\377\0\0" - "@\377\0\0""7\377\177\4""2\377g\0\20\377E\0\0\377\77\0\0\377Q(\0\377K" - "9\0\377Q6\0\377L7\0\377U9\0\377YF\0\377L\77\0\377TT\0\377kL\0\377pV\0" - "\377od\0\377\200]\0\377il\0\377sX\0\377sJ\0\377h4\0\377p7\0\377n\"\0" - "\377k\16\0\377c\33\0\377m!\0\377e&\0\377`+\0\377\\7\0\377_/\0\377Y(\0" - "\377]<\0\377mA\0\377_4\0\377SB\0\377]I\0\377X\77\0\377_6\0\377Q8\0\377" - "C)\0\377E3\0\377A%\0\377D\34\0\377F\33\0\377=\30\0\377,\24\0\377)%\0" - "\377-\25\0\377,\32\0\377-\37\0\3774\37\0\377T%\0\377\261t\231\377P%\0" - "\377I,\0\377U\"\5\377a/\2\377U\77\0\377@\25\0\377\177n7\25\377\253y\232" - "\377V0\0\377T*\0\377U\40\26\3777\22\0\377A\5\0\3776\11\0\3772\14\0\377" - "4\11\0\377T%\21\377\250p\272\377_0=\377E\33\23\3776\16\30\377\211`\231" - "\377(\22\15\377\32\6\0\377U\77M\377\226x\250\377\23\23\0\377\232u\252" - "\377A@B\377\1\3\0\377hV|\377lV|\377\0\0\0\377\201w\260\377:\77C\377\0" - "\7\0\377Bm\212\377Ecv\377\0\4\0\377\0\"\7\377oz\254\377\0,\12\377\22" - "D@\377Xv\275\377\0\21\0\377\0,\15\377T}\260\377\0""3\"\377\0\40\0\377" - "\0\25\10\377\0\24\5\377\0\26\0\377\0F/\377V\213\333\377\0""0\77\377\0" - "\15\13\377(p\251\377,a\252\377\0\15\3\377\0\20\17\377\16F\200\377)k\316" - "\377\0\27\36\377\32s\306\3774\206\367\377\0L\201\377\0+/\377\0-<\377" - "\0""16\377\0')\377\0&,\377\0Dn\3779\231\377\377\0f\222\377\0Mr\377\0" - "Rs\3777\215\377\377\0\77g\377\0GZ\377+\231\362\377\4_\205\377\0\77k\377" - "\0L\\\377\0""9\77\377\0\34\27\377\0*\22\377\0!!\377\0\33\37\377\5Q\205" - "\3776t\334\377\0\26G\377\0\7\37\377\0\16)\377\0\14\36\377\0\11\40\377" - "\0""2C\377Z\204\350\377\6Kl\377\0-M\377\0\"8\377\0\21\30\377\0\"B\377" - "Y\211\371\377\0*F\377\0\23\17\377V\212\351\377\20Hy\377\0\22\27\377\24" - "Qx\377f\233\352\377\0\30\30\377Tu\261\377Sy\265\377\0\23\7\377'_~\377" - "o\227\350\377\0!\27\377\0)\35\377q\213\350\3772f\211\377\0,\37\377\0" - "\"\22\377\0\40\37\377\0\32\35\377[\244\370\377\25`\222\377\0$\"\377\35" - "i\222\377m\243\370\377\0$\40\377\0,(\377r\254\376\377\37k\205\377m\0" - "-\25\377\0""2&\377U\203\301\3777b\212\377\22be\377z\227\356\377c\243" - "\310\377\3\244(\377\0\230/\377\2}'\377\201\246\364\377;\177\223\377\0" - "A\33\377\2D#\377\0""3\36\377\0'\27\377\0*\6\377\0(\11\377\0&\35\377\0" - "\35\36\377\0.\37\377\0*&\377\0&<\377\0)<\377\0'/\377\0\25""1\377\0\22" - ")\377\0\21,\377\0\22,\377\0!.\377\0%7\377\0)0\377\0""17\377\0%7\377\0" - "32\377\0+#\377\0-*\377\0""1)\377\0%:\377\0(%\377\0#'\377\0.\"\377\0(" - "$\377\0\34.\377\0#%\377\0""1*\377\0(5\377\1-7\377\0""3K\377\0""0C\377" - "\0""10\377\0\40:\377\0!/\377\0'=\377\0\30:\377\0'4\377\0+3\377\0""1:" - "\377\0""3B\377\0\"@\377\0""0=\377\0+N\377\0-G\377\0-C\377\0""7C\377\0" - "(G\377\0$G\377\0(O\377\0;J\377\0=H\377\0PT\377\0]\\\377\0k[\377\23\14" - "}\377\0\0f\377\0\0=\377\0\0H\377\203\2""0\377e\0\26\377>\0\0\3777\0\0" - "\377A!\0\377@.\0\377B4\0\377M7\0\377L8\0\377PB\0\377RB\0\377];\0\377" - "OS\0\377ZW\0\377Zl\0\377es\0\377ag\0\377`g\0\377dT\0\377^J\0\377eG\0" - "\377YA\0\377T5\0\377Z$\0\377d5\0\377d+\0\377e6\0\377\\/\0\377Q,\0\377" - "Y)\0\377]1\0\377\\/\0\377\202O:\0\377\177S-\0\377V8\0\377S,\0\377J<\0" - "\377K4\0\377M8\0\377F+\0\377E(\0\3773\"\0\3770#\0\377,%\0\377.*\0\377" - "\35\40\0\377\40/\0\377'\33\0\3772\27\0\377R7\0\377\262m\240\377U+\2\377" - "\245\\i\377\302\204\255\377\306\200\250\377\305u\236\377_+\0\377;\25" - "\0\377\232ou\377\273y\260\377\320\177\266\377\305s\251\377{O>\3775\30" - "\0\3775\16\0\377,\10\0\377%\26\0\377E/\22\377\265j\273\377\254n\265\377" - "\251v\270\377\246p\254\377RFS\377\30\15\0\377&\27\0\377XQ6\377\233{\246" - "\377\3\4\0\377\220\205\261\377=F;\377\0\7\0\377wgt\377r]q\377\0\21\0" - "\377\214\177\266\377@DE\377\0\10\0\377eq\201\377]f\177\377\0\1\0\377" - "\12""0\21\377j\221\262\377\0;\10\377\33N<\377s\215\264\377\0\30\0\377" - "\0G\27\377p\226\301\377\0>\34\377\0$\0\377\0\35\0\377\0\33\0\377\0!\0" - "\377\0B0\377o\206\332\377\0""7=\377\0\"\0\377/u\267\3777`\275\377\0\1" - "\20\377\0\7\24\377\7G\213\377\37[\303\377\0\20(\377)p\317\377+f\313\377" - "\0\36/\377\0),\377\0)4\377\0-6\377\0%,\377\0""12\377\0Pz\377^\244\377" - "\377M\253\377\377O\253\377\377N\264\377\377\13p\264\377\0""6=\377\0""0" - "(\377\22q\221\377[\260\377\377^\240\377\377X\231\377\377\"s\270\377\0" - "+2\377\0!\34\377\0\36\36\377\0""2J\377i\215\377\377\32P\220\377\0\13" - "\34\377\0\17\32\377\0\16\27\377\0\12\20\377\0\12\31\377\0""3W\377j\201" - "\371\377m\214\363\377o\177\371\377Hk\277\377\0\12\7\377\0\35G\377h\215" - "\356\377\0#H\377\0\6\15\377n\212\342\377\25Q\210\377\0\16\15\377*J\206" - "\377g~\232\354\377\0\15\13\377Or\266\377Gt\267\377\0\22\34\3772c\215" - "\377w\243\370\377\0$\40\377\0**\377x\235\366\377.v\210\377\0%\26\377" - "\0""8*\377\6HY\377\5@I\377}\264\374\377(p\212\377\0-\37\377\"l\211\377" - "\177\264\377\377\0'\37\377\0&\40\377s\250\347\3776b\201\377\0\37'\377" - "\0\34.\377Y\211\307\377\377\0""62\377\0" - ":8\377\0""8/\377\0C9\377\0A)\377\0""68\377\0""5<\377\0""36\377\0/@\377" - "\0.8\377\0#1\377\0""1@\377\0\34>\377\3\32G\377\0&R\377\0$I\377\0/8\377" - "\12\40A\377\0,I\377\0\40A\377\0\37C\377\0\"F\377\0\22<\377\0\34B\377" - "\0\36S\377\0\27N\377\0\27F\377\0#F\377\0/H\377\0+S\377\0%R\377\0\36M" - "\377\0+G\377\0\36;\377\0\30K\377\0&W\377\0""4W\377\0J\\\377\0`d\377\0" - "hZ\377\36\13~\377\10\0^\377\0\0L\377\0\0K\377\207\0\35\377j\0\0\377\202" - "<\0\0\377\177T1\0\377O+\0\377F<\0\377D@\0\377G8\0\377E>\0\377G\77\0\377" - "\77@\0\377RJ\0\377VG\0\377Qg\0\377Wl\0\377ep\0\377`x\0\377Vn\0\377]j" - "\0\377^Z\0\377`J\0\377dC\0\377X8\0\377Z:\0\377V>\0\377P\77\0\377Y;\0" - "\377U>\0\377T@\0\377D6\0\377A/\0\377IA\0\377[;\0\377J8\0\377I-\0\377" - "H\77\0\377\77A\0\377SA\0\377WA\0\377>8\0\377:/\0\3773.\0\377E-\0\377" - "@$\0\3777\34\0\377\32&\0\377\36.\0\377*\40\0\377*#\0\377L6\0\377\304" - "\200\225\377E>\1\377\37!\0\377/\30\0\377J3\3\377\306y\257\377P-\11\377" - "#!\0\377\26\"\0\377'#\0\377+$\0\377T2\13\377\331\206\270\3777\27\0\377" - "\"\26\0\377*\31\0\377'\11\0\377Y1\1\377\277\203\265\377B/\15\377\20\14" - "\0\377\13\16\0\377\13\33\0\377\20\24\0\377\14\30\0\377LV5\377\230}\243" - "\377\0\22\0\377\252\215\256\377DX9\377\0\33\0\377uqw\377zkl\377\0\7\0" - "\377\252\203\246\377MH:\377\0\7\0\377ckt\377`p\177\377\0\1\0\377\5+\1" - "\377}\234\276\377\0""6\34\377#YF\377\212\237\271\377\0\32\0\377\1""6" - "*\377z\226\312\377\3N\"\377\0""7\0\377\0'\0\377\0/\0\377\0&\3\377\26" - "90\377x\241\347\377\0@A\377\0\20\12\377>h\275\377Ie\273\377\0\3%\377" - "\0\2\32\377\5A\210\377*n\300\377\0\5&\377:h\326\377;f\315\377\0\20\40" - "\377\0#+\377\0\34""0\377\0*.\377\0+,\377\0$<\377\0Hr\377t\241\377\377" - "\0Ug\377\0""00\377\0()\377\0/3\377\0*2\377\0.-\377\177\0.'\377\0!,\377" - "\0\30(\377\0\26""3\377u\227\377\377\0""6b\377\0\22)\377\0\7&\377^|\311" - "\377-M\225\377\0\24\35\377\0\5\32\377\0\7\"\377\0\0\40\377\0\3$\377\0" - "\17(\377\11*X\377\203\220\375\377\14$Q\377\0\3\35\377\0\14\21\377\0\15" - "\31\377\24-K\377y\207\355\377\2(G\377\0\0\31\377v\214\377\3777D\206\377" - "\0\5\24\377/O\211\377|\223\367\377\0\0\26\377So\310\377Qz\276\377\0\14" - "\"\3770h\214\377\200\244\377\377\0-\33\377\0.*\377y\252\377\377'j\224" - "\377\0""8\32\3770g\226\377\205\266\377\377\227\261\377\377\222\260\376" - "\3773i\205\377\0\36\34\377>k\217\377}\256\366\377\0+\27\377\0.\27\377" - "\210\256\352\377D\\\211\377\0!\30\377\0\13\"\377bn\274\377JK\221\377" - "$Te\377\225\244\373\377%xu\377\13\2137\377\13\2000\377\34l-\377<`X\377" - "\244\237\377\377\247\256\374\377\1""9#\377\0""4\26\377\0+\17\377\2\36" - "\23\377\7(\34\377\0\35\35\377\0\32\"\377\0""6\34\377\0C)\377\0""34\377" - "\0C\377\0D=\377\0+0\377\0*7\377\0\36\35\377\0#(\377\0).\377" - "\0""3*\377\0+:\377\0A<\377\0I6\377\0M\77\377\0Q:\377\0QA\377\0AG\377" - "\0""9B\377\0'7\377\0\37;\377\0\26""6\377\0\17\77\377\0\37""9\377\0\33" - "=\377\0\36P\377\0!A\377\1""1<\377\6%E\377\22#K\377\22/J\377\10\27M\377" - "\4\30I\377\0\24G\377\0\37\77\377\0\25B\377\0\32P\377\0\17G\377\0\27N" - "\377\0!J\377\4\36W\377\0(J\377\0\35M\377\0\31M\377\0\27>\377\0\24D\377" - "\0\16U\377\0\24W\377\0""1P\377\0""9R\377\0P_\377\0fV\377\177\23\0\207" - "\377\0\0a\377\0\0C\377\0\0""9\377\205\0#\377j\0\2\377P\0\0\377G\0\0\377" - "M.\0\377K*\0\377Q>\0\377O6\0\377S<\0\377H:\0\377\\I\0\377X\77\0\377O" - "H\0\377JJ\0\377TR\0\377`[\0\377RR\0\377`W\0\377`Y\0\377Mi\0\377Yd\0\377" - "SR\0\377QD\0\377\\O\0\377GH\0\377JO\0\377FB\0\377G;\0\377>3\0\377C:\0" - "\3777A\0\3775=\0\377F>\0\377L7\0\377='\0\3779/\0\377F/\0\377H/\0\377" - "I4\0\377;-\0\377>+\0\377B.\0\377;.\0\377;0\0\3772!\0\3770\32\0\377'%" - "\0\377!2\0\377!\31\0\377&\37\0\377S=\0\377\313\240\241\377\77@\0\377" - "!%\0\377\"&\0\377K4\0\377\313\234\246\377DI\0\377!)\0\377\40&\0\377\33" - "\27\0\377\36\24\0\377Z6\14\377\340\222\264\377+&\0\377.\23\0\377!!\0" - "\377\36%\0\3778/\0\377\275\221\260\37720\14\377\6\36\0\377\0\37\0\377" - "\5\32\0\377\21\40\0\377\0\27\0\377]N-\377\245\224\246\377\1\21\0\377" - "\241\224\260\377P[<\377\1\23\0\377\205ss\377tyi\377\0\32\0\377\236\225" - "\261\377T^2\377\0\33\0\377us|\377hx~\377\0\25\0\377\31""0\27\377\226" - "\245\312\377\15,\32\3775[O\377\202\242\311\377\0\30\0\377\13B\25\377" - "\220\253\315\377\22H&\377\0(\0\377\0'\0\377\0\32\0\377\0&\0\377\12@+" - "\377z\222\334\377\0+.\377\0\23\4\377Kl\260\3775j\262\377\0\6\12\377\0" - "\5\14\377\16@\212\3779c\320\377\0\0\37\377;m\300\377\77f\272\377\0\21" - "\35\377\0\35\"\377\0\36\40\377\0\36\25\377\0!\40\377\0\31!\377\177\0" - "7e\377~\250\377\377\3Gl\377\0%,\377\0""0+\377\0'#\377\0\34/\377\0'\34" - "\377\0'+\377\0).\377\0\36""6\377\0\13'\377\200\226\377\377\0""0b\377" - "\0\7\35\377Xt\310\377]w\304\377\0\14$\377\0\7\34\377\0\10\27\377\0\0" - "\27\377\0\0/\377\0\10$\377\0\0\34\377\16,\\\377\226\235\361\377\16$I" - "\377\0\23\22\377\0\11\20\377\0\25\16\377\16""9E\377\220\213\352\377\21" - "-L\377\0\12\3\377\215\224\362\377@F\203\377\0\0\1\377AH\220\377\221\222" - "\375\377\0\5\27\377g\204\314\377l{\313\377\0\12\37\377/\\\224\377\217" - "\245\377\377\0'1\377\0""06\377\221\270\377\377:o\223\377\36U[\377\230" - "\257\375\377\33Be\377\0-.\377\243\277\377\377Hi\217\377\0(\40\377:^\236" - "\377\237\267\377\377\0""5!\377\0(\30\377\231\266\377\377FZ\231\377\0" - "\33,\377\0\17%\377rz\323\377A_\234\377+S[\377\260\260\374\377:yc\377" - "\35u0\377\27\1770\377\33m0\377\14W&\377\1P\20\377Lj\221\377\241\257\377" - "\377\0,\36\377\0*\"\377\0\33\37\377\0\34#\377\0-*\377\0#1\377\0""50\377" - "\0)4\377\0\77""0\377\0D:\377\0A;\377\0<>\377\0<=\377\0/8\377\0""46\377" - "\0&2\377\0\27""5\377\0\37""3\377\0#9\377\0)8\377\0-D\377\0<=\377\0""9" - "D\377\0""9H\377\0>Q\377\0-G\377\2+:\377\2\30@\377\0\36@\377\0\30""2\377" - "\0\32/\377\0\37D\377\0\37B\377\10%8\377\1#\77\377\11':\377\4.A\377\11" - "\36F\377\20(=\377\7\34D\377\21\35=\377\12\27""9\377\5\22@\377\6\17Q\377" - "\0\23W\377\0\15O\377\6\37C\377\5\36O\377\0\13C\377\0\27C\377\0\15B\377" - "r\0\26P\377\0\17V\377\0\31K\377\0\26H\377\0-F\377\0""7H\377\0""8\\\377" - "\0KT\377\26\10\201\377\0\0c\377\0\0I\377\0\0E\377\217\11'\377i\0\6\377" - "P\0\0\377L\0\0\377^\77\0\377[4\0\377KD\0\377]J\0\377PD\0\377IL\0\377" - "IB\0\377HK\0\377JH\0\377RJ\0\377PW\0\377VW\0\377eN\0\377ZT\0\377SR\0" - "\377Lo\0\377Rc\0\377P\\\0\377HZ\0\377SX\0\377U\\\0\377KQ\0\377L@\0\377" - "\77""9\0\377=6\0\377;,\0\377D8\0\377@D\0\377B6\0\3776!\0\377:*\0\377" - "88\0\377L/\0\3775+\0\3773%\0\3774-\0\377=2\0\377I=\0\377I>\0\377<7\0" - "\377B0\0\3779)\0\3773&\0\37776\0\377&%\0\377(\35\0\3775=\0\377\236}X" - "\377\330\254\255\377\24\"\0\377\33)\0\377JO\0\377\327\250\260\377MP\0" - "\377\30\27\0\377%\34\0\377\"\21\0\377\37\24\0\377bD\10\377\346\227\303" - "\377+\26\0\377\17!\0\377%\40\0\377\16*\0\377@=\2\377\315\242\266\377" - "1V\20\377\0'\0\377\0\36\0\377\1!\0\377\0\"\0\377\0\27\0\377Xj(\377\303" - "\246\250\377\0\36\0\377\260\256\234\377Xc@\377\1!\0\377\211\217m\377" - "\207{\177\377\0\32\0\377\250\263\300\377T_K\377\0\37\0\377~\200\206\377" - "\200\231\205\377\0\36\0\377(<\21\377\243\254\300\377\17""1\27\377G`O" - "\377\226\245\311\377\0!\0\377\20""6\"\377\231\256\317\377\24\77\27\377" - "\0""0\0\377\0\40\0\377\202\0&\0\377\177\13C%\377\216\226\337\377\14/" - "7\377\0\12\0\377Xl\255\377Lx\273\377\0\20\1\377\0\21\12\377\40W}\377" - "Jq\302\377\0\10\24\377Lo\310\377Hp\307\377\0\3\34\377\0\20\25\377\0\26" - "\31\377\0-\20\377\0(\"\377\0\34\32\377\16L\\\377\231\244\377\377\0Sh" - "\377\0-0\377\0""5-\377\0""03\377\0\34%\377\0\"\"\377\0*\31\377\0(#\377" - "\0%5\377\0$0\377\226\252\377\377\0""0T\377-U\214\377\213\244\377\377" - "\0(R\377\0\12\32\377\0\5\26\377\0\3\32\377\0\0\36\377\0\3\22\377\0\5" - "\24\377\0\2\32\377\33%Q\377\252\221\377\377\40/K\377\0\1\15\377\0\3\17" - "\377\0\0\4\377\31.E\377\237\231\346\377\15.G\377\0\27\2\377\251\224\356" - "\377K`\205\377\0\20\22\3778F\201\377\225\223\361\377\0\0\22\377yx\324" - "\377i|\302\377\0\12\26\377<_\201\377\234\266\375\377\0&$\377\0*/\377" - "\231\257\377\377Cz\233\377\35LT\377\241\270\377\377\33\77g\377\0\33\34" - "\377\234\277\377\377Nm\217\377\0\33,\377Ll\227\377\251\265\377\377\0" - "0(\377\0\26""0\377\244\272\377\377Mi\223\377\0\21""3\377\0\31(\377w\207" - "\317\377Qf\243\377&6Y\377\271\252\377\3776tV\377\25e/\377&a;\377\33h" - "+\377\16T(\377\16Q#\377b\206\230\377\251\277\377\377\0'6\377\0$3\377" - "\0#2\377\0)8\377\0.,\377\0-&\377\0D-\377\0""37\377\0;4\377\0M6\377\0" - "QE\377\0LA\377\0D>\377\0\77.\377\0-5\377\0\36""6\377\0#0\377\0\37=\377" - "\0*;\377\0/B\377\0\36""5\377\0/D\377\0""5=\377\0\377\3\36D\377\11\35;\377\177\15" - "\31B\377\0%3\377\1.D\377\15\35G\377\16'\77\377\12%>\377\24\36""7\377" - "\23!<\377\17\33""8\377\14\36C\377\16\26X\377\14\23e\377\12\25[\377\13" - "\23X\377\23\32[\377\3\22H\377\15\11H\377\7\16L\377\0\3Z\377\0\7a\377" - "\0\0[\377\0\17U\377\0\20Z\377\0\32V\377\0+Z\377\0.S\377\0:J\377\36\12" - "\203\377\0\0i\377\0\0Z\377\0\0W\377\220\2!\377u\0\0\377W\0\0\377Y\0\0" - "\377M2\0\377W=\0\377ZI\0\377iH\0\377LH\0\377GF\0\377JH\0\377M=\0\377" - "VC\0\377]=\0\377\\J\0\377\\F\0\377UC\0\377\\H\0\377RN\0\377AT\0\377@" - "b\0\377Ab\0\377PN\0\377NX\0\377HP\0\377\77R\0\377LN\0\377M9\0\377B0\0" - "\377=\77\0\377D7\0\377K;\0\377B4\0\377;5\0\377@/\0\377G4\0\377:1\0\377" - ":*\0\3778#\0\377-$\0\37732\0\377=A\0\3773>\0\377::\0\377\77""2\0\377" - "A3\0\37703\0\377.)\0\377+'\0\377\37""5\0\377/*\0\377H>\0\377\234\207" - "]\377\262\212\200\377\260\227\201\377\273\227\205\377\333\252\261\377" - "LC\0\377m\\\36\377\265\224\177\377\257\207\204\377\261~\223\377\277\217" - "\243\377yY\77\377\36\26\0\377\25!\0\377\30,\0\377\16$\0\377=Q\2\377\315" - "\267\277\377=]\22\377\12/\0\377\3;\0\377\0+\0\377\0\34\0\377\0#\0\377" - "e_<\377\272\261\244\377\0,\0\377Ug5\377\257\253\244\377\230\225v\377" - "\266\246\237\377\216\222|\377\0\37\0\377I]5\377\236\237\227\377\200\212" - "}\377\254\253\256\377\203\204\203\377\0\32\0\377\33H\16\377\255\266\310" - "\377\36;\33\377EfT\377\247\251\323\377\177\0\21\0\377\21\77\34\377\233" - "\252\307\377\10@#\377\0+\0\377\0\30\0\377\0-\0\377\0&\0\377\14""9'\377" - "\237\246\324\377\12""9,\377\0\5\0\377\0+&\377|\221\327\377e~\261\377" - "Py\272\377l\220\340\377\0\20D\377\0\0\23\377^r\301\377cx\275\377\0\14" - "\13\377\0\27\16\377\0\37\21\377\0(!\377\0\36\27\377\0\25\33\377\7Hc\377" - "\211\262\377\377\0G\\\377\0\37%\377\0\36'\377\0\26-\377\0#\40\377\0:" - "P\377W\216\345\377e\224\335\377g\215\321\377b\177\333\377T\203\314\377" - "\0\37""8\3775`\233\377\234\236\377\377fx\336\377jw\317\377ns\315\377" - "{\177\304\377\0\7\35\377\0\0\35\377\0\2\32\377\0\0\31\377*1T\377\261" - "\237\374\377\213y\313\377zz\274\377\210x\275\377B2i\377\35->\377\261" - "\246\375\377\36DO\377\0\21\13\377\274\242\374\377SS\200\377\0\20\22\377" - "@Q\210\377\251\252\356\377\0\0\0\377\10\30C\377\241\246\357\377\206\222" - "\277\377\232\241\352\377\243\310\377\377\0!\21\377\0\"\17\377\256\303" - "\377\377D\203\223\377\0""87\377p\201\300\377\205\245\346\377~\240\320" - "\377\272\300\377\377ai\231\377\0\12#\377\10\40C\377a|\276\377_\205\265" - "\377\0\"0\377Af\222\377\226\247\371\377|\215\352\377\211\207\343\377" - "\213\215\347\377\15""0A\3772De\377\307\302\377\3779_W\377\16N5\377\40" - "`;\377\25bH\377\253\250\340\377\223\247\316\377\256\271\371\377,Zs\377" - "\0""3-\377\0,-\377\7\"8\377\4\35""9\377\0/4\377\0""35\377\0""0B\377\0" - ";=\377\0""82\377\0<6\377\0F0\377\0AF\377\0""2\77\377\0D8\377\0""0B\377" - "\0$:\377\0\"@\377\1$I\377\0&;\377\0\23F\377\0\25""0\377\0\"8\377\0""0" - "I\377\0.R\377p\0AG\377\0,K\377\0:K\377\0""2O\377\0\35=\377\3\32;\377" - "\10\14E\377\0\25""6\377\2\35>\377\0\37J\377\17%C\377\23-;\377\17%H\377" - "\26(J\377\26.<\377\20'D\377\13-I\377\14\40P\377\3\40]\377\22\23S\377" - "\15\25X\377\5\27W\377\0\20`\377\6\24X\377\0\5S\377\0\6S\377\0\0U\377" - "\0\5W\377\1\0V\377\0\4X\377\0\22\\\377\0\17Y\377\0\25V\377\0\35Y\377" - "\0.]\377\"\0\200\377\5\0\\\377\0\0K\377\0\0`\377\223\16\30\377x\0\0\377" - "T\0\0\377C\0\0\377S1\0\377S5\0\377b7\0\377S;\0\377E4\0\377MD\0\377P@" - "\0\377J<\0\377I9\0\377VB\0\377\\9\0\377[5\0\377W.\0\377W2\0\377TA\0\377" - "YA\0\377WL\0\377LM\0\377OW\0\377TU\0\377PP\0\377KN\0\377PA\0\377T;\0" - "\377PC\0\377=\77\0\377@@\0\377D5\0\377<6\0\377;2\0\377A5\0\377E<\0\377" - "A&\0\377C6\0\3777@\0\377.D\0\377*5\0\3779+\0\3778*\0\377;3\0\3778,\0" - "\3776,\0\377&0\0\377-\33\0\377\")\0\377\"5\0\377\"7\0\377\32A\0\377W" - "K\10\377\216mF\377\200o\77\377\214q;\377\211r4\377\77C\0\377SW\1\377" - "\201pB\377\211w@\377\201oO\377\206\\C\3775=\0\377\24%\0\377\16\40\0\377" - "\10$\0\377\14&\0\377*\77\0\377svE\377*F\0\377\0""9\0\377\0D\0\377\202" - "\0""9\0\377\177\0+\0\377:U\0\377ioC\377\0,\0\377\24;\0\377iqS\377ksR" - "\377cnG\377Cg'\377\0%\0\377\14A\0\377Oz;\377[{O\377\232\242\262\377\214" - "\223\210\377\0\"\0\377\14""0\0\377K`T\377\0""4\0\377\34D\25\377>kX\377" - "\0\30\0\377\0-\5\377:aR\377\0""0\0\377\0\21\0\377\0\33\0\377\0\30\0\377" - "\0\33\0\377\0,\12\377Bbp\377\0\36\16\377\0\13\0\377\0\21\0\377\77`n\377" - "4Xm\3770Z{\3770St\377\0\7\1\377\0\20\0\377\7Ie\377\10Vk\377\0\37\21\377" - "\0\37\15\377\0*\30\377\0&\24\377\0%\34\377\0""1\36\377\0""3B\3777w\240" - "\377\0""0<\377\0\37/\377\0\35)\377\0!+\377\0#,\377\0""2D\377+n\242\377" - "4p\230\377+k\245\377/g\241\377\0""9`\377\0\4""4\377\24'g\377FW\236\377" - ";Y\234\377\77`\244\377AT\211\377JY\225\377\0\7\37\377\0\2\31\377\0\1" - "\17\377\0\3\14\377\7\27""4\377UQ~\377Z]\200\377\\[\215\377ce\224\377" - "->H\377\10&#\377Wf\211\377\6""0/\377\0\24\11\377_f\217\377*\77L\377\0" - "\23\15\377$9R\377WY\207\377\0\0\26\377\0\3\2\377bO\206\377\\S\207\377" - "R]\211\377W^\212\377\0\13\17\377\0\37\26\377Ym\210\377%TT\377\0\37\37" - "\377\34F\\\377St\251\377[h\234\377[s\244\3776Fd\377\1\7+\377\0\24/\377" - "/Cg\377ET\221\377\0\14""1\377\5+C\377dq\242\377aj\246\377ae\244\377K" - "O\212\377\0\33\34\377\27(=\377ul\224\377&DL\377\27C1\377\30[(\377\35" - "O:\377s\223\235\377m\211\250\377g\221\266\377\0""24\377\0'7\377\0\36" - "6\377\0-5\377:\0,1\377\0\27.\377\0)9\377\0\37<\377\0,A\377\0/D\377\0" - "<;\377\14""2I\377\0""7\77\377\0(H\377\0""3U\377\0\37D\377\0\32B\377\0" - "\40\77\377\4\31C\377\6\30""9\377\3\24C\377\2%4\377\3\37E\377\4\36N\377" - "\0'F\377\0""5E\377\0*J\377\0+R\377\17""3T\377\5&M\377\3\24F\377\7\30" - "L\377\10\"H\377\3\34T\377\2\37I\377\24-J\377\15""3B\377\24'V\377\13#" - "I\377\24*A\377\14%E\377\33(K\377\15\27N\377\13!O\377\4\23M\377\14\30" - "N\377\6\14D\377\5\26P\377\14\1M\377\1\11K\377\2\0O\377\0\0L\377\0\0Q" - "\377\7\6O\377\10\11S\377\0\7R\377\4\27S\377\0\35S\377\0\32T\377\0\26" - "T\377'\0\200\377\10\0}\377\202\0\0V\377\177\211\13\5\377n\0\0\377E\0" - "\0\377C\0\0\377M9\0\377X<\0\377U>\0\377H1\0\377A4\0\377HC\0\377O-\0\377" - "Y9\0\377L@\0\377TH\0\377SC\0\377Y7\0\377V1\0\377V0\0\377N3\0\377N6\0" - "\377Y8\0\377QI\0\377MM\0\377TK\0\377SR\0\377LS\0\377QL\0\377VB\0\377" - "EC\0\377JD\0\377F@\0\377G6\0\377>'\0\37769\0\3774>\0\377>D\0\3772:\0" - "\377:2\0\3774E\0\377(@\0\377/2\0\377(<\0\377+/\0\377-3\0\3776&\0\377" - "&)\0\377+\40\0\377+\"\0\377(\40\0\377\33*\0\377*#\0\377\31""3\0\377\32" - "*\0\377\34-\0\377\31""0\0\377\34%\0\377\36(\0\377\24""4\0\377\17""8\0" - "\377\31$\0\377\27.\0\377\24'\0\377\34$\0\377\2""6\0\377\3-\0\377\0,\0" - "\377\2%\0\377\5(\0\377\6-\0\377\23""4\0\377\16""9\0\377\0""5\0\377\0" - "D\0\377\0+\0\377\0-\0\377\0&\0\377\0""8\0\377\5""2\0\377\2.\0\377\5""1" - "\0\377\0""9\0\377\0""2\0\377\0'\0\377\0""7\0\377\0+\0\377\24Y\0\377\212" - "\262\205\377\211\243\222\377\276\273\277\377Eg\77\377\0,\0\377\0\37\0" - "\377\0\27\0\377\0\25\0\377\0\32\0\377\0\15\0\377\0\16\0\377\0\27\0\377" - "\0\30\0\377\0\35\0\377\0\30\0\377\0\32\0\377\0\33\0\377\0\31\0\377\0" - "%\0\377\0\33\0\377\0\14\0\377\0\21\0\377\0\26\0\377\0\7\0\377\0\0\0\377" - "\0\4\0\377\0\3\0\377\0\17\0\377\0\36\0\377\0\27\4\377\0\32\0\377\0\31" - "\26\377\0\27\36\377\0\24\34\377\0&\25\377\0\35\37\377\0\32\36\377\0\37" - "$\377\0\30.\377\0\37*\377\0$:\377\177\0*(\377\0\34""2\377\0\25""5\377" - "\0\40,\377\0\37""2\377\0\31.\377\0\23%\377\0\14\"\377\0\2%\377\0\3+\377" - "\0\3-\377\0\12*\377\0\17.\377\0\13\37\377\0\1)\377\0\0/\377\0\0%\377" - "\0\1\"\377\0\3\27\377\0\1\34\377\0\20\17\377\0\17\33\377\0\11!\377\0" - "\26\31\377\0\35%\377\0&\32\377\0\"\24\377\0\22\2\377\0\22\7\377\0\20" - "\16\377\0\16\17\377\2\17\14\377\0\13\31\377\2\11\20\377\0\12\22\377\0" - "\0\15\377\0\0\32\377\0\6\30\377\0\0\37\377\4\0\35\377\0\0\23\377\0\0" - "\30\377\1\21\13\377\0!\25\377\0$\35\377\0\20\35\377\4\33!\377\11\32)" - "\377\7\31""3\377\11\6.\377\20\6*\377\20\10""1\377\12\13""0\377\1\1,\377" - "\4\4""1\377\0\2$\377\15\27/\377\6\22""1\377\14\33-\377\11\26%\377\17" - "\16*\377\12\24(\377\27\22(\377\13\32\"\377\7()\377\10""51\377\22>3\377" - "\32E7\377\27F.\377\5F>\377\0""4<\377\6-:\377\12#/\377\3'7\377\0-8\377" - "\0\34;\377\0\21""0\377\5\22D\377\4\26\77\377\12\25""9\377\4\"C\377\20" - "$>\377\16!P\377\6\31@\377\4&J\377\1#@\377\0\31E\377\0\26""3\377\4\13" - ";\377\11\13;\377\14\12>\377\7\16<\377\20\30D\377\7%M\377\4#H\377\17\37" - "E\377\6%K\377\14$U\377\16'J\377\31""2J\377\25*C\377\22\34J\377\13\34" - "V\377\21\27T\377\20'X\377\34""0N\377\33&Q\377\35$S\377#\24T\377\31\31" - "[\377\27\36R\377\40\33T\377\15\33R\377\21\31K\377\10\15J\377\34\10A\377" - "\33\12I\377\25\12G\377\21\12N\377\11\15A\377\22\6C\377\26\5H\377\15\4" - "M\377\2\1T\377\17\16R\377\14\10^\377\15\10e\377w\10\36W\377\0\35\\\377" - "\0\34M\377\4\35X\377'\0\212\377\22\0i\377\0\0N\377\0\0S\377v\6\0\377" - "V\0\0\377<\0\0\377J\0\0\377J3\0\377X,\0\377L.\0\377D6\0\377L3\0\377O" - "8\0\377R7\0\377U8\0\377O:\0\377R>\0\377O9\0\377J4\0\377T)\0\377L<\0\377" - "P=\0\377@=\0\377A8\0\377PD\0\377WE\0\377PD\0\377UB\0\377GT\0\377NC\0" - "\377JM\0\377RC\0\377MN\0\377M.\0\377C.\0\3772.\0\3777*\0\37742\0\377" - "55\0\377+8\0\3770;\0\3779\77\0\377'/\0\377*+\0\377&-\0\377*\37\0\377" - "',\0\377\40)\0\377!&\0\377\")\0\377\31-\0\377\23\33\0\377\21\36\0\377" - "\13\32\0\377\26\36\0\377\0,\0\377\10%\0\377\16+\0\377\13%\0\377\22""2" - "\0\377\34""6\0\377\17$\0\377\22-\0\377\20(\0\377\5-\0\377\2""6\0\377" - "\5,\0\377\0""4\0\377\6""6\0\377\0-\0\377\2/\0\377\5-\0\377\0(\0\377\0" - "0\0\377\3""9\0\377\0""8\0\377\3/\0\377\0""5\0\377\0;\0\377\0<\0\377\2" - "3\0\377\0""7\0\377\0""1\0\377\0:\0\377\0@\0\377\0<\0\377\0=\0\377\0""8" - "\0\377\37V\14\377\226\243\223\377\230\245\232\377\243\244\242\377\0""4" - "\0\377\0.\0\377\0(\0\377\0*\0\377\0\26\0\377\0\32\0\377\0\36\0\377\0" - "\23\0\377\0\20\0\377\0\25\0\377\0\26\0\377\0\35\0\377\0\26\0\377\0\36" - "\0\377\0\20\0\377\0\34\0\377\0\13\0\377\0\0\0\377\0\11\0\377\0\0\0\377" - "\0\10\0\377\0\25\0\377\202\0\0\0\377\177\0\15\0\377\0\16\0\377\0\17\0" - "\377\0\13\35\377\0!\24\377\0\"\21\377\0\13\15\377\0\10\11\377\0\25\25" - "\377\0\21\35\377\0\14#\377\0\22%\377\0\22(\377\0\31.\377\0\20/\377\0" - "!1\377\0\36""6\377\0\26;\377\0\22=\377\0\36""5\377\0\16,\377\0\25,\377" - "\0\26:\377\0\16=\377\0\31""9\377\0\27.\377\0\10(\377\0\3%\377\0\11)\377" - "\0\0)\377\0\3.\377\0\10\"\377\0\13&\377\0\11\26\377\0\4\31\377\0\3\13" - "\377\0\1\7\377\0\31\12\377\0\12\24\377\0\24\17\377\0\11\6\377\4\17\13" - "\377\5\13\24\377\13\10\16\377\12\5\10\377\0\0\6\377\4\0\16\377\12\0\14" - "\377\13\0\31\377\13\0\37\377\6\0\34\377\12\0\26\377\16\0\24\377\11\0" - "\35\377\20\0\27\377\13\0\21\377\11\17\21\377\5\4\35\377\4\14\25\377\22" - "\26,\377\25\14,\377\17\1-\377\15\15""6\377\13\1""5\377\31\0.\377\31\0" - "1\377\23\0$\377\22\0&\377\20\0)\377\26\13\33\377\6\5""1\377\27\22*\377" - "\31\12-\377\23\21)\377\20\36""0\377\30\25)\377\30\22,\377\23\21)\377" - "\37\25""2\377\34!D\377.)9\377%/@\377\36(H\377\24""3\77\377!.;\377\17" - "!D\377\17#6\377\17\35""1\377\17\21""8\377\22\14""6\377\5\17""6\377\5" - "\7:\377\1\10<\377\10\2:\377\23\4""7\377\11\15G\377\20\14<\377\23\15J" - "\377\26\25@\377\4\24;\377\13\7""5\377\22\5""9\377\11\0B\377\2\1\77\377" - "\2\10>\377\15\21P\377\11\15P\377\17!V\377\26\33P\377\27\40R\377\37\16" - "H\377\35\40O\377\26#Q\377\35\40b\377\34\32W\377\21\22\\\377\37\27V\377" - "\25\40[\377\30!Z\377\34\26^\377(\36Y\377\27\17U\377\30\15J\377\32\11" - "T\377\33\14S\377!\25X\377\"\14P\377{!\12P\377\27\13B\377\32\12@\377\40" - "\3F\377\11\12K\377\5\7M\377\25\15S\377\37\12O\377\16\11S\377\23\0N\377" - "\17\0b\377\32\3a\377\32\0`\377\36\12Q\377\34\21Y\377\24\22I\377\3\25" - "G\377\0'[\3772\6\203\377\22\0c\377\0\0C\377\0\0U\377~\15\0\377m\0\0\377" - "D\0\0\377\77\0\0\377>%\0\377O#\0\377\77!\0\377R#\0\377P.\0\377J6\0\377" - "N7\0\377\77""6\0\377C2\0\377C-\0\377U@\0\377T<\0\377;>\0\377CG\0\377" - "C>\0\377E.\0\377N;\0\377L3\0\377X8\0\377Q7\0\377H6\0\377-\0\377@A\0\377<=\0\37782\0\3779D\0\377\77;\0\377\77" - "7\0\377E:\0\377C3\0\3778+\0\377L(\0\377J.\0\377\77""7\0\3770>\0\377:" - "H\0\377@H\0\377:E\0\3779H\0\3779I\0\377'1\0\377-0\0\377)+\0\377,%\0\377" - "',\0\377*(\0\377((\0\377()\0\377'\"\0\377\23\37\0\377\17(\0\377\35,\0" - "\377\12*\0\377\30\35\0\377\5\32\0\377\3\36\0\377\20\25\0\377\0+\0\377" - "\12'\0\377\2!\0\377\0/\0\377\22\40\0\377\0&\0\377\0%\0\377\0'\0\377\0" - ")\0\377\0*\0\377\0+\0\377\0'\0\377\0+\0\377\0,\0\377\0""0\0\377\0""3" - "\0\377\0""4\0\377\0(\0\377\0+\0\377\0""4\0\377\0,\0\377\0%\0\377\0$\0" - "\377\0""3\0\377\1)\0\377\0(\0\377\0'\0\377\0.\0\377\0$\0\377\0\36\0\377" - "\0)\0\377\0""3\0\377\0.\0\377\0""9\0\377\0E\0\377\0A\0\377\202\0=\0\377" - "\13\0""6\0\377\0I\0\377\0M\0\377\0H\0\377\0""7\0\377\0""8\0\377\0(\0" - "\377\0*\0\377\0%\0\377\0(\0\377\0&\0\377\202\0\33\0\377\177\0\31\0\377" - "\0\22\0\377\0\23\0\377\0\14\0\377\0\25\0\377\0\15\0\377\0\27\0\377\0" - "\7\0\377\0\7\6\377\0\3\4\377\0\14\0\377\0\0\6\377\0\1\2\377\0\5\0\377" - "\0\1\7\377\0\0\6\377\0\1\20\377\0\2\13\377\0\0\13\377\0\16\20\377\0\14" - "\15\377\0\0\30\377\0\3\25\377\0\5\36\377\0\21!\377\0\16\37\377\0\26#" - "\377\0\24%\377\0\35""0\377\0\31.\377\0!.\377\0!'\377\0\22*\377\0\35\"" - "\377\0\26\30\377\0\35\31\377\0!%\377\0\16\"\377\0\30""9\377\0\24""1\377" - "\0\17(\377\0\0\"\377\0\5""3\377\0\4(\377\0\0,\377\0\6,\377\0\6\"\377" - "\0\21!\377\0\0!\377\0\0\33\377\0\7\31\377\4\10\30\377\10\20\32\377\14" - "\7\31\377\20\0\25\377\14\6\25\377\11\0\15\377\27\0\27\377\11\0\11\377" - "\30\0#\377\26\0\32\377\30\0\37\377#\0\25\377+\0!\377*\0\32\377+\0!\377" - "\37\0\37\377\34\0$\377\35\0\32\377\37\0\20\377+\0\20\377.\0\20\377\35" - "\0\26\377\40\0\34\377\"\0,\377'\0\33\377\35\0)\377\32\0+\377/\0/\377" - "+\0""7\377\"\0/\377*\0'\377\30\0'\377&\0$\377\23\0)\377\25\0#\377(\0" - ",\377-\0;\377*\0+\377\35\0@\377'\0""4\377\"\0*\377/\0.\377/\14<\377*" - "\16""6\377:\25\77\377)\36G\377-\40\77\377#&<\377\40\15E\3772\14B\377" - "\37\5\77\377\33\0D\377\26\0""1\377\30\0""7\377\33\0\77\377\26\0A\377" - "\21\0""8\377%\0;\377\"\0""0\377\23\2=\377\23\7\77\377\24\2@\377\32\0" - "7\377\26\0\77\377\21\0B\377\35\0=\377\32\0\77\377&\0\77\377!\0Z\377\30" - "\0Z\377\"\0V\377\26\0R\377\27\0T\377#\3I\377\20\3K\377\32\6Y\377\177" - "\26\1[\377\33\0\\\377\36\7\\\377*\0`\377$\0`\377'\0T\377!\7]\3776\0J" - "\377*\14N\3773\21]\377%\5i\377-\0Q\377'\13A\377!\0O\377*\0Q\377%\0Q\377" - "'\2U\377!\0N\377\30\0W\377\24\0X\377\34\0U\377\27\13\\\377\34\11e\377" - "\27\1^\377\31\0d\377\27\0Y\377#\0\\\377\33\0`\377$\4b\377\"\2X\377\"" - "\0Y\377\26\11W\377\30\3P\377e\26\233\377A\0\205\377\14\0Y\377\14\0R\377" - "\213$\0\377\177$\0\377[\0\0\377:\0\0\377/+\0\37735\0\377:)\0\3778(\0" - "\3773'\0\377:0\0\37771\0\377@(\0\377\77""8\0\3771<\0\37788\0\37797\0" - "\377,<\0\37705\0\37768\0\37790\0\37782\0\377=&\0\37727\0\377:/\0\377" - ".7\0\3774D\0\3770<\0\3774G\0\3776A\0\377*E\0\377'=\0\377\40""3\0\377" - "\30,\0\377\31""7\0\377*1\0\377/'\0\377#%\0\377\14&\0\377\24+\0\377\15" - "$\0\377\21&\0\377\15$\0\377\22%\0\377\20(\0\377\22.\0\377\15#\0\377\0" - "2\0\377\0)\0\377\0""5\0\377\0)\0\377\0\35\0\377\0'\0\377\0\40\0\377\0" - "\"\0\377\0\40\0\377\0&\0\377\0$\0\377\0#\0\377\0.\0\377\0""6\0\377\0" - "#\0\377\0""2\0\377\0!\0\377\0'\0\377\0\30\0\377\0\40\0\377\0\34\0\377" - "\0\37\0\377\0'\0\377\0(\0\377\0&\0\377\0'\0\377\0&\0\377\0#\0\377\0\40" - "\0\377\0'\0\377\0#\0\377\0\40\0\377\0#\0\377\0""1\0\377\0<\0\377\0:\0" - "\377\0;\0\377\0)\0\377\0:\0\377\0""7\0\377\0\77\0\377\0A\0\377\0I\0\377" - "\0;\0\377\16\0""4\0\377\0(\0\377\0\32\0\377\0\40\0\377\0!\0\377\0\17" - "\0\377\0\14\0\377\0\12\0\377\0\26\0\377\0\6\0\377\0\15\0\377\0\23\0\377" - "\0\7\0\377\0\0\0\377\202\0\7\0\377&\0\20\0\377\0\12\6\377\0\14\32\377" - "\0\2\4\377\0\0\2\377\0\0\3\377\0\3\7\377\0\0\6\377\0\7\2\377\0\22\23" - "\377\0\25\15\377\0\7\30\377\0\0\26\377\0\0\23\377\0\0\34\377\0\12\"\377" - "\0\26,\377\0\13*\377\0\20""0\377\0\27\"\377\0\15,\377\0\14%\377\0\27" - "\36\377\0\30#\377\0!\33\377\0\37\40\377\0\34&\377\0#\40\377\0\40""2\377" - "\0\22)\377\0\7""3\377\0\15-\377\0\4\"\377\0\3+\377\0\10&\377\0\3!\377" - "\0\3(\377\0\0#\377\202\0\0&\377\177\6\0\21\377\3\0\13\377\0\0\34\377" - "\0\0\32\377\0\0\36\377\7\7\7\377\6\12\30\377\10\21\34\377\12\0\32\377" - "\23\1\35\377\36\0\27\377\36\0\34\377\24\0\27\377\34\0\36\377\36\0\24" - "\377*\0\35\377\36\0!\377\36\0'\377\40\0\37\3771\0)\377.\0\34\377$\0*" - "\377,\0\"\3775\0)\377,\0,\3770\0.\377:\0:\377.\0,\3774\0""2\377%\0$\377" - "'\0+\377.\0""5\377\35\0*\377\37\0+\377\32\0/\377\"\0""6\3770\0""6\377" - "4\0""7\377,\0:\377-\0""7\377,\0""8\3777\0""4\3773\0""8\3772\0-\377.\0" - "1\3774\0""8\3775\0""3\377.\0;\377.\1""6\377)\12""7\377&\22""2\377$\7" - "D\3770\0>\377&\0F\377!\0@\377\40\0>\377$\0B\377\36\0\77\377\32\0D\377" - "\27\0""2\377*\0F\377\"\0E\377\35\0A\377#\0""7\377\30\0<\377\23\0""3\377" - "\13\0>\377\22\0""0\377\37\0""9\377#\0J\377\"\0J\377!\0L\377\40\0S\377" - "/\0_\377+\0\\\3773\0H\377\36\0K\377)\0W\377#\0[\377#\0X\377\27\0`\377" - "\35\0g\3771\0_\377/\0U\3774\0\\\3772\0U\377<\0b\377;\0V\377(\7`\377/" - "\2_\377/\0S\377.\0M\377\36\0Y\377'\0T\377%\0P\377\40\0Z\377\33\0Y\377" - "\25\0S\377\21\0^\377\31\0X\377,\0e\377&\1d\377\"\0^\377+\0V\377)\1f\377" - "\"\3j\377)\4i\3770\10p\3774\13h\377)\0^\377/\0b\377#\0g\377\207\22\275" - "\377N\0~\377\30\0V\377\25\0^\377\205'\0\377v!\0\377]\16\0\3774\0\0\377" - ">3\0\377\0\377\";\0\377\26""4\0\377\34""5\0\377\34'\0\377,$\0\377(-\0\377\10" - ")\0\377\14(\0\377\24\"\0\377\33%\0\377\20""1\0\377\13(\0\377\5*\0\377" - "\34,\0\377\10%\0\377\10(\0\377\0,\0\377\0;\0\377\0""0\0\377\0""4\0\377" - "\0.\0\377\0-\0\377\0\36\0\377\0\35\0\377\0(\0\377\0%\0\377\0*\0\377\0" - "'\0\377\0,\0\377\202\0*\0\377(\0\37\0\377\0$\0\377\0%\0\377\0\23\0\377" - "\0\34\0\377\0\40\0\377\0-\0\377\0'\0\377\0$\0\377\0\37\0\377\0+\0\377" - "\0!\0\377\0#\0\377\0&\0\377\0\36\0\377\0\32\0\377\0\37\0\377\0\40\0\377" - "\0=\0\377\0B\0\377\0*\0\377\0)\0\377\0\"\0\377\0!\0\377\0""0\0\377\0" - ",\0\377\0.\0\377\0""3\0\377\0""2\0\377\0;\0\377\0\"\0\377\0\40\0\377" - "\0#\1\377\0\25\0\377\0\21\2\377\0\26\3\377\0\17\0\377\0\14\7\377\0\12" - "\0\377\0\16\0\377\202\0\0\0\377\1\0\10\0\377\203\0\0\0\377\177\0\0\7" - "\377\0\0\22\377\0\0\14\377\0\0\16\377\0\10\17\377\0\4\10\377\0\0\2\377" - "\0\10\7\377\0\3\6\377\0\15\23\377\0\3\23\377\0\23\10\377\0\14'\377\0" - "\31$\377\0\10&\377\0\31.\377\0\25)\377\0\36(\377\0\27&\377\0\32(\377" - "\0\23'\377\0\23+\377\0\24""0\377\0\31""5\377\0\21(\377\0\17(\377\0\32" - "'\377\0\22$\377\0\0*\377\0\0\"\377\0\1+\377\0\0""0\377\0\1%\377\0\4\27" - "\377\0\0!\377\0\0(\377\0\1(\377\0\0#\377\0\0\37\377\0\0\13\377\0\0\34" - "\377\0\0\13\377\0\0\20\377\7\0\27\377\2\0\31\377\15\0\32\377\24\0\23" - "\377\20\1(\377\16\0\30\377\13\0\27\377\11\0\"\377\11\0\37\377\22\0\34" - "\377\37\0\37\377\21\0$\377-\0\34\377!\0\40\377$\0(\3770\0/\377%\0/\377" - "8\0""2\377.\0""0\377+\0""5\3778\0""2\3774\0F\377B\0=\3779\0""6\377\"" - "\0""5\377\"\0(\377\36\0*\377\36\0""4\377&\0\34\377$\0%\377%\0:\3779\0" - "8\377,\0""8\377=\0""9\377;\0.\3779\0:\377-\0""3\377.\0""5\377;\0A\377" - "<\0""8\377\77\0A\3776\0=\377=\0<\377D\0>\377:\0;\3777\4:\3775\6:\377" - "0\0C\3773\0C\377%\0F\3772\0<\377'\0A\377/\0K\377\33\0F\377(\0C\377!\0" - ";\377#\0;\377(\0B\377.\0""1\377\32\0A\377\40\0""6\377\31\0=\377\23\0" - ":\3771\0C\377-\0K\377.\0V\377(\0J\3773\0J\377\77\0O\377:\0R\3777\0X\377" - "6\0M\3775\0N\377;\0P\377*\0`\377(\0[\377/\0[\377/\0X\3777\0e\3772\0\\" - "\3775\0L\3773\0N\3770\0W\377.\0Z\377^%\0_\377)\0\\\377'\0U\377\36\0X" - "\377\40\0]\377\"\0^\377\33\0[\377\34\0^\377\40\0g\377\40\0d\377)\0Z\377" - "$\0X\377;\0\\\3774\0]\377.\0X\3772\0e\3772\0^\377#\20e\377/\11_\3776" - "\2h\3777\1z\3771\0w\377<\0r\3774\0l\377\235\15\324\377a\0\221\3775\0" - "k\377.\0h\377n*\0\377r)\0\377c!\0\377T\11\0\3772E\0\377\0\377" - "==\0\37726\0\3776-\0\377D&\0\377A'\0\37705\0\3774#\0\3774-\0\377$1\0" - "\377.*\0\377,'\0\3775*\0\377*:\0\377+D\0\377*9\0\377.;\0\377+:\0\377" - ",0\0\377&3\0\377&/\0\377\37\"\0\377&&\0\377!:\0\377!\40\0\377\26(\0\377" - "\35%\0\377\34\40\0\377\24(\0\377\21""2\0\377'!\0\377$+\0\377\34""4\0" - "\377&3\0\377\14.\0\377\10""6\0\377\12\36\0\377\26\37\0\377\0%\0\377\0" - "'\0\377\4""7\0\377\7""9\0\377\0""2\0\377\0.\0\377\0""8\0\377\0(\0\377" - "\0""7\0\377\0""0\0\377\0\30\0\377\0\33\0\377\0*\0\377\0)\0\377\0\36\0" - "\377\0$\0\377\0\34\0\377\0)\0\377\0&\0\377\0\40\0\377\0\37\0\377\0&\0" - "\377\202\0$\0\377\6\0\23\0\377\0%\0\377\0\34\0\377\0!\0\377\0\35\0\377" - "\0#\0\377\202\0\37\0\377\177\0%\0\377\0&\0\377\0%\0\377\0.\0\377\0&\0" - "\377\0\40\0\377\0)\0\377\0\"\0\377\0/\0\377\0'\0\377\0-\0\377\0""2\0" - "\377\0(\0\377\0)\0\377\0*\0\377\0,\0\377\0+\0\377\0\32\5\377\0\32\0\377" - "\0\34\0\377\0\25\0\377\0\20\2\377\0\20\5\377\0\30\0\377\0\17\0\377\0" - "\21\0\377\0\13\0\377\0\11\0\377\0\24\0\377\0\3\0\377\0\0\0\377\0\0\5" - "\377\0\11\0\377\0\0\24\377\0\5\0\377\0\10\5\377\0\16\16\377\0\12\5\377" - "\0\14\10\377\0\24\15\377\0\21\24\377\0\6\33\377\0\33\31\377\0\34)\377" - "\0\25""0\377\0\30)\377\0\37-\377\0\40&\377\0&\32\377\0\31.\377\0\24&" - "\377\0\31+\377\0\21$\377\0\14*\377\0\23\34\377\0\20'\377\0\13%\377\0" - "\22$\377\0\11\37\377\0\4!\377\0\6$\377\0\0""0\377\0\0!\377\0\0&\377\0" - "\5\27\377\0\11\23\377\0\0!\377\0\0\40\377\4\0\20\377\0\0\20\377\0\0\22" - "\377\10\0\12\377\0\0\7\377\4\0\25\377\21\0\40\377\3\0\35\377\23\0\"\377" - "\23\0'\377\14\0#\377\20\0#\377\11\0\35\377\23\0\14\377\2\0\27\377\7\0" - "&\377\16\0/\377\"\0\"\377(\0""4\377\31\0""7\377\20\0""7\377!\0F\377&" - "\0,\377+\0""0\377'\0""9\377-\0@\377+\0.\377*\0""3\377=\0:\377;\0\77\377" - "5\0""1\377-\0(\377\35\0""8\377!\0""5\377\35\0""4\377\"\0""9\3771\0""7" - "\3774\0""1\377<\0""2\377\77\0=\3777\0""7\377C\0\77\377C\0G\377@\0J\377" - "I\0E\377<\0C\377>\0""6\3770\0:\3774\0F\3779\0E\377D\0D\377C\0G\377J\0" - "B\3779\0F\3775\0G\3771\0F\377$\0B\377'\0N\377*\0I\377\177$\0J\377&\0" - "X\377'\0F\377(\0;\377)\0A\377\25\0=\377%\0""5\377\40\0A\377,\0J\3775" - "\0""7\3775\0G\3770\0G\377%\0H\3777\0P\377<\0A\377B\0R\377M\0U\377;\0" - "W\377A\0^\3777\0`\377<\0e\3771\0c\377/\0`\3770\0`\3771\0\\\3775\0V\377" - "5\0_\377,\0W\377.\0M\3772\0b\377!\0o\377'\0b\377&\0`\377\40\0\\\377\37" - "\0d\377(\0T\377+\0S\377\"\0a\377\36\0i\377'\0[\377-\0Z\377+\0U\377'\0" - "`\377-\0f\377.\0a\3770\0`\3770\0_\3777\5g\3778\5a\377@\0s\377B\0v\377" - "D\0\177\377E\0{\377:\0u\377G\0u\377\232\4\316\377e\0\205\377\77\0l\377" - "2\0`\377J\0\0\377L\12\0\377H\0\0\377=\0\0\377\77\0\0\377Z\16\0\377\177" - "/\0\377\217G\0\377\246R\0\377\256T\0\377\236L\15\377\240W\5\377\260Q" - "\0\377\260H\21\377\257B\10\377\255D\5\377\234C\5\377\252;\13\377\226" - "E\2\377\234H\7\377\221G\0\377\241F\4\377\231R\0\377\242P\13\377\213I" - "\3\377\220E\13\377\221:\17\377\206\77\11\377\203F\0\377\220;\12\377\210" - "<\0\377\205E\0\377\210<\0\377\211F\0\377\200>\11\377\227<\11\377\213" - "8\15\377\223;\25\377\211K\16\377~J\17\377\177A\23\377vF\22\377\201B\26" - "\377\200I\40\377mG+\377kK%\377jF9\377mM,\377bT,\377hI/\377R;0\377YD3" - "\377ZH\40\377LF,\377H5(\377:C1\377W=6\377SE4\377YG6\377VA7\377E>6\377" - "C8C\377R4=\377I1<\377L):\377S,:\377A(3\377H(6\377\177H7:\377K&3\377X" - "'9\377Q1D\377S6\77\377N08\377[7\77\377V,5\377gA>\377m1L\377kAF\377oB" - "G\377o;I\377[MK\377bIR\377Z\77F\377d7G\377Z:C\377Q8H\377\\0`\377Z7`\377" - "R9i\377U2h\377S@a\377_;`\377a4h\377M7{\377H1z\377J7z\377S4m\377F1g\377" - "M;d\377X\77k\377S8s\377F@v\377>:d\377G5_\3774.c\377:+w\37708\206\377" - "1/\207\37761\203\377,A\204\3774Bu\377\77\77t\3776>\202\377CI\203\377" - "JE\210\377BA\213\3773P\210\377\231" - "\377PK\225\377NC\217\377HF\231\377L9\243\377@:\223\377B@\220\377;\77" - "\220\377>C\227\377@=\220\377A<\220\377MC\223\377M6\222\377E5\232\377" - "I2\230\377M#\232\377T/\207\377Z-\227\377a#\226\377Z*\225\377^%\225\377" - "b+\224\377j7\224\377v*\224\377o-\223\377m)\212\377q)\212\377u*\177\377" - "y\34\213\377\204\"\226\377v\40\213\377\206)\225\377\221&\214\377}\15" - "\232\377\215\14\224\377\215\11\214\377\214\23\221\377\216\17\217\377" - "\233\17\227\377\231\20\235\377\235\27\244\377\224\17\247\377\234\16\260" - "\377\234\22\265\377\227\25\271\377\246\17\270\377\244\12\266\377\251" - "\15\266\377\253\27\253\377\243\24\252\377\227\6\262\377\220\30\251\377" - "\240\33\253\377\234\23\252\377\230\21\246\377\235\36\244\377\232\23\250" - "\377\227\12\251\377\240\31\255\377\243\25\257\377\244$\260\377\243\22" - "\261\377\252\33\250\377\262\31\253\377\255\13\252\377\254\21\273\377" - "\252\23\271\377\247\25\271\377\253\40\260\377\237!\304\377\250\27\271" - "\377\241\"\264\377\254\30\260\377\262\36\254\377~\263\10\261\377\251" - "\22\255\377\241\27\262\377\246\40\255\377\250\27\253\377\252\31\277\377" - "\246\23\264\377\241\26\275\377\251\16\273\377\247\10\305\377\232\0\272" - "\377\237\0\265\377\232\0\245\377\242\0\263\377\232\4\266\377\226\0\257" - "\377\245\0\254\377\254\0\250\377\235\1\264\377\235\0\276\377\253\0\276" - "\377\255\0\275\377\272\0\303\377\272\3\307\377\253\0\302\377\255\3\322" - "\377\256\0\332\377\256\0\337\377\263\0\331\377\256\0\334\377\241\0\310" - "\377\233\0\322\377\250\0\324\377\240\12\334\377\237\14\333\377\243\0" - "\334\377\235\10\332\377\241\0\327\377\225\0\336\377\221\0\315\377\224" - "\0\311\377\221\1\312\377\230\1\313\377\234\22\322\377\234\17\320\377" - "\217\0\334\377\214\14\337\377\232\34\325\377\220\26\332\377\252\26\333" - "\377\266\34\323\377\263\37\326\377\252\30\325\377\245\21\330\377\252" - "\13\321\377\241\34\330\377\264\"\336\377\263\27\347\377\265\27\362\377" - "\265\26\365\377\307\22\362\377\274\21\347\377\261\0\313\377m\0\221\377" - "Z\0o\377G\0q\377F\0d\377B\0\0\377>\0\0\377<\0\0\377=\0\0\3773\0\0\377" - ">\0\0\377M\0\0\377Y\0\0\377e\16\0\377s\7\0\377b\17\0\377c\22\0\377g\21" - "\0\377j\15\0\377h\12\0\377d\3\0\377g\12\0\377a\0\0\377[\3\0\377Z\7\0" - "\377R\3\0\377P\0\0\377R\6\0\377U\0\0\377S\2\0\377S\0\0\377J\0\0\377N" - "\0\0\377M\4\0\377J\0\0\377H\0\0\377Q\0\0\377L\0\0\377@\0\0\377E\0\0\377" - "D\0\0\377;\0\0\377\77\0\0\377D\0\0\377>\2\0\3775\17\0\377:\0\0\377<\0" - "\0\377<\4\0\3773\13\0\377+\4\0\377*\14\0\377\35\11\0\377#\6\0\377$\6" - "\0\377\36\0\0\377\21\0\0\377\24\0\0\377\7\0\0\377\11\0\0\377\12\0\0\377" - "\21\0\0\377\0\0\0\377\2\0\0\377\202\14\0\0\377\3\16\0\0\377\6\0\0\377" - "\26\0\0\377\202\17\0\0\377\202\22\0\0\377\177\21\0\0\377\15\0\1\377\20" - "\0\0\377\20\0\6\377\37\0\0\377\31\0\0\377\25\0\0\377\27\0\1\377$\0\1" - "\377\31\0\13\377\35\0\15\377\34\0\16\377*\0\0\377&\13\0\377&\0\1\377" - "\40\0\12\377\37\0\17\377\20\0\31\377\27\0\25\377\37\0\11\377\33\0!\377" - "\23\0$\377\17\0)\377\11\3""2\377\27\0""4\377\15\0.\377\7\0:\377\5\0""7" - "\377\13\0""8\377\14\0""8\377\15\0)\377\30\0""5\377\23\0""6\377\4\0-\377" - "\0\0""5\377\0\0""0\377\3\1!\377\0\4.\377\0\0,\377\0\0""3\377\0\0""7\377" - "\0\0""8\377\0\0:\377\0\5/\377\0\0@\377\0\13""4\377\2\3>\377\6\7""0\377" - "\4\6""4\377\0\1>\377\0\0F\377\13\4U\377\6\17U\377\0\22R\377\0\24R\377" - "\0\0O\377\0\0X\377\0\1g\377\5\0Z\377\0\0P\377\2\4^\377\11\0R\377\4\0" - "P\377\3\1R\377\2\0Q\377\23\0K\377\6\0F\377\21\0M\377\23\0S\377\32\0X" - "\377\34\0P\377\34\0N\377\37\0H\377\37\0E\377\33\0N\377$\0Y\377/\0S\377" - "&\0L\377%\0I\377$\0@\3776\0J\377:\0N\3778\0P\377Q\0M\377J\0K\377M\0R" - "\377Q\0Y\377Y\0S\377W\0R\377`\0C\377X\0O\377K\0S\377[\0`\377[\0g\377" - "T\0m\377Z\0q\377V\0r\377S\0n\377V\0j\377`\0j\377g\0g\377d\0r\377P\0l" - "\377U\0d\377_\0d\377_\0_\377U\0^\377S\0c\377`\0c\377_\0o\377_\0h\377" - "c\0i\377T\0`\377S\0k\377_\0j\377c\0l\377_\0f\377\\\0l\377f\0r\377`\0" - "n\377g\0f\377\\\0h\377b\0n\377k\0p\377Z\0k\377l\0j\377q\0n\377ds\0l\377" - "i\0o\377n\0t\377c\0x\377i\0k\377m\0l\377`\0\206\377_\0~\377b\0s\377`" - "\0j\377k\0u\377l\0s\377`\0u\377e\0v\377W\0x\377T\0p\377X\0u\377b\0g\377" - "g\0o\377`\0o\377g\0s\377n\0o\377h\0w\377t\0\207\377h\0\213\377h\0\211" - "\377p\0\232\377u\0\240\377n\0\233\377d\0\226\377b\0\237\377e\0\243\377" - "c\0\224\377a\0\220\377]\0\226\377J\0\221\377T\0\225\377X\0\223\377^\0" - "\221\377J\0\212\377R\0\214\377X\0\211\377\\\0\231\377`\0\230\377Z\0\241" - "\377[\0\226\377Q\0\233\377W\0\226\377U\0\231\377l\0\213\377n\0\212\377" - "i\0\220\377r\0\227\377h\0\227\377o\0\225\377x\0\242\377v\0\255\377u\0" - "\255\377|\0\250\377y\0\245\377|\0\223\377|\0\204\377[\0e\377P\0g\377" - "]\0s\377N\0r\377N\0h\3778\0\0\3775\0\0\377=\0\0\377>\0\0\3778\0\0\377" - "C\0\0\377;\0\0\377B\0\0\3770\0\0\3779\0\0\3773\0\0\3770\0\0\377;\0\0" - "\377G\0\0\377B\0\0\377\77\0\0\3774\0\0\3776\0\0\377\"\0\0\377'\0\0\377" - "\32\0\0\377\25\0\0\377\16\0\0\377\37\0\0\377#\0\0\377\26\0\0\377\31\0" - "\0\377\34\0\0\377\32\0\0\377\31\0\0\377\14\0\0\377\31\0\0\377\14\0\0" - "\377\203\15\0\0\377\10\10\0\0\377\5\0\0\377\20\0\0\377\21\0\0\377\10" - "\0\0\377\24\0\0\377\14\0\0\377\4\0\0\377\260\0\0\0\377\5\0\0\5\377\0" - "\0\0\377\0\0\11\377\0\0\0\377\0\0\7\377\202\0\0\6\377\211\0\0\0\377\36" - "\0\0\16\377\0\0\21\377\0\0\13\377\0\0\5\377\0\0\15\377\0\0\10\377\0\0" - "\12\377\0\0\2\377\0\0\6\377\0\0\15\377\0\0\11\377\0\0\27\377\0\0\35\377" - "\0\0\37\377\0\0\17\377\0\0\"\377\0\0+\377\0\0\37\377\0\0&\377\0\0$\377" - "\0\0\"\377\0\0\32\377\0\0\31\377\0\0\17\377\0\0\35\377\0\0\17\377\0\0" - "\24\377\0\0\27\377\0\0\20\377\0\0\37\377\202\0\0\20\377{\0\0\22\377\0" - "\0!\377\0\0\27\377\0\0\24\377\0\0\37\377\0\0\30\377\0\0\26\377\0\0\37" - "\377\1\0\26\377\21\0\34\377\24\0\34\377\23\0\15\377\26\0\32\377\32\0" - ")\377(\0*\377'\0\"\377&\0\"\377'\0\31\377\37\0#\377\37\0\40\377\"\0\37" - "\377%\0'\377,\0)\377$\0""2\377)\0B\377\37\0\77\377'\0=\377,\0\77\377" - "$\0""6\377*\0""3\377/\0""6\377'\0/\377%\0""3\377\40\0+\377$\0)\377\37" - "\0-\377'\0""8\377\33\0:\377*\0=\377-\0""6\377\34\0I\377\34\0@\377*\0" - "/\377-\0;\3772\0""8\377,\0""5\3774\0""4\3771\0""4\377$\0""2\3773\0""6" - "\3779\0<\377,\0""8\3774\0@\3779\0K\377;\0;\3777\0A\3778\0""7\377@\0A" - "\377<\0A\3773\0:\377C\0>\377C\0@\3778\0C\3777\0=\3776\0/\377A\0=\377" - "6\0<\3779\0C\3776\0G\3774\0<\3777\0<\377-\0>\377A\0@\3778\0""9\3771\0" - "A\3772\0I\377B\0R\377;\0G\377A\0W\377D\0U\377;\0d\377<\0k\377=\0n\377" - "@\0f\377:\0c\377>\0k\3774\0b\377.\0g\3770\0U\377%\0]\377\34\0]\377\32" - "\0T\377%\0^\377\36\0W\377\32\0^\377\34\0b\377\32\0f\377&\0U\377)\0m\377" - "-\0e\377%\0d\377$\0[\377.\0d\377-\0\\\377<\0]\377\77\0^\377:\0Y\377A" - "\0]\377G\0Z\377B\0Z\377F\0r\377C\0r\377G\0|\377O\0r\377N\0n\377X\0q\377" - "Z\0n\377Z\0i\377O\0t\377T\0g\377I\0h\377L\0w\377<\0\0\377\2027\0\0\377" - "\17>\0\0\377;\0\0\377G\0\0\377I\0\0\377<\0\0\377:\0\0\3772\0\0\377;\0" - "\0\3775\0\0\3779\0\0\377H\0\0\377F\0\0\3779\0\0\377B\0\0\3778\0\0\377" - "\202\"\0\0\377\12(\0\0\377\"\0\0\377\35\0\0\377\26\0\0\377\33\0\0\377" - "\36\0\0\377\35\0\0\377$\0\0\377%\0\0\377\32\0\0\377\202\21\0\0\377\12" - "\23\0\0\377\15\0\0\377\13\0\0\377\17\0\0\377\10\0\0\377\4\0\0\377\6\0" - "\0\377\12\0\0\377\30\0\0\377\24\0\0\377\202\10\0\0\377\1\1\0\0\377\260" - "\0\0\0\377\12\0\0\11\377\0\0\0\377\0\0\7\377\0\0\13\377\0\0\25\377\0" - "\0\14\377\0\0\10\377\0\0\0\377\0\0\5\377\0\0\3\377\204\0\0\0\377\3\0" - "\0\7\377\0\0\1\377\0\0\16\377\202\0\0\11\377\30\0\0\0\377\0\0\5\377\0" - "\0\4\377\0\0\0\377\0\0\17\377\0\0\20\377\0\0\22\377\0\0\40\377\0\0\32" - "\377\0\0\34\377\0\0\21\377\0\0\34\377\0\0#\377\0\0\"\377\0\0\25\377\0" - "\0\31\377\0\0&\377\0\0*\377\0\0\34\377\0\0\21\377\0\0\25\377\0\0\26\377" - "\0\0\25\377\0\0\27\377\202\0\0\26\377|\0\0\24\377\0\0\20\377\0\0\26\377" - "\0\0\32\377\0\0!\377\0\0\26\377\0\0\"\377\0\0\31\377\0\0\35\377\0\0\26" - "\377\0\0\31\377\15\0\25\377\31\0\30\377\23\0\17\377\26\0\37\377\"\0\37" - "\377$\0\"\377)\0\35\377(\0&\377\40\0!\377'\0#\377\33\0&\377\32\0""0\377" - "(\0#\3771\0(\377.\0""3\377#\0>\377-\0G\377$\0@\377!\0=\377,\0:\377\"" - "\0=\377-\0""0\3770\0+\377$\0""3\377,\0'\377#\0*\377#\0""7\377\37\0""9" - "\377#\0:\377,\0;\377.\0:\377\37\0""7\377&\0:\377+\0>\377$\0""1\377#\0" - "5\3772\0""0\3771\0>\3772\0\77\377.\0;\377-\0<\377:\0H\3770\0=\3777\0" - "B\3779\0M\3774\0D\3779\0B\377B\0<\377<\0>\377@\0G\3779\0;\377>\0;\377" - "8\0A\377<\0@\3775\0\77\3778\0:\377@\0""6\3779\0@\377\77\0D\377<\0C\377" - "7\0G\3772\0F\377<\0A\377A\0E\377@\0""4\3776\0F\3775\0I\3779\0F\3779\0" - "M\3778\0_\377B\0]\377>\0a\3773\0e\377;\0i\377;\0]\377<\0W\3771\0e\377" - "5\0`\377.\0i\3771\0b\377&\0U\377\31\0P\377\27\0N\377\30\0^\377\24\0W" - "\377\32\0`\377&\0a\377'\0f\377\30\0_\377#\0_\377\40\0^\377'\0f\377&\0" - "_\377*\0g\3775\0g\377<\0h\377>\0h\3778\0Z\3774\0d\377C\0c\377;\0]\377" - "K\0`\377E\0p\377Z\0v\377L\0h\377T\0n\377^\0j\377V\0o\377Y\0i\377Z\0o" - "\377T\0w\377P\0{\377T\0r\377", + (unsigned char*)"\7\22\24\26\22\25\27\22\24\26\21\25\26\22\24\26\22\24\27\22\24\26\202" + "\21\24\26\10\22\25\26\22\24\26\22\25\27\22\24\26\22\25\27\21\24\27\22" + "\24\26\21\24\26\202\22\24\26\1\21\24\26\202\22\24\27\202\22\24\26\202" + "\21\24\26\3\22\24\27\22\24\26\22\25\26\202\21\24\27\4\22\24\27\21\25" + "\27\22\24\27\22\24\26\204\22\24\27\6\21\24\27\22\24\26\22\24\27\22\24" + "\26\21\24\27\22\24\27\202\21\24\26\1\22\24\27\202\22\24\26\36\21\25\26" + "\22\24\26\22\24\27\21\24\26\22\24\26\21\24\26\22\25\26\21\24\27\21\25" + "\26\21\24\26\21\24\27\22\24\26\22\25\27\22\24\27\21\25\26\22\24\27\22" + "\25\27\21\24\27\22\25\26\21\24\26\22\25\26\21\25\27\22\24\27\22\24\26" + "\22\24\27\22\24\26\22\24\27\21\25\26\21\24\26\21\25\27\202\22\24\26\11" + "\22\24\27\21\24\27\22\24\26\21\24\27\22\24\27\22\25\27\22\24\26\21\24" + "\26\21\24\27\202\21\24\26\5\22\24\27\22\24\26\21\24\27\22\24\27\22\25" + "\26\202\22\24\26\202\21\24\26\204\22\24\26\7\22\24\27\21\25\26\22\24" + "\27\21\24\26\22\24\26\21\24\27\22\24\26\202\22\24\27\4\22\24\26\22\24" + "\27\21\25\26\22\24\27\203\22\24\26\203\22\24\27\202\22\25\26\1\22\24" + "\26\202\21\24\26\11\22\24\27\22\24\26\21\25\26\22\24\26\22\24\27\22\24" + "\26\21\24\26\22\24\26\21\24\26\202\21\24\27\203\22\24\26\2\22\25\26\21" + "\24\26\202\22\24\27\11\22\24\26\22\25\26\21\24\27\21\25\26\22\24\26\22" + "\24\27\21\24\26\22\24\27\21\24\27\202\22\24\27\4\21\25\26\22\25\26\22" + "\24\26\22\25\26\202\22\24\27\202\22\24\26\202\22\24\27\2\21\24\27\22" + "\25\26\203\22\24\26\1\21\24\26\202\22\24\26\11\21\24\27\22\25\26\22\24" + "\26\21\24\26\22\24\26\21\24\26\22\25\27\22\25\26\22\24\27\202\22\25\26" + "\21\22\24\27\22\24\26\22\24\27\21\25\27\22\25\27\22\25\26\22\24\26\22" + "\24\27\22\25\27\22\24\26\22\24\27\21\24\27\22\24\27\22\25\27\22\24\27" + "\22\24\26\21\25\27\202\22\25\26\203\22\24\26\203\21\24\26\204\22\24\26" + "\4\22\24\27\22\25\26\21\25\27\22\24\26\203\22\24\27\4\22\25\26\22\24" + "\26\21\24\26\21\25\26\204\22\24\27\4\21\24\27\22\24\27\22\24\26\22\25" + "\27\202\21\24\27\2\22\24\26\21\25\26\202\22\24\26\5\21\25\26\21\24\27" + "\22\24\26\22\24\27\21\24\27\202\22\24\26\202\22\24\27\6\22\24\26\22\24" + "\27\21\24\26\21\25\26\22\24\26\22\24\27\203\21\24\27\4\22\25\26\22\24" + "\27\22\25\27\22\24\27\202\21\24\27\2\21\25\27\22\25\30\203\22\25\27\3" + "\22\24\27\22\25\27\21\24\27\202\22\25\27\1\22\24\30\203\22\25\27\3\22" + "\24\27\22\25\30\22\24\27\202\22\25\27\202\22\25\30\204\22\25\27\11\22" + "\24\27\22\25\30\22\25\27\22\24\27\22\25\27\22\25\30\22\25\27\21\25\27" + "\22\25\30\202\22\25\27\203\22\24\30\6\22\25\27\22\24\30\22\25\27\22\24" + "\30\22\25\27\21\25\27\203\22\25\27\4\22\24\27\22\25\30\21\25\27\22\24" + "\27\202\22\25\27\1\22\24\27\202\22\25\27\1\22\24\27\202\22\25\27\202" + "\22\25\30\202\22\25\27\1\22\25\30\202\22\25\27\4\22\24\27\22\25\30\22" + "\25\27\22\25\30\202\22\25\27\1\22\24\27\204\22\25\27\5\22\25\30\22\25" + "\27\21\24\27\22\25\27\22\24\27\202\22\25\27\202\22\24\30\5\22\25\27\22" + "\25\30\21\24\27\22\25\27\22\24\30\202\22\25\27\10\21\25\27\22\25\27\22" + "\25\30\22\25\27\22\24\30\22\24\27\21\25\27\22\25\27\202\21\24\27\1\22" + "\24\27\202\22\25\30\2\22\25\27\22\24\27\202\22\25\27\2\22\24\27\22\24" + "\30\202\22\25\27\2\22\24\27\21\25\27\203\22\25\27\202\22\25\30\205\22" + "\25\27\14\21\25\30\22\24\27\22\25\30\22\24\27\22\25\27\22\24\27\21\25" + "\27\22\25\27\22\25\30\22\24\30\22\25\27\22\24\27\202\22\25\30\13\22\25" + "\27\22\24\27\22\25\30\22\25\27\21\25\27\22\25\27\21\25\30\22\25\27\22" + "\25\30\21\25\30\22\24\30\202\22\24\27\203\22\25\27\13\22\25\30\21\25" + "\27\21\24\27\22\25\27\21\25\27\22\25\27\22\24\27\22\25\30\22\24\27\22" + "\25\27\22\24\30\202\22\25\27\2\21\25\30\21\25\27\204\22\25\27\202\22" + "\25\30\1\22\24\30\202\22\25\27\6\22\25\30\21\25\27\22\25\27\21\25\30" + "\21\25\27\22\24\27\202\22\25\27\10\21\25\27\22\25\27\21\25\27\22\25\27" + "\21\24\27\22\25\27\22\24\30\22\24\27\202\22\24\30\202\22\25\27\202\22" + "\25\30\202\22\25\27\1\21\25\27\202\22\25\27\1\21\25\27\202\22\25\30\202" + "\22\25\27\1\21\25\27\202\22\25\27\10\22\24\27\22\25\30\22\25\27\22\24" + "\27\22\25\27\22\24\27\22\25\27\21\25\30\205\22\25\27\5\21\24\27\22\25" + "\27\22\25\30\22\24\27\21\25\27\202\22\25\27\3\22\24\27\22\25\27\22\25" + "\30\202\22\25\27\5\22\25\30\21\24\27\22\24\27\22\25\30\22\25\27\202\22" + "\24\27\202\22\25\30\1\21\24\27\203\22\25\27\1\22\25\30\202\22\25\27\2" + "\21\25\27\22\25\30\202\22\26\30\202\22\25\30\1\22\26\30\202\22\25\30" + "\1\22\25\31\213\22\25\30\3\22\26\30\22\25\30\22\26\31\202\22\25\30\3" + "\22\26\30\22\25\30\22\25\31\204\22\25\30\7\22\26\30\23\25\31\22\25\30" + "\22\25\31\22\25\30\22\26\30\23\25\30\206\22\25\30\2\22\26\30\22\25\30" + "\202\22\26\30\203\22\25\30\2\22\26\30\23\25\30\202\22\25\30\2\22\26\30" + "\22\25\31\205\22\25\30\202\22\26\30\204\22\25\30\3\22\26\30\22\25\30" + "\22\25\31\202\22\25\30\1\22\25\31\203\22\25\30\1\22\25\31\203\22\25\30" + "\1\23\26\30\202\22\26\30\2\22\25\30\22\26\30\202\22\25\30\1\22\26\30" + "\204\22\25\30\2\22\26\30\22\25\31\205\22\25\30\202\22\26\30\202\22\25" + "\30\1\22\26\30\202\22\25\30\202\22\26\31\5\22\25\31\22\25\30\22\26\30" + "\22\25\30\22\26\30\207\22\25\30\1\22\26\30\202\22\25\30\2\22\26\30\22" + "\25\31\203\22\25\30\1\22\26\30\204\22\25\30\1\22\26\30\204\22\25\30\203" + "\22\26\30\202\22\25\30\1\22\26\30\203\22\25\30\1\22\25\31\210\22\25\30" + "\2\22\26\31\22\25\31\202\22\25\30\202\22\26\30\3\22\25\30\23\25\30\22" + "\25\31\210\22\25\30\202\22\26\30\202\22\25\31\3\22\26\30\22\25\30\22" + "\26\30\205\22\25\30\1\22\26\30\203\22\25\30\204\22\26\30\202\22\25\30" + "\1\22\26\30\203\22\25\30\1\22\25\31\202\22\25\30\1\22\25\31\202\22\25" + "\30\1\22\26\30\202\22\25\30\1\22\25\31\203\22\25\30\1\22\26\30\202\22" + "\25\30\1\22\25\31\203\22\25\30\3\23\25\30\22\25\30\22\26\31\202\22\25" + "\30\3\23\25\30\22\25\30\22\26\31\203\22\25\30\2\22\26\30\22\26\31\202" + "\22\25\30\3\22\25\31\22\26\30\23\25\30\205\22\25\30\5\22\26\31\22\25" + "\30\22\25\31\22\25\30\22\26\30\204\22\25\30\1\23\25\30\204\22\26\30\202" + "\22\25\30\3\23\25\30\22\26\30\22\26\31\202\23\26\31\1\22\26\31\202\22" + "\25\31\2\22\26\31\22\25\31\207\22\26\31\2\22\25\31\23\26\31\203\22\26" + "\31\1\23\26\31\204\22\26\31\1\22\25\31\210\22\26\31\3\23\25\31\22\26" + "\31\22\25\31\203\22\26\31\4\22\25\31\23\26\31\22\26\31\22\25\31\221\22" + "\26\31\4\23\26\31\23\25\31\22\25\31\22\26\31\202\23\26\31\207\22\26\31" + "\1\23\26\31\203\22\26\31\1\23\25\31\204\22\26\31\3\23\26\31\22\26\31" + "\22\25\31\205\22\26\31\202\22\25\31\204\22\26\31\202\23\26\31\203\22" + "\26\31\6\22\26\30\22\26\31\23\25\31\22\26\31\23\26\31\22\26\31\203\22" + "\25\31\202\22\26\31\4\23\26\31\22\26\31\23\25\31\23\26\31\203\22\26\31" + "\2\23\26\31\22\26\31\203\22\25\31\203\22\26\31\10\22\25\31\22\26\31\22" + "\25\31\23\26\31\22\26\31\23\26\31\22\26\31\23\25\31\202\22\26\31\202" + "\23\26\31\203\22\26\31\1\22\25\31\203\22\26\31\1\23\26\31\202\22\26\31" + "\1\23\26\31\205\22\26\31\2\23\26\31\22\25\31\203\22\26\31\1\22\25\31" + "\203\22\26\31\2\22\25\31\23\25\31\205\22\26\31\1\22\25\31\202\22\26\31" + "\1\23\26\31\202\22\25\31\2\22\26\31\23\26\31\203\22\26\31\1\22\25\31" + "\202\22\26\31\1\23\26\31\202\22\26\31\202\22\25\31\1\23\26\31\206\22" + "\26\31\2\23\25\31\22\25\31\203\22\26\31\3\23\26\31\22\25\31\22\26\31" + "\202\22\25\31\2\22\26\31\22\25\31\202\22\26\31\1\22\25\31\202\22\26\31" + "\1\23\26\31\205\22\26\31\3\22\25\31\23\26\31\22\25\31\204\22\26\31\202" + "\22\25\31\1\22\26\31\202\23\26\31\202\22\26\31\5\22\25\31\22\26\31\23" + "\25\31\22\26\31\22\26\30\202\22\26\31\202\23\26\31\1\22\26\31\202\22" + "\25\31\203\22\26\31\3\23\25\31\22\26\31\23\26\31\202\22\26\31\12\22\25" + "\31\22\26\31\23\25\31\22\26\31\22\25\31\22\26\31\22\25\31\22\26\32\23" + "\26\32\22\27\32\202\23\26\32\202\22\26\32\2\22\27\32\23\26\31\202\22" + "\26\32\12\22\27\31\22\27\32\22\26\31\22\26\32\22\27\32\22\26\31\23\26" + "\32\22\26\31\22\27\32\22\26\32\202\22\27\32\1\22\26\32\202\22\27\32\7" + "\23\26\32\23\27\32\22\27\32\23\26\32\22\26\31\22\27\32\23\26\31\202\23" + "\26\32\2\22\26\31\22\26\32\202\23\26\32\16\22\27\32\23\26\32\22\27\31" + "\22\27\32\22\26\32\22\27\32\22\26\32\22\27\32\22\26\32\22\27\32\22\26" + "\32\23\26\32\22\26\32\22\27\32\202\22\26\32\11\22\27\31\22\26\32\23\26" + "\32\22\26\32\23\26\32\22\26\31\22\27\32\23\27\32\22\27\32\202\22\26\32" + "\202\22\27\32\7\23\27\32\22\27\32\22\26\32\23\26\32\22\27\32\22\26\32" + "\22\27\32\202\23\27\32\202\23\26\32\5\22\26\32\23\26\32\22\27\31\22\27" + "\32\23\26\32\204\22\26\32\4\23\26\32\22\27\32\22\26\32\23\27\32\202\22" + "\27\32\1\23\26\32\202\22\26\32\30\22\26\31\22\27\31\22\27\32\23\27\32" + "\22\26\32\23\26\32\23\27\31\22\27\32\22\26\31\22\27\32\22\26\32\22\27" + "\31\22\27\32\22\26\32\23\27\31\22\26\32\22\27\32\23\27\32\22\26\32\23" + "\27\31\23\27\32\22\27\32\22\26\32\22\26\31\202\22\26\32\6\22\27\32\23" + "\26\32\22\27\31\23\27\32\22\26\32\23\26\32\202\22\26\32\1\23\27\32\202" + "\22\26\32\2\22\27\32\23\27\31\203\23\26\32\5\22\26\32\23\27\32\23\30" + "\32\22\26\32\23\26\32\202\22\27\32\2\22\26\32\22\27\32\202\22\26\32\203" + "\23\26\32\3\22\26\32\23\27\32\23\26\32\202\22\26\32\1\22\26\31\202\22" + "\26\32\10\23\26\32\23\27\32\22\26\31\23\27\32\22\27\31\22\26\32\23\26" + "\32\22\26\32\204\23\26\32\5\22\26\32\23\26\32\22\26\32\22\27\32\22\26" + "\32\203\23\26\32\1\22\26\31\202\22\26\32\5\22\27\32\23\26\32\23\27\32" + "\22\27\31\23\26\31\203\22\26\32\1\23\26\32\202\22\27\32\10\22\26\32\23" + "\26\32\22\26\32\23\26\32\22\26\32\22\27\32\22\26\32\23\26\31\204\22\26" + "\32\10\23\26\32\22\27\32\22\26\32\23\26\31\22\27\32\23\27\32\22\27\32" + "\23\27\32\207\22\26\32\1\23\26\32\203\22\26\32\3\22\27\31\23\26\32\22" + "\27\32\203\22\26\32\202\23\26\32\1\22\26\31\203\23\26\32\1\22\26\32\203" + "\23\26\32\1\22\26\32\202\22\27\32\2\23\26\32\22\26\31\202\22\26\32\2" + "\22\27\32\23\27\32\202\23\26\32\2\23\27\32\22\27\32\202\22\26\32\202" + "\23\26\32\202\22\26\32\3\22\27\32\23\27\33\22\27\32\203\22\27\33\203" + "\23\27\33\3\23\27\32\22\27\32\23\27\33\202\22\27\33\3\23\27\33\22\27" + "\33\23\27\33\202\22\27\33\1\23\27\33\202\22\27\33\2\22\27\32\22\27\33" + "\202\23\27\32\202\22\27\33\202\23\27\33\203\22\27\33\1\23\27\33\203\22" + "\27\33\202\23\27\33\1\22\27\32\202\22\27\33\1\22\27\32\202\23\27\33\1" + "\23\26\33\202\22\27\33\4\23\27\33\22\26\33\22\27\33\23\27\33\203\22\27" + "\33\7\23\27\32\23\27\33\22\27\33\23\27\33\22\27\33\22\27\32\23\27\33" + "\202\22\27\33\1\23\27\33\202\22\27\33\1\23\27\32\203\23\26\33\13\23\27" + "\33\22\27\33\22\26\33\23\26\33\22\26\32\23\27\32\22\27\33\23\27\32\22" + "\27\33\22\26\33\22\27\32\202\23\27\33\4\23\27\32\23\27\33\22\27\33\23" + "\27\33\206\22\27\33\10\23\27\32\22\27\33\23\27\33\22\27\33\23\27\33\23" + "\26\33\22\27\33\22\27\32\206\22\27\33\203\23\27\33\202\22\27\33\2\23" + "\27\33\22\27\33\202\23\27\33\4\22\27\32\23\26\33\22\27\33\23\27\33\203" + "\22\27\33\1\23\26\33\203\23\27\33\202\22\27\33\4\23\27\33\22\27\32\22" + "\27\33\23\26\33\203\23\27\33\1\22\27\33\204\23\27\33\7\24\27\34\24\31" + "\35\22\27\33\23\27\32\23\27\33\22\27\33\23\27\33\202\22\27\33\6\23\27" + "\33\22\27\32\22\27\33\23\27\33\22\26\33\23\27\33\202\22\27\33\10\22\27" + "\32\23\27\33\22\27\32\23\27\33\22\27\33\23\27\33\23\26\33\22\27\33\202" + "\23\27\33\1\23\27\32\202\23\27\33\5\23\26\32\23\27\32\23\27\33\22\27" + "\33\22\26\33\202\23\27\33\5\22\26\33\23\27\33\22\27\33\23\27\33\23\26" + "\33\202\23\27\33\4\23\26\33\23\27\32\22\27\33\22\27\32\203\22\27\33\1" + "\22\26\33\203\23\27\33\1\23\26\33\204\22\27\33\202\23\27\33\12\22\27" + "\32\23\26\33\22\27\33\22\27\32\22\27\33\23\27\33\23\27\32\22\27\32\23" + "\27\33\22\27\33\202\23\27\33\6\22\27\33\23\26\32\22\27\33\23\27\33\22" + "\27\33\23\27\33\204\22\27\33\2\23\27\33\22\27\33\202\23\27\33\202\22" + "\27\32\5\23\27\33\23\26\33\22\27\32\23\26\33\23\27\33\202\22\27\33\1" + "\23\27\33\204\22\27\33\3\23\27\33\22\27\32\22\27\33\202\23\27\33\205" + "\22\27\33\5\23\26\33\22\26\33\23\27\33\22\27\33\23\26\33\204\22\27\33" + "\2\22\30\34\23\27\34\202\23\27\33\2\22\27\34\23\27\34\202\23\30\34\1" + "\22\27\34\202\23\30\34\7\23\27\34\22\30\34\22\27\34\23\27\34\22\30\34" + "\23\30\33\23\27\33\202\22\27\34\7\23\27\33\22\30\34\23\27\34\23\30\34" + "\22\27\34\23\30\34\23\27\33\202\23\30\33\11\23\30\34\23\27\33\22\30\34" + "\23\27\34\23\30\34\22\30\34\23\30\33\23\30\34\23\27\33\203\23\27\34\7" + "\22\30\34\23\27\34\22\27\33\23\30\33\23\27\33\23\27\34\22\30\34\202\23" + "\30\34\2\22\27\34\22\27\33\202\23\30\34\202\22\27\34\1\23\27\34\202\23" + "\30\34\15\23\27\34\22\30\34\23\30\34\22\27\34\23\30\33\22\27\34\22\30" + "\34\22\30\33\22\27\34\23\30\34\23\27\34\23\30\34\23\27\33\202\23\27\34" + "\1\23\27\33\202\23\27\34\11\23\30\34\22\30\34\23\30\34\22\27\33\22\30" + "\34\22\27\34\23\30\34\23\27\34\22\27\34\203\23\30\34\202\23\27\34\202" + "\23\30\34\202\22\30\34\1\22\27\34\203\23\30\34\202\23\27\34\6\22\30\34" + "\22\27\34\23\30\34\22\30\34\23\27\34\23\27\33\202\23\30\34\7\23\27\33" + "\23\30\34\23\30\33\23\27\33\22\27\34\23\30\33\23\30\34\202\23\27\34\202" + "\22\27\34\14\23\27\34\23\27\33\23\27\34\22\30\34\23\30\33\23\27\34\22" + "\30\33\23\27\34\23\27\33\22\27\34\23\30\34\23\27\34\202\23\30\34\14\23" + "\30\33\23\30\34\23\27\33\22\27\34\23\27\34\24\30\34\22\30\34\26\33\37" + "\24\30\35\26\33\36\22\30\34\23\27\34\202\23\30\34\12\22\27\34\23\30\34" + "\22\30\34\23\30\34\23\27\34\23\30\34\23\27\33\23\30\34\23\27\34\23\27" + "\33\202\22\30\34\202\23\27\34\26\23\30\34\22\30\34\23\30\34\22\27\33" + "\23\27\33\23\30\33\23\27\34\22\27\33\23\27\34\23\27\33\23\30\34\22\27" + "\34\22\30\34\23\30\34\22\30\34\23\27\34\22\27\34\23\27\34\23\30\33\22" + "\30\34\22\27\34\23\27\34\202\22\30\34\3\22\30\33\23\27\34\23\30\34\202" + "\22\27\34\6\23\27\34\22\30\34\23\30\34\22\27\34\22\30\34\23\27\33\202" + "\23\30\34\202\23\27\34\11\23\30\34\23\30\33\22\27\34\23\27\34\22\27\34" + "\22\30\34\22\27\34\23\30\34\23\27\34\202\22\30\34\13\23\30\34\23\27\34" + "\22\30\33\23\27\34\22\30\34\23\30\34\23\27\33\22\27\34\22\30\33\23\30" + "\34\22\30\34\202\23\27\34\202\22\30\34\13\23\30\33\22\27\33\22\27\34" + "\23\27\34\22\27\33\23\27\33\22\27\33\23\30\34\22\30\34\23\30\34\23\30" + "\33\202\23\30\34\12\23\30\33\23\27\33\23\27\34\22\27\34\22\30\34\22\27" + "\34\23\30\34\23\27\34\23\30\34\22\27\34\204\23\30\34\10\22\30\34\23\27" + "\34\22\27\34\22\27\33\23\30\34\23\27\33\23\30\34\23\30\33\203\23\30\35" + "\3\22\31\34\23\30\35\23\30\34\203\23\30\35\2\23\30\34\23\31\35\206\23" + "\30\35\2\22\30\35\22\30\34\202\23\30\34\205\23\30\35\2\23\30\34\22\30" + "\35\202\23\30\35\6\23\31\34\22\30\35\23\30\34\22\30\35\23\31\34\22\30" + "\35\211\23\30\35\1\22\30\35\206\23\30\35\2\22\30\35\23\30\34\206\23\30" + "\35\3\22\30\34\23\30\35\23\31\34\203\23\30\34\4\23\30\35\22\30\35\23" + "\30\35\22\30\35\202\23\30\35\202\22\30\35\205\23\30\35\1\23\31\35\203" + "\23\30\35\1\23\30\34\202\23\30\35\3\23\30\34\23\30\35\23\30\34\206\23" + "\30\35\6\22\30\35\22\30\34\23\30\35\22\30\35\23\30\34\22\30\35\202\23" + "\30\35\1\23\30\34\205\23\30\35\1\23\30\34\203\23\30\35\2\23\30\34\23" + "\31\34\202\23\30\35\6\23\30\34\23\30\35\22\30\35\23\31\35\23\31\36\23" + "\30\35\202\22\30\35\203\23\30\35\7\23\31\34\23\30\35\22\30\35\23\31\35" + "\22\30\34\23\30\35\22\30\35\202\23\30\34\10\23\30\35\25\31\36#%\"\40" + "$'\36\"'\23\30\35\24\31\35\24\31\36\204\23\30\35\3\23\30\34\23\30\35" + "\22\31\35\202\22\30\35\2\23\30\34\23\31\35\202\23\30\35\1\23\31\34\204" + "\23\30\35\2\22\31\34\22\30\35\202\23\30\35\202\23\30\34\7\22\30\34\23" + "\30\35\22\30\35\23\30\35\22\30\35\23\30\35\22\30\34\202\23\30\35\2\23" + "\31\34\22\30\34\202\23\30\35\2\22\30\35\23\30\34\202\23\30\35\1\23\31" + "\35\203\23\30\35\3\22\30\35\23\31\35\22\30\35\202\23\30\35\1\23\31\35" + "\202\23\30\35\202\23\30\34\202\23\30\35\1\23\31\34\202\23\30\35\3\22" + "\30\35\23\30\35\23\31\35\202\23\30\35\1\22\31\35\204\23\30\35\3\23\30" + "\34\23\30\35\23\31\35\202\23\30\35\1\23\30\34\202\23\30\35\3\23\31\34" + "\23\30\35\23\30\34\204\23\30\35\3\22\30\35\23\31\35\23\30\34\202\23\30" + "\35\2\22\30\34\23\30\34\202\23\30\35\2\23\31\35\22\31\35\204\23\30\35" + "\1\22\30\35\204\23\30\35\2\22\30\35\22\30\34\202\23\30\35\2\22\31\35" + "\23\30\35\203\23\30\34\202\23\30\35\1\22\31\35\202\23\31\36\1\23\31\35" + "\203\23\31\36\2\23\31\35\23\30\36\203\23\31\36\2\23\30\36\23\31\36\203" + "\23\31\35\3\23\30\36\23\31\36\23\31\35\204\23\31\36\1\23\30\36\203\23" + "\31\36\4\23\30\36\24\31\36\23\31\36\23\31\35\203\23\30\36\207\23\31\36" + "\3\23\31\35\23\31\36\23\30\36\203\23\31\36\1\23\31\35\202\23\31\36\202" + "\23\30\36\2\23\31\35\23\30\36\204\23\31\36\202\23\31\35\205\23\31\36" + "\1\23\31\35\202\23\31\36\202\23\31\35\203\23\31\36\3\23\31\35\23\30\35" + "\23\31\35\203\23\31\36\1\23\31\35\202\23\31\36\1\24\31\36\203\23\31\36" + "\202\23\30\36\6\23\31\36\23\31\35\23\31\36\23\30\36\23\31\36\23\31\35" + "\202\23\31\36\202\23\30\36\205\23\31\36\1\23\31\35\210\23\31\36\203\23" + "\31\35\202\23\31\36\3\23\30\36\26\33\40\26\34!\202\24\32\37\24\23\30" + "\35\24\32\36\25\33\40\40%*049059/37-15*/2(-1&+.$(-\"&,\"',\40%*\37%)" + ":>@\202e\21iR\21%*-\202\23\31\36\1\24\31\37\203\23\31\36\202\23\30\36" + "\1\23\31\35\205\23\31\36\1\23\30\36\202\23\31\36\3\23\31\35\23\31\36" + "\23\31\35\202\23\31\36\202\23\31\35\202\23\31\36\2\23\31\35\23\30\36" + "\206\23\31\36\202\23\30\36\5\23\31\36\23\30\36\23\31\36\23\30\35\23\30" + "\36\204\23\31\36\202\23\31\35\1\23\30\36\205\23\31\36\1\23\30\36\202" + "\23\31\36\2\23\30\36\23\31\36\202\23\30\36\4\23\31\36\23\31\35\23\31" + "\36\24\31\36\204\23\31\36\3\23\31\35\23\31\36\23\31\35\203\23\31\36\2" + "\23\31\35\23\30\35\207\23\31\36\1\23\30\36\202\23\31\36\2\23\30\36\23" + "\31\35\203\23\31\36\202\23\30\35\1\23\31\35\203\23\31\36\202\23\31\35" + "\202\23\31\36\1\23\30\36\203\23\31\36\20\23\31\35\24\31\35\23\30\35\23" + "\31\35\23\30\36\23\31\36\23\31\35\23\31\36\23\31\35\23\31\36\23\30\36" + "\23\31\36\23\30\36\23\31\35\23\31\36\23\31\37\202\23\32\37\202\23\31" + "\37\6\23\32\37\24\31\36\23\31\37\24\32\37\23\31\37\23\32\37\202\23\31" + "\37\202\23\32\37\203\23\31\37\202\23\32\37\1\23\31\36\202\23\31\37\2" + "\24\31\37\23\31\36\202\23\31\37\6\23\32\37\23\31\36\23\32\36\23\31\37" + "\24\31\37\23\32\37\202\23\31\37\1\23\31\36\202\23\31\37\5\23\32\37\23" + "\31\37\23\31\36\23\31\37\23\32\37\203\23\31\37\4\24\31\36\23\32\37\23" + "\31\37\23\32\37\203\23\31\37\2\23\32\36\23\32\37\202\23\31\37\14\24\32" + "\37\23\32\37\23\31\37\23\32\37\23\32\36\23\31\36\23\31\37\23\32\37\23" + "\31\37\23\32\37\23\32\36\23\31\37\202\23\32\36\2\23\31\37\23\31\36\202" + "\24\31\37\1\23\32\36\202\23\31\37\1\23\32\37\202\23\31\37\14\24\31\37" + "\23\31\37\24\31\37\23\31\36\23\32\37\23\32\36\23\31\37\24\31\37\23\31" + "\37\24\31\37\23\31\36\24\31\36\204\23\32\37\6\23\31\37\24\32\36\23\31" + "\37\23\32\36\23\31\37\23\32\37\202\23\31\37\3\23\32\37\24\32\37\23\31" + "\37\202\24\31\36\1\23\32\37\202\23\31\37\36\23\32\36\23\31\37\23\32\37" + "\24\32\40\26\33!\24\32\37\23\31\37\25\33\37\27\35#\"'+/48:=\77JKKQQQ" + "VWW__`eeeccd`aa]^_TVWKLN>@A@AC@BCKA#\314\226\2\312\226\11(+)\23\32\36" + "\203\23\31\37\1\24\31\37\204\23\31\37\13\23\32\36\23\32\37\24\31\37\24" + "\32\37\24\31\37\23\31\37\23\32\37\23\32\36\23\32\37\24\31\37\23\31\36" + "\202\23\32\37\3\23\31\37\23\32\37\23\31\37\202\24\31\37\206\23\31\37" + "\1\23\32\37\202\23\31\37\14\24\32\37\23\31\36\23\31\37\23\32\37\24\32" + "\36\24\31\37\24\32\37\23\31\36\23\31\37\24\32\37\23\31\37\24\31\37\202" + "\23\31\37\2\24\31\37\23\32\37\202\23\31\37\6\23\32\37\24\31\37\23\31" + "\36\23\31\37\23\32\37\24\32\37\202\23\32\37\2\24\31\36\23\32\37\202\23" + "\31\37\2\23\32\37\23\31\37\202\23\31\36\2\23\31\37\24\32\37\202\23\31" + "\37\1\23\32\37\202\23\31\37\1\23\32\37\202\23\31\36\7\23\32\37\24\31" + "\37\23\31\37\23\32\37\23\31\36\23\32\37\24\32\37\207\23\31\37\2\23\32" + "\37\23\31\36\202\23\32\37\1\23\31\37\202\23\32\37\202\23\31\37\203\23" + "\31\36\11\23\31\37\24\32\37\23\31\37\23\32\37\23\31\37\24\32\37\23\32" + "\37\23\31\37\23\32\37\202\23\31\36\1\23\31\37\202\23\32\37\4\24\32\40" + "\23\32\40\23\32\37\24\32\40\202\23\32\40\1\23\32\37\202\24\32\40\203" + "\23\32\40\1\23\32\37\213\23\32\40\1\24\32\40\202\23\32\40\1\24\32\40" + "\202\23\32\40\202\24\32\40\202\23\32\40\4\24\32\40\24\32\37\23\32\40" + "\24\32\40\202\23\32\40\202\24\32\40\206\23\32\40\203\24\32\40\203\23" + "\32\40\1\24\32\40\202\23\32\40\5\24\32\40\23\32\40\24\32\40\23\32\40" + "\24\32\40\203\23\32\40\203\24\32\40\6\23\32\40\23\32\37\23\32\40\24\32" + "\40\23\32\40\23\32\37\204\23\32\40\1\24\32\40\207\23\32\40\6\24\32\40" + "\23\32\40\24\32\40\23\32\40\23\32\37\24\32\40\203\23\32\40\202\23\32" + "\37\203\24\32\40\204\23\32\40\1\24\33\40\204\23\32\40\1\23\32\37\205" + "\23\32\40\15\23\32\37\23\32\40\24\33!\26\34\"\34#)&+/&),78:abb\221\221" + "\221\275\275\275\344\344\344\357\357\357\205\361\361\361\16\357\357\357" + "\350\350\350\321\321\321\271\271\271SQI\201_\3\355\256\2\323\234\11/" + "+\36\40%*\25\34\"\24\32\40\23\32\40\23\32\37\202\23\32\40\203\24\32\40" + "\4\23\32\40\24\32\40\23\32\40\24\32\40\205\23\32\40\1\24\32\40\204\23" + "\32\40\1\24\32\40\202\23\32\40\1\24\32\37\202\23\32\40\202\23\32\37\205" + "\23\32\40\202\24\32\40\3\23\32\40\23\33\40\24\32\40\202\23\32\40\1\24" + "\32\40\202\23\32\40\10\24\32\40\23\32\40\24\32\40\23\32\37\24\32\37\23" + "\32\37\23\32\40\24\32\40\203\24\32\37\6\23\32\40\24\32\40\23\32\40\24" + "\32\40\23\32\37\23\32\40\204\24\32\40\1\23\32\40\202\24\32\40\202\23" + "\32\40\1\24\32\40\202\23\32\40\1\24\32\40\203\23\32\40\2\24\32\40\23" + "\32\37\203\23\32\40\1\24\32\40\204\23\32\40\2\24\32\37\23\32\40\202\24" + "\32\40\204\23\32\40\202\24\32\40\202\24\32\37\6\24\32\40\23\32\40\23" + "\32\37\24\32\40\23\32\37\24\32\40\207\23\32\40\2\23\32\37\24\32\40\203" + "\23\32\40\204\24\33!\2\24\33\40\23\33!\203\24\33!\3\24\32!\23\33!\24" + "\32!\202\24\33!\4\23\33!\24\32!\23\33!\23\32\40\202\24\33!\12\23\32!" + "\24\32!\23\33!\24\32!\24\33!\23\32!\23\33!\23\33\40\24\32!\24\33!\202" + "\23\33!\3\24\33!\23\33!\23\33\40\202\23\33!\2\23\32!\23\33\40\202\24" + "\33!\1\24\32\40\202\24\33!\2\23\33!\23\33\40\202\24\33!\1\24\33\40\204" + "\24\33!\3\23\32!\24\32!\23\32\40\202\23\33!\2\24\33!\24\33\40\203\23" + "\32!\1\24\33!\202\23\33!\3\24\33!\23\33\40\23\32!\204\23\33!\2\24\32" + "!\23\33!\203\24\33!\7\23\33!\23\33\40\24\32!\23\33!\24\32!\23\33!\24" + "\33!\202\24\32!\20\23\32!\24\33!\24\32!\23\33!\24\33!\24\32!\23\32!\24" + "\33!\24\33\40\24\33!\23\33\40\24\33!\23\33!\24\32!\24\33!\23\33!\203" + "\23\32!\3\23\33!\23\32!\24\33!\203\23\33!\20\24\32!\23\33!\23\32!\24" + "\32!\27\37$&,1,04035\\]]\225\225\225\312\312\312\357\357\357\362\362" + "\362\363\363\363\367\367\367\365\365\365\204\361\361\361\17\360\360\360" + "\356\356\356\346\346\346\335\335\335\276\276\276XJ$\273\211\0\361\261" + "\3\323\235\11""3+\26*,-(+0\35#)\27\36$\24\33\"\202\24\33!\5\23\32!\23" + "\33!\24\33!\23\33!\24\33!\202\23\33!\4\23\32!\24\33\40\24\33!\24\32!" + "\202\23\33!\1\23\33\40\202\24\33!\4\24\33\40\23\32!\24\33!\24\32!\202" + "\24\33!\6\23\33!\24\32!\24\33!\23\33!\24\32!\23\32!\202\23\33!\3\23\32" + "!\24\32!\24\33!\202\23\33!\1\24\33!\202\23\32!\2\24\32\40\24\33!\202" + "\24\32!\5\23\32!\24\32\40\24\33!\23\33!\24\33!\202\23\33!\2\24\33!\24" + "\33\40\203\24\33!\3\23\32!\24\33!\23\32!\202\24\32!\12\24\33!\23\33!" + "\23\32!\24\33!\23\33!\24\33!\23\33\40\24\33!\23\33!\24\33!\203\23\32" + "!\2\23\33!\24\33!\202\23\33!\1\24\33!\202\23\32!\3\24\33!\24\32!\23\33" + "!\203\24\33!\202\23\33!\4\24\33!\23\33!\23\32!\23\33!\203\24\33!\202" + "\24\32!\13\24\33!\24\33\40\24\33!\24\32!\24\33!\23\33!\24\32!\23\33!" + "\23\33\40\24\32!\23\33!\202\24\33!\4\23\33!\24\33!\23\33!\24\33\40\202" + "\24\33\"\16\24\34\"\23\33\"\24\34\"\23\34\"\24\33\"\23\33\"\23\34\"\24" + "\34\"\24\33#\24\33\"\24\34\"\23\33\"\23\34\"\24\33\"\203\23\33\"\2\24" + "\33\"\23\33\"\202\24\33\"\202\24\34\"\202\24\33\"\1\23\34\"\202\24\33" + "\"\202\24\34\"\2\24\33\"\23\33\"\204\24\33\"\1\24\34\"\203\24\33\"\5" + "\24\34\"\24\33\"\23\33\"\24\33\"\24\34\"\203\24\33\"\7\23\33\"\24\33" + "\"\23\33\"\24\33\"\23\34\"\24\33\"\24\34\"\204\24\33\"\205\24\34\"\205" + "\24\33\"\4\23\33\"\24\34\"\24\33\"\23\33\"\202\24\34\"\1\23\33#\202\24" + "\33\"\5\24\34\"\23\34\"\24\33\"\23\33\"\23\34\"\203\24\33\"\13\23\33" + "#\24\33\"\23\34\"\24\33\"\23\33\"\23\34\"\23\33\"\24\34\"\24\33\"\23" + "\34\"\24\33\"\202\24\34\"\2\23\33\"\24\34\"\207\24\33\"\1\24\34\"\202" + "\24\33\"\17\23\33\"\23\34\"\33!)-36678jjk\261\261\261\345\345\345\365" + "\365\365\367\367\367\370\370\370\372\372\372\370\370\370\372\372\372" + "\373\373\373\204\371\371\371\24\367\367\367\363\363\363\351\351\351\333" + "\333\333vtp\213h\7\327\236\0\367\266\4\325\236\11VM6\215\215\215fgg*" + "-0\37$*\27\36%\25\34#\23\33\"\24\33\"\23\34\"\23\33\"\202\24\33\"\1\24" + "\34\"\202\24\33\"\5\24\34\"\24\33\"\23\33\"\24\33\"\24\34\"\202\24\33" + "\"\1\23\33\"\203\24\33\"\1\23\33\"\203\24\33\"\1\24\34\"\202\24\33\"" + "\1\24\34\"\203\24\33\"\1\24\34\"\206\24\33\"\1\24\34\"\206\24\33\"\6" + "\24\34\"\23\33\"\24\33\"\24\34\"\24\33\"\23\33\"\202\24\33\"\1\23\34" + "\"\202\24\33\"\1\23\34\"\202\24\33\"\11\23\34\"\23\33\"\24\34\"\23\34" + "\"\24\33\"\24\34\"\24\33\"\23\34\"\24\34\"\202\24\33\"\203\23\33\"\203" + "\24\33\"\1\23\33\"\204\24\33\"\202\24\34\"\2\23\34\"\24\34\"\202\23\33" + "\"\1\24\34\"\202\24\33\"\7\23\33\"\24\33\"\23\34\"\24\34\"\23\33\"\24" + "\34\"\23\33\"\202\24\33\"\4\24\34\"\24\33\"\23\33\"\24\33\"\202\24\34" + "\"\11\24\33\"\23\34\"\24\33\"\23\33\"\24\33\"\23\34\"\23\33\"\24\33\"" + "\24\34\"\214\24\34#\3\24\35#\24\34#\24\34$\203\24\34#\1\24\34$\202\24" + "\34#\1\24\34$\204\24\34#\1\24\34$\216\24\34#\1\24\34$\203\24\34#\2\23" + "\34#\24\35#\202\24\34#\1\24\34$\204\24\34#\1\23\34$\203\24\34#\1\24\34" + "$\202\24\34#\1\23\34$\203\24\34#\2\24\34$\23\34#\203\24\34#\1\24\34$" + "\202\24\34#\1\24\34$\206\24\34#\1\24\34$\203\24\34#\3\24\35#\24\34#\24" + "\34$\207\24\34#\1\24\34$\204\24\34#\1\23\34#\202\24\34#\2\24\35$\24\34" + "$\211\24\34#\7\26\36%$*0$')NOO\262\262\262\355\355\355\374\374\374\202" + "\371\371\371\4\373\373\373\372\372\372\375\375\375\376\376\376\205\377" + "\377\377\22\376\376\376\373\373\373\366\366\366\355\355\355\303\303\303" + "aU5\260\201\1\345\247\0\372\270\4\331\242\11_S3\254\254\254\332\332\332" + "\250\250\251VWY\35\"&\31!'\25\35$\204\24\34#\1\24\35$\206\24\34#\1\23" + "\34#\211\24\34#\1\23\34#\204\24\34#\1\23\34#\206\24\34#\2\24\34$\24\34" + "#\202\23\34#\202\24\34#\1\24\34$\202\24\34#\2\24\34$\23\34#\203\24\34" + "#\1\24\34$\203\24\34#\1\24\34$\205\24\34#\4\23\34#\24\35#\24\34#\24\34" + "$\202\24\34#\3\24\35#\24\34#\24\34$\213\24\34#\3\24\34$\24\34#\24\34" + "$\206\24\34#\3\24\34$\23\34#\24\34$\203\24\34#\3\24\34$\24\34#\24\35" + "$\204\24\34#\202\24\34$\202\24\34#\1\24\34$\207\24\34#\7\23\34#\24\34" + "#\24\35$\24\34$\24\35$\24\34$\25\34%\202\24\35$\7\24\34$\24\35%\24\35" + "$\25\35$\24\35$\24\34$\25\35$\206\24\35$\3\24\35%\25\34$\24\35%\203\25" + "\35$\4\24\35$\24\34$\24\35$\25\35%\204\24\35$\1\24\34$\202\24\35$\4\25" + "\35%\25\35$\24\35$\25\35$\202\24\35$\6\24\34$\24\35$\25\35$\24\35$\25" + "\35$\24\34$\202\24\35%\202\24\35$\202\24\35%\207\24\35$\5\24\35%\24\34" + "$\24\35$\24\34$\24\34%\203\24\35$\6\24\35%\25\34%\24\35%\24\35$\24\34" + "$\25\34$\202\24\34$\3\24\35$\24\34$\25\35$\203\24\34$\1\24\35$\202\24" + "\35%\202\24\35$\203\24\34$\4\24\35%\24\35$\24\35%\24\34$\205\24\35$\5" + "\24\35%\24\35$\24\35%\24\34%\24\35$\202\24\34$\1\25\34%\202\24\34$\7" + "\24\35$\33#++05467\200\201\201\323\323\323\372\372\372\202\376\376\376" + "\202\374\374\374\202\376\376\376\207\377\377\377\33\375\375\375\371\371" + "\371\363\363\363\352\352\352\237\237\236jS\22\300\214\0\354\255\0\372" + "\270\4\340\247\12hW)\247\247\247\340\340\340\341\341\341\326\326\326" + "}~\177+/2\35$*\26\37&\24\34$\25\35$\24\35$\24\34$\24\34%\24\34$\24\35" + "$\24\35%\202\24\35$\1\24\34$\202\24\35$\11\24\34%\24\34$\25\34$\24\35" + "$\24\34%\24\34$\24\35$\25\35$\24\35$\202\24\34$\1\24\35%\202\24\35$\202" + "\24\34$\10\24\34%\24\35$\24\34$\25\35%\24\35%\24\34$\24\35$\24\34%\203" + "\24\35$\4\24\34$\24\34%\24\35$\25\34$\206\24\35$\1\24\34%\202\24\35$" + "\1\24\34%\202\24\35$\1\25\35$\202\24\35$\4\24\34$\24\35%\24\34%\24\34" + "$\202\24\35$\1\25\35$\202\24\35$\10\24\34%\24\35%\24\34%\24\35%\24\35" + "$\24\35%\24\34$\25\35%\202\24\35$\2\24\34$\24\35$\202\24\35%\203\24\35" + "$\1\24\34%\202\24\35$\3\24\35%\24\34$\24\34%\203\24\35$\4\25\35$\25\35" + "%\24\35$\25\35%\202\24\35$\1\24\34$\202\25\35$\2\24\35$\24\35%\202\24" + "\35$\2\25\35$\24\35%\202\24\34$\11\25\35$\24\35%\24\36%\24\35%\25\35" + "%\24\35%\24\35&\24\35%\25\35%\202\24\36%\202\25\35%\202\24\35%\202\24" + "\35&\5\24\36%\25\36&\24\36%\24\35%\24\35&\202\24\36&\25\24\36%\24\35" + "%\25\36&\24\36&\24\35%\24\35&\24\35%\24\36%\25\36%\24\35%\24\36%\24\35" + "%\24\36%\25\36%\24\35%\24\35&\24\36%\24\35%\24\36&\24\35%\24\36%\202" + "\24\36&\7\24\36%\24\36&\25\36%\25\35%\24\36&\24\35%\25\36%\202\24\35" + "%\11\25\36&\24\35&\25\36%\24\36%\24\35&\24\36%\24\35%\24\36%\24\35&\203" + "\24\36&\7\24\36%\25\35&\24\35%\25\36%\25\35&\24\35%\24\36%\202\24\35" + "%\7\25\36&\24\36%\24\35%\24\35&\24\36%\24\35%\24\35&\202\24\35%\5\24" + "\36&\25\36%\25\35%\24\35&\24\35%\202\24\36&\3\24\35%\24\36%\25\35%\202" + "\24\35%\7\25\36%\24\35%\25\36&\24\35%\24\36&\25\35&\25\35%\202\24\36" + "&\204\24\35%\10\26\36&\"*1&+/ABC\254\254\254\360\360\360\377\377\377" + "\376\376\376\214\377\377\377!\376\376\376\374\374\374\367\367\367\357" + "\357\357\337\337\337|xl}\\\3\315\226\0\362\261\0\372\270\4\341\247\11" + "jX)\253\253\253\350\350\350\353\353\353\347\347\347\332\332\332\242\243" + "\243CEG\34#)\26\37(\24\35%\24\36&\25\35%\24\35%\24\36&\24\36%\24\35&" + "\25\35&\25\36&\24\36&\24\35%\24\36&\202\24\35%\2\24\36%\24\36&\202\25" + "\35&\202\24\35%\2\25\35%\24\35%\202\24\36&\2\24\36%\24\35&\202\24\35" + "%\11\24\36%\24\35&\24\35%\24\36%\24\35%\24\36&\24\35%\24\36&\25\35%\202" + "\24\35%\1\24\36&\202\24\36%\16\24\35%\24\35&\24\36&\24\36%\25\35%\24" + "\35&\24\35%\25\35&\24\35%\24\35&\24\36%\25\35%\24\35%\25\35%\203\24\35" + "%\12\24\35&\25\36%\24\35%\24\36%\25\35%\25\35&\25\36%\24\35%\25\35%\24" + "\35%\202\24\35&\202\24\36&\3\25\36&\24\35&\25\35%\202\25\35&\2\25\36" + "&\25\35%\202\24\35%\1\24\35&\204\24\35%\2\25\35&\24\35&\202\25\35&\5" + "\24\35%\25\36%\25\35%\25\36&\24\36&\202\24\36%\203\25\35%\3\25\36%\24" + "\35%\25\36%\203\24\36&\202\24\35%\11\24\35&\24\36%\25\37&\24\36'\25\36" + "&\25\36'\24\36&\25\36&\25\36'\202\25\36&\202\24\36&\6\25\36'\24\36'\25" + "\37&\25\36&\25\36'\24\37'\203\25\36&\3\24\36'\25\36&\24\36&\202\24\36" + "'\1\25\36'\202\25\36&\2\24\36&\25\36&\203\25\36'\202\25\36&\5\24\36'" + "\24\36&\25\36&\25\36'\25\36&\202\24\36&\202\25\36'\5\25\36&\25\36'\25" + "\37&\25\36&\24\36'\202\25\36&\3\24\36'\25\37&\25\36&\202\25\36'\3\24" + "\36'\25\36'\24\36'\202\25\36&\16\24\36'\25\36&\24\36'\25\36&\25\36'\25" + "\36&\24\36&\25\36&\25\36'\24\36'\25\37'\24\37'\25\36&\25\36'\203\25\36" + "&\7\24\36&\25\36&\24\36&\24\36'\25\36&\24\36'\24\36&\202\24\36'\203\25" + "\36&\2\24\37&\25\36&\202\24\36&\2\25\36&\24\37'\202\25\36'\21\24\37&" + "\25\36&\24\36'\25\36&\25\36'\24\36'\24\36&\25\37'\24\36&\25\36'\25\36" + "&\26\37'-4;269QQR\277\277\277\366\366\366\217\377\377\377\31\376\376" + "\376\373\373\373\364\364\364\354\354\354\326\326\326d\\D\217i\2\325\233" + "\0\364\263\0\372\270\4\351\256\11s\\\36\244\244\244\360\360\360\366\366" + "\366\356\356\356\344\344\344\335\335\335\271\272\272OQR\40&+\30!)\24" + "\36'\24\36&\25\37'\202\25\36'\1\25\37'\202\25\36'\2\24\36'\25\36'\202" + "\24\36&\202\25\36'\6\25\36&\24\36'\24\36&\24\36'\25\36'\24\36'\202\25" + "\36'\4\24\36'\25\36&\24\36'\25\36'\202\25\36&\1\24\36&\203\25\36'\3\24" + "\37'\24\36&\25\36&\202\24\36&\1\24\36'\203\25\36'\203\25\36&\202\24\36" + "'\23\25\36&\25\36'\25\36&\24\37'\25\36'\25\36&\24\36'\25\36&\24\36'\25" + "\36&\25\36'\24\37&\25\36&\24\36&\25\36&\25\36'\25\37&\25\36'\24\36'\202" + "\25\36&\202\25\36'\13\24\36&\25\36'\24\36'\25\36&\24\37&\25\37'\25\36" + "&\24\36&\25\36&\24\36&\24\36'\202\25\36&\202\25\36'\3\25\36&\25\37&\24" + "\36'\202\24\36&\5\24\36'\24\36&\25\36'\24\36&\25\36'\205\24\36&\203\25" + "\36'\1\25\36&\202\25\36'\3\24\36'\24\37&\25\36'\202\24\36'\2\24\37(\25" + "\37'\204\25\37(\4\25\37'\24\37'\25\37(\24\37'\202\25\37(\14\24\37(\25" + "\36(\25\37(\24\37(\25\37(\24\37(\25\37(\24\37(\25\37(\24\37(\25\37'\25" + "\37(\202\25\36(\203\25\37(\3\24\37'\25\37(\25\37'\202\25\37(\1\24\36" + "(\202\25\37(\1\25\36(\202\25\37'\2\25\37(\25\36(\202\25\37'\204\25\37" + "(\3\25\37'\25\37(\25\37'\203\25\37(\2\24\37(\25\37'\203\25\37(\1\25\36" + "(\203\25\37(\202\24\37(\202\25\37(\4\24\37(\25\37(\25\37'\24\37'\202" + "\24\37(\14\25\36'\25\37(\25\36(\24\37(\25\36(\25\37(\25\36(\25\37(\25" + "\36'\25\37(\25\36'\24\36(\202\25\37(\3\25\36(\25\37(\25\36'\202\25\37" + "(\2\24\37'\24\37(\206\25\37(\3\24\37(\25\36'\25\37(\202\24\37(\2\25\37" + "(\25\37'\202\25\37(\5""2:A7:<\\\\\\\324\324\324\375\375\375\220\377\377" + "\377\30\376\376\376\372\372\372\362\362\362\351\351\351\322\322\322b" + "X\77\230p\2\335\242\0\367\265\0\372\270\3\355\261\11w^\30\235\235\235" + "\363\363\363\376\376\376\371\371\371\355\355\355\345\345\345\341\341" + "\341\303\303\303_`a\35$*\26\37)\24\37'\203\25\37(\2\24\37'\24\36(\202" + "\25\37(\202\25\37'\4\24\37(\25\37'\24\37(\25\37'\202\25\37(\3\24\37'" + "\25\37'\25\37(\203\25\37'\2\25\36(\24\37(\202\25\37'\2\24\36(\25\37'" + "\202\24\37(\2\25\37'\24\37(\210\25\37(\203\25\37'\203\24\37(\4\25\36" + "(\25\37(\24\37(\25\36'\202\25\37(\6\24\37(\25\36(\24\37(\25\37'\25\37" + "(\25\37'\202\25\37(\13\25\37'\25\37(\24\36(\25\37'\24\37'\25\37(\25\36" + "'\25\37(\25\37'\25\37(\25\37'\202\25\37(\3\24\36(\25\37(\24\37(\202\25" + "\37(\203\25\37'\2\25\37(\24\37(\203\25\37(\202\24\37(\6\24\36(\25\37" + "'\25\37(\24\37'\25\37(\24\36(\202\25\37(\202\25\36(\5\25\37'\25\37(\25" + "\37'\24\37'\25\36(\202\25\37(\5\24\37(\25\36(\25\37'\25\37(\25\40(\204" + "\25\37)\2\25\40)\25\37)\203\25\40)\1\25\37)\203\25\40)\14\25\37)\25\40" + ")\25\37)\25\40)\24\36(\24\36'\24\35&\23\35&\23\34%\23\35%\22\34$\23\34" + "$\202\23\35%\6\23\35&\24\36'\24\36(\25\37(\25\37)\25\40)\202\25\37)\5" + "\25\40)\24\37(\25\37)\25\40)\25\37)\204\25\40)\1\25\37)\202\25\40)\5" + "\24\37(\24\36'\23\36&\23\34%\23\35%\202\23\34%\3\23\34&\24\36'\24\37" + "(\202\25\40)\202\25\37)\1\25\40)\202\25\37)\2\25\40)\25\37)\203\25\40" + ")\202\25\37)\1\25\40)\202\25\37)\1\25\40(\203\25\37)\2\25\40)\25\40(" + "\202\25\37)\3\24\37'\24\36'\23\35&\204\23\35%\6\23\36&\23\35'\25\36(" + "\24\40)\25\40)\24\40)\203\25\40)\1\25\37)\205\25\40)\1\25\37)\202\25" + "\40)\5#.6>@BJJJ\300\300\300\376\376\376\221\377\377\377\30\375\375\375" + "\370\370\370\360\360\360\347\347\347\277\277\276SA\21\270\206\0\345\250" + "\0\363\262\0\370\266\1\357\261\10z_\25\235\235\235\363\363\363\377\377" + "\377\376\376\376\370\370\370\357\357\357\346\346\346\335\335\335\272" + "\272\272MOQ\34%,\26!*\202\25\37)\2\25\40)\25\40(\203\25\40)\1\25\37)" + "\203\25\40)\203\25\37)\1\25\37(\202\25\40)\203\25\37)\11\25\36'\24\37" + "'\23\34&\23\33$\22\33#\21\32\"\21\32!\21\31\40\20\30\40\202\20\31\40" + "\10\21\31\40\21\31!\21\32\"\21\33#\23\35%\24\36&\24\36(\25\40)\202\25" + "\37)\203\25\40)\2\25\37)\25\40)\204\25\37)\202\25\40)\2\25\37)\24\37" + ")\202\25\37)\15\25\40)\25\36(\24\36'\23\35&\23\33$\22\33#\21\32\"\21" + "\31!\21\30\40\20\31\40\20\31\37\20\30\40\21\31\40\202\21\31!\5\21\33" + "\"\22\34#\23\34%\24\35&\24\36'\202\25\37)\14\25\40)\25\37)\25\40)\25" + "\37)\25\40(\25\37)\25\40)\25\37)\24\37(\24\36&\23\35%\22\34$\202\22\33" + "#\6\22\33$\23\34%\24\36'\24\36(\25\40)\25\37)\205\25\40)\202\25\37)\203" + "\25\40)\10\25!*\25\40*\26\40*\25\40*\25!*\26\40*\25!*\25\40*\202\25!" + "*\202\25\40*\1\25\40+\202\26\40*\202\25\40*\20\24\37)\23\35'\22\34$\21" + "\32\"\20\30\37\17\26\35\17\26\34\16\25\34\16\26\34\17\26\35\17\27\36" + "\20\31\40\21\32#\23\34%\24\36'\25\40)\202\25\40*\1\25!*\203\25\40*\33" + "\25!*\25\40*\26\40*\26\40+\25!*\25\40*\25!*\25\40*\24\40*\24\35'\22\34" + "$\20\31!\17\27\36\17\26\35\16\26\35\17\27\36\21\31\40\21\33#\23\36&\25" + "\37(\25\40*\26\40*\25\40*\26!+\25\40*\26\40+\25!+\202\25\40*\1\25!*\202" + "\25\40*\3\26\40*\25\40*\25!*\202\25\40+\3\25\40*\25\40+\25\40*\202\25" + "!*\6\25\40*\25\37)\24\36'\21\33#\20\30\40\17\26\35\202\16\26\34\15\17" + "\27\36\21\31\40\22\33$\24\36'\25\37)\25\40*\25!*\25!+\25\40*\25\40+\25" + "\40*\26!*\25!*\202\25\40*\1\25\40+\202\25\40*\7\32$.FJN777\242\242\242" + "\360\360\360\375\375\375\376\376\376\220\377\377\377\16\374\374\374\366" + "\366\366\356\356\356\345\345\345\211\207\200xY\3\323\232\0\353\254\0" + "\316\227\1\314\226\1\351\254\4x_\32\244\244\244\364\364\364\202\377\377" + "\377\10\376\376\376\372\372\372\357\357\357\344\344\344\334\334\334\261" + "\261\261/36\32$-\202\25\40*\4\25!*\25\40*\26\40+\25\40+\202\25\40*\2" + "\26\40*\25!*\202\25\40*(\25!*\25\40*\25\40+\26\40*\25!+\25\40*\26!*\25" + "\40*\24\37(\22\34%\20\31!\16\25\33\13\21\27\12\17\24\10\15\21\10\14\20" + "\7\13\17\7\13\16\7\13\17\10\14\20\11\16\22\12\20\24\14\23\31\17\26\35" + "\21\32#\23\36&\25\40)\25!*\25\40*\25!*\25\40+\25!*\26!*\26\40*\26\40" + "+\25!*\25\40*\26\40+\25!*\25\40*\202\25\40+\27\25\40*\25!*\25\40)\24" + "\36(\22\34$\20\30\40\16\25\33\14\22\27\12\17\24\11\15\21\10\14\17\10" + "\13\16\7\13\16\7\13\17\10\14\17\11\15\20\11\16\22\12\20\25\14\23\31\16" + "\26\35\21\32\"\23\34%\24\37(\202\26\40*\1\25!+\202\25!*\203\25\40*\14" + "\25\37)\23\35&\21\32#\16\26\35\15\24\32\14\23\30\15\23\30\15\24\32\17" + "\26\35\21\32#\23\35'\25\37)\202\25\40*\1\26\40+\202\25\40*\35\25!*\25" + "\40+\25!*\25\40*\26!*\25\40*\25!,\26!,\25!,\25!+\26!,\25!,\26!+\25!," + "\26!+\26!,\26!+\25!,\25!+\25\40*\25\40)\23\36(\22\34%\20\31!39>06:`c" + "f^ac\203\204\206\203\202\204\205\17z|}{|~VZ]Y\\`&,2'/5\21\32#\22\35&" + "\24\37)\24\40)\26!*\26!,\25!+\26!,\26!+\202\25!,\26\25!+\26!*\25\40*" + "\24\36'\22\33$.6<,27tvysuv\202\204\205\203\204\205vxzwz|8=A:@E\21\32" + "\"\22\35%\25\37)\25\40*\25\",\25!+\25!,\203\25!+\3\25!,\26!+\26!,\202" + "\25!+\16\26!+\25!+\26!,\25!,\25!+\25!,\25\",\26!,\26!+\25\37)\22\33$" + "fkndgi\203\205\206\202\202\204\205\10\203\205\207X\\_[_c\22\34$\24\37" + "*\26\",\25!+\26!+\204\25!+\15\26!+\25!,\26!+\25!,\25!+\27\"-/7<81\32" + "KJG\240\240\240\320\320\320\360\360\360\373\373\373\217\377\377\377\17" + "\376\376\376\373\373\373\365\365\365\354\354\354\336\336\336PI6\266\206" + "\1\356\256\1\256\201\6\\J\30sU\3\264\204\1r_,\270\270\270\366\366\366" + "\203\377\377\377\10\376\376\376\372\372\372\356\356\356\343\343\343\330" + "\330\330\217\220\221#*0\27#.\202\25!+\1\26!+\202\25!,\5\25!+\26!+\25" + "!,\25!+\26!,\202\25!,\2\26!,\25!+\202\25!,\7\25\40*\24\37(\22\35&\40" + "'/\34$({}\200yz{\202\310\310\310\202\362\362\362\204\377\377\377\202" + "\325\325\325\10\232\232\233\233\235\235+04.5:\21\33#\24\36(\24\40)\26" + "!*\202\26!+\202\25!+\20\26!+\26\"+\25!,\26!+\25\"+\25!+\26!+\25!,\25" + "\40+\25\40(\22\34%\20\31!INSGJM\247\250\251\246\246\247\202\331\331\331" + "\204\377\377\377\202\367\367\367\202\320\320\320\12\232\232\233\233\234" + "\2357;\77:\77E\20\32\"\22\35&\25\37*\25\40+\26!+\26!,\202\25!+\6\25\40" + "*\24\37(4@777\202\277\277" + "\277\216\377\377\377\202\256\256\256\16'(),/3\16\25\35\21\34%\24!,\25" + "\".\26$/\26#/\26#.\25\",\21\33%\13\22\30pqrooo\202\373\373\373\210\377" + "\377\377\202\246\246\246\4\22\25\27\30\37%\22\34&\24!,\206\26#/\1\26" + "$/\203\26#/\3\26$/\26#0\26$/\202\26#/\1\26$/\202\26#/\2\23\36(\14\23" + "\31\202\273\273\273\204\377\377\377\7\242\242\242\243\243\244\15\25\34" + "\23\36*\26#/\26#0\26$/\202\26#/\203\26$/\202\26#0\20\26$/\35(3NC\31\274" + "\211\0\350\252\0\372\270\2\372\271\7\350\255\13_L\31][V\244\244\244\332" + "\332\332\352\352\352\366\366\366\374\374\374\376\376\376\210\377\377" + "\377\16\376\376\376\372\372\372\365\365\365\356\356\356\273\273\273g" + "W)\307\222\1\366\265\4oS\7\245\244\242\354\354\354\372\372\372\371\371" + "\371\363\363\363\202\376\376\376\206\377\377\377\10\373\373\373\354\354" + "\354\335\335\335\317\317\317{}\177\37(1\31&2\26$/\205\26#/\202\26$/\203" + "\26#/\6\25\".\24!+\20\32\"\13\22\30SUVQQQ\202\352\352\352\216\377\377" + "\377\202\373\373\373\202\200\200\200\4\10\15\22\16\27\36\23\36)\25!." + "\202\26#/\1\26$0\202\26#/\7\26$/\26#/\26#.\24!+\21\33$\32!&\25\27\30" + "\202\263\263\263\222\377\377\377\202\235\235\235\12\22\25\27\30\37%\22" + "\34&\24\40+\26$/\26#/\25\"-\23\37(EKO>\77@\206\377\377\377\10&),.6<\24" + "\40+\25#.\26#0\26#/\26$/\26#0\202\26$/\3\26#/\26$/\26#/\204\26$0\3\26" + "%1\26$0\26%0\202\27$0\6\26$0\25#0\23\40+\20\32#psvlmn\202\373\373\373" + "\222\377\377\377\202\367\367\367\4XZ\\]bf\22\36&\24\"-\202\27$0\4\25" + "\".\23\36*QW[KMO\216\377\377\377\7\304\304\304\305\306\307\22\33#\27" + "#-\27%0\27$0\26$0\202\27$1\1\26%0\202\26$0\7\27%0\27%1\27$0\26$0\26$" + "1\27%0\26$1\202\26%0\3\26$0\23\37)\13\22\31\202\273\273\273\204\377\377" + "\377\13\242\242\242\243\243\243\15\25\34\23\37)\26$0\26$1\26$0\26$1\26" + "%0\27$1\27$0\203\26$0\23\26%1%-3\200_\5\270\207\0\340\245\0\370\266\0" + "\372\270\3\371\270\6\353\256\11\300\220\14oW\26^WD\226\225\220\304\304" + "\304\342\342\342\360\360\360\371\371\371\375\375\375\376\376\376\205" + "\377\377\377\15\375\375\375\370\370\370\362\362\362\350\350\350\213\210" + "\200~^\6\346\251\1\323\234\6eW1\314\314\314\364\364\364\374\374\374\376" + "\376\376\211\377\377\377\11\376\376\376\366\366\366\344\344\344\330\330" + "\330\265\265\2658=A\35)4\26$1\26$0\202\27$1\5\26$0\26%1\26$0\27$1\27" + "$0\202\26%0\4\24\40,\21\33%pswklm\226\377\377\377\5\231\231\231\233\235" + "\237\16\30\37\23\37)\25#/\204\26$0\5\27$1\25#0\25!-!*2\32!&\202\331\331" + "\331\226\377\377\377\12\304\304\304\305\306\307\27\37'\33(2\26#/\26$" + "1\25#/\23\36)DKO>>\77\206\377\377\377\6%(*.6=\24!,\25#/\27$0\26%0\203" + "\26$0\6\26$1\26$0\26$1\26$0\26$1\26%2\205\27%2\10\26%2\27%2\26$1\25\"" + ".\21\34&\13\23\31klmjjj\202\373\373\373\222\377\377\377\202\367\367\367" + "\12UUUX[]\16\30\40\23\40+\27$1\26%2\24\"-\21\34%NRVHHH\216\377\377\377" + "\202\304\304\304\4\20\30\37\26#-\27%1\26%2\202\27%2\2\26%2\27%2\202\26" + "%2\202\27%2\202\26%2\1\27%2\202\26%2\1\27%2\202\26%2\2\22\37*\13\23\32" + "\202\273\273\273\204\377\377\377\4\242\242\242\243\243\243\15\25\35\24" + "\40+\202\26&2\3\26%2\27%2\26%2\202\27%2\30\26%1\27%2\26%2\32)5>\77\206\377\377\377\5%(*." + "6>\24\"-\26$/\27%2\202\26%2\203\27%2\2\26%2\27%2\202\26%2\2\27&3\26&" + "3\205\27&3\5\26&3\25#/\22\36)\\afWYZ\210\377\377\377\202\341\341\341" + "\202\235\235\235\202\204\204\204\202\263\263\263\202\367\367\367\206" + "\377\377\377\202\362\362\362\10\34$)#.8\25%2\26&3\24!-\17\30!\253\254" + "\255\252\252\252\204\377\377\377\202\373\373\373\202\231\231\231\202" + "\346\346\346\204\377\377\377\10\256\256\256\257\257\257\26\34$\33(2\27" + "%3\26&3\27&3\27&4\202\27&3\10\26%3\27&3\27&4\27%2\26%1\26$0\24#/\24\"" + "0\202\25#/\4\26$0\25%1\22\37*\13\23\32\202\273\273\273\204\377\377\377" + "\4\242\242\242\243\243\243\15\26\35\23!,\202\27&3\3\27%3\26&4\27&4\205" + "\27&3\26&3\77ACDKIDXC\10\250{\0\341\245\0\366\264\0\372\267\0\372\267" + "\1\372\270\2\372\270\4\372\271\6\365\266\10\330\241\10\243{\15jV\40U" + "QI\227\227\225\312\312\311\342\342\342\360\360\360\370\370\370\202\375" + "\375\375\13\372\372\372\363\363\363\354\354\354\274\273\272WB\12\324" + "\233\0\355\257\5{b\36\245\245\245\363\363\363\376\376\376\214\377\377" + "\377\7\376\376\376\365\365\365\342\342\342\324\324\324\236\237\23749" + "=\36,9\203\26&3\203\27&3\6\26%4\27&3\26$1\24!.:CI47:\202\373\373\373" + "\206\377\377\377\202\225\225\225\6""333579\11\15\20\11\15\21),.'()\202" + "\200\200\200\202\362\362\362\206\377\377\377\4kklpsw\22\35'\24#0\202" + "\27&3\6\27&4\27%2\24\40,\16\30\40\264\265\266\263\263\263\206\377\377" + "\377\202\341\341\341\202fff\6!\"#\"%(\12\16\21\11\15\20""579333\202\221" + "\221\221\202\373\373\373\204\377\377\377\12\256\256\256\256\257\257\25" + "\34$\32'2\27%2\26&4\26$0\23\40+EKP>>\77\206\377\377\377\4%(+.7\77\24" + "#/\25%1\202\26&3\202\27&3\1\27%3\202\26&3\10\27&3\27%3\26&3\27'4\27'" + "5\27'4\27&5\26'5\202\27'4\5\27&4\24!-\17\31\"X[]UUU\210\377\377\377\202" + "\341\341\341\6\235\235\235\236\237\237\205\207\210\205\206\207\263\263" + "\264\263\263\263\202\367\367\367\206\377\377\377\202\362\362\362\10\34" + "%+#/8\26&3\27&5\24!.\15\26\36\252\253\253\252\252\252\204\377\377\377" + "\202\373\373\373\202\231\231\231\202\346\346\346\204\377\377\377\11\256" + "\256\256\260\261\262\27\"*\34)4\26&4\27&4\27'4\27&4\27&5\202\27'4\15" + "\27'5\26&3\26%1\24\".\23\40+\22\36*\22\36(\22\36)\22\37)\23!,\25\".\22" + "\36)\13\23\32\202\273\273\273\204\377\377\377\11\242\242\242\243\243" + "\243\15\26\36\24!.\27'4\27&4\27'4\27'5\27'4\202\27&5\12\27'5\27&5\27" + "'47AJUTU\253\253\253d`U\204c\7\330\236\0\363\262\0\203\372\267\0\202" + "\372\267\1\26\372\270\3\372\271\5\372\271\7\372\272\11\332\242\11\201" + "`\6^N!xsg\241\241\241\314\314\314\347\347\347\357\357\357\362\362\362" + "\357\357\357\351\351\351mjd\225m\2\350\253\2\324\235\7YVM\327\327\327" + "\373\373\373\216\377\377\377\22\372\372\372\350\350\350\326\326\326\263" + "\263\263]^`%2<\27'4\27&5\27'5\27&4\27'5\27'4\27&4\27'4\25$1\22\36)6<" + "@///\202\373\373\373\206\377\377\377\12\225\225\225\227\230\231;AE=E" + "K\24\36'\24\37'2:B/6<\203\205\207\200\201\201\202\362\362\362\206\377" + "\377\377\12jjjlno\16\27\40\24!,\27%4\27&4\27&3\26$1\21\35'\12\21\26\202" + "\263\263\263\206\377\377\377\202\341\341\341\12hjkknr)18+4=\24\37(\24" + "\37'=EK;AE\223\224\226\221\221\221\202\373\373\373\204\377\377\377\12" + "\256\256\256\260\261\262\27\"+\34*4\27%4\27'5\25%1\23!,EKQ>>\77\206\377" + "\377\377\6%(+/8\77\25#/\26%2\27'5\27'4\203\27&4\1\27'5\202\27&5\3\27" + "'4\27&4\27(6\203\27'6\6\30(6\27'6\30&5\26&3!,5\31\40&\202\356\356\356" + "\206\377\377\377\202{{{\12\11\15\20\15\23\31\14\25\35\16\30\40\16\31" + "!\16\30!\14\26\35\12\22\30\37$'\33\34\35\202\252\252\252\202\377\377" + "\377\202\362\362\362\10<<\205\205\205\300\300\300\330\330\330\343\343" + "\343\335\335\335OI8\277\214\0\363\263\3\230s\16\204\204\204\353\353\353" + "\376\376\376\216\377\377\377\22\373\373\373\355\355\355\330\330\330\305" + "\305\305\201\201\202#.7\27(5\27'6\27(5\27(6\30'6\30(6\27'6\30'5\24!-" + "\16\27\40\300\300\301\277\277\277\204\377\377\377\202\373\373\373\16" + "UUUVWX\12\21\27\16\31\"\22\40+\24\"/\26%2\27%2\25#1\24!-\21\34%\14\25" + "\34""369///\202\356\356\356\204\377\377\377\202\356\356\356\10\31\40" + "&!,6\26%2\27&5\26%3\24!.JQVCEG\206\377\377\377\202\331\331\331\6\33\34" + "\34!'*\16\30!\21\35(\24\".\26%1\202\26%3\6\24\"0\23\37*\17\31#\13\23" + "\32""368///\202\346\346\346\202\252\252\252\12\12\17\22\21\32#\23\40" + ",\25$2\27'6\30'6\26&3\23!.EKQ>>\77\206\377\377\377\5%(+/8\77\25#1\26" + "'4\27(6\202\27'6\5\27(6\27(5\27'6\27(6\27'5\202\27(5\12\27(7\30(7\27" + "(8\30(7\27(8\27(7\27'5\24$1\36'/\26\30\33\202\356\356\356\206\377\377" + "\377\16{{|\177\202\204\22\35%\25\",\23\".\24#/\25$0\24#0\24\".\22\40" + ",'1:%,2\253\254\255\252\252\252\202\377\377\377\202\362\362\362\10AD" + "GFNT\23\".\27&5\30(7\27(7\23\"/\15\26\36\202\273\273\273\204\377\377" + "\377\202\263\263\263\14\4\7\11\13\23\32&.5\"'-\335\336\336\335\335\335" + "\232\233\233\234\236\240\23\34%\26$/\26'4\26'7\203\27)7\11\30(7\30(6" + "\26%4\23\".\21\34'\20\31\40\14\22\27\77AC=>>\204^^^\4""99:;=@\5\11\14" + "\2\3\4\202\273\273\273\204\377\377\377\5\242\242\242\243\243\243\15\27" + "\40\24#0\30(7\204\27(7\202\30(7\13\27(7\30(8\33,9\77DH{{{A6\32\230o\2" + "\270\207\0\336\242\0\360\260\0\370\265\0\210\372\267\0\21\372\267\1\372" + "\270\2\372\270\4\371\270\7\362\263\10\340\246\11\226q\15XH\34ibR\250" + "\250\250\212\212\212y]\23\341\245\1\360\261\6UG\37\305\305\305\365\365" + "\365\217\377\377\377\13\375\375\375\361\361\361\334\334\334\316\316\316" + "\232\233\233\",4\31)8\30(8\27(7\27(8\27)7\202\27(7\3\26(5\22\40+\12\21" + "\30\202\277\277\277\204\377\377\377\202\373\373\373\6VXX\\ae\21\35(\24" + "\"/\25%3\26'5\202\27'6\6\27(5\26&4\24#1\23\40,:BH48;\202\356\356\356" + "\204\377\377\377\202\356\356\356\10\26\31\34\36(1\25$1\27'5\25&4\22\37" + "*GLP@@@\206\377\377\377\202\331\331\331\6\"(.'2:\23\"/\25$2\26&5\26'" + "6\202\30'6\6\26&5\25%3\25$0\22\40+:CI6:>\202\346\346\346\6\252\253\253" + "\254\256\257\21\33#\26$/\27&4\27'6\202\27(7\4\26&5\24\".ELQ>>\77\206" + "\377\377\377\5%)+/8@\26$2\26'5\27(8\202\30(7\1\27(8\202\27(7\5\30(7\27" + "(7\27)7\27(7\30)9\203\27)9\6\30)8\30)9\26&3\22\37+|\177\202www\206\377" + "\377\377\11wwwwxx\12\22\30\20\34&\24$3\27'6\30*9\27)8\30)8\202\30)9\23" + "\27)7\26&3\23!.\17\31#\11\17\25hjkggh9;<=BF\17\32$\24!.\26'5\30(7\30" + "*9\30)8\24#0\16\30\"\243\243\244\242\242\242\206\377\377\377\24sssw{" + "}\16\30\"\17\32#\16\30\40\15\26\36\15\30!\21\35(\24#0\27'6\30)8\27)9" + "\30)8\30)9\30*8\27(7\26&4\23\40,QY_MQT\202\331\331\331\210\377\377\377" + "\204\331\331\331\204\377\377\377\5\242\242\242\243\243\243\16\30\40\25" + "#0\30)8\202\30)9\3\30)8\30)9\27)9\202\30)9\13\30)8\36-;>CH\217\217\217" + "lh^\\E\6\221j\2\275\212\0\331\237\0\356\257\0\370\266\0\211\372\267\0" + "\20\372\267\1\372\270\2\372\270\3\372\271\5\372\271\7\356\261\11\266" + "\207\10u]\31XH\33\276\214\2\366\265\3\264\205\6e`S\325\325\325\363\363" + "\363\374\374\374\216\377\377\377\20\375\375\375\362\362\362\333\333\333" + "\316\316\316\241\241\241+4=\31*:\30)9\27)9\30)9\30)8\27)9\26(6\25'44" + "=E+/3\206\377\377\377\202\225\225\225\4\12\22\30\22\36*\26&4\26(7\202" + "\27)9\203\30)8\7\27)9\30)8\27(7\24\"/\16\30!\\^`YYY\206\377\377\377\10" + "bbchmq\23!-\25&4\25$2\17\32$\247\250\251\246\246\246\204\377\377\377" + "\202\367\367\367\27\36\36\36&,1\22\36*\24$2\27(8\27)8\27*8\30)9\27)9" + "\30)8\30*8\27)9\30)7\27'6\25$1\22\36*\16\30\40\14\25\35\15\27\37\20\34" + "&\24#/\26'6\30)8\202\27)9\5\30)8\26'6\23#/ELR>>\77\206\377\377\377\5" + "&),/9A\25%3\27)7\27)8\202\30)9\1\27)8\204\30)9\2\27)9\30)8\204\30*:\6" + "\30*9\27*:\25%3\17\33&z{}www\206\377\377\377\6www{~\202\20\35(\25$2\27" + "(8\30)9\206\30*:\13\27)8\26'6\24#0\21\35(nsymrvAHODMU\24\"0\26'5\30)" + "9\203\30*:\4\24%4\17\34'\244\246\247\242\242\242\206\377\377\377\12s" + "ssstt\11\20\27\16\32#\22\40,\23\"/\25$2\26&4\27(7\30)9\202\30*:\10\30" + "*9\30*:\27)9\26'6\23!-\16\30!LNQHHH\202\331\331\331\210\377\377\377\204" + "\331\331\331\204\377\377\377\4\242\242\242\243\243\243\16\30!\24$2\202" + "\30*:\1\27*:\202\30*:\1\30*9\203\30*:\13\37/=HLP\243\244\244\307\307" + "\307\214\212\204QJ7{\\\7\251|\1\325\234\0\361\261\0\371\266\0\202\372" + "\267\0\6\371\267\0\364\263\0\361\261\0\363\262\0\370\265\0\371\266\0" + "\203\372\267\0\20\372\267\1\372\270\3\372\270\5\372\271\6\356\260\5\340" + "\244\2\363\262\0\372\271\5\220k\6RM\77\240\237\236\317\317\317\350\350" + "\350\364\364\364\372\372\372\376\376\376\213\377\377\377\10\375\375\375" + "\363\363\363\334\334\334\314\314\314\245\246\2465>G\31+;\27*:\204\30" + "*:\4\27(7\25$21:A)*,\206\377\377\377\5\225\225\225\227\231\232\17\33" + "%\25$2\27)9\203\30*:\1\30*9\204\30*:\5\30*8\26&5\23!-`ejZZZ\206\377\377" + "\377\10bbbfjm\21\36)\26%5\24#1\15\27\40\246\246\247\246\246\246\204\377" + "\377\377\202\367\367\367\6#'*+5>\25%3\27(7\30*:\27*:\207\30*:\12\30*" + "9\27(7\26&5\25$2\24#0\24$1\25&3\27(7\30)9\27*:\203\30*:\4\27(7\23#1E" + "MS>>\77\206\377\377\377\5&),/9B\26&5\27)8\30*:\202\30*9\2\30*:\30):\205" + "\30*:\10\30+;\30+<\30+;\30*<\31*<\31+<\24$2\15\27\40\202\310\310\310" + "\204\377\377\377\202\320\320\320\10\6\13\20\17\34&\26'6\27)9\30+;\30" + "*<\31+;\30+;\203\30+<\13\30+;\30+<\30+;\27*:\26&6\24$1\23#/\24$1\25&" + "5\27)9\30*:\202\30+<\6\30*;\30+<\26'8\23\"/8>D011\202\373\373\373\206" + "\377\377\377\6\200\200\200\204\207\212\20\34'\24$1\27)8\30*:\206\30+" + "<\4\26(8\24#1V\\cPSU\202\373\373\373\222\377\377\377\5\242\242\242\243" + "\243\243\16\31\"\25%3\30+;\202\30+<\202\30*;\204\30+;\26\36/=RVZ\271" + "\271\271\340\340\340\334\334\334\276\276\276nkdgO\16\252}\0\333\240\0" + "\361\261\0\371\266\0\372\267\1\366\264\1\337\244\0\324\233\0\323\233" + "\0\342\245\0\355\256\0\364\263\0\370\266\0\371\267\0\202\372\267\0\202" + "\372\267\1\1\372\270\2\202\372\267\1\14\372\270\4\372\271\11\276\216" + "\11kR\16eZ;\206\205\203\265\265\265\332\332\332\355\355\355\367\367\367" + "\374\374\374\376\376\376\210\377\377\377\7\375\375\375\366\366\366\340" + "\340\340\314\314\314\251\251\252;EN\31,=\203\30+;\6\31+;\30*;\26(7\23" + "\"/djn^^^\206\377\377\377\7#$%,4:\24#1\27(8\30*;\30+;\30+<\202\30+;\2" + "\30*;\30+<\202\30+;\5\30+<\27*9\26'6\20\35(\7\14\20\202\341\341\341\204" + "\377\377\377\6\242\242\242\243\245\245\17\33&\25&4\24#1\13\24\33\202" + "\335\335\335\204\377\377\377\202\242\242\242\12\13\24\34\23!/\27*9\30" + "*<\30+<\30+;\30*<\30*;\30*:\27*:\204\27*9\4\27*:\27)9\30*:\27)9\204\27" + "*9\10\27)9\27):\30*;\31+;\30)9\24$3EMT>>\77\206\377\377\377\5&),09B\26" + "'7\27):\30*<\203\30+;\3\30*<\30+;\31+;\202\30+;\11\30*<\30,=\31+<\30" + ",=\31+<\31,<\30+=\24#1\14\25\34\202\310\310\310\204\377\377\377\202\320" + "\320\320\4\13\24\34\23\"/\27*;\30*;\202\30,=\3\30+<\31+=\30+<\202\30" + ",=\1\30,<\202\30,=\20\30+<\27+;\30)9\27)9\27*:\30*;\30+;\30,=\31+<\31" + "+=\31,=\30+<\27);\26'5" + "Z^a\310\310\310\346\346\346\340\340\340\333\333\333\275\275\275UN<}\\" + "\2\267\206\0\333\240\0\364\262\0\372\270\2\335\243\3fO\15yY\2\237u\1" + "\270\207\0\312\224\0\333\240\0\351\253\0\362\261\0\367\265\0\206\372" + "\267\0\16\372\270\2\372\270\4\372\271\7\362\264\10\316\231\10\227s\20" + "aS*_]X\250\250\250\330\330\330\350\350\350\365\365\365\373\373\373\376" + "\376\376\206\377\377\377\20\375\375\375\370\370\370\346\346\346\317\317" + "\317\255\255\255>@\206\377\377\377\6&)" + ",/:D\26(7\30*;\30+<\30+=\202\30,=\10\31,<\31,=\31+=\31,<\30,=\30+=\30" + "->\31,>\202\31-\77\4\31->\30->\24#2\12\22\31\202\362\362\362\204\377" + "\377\377\16\200\200\200\201\203\204\17\33&\26'6\30->\31->\31-\77\31," + ">\30,=\27*;\27(9\25'6\25'5\25&5\211\25'5\13\25&5\26&6\25(7\26):\30+<" + "\30,=\30*;\23#2\15\30\"uvwsss\210\377\377\377\14\242\242\242\244\246" + "\247\22\36'\30&4\27*:\30,<\30,>\31->\30,=\27+<\33+7\24\35%\202\346\346" + "\346\206\377\377\377\202\314\314\314\202\210\210\210\202\277\277\277" + "\210\377\377\377\6\242\242\242\243\243\244\16\31$\25'6\30->\30,>\202" + "\30->\3\30,>\31,>\30->\202\31->\32\35/\77adg\323\323\323\356\356\356" + "\350\350\350\341\341\341\333\333\333\253\253\253]T:jP\11\260\201\0\340" + "\244\0\372\270\4\323\234\7MH7\220\220\215YVN^M\40~^\6\231q\1\273\211" + "\0\315\226\0\335\242\0\354\254\0\363\262\0\367\265\0\204\372\267\0\20" + "\372\267\1\372\270\2\372\270\3\372\270\5\370\270\7\363\265\10\314\230" + "\12nT\15ZO1\203\200y\264\264\264\330\330\330\353\353\353\366\366\366" + "\373\373\373\376\376\376\203\377\377\377\20\375\375\375\371\371\371\352" + "\352\352\321\321\321\257\257\257;FQ\30->\31,>\30,>\31,>\30,>\30,\77\26" + "(8\21\37+\203\206\210\200\200\200\204\377\377\377\202\352\352\352\4\10" + "\16\24\23!.\30+<\31+=\202\31->\202\30,>\202\31->\2\30,>\31->\204\31," + ">\2\25%4\15\26\37\202\256\256\256\204\377\377\377\202\273\273\273\4\15" + "\27!\25&4\24#2\11\20\27\206\377\377\377\20fffjmp\21\36*\26(7\31,>\31" + "->\30,>\31,>\27*=\26(62\77K0>@\206\377\377\377\4&),0:D\26)" + "8\30,<\202\31->\14\30->\30,>\31->\30-\77\30,>\31,>\30,>\31->\30-@\31" + "-@\31-\77\30.@\202\31-@\2\23$2\11\21\30\202\362\362\362\204\377\377\377" + "\5\200\200\200\203\205\207\21\37+\26(9\31.@\202\31-@\5\31.@\30,<\25'" + "6\21\40.\20\34(\202\16\32$\202\16\32%\3\16\32$\16\33%\16\32$\202\16\33" + "$\15\16\33%\16\32$\16\32%\17\34'\21\40,\24%3\26(9\30,=\30,>\26(9\22!" + "/x}\201tuu\210\377\377\377\202\242\242\242\12\12\17\24\22\35&\23$4\27" + "*;\31,\77\31.\77\30-=\27):\30&2\20\26\31\202\346\346\346\206\377\377" + "\377\202\314\314\314\202\211\211\212\202\277\277\277\210\377\377\377" + "\7\242\242\242\243\243\244\16\32$\25'7\31.\77\31-\77\31-@\202\31.@\40" + "\30-@\31-@\31-\77\31.@\34""0A_be\322\322\322\364\364\364\356\356\356" + "\347\347\347\340\340\340\334\334\334\270\270\270UN<}\\\3\305\220\0\372" + "\270\3\316\231\10SN\77\320\320\320\331\331\331\253\253\253}{udZ\77]F" + "\7\213f\2\260\201\0\305\220\0\327\236\0\350\252\0\365\264\0\371\267\0" + "\205\372\267\0\16\372\267\1\372\270\3\372\270\4\372\271\6\367\267\10" + "\325\236\10\225o\6m[)eaX\222\222\222\322\322\322\346\346\346\363\363" + "\363\373\373\373\202\376\376\376\20\375\375\375\371\371\371\351\351\351" + "\321\321\321\250\251\2527DO\31-@\31.@\31-\77\31.@\31-@\31-\77\26)9\20" + "\37+\203\205\207\200\200\200\204\377\377\377\202\352\352\352\16\11\21" + "\30\24#1\31,\77\31-\77\31.@\31-\77\30-@\31.@\30.@\31-\77\30-@\31-@\31" + ".\77\30-@\202\31-\77\2\24'5\15\31\"\202\256\256\256\204\377\377\377\202" + "\273\273\273\4\15\27!\24'6\24#1\11\20\26\206\377\377\377\14fffjnr\22" + "\40-\27)9\31-@\31-\77\31.@\31-\77\27*9\22!.,4;(-2\202&*,\204&),\1&*," + "\202&),\203&*,\10',0*28\27$0\34,9\26(8\24%4FNU>>@\206\377\377\377\11" + "&),/:E\26*9\30,>\31.@\31-@\31.@\31-@\31.\77\202\31.@\3\31-@\31.@\31-" + "\77\203\31.A\203\31/A\2\24$3\11\21\27\206\377\377\377\6^^^cgk\22\"/\27" + "*;\31.A\31/A\202\31.A\4\26):\21\40-\246\251\253\243\245\246\214\243\243" + "\244\5\243\245\246\245\247\2512=E6EQ\27+<\202\30-\77\5\27);\22\40.\13" + "\25\35ttusss\210\377\377\377\12\277\277\277\300\301\302\31%.\37/<\27" + ",=\30-\77\30+=\24&5ahnZ[\\\206\377\377\377\202\221\221\221\2\6\13\17" + "\13\24\35\202\16\33%\2\14\26\37\7\16\23\202www\206\377\377\377\5\242" + "\242\242\243\243\244\16\33%\25(8\31/A\203\31.A%\31/A\31/@\32.A\31.A\31" + "/A\33/AUZ_\312\312\312\371\371\371\365\365\365\356\356\356\346\346\346" + "\340\340\340\334\334\334\247\247\245[L$\236t\1\351\253\2\261\203\5gc" + "X\321\321\321\342\342\342\340\340\340\332\332\332\313\313\313\246\245" + "\242faUPD!y\\\13\240u\1\311\223\0\355\255\0\366\264\0\363\262\0\362\261" + "\0\365\264\0\370\266\0\203\372\267\0\25\372\267\1\372\270\2\372\270\3" + "\372\271\5\370\270\7\346\253\10\306\224\12\202e\24QH0\206\203|\300\300" + "\277\336\336\336\360\360\360\367\367\367\372\372\372\367\367\367\345" + "\345\345\321\321\321\206\214\221&8G\31/A\204\31.A\5\32.A\26):\21\37," + "\203\205\207\200\200\200\204\377\377\377\202\341\341\341\6\12\22\31\24" + "$3\31/@\31.A\31/A\32.A\212\31.A\4\25'7\16\32$\246\246\247\246\246\246" + "\204\377\377\377\202\273\273\273\4\15\30\"\25'7\24$3\11\20\26\206\377" + "\377\377\6fffknr\22!/\27*;\32/@\32.A\202\31/A\2\25'7\15\31\"\220\377" + "\377\377\6CHMHS]\25'7\24%5FNV>>@\206\377\377\377\6&*,0\27,=\23#1_dhYYY\206\377\377\377\4\221\221" + "\221\224\226\230\17\34'\24$3\202\25(9\4\24%4\20\36+{\177\203www\206\377" + "\377\377\6\242\242\242\243\243\244\17\33&\26(9\31/B\32""0B\202\31/B(" + "\32""0B\31""0C\31/B\31/C\31/B\33""0CFOW\276\276\276\374\374\374\372\372" + "\372\365\365\365\355\355\355\346\346\346\341\341\341\327\327\327xwu^" + "H\16\244x\1\212f\1|xn\337\337\337\353\353\353\352\352\352\346\346\346" + "\342\342\342\337\337\337\334\334\334\304\304\304xxwH<\34\254~\1\354\255" + "\0\357\257\0\335\241\0\322\232\0\331\240\0\350\252\0\362\261\0\367\265" + "\0\371\267\0\203\372\267\0\13\371\266\1\370\266\2\372\267\3\372\271\6" + "\372\271\10\334\243\11yZ\5dU)zta\240\240\240\315\315\315\202\350\350" + "\350\16\331\331\331\312\312\312`kt\33""1D\33""0D\32/C\31""0B\31/C\31" + "/B\32/B\26+;\21\40.\203\206\210\200\200\200\204\377\377\377\202\341\341" + "\341\10\11\21\30\23$3\31.A\32/B\31/B\31""0C\31""0B\32""0B\203\31/B\3" + "\31""0B\32/C\31/B\202\32/B\2\25(8\16\31#\202\246\246\246\204\377\377" + "\377\202\273\273\273\4\16\31#\25(8\24&4\11\21\30\206\377\377\377\5ff" + "fjmp\21\40-\26*;\32/C\203\31/B\2\25&5\12\23\32\220\377\377\377\6\77B" + "DGQY\24&6\25&6FNV>\77@\206\377\377\377\4&*-0\77@\206\377\377\377\10&*-0\31.B\31""1D\32""0D\31""0C\32""0D" + "\202\31""0D\2\31""0C\31""0D\202\32""0D\1\32""1F\202\32""1E\5\31""1F\32" + "1F\32""0E\25'7\13\24\34\202\362\362\362\204\377\377\377\12\200\200\200" + "\201\203\204\20\36+\27+<\31""1E\32""1E\32""0E\32""1E\24'7\11\22\32\220" + "\377\377\377\14\77ADGQ[\27+<\31/B\31""1E\32""1E\32""0D\31/C\27+=\23$" + "3ahn\\^a\202\367\367\367\206\377\377\377\202\242\242\242\6\14\27\40\23" + "&5\25)9\20\36*\223\224\226\221\221\221\204\377\377\377\202\356\356\356" + "\4\22\30\37\33+8\31.B\31""0E\202\32""1E\4\32""0D\31/D\24&5\13\25\36\202" + "\320\320\320\204\377\377\377\6\242\242\242\243\243\244\17\34(\26*<\32" + "1E\32""1F\203\32""1E\17\32""1F\32""1E\32""1F\32""0E\32""1E.>K\225\225" + "\225\374\374\374\376\376\376\375\375\375\371\371\371\364\364\364\360" + "\360\360\357\357\357\361\361\361\202\366\366\366\2\216\214\207\337\337" + "\336\202\373\373\373'\372\372\372\367\367\367\363\363\363\354\354\354" + "\345\345\345\340\340\340b[H\230p\1\351\253\1\344\250\5lX!\235\235\235" + "lkiNG3lS\16\214g\2\256\200\0\307\221\0\332\240\0\354\255\0\354\255\1" + "\260\201\1\232q\0\251|\0\275\212\0\317\227\0\321\231\1\341\244\1\357" + "\257\2\363\262\4\310\224\5\247{\6|]\5VH\37oj]\226\226\226vy|\40""0>\33" + "2F\202\31""1F\7\32""1F\32""1E\32""1F\30-@\24&6mrwfff\206\377\377\377" + "\4\30\33\34\".8\27*=\31/B\204\32""1E\2\32""0E\31""1E\204\32""1E\4\31" + "0E\30.B\22#1\11\20\27\202\325\325\325\204\377\377\377\6\252\252\252\253" + "\254\255\20\36*\27*=\25(9\14\27\40\202\335\335\335\204\377\377\377\202" + "\242\242\242\4\14\27!\25'7\31""0C\32""1D\202\32""1E\2\24'7\11\22\31\220" + "\377\377\377\6:=@DNW\26):\25(8FOX>\77@\206\377\377\377\16&*-0=H\30-\77" + "\31.D\31""1E\32""1E\31""1F\31""1E\32""1E\32""0E\32""1F\32""1E\32""1F" + "\31""1E\204\32""2G\4\32""1G\32""2G\25):\14\27!\202\310\310\310\204\377" + "\377\377\202\320\320\320\4\14\27!\24&7\31""0E\32""1F\202\32""2G\2\25" + "'9\12\23\33\220\377\377\377\16)-04@K\27,\77\31""0D\32""2G\32""1F\32""0" + "D\31""0D\30/A\27,\77\24&5\17\34(ADH<<<\202\352\352\352\206\377\377\377" + "\6<@DDOZ\24%5\17\34'\243\244\245\242\242\242\204\377\377\377\202\273" + "\273\273\5\14\26\37\25(9\32""2E\32""1F\32""2G\202\32""2F\3\32""2G\26" + "*<\16\32%\202\242\242\242\204\377\377\377\6\242\242\242\243\243\244\17" + "\35)\26+=\33""2F\32""2G\202\32""2F\4\33""2G\32""1G\32""2G\32""1G\202" + "\32""2G\15(;J\202\202\203\372\372\372\377\377\377\376\376\376\374\374" + "\374\371\371\371\366\366\366\365\365\365\366\366\366\371\371\371\374" + "\374\374\372\372\372\203\376\376\376(\375\375\375\373\373\373\367\367" + "\367\357\357\357\350\350\350\266\266\266WC\15\310\223\0\364\264\3\302" + "\220\6g`L\311\311\311\333\333\333\301\301\301\220\220\216haMVD\24|[\3" + "\255~\0\305\220\0\345\250\0\345\250\1\255\200\3]D\2I8\11jO\5\210d\2\203" + "`\2rU\3\273\211\1\355\256\1\344\250\4\244y\4\243x\4]F\7_Q+OLC\40-8\34" + "4I\33""3H\202\32""2G\6\32""1F\32""2G\32/B\26*<7AK-/1\206\377\377\377" + "\13www{\200\203\22#2\27,\77\32""1F\32""2G\32""2F\32""1F\32""1G\32""2" + "G\32""1G\202\32""2G\5\32""2F\30/B\26);JS\\BDF\206\377\377\377\10ooos" + "vy\22\"0\27-\77\26+<\16\33&\246\246\247\246\246\246\204\377\377\377\202" + "\367\367\367\10$).-:E\27->\31""0D\32""2F\32""2G\25):\14\26!\210\335\335" + "\335\202\367\367\367\204\377\377\377\202\373\373\373\6\24\31\36\36-;" + "\27,\77\25):FPX>\77@\206\377\377\377\11&*-0=I\30-A\31""0E\32""1F\32""2" + "G\32""2F\32""1G\32""2G\202\32""2F\13\32""1F\32""2G\32""2F\33""2I\33""2" + "H\32""2H\33""3H\32""3H\33""3H\26+=\16\33'\202\310\310\310\204\377\377" + "\377\202\320\320\320\10\7\16\24\21!/\27.A\31""0G\32""3H\32""2H\25*;\15" + "\30\"\220\377\377\377\16+054CP\30.C\32""2G\32""1G\31""1F\30/C\27.@\30" + ",\77\30-\77\26+=\25(8GQ[AFK\202\352\352\352\206\377\377\377\6""99;AK" + "R\22#1\16\33&\243\244\245\242\242\242\204\377\377\377\202\273\273\273" + "\3\14\27\40\25):\32""3G\202\32""2H\1\33""2H\202\32""3H\2\26*=\16\33&" + "\202\242\242\242\204\377\377\377\10\242\242\242\243\243\244\17\35*\27" + ",\77\33""3H\32""3H\32""2I\33""2I\205\32""3H\10\33""3I\"8K\\_c\342\342" + "\342\376\376\376\377\377\377\376\376\376\374\374\374\203\373\373\373" + "\2\374\374\374\375\375\375\204\377\377\377(\376\376\376\374\374\374\367" + "\367\367\357\357\357\341\341\341^\\V\246z\1\344\247\0\367\267\5\224q" + "\20~~}\331\331\331\344\344\344\341\341\341\336\336\336\322\322\322\272" + "\272\271zwoPF+rW\20\237u\2\306\221\1\352\254\1\330\237\3iN\4J@%\\VDV" + "J)rW\15YC\4\177^\3\303\217\1\204a\2YA\2\205d\11YA\2I7\7$03\35""5I\33" + "4I\203\32""3H\5\32""2H\32""1F\30-B9FQ048\206\377\377\377\6wwwxyz\16\32" + "&\24(9\31""0E\32""2G\202\32""2H\1\33""3H\203\32""3H\6\33""3H\32""2F\27" + ",>\22#1FKP@@@\206\377\377\377\10ooouz\177\25'7\30/C\30-\77\21\40.\247" + "\251\252\246\246\246\204\377\377\377\202\367\367\367\11\36\36\36(18\24" + "'6\30.A\32""2G\32""3H\30,\77\20\37,\336\336\337\207\335\335\335\202\367" + "\367\367\204\377\377\377\202\373\373\373\6\26\35%\40""1@\31/B\26*\77@\206\377\377\377\10&+.1>I\31.B\32""1F\33""2H\32""3H\33""2H\32""2" + "H\202\32""3H\6\33""2H\33""3H\33""2H\32""3H\32""4I\32""3I\202\33""4J\6" + "\32""3J\33""4J\27-@\21\"0z|~www\206\377\377\377\12ooouz\177\23%4\27-" + "@\32""2H\33""3I\27.@\21!/cgk__`\204^^^\202bbb\202\362\362\362\204\377" + "\377\377\202\341\341\341\20\12\22\33\24'7\31""1E\32""1F\30-A\26);5ER" + "4ALHT^JWb\26)<\30-A\25);\20\40-AFJ<<<\206\377\377\377\6sssx}\202\21\40" + "-\16\33'\227\230\231\225\225\225\204\377\377\377\202\346\346\346\12\15" + "\27\37\27*:\32""1F\33""3I\33""4I\33""3J\33""3I\31""3H\25(:\14\27!\202" + "\314\314\314\204\377\377\377\7\242\242\242\243\243\244\17\35*\26-\77" + "\33""4I\32""4J\33""3J\203\32""4I\12\33""3I\33""3J\32""4I\33""3I\35""4" + "J8BL\261\262\262\375\375\375\376\376\376\377\377\377\205\376\376\376" + "\205\377\377\377'\376\376\376\373\373\373\365\365\365\355\355\355\250" + "\250\250gS\34\313\225\0\362\261\2\363\264\7[N*\264\264\264\351\351\351" + "\356\356\356\352\352\352\347\347\347\343\343\343\341\341\341\340\340" + "\340\314\314\314\222\222\222jdTdR!\200_\5\311\223\1\353\255\2\327\236" + "\3\221l\7lZ(96/\\P.qV\15\207c\2\240v\0kN\1F<\36YK'>3\17\"18\34""4J\202" + "\32""4I\7\32""3J\33""3I\32""3J\33""3I\31""1F\24'8\12\25\35\202\320\320" + "\320\204\377\377\377\202\367\367\367\10@DGGPY\25(9\27-A\32""1F\31""3" + "H\33""4I\32""4J\202\32""2H\4\31/D\27+>*8E#+2\202\335\335\335\204\377" + "\377\377\202\373\373\373\10\"$'*7B\27,@\32""2F\31""0D\24'7OV[HHH\206" + "\377\377\377\20\314\314\314\314\314\315\34&0#3B\30-@\31""0D\30/B\25)" + ":\20\40-\15\31#\13\25\36\13\24\35\11\21\30\6\14\22""000///\202\373\373" + "\373\204\377\377\377\202\267\267\267\6\15\31$\25*<\31""1E\27,>GQY>\77" + "A\206\377\377\377\11%),/=G\27-@\31""0D\32""1E\32""1F\32""1G\32""2G\32" + "1H\202\32""3I\4\33""3J\33""3I\33""4J\32""5K\204\33""5K\5\33""4K\31""1" + "F\24'8|\201\205www\206\377\377\377\16ooopqq\14\31#\23%6\30/D\32""3I\31" + "1F\25);hrzfmsdkpdjpdimbfi\202bbb\202\362\362\362\204\377\377\377\202" + "\341\341\341\20\15\31#\26*<\31""1F\30-B\23&5\16\34(.4;+/4ADHDKR\21!0" + "\26,>\30/B\26*@A\206\377\377\377\6sssw{\177\20\37,\17\35*\227\232" + "\233\225\225\225\204\377\377\377\202\346\346\346\4\12\17\24\25$1\30." + "C\32""3H\202\33""4K\4\32""3I\31""1E\22$3\10\20\27\202\314\314\314\204" + "\377\377\377\4\242\242\242\243\243\244\20\37+\27-@\202\33""4K\3\33""5" + "K\33""4K\33""5K\202\33""4K\203\33""5K\5\33""4K*K\31""0E\32""4I\32""1G\27-@R\\eKMP\206\377\377\377\202\314\314" + "\314\16\23\26\30\33$,\22\"1\25)<\30/C\30""0C\27-A\26+=\25):\23&6\17\36" + "+\12\25\36""124///\202\373\373\373\204\377\377\377\10\267\267\267\270" + "\271\272\20\40-\27.A\32""1G\27,\77GQZ>\77A\206\377\377\377\4%&(.9C\24" + "(9\26*=\202\27,\77\14\27,@\30.B\30/D\32""2G\32""3I\32""4J\33""5K\32""4" + "K\33""5L\33""6M\33""6L\33""5L\202\33""5M\4\32""3I\27.B'5B\36\"&\202\356" + "\356\356\204\377\377\377\202\373\373\373\14pqquz\177\22#2\25*<\27,A\26" + ",>\24'9\23%4\21#2\21!/\22\37)\15\26\36\202\225\225\225\206\377\377\377" + "\10\200\200\200\202\204\205\20!.\26,\77\37""4G\32,:\211\215\221\205\206" + "\207\202\373\373\373\202\362\362\362\6-4:4AN\25*<\26*=\23#/\11\15\21" + "\202\352\352\352\204\377\377\377\6\200\200\200\203\207\212\20\40.\21" + "!0din^^^\206\377\377\377\4www|\200\204\22#2\26+>\202\30/D\4\26,\77\23" + "&7agmZZZ\206\377\377\377\11\242\242\242\243\243\244\20\37,\27.B\33""6" + "L\34""5L\33""6M\33""6L\33""6M\203\33""5M\10\33""6L\33""5M\33""5L\":N" + "HPV\310\310\311\371\371\371\376\376\376\211\377\377\377\25\376\376\376" + "\373\373\373\364\364\364\355\355\355\262\261\257fQ\27\273\212\0\362\262" + "\1\372\271\7z\\\11\235\235\235\356\356\356\375\375\375\374\374\374\372" + "\372\372\370\370\370\366\366\366\363\363\363\360\360\360\355\355\355" + "\353\353\353\202\351\351\351\17\350\350\350\336\336\336\231\231\231b" + "]Pt[\31\242v\2\336\243\2\342\247\4\203f\27meQUL3<1\24C2\1sX\12#29\202" + "\33""6M\3\33""5L\33""6L\34""5M\202\33""5L\6\33""6L\33""5M\31""1F\24'" + "8GMS@@@\206\377\377\377\202\373\373\373\12\200\201\201\204\210\213#0" + "<&6D\25):\25*;\33.>\32)7emradg\202\346\346\346\206\377\377\377\12\214" + "\214\214\214\215\216\16\34)\26+>\33""4K\33""6K\32""4K\31""3G\24'8\13" + "\25\36\202\273\273\273\206\377\377\377\202\335\335\335\12Y^a^el\31+8" + "\34/>\26)<\25*<\33.\77\32*7elradf\202\352\352\352\206\377\377\377\10" + "<<\77A\206\377\377\377\4UUUY^aENVFQY" + "\202GQZ\11GS\\IU`,=L/BS\31""1G\32""5J\33""5L\33""5M\33""7N\202\33""6" + "N\7\34""6N\33""7N\34""7N\33""5L\31""2H+\77A\206" + "\377\377\377\202UUU\2=>>>>@\202>\77A\14\77ADAGK&2=+\32""4K\33""6N\32""5K\30.CGQ[>\77A\216\377\377\377\10aeggpy\26-@\32" + "4J\34""7O\34""8P\34""8Q\34""9Q\204\34""8Q\202\34""8P\4\32""3J\26+\77" + "nu|ghj\210\377\377\377\202\325\325\325\202\204\204\204\202^^^\202\204" + "\204\204\202\331\331\331\206\377\377\377\202\335\335\335\6\32'2!6H\31" + "2H\27/Dlu~ehj\206\377\377\377\202\352\352\352\202www\202\273\273\273" + "\206\377\377\377\6VXZ^hp\27.B\31""2H%8J\34'2\202\352\352\352\206\377" + "\377\377\202\256\256\256\202jjj\202\242\242\242\202\373\373\373\206\377" + "\377\377\14\242\242\242\243\243\244\20\40/\30""1F\34""8Q\34""9Q\34""8" + "Q\33""8Q\34""8Q\33""8Q\34""8Q\33""8Q\204\34""8Q\12\36""9R+:Gxz{\355\355" + "\355\374\374\374\313\313\313\212\210\204\315\315\315\357\357\357\374" + "\374\374\202\377\377\377\15\375\375\375\371\371\371\361\361\361\351\351" + "\351}}}\202a\5\321\231\0\364\263\1\360\262\7x]\22\247\246\245\363\363" + "\363\376\376\376\207\377\377\377\7\376\376\376\375\375\375\373\373\373" + "\371\371\371\367\367\367\364\364\364\362\362\362\202\360\360\360\12\357" + "\357\357\355\355\355\345\345\345\302\302\302\222\221\216cW9B4\15#*&\40" + ":P\35""9R\202\34""8Q\15\33""8Q\34""8Q\33""8Q\34""8Q\34""8P\34""9Q\34" + "8Q\34""8P\33""7O\31""1G\24(9\211\216\222\204\204\204\212\377\377\377" + "\202\341\341\341\202\373\373\373\210\377\377\377\7\304\304\304\305\306" + "\307\27&2\36""3G\32""5M\33""7O\33""8Q\203\34""8Q\4\32""6M\31""3J,=M%" + "/9\202\346\346\346\210\377\377\377\202\373\373\373\202\335\335\335\202" + "\373\373\373\210\377\377\377\12\204\204\204\211\216\222\24(9\31""1G\34" + "7P\34""8Q\32""5M\27/DGR\\>\77A\216\377\377\377\4^__fms\26+\77\32""4K" + "\202\34""8Q\203\34""9R\3\34""9S\34""9R\34""9S\202\34""9R\6\34""7O\31" + "4K\24);\15\31$\204\204\205\204\204\204\224\377\377\377\202\346\346\346" + "\10''(/9A\25*=\31""3J\33""7N\31""4J\27):\15\27\37\202\314\314\314\216" + "\377\377\377\202\341\341\341\10\21\31\40\33.>\32""4L\33""7O\31""2H\22" + "%6V[_QQQ\202\373\373\373\222\377\377\377\7\242\242\242\243\243\244\21" + "!/\30""1F\34""9R\34""9S\35""9R\203\34""9S\202\34""9R\34\34""9S\34""9" + "R\34""9S\34""9R\35""9R#=S8AI\255\255\256\264\264\263n^0\212h\13f`Q\305" + "\305\305\363\363\363\375\375\375\376\376\376\374\374\374\366\366\366" + "\356\356\356\277\277\277[P1\271\210\1\346\250\0\371\267\3\324\235\7l" + "_;\310\310\310\371\371\371\212\377\377\377\17\376\376\376\375\375\375" + "\374\374\374\372\372\372\367\367\367\365\365\365\362\362\362\356\356" + "\356\350\350\350\334\334\334\314\314\314\273\273\273\210\210\210.0.\40" + "6H\202\35""9R\2\34""9R\34""9S\205\34""9R\2\35""9S\34""9S\202\34""9R\6" + "\34""7O\31""3J\23'8\14\30\"xxywww\202\373\373\373\220\377\377\377\202" + "\256\256\256\20\23\30\35\32)5\26.B\32""5L\35""9Q\34""9R\34""9S\34""9" + "R\34""9S\34""9R\35""9Q\34""8P\32""2I\24)<(2;\40\"#\202\314\314\314\222" + "\377\377\377\202\204\204\204\12\13\27!\23&8\31""3J\33""7O\34""9S\35""9" + "S\34""6N\30""0FGS]>AB\216\377\377\377\4^^^elr\25+>\33""5L\202\34""9R" + "\2\34:T\34""9T\202\34:T\202\35:T\10\34""9T\35:T\34""9S\33""8Q\31""2H" + "\23(:\211\216\222\204\205\205\224\377\377\377\202\346\346\346\12/8@5" + "FU\30""3I\33""7P\34""8S\33""8Q\34""2G\24#1\315\315\316\314\314\314\216" + "\377\377\377\202\341\341\341\10\27$1\37""5H\34""8Q\34""9S\33""6N\27/" + "D[enTY[\202\373\373\373\222\377\377\377\7\242\242\242\243\243\244\21" + "!0\30""2H\34:T\35:T\34:T\202\35:T\4\34:T\35:T\34:S\35:T\204\34:T\27\35" + ":T&>RGNSNLI\237u\4\356\257\4\201`\6wtm\334\334\334\370\370\370\375\375" + "\375\371\371\371\362\362\362\342\342\342\177|t\205c\7\324\233\0\363\262" + "\1\372\271\5\253\201\13vur\346\346\346\375\375\375\214\377\377\377\17" + "\376\376\376\374\374\374\373\373\373\367\367\367\361\361\361\351\351" + "\351\337\337\337\320\320\320\303\303\303\246\246\246CFH!5G\35;U\34""9" + "S\36;T\206\34:T\1\35:T\203\34:T\7\35""9T\34""9S\33""8Q\31""2H\23(:}\203" + "\211yz|\202\373\373\373\220\377\377\377\11\256\256\256\260\262\264\33" + "+9!7J\32""5M\33""7Q\34""9T\35:T\34:S\203\35:T\10\34:T\34:R\34""7P\31" + "3J/AQ)5\77\315\315\316\314\314\314\222\377\377\377\6\204\205\206\211" + "\216\222\23'8\30""1G\34""7P\34""9S\202\34:T\4\34""7P\30""2HHT`\77CF\216" + "\377\377\377\7___fnu\26,A\32""6N\35:T\34:T\34;U\202\35;U\202\35;V\202" + "\35;U\11\35:U\35;V\34:U\33""9R\32""4L\24);\16\33(TVYQQQ\202\331\331\331" + "\216\377\377\377\202\273\273\273\14!\"%(2<\24)<\31""3J\34""9S\35:T\34" + ";U\35:V\33""6O\27.B'3>\36!$\202\310\310\310\212\377\377\377\202\341\341" + "\341\4""777\77GO\24*=\32""5L\202\34:U\6\34:T\33""7P\26-B\20\40/TY\\Q" + "QQ\202\352\352\352\210\377\377\377\202\356\356\356\202\346\346\346\204" + "\377\377\377'\242\242\242\243\245\247\22$4\30""3J\35;U\35:U\34;U\35:" + "U\34;U\34;V\35;V\34:U\34;V\35;V\35;U\34;U\35;V\35:U\36;V':L/36pU\13\342" + "\246\2\345\252\11OB\40\247\247\247\352\352\352\372\372\372\366\366\366" + "\356\356\356\311\311\311\\M%\257\200\1\344\247\0\371\267\3\372\271\7" + "r[\34\242\242\242\361\361\361\214\377\377\377\202\376\376\376\15\374" + "\374\374\372\372\372\365\365\365\354\354\354\341\341\341\322\322\322" + "\305\305\305\257\257\257abc\35,:\36M[6>D\216\273\273\273\17LQTS^h\27/F\33" + "7P\34;U\34;V\35W\35\31""3J\33""9R\34:T\202\35\31""4K\34""9U\35;W\3537;>AD>AB>AD@DI/9A4DQ\27""1G\33""9R\35Y)" + "BX*,#\251|\0\351\254\3\356\261\12lW\35\215\215\215\333\333\333\354\354" + "\354\277\277\277^M\40\274\212\0\343\246\0\371\267\1\372\270\6\241x\5" + "}}}\352\352\352\375\375\375\210\377\377\377\202\376\376\376\16\375\375" + "\375\374\374\374\371\371\371\366\366\366\357\357\357\350\350\350\337" + "\337\337\321\321\321\305\305\305\261\261\261eef\",4\">V\35\21#3\16\35+\13\30#\12\23" + "\34(/5'-2\202',1\13#)/%,2\12\24\35\14\31%\20\37.\22&8\27.D\31""4M\34" + "9T\35Z\7\35=Y\35>Z\36=Z\35>Z\35=Z\35>Y\36=Z\203\35" + ">Z\13\36=Y\35O]\27" + "/E\31""5M\33:T\35;V\36=Y\35>Z\36=Z\35=Z\35>Z\35=Z\35>Z\36>Y\34Z\36>Z\202" + "\35=Z\32\35>Y\34N]=LZHVaGU`HUaIXd6IY:Ob\33""8Q\35" + ";W\202\35=Z\202\35=Y\206\35=Z\4\35>Y\36=Z\36>Y\35=Z\202\35>Z\23\40@[" + "*6\77\216i\2\331\237\0\370\267\7\276\216\14YO4\254\254\254\325\325\325" + "iga\232r\5\327\236\0\361\261\0\372\270\3\357\261\7SA\16\313\313\313\364" + "\364\364\376\376\376\204\377\377\377\204\376\376\376\24\375\375\375\373" + "\373\373\371\371\371\366\366\366\361\361\361\353\353\353\342\342\342" + "\331\331\331\321\321\321\303\303\303\244\244\244Z\\\\\36*4#\77W\36\77" + "Y\35=Z\36>Z\35>Y\36=Z\36>Z\202\35=Z\13\36=Z\35=Z\36=Y\36=Z\35>Z\35=Z" + "\36>Z\36=Z\35=Y\35>Z\35>Y\202\36=Z\33\36>Y\35=Y\34;W\33""9T\32""7P\31" + "4K\27""1H\27/D-BS+\77P2DT2DS2DT3FW\26.C\30""0F\30""3K\31""5N\32""8R\33" + ":T\35Y\36=Z\35>Z\36>Z\35>Z\36=Y\202\36=Z\23\35>Z\36>Y\35=Z\35>" + "Z\35=Z\35>Y\35=Y\35>Y\36=Z\35Z\36=Z\35>Y\36>Z\203\35=Y\12\35>Z\35=Y\34;V\34""9S\31""6O\31" + "5M\30""4L\30""3L\30""3K\31""4L\202\30""4L\1\31""4K\202\30""4L\202\31" + "4L\11\31""6N\32""8Q\34:U\35=X\35>X\35>Z\35>Y\36\77\\\36\77[\202\35>[" + "\203\36>[\32\36\77[\36>\\\35>[\36>[\36\77\\\35\77[\36\77[\35>[\36>[\35" + "=Y\33\26" + ".D\31""4L\33""8R\34=W\202\36>[\1\36\77[\203\35>[\202\36>[\24\36\77\\" + "\36>[\35\77[\36>[\36\77[\34[\202\36\77" + "[\1\35\77[\202\35>[\202\36>[\33\35=[\35;W\32""9S\31""4M\27""0F\25,A\24" + "+>\24*>\25,@\26.E\30""2J\32""6P\33""8R\32""8S\32""6P\31""5N\31""5M\32" + "6M\32""6O\33""7Q\34;U\34=X\35=Z\36>\\\36\77[\36\77\\\35>[\202\36>[\2" + "\36\77[\36>[\202\35>[\30\36>\\\35\77[\36\77[\35\77[\36\77[\36>\\\35\77" + "[,CUiP\11\277\214\0\364\263\3\367\267\12\233t\10VSJ\211\210\207oW\27" + "\307\221\0\350\252\0\370\266\1\372\270\5\275\214\6f^G\343\343\343\372" + "\372\372\203\377\377\377\1\376\376\376\202\375\375\375\25\374\374\374" + "\373\373\373\371\371\371\367\367\367\364\364\364\360\360\360\352\352" + "\352\343\343\343\335\335\335\322\322\322\310\310\310\272\272\272\224" + "\224\224DFG\35*5%AZ\35>\\\37\77[\35\77[\35>[\36\77[\206\36>[\4\35>[\35" + "\77[\36>[\35>\\\203\36>[\3\35>\\\35\77[\36>[\202\35>[\3\36>[\36\77\\" + "\36\77[\202\36>[\22\36>Z\35=Y\35;X\34;U\33:T\33""9T\34:U\34:V\34=X\36" + "=Z\35>[\36\77[\35>[\36>\\\35\77\\\36\77[\35>[\36\77[\202\36>[\5\35>\\" + "\36\77\\\36>[\36>\\\36\77[\202\36>[\6\36>\\\36>[\36\77\\\36>\\\36\77" + "\\\36>[\202\35>[\21\35\77\\\36>\\\35>[\36=Z\35[\35>\\\35\77[\36>[\35>\\\202\36>[\5\35>[\36\77" + "[\36>[\35>\\\36\77[\202\36>[\1\35>[\203\36>[\10\36\77\\\36>[\35\77\\" + "\36>[\35>[\36\77[\35\77[\36\77[\202\36>[\1\36\77\\\202\36>[\15\35\77" + "[\36\77[\35>\\\35\77[\36>\\\35>[\35\77]\36\77]\36@]\36\77]\36@]\35\77" + "\\\36@]\202\36\77]\37\35\77]\36\77]\36@]\36@\\\35\77]\36\77]\36@\\\36" + "\77[\35>[\35Z\36>\\\36\77\\\36@]\36\77]\36@]\36\77]\36@]\36" + "\77]\202\36@]\1\36\77]\202\36@\\\20\36@]\36\77\\\35>[\33\\\36@]\202" + "\36\77]\2\35\77]\36\77\\\202\36\77]\203\36@]\21\36\77]\36\77\\\35\77" + "\\\35=Z\34Y" + "\35[\36\77\\\35\77]\36\77]\202\36@]\7" + "\36@\\\35@]\36@]\36\77]\36@]\36\77]\36@]\202\36\77]\1\36@\\\204\36\77" + "]\21$C^A9\31\253}\0\347\251\0\372\271\6\362\264\12w]\26\\Q5\252|\0\336" + "\243\0\363\262\0\372\270\2\370\267\6\212h\10\215\214\207\354\354\354" + "\373\373\373\202\375\375\375\202\374\374\374\25\372\372\372\371\371\371" + "\367\367\367\364\364\364\361\361\361\356\356\356\351\351\351\344\344" + "\344\335\335\335\325\325\325\316\316\316\304\304\304\262\262\261\203" + "\203\204246\40.;&D^\37\77]!B_\37@^\36@]\202\36\77]\4\36\77\\\36@]\36" + "\77]\36\77\\\202\36\77]\15\36\77\\\36\77]\35@\\\36\77\\\36\77]\36\77" + "\\\36@]\36\77\\\35\77\\\35\77]\36@]\36\77]\36\77\\\202\36\77]\1\36@]" + "\202\36\77]\4\36\77[\36>[\34>[\35=Y\202\35>Z\5\35>[\36>\\\36\77\\\36" + "\77]\36\77\\\206\36\77]\2\35\77\\\36\77]\202\36\77\\\4\36@]\35\77\\\36" + "\77]\36@\\\202\36\77]\202\36@]\13\36\77]\36\77\\\36@\\\35\77]\36\77]" + "\36@]\36\77]\35\77]\36@\\\36\77\\\35>[\202\35=Z\1\35=Y\202\35>[\6\35" + "\77[\35\77]\36@]\36\77\\\35\77\\\36\77]\203\36\77\\\5\36@]\36\77\\\35" + "@]\36\77]\35@\\\203\36\77]\203\36@]\1\36\77\\\202\36\77]\1\36@]\202\36" + "\77]\6\35\77\\\36\77]\36\77\\\36\77]\35@]\36\77\\\204\36\77]\10\36\77" + "\\\36\77]\37A^\36@^\36A^\37@^\36@^\37@^\205\36@^\11\36A^\36@^\37A^\36" + "@_\37@^\36@^\37@_\36A^\37@^\211\36@^\202\37@^\2\36@_\37@_\202\36@^\202" + "\36@_\1\36A^\202\36@^\2\37@^\36A^\202\36@^\203\36A^\1\36@_\203\36@^\2" + "\37A^\36@_\203\36@^\1\37@^\203\36@^\5\36@_\36@^\37@^\36@^\36A^\202\36" + "@_\1\36A^\203\37@_\2\36@^\37@^\207\36@^\203\37@^\4\36A^\36@_\36@^\36" + "@_\203\36@^\1\37@^\203\36@^\12\37A^\37@^\36@^\36A^\37@^\36@_\36A^\37" + "@_\36@^\36A^\206\36@^\21\36A^\37A^3=<\213g\3\321\231\0\370\266\1\372" + "\270\6\361\262\6\322\232\1\362\261\0\361\261\0\371\266\1\372\270\3\340" + "\246\7l[*\257\257\257\353\353\353\204\363\363\363\24\362\362\362\360" + "\360\360\355\355\355\352\352\352\346\346\346\342\342\342\336\336\336" + "\331\331\331\324\324\324\314\314\314\301\301\301\251\251\251yyz367\35" + "\"'0\77M)Gb\40A_\40C`$C`\202\36@^\2\37@_\36@^\202\36A^\2\36@^\36A^\202" + "\36@^\202\36@_\204\36@^\1\36@_\203\36@^\2\37@^\36A^\202\36@^\5\36@_\36" + "@^\36A_\36@^\36A^\203\36@^\5\37A^\36@^\36@_\36@^\36@_\204\36@^\4\37@" + "^\36@^\36A^\36@_\202\37@_\202\36@^\1\36A^\203\36@^\202\36A^\7\36@^\37" + "@^\36A^\36@^\37@_\36@^\37@_\202\36@^\11\37@^\36@^\36A^\36@^\36A^\36@" + "^\36@_\36@^\36A^\203\36@^\1\36@_\202\37@^\1\36A^\204\36@^\5\36A^\36@" + "^\36@_\36@^\36@_\202\36@^\1\36A^\204\36@^\6\36@_\36@^\37A^\36@^\37@^" + "\36A^\207\36@^\3\36A^\37@^\36A_\202\37A`\4\37B`\37A_\36A_\37A`\203\37" + "A_\202\36A_\4\36A`\37A_\36B`\37B_\202\36A_\3\37A`\36A`\36A_\202\37A_" + "\4\37A`\36A_\37A`\37B`\205\36A`\202\36A_\1\37A_\204\36A_\1\36A`\202\37" + "A_\1\36A`\202\37A_\1\37A`\202\36A`\1\37A_\202\36A_\202\36A`\24\37A`\36" + "A`\37A`\36A`\37A_\36B`\37A_\36A`\37A_\37A`\36A`\37A_\36A_\36A`\37A`\36" + "A_\37A`\36A_\36A`\36B`\202\37A`\2\36A_\37A`\202\37A_\3\37A`\36A`\37A" + "`\202\36A`\1\36A_\202\36A`\4\36A_\37A`\36B`\37A_\202\37A`\2\36A_\37A" + "_\203\37A`\6\36A_\37A_\36A_\37A_\37A`\36A_\202\36A`\12\36A_\37A`\37A" + "_\36A_\36A`\37A`(9CqU\5\302\216\0\357\257\0\202\372\267\2\11\372\267" + "\1\371\266\0\370\265\0\372\267\1\372\270\5\305\222\10_ZN\303\303\303" + "\344\344\344\204\347\347\347\24\346\346\346\344\344\344\341\341\341\336" + "\336\336\331\331\331\323\323\323\316\316\316\312\312\312\273\273\273" + "\242\242\242\201\201\202CEG&-1-\77@TUUnoo\211\211\211\203" + "\221\221\221\14\220\220\220\215\215\215pppSTT;=@'/6$3\77)=M'AX!C`\37" + "Bc\37Cc\203\37Cb\1\37Bb\202\37Cb\4\37Bc\37Cb\37Cc\36Cb\203\37Cc\6\37" + "Cb\37Cc\37Cb\37Cc\37Cb\37Bc\202\37Cb\2\37Cc\37Cb\204\37Cc\202\37Cb\1" + "\37Cc\202\37Bb\202\37Cb\1\37Bc\202\37Cb\204\37Cc\3\37Bc\36Cc\37Cc\202" + "\37Cb\13\37Cc\37Bc\37Cb\36Cc\37Cb\37Cc\37Bb\37Cb\37Bc\37Cb\37Cc\207\37" + "Cb\203\37Cc\1\37Bc\203\37Cb\202\37Cc\2\37Bb\37Cc\202\37Cb\1\37Cc\203" + "\37Cb\1\37Cc\202\37Cb\1\37Bc\203\37Cb\16\37Cc\37Cb\36Cc\37Bc\37Cb\37" + "Cc\37Cb\37Bc\36Cb\37Cb\37Bc\37Cc\37Cb\37Bc\202\37Cb\3\37Bc\37Cb\37Bb" + "\202\37Cc\13\37Cb\37Cc\37Cb\37Cc\37Bc\37Cb\36Cc\36Cb\37Cb\37Cd\40Cd\202" + "\37Dd\3\40Cd\37Cd\40Cd\202\37Dd\202\37Cd\202\37Dd\2\37Cd\37Dd\202\37" + "Cd\207\37Dd\1\37Cd\202\37Dd\7\37Cd\37Dd\37Dc\40Dd\37Cd\40Cd\37Dd\202" + "\37Cd\203\37Dd\1\40Dd\205\37Dd\1\37Cd\204\37Dd\14\37Dc\40Cd\37Dd\37C" + "d\37Dd\37Cd\37Dd\37Cd\37Dd\40Dc\37Dd\37Cd\212\37Dd\1\40Dd\202\37Dd\4" + "\40Cd\37Cd\40Dd\40Cd\203\37Dd\202\37Cd\202\37Dd\1\37Cd\202\37Dd\202\37" + "Cd\2\40Dd\37Cd\202\37Dd\1\40Cd\202\37Dd\1\37Cd\202\37Dd\2\40Dc\37Cd\205" + "\37Dd#\37Cd\37Dd\37Cd\37Dd\40Dd+DW]K\17\251|\1\326\234\0\360\260\0\370" + "\266\0\372\267\0\372\267\1\372\270\5\303\220\10).11FY+BX';K#2\77$0;%" + "08%/8%08%/9$0;\"2@&:L'AW%D_\"Dd\40Ed\40Dd\37Dd\37Cd\203\37Dd\1\40Dd\202" + "\37Dd\5\37Cd\37Dd\40Cd\37Dd\37Cd\202\37Dd\2\37Cd\40Dd\202\37Dd\1\40D" + "d\203\37Dd\1\37Cd\203\37Dd\7\37Cc\37Dd\37Dc\37Dd\40Dc\37Cd\40Dd\211\37" + "Dd\15\40Cd\37Cd\37Dd\37Dc\37Cd\37Dd\37Cd\40Cd\37Dc\37Dd\40Dd\37Cd\37" + "Dd\202\37Cd\4\37Dd\40Cc\37Dd\37Cd\203\37Dd\2\37Cd\40Dd\202\37Cd\203\37" + "Dd\1\40Cd\204\37Dd\1\40Cd\204\37Dd\2\37Cd\37Dc\202\37Dd\20\37Cd\40Dd" + "\37Dd\37Cd\37Dd\37Cd\37Dd\37Cd\37Dd\37Cd\37Dd\40Cd\37Cd\37Dd\40Cd\40" + "Dd\205\37Dd\202\37Cd\3\37Dd\40Dd\37Dd\202\37Cd\203\37Dd\204\37Cd\202" + "\40Ef\14\37Ef\40Ee\37Ee\37De\40Ee\37De\37Ee\37De\40Df\37Ee\40De\40Ee" + "\202\40De\20\37Ef\40Ee\37Df\37Ee\40De\37Df\40De\40Ee\40Ef\37Ef\37De\40" + "Ee\40Df\37Ef\40Ee\37Df\202\40Df\5\37Ef\37Df\40Ee\40Ef\40Ee\202\37Ee\3" + "\40Ee\37Ee\37De\202\40De\202\40Ee\11\37De\40De\37Df\37De\40Ee\40De\40" + "Df\40Ee\37Ef\202\37Ee\2\37De\40Ee\202\40Df\1\37Ef\202\37Df\6\40De\37" + "Ee\37Df\40Dfdw\214\337\342\346\202\377\377\377\5\352\354\356u\206\227" + "\37EeQh\200\337\342\346\202\377\377\377\3\337\342\346Qh\200\40Ef\202" + "\37Ee\4\37De\40De\37De\37Ef\202\37Df\12\324\330\335\224\240\255\37Df" + "\37Ee\37De\40Ef\40De\37De\37Df\40Ee\202\37Ee\6\37Dev\206\227\352\354" + "\356\40De\37De\37Ef\202\37Ee\14\37De%Hf4@BiO\6\261\202\1\337\243\0\363" + "\262\0\371\266\0\372\270\3\370\267\7iR\15""7M_\202!Ff\20!Egey\214\377" + "\377\377\365\366\367%Hg%Gg%Hh#Ff!Ef\40Ef\37Ef\37Df\40Ee\37Df\37EeQh\200" + "\204\377\377\377\31\337\342\346;Ws\242\254\267\274\303\312\37De\40De" + "\37Ee\37De\40Ef\37Ee\37De\40Ee\37Ee\40Ef\37Ef\37De\37Ee\40Ef\37Ee\40" + "Efu\206\227\242\254\267\37Ee\37Df\37Ee\203\40De\7Qh\200\310\315\324\37" + "Ee\324\330\335\224\240\255\40Ef\40De\203\37Ee\13\40Ef\37Df\37De\37Ef" + "\40Df\37Ef\40Ef\40Ee\40DeQh\200\337\342\346\202\377\377\377\5\242\254" + "\267\40Df\37De\40Ee\37Ee\205\377\377\377\1\224\240\255\203\37Ee\2\40" + "Df\40De\203\40Ee\3\40Df\40De\40Ef\202\37Ef\23\40Ee\242\254\267\274\303" + "\312\37De\40Ee\40Ef\40De\37Ef\37Eev\206\227\242\254\267\37De\37Ee\40" + "Df\37Ef\37Ee\40De\37Ef\37Df\202\37Ee\3\40Ef\40De\40Ee\202\37Ef\4\40E" + "e\37Df\37Ef\40Ef\203\37Ee\27\40Df\40Ee\40Df\40De\37Ee\40Ef\37De\40De" + "\40Eg\40Fg\40Ff\40Fg\37Eg\37Ff\40Eg\37Eg\40Fg\37Ef\40Ef\40Fg\37Eg\37" + "Fg\37Eg\202\37Fg\202\37Eg\1\40Fg\202\37Eg\203\40Fg\202\40Eg\2\37Eg\37" + "Ef\202\40Fg\202\40Eg\3\40Ef\40Fg\40Eg\202\40Fg\204\40Eg\7\40Ef\37Eg\40" + "Eg\37Eg\37Fg\40Eg\40Ff\202\40Eg\3\40Fg\40Eg\40Ff\202\40Fg\7\37Eg\40F" + "g\37Fg\40Fg\37Fg\40Fg\37Eg\202\40Fg\1\37Fg\202\37Eg\22\40Eg&\251}\1\310\223\1}c\25""5JX$Km!Il\40Im\40Il!Im\242\255\272\274\304" + "\315Qk\205\377\377\377v\210\233!Il\324\331\336\310\316\326v\210\233\352" + "\354\357\40Im!Il\202\40Il\3Qk\206\377\377\377!Il\202!Im\202!Il\11\242" + "\255\272\274\304\315\242\255\272\352\354\357<[yez\220\377\377\377v\210" + "\233!Il\202\352\354\357\3\242\255\272!Im!Il\202\40Im\1\337\343\347\202" + "\242\255\272\30\274\304\314dz\220\377\377\377ez\220<[y\352\354\357\242" + "\255\272v\210\233\352\354\357!Im\324\331\336\224\241\260\274\304\314" + "\324\331\336\40Ilv\210\234\377\377\377dy\220\324\331\336\224\241\260" + "!Im\224\241\260\324\331\336\40Il\202!Il\6ez\221\352\354\357\224\241\260" + "!Im!Hm!Il\202!Im)!Il\377\377\377Rk\206!Il!Hl!Il\40Hl\242\255\272\274" + "\304\314\40Il\224\241\260\324\331\336!Hm\224\241\260\352\354\357v\210" + "\233\365\366\367<[zdz\220\377\377\377v\210\233\242\255\272\274\304\314" + "\310\316\326\310\316\325\40Im\242\255\272\377\377\377\40Hl\242\255\272" + "\274\304\314Rk\206\377\377\377v\210\233!Il\324\331\336\310\316\326\242" + "\255\272\274\304\314\40Il!Im\202\40Im\4\206\225\246\377\377\377!Il\40" + "Im\202\40Il\202!Im\1!Il\205!Im\5\40Im\40Hl!Il!Hl!Jm\203!Jn\1!Jm\207!" + "Jn\3\40Jn!Jm!Jn\202!In\202!Jn\5!Im!Jn!In\40Jn!In\205!Jn\1!Im\203!Jn\3" + "!In\40Jn!Jm\203!Jn\1!In\202!Jn\202\40Jn\2!Jn!In\205!Jn\3!Jm!Jn!Jm\202" + "!Jn\1!In\203!Jn\2!Im!Jm\202!Jn\1!Im\202!Jm\5!Jn\40Jn!Jne{\221\324\331" + "\336\202\377\377\377\5\352\354\357\224\242\261!Jne{\222\337\343\347\202" + "\377\377\377\2\352\354\357v\210\234\203!Jn\17v\210\234\365\366\367\352" + "\354\357\377\377\377\274\304\315!In\324\331\336\224\242\261Rl\206\352" + "\354\357\377\377\377\324\331\336\377\377\377!In\242\256\272\202\377\377" + "\377\23\337\343\347\242\256\272v\210\234\352\354\357!Jn\377\377\377R" + "k\206!Jn\274\304\315\242\256\272!Jm!Im!Jm!Jn(Ic.>@5DE0Kb&Ln\203!Jn\6" + "!Jm!Jn\242\256\272\274\304\315!Jn\242\255\272\202\377\377\377\4\337\343" + "\347Ql\206v\210\234\352\354\357\202!In\6!Jn!InRk\206\377\377\377!In!" + "Jn\202!In\17\40Jn\242\256\272\274\304\315e{\222\365\366\367\377\377\377" + "\337\343\347\352\354\357\206\225\246\40Jn\242\256\272\377\377\377Rl\206" + "!Jm\324\331\336\202\377\377\377\14\337\343\347Rl\206\224\242\261\377" + "\377\377\242\255\272\337\343\347\377\377\377\352\354\357\324\331\336" + "\257\271\304Ql\206\377\377\377\202\324\331\336\3\224\242\261Rl\206\337" + "\343\347\202\377\377\377\13\242\256\272!Jn\324\331\336\224\242\261!I" + "n\224\242\261\324\331\336!In!Im!In\337\343\347\204\377\377\377\1Rl\206" + "\203!Jn\205\377\377\377\202\242\256\272\20\274\304\315!Jn\224\242\261" + "\324\331\336!Jn\224\241\261\352\354\357!In\324\331\336\377\377\377\337" + "\343\347\365\366\367v\210\234\242\256\272\274\304\315\224\242\261\202" + "\377\377\377\5\310\316\326\377\377\377<\\{\224\242\260\377\377\377\202" + "\242\256\272\202\377\377\377\7\337\343\347Rl\206\242\255\272\274\304" + "\315!Jnv\210\234\365\366\367\202\377\377\377\5\242\255\272\40Jn!In\40" + "Jn!Im\202!Jn\1\40Jn\205!Jn\1!Jm\202!Jn\1!In\202!Ko\3!Jo!Kp!Jo\202!Kp" + "\202!Jo\3!Ko!Kp!Jo\202!Ko\4!Jp\"Jo!Ko!Jo\203!Ko\11\"Kp!Jp!Ko!Jo!Ko\"" + "Jo!Kp!Jo\"Ko\202!Ko\1!Jo\202!Ko\3\"Jo!Ko!Jo\202!Ko\10!Kp\"Jp!Kp!Jo!J" + "p\"Jo!Ko!Kp\204!Ko\1!Kp\203!Ko\"\"Ko!Jo!Ko!Jp!Kp!Ko!Jo!Kp\"Jo!Jo!Kp!" + "Jp!Ko!Jo!Jp\"Ko!Kp!Jo!Ko!Jo\"Jo!Ko!Jo!Ko!Kp!Ko\"Jo!Kp!Jo!Kov\211\235" + "\352\354\357\"Kp\"Ko\203!Jo\2!Kp!Jo\202!Ko\10\"Jo!KpRl\210\377\377\377" + "e{\222=]{\352\354\357\242\256\273\202!Jo\4!Ko!Jo\"Ko!Jo\205!Ko\6!Kp!" + "Ko#Lo#Ko\"Jp\"Kp\202!Ko\3\"Ko!Jo\"Ko\205!Ko\3!Jo!Jp\"Jp\202!Jo\3!Kp!" + "Jo!Jp\202!Jo\202!Ko\5!Jo!Kp!Ko!Jo!Ko\202!Jo\202!Kp\202!Jo\4!Kp\"Jo\274" + "\304\315\324\331\337\205!Jo\2!Ko!Kp\202!Ko\1!Jo\202!Ko\2!Jo!Kp\203!K" + "o\202!Jo\6\"Ko!Jo\"Ko!Jp!Ko!Jo\202!Ko\13!Kp!Ko!Jo!Ko!Jp!Kp\"Ko!Ko\"K" + "o!Kp!Jo\205!Ko\2\"Jp!Ko\202!Jo\202!Ko\202!Jo\6!Ko!Jo\"Kp!Jp!Kp!Jp\202" + "!Ko\3!Jo!Jp!Jo\203!Ko\1!Jo\203!Ko\2!Jp!Jo\203!Ko\3!Kp!Ko!Jo\202!Ko\2" + "!Jo!Ko\202!Jo\202!Ko\2!Kp\"Ko\203!Ko\1!Jp\205!Ko\5!Kp!Jo!Jp!Ko!Jo\202" + "!Ko\20!Lq!Kp\"Kq!Kq!Kp\"Lq!Kq!Lq\"Lp!Kp\"Kq!Lq!Kq!Lq\"Lp\"Lq\202!Lq\10" + "\"Lq!Lp!Kp\"Lp!Lp!Kq\"Lq!Lq\202!Kq\11\"Kq!Kq!Lq\"Lp!Kq!Lp!Kq!Lq\"Lp\202" + "\"Kq\202!Lq\6\"Kp!Lq\"Lp!Kq\"Lp\"Kp\202!Kp\12!Lp\"Kp\"Kq\"Kp!Kq!Kp!K" + "q!Lq!Kq!Lq\202!Kq\15\"Lp\"Kp!Kq\"Lp!Kp!Lp!Kp\"Kp\"Lq!Kq!Lq!Kp!Lp\202" + "!Lq\2!Kp\"Lp\202!Kq\13!Kp!Lp\"Kp!Kp!Lp\"Lqv\211\236\352\354\357!Lp!K" + "q\"Lq\202!Lq\3!Lp\"Kq\"Lq\202!Lq\3!Kq!Lq\274\304\315\202\377\377\377" + "\6\324\331\337=]}\"Kq!Lq!Kq\"Kq\202!Lp\14\"Lp!Kq!Lq\"Lp!Lp!Lq!Kq!Lq!" + "Lp\"Lp!Kp\"Kq\202!Kp\202\"Kq\1!Lp\202!Lq\202!Lp\4\"Lq!Lp!Kp!Lp\202!K" + "q\11\"Lq\"Kq!Lq!Kp\"Kq!Kq\"Lp!Lq!Kq\203\"Lp\11\"Kq!Lq\"Kq\"Lq\"Lp!Kq" + "\324\331\337\377\377\377e|\224\203!Kq\20\"Lp!Kq!Lp\"Lp!Kq\"Kp!Kq!Lq\"" + "Lp!Kp!Lp\"Kq\"Lq!Kp!Kq\"Kq\203\"Lp\23!Kp!Kq\"Lq!Kq!Lq!Kp\"Kp!Kq!Lp!K" + "q!Lq\"Lq\"Kp!Lp\"Kp!Lp\"Lq!Lq!Lp\203!Kq\6!Kp\"Lp\"Lq!Kq!Lp\"Lp\202!L" + "p\202\"Lp\10!Kp!Kq!Kp!Kq!Lp!Kq!Lp!Kp\202!Kq\13!Lp\"Kq!Kp!Lp\"Lq!Lp!K" + "q\"Kp!Lq!Kq!Kp\202!Lq\202!Kp\1\"Lp\202!Kq\6!Lq!Kq!Lq\"Lq!Kq!Lp\202!L" + "q\203!Kq\3!Kp!Lp\"Kq\202!Kp\1\"Lq\202!Kq\4!Lq\"Kq!Lr!Mr\202!Lr\2!Mr!" + "Lr\203\"Lr\203\"Mr\202!Lr\204\"Lr\2!Lr\"Lr\202!Lr\202\"Mr\2!Lr\"Lr\202" + "!Lr\202\"Lr\4!Lr\"Lr!Lr\"Lr\202!Lr\10\"Lr!Lr\"Mr\"Lr!Lr\"Mr\"Lr!Mr\202" + "\"Lr\4!Lr\"Mr!Lr\"Mr\203\"Lr\4!Mq\"Lr\"Mr!Lr\202\"Lr\1!Lr\204\"Lr\10" + "!Lr\"Mr!Mr\"Lr\"Mr\"Lr!Mr\"Mr\203!Lr\6\"Lr!Lr\"Lr\"Lq!Lr\"Mr\204!Lr\202" + "\"Lr\7!Mr!Lr\"Mr!Mr!Mq\"Mr\"Lr\203!Lr\6!Mr!Lr\"Mr\"Lr!Mr!Lr\202\"Lr\14" + "!Lr!Mr\"Lq!Lr\"Lr!Mr!Lr\"Mr\"Lr!Mr\"Lr!Lr\204\"Lr\2\"Mr!Mr\202!Lr\2!" + "Mr\"Mr\202\"Lr\202!Mr\1!Lr\203\"Lr\5!Lr\"Lr!Lr\"Lr!Lr\202\"Lr\202\"M" + "r\1\"Lr\202!Mr\202\"Mr\3\"Lr!Lr!Mr\202!Lr\2\"Lr!Lr\203\"Lr\11!Lr\"Mr" + "\"Lr\"Mr!Mr\"Lq!Lr\"Mr!Mr\202!Lr\3\"Lr!Lr\"Lr\202!Mr\202\"Lr\11!Lr\"" + "Lr!Lr\"Lr!Lr\"Lr!Mr!Lr\"Mr\202!Lr\2\"Lr!Mr\204\"Lr\4!Lr\"Lr\"Mr\"Lr\202" + "\"Mr\7!Lr\"Lr!Lr!Mr!Lr\"Lr\"Mr\202\"Lr\202!Lr\5\"Lr!Mr!Lr\"Mr!Lr\203" + "\"Lr\6!Lr!Mr\"Mr!Mr!Lr\"Lr\203!Lr\4\"Mr\"Lr!Lr!Mr\204\"Lr\1\"Mr\203\"" + "Lr\4!Mr!Lr\"Lr\"Mr\202\"Lr\5\"Mr\"Lr!Lr\"Lr\"Mr\202\"Lr\3\"Mr!Lr\"Mr" + "\203\"Lr\3!Lr\"Lr!Lr", }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLocalMemory.cpp pcsx2-1.4.0/plugins/GSdx/GSLocalMemory.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLocalMemory.cpp 2014-09-16 03:37:06.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLocalMemory.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -37,10 +37,10 @@ int _offset = dstpitch * h; \ for(int y = _r.top; y < _r.bottom; y += h >> 3, _dst += _offset) \ { \ - uint32 _base = o->block.row[y]; \ + uint32 _base = off->block.row[y]; \ for(int x = _r.left; x < _r.right; x += w >> 3) \ { \ - const uint8* src = BlockPtr(_base + o->block.col[x]); \ + const uint8* src = BlockPtr(_base + off->block.col[x]); \ uint8* dst = &_dst[x * bpp]; \ #define FOREACH_BLOCK_END }} @@ -474,11 +474,11 @@ return i->second; } - GSOffset* o = new GSOffset(bp, bw, psm); + GSOffset* off = new GSOffset(bp, bw, psm); - m_omap[hash] = o; + m_omap[hash] = off; - return o; + return off; } GSPixelOffset* GSLocalMemory::GetPixelOffset(const GIFRegFRAME& FRAME, const GIFRegZBUF& ZBUF) @@ -505,14 +505,14 @@ return i->second; } - GSPixelOffset* o = (GSPixelOffset*)_aligned_malloc(sizeof(GSPixelOffset), 32); + GSPixelOffset* off = (GSPixelOffset*)_aligned_malloc(sizeof(GSPixelOffset), 32); - o->hash = hash; - o->fbp = fbp; - o->zbp = zbp; - o->fpsm = fpsm; - o->zpsm = zpsm; - o->bw = bw; + off->hash = hash; + off->fbp = fbp; + off->zbp = zbp; + off->fpsm = fpsm; + off->zpsm = zpsm; + off->bw = bw; pixelAddress fpa = m_psm[fpsm].pa; pixelAddress zpa = m_psm[zpsm].pa; @@ -522,19 +522,19 @@ for(int i = 0; i < 2048; i++) { - o->row[i].x = (int)fpa(0, i, fbp, bw) << fs; - o->row[i].y = (int)zpa(0, i, zbp, bw) << zs; + off->row[i].x = (int)fpa(0, i, fbp, bw) << fs; + off->row[i].y = (int)zpa(0, i, zbp, bw) << zs; } for(int i = 0; i < 2048; i++) { - o->col[i].x = m_psm[fpsm].rowOffset[0][i] << fs; - o->col[i].y = m_psm[zpsm].rowOffset[0][i] << zs; + off->col[i].x = m_psm[fpsm].rowOffset[0][i] << fs; + off->col[i].y = m_psm[zpsm].rowOffset[0][i] << zs; } - m_pomap[hash] = o; + m_pomap[hash] = off; - return o; + return off; } GSPixelOffset4* GSLocalMemory::GetPixelOffset4(const GIFRegFRAME& FRAME, const GIFRegZBUF& ZBUF) @@ -561,14 +561,14 @@ return i->second; } - GSPixelOffset4* o = (GSPixelOffset4*)_aligned_malloc(sizeof(GSPixelOffset4), 32); + GSPixelOffset4* off = (GSPixelOffset4*)_aligned_malloc(sizeof(GSPixelOffset4), 32); - o->hash = hash; - o->fbp = fbp; - o->zbp = zbp; - o->fpsm = fpsm; - o->zpsm = zpsm; - o->bw = bw; + off->hash = hash; + off->fbp = fbp; + off->zbp = zbp; + off->fpsm = fpsm; + off->zpsm = zpsm; + off->bw = bw; pixelAddress fpa = m_psm[fpsm].pa; pixelAddress zpa = m_psm[zpsm].pa; @@ -578,19 +578,19 @@ for(int i = 0; i < 2048; i++) { - o->row[i].x = (int)fpa(0, i, fbp, bw) << fs; - o->row[i].y = (int)zpa(0, i, zbp, bw) << zs; + off->row[i].x = (int)fpa(0, i, fbp, bw) << fs; + off->row[i].y = (int)zpa(0, i, zbp, bw) << zs; } for(int i = 0; i < 512; i++) { - o->col[i].x = m_psm[fpsm].rowOffset[0][i * 4] << fs; - o->col[i].y = m_psm[zpsm].rowOffset[0][i * 4] << zs; + off->col[i].x = m_psm[fpsm].rowOffset[0][i * 4] << fs; + off->col[i].y = m_psm[zpsm].rowOffset[0][i * 4] << zs; } - m_po4map[hash] = o; + m_po4map[hash] = off; - return o; + return off; } static bool cmp_vec2x(const GSVector2i& a, const GSVector2i& b) {return a.x < b.x;} @@ -611,17 +611,17 @@ int tw = std::max(1 << TEX0.TW, bs.x); int th = std::max(1 << TEX0.TH, bs.y); - const GSOffset* o = GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); + const GSOffset* off = GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); hash_map > tmp; // key = page, value = y:x, 7 bits each, max 128x128 tiles for the worst case (1024x1024 32bpp 8x8 blocks) for(int y = 0; y < th; y += bs.y) { - uint32 base = o->block.row[y >> 3]; + uint32 base = off->block.row[y >> 3]; for(int x = 0, i = y << 7; x < tw; x += bs.x, i += bs.x) { - uint32 page = (base + o->block.col[x >> 3]) >> 5; + uint32 page = (base + off->block.col[x >> 3]) >> 5; if(page < MAX_PAGES) { @@ -1422,10 +1422,10 @@ for(int ex8 = ex - 8; len >= 8 && x <= ex8; len -= 8, x += 8, pd += 8) { - int o = offset[x]; + int off = offset[x]; - GSVector4i::store(&pd[0], GSVector4i::load(&ps[o + 0], &ps[o + 4])); - GSVector4i::store(&pd[4], GSVector4i::load(&ps[o + 8], &ps[o + 12])); + GSVector4i::store(&pd[0], GSVector4i::load(&ps[off + 0], &ps[off + 4])); + GSVector4i::store(&pd[4], GSVector4i::load(&ps[off + 8], &ps[off + 12])); for(int i = 0; i < 8; i++) ASSERT(pd[i] == ps[offset[x + i]]); } @@ -1608,7 +1608,7 @@ /////////////////// -void GSLocalMemory::ReadTexture32(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture32(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 8, 8, 32) { @@ -1617,7 +1617,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture24(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture24(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { if(TEXA.AEM) { @@ -1637,7 +1637,7 @@ } } -void GSLocalMemory::ReadTexture16(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture16(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { if(TEXA.AEM) { @@ -1657,7 +1657,7 @@ } } -void GSLocalMemory::ReadTexture8(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture8(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { const uint32* pal = m_clut; @@ -1668,7 +1668,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { const uint64* pal = m_clut; @@ -1679,7 +1679,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture8H(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture8H(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { const uint32* pal = m_clut; @@ -1690,7 +1690,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4HL(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4HL(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { const uint32* pal = m_clut; @@ -1701,7 +1701,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4HH(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4HH(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { const uint32* pal = m_clut; @@ -1786,9 +1786,9 @@ /////////////////// -void GSLocalMemory::ReadTexture(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { - const psm_t& psm = m_psm[o->psm]; + const psm_t& psm = m_psm[off->psm]; readTexel rt = psm.rt; readTexture rtx = psm.rtx; @@ -1799,9 +1799,9 @@ { GIFRegTEX0 TEX0; - TEX0.TBP0 = o->bp; - TEX0.TBW = o->bw; - TEX0.PSM = o->psm; + TEX0.TBP0 = off->bp; + TEX0.TBW = off->bw; + TEX0.PSM = off->psm; GSVector4i cr = r.ralign(psm.bs); @@ -1854,19 +1854,19 @@ if(!cr.rempty()) { - (this->*rtx)(o, cr, dst + (cr.left - r.left) * sizeof(32), dstpitch, TEXA); + (this->*rtx)(off, cr, dst + (cr.left - r.left) * sizeof(uint32), dstpitch, TEXA); } } } else { - (this->*rtx)(o, r, dst, dstpitch, TEXA); + (this->*rtx)(off, r, dst, dstpitch, TEXA); } } // 32/8 -void GSLocalMemory::ReadTexture8P(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture8P(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 16, 16, 8) { @@ -1875,7 +1875,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4P(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4P(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 32, 16, 8) { @@ -1884,7 +1884,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture8HP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture8HP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 8, 8, 8) { @@ -1893,7 +1893,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4HLP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4HLP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 8, 8, 8) { @@ -1902,7 +1902,7 @@ FOREACH_BLOCK_END } -void GSLocalMemory::ReadTexture4HHP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) +void GSLocalMemory::ReadTexture4HHP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) { FOREACH_BLOCK_START(r, 8, 8, 8) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLocalMemory.h pcsx2-1.4.0/plugins/GSdx/GSLocalMemory.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLocalMemory.h 2014-09-16 03:37:06.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLocalMemory.h 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,6 @@ #include "GSVector.h" #include "GSBlock.h" #include "GSClut.h" -#include "GSThread.h" class GSOffset : public GSAlignedClass<32> { @@ -91,7 +90,7 @@ typedef uint32 (GSLocalMemory::*readTexelAddr)(uint32 addr, const GIFRegTEXA& TEXA) const; typedef void (GSLocalMemory::*writeImage)(int& tx, int& ty, const uint8* src, int len, GIFRegBITBLTBUF& BITBLTBUF, GIFRegTRXPOS& TRXPOS, GIFRegTRXREG& TRXREG); typedef void (GSLocalMemory::*readImage)(int& tx, int& ty, uint8* dst, int len, GIFRegBITBLTBUF& BITBLTBUF, GIFRegTRXPOS& TRXPOS, GIFRegTRXREG& TRXREG) const; - typedef void (GSLocalMemory::*readTexture)(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + typedef void (GSLocalMemory::*readTexture)(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); typedef void (GSLocalMemory::*readTextureBlock)(uint32 bp, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) const; __aligned(struct, 128) psm_t @@ -668,15 +667,15 @@ WriteFrame16(PixelAddress16SZ(x, y, bp, bw), c); } - __forceinline void WritePixel32(uint8* RESTRICT src, uint32 pitch, GSOffset* o, const GSVector4i& r) + __forceinline void WritePixel32(uint8* RESTRICT src, uint32 pitch, GSOffset* off, const GSVector4i& r) { src -= r.left * sizeof(uint32); for(int y = r.top; y < r.bottom; y++, src += pitch) { uint32* RESTRICT s = (uint32*)src; - uint32* RESTRICT d = &m_vm32[o->pixel.row[y]]; - int* RESTRICT col = o->pixel.col[0]; + uint32* RESTRICT d = &m_vm32[off->pixel.row[y]]; + int* RESTRICT col = off->pixel.col[0]; for(int x = r.left; x < r.right; x++) { @@ -685,15 +684,15 @@ } } - __forceinline void WritePixel24(uint8* RESTRICT src, uint32 pitch, GSOffset* o, const GSVector4i& r) + __forceinline void WritePixel24(uint8* RESTRICT src, uint32 pitch, GSOffset* off, const GSVector4i& r) { src -= r.left * sizeof(uint32); for(int y = r.top; y < r.bottom; y++, src += pitch) { uint32* RESTRICT s = (uint32*)src; - uint32* RESTRICT d = &m_vm32[o->pixel.row[y]]; - int* RESTRICT col = o->pixel.col[0]; + uint32* RESTRICT d = &m_vm32[off->pixel.row[y]]; + int* RESTRICT col = off->pixel.col[0]; for(int x = r.left; x < r.right; x++) { @@ -702,15 +701,15 @@ } } - __forceinline void WritePixel16(uint8* RESTRICT src, uint32 pitch, GSOffset* o, const GSVector4i& r) + __forceinline void WritePixel16(uint8* RESTRICT src, uint32 pitch, GSOffset* off, const GSVector4i& r) { src -= r.left * sizeof(uint16); for(int y = r.top; y < r.bottom; y++, src += pitch) { uint16* RESTRICT s = (uint16*)src; - uint16* RESTRICT d = &m_vm16[o->pixel.row[y]]; - int* RESTRICT col = o->pixel.col[0]; + uint16* RESTRICT d = &m_vm16[off->pixel.row[y]]; + int* RESTRICT col = off->pixel.col[0]; for(int x = r.left; x < r.right; x++) { @@ -719,15 +718,15 @@ } } - __forceinline void WriteFrame16(uint8* RESTRICT src, uint32 pitch, GSOffset* o, const GSVector4i& r) + __forceinline void WriteFrame16(uint8* RESTRICT src, uint32 pitch, GSOffset* off, const GSVector4i& r) { src -= r.left * sizeof(uint32); for(int y = r.top; y < r.bottom; y++, src += pitch) { uint32* RESTRICT s = (uint32*)src; - uint16* RESTRICT d = &m_vm16[o->pixel.row[y]]; - int* RESTRICT col = o->pixel.col[0]; + uint16* RESTRICT d = &m_vm16[off->pixel.row[y]]; + int* RESTRICT col = off->pixel.col[0]; for(int x = r.left; x < r.right; x++) { @@ -874,16 +873,16 @@ // * => 32 - void ReadTexture32(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture24(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture16(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture8(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture8H(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4HL(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4HH(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture32(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture24(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture16(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture8(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture8H(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4HL(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4HH(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); void ReadTextureBlock32(uint32 bp, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) const; void ReadTextureBlock24(uint32 bp, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) const; @@ -896,11 +895,11 @@ // pal ? 8 : 32 - void ReadTexture8P(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4P(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture8HP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4HLP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); - void ReadTexture4HHP(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture8P(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4P(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture8HP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4HLP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + void ReadTexture4HHP(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); void ReadTextureBlock8P(uint32 bp, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) const; void ReadTextureBlock4P(uint32 bp, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA) const; @@ -910,7 +909,7 @@ // - template void ReadTexture(const GSOffset* RESTRICT o, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); + template void ReadTexture(const GSOffset* RESTRICT off, const GSVector4i& r, uint8* dst, int dstpitch, const GIFRegTEXA& TEXA); // diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLzma.cpp pcsx2-1.4.0/plugins/GSdx/GSLzma.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLzma.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLzma.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2015-2015 Gregory hainaut + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "stdafx.h" +#include "GSLzma.h" + +#ifdef __linux__ + +GSDumpFile::GSDumpFile(char* filename) { + m_fp = fopen(filename, "rb"); + if (m_fp == NULL) { + fprintf(stderr, "failed to open %s\n", filename); + throw "BAD"; // Just exit the program + } +} + +GSDumpFile::~GSDumpFile() { + if (m_fp) + fclose(m_fp); +} + +/******************************************************************/ +#ifdef LZMA_SUPPORTED + +GSDumpLzma::GSDumpLzma(char* filename) : GSDumpFile(filename) { + + memset(&m_strm, 0, sizeof(lzma_stream)); + + lzma_ret ret = lzma_stream_decoder(&m_strm, UINT32_MAX, 0); + + if (ret != LZMA_OK) { + fprintf(stderr, "Error initializing the decoder! (error code %u)\n", ret); + throw "BAD"; // Just exit the program + } + + m_buff_size = 1024*1024; + m_area = (uint8_t*)_aligned_malloc(m_buff_size, 32); + m_inbuf = (uint8_t*)_aligned_malloc(BUFSIZ, 32); + m_avail = 0; + m_start = 0; + + m_strm.avail_in = 0; + m_strm.next_in = m_inbuf; + + m_strm.avail_out = m_buff_size; + m_strm.next_out = m_area; +} + +void GSDumpLzma::Decompress() { + lzma_action action = LZMA_RUN; + + m_strm.next_out = m_area; + m_strm.avail_out = m_buff_size; + + // Nothing left in the input buffer. Read data from the file + if (m_strm.avail_in == 0 && !feof(m_fp)) { + m_strm.next_in = m_inbuf; + m_strm.avail_in = fread(m_inbuf, 1, BUFSIZ, m_fp); + + if (ferror(m_fp)) { + fprintf(stderr, "Read error: %s\n", strerror(errno)); + throw "BAD"; // Just exit the program + } + } + + lzma_ret ret = lzma_code(&m_strm, action); + + if (ret != LZMA_OK) { + if (ret == LZMA_STREAM_END) + fprintf(stderr, "LZMA decoder finished without error\n\n"); + else { + fprintf(stderr, "Decoder error: (error code %u)\n", ret); + throw "BAD"; // Just exit the program + } + } + + m_start = 0; + m_avail = m_buff_size - m_strm.avail_out; +} + +bool GSDumpLzma::IsEof() { + return feof(m_fp) && (m_avail == 0); +} + +void GSDumpLzma::Read(void* ptr, size_t size) { + size_t off = 0; + uint8_t* dst = (uint8_t*)ptr; + while (size) { + if (m_avail == 0) { + Decompress(); + } + + size_t l = min(size, m_avail); + memcpy(dst + off, m_area+m_start, l); + m_avail -= l; + size -= l; + m_start += l; + off += l; + } +} + +GSDumpLzma::~GSDumpLzma() { + lzma_end(&m_strm); + + if (m_inbuf) + _aligned_free(m_inbuf); + if (m_area) + _aligned_free(m_area); +} + +#endif + +/******************************************************************/ + +GSDumpRaw::GSDumpRaw(char* filename) : GSDumpFile(filename) { + m_buff_size = 0; + m_area = NULL; + m_inbuf = NULL; + m_avail = 0; + m_start = 0; +} + +GSDumpRaw::~GSDumpRaw() { +} + +bool GSDumpRaw::IsEof() { + return feof(m_fp); +} + +void GSDumpRaw::Read(void* ptr, size_t size) { + if (size == 1) { + // I don't know why but read of size 1 is not happy + int v = fgetc(m_fp); + memcpy(ptr, &v, 1); + } else { + size_t ret = fread(ptr, 1, size, m_fp); + if (ret != size) { + fprintf(stderr, "GSDumpRaw:: Read error\n"); + throw "BAD"; // Just exit the program + } + } +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSLzma.h pcsx2-1.4.0/plugins/GSdx/GSLzma.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSLzma.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSLzma.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2015-2015 Gregory hainaut + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#ifdef __linux__ + +#ifdef LZMA_SUPPORTED +#include +#endif + +class GSDumpFile { + protected: + FILE* m_fp; + + + public: + virtual bool IsEof() = 0; + virtual void Read(void* ptr, size_t size) = 0; + + GSDumpFile(char* filename); + virtual ~GSDumpFile(); +}; + +#ifdef LZMA_SUPPORTED +class GSDumpLzma : public GSDumpFile { + + lzma_stream m_strm; + + size_t m_buff_size; + uint8_t* m_area; + uint8_t* m_inbuf; + + size_t m_avail; + size_t m_start; + + void Decompress(); + + public: + + GSDumpLzma(char* filename); + virtual ~GSDumpLzma(); + + bool IsEof(); + void Read(void* ptr, size_t size); +}; +#endif + +class GSDumpRaw : public GSDumpFile { + + size_t m_buff_size; + uint8_t* m_area; + uint8_t* m_inbuf; + + size_t m_avail; + size_t m_start; + + void Decompress(); + + public: + + GSDumpRaw(char* filename); + virtual ~GSDumpRaw(); + + bool IsEof(); + void Read(void* ptr, size_t size); +}; + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSPerfMon.cpp pcsx2-1.4.0/plugins/GSdx/GSPerfMon.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSPerfMon.cpp 2014-11-24 22:44:32.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSPerfMon.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -35,6 +35,7 @@ void GSPerfMon::Put(counter_t c, double val) { +#ifndef DISABLE_PERF_MON if(c == Frame) { #ifdef __linux__ @@ -60,10 +61,12 @@ { m_counters[c] += val; } +#endif } void GSPerfMon::Update() { +#ifndef DISABLE_PERF_MON if(m_count > 0) { for(size_t i = 0; i < countof(m_counters); i++) @@ -75,25 +78,30 @@ } memset(m_counters, 0, sizeof(m_counters)); +#endif } void GSPerfMon::Start(int timer) { +#ifndef DISABLE_PERF_MON m_start[timer] = __rdtsc(); if(m_begin[timer] == 0) { m_begin[timer] = m_start[timer]; } +#endif } void GSPerfMon::Stop(int timer) { +#ifndef DISABLE_PERF_MON if(m_start[timer] > 0) { m_total[timer] += __rdtsc() - m_start[timer]; m_start[timer] = 0; } +#endif } int GSPerfMon::CPU(int timer, bool reset) diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSPng.cpp pcsx2-1.4.0/plugins/GSdx/GSPng.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSPng.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSPng.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2015-2015 Gregory hainaut + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "stdafx.h" +#include "GSPng.h" + +namespace GSPng { + + // FIXME gray_pixel_16 doesn't work. Integer image and depth image are all black + // Maybe I can't open them correctly + // A better solution must be found! + void Save(GSPng::Format fmt, const string& file, char* image, int w, int h, int pitch) + { +#ifdef ENABLE_OGL_PNG + std::string root = file; + root.replace(file.length()-4, 4, ""); + + uint8* data = (uint8*)image; + + switch (fmt) { + case R8I_PNG: + { + png::image img(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img[y][x] = png::gray_pixel(data[x]); + } + } + img.write(root + "_R8.png"); + } + break; + + case R16I_PNG: + { + png::image img(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img[y][x] = png::gray_pixel_16(data[2*x]); + } + } + img.write(root + "_R16.png"); + } + break; + + case R32I_PNG: + { + png::image img_msb(w, h); + png::image img_lsb(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img_msb[y][x] = png::gray_pixel_16(data[2*x]); + img_lsb[y][x] = png::gray_pixel_16(data[2*x+2]); + } + } + img_msb.write(root + "_R32I_msb.png"); + img_lsb.write(root + "_R32I_lsb.png"); + } + break; + + case DEPTH_PNG: + { + png::image img_msb(w, h); + png::image img_lsb(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + // TODO packed or not + uint32 depth = data[4*x]; //floorf((float)data[2*x] * exp2f(32)); + + png::gray_pixel_16 msb(depth >> 16); + png::gray_pixel_16 lsb((depth >> 16) ? 0xFFFF : depth & 0xFFFF); + + img_msb[y][x] = msb; + img_lsb[y][x] = lsb; + } + } + img_msb.write(root + "_msb.png"); + img_lsb.write(root + "_lsb.png"); + } + break; + + case ALPHA_PNG: + { + png::image img_alpha(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img_alpha[y][x] = png::gray_pixel(data[4*x+3]); + } + } + img_alpha.write(root + "_alpha.png"); + } + break; + + case RGB_PNG: + { + png::image img_opaque(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img_opaque[y][x] = png::rgb_pixel(data[4*x+0], data[4*x+1], data[4*x+2]); + } + } + img_opaque.write(root + ".png"); + } + break; + + case RGBA_PNG: + { + png::image img(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img[y][x] = png::rgba_pixel(data[4*x+0], data[4*x+1], data[4*x+2], data[4*x+3]); + } + } + img.write(root + "_full.png"); + } + break; + + case RGB_A_PNG: + { + png::image img_opaque(w, h); + png::image img_alpha(w, h); + for(int y = 0; y < h; y++, data += pitch) { + for (int x = 0; x < w; x++) { + img_opaque[y][x] = png::rgb_pixel(data[4*x+0], data[4*x+1], data[4*x+2]); + img_alpha[y][x] = png::gray_pixel(data[4*x+3]); + } + } + img_opaque.write(root + ".png"); + img_alpha.write(root + "_alpha.png"); + } + break; + + default: + ASSERT(0); + } +#endif + } + + Transaction::Transaction(GSPng::Format fmt, const string& file, char* image, int w, int h, int pitch) + : m_fmt(fmt), m_file(file), m_w(w), m_h(h), m_pitch(pitch) + { + // Note: yes it would be better to use shared pointer + m_image = (char*)_aligned_malloc(pitch*h, 32); + if (m_image) + memcpy(m_image, image, pitch*h); + } + + Transaction::~Transaction() + { + if (m_image) + _aligned_free(m_image); + } + + void Worker::Process(shared_ptr& item) + { + Save(item->m_fmt, item->m_file, item->m_image, item->m_w, item->m_h, item->m_pitch); + } + +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSPng.h pcsx2-1.4.0/plugins/GSdx/GSPng.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSPng.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSPng.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2015-2015 Gregory hainaut + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#pragma once + +#ifdef ENABLE_OGL_PNG +#include "png++/png.hpp" +#endif +#include "GSThread_CXX11.h" + +namespace GSPng { + enum Format { + RGBA_PNG, + RGB_PNG, + RGB_A_PNG, + ALPHA_PNG, + DEPTH_PNG, + R8I_PNG, + R16I_PNG, + R32I_PNG, + }; + + class Transaction + { + public: + Format m_fmt; + const std::string m_file; + char* m_image; + int m_w; + int m_h; + int m_pitch; + + Transaction(GSPng::Format fmt, const string& file, char* image, int w, int h, int pitch); + ~Transaction(); + }; + + void Save(GSPng::Format fmt, const string& file, char* image, int w, int h, int pitch); + + class Worker : public GSJobQueue, 16 > + { + public: + Worker() {}; + virtual ~Worker() {}; + + void Process(shared_ptr& item); + + int GetPixels(bool reset) {return 0;} + }; +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRasterizer.cpp pcsx2-1.4.0/plugins/GSdx/GSRasterizer.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRasterizer.cpp 2013-07-01 21:28:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRasterizer.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -104,7 +104,7 @@ return top; } -void GSRasterizer::Queue(shared_ptr data) +void GSRasterizer::Queue(const shared_ptr& data) { Draw(data.get()); } @@ -1147,7 +1147,7 @@ GSRasterizerList::~GSRasterizerList() { - for(vector::iterator i = m_workers.begin(); i != m_workers.end(); i++) + for(auto i = m_workers.begin(); i != m_workers.end(); i++) { delete *i; } @@ -1155,7 +1155,7 @@ _aligned_free(m_scanline); } -void GSRasterizerList::Queue(shared_ptr data) +void GSRasterizerList::Queue(const shared_ptr& data) { GSVector4i r = data->bbox.rintersect(data->scissor); @@ -1210,13 +1210,13 @@ // GSRasterizerList::GSWorker -GSRasterizerList::GSWorker::GSWorker(GSRasterizer* r) - : GSJobQueue >() +GSRasterizerList::GSWorker::GSWorker(GSRasterizer* r) + : GSJobQueue, 256>() , m_r(r) { } -GSRasterizerList::GSWorker::~GSWorker() +GSRasterizerList::GSWorker::~GSWorker() { Wait(); @@ -1228,7 +1228,7 @@ return m_r->GetPixels(reset); } -void GSRasterizerList::GSWorker::Process(shared_ptr& item) +void GSRasterizerList::GSWorker::Process(shared_ptr& item) { m_r->Draw(item.get()); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRasterizer.h pcsx2-1.4.0/plugins/GSdx/GSRasterizer.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRasterizer.h 2013-07-01 21:28:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRasterizer.h 2016-01-05 17:28:08.000000000 +0000 @@ -24,9 +24,9 @@ #include "GS.h" #include "GSVertexSW.h" #include "GSFunctionMap.h" -#include "GSThread.h" #include "GSAlignedClass.h" #include "GSPerfMon.h" +#include "GSThread_CXX11.h" __aligned(class, 32) GSRasterizerData : public GSAlignedClass<32> { @@ -115,7 +115,7 @@ public: virtual ~IRasterizer() {} - virtual void Queue(shared_ptr data) = 0; + virtual void Queue(const shared_ptr& data) = 0; virtual void Sync() = 0; virtual bool IsSynced() const = 0; virtual int GetPixels(bool reset = true) = 0; @@ -170,7 +170,7 @@ // IRasterizer - void Queue(shared_ptr data); + void Queue(const shared_ptr& data); void Sync() {} bool IsSynced() const {return true;} int GetPixels(bool reset); @@ -180,7 +180,7 @@ class GSRasterizerList : public IRasterizer { protected: - class GSWorker : public GSJobQueue > + class GSWorker : public GSJobQueue, 256 > { GSRasterizer* m_r; @@ -227,7 +227,7 @@ // IRasterizer - void Queue(shared_ptr data); + void Queue(const shared_ptr& data); void Sync(); bool IsSynced() const; int GetPixels(bool reset); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCL.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererCL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCL.cpp 2014-12-01 22:06:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererCL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -39,7 +39,7 @@ #define MAX_BIN_PER_BATCH ((MAX_FRAME_SIZE / BIN_SIZE) * (MAX_FRAME_SIZE / BIN_SIZE)) #define MAX_BIN_COUNT (MAX_BIN_PER_BATCH * MAX_BATCH_COUNT) #define TFX_PARAM_SIZE 2048 -#define TFX_PROGRAM_VERSION 1 +#define TFX_MAX_PARAM_COUNT 256 #if MAX_PRIM_PER_BATCH == 64u #define BIN_TYPE cl_ulong @@ -91,6 +91,8 @@ m_tc_pages[i] = GSVector4i::xffffffff(); } + memset(m_rw_pages_rendering, 0, sizeof(m_rw_pages_rendering)); + #define InitCVB(P) \ m_cvb[P][0][0] = &GSRendererCL::ConvertVertexBuffer; \ m_cvb[P][0][1] = &GSRendererCL::ConvertVertexBuffer; \ @@ -106,7 +108,7 @@ // mapping the buffer (after the two invalidate* calls and in getoutput), it is currently not an issue, but on some devices it may be. m_cl.vm = cl::Buffer(m_cl.context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, (size_t)m_mem.m_vmsize, m_mem.m_vm8, NULL); - m_cl.tex = cl::Buffer(m_cl.context, CL_MEM_READ_WRITE, (size_t)m_mem.m_vmsize); + m_cl.tex = cl::Buffer(m_cl.context, CL_MEM_READ_ONLY, (size_t)m_mem.m_vmsize); } GSRendererCL::~GSRendererCL() @@ -157,8 +159,6 @@ GSTexture* GSRendererCL::GetOutput(int i) { - Sync(1); - const GSRegDISPFB& DISPFB = m_regs->DISP[i].DISPFB; int w = DISPFB.FBW * 64; @@ -174,6 +174,14 @@ const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[DISPFB.PSM]; + GIFRegBITBLTBUF BITBLTBUF; + + BITBLTBUF.SBP = DISPFB.Block(); + BITBLTBUF.SBW = DISPFB.FBW; + BITBLTBUF.SPSM = DISPFB.PSM; + + InvalidateLocalMem(BITBLTBUF, r); + (m_mem.*psm.rtx)(m_mem.GetOffset(DISPFB.Block(), DISPFB.FBW, DISPFB.PSM), r.ralign(psm.bs), m_output, pitch, m_env.TEXA); m_texture[i]->Update(r, m_output, pitch); @@ -387,7 +395,7 @@ { // TODO: SIMD - ASSERT(m_pb_count < 256); + ASSERT(m_pb_count < TFX_MAX_PARAM_COUNT); uint32 vb_count = m_vb_count | (m_pb_count << 24); @@ -408,18 +416,22 @@ if(bbox.eq(bbox.rintersect(scissor))) { - job->sel.noscissor = 1; + pb->sel.noscissor = 1; } job->rect.x = rect.x; job->rect.y = rect.y; job->rect.z = rect.z; job->rect.w = rect.w; + job->sel = pb->sel; job->ib_start = m_cl.ib.tail; job->prim_count = m_index.tail / GSUtil::GetClassVertexCount(m_vt.m_primclass); job->fbp = pb->fbp; job->zbp = pb->zbp; job->bw = pb->bw; + job->fpsm = context->FRAME.PSM; + job->zpsm = context->ZBUF.PSM; + job->tpsm = context->TEX0.PSM; #ifdef DEBUG job->pb = pb; @@ -502,7 +514,7 @@ // don't buffer too much data, feed them to the device if there is enough - if(m_cl.vb.tail - m_cl.vb.head >= 256 * 4096 || m_jobs.size() >= 64) + if(m_pb_count >= TFX_MAX_PARAM_COUNT || m_vb_count >= 4096) { Enqueue(); } @@ -564,6 +576,8 @@ m_rw_pages[1][i] = GSVector4i::zero(); } + for(int i = 0; i < MAX_PAGES; i++) ASSERT(m_rw_pages_rendering[i] == 0); + m_synced = true; } @@ -577,21 +591,71 @@ if(!m_synced) { - for(int i = 0; i < 4; i++) + int i = 0; + + bool wait; + + do { - GSVector4i pages = m_rw_pages[0][i] | m_rw_pages[1][i]; + wait = false; - if(!(pages & m_tmp_pages[i]).eq(GSVector4i::zero())) + for(; i < 4; i++) { - // TODO: an awesome idea to avoid this Sync - // - call Enqueue() to flush m_jobs - // - append rendering queue with a kernel that writes the incoming data to m_mem.vm and tell the parent class to not do it - // - the only problem, clut has to be read directly by the texture sampler, can't attach it to gs_param before being written + GSVector4i pages = m_rw_pages[0][i] | m_rw_pages[1][i]; + + if(!(pages & m_tmp_pages[i]).eq(GSVector4i::zero())) + { + // TODO: an awesome idea to avoid this Sync + // - call Enqueue() to flush m_jobs + // - append rendering queue with a kernel that writes the incoming data to m_mem.vm and tell the parent class to not do it + // - the only problem, clut has to be read directly by the texture sampler, can't attach it to gs_param before being written - Sync(3); + //Sync(3); - break; + Enqueue(); + + wait = true; + + break; + } + } + + _mm_pause(); + } + while(wait); + + if(!m_synced) + { + o->GetPages(r, m_tmp_pages2); // TODO: don't ask twice + + const uint32* p = m_tmp_pages2; + + do + { + wait = false; + + for(; *p != GSOffset::EOP; p++) + { + if(m_rw_pages_rendering[*p]) + { + // Sync(5); + + wait = true; + + break; + } + } + /* + if(!m_synced) + { + void* ptr = m_cl.wq->enqueueMapBuffer(m_cl.vm, CL_TRUE, CL_MAP_READ, 0, m_mem.m_vmsize); + m_cl.wq->enqueueUnmapMemObject(m_cl.vm, ptr); + } + */ + + _mm_pause(); } + while(wait); } } @@ -622,13 +686,43 @@ break; } } + + if(!m_synced) + { + o->GetPages(r, m_tmp_pages2); // TODO: don't ask twice + + for(const uint32* p = m_tmp_pages2; *p != GSOffset::EOP; p++) + { + if(m_rw_pages_rendering[*p] & 0xffff0000) + { + Sync(6); + + break; + } + } + /* + if(!m_synced) + { + void* ptr = m_cl.wq->enqueueMapBuffer(m_cl.vm, CL_TRUE, CL_MAP_READ, 0, m_mem.m_vmsize); + m_cl.wq->enqueueUnmapMemObject(m_cl.vm, ptr); + } + */ + } } } +typedef struct { GSRendererCL* r; uint32 pages[(MAX_PAGES + 1) * 2]; } cb_data; + void GSRendererCL::Enqueue() { if(m_jobs.empty()) return; + cb_data* data = new cb_data(); + + data->r = this; + + UsePages(data->pages); + try { ASSERT(m_cl.vb.tail > m_cl.vb.head); @@ -798,6 +892,8 @@ std::list> jobs(head, next); + JoinTFX(jobs); + EnqueueTFX(jobs, bin_count, bin_dim); if(total_prim_count > MAX_PRIM_COUNT) @@ -824,6 +920,19 @@ printf("%s (%d)\n", err.what(), err.err()); } + try + { + cl::Event e; + m_cl.queue[2].enqueueMarker(&e); + e.setCallback(CL_COMPLETE, ReleasePageEvent, data); + } + catch(cl::Error err) + { + printf("%s (%d)\n", err.what(), err.err()); + + delete data; + } + m_jobs.clear(); m_vb_count = 0; @@ -837,10 +946,62 @@ void GSRendererCL::EnqueueTFX(std::list>& jobs, uint32 bin_count, const cl_uchar4& bin_dim) { - // join tfx kernel calls where the selector and fbp/zbp/bw are the same and src_pages != prev dst_pages + cl_kernel tfx_prev = NULL; + + uint32 prim_start = 0; + + for(auto i : jobs) + { + ASSERT(prim_start < MAX_PRIM_COUNT); + + tfxcount++; + + uint32 prim_count = std::min(i->prim_count, MAX_PRIM_COUNT - prim_start); + + cl::Kernel& tfx = m_cl.GetTFXKernel(i->sel); + + cl::Buffer* tex = UpdateTextureCache(i.get()) ? &m_cl.tex : &m_cl.vm; + + tfx.setArg(2, sizeof(*tex), tex); + + if(tfx_prev != tfx()) + { + tfx.setArg(3, sizeof(m_cl.pb.buff[m_cl.wqidx]), &m_cl.pb.buff[m_cl.wqidx]); + tfx.setArg(4, (cl_uint)m_pb_start); + + tfx_prev = tfx(); + } + + tfx.setArg(5, (cl_uint)prim_start); + tfx.setArg(6, (cl_uint)prim_count); + tfx.setArg(7, (cl_uint)bin_count); + tfx.setArg(8, bin_dim); + tfx.setArg(9, i->fbp); + tfx.setArg(10, i->zbp); + tfx.setArg(11, i->bw); + + GSVector4i r = GSVector4i::load(&i->rect); + + r = r.ralign(GSVector2i(8, 8)); + + m_cl.queue[2].enqueueNDRangeKernel(tfx, cl::NDRange(r.left, r.top), cl::NDRange(r.width(), r.height()), cl::NDRange(8, 8)); + + tfxpixels += r.width() * r.height(); + + InvalidateTextureCache(i.get()); + + prim_start += prim_count; + } +} + +void GSRendererCL::JoinTFX(std::list>& jobs) +{ + // join tfx kernel calls where the selector and fbp/zbp/bw/fpsm/zpsm are the same and src_pages != prev dst_pages //printf("before\n"); for(auto i : jobs) printf("%016llx %05x %05x %d %d %d\n", i->sel.key, i->fbp, i->zbp, i->bw, i->prim_count, i->ib_start); + tfxselcount += jobs.size(); + auto next = jobs.begin(); while(next != jobs.end()) @@ -852,117 +1013,122 @@ break; } - if((*prev)->sel == (*next)->sel && (*prev)->fbp == (*next)->fbp && (*prev)->zbp == (*next)->zbp && (*prev)->bw == (*next)->bw) - { - if((*prev)->dst_pages != NULL && (*next)->src_pages != NULL) - { - bool overlap = false; + TFXSelector prev_sel = (*prev)->sel; + TFXSelector next_sel = (*next)->sel; - for(int i = 0; i < 4; i++) - { - if(!((*prev)->dst_pages[i] & (*next)->src_pages[i]).eq(GSVector4i::zero())) - { - overlap = true; + prev_sel.ababcd = next_sel.ababcd = 0; + prev_sel.wms = next_sel.wms = 0; + prev_sel.wmt = next_sel.wmt = 0; + prev_sel.noscissor = next_sel.noscissor = prev_sel.noscissor | next_sel.noscissor; + prev_sel.merged = next_sel.merged = 0; - break; - } - } + if(prev_sel != next_sel + || (*prev)->fbp != (*next)->fbp + || (*prev)->zbp != (*next)->zbp + || (*prev)->bw != (*next)->bw + || (*prev)->fpsm != (*next)->fpsm + || (*prev)->zpsm != (*next)->zpsm) + { + continue; + } - if(overlap) - { - continue; - } - } + if((*prev)->dst_pages != NULL && (*next)->src_pages != NULL) + { + bool overlap = false; - if((*prev)->src_pages != NULL) + for(int i = 0; i < 4; i++) { - GSVector4i* src_pages = (*next)->GetSrcPages(); - - for(int i = 0; i < 4; i++) + if(!((*prev)->dst_pages[i] & (*next)->src_pages[i]).eq(GSVector4i::zero())) { - src_pages[i] |= (*prev)->src_pages[i]; + overlap = true; + + break; } } - if((*prev)->dst_pages != NULL) + if(overlap) { - GSVector4i* dst_pages = (*next)->GetDstPages(); - - for(int i = 0; i < 4; i++) - { - dst_pages[i] |= (*prev)->dst_pages[i]; - } + continue; } + } - GSVector4i prev_rect = GSVector4i::load(&(*prev)->rect); - GSVector4i next_rect = GSVector4i::load(&(*next)->rect); + if((*prev)->src_pages != NULL) + { + GSVector4i* src_pages = (*next)->GetSrcPages(); - GSVector4i::store(&(*next)->rect, prev_rect.runion(next_rect)); + for(int i = 0; i < 4; i++) + { + src_pages[i] |= (*prev)->src_pages[i]; + } + } - (*next)->prim_count += (*prev)->prim_count; - (*next)->ib_start = (*prev)->ib_start; + if((*prev)->dst_pages != NULL) + { + GSVector4i* dst_pages = (*next)->GetDstPages(); - jobs.erase(prev); + for(int i = 0; i < 4; i++) + { + dst_pages[i] |= (*prev)->dst_pages[i]; + } } - } - //printf("after\n"); for(auto i : jobs) printf("%016llx %05x %05x %d %d %d\n", i->sel.key, i->fbp, i->zbp, i->bw, i->prim_count, i->ib_start); + GSVector4i prev_rect = GSVector4i::load(&(*prev)->rect); + GSVector4i next_rect = GSVector4i::load(&(*next)->rect); - // + GSVector4i::store(&(*next)->rect, prev_rect.runion(next_rect)); - cl_kernel tfx_prev = NULL; + (*next)->prim_count += (*prev)->prim_count; + (*next)->ib_start = (*prev)->ib_start; - uint32 prim_start = 0; + (*next)->sel = next_sel; + (*next)->sel.merged = 1; - for(auto i : jobs) - { - ASSERT(prim_start < MAX_PRIM_COUNT); + jobs.erase(prev); - tfxcount++; + //if((*prev)->sel != (*next)->sel) printf("%d %016llx %016llx\n", jobs.size(), (*prev)->sel.key, (*next)->sel.key); + } - UpdateTextureCache(i.get()); + tfxdiffselcount += jobs.size(); - uint32 prim_count = std::min(i->prim_count, MAX_PRIM_COUNT - prim_start); + //printf("after\n"); for(auto i : jobs) printf("%016llx %05x %05x %d %d %d\n", i->sel.key, i->fbp, i->zbp, i->bw, i->prim_count, i->ib_start); +} - // TODO: tile level z test +bool GSRendererCL::UpdateTextureCache(TFXJob* job) +{ + if(job->src_pages == NULL) return false; - cl::Kernel& tfx = m_cl.GetTFXKernel(i->sel); + bool overlap = false; + bool invalid = false; - if(tfx_prev != tfx()) + if(job->dst_pages != NULL) + { + bool can_overlap = job->sel.fwrite && GSUtil::HasSharedBits(job->tpsm, job->fpsm) || job->sel.zwrite && GSUtil::HasSharedBits(job->tpsm, job->zpsm); + + for(int i = 0; i < 4; i++) { - tfx.setArg(3, sizeof(m_cl.pb.buff[m_cl.wqidx]), &m_cl.pb.buff[m_cl.wqidx]); - tfx.setArg(4, (cl_uint)m_pb_start); + if(!(job->src_pages[i] & job->dst_pages[i]).eq(GSVector4i::zero())) + { + overlap = can_overlap; // gow, re4 + } - tfx_prev = tfx(); + if(!(m_tc_pages[i] & job->src_pages[i]).eq(GSVector4i::zero())) + { + invalid = true; + } } + } - tfx.setArg(5, (cl_uint)prim_start); - tfx.setArg(6, (cl_uint)prim_count); - tfx.setArg(7, (cl_uint)bin_count); - tfx.setArg(8, bin_dim); - tfx.setArg(9, i->fbp); - tfx.setArg(10, i->zbp); - tfx.setArg(11, i->bw); - - GSVector4i r = GSVector4i::load(&i->rect); - - r = r.ralign(GSVector2i(8, 8)); - - m_cl.queue[2].enqueueNDRangeKernel(tfx, cl::NDRange(r.left, r.top), cl::NDRange(r.width(), r.height()), cl::NDRange(8, 8)); - - tfxpixels += r.width() * r.height(); - - InvalidateTextureCache(i.get()); - - // TODO: partial job renderings (>MAX_PRIM_COUNT) may invalidate pages unnecessarily + if(!invalid) + { + return true; // all needed pages are valid in texture cache, use it + } - prim_start += prim_count; + if(!overlap) + { + return false; // no overlap, but has invalid pages, don't use texture cache } -} -void GSRendererCL::UpdateTextureCache(TFXJob* job) -{ - if(job->src_pages == NULL) return; + // overlap && invalid, update and use texture cache int count = 0; @@ -972,19 +1138,17 @@ if(pages.eq(GSVector4i::zero())) continue; - size_t page_size = 8192; - - // TODO: only use the texture cache if there is an overlap between src_pages and dst_pages? (or if already uploaded) + m_tc_pages[i] &= ~job->src_pages[i]; - if(0) for(int j = 0; j < 4; j++) + for(int j = 0; j < 4; j++) { if(pages.u32[j] == 0) continue; if(pages.u32[j] == 0xffffffff) { - size_t offset = (i * sizeof(GSVector4i) + j * sizeof(uint32)) * 8 * page_size; + size_t offset = (i * sizeof(GSVector4i) + j * sizeof(uint32)) * 8 * PAGE_SIZE; - m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, page_size * 32); + m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, PAGE_SIZE * 32); if(LOG) { fprintf(s_fp, "tc (%d x32)\n", offset >> 13); fflush(s_fp); } @@ -1002,9 +1166,9 @@ if(b == 0xff) { - size_t offset = (i * sizeof(GSVector4i) + (j * 4 + k)) * 8 * page_size; + size_t offset = (i * sizeof(GSVector4i) + (j * 4 + k)) * 8 * PAGE_SIZE; - m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, page_size * 8); + m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, PAGE_SIZE * 8); if(LOG) { fprintf(s_fp, "tc (%d x8)\n", offset >> 13); fflush(s_fp); } @@ -1018,9 +1182,9 @@ { if(b & (1 << l)) { - size_t offset = ((i * sizeof(GSVector4i) + (j * 4 + k)) * 8 + l) * page_size; + size_t offset = ((i * sizeof(GSVector4i) + (j * 4 + k)) * 8 + l) * PAGE_SIZE; - m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, page_size); + m_cl.queue[2].enqueueCopyBuffer(m_cl.vm, m_cl.tex, offset, offset, PAGE_SIZE); if(LOG) { fprintf(s_fp, "tc (%d x1)\n", offset >> 13); fflush(s_fp); } @@ -1030,23 +1194,100 @@ } } } - - m_tc_pages[i] &= ~job->src_pages[i]; } if(count > 0) { pageuploads += count; } + + return true; } void GSRendererCL::InvalidateTextureCache(TFXJob* job) { if(job->dst_pages == NULL) return; - for(int j = 0; j < 4; j++) + for(int i = 0; i < 4; i++) + { + m_tc_pages[i] |= job->dst_pages[i]; + } +} + +void GSRendererCL::UsePages(uint32* p) +{ + for(int l = 0; l < 2; l++) { - m_tc_pages[j] |= job->dst_pages[j]; + for(int i = 0; i < 4; i++) + { + GSVector4i* v = &m_rw_pages[l][i]; + + if(v->eq(GSVector4i::zero())) continue; + + for(int j = 0; j < 4; j++) + { + unsigned long index; + unsigned long mask = v->u32[j]; + + if(mask == 0) continue; + + int o = (i << 7) | (j << 5); + + if(mask == 0xffffffff) + { + for(int index = 0; index < 32; index++) + { + _InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l); + + *p++ = index | o; + } + } + else + { + while(_BitScanForward(&index, mask)) + { + mask &= ~(1 << index); + + _InterlockedIncrement16((short*)&m_rw_pages_rendering[index | o] + l); + + *p++ = index | o; + } + } + } + + *v = GSVector4i::zero(); + } + + *p++ = GSOffset::EOP; + } +} + +void GSRendererCL::ReleasePages(uint32* pages) +{ + const uint32* p = pages; + + for(; *p != GSOffset::EOP; p++) + { + _InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 0); + } + + p++; + + for(; *p != GSOffset::EOP; p++) + { + _InterlockedDecrement16((short*)&m_rw_pages_rendering[*p] + 1); + } +} + +void CL_CALLBACK GSRendererCL::ReleasePageEvent(cl_event event, cl_int event_command_exec_status, void* user_data) +{ + if(event_command_exec_status == CL_COMPLETE) + { + cb_data* data = (cb_data*)user_data; + + data->r->ReleasePages(data->pages); + + delete data; } } @@ -1079,12 +1320,14 @@ const GSDrawingContext* context = m_context; const GS_PRIM_CLASS primclass = m_vt.m_primclass; - job->sel.key = 0; + TFXSelector sel; + + sel.key = 0; - job->sel.atst = ATST_ALWAYS; - job->sel.tfx = TFX_NONE; - job->sel.ababcd = 0xff; - job->sel.prim = primclass; + sel.atst = ATST_ALWAYS; + sel.tfx = TFX_NONE; + sel.ababcd = 0xff; + sel.prim = primclass; uint32 fm = context->FRAME.FBMSK; uint32 zm = context->ZBUF.ZMSK || context->TEST.ZTE == 0 ? 0xffffffff : 0; @@ -1107,9 +1350,21 @@ { if(!TryAlphaTest(fm, zm)) { - job->sel.atst = context->TEST.ATST; - job->sel.afail = context->TEST.AFAIL; + sel.atst = context->TEST.ATST; + sel.afail = context->TEST.AFAIL; pb->aref = context->TEST.AREF; + + switch(sel.atst) + { + case ATST_LESS: + sel.atst = ATST_LEQUAL; + pb->aref--; + break; + case ATST_GREATER: + sel.atst = ATST_GEQUAL; + pb->aref++; + break; + } } } @@ -1137,31 +1392,31 @@ if(!fwrite && !zwrite) return false; - bool ftest = job->sel.atst != ATST_ALWAYS || context->TEST.DATE && context->FRAME.PSM != PSM_PSMCT24; + bool ftest = sel.atst != ATST_ALWAYS || context->TEST.DATE && context->FRAME.PSM != PSM_PSMCT24; bool ztest = context->TEST.ZTE && context->TEST.ZTST > ZTST_ALWAYS; - job->sel.fwrite = fwrite; - job->sel.ftest = ftest; - job->sel.zwrite = zwrite; - job->sel.ztest = ztest; + sel.fwrite = fwrite; + sel.ftest = ftest; + sel.zwrite = zwrite; + sel.ztest = ztest; if(fwrite || ftest) { - job->sel.fpsm = RemapPSM(context->FRAME.PSM); + sel.fpsm = RemapPSM(context->FRAME.PSM); if((primclass == GS_LINE_CLASS || primclass == GS_TRIANGLE_CLASS) && m_vt.m_eq.rgba != 0xffff) { - job->sel.iip = PRIM->IIP; + sel.iip = PRIM->IIP; } if(PRIM->TME) { - job->sel.tfx = context->TEX0.TFX; - job->sel.tcc = context->TEX0.TCC; - job->sel.fst = PRIM->FST; - job->sel.ltf = m_vt.IsLinear(); - job->sel.tpsm = RemapPSM(context->TEX0.PSM); - job->sel.aem = m_env.TEXA.AEM; + sel.tfx = context->TEX0.TFX; + sel.tcc = context->TEX0.TCC; + sel.fst = PRIM->FST; + sel.ltf = m_vt.IsLinear(); + sel.tpsm = RemapPSM(context->TEX0.PSM); + sel.aem = m_env.TEXA.AEM; pb->tbp[0] = context->TEX0.TBP0; pb->tbw[0] = context->TEX0.TBW; @@ -1170,24 +1425,28 @@ if(GSLocalMemory::m_psm[context->TEX0.PSM].pal > 0) { - job->sel.tlu = 1; + sel.tlu = 1; memcpy(pb->clut, (const uint32*)m_mem.m_clut, sizeof(uint32) * GSLocalMemory::m_psm[context->TEX0.PSM].pal); } - job->sel.wms = context->CLAMP.WMS; - job->sel.wmt = context->CLAMP.WMT; + sel.wms = ((uint32)context->CLAMP.WMS + 1) & 3; + sel.wmt = ((uint32)context->CLAMP.WMT + 1) & 3; - if(job->sel.tfx == TFX_MODULATE && job->sel.tcc && m_vt.m_eq.rgba == 0xffff && m_vt.m_min.c.eq(GSVector4i(128))) + if(sel.tfx == TFX_MODULATE && sel.tcc && m_vt.m_eq.rgba == 0xffff && m_vt.m_min.c.eq(GSVector4i(128))) { // modulate does not do anything when vertex color is 0x80 - job->sel.tfx = TFX_DECAL; + sel.tfx = TFX_DECAL; } + bool mipmap = IsMipMapActive(); + + GIFRegTEX0 TEX0 = m_context->GetSizeFixedTEX0(m_vt.m_min.t.xyxy(m_vt.m_max.t), m_vt.IsLinear(), mipmap); + GSVector4i r; - GetTextureMinMax(r, context->TEX0, context->CLAMP, job->sel.ltf); + GetTextureMinMax(r, TEX0, context->CLAMP, sel.ltf); GSVector4i* src_pages = job->GetSrcPages(); @@ -1200,7 +1459,7 @@ src_pages[i] |= m_tmp_pages[i]; } - if(m_mipmap && context->TEX1.MXL > 0 && context->TEX1.MMIN >= 2 && context->TEX1.MMIN <= 5 && m_vt.m_lod.y > 0) + if(mipmap) { // TEX1.MMIN // 000 p @@ -1212,15 +1471,15 @@ if(m_vt.m_lod.x > 0) { - job->sel.ltf = context->TEX1.MMIN >> 2; + sel.ltf = context->TEX1.MMIN >> 2; } else { // TODO: isbilinear(mmag) != isbilinear(mmin) && m_vt.m_lod.x <= 0 && m_vt.m_lod.y > 0 } - job->sel.mmin = (context->TEX1.MMIN & 1) + 1; // 1: round, 2: tri - job->sel.lcm = context->TEX1.LCM; + sel.mmin = (context->TEX1.MMIN & 1) + 1; // 1: round, 2: tri + sel.lcm = context->TEX1.LCM; int mxl = std::min((int)context->TEX1.MXL, 6) << 16; int k = context->TEX1.K << 12; @@ -1229,28 +1488,28 @@ { k = (int)m_vt.m_lod.x << 16; // set lod to max level - job->sel.lcm = 1; // lod is constant - job->sel.mmin = 1; // tri-linear is meaningless + sel.lcm = 1; // lod is constant + sel.mmin = 1; // tri-linear is meaningless } - if(job->sel.mmin == 2) + if(sel.mmin == 2) { mxl--; // don't sample beyond the last level (TODO: add a dummy level instead?) } - if(job->sel.fst) + if(sel.fst) { - ASSERT(job->sel.lcm == 1); + ASSERT(sel.lcm == 1); ASSERT(((m_vt.m_min.t.uph(m_vt.m_max.t) == GSVector4::zero()).mask() & 3) == 3); // ratchet and clank (menu) - job->sel.lcm = 1; + sel.lcm = 1; } - if(job->sel.lcm) + if(sel.lcm) { int lod = std::max(std::min(k, mxl), 0); - if(job->sel.mmin == 1) + if(sel.mmin == 1) { lod = (lod + 0x8000) & 0xffff0000; // rounding } @@ -1266,7 +1525,7 @@ pb->k = (float)k; } - GIFRegTEX0 MIP_TEX0 = context->TEX0; + GIFRegTEX0 MIP_TEX0 = TEX0; GIFRegCLAMP MIP_CLAMP = context->CLAMP; GSVector4 tmin = m_vt.m_min.t; @@ -1322,7 +1581,7 @@ GSVector4i r; - GetTextureMinMax(r, MIP_TEX0, MIP_CLAMP, job->sel.ltf); + GetTextureMinMax(r, MIP_TEX0, MIP_CLAMP, sel.ltf); GSOffset* o = m_mem.GetOffset(MIP_TEX0.TBP0, MIP_TEX0.TBW, MIP_TEX0.PSM); @@ -1341,7 +1600,7 @@ } else { - if(job->sel.fst == 0) + if(sel.fst == 0) { // skip per pixel division if q is constant @@ -1349,7 +1608,7 @@ if(m_vt.m_eq.q) { - job->sel.fst = 1; + sel.fst = 1; const GSVector4& t = v[index[0]].t; @@ -1367,7 +1626,7 @@ } else if(primclass == GS_SPRITE_CLASS) { - job->sel.fst = 1; + sel.fst = 1; for(int i = 0, j = vertex_count; i < j; i += 2) { @@ -1381,28 +1640,10 @@ } } } - - if(job->sel.ltf && job->sel.fst) // TODO: quite slow, do this in the prim kernel? - { - // if q is constant we can do the half pel shift for bilinear sampling on the vertices - - // TODO: but not when mipmapping is used!!! - - GSVector4 half(8.0f, 8.0f); - - GSVertexCL* RESTRICT v = vertex; - - for(int i = 0, j = vertex_count; i < j; i++) - { - GSVector4 t = v[i].t; - - v[i].t = (t - half).xyzw(t); - } - } } - int tw = 1 << context->TEX0.TW; - int th = 1 << context->TEX0.TH; + int tw = 1 << TEX0.TW; + int th = 1 << TEX0.TH; switch(context->CLAMP.WMS) { @@ -1459,58 +1700,58 @@ if(PRIM->FGE) { - job->sel.fge = 1; + sel.fge = 1; pb->fog = env.FOGCOL.u32[0]; } if(context->FRAME.PSM != PSM_PSMCT24) { - job->sel.date = context->TEST.DATE; - job->sel.datm = context->TEST.DATM; + sel.date = context->TEST.DATE; + sel.datm = context->TEST.DATM; } if(!IsOpaque()) { - job->sel.abe = PRIM->ABE; - job->sel.ababcd = context->ALPHA.u32[0]; + sel.abe = PRIM->ABE; + sel.ababcd = context->ALPHA.u32[0]; if(env.PABE.PABE) { - job->sel.pabe = 1; + sel.pabe = 1; } if(m_aa1 && PRIM->AA1 && (primclass == GS_LINE_CLASS || primclass == GS_TRIANGLE_CLASS)) { - job->sel.aa1 = 1; + sel.aa1 = 1; } pb->afix = context->ALPHA.FIX; } - if(job->sel.date || job->sel.aba == 1 || job->sel.abb == 1 || job->sel.abc == 1 || job->sel.abd == 1) + if(sel.date || sel.aba == 1 || sel.abb == 1 || sel.abc == 1 && (sel.fpsm & 3) != 1 || sel.abd == 1) { - job->sel.rfb = 1; + sel.rfb = 1; } else { if(fwrite) { - if(job->sel.atst != ATST_ALWAYS && job->sel.afail == AFAIL_RGB_ONLY - || (job->sel.fpsm & 3) == 0 && fm != 0 - || (job->sel.fpsm & 3) == 1 // always read-merge-write 24bpp, regardless the mask - || (job->sel.fpsm & 3) >= 2 && (fm & 0x80f8f8f8) != 0) + if(sel.atst != ATST_ALWAYS && sel.afail == AFAIL_RGB_ONLY + || (sel.fpsm & 3) == 0 && fm != 0 + || (sel.fpsm & 3) == 1 // always read-merge-write 24bpp, regardless the mask + || (sel.fpsm & 3) >= 2 && (fm & 0x80f8f8f8) != 0) { - job->sel.rfb = 1; + sel.rfb = 1; } } } - job->sel.colclamp = env.COLCLAMP.CLAMP; - job->sel.fba = context->FBA.FBA; + sel.colclamp = env.COLCLAMP.CLAMP; + sel.fba = context->FBA.FBA; if(env.DTHE.DTHE) { - job->sel.dthe = 1; + sel.dthe = 1; GSVector4i dimx0 = env.dimx[1].sll32(16).sra32(16); GSVector4i dimx1 = env.dimx[3].sll32(16).sra32(16); @@ -1523,21 +1764,21 @@ if(zwrite || ztest) { - job->sel.zpsm = RemapPSM(context->ZBUF.PSM); - job->sel.ztst = ztest ? context->TEST.ZTST : ZTST_ALWAYS; + sel.zpsm = RemapPSM(context->ZBUF.PSM); + sel.ztst = ztest ? context->TEST.ZTST : ZTST_ALWAYS; if(ztest) { - job->sel.rzb = 1; + sel.rzb = 1; } else { if(zwrite) { - if(job->sel.atst != ATST_ALWAYS && (job->sel.afail == AFAIL_FB_ONLY || job->sel.afail == AFAIL_RGB_ONLY) - || (job->sel.zpsm & 3) == 1) // always read-merge-write 24bpp, regardless the mask + if(sel.atst != ATST_ALWAYS && (sel.afail == AFAIL_FB_ONLY || sel.afail == AFAIL_RGB_ONLY) + || (sel.zpsm & 3) == 1) // always read-merge-write 24bpp, regardless the mask { - job->sel.rzb = 1; + sel.rzb = 1; } } } @@ -1546,11 +1787,11 @@ pb->fm = fm; pb->zm = zm; - if((job->sel.fpsm & 3) == 1) + if((sel.fpsm & 3) == 1) { pb->fm |= 0xff000000; } - else if((job->sel.fpsm & 3) >= 2) + else if((sel.fpsm & 3) >= 2) { uint32 rb = pb->fm & 0x00f800f8; uint32 ga = pb->fm & 0x8000f800; @@ -1558,11 +1799,11 @@ pb->fm = (ga >> 16) | (rb >> 9) | (ga >> 6) | (rb >> 3) | 0xffff0000; } - if((job->sel.zpsm & 3) == 1) + if((sel.zpsm & 3) == 1) { pb->zm |= 0xff000000; } - else if((job->sel.zpsm & 3) >= 2) + else if((sel.zpsm & 3) >= 2) { pb->zm |= 0xffff0000; } @@ -1571,6 +1812,8 @@ pb->zbp = context->ZBUF.Block(); pb->bw = context->FRAME.FBW; + pb->sel = sel; + return true; } @@ -1745,8 +1988,6 @@ cl::Kernel GSRendererCL::CL::Build(const char* entry, ostringstream& opt) { - // TODO: cache binary on disk - cl::Program program; if(version >= 120) @@ -1850,7 +2091,7 @@ fclose(f); } - delete[] binaries[i]; + delete [] binaries[i]; } } catch(cl::Error err) @@ -1993,6 +2234,7 @@ opt << "-D AEM=" << sel.aem << " "; opt << "-D FB=" << sel.fb << " "; opt << "-D ZB=" << sel.zb << " "; + opt << "-D MERGED=" << sel.merged << " "; cl::Kernel k = Build(entry, opt); @@ -2000,7 +2242,6 @@ k.setArg(0, env); k.setArg(1, vm); - k.setArg(2, tex); return tfx_map[sel]; } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCL.h pcsx2-1.4.0/plugins/GSdx/GSRendererCL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCL.h 2014-12-01 22:06:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererCL.h 2016-01-05 17:28:08.000000000 +0000 @@ -108,6 +108,7 @@ uint32 noscissor:1; // 53 uint32 tpsm:4; // 54 uint32 aem:1; // 58 + uint32 merged:1; // 59 // TODO }; @@ -148,6 +149,7 @@ { GSVector4i scissor; GSVector4i dimx; // 4x4 signed char + TFXSelector sel; uint32 fbp, zbp, bw; uint32 fm, zm; uint32 fog; // rgb @@ -172,6 +174,7 @@ GSVector4i* src_pages; // read by any texture level GSVector4i* dst_pages; // f/z writes to it uint32 fbp, zbp, bw; + uint32 fpsm, zpsm, tpsm; #ifdef DEBUG TFXParameter* pb; #endif @@ -227,16 +230,23 @@ void Enqueue(); void EnqueueTFX(std::list>& jobs, uint32 bin_count, const cl_uchar4& bin_dim); - void UpdateTextureCache(TFXJob* job); + void JoinTFX(std::list>& jobs); + bool UpdateTextureCache(TFXJob* job); void InvalidateTextureCache(TFXJob* job); + void UsePages(uint32* pages); + void ReleasePages(uint32* pages); + + static void CL_CALLBACK ReleasePageEvent(cl_event event, cl_int event_command_exec_status, void* user_data); protected: GSTexture* m_texture[2]; uint8* m_output; GSVector4i m_rw_pages[2][4]; // pages that may be read or modified by the rendering queue, f/z rw, tex r - GSVector4i m_tc_pages[4]; // invalidated texture cache pages (split this into 8:24?) - GSVector4i m_tmp_pages[4]; // TODO: this should be block level, too many overlaps inside pages with render targets + GSVector4i m_tc_pages[4]; // invalidated texture cache pages (split this into 8:24?) // TODO: this should be block level, too many overlaps inside pages with render targets + GSVector4i m_tmp_pages[4]; + uint32 m_tmp_pages2[MAX_PAGES + 1]; + uint32 m_rw_pages_rendering[512]; // pages that are currently in-use void Reset(); void VSync(int field); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRenderer.cpp pcsx2-1.4.0/plugins/GSdx/GSRenderer.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRenderer.cpp 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRenderer.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -25,22 +25,27 @@ #include #endif +const unsigned int s_interlace_nb = 8; +const unsigned int s_post_shader_nb = 5; +const unsigned int s_aspect_ratio_nb = 3; + GSRenderer::GSRenderer() : m_shader(0) , m_shift_key(false) , m_control_key(false) + , m_framelimit(false) + , m_texture_shuffle(false) , m_wnd(NULL) , m_dev(NULL) { m_GStitleInfoBuffer[0] = 0; - m_interlace = theApp.GetConfig("interlace", 7); - m_aspectratio = theApp.GetConfig("aspectratio", 1); - m_shader = theApp.GetConfig("TVShader", 0); + m_interlace = theApp.GetConfig("interlace", 7) % s_interlace_nb; + m_aspectratio = theApp.GetConfig("aspectratio", 1) % s_aspect_ratio_nb; + m_shader = theApp.GetConfig("TVShader", 0) % s_post_shader_nb; m_filter = theApp.GetConfig("filter", 1); m_vsync = !!theApp.GetConfig("vsync", 0); m_aa1 = !!theApp.GetConfig("aa1", 0); - m_mipmap = !!theApp.GetConfig("mipmap", 1); m_fxaa = !!theApp.GetConfig("fxaa", 0); m_shaderfx = !!theApp.GetConfig("shaderfx", 0); m_shadeboost = !!theApp.GetConfig("ShadeBoost", 0); @@ -116,6 +121,8 @@ return false; } + GL_PUSH("Renderer Merge"); + // try to avoid fullscreen blur, could be nice on tv but on a monitor it's like double vision, hurts my eyes (persona 4, guitar hero) // // NOTE: probably the technique explained in graphtip.pdf (Antialiasing by Supersampling / 4. Reading Odd/Even Scan Lines Separately with the PCRTC then Blending) @@ -219,19 +226,19 @@ src[i] = GSVector4(r) * scale / GSVector4(tex[i]->GetSize()).xyxy(); - GSVector2 o(0, 0); + GSVector2 off(0, 0); if(dr[i].top - baseline >= 4) // 2? { - o.y = tex[i]->GetScale().y * (dr[i].top - baseline); + off.y = tex[i]->GetScale().y * (dr[i].top - baseline); if(m_regs->SMODE2.INT && m_regs->SMODE2.FFMD) { - o.y /= 2; + off.y /= 2; } } - dst[i] = GSVector4(o).xyxy() + scale * GSVector4(r.rsize()); + dst[i] = GSVector4(off).xyxy() + scale * GSVector4(r.rsize()); fs.x = max(fs.x, (int)(dst[i].z + 0.5f)); fs.y = max(fs.y, (int)(dst[i].w + 0.5f)); @@ -292,6 +299,8 @@ } } + GL_POP(); + return true; } @@ -354,8 +363,8 @@ string s2 = m_regs->SMODE2.INT ? (string("Interlaced ") + (m_regs->SMODE2.FFMD ? "(frame)" : "(field)")) : "Progressive"; s = format( - "%lld | %d x %d | %.2f fps (%d%%) | %s - %s | %s | %d/%d/%d | %d%% CPU | %.2f | %.2f", - m_perfmon.GetFrame(), r.width(), r.height(), fps, (int)(100.0 * fps / GetFPS()), + "%lld | %d x %d | %.2f fps (%d%%) | %s - %s | %s | %d S/%d P/%d D | %d%% CPU | %.2f | %.2f", + m_perfmon.GetFrame(), r.width(), r.height(), fps, (int)(100.0 * fps / GetTvRefreshRate()), s2.c_str(), theApp.m_gs_interlace[m_interlace].name.c_str(), theApp.m_gs_aspectratio[m_aspectratio].name.c_str(), @@ -406,7 +415,7 @@ // be noticeable). Besides, these locks are extremely short -- overhead of conditional // is way more expensive than just waiting for the CriticalSection in 1 of 10,000,000 tries. --air - GSAutoLock lock(&m_pGSsetTitle_Crit); + std::lock_guard lock(m_pGSsetTitle_Crit); strncpy(m_GStitleInfoBuffer, s.c_str(), countof(m_GStitleInfoBuffer) - 1); @@ -530,7 +539,10 @@ bool GSRenderer::BeginCapture() { - return m_capture.BeginCapture(GetFPS()); + GSVector4i disp = m_wnd->GetClientRect().fit(m_aspectratio); + float aspect = (float)disp.width() / max(1, disp.height()); + + return m_capture.BeginCapture(GetTvRefreshRate(), GetInternalResolution(), aspect); } void GSRenderer::EndCapture() @@ -540,9 +552,6 @@ void GSRenderer::KeyEvent(GSKeyEventData* e) { - const unsigned int interlace_nb = 8; - const unsigned int post_shader_nb = 5; - const unsigned int aspect_ratio_nb = 3; #ifdef _WINDOWS if(e->type == KEYPRESS) { @@ -552,25 +561,24 @@ switch(e->key) { case VK_F5: - m_interlace = (m_interlace + interlace_nb + step) % interlace_nb; + m_interlace = (m_interlace + s_interlace_nb + step) % s_interlace_nb; printf("GSdx: Set deinterlace mode to %d (%s).\n", (int)m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); return; case VK_F6: if( m_wnd->IsManaged() ) - m_aspectratio = (m_aspectratio + aspect_ratio_nb + step) % aspect_ratio_nb; + m_aspectratio = (m_aspectratio + s_aspect_ratio_nb + step) % s_aspect_ratio_nb; return; case VK_F7: - m_shader = (m_shader + post_shader_nb + step) % post_shader_nb; + m_shader = (m_shader + s_post_shader_nb + step) % s_post_shader_nb; printf("GSdx: Set shader to: %d.\n", (int)m_shader); - theApp.SetConfig("TVShader", (int)m_shader); return; case VK_DELETE: m_aa1 = !m_aa1; - printf("GSdx: (Software) aa1 is now %s.\n", m_aa1 ? "enabled" : "disabled"); + printf("GSdx: (Software) Edge anti-aliasing is now %s.\n", m_aa1 ? "enabled" : "disabled"); return; case VK_INSERT: m_mipmap = !m_mipmap; - printf("GSdx: (Software) mipmapping is now %s.\n", m_mipmap ? "enabled" : "disabled"); + printf("GSdx: (Software) Mipmapping is now %s.\n", m_mipmap ? "enabled" : "disabled"); return; case VK_PRIOR: m_fxaa = !m_fxaa; @@ -591,29 +599,28 @@ switch(e->key) { case XK_F5: - m_interlace = (m_interlace + interlace_nb + step) % interlace_nb; - fprintf(stderr, "GSdx: Set deinterlace mode to %d (%s).\n", (int)m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); + m_interlace = (m_interlace + s_interlace_nb + step) % s_interlace_nb; + printf("GSdx: Set deinterlace mode to %d (%s).\n", (int)m_interlace, theApp.m_gs_interlace.at(m_interlace).name.c_str()); return; case XK_F6: if( m_wnd->IsManaged() ) - m_aspectratio = (m_aspectratio + aspect_ratio_nb + step) % aspect_ratio_nb; + m_aspectratio = (m_aspectratio + s_aspect_ratio_nb + step) % s_aspect_ratio_nb; return; case XK_F7: - m_shader = (m_shader + post_shader_nb + step) % post_shader_nb; - theApp.SetConfig("TVShader", (int)m_shader); - fprintf(stderr,"GSdx: Set shader %d.\n", (int)m_shader); + m_shader = (m_shader + s_post_shader_nb + step) % s_post_shader_nb; + printf("GSdx: Set shader %d.\n", (int)m_shader); return; case XK_Delete: m_aa1 = !m_aa1; - fprintf(stderr,"GSdx: (Software) aa1 is now %s.\n", m_aa1 ? "enabled" : "disabled"); + printf("GSdx: (Software) Edge anti-aliasing is now %s.\n", m_aa1 ? "enabled" : "disabled"); return; case XK_Insert: m_mipmap = !m_mipmap; - fprintf(stderr,"GSdx: (Software) mipmapping is now %s.\n", m_mipmap ? "enabled" : "disabled"); + printf("GSdx: (Software) Mipmapping is now %s.\n", m_mipmap ? "enabled" : "disabled"); return; case XK_Prior: m_fxaa = !m_fxaa; - fprintf(stderr,"GSdx: fxaa is now %s.\n", m_fxaa ? "enabled" : "disabled"); + printf("GSdx: FXAA anti-aliasing is now %s.\n", m_fxaa ? "enabled" : "disabled"); return; case XK_Home: m_shaderfx = !m_shaderfx; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCS.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererCS.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCS.cpp 2014-02-04 21:42:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererCS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -295,7 +295,9 @@ try { - dev->CompileShader(IDR_CS_FX, "ps_main0", macro, &m_ps0); + vector shader; + theApp.LoadResource(IDR_CS_FX, shader); + dev->CompileShader((const char *)shader.data(), shader.size(), "cs.fx", "ps_main0", macro, &m_ps0); } catch (GSDXRecoverableError) { @@ -354,11 +356,11 @@ GSVector4i r(0, 0, w, h); GSVector4i r2 = r.ralign(psm.bs); - GSOffset* o = m_mem.GetOffset(DISPFB.Block(), DISPFB.FBW, DISPFB.PSM); + GSOffset* off = m_mem.GetOffset(DISPFB.Block(), DISPFB.FBW, DISPFB.PSM); - Read(o, r2, false); + Read(off, r2, false); - (m_mem.*psm.rtx)(o, r2, m_output, 1024 * 4, m_env.TEXA); + (m_mem.*psm.rtx)(off, r2, m_output, 1024 * 4, m_env.TEXA); m_texture[i]->Update(r, m_output, 1024 * 4); @@ -530,7 +532,9 @@ {"COLOR", 1, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; - dev->CompileShader(IDR_CS_FX, "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); + vector shader; + theApp.LoadResource(IDR_CS_FX, shader); + dev->CompileShader((const char *)shader.data(), shader.size(), "cs.fx", "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); m_vs[vs_sel] = vs; } @@ -574,7 +578,9 @@ {NULL, NULL}, }; - dev->CompileShader(IDR_CS_FX, "gs_main", macro, &gs[j]); + vector shader; + theApp.LoadResource(IDR_CS_FX, shader); + dev->CompileShader((const char *)shader.data(), shader.size(), "cs.fx", "gs_main", macro, &gs[j]); m_gs[gs_sel] = gs[j]; } @@ -613,7 +619,9 @@ {NULL, NULL}, }; - dev->CompileShader(IDR_CS_FX, "ps_main1", macro, &ps[1]); + vector shader; + theApp.LoadResource(IDR_CS_FX, shader); + dev->CompileShader((const char *)shader.data(), shader.size(), "cs.fx", "ps_main1", macro, &ps[1]); m_ps1[ps_sel] = ps[1]; } @@ -682,9 +690,9 @@ void GSRendererCS::InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) { - GSOffset* o = m_mem.GetOffset(BITBLTBUF.DBP, BITBLTBUF.DBW, BITBLTBUF.DPSM); + GSOffset* off = m_mem.GetOffset(BITBLTBUF.DBP, BITBLTBUF.DBW, BITBLTBUF.DPSM); - Read(o, r, true); // TODO: fully overwritten pages are not needed to be read, only invalidated (important) + Read(off, r, true); // TODO: fully overwritten pages are not needed to be read, only invalidated (important) // TODO: false deps, 8H/4HL/4HH texture sharing pages with 24-bit target // TODO: invalidate texture cache @@ -692,12 +700,12 @@ void GSRendererCS::InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool clut) { - GSOffset* o = m_mem.GetOffset(BITBLTBUF.SBP, BITBLTBUF.SBW, BITBLTBUF.SPSM); + GSOffset* off = m_mem.GetOffset(BITBLTBUF.SBP, BITBLTBUF.SBW, BITBLTBUF.SPSM); - Read(o, r, false); + Read(off, r, false); } -void GSRendererCS::Write(GSOffset* o, const GSVector4i& r) +void GSRendererCS::Write(GSOffset* off, const GSVector4i& r) { GSDevice11* dev = (GSDevice11*)m_dev; @@ -711,7 +719,7 @@ box.bottom = 1; box.back = 1; - uint32* pages = o->GetPages(r); + uint32* pages = off->GetPages(r); for(size_t i = 0; pages[i] != GSOffset::EOP; i++) { @@ -739,14 +747,14 @@ ctx->UpdateSubresource(m_vm, 0, &box, m_mem.m_vm8 + page * PAGE_SIZE, 0, 0); */ if(0) - printf("[%lld] write %05x %d %d (%d)\n", __rdtsc(), o->bp, o->bw, o->psm, page); + printf("[%lld] write %05x %d %d (%d)\n", __rdtsc(), off->bp, off->bw, off->psm, page); } } delete [] pages; } -void GSRendererCS::Read(GSOffset* o, const GSVector4i& r, bool invalidate) +void GSRendererCS::Read(GSOffset* off, const GSVector4i& r, bool invalidate) { GSDevice11* dev = (GSDevice11*)m_dev; @@ -760,7 +768,7 @@ box.bottom = 1; box.back = 1; - uint32* pages = o->GetPages(r); + uint32* pages = off->GetPages(r); for(size_t i = 0; pages[i] != GSOffset::EOP; i++) { @@ -799,7 +807,7 @@ ctx->Unmap(m_pb, 0); if(0) - printf("[%lld] read %05x %d %d (%d)\n", __rdtsc(), o->bp, o->bw, o->psm, page); + printf("[%lld] read %05x %d %d (%d)\n", __rdtsc(), off->bp, off->bw, off->psm, page); } } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCS.h pcsx2-1.4.0/plugins/GSdx/GSRendererCS.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererCS.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererCS.h 2016-01-05 17:28:08.000000000 +0000 @@ -114,8 +114,8 @@ hash_map > m_ps1; CComPtr m_ps_cb; - void Write(GSOffset* o, const GSVector4i& r); - void Read(GSOffset* o, const GSVector4i& r, bool invalidate); + void Write(GSOffset* off, const GSVector4i& r); + void Read(GSOffset* off, const GSVector4i& r, bool invalidate); struct OffsetBuffer { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererDX9.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererDX9.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererDX9.cpp 2014-01-26 00:58:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererDX9.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -231,6 +231,9 @@ void GSRendererDX9::UpdateFBA(GSTexture* rt) { + if (!rt) + return; + GSDevice9* dev = (GSDevice9*)m_dev; dev->BeginScene(); @@ -243,10 +246,10 @@ // ia GSVector4 s = GSVector4(rt->GetScale().x / rt->GetWidth(), rt->GetScale().y / rt->GetHeight()); - GSVector4 o = GSVector4(-1.0f, 1.0f); + GSVector4 off = GSVector4(-1.0f, 1.0f); - GSVector4 src = ((m_vt.m_min.p.xyxy(m_vt.m_max.p) + o.xxyy()) * s.xyxy()).sat(o.zzyy()); - GSVector4 dst = src * 2.0f + o.xxxx(); + GSVector4 src = ((m_vt.m_min.p.xyxy(m_vt.m_max.p) + off.xxyy()) * s.xyxy()).sat(off.zzyy()); + GSVector4 dst = src * 2.0f + off.xxxx(); GSVertexPT1 vertices[] = { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererDX.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererDX.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererDX.cpp 2013-06-06 11:36:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererDX.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -47,8 +47,8 @@ GSDrawingEnvironment& env = m_env; GSDrawingContext* context = m_context; - const GSVector2i& rtsize = rt->GetSize(); - const GSVector2& rtscale = rt->GetScale(); + const GSVector2i& rtsize = ds ? ds->GetSize() : rt->GetSize(); + const GSVector2& rtscale = ds ? ds->GetScale() : rt->GetScale(); bool DATE = m_context->TEST.DATE && context->FRAME.PSM != PSM_PSMCT24; @@ -63,10 +63,10 @@ if(dev->HasStencil()) { GSVector4 s = GSVector4(rtscale.x / rtsize.x, rtscale.y / rtsize.y); - GSVector4 o = GSVector4(-1.0f, 1.0f); + GSVector4 off = GSVector4(-1.0f, 1.0f); - GSVector4 src = ((m_vt.m_min.p.xyxy(m_vt.m_max.p) + o.xxyy()) * s.xyxy()).sat(o.zzyy()); - GSVector4 dst = src * 2.0f + o.xxxx(); + GSVector4 src = ((m_vt.m_min.p.xyxy(m_vt.m_max.p) + off.xxyy()) * s.xyxy()).sat(off.zzyy()); + GSVector4 dst = src * 2.0f + off.xxxx(); GSVertexPT1 vertices[] = { @@ -199,7 +199,7 @@ //The resulting shifted output aligns better with common blending / corona / blurring effects, //but introduces a few bad pixels on the edges. - if(rt->LikelyOffset) + if(rt && rt->LikelyOffset) { // DX9 has pixelcenter set to 0.0, so give it some value here @@ -225,6 +225,91 @@ GSDeviceDX::PSSamplerSelector ps_ssel; GSDeviceDX::PSConstantBuffer ps_cb; + // Gregory: code is not yet ready so let's only enable it when + // CRC is below the FULL level + if (m_texture_shuffle && (m_crc_hack_level < 3)) { + ps_sel.shuffle = 1; + ps_sel.fmt = 0; + + const GIFRegXYOFFSET& o = m_context->XYOFFSET; + GSVertex* v = &m_vertex.buff[0]; + size_t count = m_vertex.next; + + // vertex position is 8 to 16 pixels, therefore it is the 16-31 bits of the colors + int pos = (v[0].XYZ.X - o.OFX) & 0xFF; + bool write_ba = (pos > 112 && pos < 136); + // Read texture is 8 to 16 pixels (same as above) + int tex_pos = v[0].U & 0xFF; + ps_sel.read_ba = (tex_pos > 112 && tex_pos < 144); + + GL_INS("Color shuffle %s => %s", ps_sel.read_ba ? "BA" : "RG", write_ba ? "BA" : "RG"); + + // Convert the vertex info to a 32 bits color format equivalent + for (size_t i = 0; i < count; i += 2) { + if (write_ba) + v[i].XYZ.X -= 128u; + else + v[i + 1].XYZ.X += 128u; + + if (ps_sel.read_ba) + v[i].U -= 128u; + else + v[i + 1].U += 128u; + + // Height is too big (2x). + int tex_offset = v[i].V & 0xF; + GSVector4i offset(o.OFY, tex_offset, o.OFY, tex_offset); + + GSVector4i tmp(v[i].XYZ.Y, v[i].V, v[i + 1].XYZ.Y, v[i + 1].V); + tmp = GSVector4i(tmp - offset).srl32(1) + offset; + + v[i].XYZ.Y = tmp.x; + v[i].V = tmp.y; + v[i + 1].XYZ.Y = tmp.z; + v[i + 1].V = tmp.w; + } + + // Please bang my head against the wall! + // 1/ Reduce the frame mask to a 16 bit format + const uint32& m = context->FRAME.FBMSK; + uint32 fbmask = ((m >> 3) & 0x1F) | ((m >> 6) & 0x3E0) | ((m >> 9) & 0x7C00) | ((m >> 31) & 0x8000); + om_bsel.wrgba = 0; + + // 2 Select the new mask (Please someone put SSE here) + if ((fbmask & 0xFF) == 0) { + if (write_ba) + om_bsel.wb = 1; + else + om_bsel.wr = 1; + } + else if ((fbmask & 0xFF) != 0xFF) { +#ifdef _DEBUG + fprintf(stderr, "Please fix me! wb %d wr %d\n", om_bsel.wb, om_bsel.wr); +#endif + //ASSERT(0); + } + + fbmask >>= 8; + if ((fbmask & 0xFF) == 0) { + if (write_ba) + om_bsel.wa = 1; + else + om_bsel.wg = 1; + } + else if ((fbmask & 0xFF) != 0xFF) { +#ifdef _DEBUG + fprintf(stderr, "Please fix me! wa %d wg %d\n", om_bsel.wa, om_bsel.wg); +#endif + //ASSERT(0); + } + + } + else { + //ps_sel.fmt = GSLocalMemory::m_psm[context->FRAME.PSM].fmt; + + om_bsel.wrgba = ~GSVector4i::load((int)context->FRAME.FBMSK).eq8(GSVector4i::xffffffff()).mask(); + } + if(DATE) { if(dev->HasStencil()) @@ -245,7 +330,7 @@ ps_sel.clr1 = om_bsel.IsCLR1(); ps_sel.fba = context->FBA.FBA; ps_sel.aout = context->FRAME.PSM == PSM_PSMCT16 || context->FRAME.PSM == PSM_PSMCT16S || (context->FRAME.FBMSK & 0xff000000) == 0x7f000000 ? 1 : 0; - + ps_sel.aout &= !ps_sel.shuffle; if(UserHacks_AlphaHack) ps_sel.aout = 1; if(PRIM->FGE) @@ -287,10 +372,16 @@ const GSLocalMemory::psm_t &cpsm = psm.pal > 0 ? GSLocalMemory::m_psm[context->TEX0.CPSM] : psm; bool bilinear = m_filter == 2 ? m_vt.IsLinear() : m_filter != 0; bool simple_sample = !tex->m_palette && cpsm.fmt == 0 && context->CLAMP.WMS < 3 && context->CLAMP.WMT < 3; + // Don't force extra filtering on sprite (it creates various upscaling issue) + bilinear &= !((m_vt.m_primclass == GS_SPRITE_CLASS) && m_userhacks_round_sprite_offset && !m_vt.IsLinear()); ps_sel.wms = context->CLAMP.WMS; ps_sel.wmt = context->CLAMP.WMT; - ps_sel.fmt = tex->m_palette? cpsm.fmt | 4 : cpsm.fmt; + if (ps_sel.shuffle) { + ps_sel.fmt = 0; + } else { + ps_sel.fmt = tex->m_palette ? cpsm.fmt | 4 : cpsm.fmt; + } ps_sel.aem = env.TEXA.AEM; ps_sel.tfx = context->TEX0.TFX; ps_sel.tcc = context->TEX0.TCC; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRenderer.h pcsx2-1.4.0/plugins/GSdx/GSRenderer.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRenderer.h 2014-01-17 10:17:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRenderer.h 2016-01-05 17:28:08.000000000 +0000 @@ -30,7 +30,6 @@ { GSCapture m_capture; string m_snapshot; - bool m_snapdump; int m_shader; bool Merge(int field); @@ -45,11 +44,11 @@ int m_filter; bool m_vsync; bool m_aa1; - bool m_mipmap; bool m_framelimit; bool m_shaderfx; bool m_fxaa; bool m_shadeboost; + bool m_texture_shuffle; virtual GSTexture* GetOutput(int i) = 0; @@ -69,6 +68,9 @@ virtual void KeyEvent(GSKeyEventData* e); virtual bool CanUpscale() {return false;} virtual int GetUpscaleMultiplier() {return 1;} + virtual GSVector2i GetInternalResolution() { + return GSVector2i(GetDisplayRect().width(), GetDisplayRect().height()); + } void SetAspectRatio(int aspect) {m_aspectratio = aspect;} void SetVSync(bool enabled); void SetFrameLimit(bool limit); @@ -78,7 +80,7 @@ virtual void EndCapture(); public: - GSCritSec m_pGSsetTitle_Crit; + std::mutex m_pGSsetTitle_Crit; char m_GStitleInfoBuffer[128]; }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererHW.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererHW.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererHW.cpp 2014-01-21 15:27:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererHW.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,7 +23,7 @@ #include "GSRendererHW.h" GSRendererHW::GSRendererHW(GSTextureCache* tc) - : m_width(1024) + : m_width(1280) , m_height(1024) , m_skip(0) , m_reset(false) @@ -32,28 +32,44 @@ { m_upscale_multiplier = theApp.GetConfig("upscale_multiplier", 1); m_userhacks_skipdraw = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_SkipDraw", 0) : 0; + m_userhacks_align_sprite_X = !!theApp.GetConfig("UserHacks_align_sprite_X", 0) && !!theApp.GetConfig("UserHacks", 0); + m_userhacks_round_sprite_offset = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_round_sprite_offset", 0) : 0; - if(!m_nativeres) - { + if (!m_upscale_multiplier) { //Custom Resolution m_width = theApp.GetConfig("resx", m_width); m_height = theApp.GetConfig("resy", m_height); + } - m_upscale_multiplier = theApp.GetConfig("upscale_multiplier", m_upscale_multiplier); + if (m_upscale_multiplier == 1) { // hacks are only needed for upscaling issues. + m_userhacks_round_sprite_offset = 0; + m_userhacks_align_sprite_X = 0; + } - if(m_upscale_multiplier > 6) - { - m_upscale_multiplier = 1; // use the normal upscale math - } - else if(m_upscale_multiplier > 1) - { - m_width = 640 * m_upscale_multiplier; // 512 is also common, but this is not always detected right. - m_height = 512 * m_upscale_multiplier; // 448 is also common, but this is not always detected right. - } +} + +void GSRendererHW::SetScaling() +{ + int buffer_size = max(m_context->FRAME.FBW * 64, m_regs->DISP[m_regs->PMODE.EN1 == 1 ? 0 : 1].DISPFB.FBW * 64); + + //Only increase the buffer size, don't make it smaller, it breaks games (GH3) + + // Also don't change the size for custom resolution (m_upscale_multiplier = 0). + if (m_upscale_multiplier && m_width < (buffer_size * m_upscale_multiplier)) { + m_tc->RemovePartial(); + } else { + return; } - else - { - m_upscale_multiplier = 1; + + m_height = buffer_size < 1024 ? 512 : 1024; + + if (m_upscale_multiplier > 1) { + m_width = buffer_size * m_upscale_multiplier; + m_height *= m_upscale_multiplier; } + + + if (m_upscale_multiplier) + printf("Frame buffer size set to %dx%d (%dx%d)\n", (m_width / m_upscale_multiplier), (m_height / m_upscale_multiplier), m_width, m_height); } GSRendererHW::~GSRendererHW() @@ -66,11 +82,6 @@ GSRenderer::SetGameCRC(crc, options); m_hacks.SetGameCRC(m_game); - - if(m_game.title == CRC::JackieChanAdv) - { - m_width = 1280; // TODO: uses a 1280px wide 16 bit render target, but this only fixes half of the problem - } } bool GSRendererHW::CanUpscale() @@ -80,12 +91,22 @@ return false; } - return !m_nativeres && m_regs->PMODE.EN != 0; // upscale ratio depends on the display size, with no output it may not be set correctly (ps2 logo to game transition) + return m_upscale_multiplier!=1 && m_regs->PMODE.EN != 0; // upscale ratio depends on the display size, with no output it may not be set correctly (ps2 logo to game transition) } int GSRendererHW::GetUpscaleMultiplier() { - return m_upscale_multiplier; + // Custom resolution (currently 0) needs an upscale multiplier of 1. + return m_upscale_multiplier ? m_upscale_multiplier : 1; +} + +GSVector2i GSRendererHW::GetInternalResolution() { + GSVector2i dr(GetDisplayRect().width(), GetDisplayRect().height()); + + if (m_upscale_multiplier) + return GSVector2i(dr.x * m_upscale_multiplier, dr.y * m_upscale_multiplier); + else + return GSVector2i(m_width, m_height); } void GSRendererHW::Reset() @@ -100,6 +121,9 @@ void GSRendererHW::VSync(int field) { + //Check if the frame buffer width or display width has changed + SetScaling(); + if(m_reset) { m_tc->RemoveAll(); @@ -111,6 +135,9 @@ m_tc->IncAge(); + m_tc->PrintMemoryUsage(); + m_dev->PrintMemoryUsage(); + m_skip = 0; } @@ -135,19 +162,19 @@ GSTexture* t = NULL; - if(GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, m_width, m_height)) + if(GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, m_width, m_height, GetFrameRect(i).bottom)) { t = rt->m_texture; if(s_dump) { - if(s_save && s_n >= s_saven) + if(s_savef && s_n >= s_saven) { - t->Save(format("c:\\temp2\\_%05d_f%lld_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM)); + t->Save(root_hw + format("%05d_f%lld_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)TEX0.TBP0, (int)TEX0.PSM)); } - - s_n++; } + + s_n++; // Alaways increment it } return t; @@ -169,36 +196,179 @@ m_tc->InvalidateLocalMem(m_mem.GetOffset(BITBLTBUF.SBP, BITBLTBUF.SBW, BITBLTBUF.SPSM), r); } -void GSRendererHW::Draw() +int GSRendererHW::Interpolate_UV(float alpha, int t0, int t1) { - if(m_dev->IsLost()) return; + float t = (1.0f - alpha) * t0 + alpha * t1; + return (int)t & ~0xF; // cheap rounding +} - if(GSRenderer::IsBadFrame(m_skip, m_userhacks_skipdraw)) return; +float GSRendererHW::alpha0(int L, int X0, int X1) +{ + float x = (X0 + 15) & ~0xF; // Round up + return (x - X0) / (float)L; +} + +float GSRendererHW::alpha1(int L, int X0, int X1) +{ + float x = (X1 - 1) & ~0xF; // Round down. Note -1 because right pixel isn't included in primitive so 0x100 must return 0. + return (x - X0) / (float)L; +} + +template +void GSRendererHW::RoundSpriteOffset() +{ +//#define DEBUG_U +//#define DEBUG_V +#if defined(DEBUG_V) || defined(DEBUG_U) + bool debug = linear; +#endif + size_t count = m_vertex.next; + GSVertex* v = &m_vertex.buff[0]; + + for(size_t i = 0; i < count; i += 2) { + // Performance note: if it had any impact on perf, someone would port it to SSE (AKA GSVector) + + // Compute the coordinate of first and last texels (in native with a linear filtering) + int ox = m_context->XYOFFSET.OFX; + int X0 = v[i].XYZ.X - ox; + int X1 = v[i+1].XYZ.X - ox; + int Lx = (v[i+1].XYZ.X - v[i].XYZ.X); + float ax0 = alpha0(Lx, X0, X1); + float ax1 = alpha1(Lx, X0, X1); + int tx0 = Interpolate_UV(ax0, v[i].U, v[i+1].U); + int tx1 = Interpolate_UV(ax1, v[i].U, v[i+1].U); +#ifdef DEBUG_U + if (debug) { + fprintf(stderr, "u0:%d and u1:%d\n", v[i].U, v[i+1].U); + fprintf(stderr, "a0:%f and a1:%f\n", ax0, ax1); + fprintf(stderr, "t0:%d and t1:%d\n", tx0, tx1); + } +#endif + + int oy = m_context->XYOFFSET.OFY; + int Y0 = v[i].XYZ.Y - oy; + int Y1 = v[i+1].XYZ.Y - oy; + int Ly = (v[i+1].XYZ.Y - v[i].XYZ.Y); + float ay0 = alpha0(Ly, Y0, Y1); + float ay1 = alpha1(Ly, Y0, Y1); + int ty0 = Interpolate_UV(ay0, v[i].V, v[i+1].V); + int ty1 = Interpolate_UV(ay1, v[i].V, v[i+1].V); +#ifdef DEBUG_V + if (debug) { + fprintf(stderr, "v0:%d and v1:%d\n", v[i].V, v[i+1].V); + fprintf(stderr, "a0:%f and a1:%f\n", ay0, ay1); + fprintf(stderr, "t0:%d and t1:%d\n", ty0, ty1); + } +#endif + +#ifdef DEBUG_U + if (debug) + fprintf(stderr, "GREP_BEFORE %d => %d\n", v[i].U, v[i+1].U); +#endif +#ifdef DEBUG_V + if (debug) + fprintf(stderr, "GREP_BEFORE %d => %d\n", v[i].V, v[i+1].V); +#endif + +#if 1 + // Use rounded value of the newly computed texture coordinate. It ensures + // that sampling will remains inside texture boundary + // + // Note for bilinear: by definition it will never work correctly! A sligh modification + // of interpolation migth trigger a discard (with alpha testing) + // Let's use something simple that correct really bad case (for a couple of 2D games). + // I hope it won't create too much glitches. + if (linear) { + int Lu = v[i+1].U - v[i].U; + // Note 32 is based on taisho-mononoke + if ((Lu > 0) && (Lu <= (Lx+32))) { + v[i+1].U -= 8; + } + } else { + if (tx0 <= tx1) { + v[i].U = tx0; + v[i+1].U = tx1 + 16; + } else { + v[i].U = tx0 + 15; + v[i+1].U = tx1; + } + } +#endif +#if 1 + if (linear) { + int Lv = v[i+1].V - v[i].V; + if ((Lv > 0) && (Lv <= (Ly+32))) { + v[i+1].V -= 8; + } + } else { + if (ty0 <= ty1) { + v[i].V = ty0; + v[i+1].V = ty1 + 16; + } else { + v[i].V = ty0 + 15; + v[i+1].V = ty1; + } + } +#endif + +#ifdef DEBUG_U + if (debug) + fprintf(stderr, "GREP_AFTER %d => %d\n\n", v[i].U, v[i+1].U); +#endif +#ifdef DEBUG_V + if (debug) + fprintf(stderr, "GREP_AFTER %d => %d\n\n", v[i].V, v[i+1].V); +#endif + + } +} + +void GSRendererHW::Draw() +{ + if(m_dev->IsLost() || GSRenderer::IsBadFrame(m_skip, m_userhacks_skipdraw)) { + GL_INS("Warning skipping a draw call (%d)", s_n); + s_n += 3; // Keep it sync with SW renderer + return; + } + GL_PUSH("HW Draw %d", s_n); GSDrawingEnvironment& env = m_env; GSDrawingContext* context = m_context; + // It is allowed to use the depth and rt at the same location. However at least 1 must + // be disabled. + // 1/ GoW uses a Cd blending on a 24 bits buffer (no alpha) + // 2/ SuperMan really draws (0,0,0,0) color and a (0) 32-bits depth + // 3/ 50cents really draws (0,0,0,128) color and a (0) 24 bits depth + // Note: FF DoC has both buffer at same location but disable the depth test (write?) with ZTE = 0 + const bool no_rt = (context->ALPHA.IsCd() && PRIM->ABE && (context->FRAME.PSM == 1)); + const bool no_ds = !no_rt && (context->FRAME.FBP == context->ZBUF.ZBP && !PRIM->TME && !context->ZBUF.ZMSK && !context->FRAME.FBMSK && context->TEST.ZTE); + GIFRegTEX0 TEX0; TEX0.TBP0 = context->FRAME.Block(); TEX0.TBW = context->FRAME.FBW; TEX0.PSM = context->FRAME.PSM; - GSTextureCache::Target* rt = m_tc->LookupTarget(TEX0, m_width, m_height, GSTextureCache::RenderTarget, true); + + GSTextureCache::Target* rt = no_rt ? NULL : m_tc->LookupTarget(TEX0, m_width, m_height, GSTextureCache::RenderTarget, true); + GSTexture* rt_tex = rt ? rt->m_texture : NULL; TEX0.TBP0 = context->ZBUF.Block(); TEX0.TBW = context->FRAME.FBW; TEX0.PSM = context->ZBUF.PSM; - GSTextureCache::Target* ds = m_tc->LookupTarget(TEX0, m_width, m_height, GSTextureCache::DepthStencil, context->DepthWrite()); + GSTextureCache::Target* ds = no_ds ? NULL : m_tc->LookupTarget(TEX0, m_width, m_height, GSTextureCache::DepthStencil, context->DepthWrite()); + GSTexture* ds_tex = ds ? ds->m_texture : NULL; - if(!rt || !ds) + if(!(rt || no_rt) || !(ds || no_ds)) { + GL_POP(); ASSERT(0); - return; } GSTextureCache::Source* tex = NULL; + m_texture_shuffle = false; if(PRIM->TME) { @@ -219,12 +389,31 @@ tex = m_tc->LookupSource(context->TEX0, env.TEXA, r); - if(!tex) return; + if(!tex) { + GL_POP(); + return; + } + // FIXME: Could be removed on openGL if(GSLocalMemory::m_psm[context->TEX0.PSM].pal > 0) { m_mem.m_clut.Read32(context->TEX0, env.TEXA); } + + // Hypothesis: texture shuffle is used as a postprocessing effect so texture will be an old target. + // Initially code also tested the RT but it gives too much false-positive + // + // Both input and output are 16 bits and texture was initially 32 bits! + m_texture_shuffle = (context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS) && tex->m_32_bits_fmt; + + // Texture shuffle is not yet supported with strange clamp mode + ASSERT(!m_texture_shuffle || (context->CLAMP.WMS < 3 && context->CLAMP.WMT < 3)); + } + if (rt) { + // Be sure texture shuffle detection is properly propagated + // Otherwise set or clear the flag (Code in texture cache only set the flag) + // Note: it is important to clear the flag when RT is used as a real 16 bits target. + rt->m_32_bits_fmt = m_texture_shuffle || !(context->FRAME.PSM & 0x2); } if(s_dump) @@ -233,21 +422,29 @@ string s; - if(s_save && s_n >= s_saven && tex) + if (s_n >= s_saven) { + // Dump Register state + s = format("%05d_context.txt", s_n); + + m_env.Dump(root_hw+s); + m_context->Dump(root_hw+s); + } + + if(s_savet && s_n >= s_saven && tex) { - s = format("c:\\temp2\\_%05d_f%lld_tex_%05x_%d_%d%d_%02x_%02x_%02x_%02x.dds", + s = format("%05d_f%lld_tex_%05x_%d_%d%d_%02x_%02x_%02x_%02x.dds", s_n, frame, (int)context->TEX0.TBP0, (int)context->TEX0.PSM, (int)context->CLAMP.WMS, (int)context->CLAMP.WMT, (int)context->CLAMP.MINU, (int)context->CLAMP.MAXU, (int)context->CLAMP.MINV, (int)context->CLAMP.MAXV); - tex->m_texture->Save(s, true); + tex->m_texture->Save(root_hw+s, true); if(tex->m_palette) { - s = format("c:\\temp2\\_%05d_f%lld_tpx_%05x_%d.dds", s_n, frame, context->TEX0.CBP, context->TEX0.CPSM); + s = format("%05d_f%lld_tpx_%05x_%d.dds", s_n, frame, context->TEX0.CBP, context->TEX0.CPSM); - tex->m_palette->Save(s, true); + tex->m_palette->Save(root_hw+s, true); } } @@ -255,23 +452,32 @@ if(s_save && s_n >= s_saven) { - s = format("c:\\temp2\\_%05d_f%lld_rt0_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM); + s = format("%05d_f%lld_rt0_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM); - rt->m_texture->Save(s); + if (rt) + rt->m_texture->Save(root_hw+s); } if(s_savez && s_n >= s_saven) { - s = format("c:\\temp2\\_%05d_f%lld_rz0_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM); + s = format("%05d_f%lld_rz0_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM); - ds->m_texture->Save(s); + if (ds_tex) + ds_tex->Save(root_hw+s); } s_n++; + +#ifdef ENABLE_OGL_DEBUG + } else { + s_n += 2; +#endif } - if(m_hacks.m_oi && !(this->*m_hacks.m_oi)(rt->m_texture, ds->m_texture, tex)) + if(m_hacks.m_oi && !(this->*m_hacks.m_oi)(rt_tex, ds_tex, tex)) { + s_n += 1; // keep counter sync + GL_POP(); return; } @@ -295,9 +501,47 @@ context->FRAME.FBMSK = fm; context->ZBUF.ZMSK = zm != 0; + // A couple of hack to avoid upscaling issue. So far it seems to impacts mostly sprite + if ((m_upscale_multiplier > 1) && (m_vt.m_primclass == GS_SPRITE_CLASS)) { + size_t count = m_vertex.next; + GSVertex* v = &m_vertex.buff[0]; + + // Hack to avoid vertical black line in various games (ace combat/tekken) + if (m_userhacks_align_sprite_X) { + // Note for performance reason I do the check only once on the first + // primitive + int win_position = v[1].XYZ.X - context->XYOFFSET.OFX; + const bool unaligned_position = ((win_position & 0xF) == 8); + const bool unaligned_texture = ((v[1].U & 0xF) == 0) && PRIM->FST; // I'm not sure this check is useful + const bool hole_in_vertex = (count < 4) || (v[1].XYZ.X != v[2].XYZ.X); + if (hole_in_vertex && unaligned_position && (unaligned_texture || !PRIM->FST)) { + // Normaly vertex are aligned on full pixels and texture in half + // pixels. Let's extend the coverage of an half-pixel to avoid + // hole after upscaling + for(size_t i = 0; i < count; i += 2) { + v[i+1].XYZ.X += 8; + // I really don't know if it is a good idea. Neither what to do for !PRIM->FST + if (unaligned_texture) + v[i+1].U += 8; + } + } + } + + if (PRIM->FST) { + if ((m_userhacks_round_sprite_offset > 1) || (m_userhacks_round_sprite_offset == 1 && !m_vt.IsLinear())) { + if (m_vt.IsLinear()) + RoundSpriteOffset(); + else + RoundSpriteOffset(); + } + } else { + ; // vertical line in Yakuza (note check m_userhacks_align_sprite_X behavior) + } + } + // - DrawPrims(rt->m_texture, ds->m_texture, tex); + DrawPrims(rt_tex, ds_tex, tex); // @@ -309,18 +553,22 @@ GSVector4i r = GSVector4i(m_vt.m_min.p.xyxy(m_vt.m_max.p)).rintersect(GSVector4i(context->scissor.in)); - if(fm != 0xffffffff) + if(fm != 0xffffffff && rt) { rt->m_valid = rt->m_valid.runion(r); m_tc->InvalidateVideoMem(context->offset.fb, r, false); + + m_tc->InvalidateVideoMemType(GSTextureCache::DepthStencil, context->FRAME.Block()); } - if(zm != 0xffffffff) + if(zm != 0xffffffff && ds) { ds->m_valid = ds->m_valid.runion(r); m_tc->InvalidateVideoMem(context->offset.zb, r, false); + + m_tc->InvalidateVideoMemType(GSTextureCache::RenderTarget, context->ZBUF.Block()); } // @@ -338,26 +586,40 @@ if(s_save && s_n >= s_saven) { - s = format("c:\\temp2\\_%05d_f%lld_rt1_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM); + s = format("%05d_f%lld_rt1_%05x_%d.bmp", s_n, frame, context->FRAME.Block(), context->FRAME.PSM); - rt->m_texture->Save(s); + if (rt) + rt->m_texture->Save(root_hw+s); } if(s_savez && s_n >= s_saven) { - s = format("c:\\temp2\\_%05d_f%lld_rz1_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM); + s = format("%05d_f%lld_rz1_%05x_%d.bmp", s_n, frame, context->ZBUF.Block(), context->ZBUF.PSM); - ds->m_texture->Save(s); + if (ds_tex) + ds_tex->Save(root_hw+s); } s_n++; + + if(s_savel > 0 && (s_n - s_saven) > s_savel) + { + s_dump = 0; + } +#ifdef ENABLE_OGL_DEBUG + } else { + s_n += 1; +#endif } #ifdef DISABLE_HW_TEXTURE_CACHE - m_tc->Read(rt, r); + if (rt) + m_tc->Read(rt, r); #endif + + GL_POP(); } // hacks @@ -388,6 +650,7 @@ m_oi_list.push_back(HackEntry(CRC::SpyroEternalNight, CRC::RegionCount, &GSRendererHW::OI_SpyroEternalNight)); m_oi_list.push_back(HackEntry(CRC::TalesOfLegendia, CRC::RegionCount, &GSRendererHW::OI_TalesOfLegendia)); m_oi_list.push_back(HackEntry(CRC::SMTNocturne, CRC::RegionCount, &GSRendererHW::OI_SMTNocturne)); + m_oi_list.push_back(HackEntry(CRC::SuperManReturns, CRC::RegionCount, &GSRendererHW::OI_SuperManReturns)); m_oo_list.push_back(HackEntry(CRC::DBZBT2, CRC::RegionCount, &GSRendererHW::OO_DBZBT2)); m_oo_list.push_back(HackEntry(CRC::MajokkoALaMode2, CRC::RegionCount, &GSRendererHW::OO_MajokkoALaMode2)); @@ -405,14 +668,71 @@ m_oo = m_oo_map[hash]; m_cu = m_cu_map[hash]; - if(game.flags & CRC::PointListPalette) - { + if (game.flags & CRC::PointListPalette) { ASSERT(m_oi == NULL); m_oi = &GSRendererHW::OI_PointListPalette; } + + bool hack = theApp.GetConfig("UserHacks_ColorDepthClearOverlap", 0) && theApp.GetConfig("UserHacks", 0); + if (hack && !m_oi) { + // FIXME: Enable this code in the future. I think it could replace + // most of the "old" OI hack. So far code was tested on GoW2 & SimpsonsGame with + // success + m_oi = &GSRendererHW::OI_DoubleHalfClear; + } +} + +bool GSRendererHW::OI_DoubleHalfClear(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) +{ + if ((m_vt.m_primclass == GS_SPRITE_CLASS) && !PRIM->TME && !m_context->ZBUF.ZMSK && (m_context->FRAME.FBW >= 7) && rt) { + GSVertex* v = &m_vertex.buff[0]; + + //GL_INS("OI_DoubleHalfClear: psm:%x. Z:%d R:%d G:%d B:%d A:%d", m_context->FRAME.PSM, + // v[1].XYZ.Z, v[1].RGBAQ.R, v[1].RGBAQ.G, v[1].RGBAQ.B, v[1].RGBAQ.A); + + // Check it is a clear on the first primitive only + if (v[1].XYZ.Z || v[1].RGBAQ.R || v[1].RGBAQ.G || v[1].RGBAQ.B || v[1].RGBAQ.A) { + return true; + } + // Only 32 bits format is supported otherwise it is complicated + if (m_context->FRAME.PSM & 2) + return true; + + // FIXME might need some rounding + // In 32 bits pages are 64x32 pixels. In theory, it must be somethings + // like FBW * 64 pixels * ratio / 32 pixels / 2 = FBW * ratio + // It is hard to predict the ratio, so I round it to 1. And I use + // <= comparison below. + uint32 h_pages = m_context->FRAME.FBW; + + uint32 base; + uint32 half; + if (m_context->FRAME.FBP > m_context->ZBUF.ZBP) { + base = m_context->ZBUF.ZBP; + half = m_context->FRAME.FBP; + } else { + base = m_context->FRAME.FBP; + half = m_context->ZBUF.ZBP; + } + + if (half <= (base + h_pages * m_context->FRAME.FBW)) { + //GL_INS("OI_DoubleHalfClear: base %x half %x. h_pages %d fbw %d", base, half, h_pages, m_context->FRAME.FBW); + if (m_context->FRAME.FBP > m_context->ZBUF.ZBP) { + m_dev->ClearDepth(ds, 0); + } else { + m_dev->ClearRenderTarget(rt, 0); + } + // Don't return false, it will break the rendering. I guess that it misses texture + // invalidation + //return false; + } + } + return true; } +// OI (others input?/implementation?) hacks replace current draw call + bool GSRendererHW::OI_FFXII(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) { static uint32* video = NULL; @@ -898,6 +1218,32 @@ return true; } +bool GSRendererHW::OI_SuperManReturns(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t) +{ + // Instead to use a fullscreen rectangle they use a 32 pixels, 4096 pixels with a FBW of 1. + // Technically the FB wrap/overlap on itself... + GSDrawingContext* ctx = m_context; + GSVertex* v = &m_vertex.buff[0]; + + if (!(ctx->FRAME.FBP == ctx->ZBUF.ZBP && !PRIM->TME && !ctx->ZBUF.ZMSK && !ctx->FRAME.FBMSK && m_vt.m_eq.rgba == 0xFFFF)) + return true; + + // Please kill those crazy devs! + ASSERT(m_vertex.next == 2); + ASSERT(m_vt.m_primclass == GS_SPRITE_CLASS); + ASSERT((v->RGBAQ.A << 24 | v->RGBAQ.B << 16 | v->RGBAQ.G << 8 | v->RGBAQ.R) == (int)v->XYZ.Z); + + // Do a direct write + m_dev->ClearRenderTarget(rt, GSVector4(m_vt.m_min.c)); + + m_tc->InvalidateVideoMemType(GSTextureCache::DepthStencil, ctx->FRAME.Block()); + + return false; +} + + +// OO (others output?) hacks: invalidate extra local memory after the draw call + void GSRendererHW::OO_DBZBT2() { // palette readback (cannot detect yet, when fetching the texture later) @@ -935,6 +1281,8 @@ } } +// Can Upscale hacks: disable upscaling for some draw calls + bool GSRendererHW::CU_DBZBT2() { // palette should stay 64 x 64 diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererHW.h pcsx2-1.4.0/plugins/GSdx/GSRendererHW.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererHW.h 2014-01-21 15:27:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererHW.h 2016-01-05 17:28:08.000000000 +0000 @@ -25,6 +25,7 @@ #include "GSTextureCache.h" #include "GSCrc.h" #include "GSFunctionMap.h" +#include "GSState.h" class GSRendererHW : public GSRenderer { @@ -35,13 +36,16 @@ bool m_reset; int m_upscale_multiplier; int m_userhacks_skipdraw; - + + bool m_userhacks_align_sprite_X; + #pragma region hacks typedef bool (GSRendererHW::*OI_Ptr)(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); typedef void (GSRendererHW::*OO_Ptr)(); typedef bool (GSRendererHW::*CU_Ptr)(); + bool OI_DoubleHalfClear(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); bool OI_FFXII(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); bool OI_FFX(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); bool OI_MetalSlug6(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); @@ -60,6 +64,7 @@ bool OI_TalesOfLegendia(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); bool OI_SMTNocturne(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); bool OI_PointListPalette(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); + bool OI_SuperManReturns(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* t); void OO_DBZBT2(); void OO_MajokkoALaMode2(); @@ -129,11 +134,19 @@ #pragma endregion + int Interpolate_UV(float alpha, int t0, int t1); + float alpha0(int L, int X0, int X1); + float alpha1(int L, int X0, int X1); + + template void RoundSpriteOffset(); + protected: GSTextureCache* m_tc; virtual void DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* tex) = 0; + int m_userhacks_round_sprite_offset; + public: GSRendererHW(GSTextureCache* tc); virtual ~GSRendererHW(); @@ -141,6 +154,8 @@ void SetGameCRC(uint32 crc, int options); bool CanUpscale(); int GetUpscaleMultiplier(); + virtual GSVector2i GetInternalResolution(); + void SetScaling(); void Reset(); void VSync(int field); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererOGL.cpp 2014-10-02 07:33:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -27,26 +27,35 @@ GSRendererOGL::GSRendererOGL() : GSRendererHW(new GSTextureCacheOGL(this)) { - m_logz = !!theApp.GetConfig("logz", 1); - m_fba = !!theApp.GetConfig("fba", 1); - UserHacks_AlphaHack = !!theApp.GetConfig("UserHacks_AlphaHack", 0) && !!theApp.GetConfig("UserHacks", 0); - UserHacks_AlphaStencil = !!theApp.GetConfig("UserHacks_AlphaStencil", 0) && !!theApp.GetConfig("UserHacks", 0); - UserHacks_DateGL4 = !!theApp.GetConfig("UserHacks_DateGL4", 0); - m_pixelcenter = GSVector2(-0.5f, -0.5f); - - UserHacks_TCOffset = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_TCOffset", 0) : 0; - UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; - UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; + m_accurate_date = theApp.GetConfig("accurate_date", 0); + + m_sw_blending = theApp.GetConfig("accurate_blending_unit", 1); + + UserHacks_TCOffset = theApp.GetConfig("UserHacks_TCOffset", 0); + UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; + UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; + + m_prim_overlap = PRIM_OVERLAP_UNKNOW; + + if (!theApp.GetConfig("UserHacks", 0)) { + UserHacks_TCOffset = 0; + UserHacks_TCO_x = 0; + UserHacks_TCO_y = 0; + } } bool GSRendererOGL::CreateDevice(GSDevice* dev) { - if(!GSRenderer::CreateDevice(dev)) + if (!GSRenderer::CreateDevice(dev)) return false; -#ifdef ENABLE_GLES - fprintf(stderr, "FIXME Creation of FBA dss/bs state is not yet implemented\n"); -#endif + // No sw blending if not supported (Intel GPU) + if (!GLLoader::found_GL_ARB_texture_barrier) { + fprintf(stderr, "Error GL_ARB_texture_barrier is not supported by your driver. You can't emulate correctly the GS blending unit! Sorry!\n"); + m_accurate_date = false; + m_sw_blending = 0; + } + return true; } @@ -64,7 +73,7 @@ // assume vertices are tightly packed and sequentially indexed (it should be the case) - if(m_vertex.next >= 2) + if (m_vertex.next >= 2) { size_t count = m_vertex.next; @@ -122,28 +131,7 @@ if (!GLLoader::found_geometry_shader) EmulateGS(); - void* ptr = NULL; - - if(UserHacks_WildHack && !isPackedUV_HackFlag) { - // FIXME: why not put it on the Vertex shader - if(dev->IAMapVertexBuffer(&ptr, sizeof(GSVertex), m_vertex.next)) - { - GSVector4i::storent(ptr, m_vertex.buff, sizeof(GSVertex) * m_vertex.next); - - GSVertex* RESTRICT d = (GSVertex*)ptr; - - for(unsigned int i = 0; i < m_vertex.next; i++) - { - if(PRIM->TME && PRIM->FST) d[i].UV &= 0x3FEF3FEF; - } - - dev->IAUnmapVertexBuffer(); - } - } else { - // By default use the common path (in case it can be made faster) - dev->IASetVertexBuffer(m_vertex.buff, m_vertex.next); - } - + dev->IASetVertexBuffer(m_vertex.buff, m_vertex.next); dev->IASetIndexBuffer(m_index.buff, m_index.tail); GLenum t = 0; @@ -172,70 +160,539 @@ dev->IASetPrimitiveTopology(t); } -void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* tex) +bool GSRendererOGL::EmulateTextureShuffleAndFbmask(GSDeviceOGL::PSSelector& ps_sel, GSDeviceOGL::OMColorMaskSelector& om_csel) { - GSDrawingEnvironment& env = m_env; - GSDrawingContext* context = m_context; + bool require_barrier = false; - const GSVector2i& rtsize = rt->GetSize(); - const GSVector2& rtscale = rt->GetScale(); + if (m_texture_shuffle) { + ps_sel.shuffle = 1; + ps_sel.dfmt = 0; - bool DATE = m_context->TEST.DATE && context->FRAME.PSM != PSM_PSMCT24; - bool advance_DATE = false; + const GIFRegXYOFFSET& o = m_context->XYOFFSET; + GSVertex* v = &m_vertex.buff[0]; + size_t count = m_vertex.next; - ASSERT(m_dev != NULL); + // vertex position is 8 to 16 pixels, therefore it is the 16-31 bits of the colors + int pos = (v[0].XYZ.X - o.OFX) & 0xFF; + bool write_ba = (pos > 112 && pos < 136); + // Read texture is 8 to 16 pixels (same as above) + float tw = (float)(1u << m_context->TEX0.TW); + int tex_pos = (PRIM->FST) ? v[0].U : tw * v[0].ST.S; + tex_pos &= 0xFF; + ps_sel.read_ba = (tex_pos > 112 && tex_pos < 144); + + // Convert the vertex info to a 32 bits color format equivalent + if (PRIM->FST) { + GL_INS("First vertex is P: %d => %d T: %d => %d", v[0].XYZ.X, v[1].XYZ.X, v[0].U, v[1].U); + + for(size_t i = 0; i < count; i += 2) { + if (write_ba) + v[i].XYZ.X -= 128u; + else + v[i+1].XYZ.X += 128u; + + if (ps_sel.read_ba) + v[i].U -= 128u; + else + v[i+1].U += 128u; + + // Height is too big (2x). + int tex_offset = v[i].V & 0xF; + GSVector4i offset(o.OFY, tex_offset, o.OFY, tex_offset); + + GSVector4i tmp(v[i].XYZ.Y, v[i].V, v[i+1].XYZ.Y, v[i+1].V); + tmp = GSVector4i(tmp - offset).srl32(1) + offset; + + v[i].XYZ.Y = tmp.x; + v[i].V = tmp.y; + v[i+1].XYZ.Y = tmp.z; + v[i+1].V = tmp.w; + } + } else { + const float offset_8pix = 8.0f / tw; + GL_INS("First vertex is P: %d => %d T: %f => %f (offset %f)", v[0].XYZ.X, v[1].XYZ.X, v[0].ST.S, v[1].ST.S, offset_8pix); - GSDeviceOGL* dev = (GSDeviceOGL*)m_dev; + for(size_t i = 0; i < count; i += 2) { + if (write_ba) + v[i].XYZ.X -= 128u; + else + v[i+1].XYZ.X += 128u; + + if (ps_sel.read_ba) + v[i].ST.S -= offset_8pix; + else + v[i+1].ST.S += offset_8pix; + + // Height is too big (2x). + GSVector4i offset(o.OFY, o.OFY); + + GSVector4i tmp(v[i].XYZ.Y, v[i+1].XYZ.Y); + tmp = GSVector4i(tmp - offset).srl32(1) + offset; + + //fprintf(stderr, "Before %d, After %d\n", v[i+1].XYZ.Y, tmp.y); + v[i].XYZ.Y = tmp.x; + v[i].ST.T /= 2.0f; + v[i+1].XYZ.Y = tmp.y; + v[i+1].ST.T /= 2.0f; + } + } + // If date is enabled you need to test the green channel instead of the + // alpha channel. Only enable this code in DATE mode to reduce the number + // of shader. + ps_sel.write_rg = !write_ba && m_context->TEST.DATE; + + // Please bang my head against the wall! + // 1/ Reduce the frame mask to a 16 bit format + const uint32& m = m_context->FRAME.FBMSK; + uint32 fbmask = ((m >> 3) & 0x1F) | ((m >> 6) & 0x3E0) | ((m >> 9) & 0x7C00) | ((m >> 16) & 0x8000); + // FIXME GSVector will be nice here + uint8 rg_mask = fbmask & 0xFF; + uint8 ba_mask = (fbmask >> 8) & 0xFF; + om_csel.wrgba = 0; + + // 2 Select the new mask (Please someone put SSE here) + if (rg_mask != 0xFF) { + if (write_ba) { + GL_INS("Color shuffle %s => B", ps_sel.read_ba ? "B" : "R"); + om_csel.wb = 1; + } else { + GL_INS("Color shuffle %s => R", ps_sel.read_ba ? "B" : "R"); + om_csel.wr = 1; + } + if (rg_mask) + ps_sel.fbmask = 1; + } - // Blend + if (ba_mask != 0xFF) { + if (write_ba) { + GL_INS("Color shuffle %s => A", ps_sel.read_ba ? "A" : "G"); + om_csel.wa = 1; + } else { + GL_INS("Color shuffle %s => G", ps_sel.read_ba ? "A" : "G"); + om_csel.wg = 1; + } + if (ba_mask) + ps_sel.fbmask = 1; + } + + if (ps_sel.fbmask && m_sw_blending) { + GL_INS("FBMASK SW emulated fb_mask:%x on tex shuffle", fbmask); + ps_cb.FbMask.r = rg_mask; + ps_cb.FbMask.g = rg_mask; + ps_cb.FbMask.b = ba_mask; + ps_cb.FbMask.a = ba_mask; + require_barrier = true; + } else { + ps_sel.fbmask = 0; + } + + } else { + ps_sel.dfmt = GSLocalMemory::m_psm[m_context->FRAME.PSM].fmt; + + GSVector4i fbmask_v = GSVector4i::load((int)m_context->FRAME.FBMSK); + int ff_fbmask = fbmask_v.eq8(GSVector4i::xffffffff()).mask(); + int zero_fbmask = fbmask_v.eq8(GSVector4i::zero()).mask(); + + om_csel.wrgba = ~ff_fbmask; // Enable channel if at least 1 bit is 0 + + ps_sel.fbmask = m_sw_blending && (~ff_fbmask & ~zero_fbmask & 0xF); + + if (ps_sel.fbmask) { + GL_INS("FBMASK SW emulated fb_mask:%x on %d bits format", m_context->FRAME.FBMSK, + (GSLocalMemory::m_psm[m_context->FRAME.PSM].fmt == 2) ? 16 : 32); + ps_cb.FbMask = fbmask_v.u8to32(); + require_barrier = true; + } + } + + return require_barrier; +} - GSDeviceOGL::OMBlendSelector om_bsel; +bool GSRendererOGL::EmulateBlending(GSDeviceOGL::PSSelector& ps_sel, bool DATE_GL42) +{ + GSDeviceOGL* dev = (GSDeviceOGL*)m_dev; + const GIFRegALPHA& ALPHA = m_context->ALPHA; + bool require_barrier = false; + bool sw_blending = false; + + // No blending so early exit + if (!(PRIM->ABE || PRIM->AA1 && m_vt.m_primclass == GS_LINE_CLASS)) { +#ifdef ENABLE_OGL_DEBUG + if (m_env.PABE.PABE) { + GL_INS("!!! ENV PABE without ABE !!!"); + } +#endif + dev->OMSetBlendState(); + return false; + } - if(!IsOpaque()) + if (m_env.PABE.PABE) { - om_bsel.abe = PRIM->ABE || PRIM->AA1 && m_vt.m_primclass == GS_LINE_CLASS; + GL_INS("!!! ENV PABE not supported !!!"); + if (m_sw_blending >= ACC_BLEND_CCLIP_DALPHA) { + ps_sel.pabe = 1; + require_barrier |= (ALPHA.C == 1); + sw_blending = true; + } + //Breath of Fire Dragon Quarter triggers this in battles. Graphics are fine though. + //ASSERT(0); + } - om_bsel.a = context->ALPHA.A; - om_bsel.b = context->ALPHA.B; - om_bsel.c = context->ALPHA.C; - om_bsel.d = context->ALPHA.D; + // Compute the blending equation to detect special case + uint8 blend_index = ((ALPHA.A * 3 + ALPHA.B) * 3 + ALPHA.C) * 3 + ALPHA.D; + int blend_flag = GSDeviceOGL::m_blendMapOGL[blend_index].bogus; + + // SW Blend is (nearly) free. Let's use it. + bool impossible_or_free_blend = (blend_flag & (BLEND_NO_BAR|BLEND_A_MAX|BLEND_ACCU)) + || (m_prim_overlap == PRIM_OVERLAP_NO); + + // Do the multiplication in shader for blending accumulation: Cs*As + Cd or Cs*Af + Cd + bool accumulation_blend = (blend_flag & BLEND_ACCU); + + // Warning no break on purpose + switch (m_sw_blending) { + case ACC_BLEND_ULTRA: sw_blending |= true; + case ACC_BLEND_FULL: if (!m_vt.m_alpha.valid && (ALPHA.C == 0)) GetAlphaMinMax(); + sw_blending |= (ALPHA.A != ALPHA.B) && + ((ALPHA.C == 0 && m_vt.m_alpha.max > 128) || (ALPHA.C == 2 && ALPHA.FIX > 128u)); + case ACC_BLEND_CCLIP_DALPHA: sw_blending |= (ALPHA.C == 1) || (m_env.COLCLAMP.CLAMP == 0); + case ACC_BLEND_SPRITE: sw_blending |= m_vt.m_primclass == GS_SPRITE_CLASS; + case ACC_BLEND_FREE: sw_blending |= ps_sel.fbmask || impossible_or_free_blend; + default: sw_blending |= accumulation_blend; + } + // SW Blending + // GL42 interact very badly with sw blending. GL42 uses the primitiveID to find the primitive + // that write the bad alpha value. Sw blending will force the draw to run primitive by primitive + // (therefore primitiveID will be constant to 1) + sw_blending &= !DATE_GL42; + + // Color clip + if (m_env.COLCLAMP.CLAMP == 0) { + if (m_prim_overlap == PRIM_OVERLAP_NO) { + // The fastest algo that requires a single pass + GL_INS("COLCLIP Free mode ENABLED"); + ps_sel.colclip = 1; + ASSERT(sw_blending); + accumulation_blend = false; // disable the HDR algo + } else if (accumulation_blend) { + // A fast algo that requires 2 passes + GL_INS("COLCLIP Fast HDR mode ENABLED"); + ps_sel.hdr = 1; + } else if (sw_blending) { + // A slow algo that could requires several passes (barely used) + GL_INS("COLCLIP SW ENABLED (blending is %d/%d/%d/%d)", ALPHA.A, ALPHA.B, ALPHA.C, ALPHA.D); + ps_sel.colclip = 1; + } else { + // Speed hack skip previous slow algo + GL_INS("Sorry colclip isn't supported"); + } + } - if(env.PABE.PABE) - { - if(om_bsel.a == 0 && om_bsel.b == 1 && om_bsel.c == 0 && om_bsel.d == 1) - { - // this works because with PABE alpha blending is on when alpha >= 0x80, but since the pixel shader - // cannot output anything over 0x80 (== 1.0) blending with 0x80 or turning it off gives the same result + // Seriously don't expect me to support this kind of crazyness. + // No mix of COLCLIP + accumulation_blend + DATE GL42 + // Neither fbmask and GL42 + ASSERT(!(ps_sel.hdr && DATE_GL42)); + ASSERT(!(ps_sel.fbmask && DATE_GL42)); + + // For stat to optimize accurate option +#if 0 + GL_INS("BLEND_INFO: %d/%d/%d/%d. Clamp:%d. Prim:%d number %d (sw %d)", + ALPHA.A, ALPHA.B, ALPHA.C, ALPHA.D, m_env.COLCLAMP.CLAMP, m_vt.m_primclass, m_vertex.next, sw_blending); +#endif + if (sw_blending) { + ps_sel.blend_a = ALPHA.A; + ps_sel.blend_b = ALPHA.B; + ps_sel.blend_c = ALPHA.C; + ps_sel.blend_d = ALPHA.D; + + if (accumulation_blend) { + // Keep HW blending to do the addition/subtraction + dev->OMSetBlendState(blend_index); + if (ALPHA.A == 2) { + // The blend unit does a reverse subtraction so it means + // the shader must output a positive value. + // Replace 0 - Cs by Cs - 0 + ps_sel.blend_a = ALPHA.B; + ps_sel.blend_b = 2; + } + // Remove the addition/substraction from the SW blending + ps_sel.blend_d = 2; + } else { + // Disable HW blending + dev->OMSetBlendState(); + } + + // Require the fix alpha vlaue + if (ALPHA.C == 2) { + ps_cb.AlphaCoeff.a = (float)ALPHA.FIX / 128.0f; + } + + // No need to flush for every primitive + require_barrier |= !(blend_flag & BLEND_NO_BAR) && !accumulation_blend; + } else { + ps_sel.clr1 = !!(blend_flag & BLEND_C_CLR); + if (ps_sel.dfmt == 1 && ALPHA.C == 1) { + // 24 bits doesn't have an alpha channel so use 1.0f fix factor as equivalent + int hacked_blend_index = blend_index + 3; // +3 <=> +1 on C + dev->OMSetBlendState(hacked_blend_index, 128, true); + } else { + dev->OMSetBlendState(blend_index, ALPHA.FIX, (ALPHA.C == 2)); + } + } + + return require_barrier; +} + +GSRendererOGL::PRIM_OVERLAP GSRendererOGL::PrimitiveOverlap() +{ + // Either 1 triangle or 1 line or 3 POINTs + // It is bad for the POINTs but low probability that they overlap + if (m_vertex.next < 4) + return PRIM_OVERLAP_NO; + + if (m_vt.m_primclass != GS_SPRITE_CLASS) + return PRIM_OVERLAP_UNKNOW; // maybe, maybe not + + // Check intersection of sprite primitive only + size_t count = m_vertex.next; + GSVertex* v = &m_vertex.buff[0]; + + // In order to speed up comparaison a boundind-box is accumulated. It removes a + // loop so code is much faster (check game virtua fighter). Besides it allow to check + // properly the Y order. + GSVector4i all; + //FIXME better vector operation + if (v[1].XYZ.Y < v[0].XYZ.Y) { + all.y = v[1].XYZ.Y; + all.w = v[0].XYZ.Y; + } else { + all.y = v[0].XYZ.Y; + all.w = v[1].XYZ.Y; + } + if (v[1].XYZ.X < v[0].XYZ.X) { + all.x = v[1].XYZ.X; + all.z = v[0].XYZ.X; + } else { + all.x = v[0].XYZ.X; + all.z = v[1].XYZ.X; + } + + for(size_t i = 2; i < count; i += 2) { + GSVector4i sprite; + //FIXME better vector operation + if (v[i+1].XYZ.Y < v[i+0].XYZ.Y) { + sprite.y = v[i+1].XYZ.Y; + sprite.w = v[i+0].XYZ.Y; + } else { + sprite.y = v[i+0].XYZ.Y; + sprite.w = v[i+1].XYZ.Y; + } + if (v[i+1].XYZ.X < v[i+0].XYZ.X) { + sprite.x = v[i+1].XYZ.X; + sprite.z = v[i+0].XYZ.X; + } else { + sprite.x = v[i+0].XYZ.X; + sprite.z = v[i+1].XYZ.X; + } + + // Be sure to get vertex in good order, otherwise .r* function doesn't + // work as expected. + ASSERT(sprite.x <= sprite.z); + ASSERT(sprite.y <= sprite.w); + ASSERT(all.x <= all.z); + ASSERT(all.y <= all.w); - om_bsel.abe = 0; + if (all.rintersect(sprite).rempty()) { + all = all.runion(sprite); + } else { + return PRIM_OVERLAP_YES; + } + } +#if 0 + // Old algo: less constraint but O(n^2) instead of O(n) as above + + // You have no guarantee on the sprite order, first vertex can be either top-left or bottom-left + // There is a high probability that the draw call will uses same ordering for all vertices. + // In order to keep a small performance impact only the first sprite will be checked + // + // Some safe-guard will be added in the outer-loop to avoid corruption with a limited perf impact + if (v[1].XYZ.Y < v[0].XYZ.Y) { + // First vertex is Top-Left + for(size_t i = 0; i < count; i += 2) { + if (v[i+1].XYZ.Y > v[i].XYZ.Y) { + return PRIM_OVERLAP_UNKNOW; } - else - { - //Breath of Fire Dragon Quarter triggers this in battles. Graphics are fine though. - //ASSERT(0); + GSVector4i vi(v[i].XYZ.X, v[i+1].XYZ.Y, v[i+1].XYZ.X, v[i].XYZ.Y); + for (size_t j = i+2; j < count; j += 2) { + GSVector4i vj(v[j].XYZ.X, v[j+1].XYZ.Y, v[j+1].XYZ.X, v[j].XYZ.Y); + GSVector4i inter = vi.rintersect(vj); + if (!inter.rempty()) { + return PRIM_OVERLAP_YES; + } + } + } + } else { + // First vertex is Bottom-Left + for(size_t i = 0; i < count; i += 2) { + if (v[i+1].XYZ.Y < v[i].XYZ.Y) { + return PRIM_OVERLAP_UNKNOW; + } + GSVector4i vi(v[i].XYZ.X, v[i].XYZ.Y, v[i+1].XYZ.X, v[i+1].XYZ.Y); + for (size_t j = i+2; j < count; j += 2) { + GSVector4i vj(v[j].XYZ.X, v[j].XYZ.Y, v[j+1].XYZ.X, v[j+1].XYZ.Y); + GSVector4i inter = vi.rintersect(vj); + if (!inter.rempty()) { + return PRIM_OVERLAP_YES; + } } } } +#endif + + //fprintf(stderr, "%d: Yes, code can be optimized (draw of %d vertices)\n", s_n, count); + return PRIM_OVERLAP_NO; +} + +GSVector4i GSRendererOGL::ComputeBoundingBox(const GSVector2& rtscale, const GSVector2i& rtsize) +{ + GSVector4 scale = GSVector4(rtscale.x, rtscale.y); + GSVector4 offset = GSVector4(-1.0f, 1.0f); // Round value + GSVector4 box = m_vt.m_min.p.xyxy(m_vt.m_max.p) + offset.xxyy(); + return GSVector4i(box * scale.xyxy()).rintersect(GSVector4i(0, 0, rtsize.x, rtsize.y)); +} + +void GSRendererOGL::SendDraw(bool require_barrier) +{ + GSDeviceOGL* dev = (GSDeviceOGL*)m_dev; + + if (!require_barrier) { + dev->DrawIndexedPrimitive(); + } else if (m_prim_overlap == PRIM_OVERLAP_NO) { + ASSERT(GLLoader::found_GL_ARB_texture_barrier); + glTextureBarrier(); + dev->DrawIndexedPrimitive(); + } else { + // FIXME: Investigate: a dynamic check to pack as many primitives as possibles + // I'm nearly sure GSdx already have this kind of code (maybe we can adapt GSDirtyRect) + size_t nb_vertex; + switch (m_vt.m_primclass) { + case GS_TRIANGLE_CLASS: nb_vertex = 3; break; + case GS_POINT_CLASS: nb_vertex = 1; break; + case GS_SPRITE_CLASS: nb_vertex = (GLLoader::found_geometry_shader) ? 2 : 6; break; + default: nb_vertex = 2; break; + } - om_bsel.wrgba = ~GSVector4i::load((int)context->FRAME.FBMSK).eq8(GSVector4i::xffffffff()).mask(); + GL_PUSH("Split the draw"); - if (DATE && om_bsel.wa && (!context->TEST.ATE || context->TEST.ATST == ATST_ALWAYS)) { - advance_DATE = GLLoader::found_GL_ARB_shader_image_load_store && !UserHacks_AlphaStencil; + GL_PERF("Split single draw in %d draw", m_index.tail/nb_vertex); + + for (size_t p = 0; p < m_index.tail; p += nb_vertex) { + glTextureBarrier(); + dev->DrawIndexedPrimitive(p, nb_vertex); + } + + GL_POP(); } +} - // DATE +void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* tex) +{ + GSDeviceOGL::VSSelector vs_sel; + GSDeviceOGL::GSSelector gs_sel; - if(DATE) - { - // Note at the moment OGL has always stencil. Rt can be disabled - if(dev->HasStencil()) - { - GSVector4 s = GSVector4(rtscale.x / rtsize.x, rtscale.y / rtsize.y); - GSVector4 o = GSVector4(-1.0f, 1.0f); + GSDeviceOGL::PSSelector ps_sel; + GSDeviceOGL::PSSamplerSelector ps_ssel; - GSVector4 src = ((m_vt.m_min.p.xyxy(m_vt.m_max.p) + o.xxyy()) * s.xyxy()).sat(o.zzyy()); - GSVector4 dst = src * 2.0f + o.xxxx(); + GSDeviceOGL::OMColorMaskSelector om_csel; + GSDeviceOGL::OMDepthStencilSelector om_dssel; + + GL_PUSH("GL Draw from %d in %d (Depth %d)", + tex && tex->m_texture ? tex->m_texture->GetID() : 0, + rt ? rt->GetID() : -1, ds ? ds->GetID() : -1); + + GSTexture* hdr_rt = NULL; + + const GSVector2i& rtsize = ds ? ds->GetSize() : rt->GetSize(); + const GSVector2& rtscale = ds ? ds->GetScale() : rt->GetScale(); + + bool DATE = m_context->TEST.DATE && m_context->FRAME.PSM != PSM_PSMCT24; + bool DATE_GL42 = false; + bool DATE_GL45 = false; + + bool require_barrier = false; // For accurate option + + ASSERT(m_dev != NULL); + + GSDeviceOGL* dev = (GSDeviceOGL*)m_dev; + dev->s_n = s_n; + + if ((DATE || m_sw_blending) && GLLoader::found_GL_ARB_texture_barrier && (m_vt.m_primclass == GS_SPRITE_CLASS)) { + // Except 2D games, sprites are often use for special post-processing effect + m_prim_overlap = PrimitiveOverlap(); + } else { + m_prim_overlap = PRIM_OVERLAP_UNKNOW; + } +#ifdef ENABLE_OGL_DEBUG + if (m_sw_blending && (m_prim_overlap != PRIM_OVERLAP_NO) && (m_context->FRAME.Block() == m_context->TEX0.TBP0) && (m_vertex.next > 2)) { + GL_INS("ERROR: Source and Target are the same!"); + } +#endif + + require_barrier |= EmulateTextureShuffleAndFbmask(ps_sel, om_csel); + + // DATE: selection of the algorithm. Must be done before blending because GL42 is not compatible with blending + + if (DATE && GLLoader::found_GL_ARB_texture_barrier) { + if (m_prim_overlap == PRIM_OVERLAP_NO || m_texture_shuffle) { + // It is way too complex to emulate texture shuffle with DATE. So just use + // the slow but accurate algo + require_barrier = true; + DATE_GL45 = true; + DATE = false; + } else if (m_accurate_date && om_csel.wa /* FIXME Check the msb bit of the mask instead + the dfmt*/ + && (!m_context->TEST.ATE || m_context->TEST.ATST == ATST_ALWAYS)) { + // texture barrier will split the draw call into n draw call. It is very efficient for + // few primitive draws. Otherwise it sucks. + if (m_index.tail < 100) { + require_barrier = true; + DATE_GL45 = true; + DATE = false; + } else { + DATE_GL42 = GLLoader::found_GL_ARB_shader_image_load_store; + } + } + } + + // Blend + + if (!IsOpaque() && rt) { + require_barrier |= EmulateBlending(ps_sel, DATE_GL42); + } else { + dev->OMSetBlendState(); // No blending please + } + + if (ps_sel.dfmt == 1) { + // Disable writing of the alpha channel + om_csel.wa = 0; + } + + // DATE (setup part) + + if (DATE) { + GSVector4i dRect = ComputeBoundingBox(rtscale, rtsize); + + // Reduce the quantity of clean function + glScissor( dRect.x, dRect.y, dRect.width(), dRect.height() ); + GLState::scissor = dRect; + + // Must be done here to avoid any GL state pertubation (clear function...) + // Create an r32ui image that will containt primitive ID + if (DATE_GL42) { + dev->InitPrimDateTexture(rt); + } else { + GSVector4 src = GSVector4(dRect) / GSVector4(rtsize.x, rtsize.y).xyxy(); + GSVector4 dst = src * 2.0f - 1.0f; GSVertexPT1 vertices[] = { @@ -247,11 +704,6 @@ dev->SetupDATE(rt, ds, vertices, m_context->TEST.DATM); } - - // Must be done here to avoid any GL state pertubation (clear function...) - // Create an r32ui image that will containt primitive ID - if (advance_DATE) - dev->InitPrimDateTexture(rtsize.x, rtsize.y); } // @@ -260,58 +712,51 @@ // om - GSDeviceOGL::OMDepthStencilSelector om_dssel; - - if(context->TEST.ZTE) + if (m_context->TEST.ZTE) { - om_dssel.ztst = context->TEST.ZTST; - om_dssel.zwe = !context->ZBUF.ZMSK; + om_dssel.ztst = m_context->TEST.ZTST; + om_dssel.zwe = !m_context->ZBUF.ZMSK; } else { om_dssel.ztst = ZTST_ALWAYS; } - if(m_fba) - { - om_dssel.fba = context->FBA.FBA; - } - // vs - GSDeviceOGL::VSSelector vs_sel; - vs_sel.tme = PRIM->TME; vs_sel.fst = PRIM->FST; - vs_sel.logz = m_logz ? 1 : 0; + vs_sel.wildhack = (UserHacks_WildHack && !isPackedUV_HackFlag) ? 1 : 0; // The real GS appears to do no masking based on the Z buffer format and writing larger Z values // than the buffer supports seems to be an error condition on the real GS, causing it to crash. // We are probably receiving bad coordinates from VU1 in these cases. - if(om_dssel.ztst >= ZTST_ALWAYS && om_dssel.zwe) + if (om_dssel.ztst >= ZTST_ALWAYS && om_dssel.zwe) { - if(context->ZBUF.PSM == PSM_PSMZ24) + if (m_context->ZBUF.PSM == PSM_PSMZ24) { - if(m_vt.m_max.p.z > 0xffffff) + if (m_vt.m_max.p.z > 0xffffff) { ASSERT(m_vt.m_min.p.z > 0xffffff); // Fixme :Following conditional fixes some dialog frame in Wild Arms 3, but may not be what was intended. if (m_vt.m_min.p.z > 0xffffff) { + GL_INS("Bad Z size on 24 bits buffers") vs_sel.bppz = 1; om_dssel.ztst = ZTST_ALWAYS; } } } - else if(context->ZBUF.PSM == PSM_PSMZ16 || context->ZBUF.PSM == PSM_PSMZ16S) + else if (m_context->ZBUF.PSM == PSM_PSMZ16 || m_context->ZBUF.PSM == PSM_PSMZ16S) { - if(m_vt.m_max.p.z > 0xffff) + if (m_vt.m_max.p.z > 0xffff) { ASSERT(m_vt.m_min.p.z > 0xffff); // sfex capcom logo // Fixme : Same as above, I guess. if (m_vt.m_min.p.z > 0xffff) { + GL_INS("Bad Z size on 16 bits buffers") vs_sel.bppz = 2; om_dssel.ztst = ZTST_ALWAYS; } @@ -320,12 +765,10 @@ } // FIXME Opengl support half pixel center (as dx10). Code could be easier!!! - GSDeviceOGL::VSConstantBuffer vs_cb; - float sx = 2.0f * rtscale.x / (rtsize.x << 4); float sy = 2.0f * rtscale.y / (rtsize.y << 4); - float ox = (float)(int)context->XYOFFSET.OFX; - float oy = (float)(int)context->XYOFFSET.OFY; + float ox = (float)(int)m_context->XYOFFSET.OFX; + float oy = (float)(int)m_context->XYOFFSET.OFY; float ox2 = -1.0f / rtsize.x; float oy2 = -1.0f / rtsize.y; @@ -335,7 +778,7 @@ //The resulting shifted output aligns better with common blending / corona / blurring effects, //but introduces a few bad pixels on the edges. - if(rt->LikelyOffset) + if (rt && rt->LikelyOffset) { ox2 *= rt->OffsetHack_modx; oy2 *= rt->OffsetHack_mody; @@ -345,224 +788,269 @@ vs_cb.Vertex_Scale_Offset = GSVector4(sx, sy, ox * sx + ox2 + 1, oy * sy + oy2 + 1); // END of FIXME - // ps - - GSDeviceOGL::PSSelector ps_sel; - GSDeviceOGL::PSSamplerSelector ps_ssel; - GSDeviceOGL::PSConstantBuffer ps_cb; - // GS_SPRITE_CLASS are already flat (either by CPU or the GS) ps_sel.iip = (m_vt.m_primclass == GS_SPRITE_CLASS) ? 1 : PRIM->IIP; - if(DATE) - { - om_dssel.date = 1; - if (advance_DATE) - ps_sel.date = 1 + context->TEST.DATM; - } - - if(env.COLCLAMP.CLAMP == 0 && /* hack */ !tex && PRIM->PRIM != GS_POINTLIST) - { - ps_sel.colclip = 1; + if (DATE_GL45) { + ps_sel.date = 5 + m_context->TEST.DATM; + } else if (DATE) { + if (DATE_GL42) + ps_sel.date = 1 + m_context->TEST.DATM; + else + om_dssel.date = 1; } - ps_sel.clr1 = om_bsel.IsCLR1(); - ps_sel.fba = context->FBA.FBA; - ps_sel.aout = context->FRAME.PSM == PSM_PSMCT16 || context->FRAME.PSM == PSM_PSMCT16S || (context->FRAME.FBMSK & 0xff000000) == 0x7f000000 ? 1 : 0; - - if(UserHacks_AlphaHack) ps_sel.aout = 1; + ps_sel.fba = m_context->FBA.FBA; - if(PRIM->FGE) + if (PRIM->FGE) { ps_sel.fog = 1; - ps_cb.FogColor_AREF = GSVector4::rgba32(env.FOGCOL.u32[0]) / 255; + GSVector4 fc = GSVector4::rgba32(m_env.FOGCOL.u32[0]); +#if _M_SSE >= 0x401 + // Blend AREF to avoid to load a random value for alpha (dirty cache) + ps_cb.FogColor_AREF = fc.blend32<8>(ps_cb.FogColor_AREF); +#else + ps_cb.FogColor_AREF = fc; +#endif } - if(context->TEST.ATE) - ps_sel.atst = context->TEST.ATST; + if (m_context->TEST.ATE) + ps_sel.atst = m_context->TEST.ATST; else ps_sel.atst = ATST_ALWAYS; - if (context->TEST.ATE && context->TEST.ATST > 1) - ps_cb.FogColor_AREF.a = (float)context->TEST.AREF; - - // Destination alpha pseudo stencil hack: use a stencil operation combined with an alpha test - // to only draw pixels which would cause the destination alpha test to fail in the future once. - // Unfortunately this also means only drawing those pixels at all, which is why this is a hack. - // The interaction with FBA in D3D9 is probably less than ideal. - if (UserHacks_AlphaStencil && DATE && dev->HasStencil() && om_bsel.wa && (!context->TEST.ATE || context->TEST.ATST == ATST_ALWAYS)) - { - if (!context->FBA.FBA) - { - if (context->TEST.DATM == 0) - ps_sel.atst = ATST_GEQUAL; // >= - else - ps_sel.atst = ATST_LESS; // < - ps_cb.FogColor_AREF.a = (float)0x80; - } - if (!(context->FBA.FBA && context->TEST.DATM == 1)) - om_dssel.alpha_stencil = 1; - } + if (m_context->TEST.ATE && m_context->TEST.ATST > 1) + ps_cb.FogColor_AREF.a = (float)m_context->TEST.AREF; // By default don't use texture ps_sel.tfx = 4; + bool spritehack = false; + int atst = ps_sel.atst; - if(tex) + if (tex) { - const GSLocalMemory::psm_t &psm = GSLocalMemory::m_psm[context->TEX0.PSM]; - const GSLocalMemory::psm_t &cpsm = psm.pal > 0 ? GSLocalMemory::m_psm[context->TEX0.CPSM] : psm; + const GSLocalMemory::psm_t &psm = GSLocalMemory::m_psm[m_context->TEX0.PSM]; + const GSLocalMemory::psm_t &cpsm = psm.pal > 0 ? GSLocalMemory::m_psm[m_context->TEX0.CPSM] : psm; bool bilinear = m_filter == 2 ? m_vt.IsLinear() : m_filter != 0; - bool simple_sample = !tex->m_palette && cpsm.fmt == 0 && context->CLAMP.WMS < 3 && context->CLAMP.WMT < 3; + bool simple_sample = !tex->m_palette && cpsm.fmt == 0 && m_context->CLAMP.WMS < 2 && m_context->CLAMP.WMT < 2; + // Don't force extra filtering on sprite (it creates various upscaling issue) + bilinear &= !((m_vt.m_primclass == GS_SPRITE_CLASS) && m_userhacks_round_sprite_offset && !m_vt.IsLinear()); + + ps_sel.wms = m_context->CLAMP.WMS; + ps_sel.wmt = m_context->CLAMP.WMT; + + // Performance note: + // 1/ Don't set 0 as it is the default value + // 2/ Only keep aem when it is useful (avoid useless shader permutation) + if (ps_sel.shuffle) { + // Force a 32 bits access (normally shuffle is done on 16 bits) + // ps_sel.tex_fmt = 0; // removed as an optimization + ps_sel.aem = m_env.TEXA.AEM; + ASSERT(tex->m_target); + + GSVector4 ta(m_env.TEXA & GSVector4i::x000000ff()); + ps_cb.MinF_TA = ta.xyxy() / 255.0f; + + // FIXME: it is likely a bad idea to do the bilinear interpolation here + // bilinear &= m_vt.IsLinear(); + + } else if (tex->m_target) { + // Use an old target. AEM and index aren't resolved it must be done + // on the GPU + + // Select the 32/24/16 bits color (AEM) + ps_sel.tex_fmt = cpsm.fmt; + ps_sel.aem = m_env.TEXA.AEM; + + GSVector4 ta(m_env.TEXA & GSVector4i::x000000ff()); + ps_cb.MinF_TA = ta.xyxy() / 255.0f; + + // Select the index format + if (tex->m_palette) { + // FIXME Potentially improve fmt field in GSLocalMemory + if (m_context->TEX0.PSM == PSM_PSMT4HL) + ps_sel.tex_fmt |= 1 << 2; + else if (m_context->TEX0.PSM == PSM_PSMT4HH) + ps_sel.tex_fmt |= 2 << 2; + else + ps_sel.tex_fmt |= 3 << 2; + + // Alpha channel of the RT is reinterpreted as an index. Star + // Ocean 3 uses it to emulate a stencil buffer. It is a very + // bad idea to force bilinear filtering on it. + bilinear &= m_vt.IsLinear(); + } + + } else if (tex->m_palette) { + // Use a standard 8 bits texture. AEM is already done on the CLUT + // Therefore you only need to set the index + // ps_sel.aem = 0; // removed as an optimization + + // Note 4 bits indexes are converted to 8 bits + ps_sel.tex_fmt = 3 << 2; + + } else { + // Standard texture. Both index and AEM expansion were already done by the CPU. + // ps_sel.tex_fmt = 0; // removed as an optimization + // ps_sel.aem = 0; // removed as an optimization + } + + if (m_context->TEX0.TFX == TFX_MODULATE && m_vt.m_eq.rgba == 0xFFFF && m_vt.m_min.c.eq(GSVector4i(128))) { + // Micro optimization that reduces GPU load (removes 5 instructions on the FS program) + ps_sel.tfx = TFX_DECAL; + } else { + ps_sel.tfx = m_context->TEX0.TFX; + } + + ps_sel.tcc = m_context->TEX0.TCC; - ps_sel.wms = context->CLAMP.WMS; - ps_sel.wmt = context->CLAMP.WMT; - ps_sel.fmt = tex->m_palette ? cpsm.fmt | 4 : cpsm.fmt; - ps_sel.aem = env.TEXA.AEM; - ps_sel.tfx = context->TEX0.TFX; - ps_sel.tcc = context->TEX0.TCC; ps_sel.ltf = bilinear && !simple_sample; - ps_sel.spritehack = tex->m_spritehack_t; - // FIXME the ati is currently disabled on the shader. I need to find a .gs to test that we got same - // bug on opengl - // FIXME for the moment disable it on subroutine (it will kill my perf for nothings) - ps_sel.point_sampler = !(bilinear && simple_sample) && !GLLoader::found_GL_ARB_shader_subroutine; + spritehack = tex->m_spritehack_t; int w = tex->m_texture->GetWidth(); int h = tex->m_texture->GetHeight(); - int tw = (int)(1 << context->TEX0.TW); - int th = (int)(1 << context->TEX0.TH); + int tw = (int)(1 << m_context->TEX0.TW); + int th = (int)(1 << m_context->TEX0.TH); GSVector4 WH(tw, th, w, h); - if(PRIM->FST) - { - vs_cb.TextureScale = GSVector4(1.0f / 16) / WH.xyxy(); - //Maybe better? - //vs_cb.TextureScale = GSVector4(1.0f / 16) * GSVector4(tex->m_texture->GetScale()).xyxy() / WH.zwzw(); - ps_sel.fst = 1; - } + ps_sel.fst = !!PRIM->FST; ps_cb.WH = WH; ps_cb.HalfTexel = GSVector4(-0.5f, 0.5f).xxyy() / WH.zwzw(); - ps_cb.MskFix = GSVector4i(context->CLAMP.MINU, context->CLAMP.MINV, context->CLAMP.MAXU, context->CLAMP.MAXV); + if ((m_context->CLAMP.WMS | m_context->CLAMP.WMT) > 1) { + ps_cb.MskFix = GSVector4i(m_context->CLAMP.MINU, m_context->CLAMP.MINV, m_context->CLAMP.MAXU, m_context->CLAMP.MAXV); + ps_cb.MinMax = GSVector4(ps_cb.MskFix) / WH.xyxy(); + } // TC Offset Hack ps_sel.tcoffsethack = !!UserHacks_TCOffset; - ps_cb.TC_OffsetHack = GSVector4(UserHacks_TCO_x, UserHacks_TCO_y).xyxy() / WH.xyxy(); + ps_cb.TC_OH_TS = GSVector4(1/16.0f, 1/16.0f, UserHacks_TCO_x, UserHacks_TCO_y) / WH.xyxy(); - GSVector4 clamp(ps_cb.MskFix); - GSVector4 ta(env.TEXA & GSVector4i::x000000ff()); - ps_cb.MinMax = clamp / WH.xyxy(); - ps_cb.MinF_TA = (clamp + 0.5f).xyxy(ta) / WH.xyxy(GSVector4(255, 255)); - - ps_ssel.tau = (context->CLAMP.WMS + 3) >> 1; - ps_ssel.tav = (context->CLAMP.WMT + 3) >> 1; - ps_ssel.ltf = bilinear && simple_sample; + // Only enable clamping in CLAMP mode. REGION_CLAMP will be done manually in the shader + ps_ssel.tau = (m_context->CLAMP.WMS != CLAMP_CLAMP); + ps_ssel.tav = (m_context->CLAMP.WMT != CLAMP_CLAMP); + ps_ssel.ltf = bilinear && simple_sample; + ps_ssel.aniso = simple_sample; // Setup Texture ressources - if (GLLoader::found_GL_ARB_bindless_texture) { - GLuint64 handle[2]; - handle[0] = tex->m_texture ? static_cast(tex->m_texture)->GetHandle(dev->GetSamplerID(ps_ssel)): 0; - handle[1] = tex->m_palette ? static_cast(tex->m_palette)->GetHandle(dev->GetPaletteSamplerID()): 0; - - dev->m_shader->PS_ressources(handle); - } else { - dev->SetupSampler(ps_ssel); + dev->SetupSampler(ps_ssel); + dev->PSSetShaderResources(tex->m_texture, tex->m_palette); - if (tex->m_palette) { - GLuint textures[2] = {static_cast(tex->m_texture)->GetID(), static_cast(tex->m_palette)->GetID()}; - dev->PSSetShaderResources(textures); - } else if (tex->m_texture) { - // Only main texture - dev->PSSetShaderResource(static_cast(tex->m_texture)->GetID()); - } + if (spritehack && (ps_sel.atst == 2)) { + ps_sel.atst = 1; } + } else { +#ifdef ENABLE_OGL_DEBUG + // Unattach texture to avoid noise in debugger + dev->PSSetShaderResources(NULL, NULL); +#endif } + // Always bind the RT. This way special effect can use it. + dev->PSSetShaderResource(3, rt); + + + // GS + +#if 0 + if (m_vt.m_primclass == GS_POINT_CLASS) { + // Upscaling point will create aliasing because point has a size of 0 pixels. + // This code tries to replace point with sprite. So a point in 4x will be replaced by + // a 4x4 sprite. + gs_sel.point = 1; + // FIXME this formula is potentially wrong + GSVector4 point_size = GSVector4(rtscale.x / rtsize.x, rtscale.y / rtsize.y) * 2.0f; + vs_cb.TextureScale = vs_cb.TextureScale.xyxy(point_size); + } +#endif + gs_sel.sprite = m_vt.m_primclass == GS_SPRITE_CLASS; - // WARNING: setup of the program must be done first. So you can setup - // 1/ subroutine uniform - // 2/ bindless texture uniform - // 3/ others uniform? dev->SetupVS(vs_sel); - dev->SetupGS(m_vt.m_primclass == GS_SPRITE_CLASS); + dev->SetupGS(gs_sel); dev->SetupPS(ps_sel); // rs - GSVector4i scissor = GSVector4i(GSVector4(rtscale).xyxy() * context->scissor.in).rintersect(GSVector4i(rtsize).zwxy()); - - dev->OMSetRenderTargets(rt, ds, &scissor); - - uint8 afix = context->ALPHA.FIX; + GSVector4i scissor = GSVector4i(GSVector4(rtscale).xyxy() * m_context->scissor.in).rintersect(GSVector4i(rtsize).zwxy()); + GL_PUSH("IA"); SetupIA(); + GL_POP(); + + dev->OMSetColorMaskState(om_csel); + dev->SetupOM(om_dssel); - dev->SetupOM(om_dssel, om_bsel, afix); dev->SetupCB(&vs_cb, &ps_cb); - if (advance_DATE) { + if (DATE_GL42) { + GL_PUSH("Date GL42"); + // It could be good idea to use stencil in the same time. + // Early stencil test will reduce the number of atomic-load operation + // Create an r32i image that will contain primitive ID // Note: do it at the beginning because the clean will dirty the FBO state //dev->InitPrimDateTexture(rtsize.x, rtsize.y); + // I don't know how much is it legal to mount rt as Texture/RT. No write is done. + // In doubt let's detach RT. + dev->OMSetRenderTargets(NULL, ds, &scissor); + // Don't write anything on the color buffer - dev->OMSetWriteBuffer(GL_NONE); + // Neither in the depth buffer + glDepthMask(false); // Compute primitiveID max that pass the date test - dev->DrawIndexedPrimitive(); + SendDraw(false); // Ask PS to discard shader above the primitiveID max - dev->OMSetWriteBuffer(); + glDepthMask(GLState::depth_mask); ps_sel.date = 3; dev->SetupPS(ps_sel); // Be sure that first pass is finished ! -#ifndef ENABLE_GLES - if (!UserHacks_DateGL4) - dev->Barrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); -#endif - } + dev->Barrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); - if(context->TEST.DoFirstPass()) - { - dev->DrawIndexedPrimitive(); + GL_POP(); + } - if (env.COLCLAMP.CLAMP == 0 && /* hack */ !tex && PRIM->PRIM != GS_POINTLIST) - { - GSDeviceOGL::OMBlendSelector om_bselneg(om_bsel); - GSDeviceOGL::PSSelector ps_selneg(ps_sel); + if (ps_sel.hdr) { + hdr_rt = dev->CreateTexture(rtsize.x, rtsize.y, GL_RGBA32F); - om_bselneg.negative = 1; - ps_selneg.colclip = 2; + dev->CopyRectConv(rt, hdr_rt, ComputeBoundingBox(rtscale, rtsize), false); - dev->SetupOM(om_dssel, om_bselneg, afix); - dev->SetupPS(ps_selneg); + dev->OMSetRenderTargets(hdr_rt, ds, &scissor); + } else { + dev->OMSetRenderTargets(rt, ds, &scissor); + } - dev->DrawIndexedPrimitive(); - dev->SetupOM(om_dssel, om_bsel, afix); - } + if (m_context->TEST.DoFirstPass()) + { + SendDraw(require_barrier); } - if(context->TEST.DoSecondPass()) + if (m_context->TEST.DoSecondPass()) { - ASSERT(!env.PABE.PABE); + ASSERT(!m_env.PABE.PABE); static const uint32 iatst[] = {1, 0, 5, 6, 7, 2, 3, 4}; - ps_sel.atst = iatst[ps_sel.atst]; + ps_sel.atst = iatst[atst]; + if (spritehack && (ps_sel.atst == 2)) { + ps_sel.atst = 1; + } dev->SetupPS(ps_sel); bool z = om_dssel.zwe; - bool r = om_bsel.wr; - bool g = om_bsel.wg; - bool b = om_bsel.wb; - bool a = om_bsel.wa; + bool r = om_csel.wr; + bool g = om_csel.wg; + bool b = om_csel.wb; + bool a = om_csel.wa; - switch(context->TEST.AFAIL) + switch(m_context->TEST.AFAIL) { case AFAIL_KEEP: z = r = g = b = a = false; break; // none case AFAIL_FB_ONLY: z = false; break; // rgba @@ -571,46 +1059,36 @@ default: __assume(0); } - if(z || r || g || b || a) + if (z || r || g || b || a) { om_dssel.zwe = z; - om_bsel.wr = r; - om_bsel.wg = g; - om_bsel.wb = b; - om_bsel.wa = a; - - dev->SetupOM(om_dssel, om_bsel, afix); - - dev->DrawIndexedPrimitive(); - - if (env.COLCLAMP.CLAMP == 0 && /* hack */ !tex && PRIM->PRIM != GS_POINTLIST) - { - GSDeviceOGL::OMBlendSelector om_bselneg(om_bsel); - GSDeviceOGL::PSSelector ps_selneg(ps_sel); - - om_bselneg.negative = 1; - ps_selneg.colclip = 2; + om_csel.wr = r; + om_csel.wg = g; + om_csel.wb = b; + om_csel.wa = a; - dev->SetupOM(om_dssel, om_bselneg, afix); - dev->SetupPS(ps_selneg); + dev->OMSetColorMaskState(om_csel); + dev->SetupOM(om_dssel); - dev->DrawIndexedPrimitive(); - } + SendDraw(require_barrier); } } - if (advance_DATE) + + if (DATE_GL42) { dev->RecycleDateTexture(); + } dev->EndScene(); - if(om_dssel.fba) UpdateFBA(rt); -} + // Warning: EndScene must be called before StretchRect otherwise + // vertices will be overwritten. Trust me you don't want to do that. + if (hdr_rt) { + GSVector4 dRect(ComputeBoundingBox(rtscale, rtsize)); + GSVector4 sRect = dRect / GSVector4(rtsize.x, rtsize.y).xyxy(); + dev->StretchRect(hdr_rt, sRect, rt, dRect, ShaderConvert_MOD_256, false); -void GSRendererOGL::UpdateFBA(GSTexture* rt) -{ -#ifdef ENABLE_GLES -#ifdef _DEBUG - fprintf(stderr, "FIXME UpdateFBA not yet implemented\n"); -#endif -#endif + dev->Recycle(hdr_rt); + } + + GL_POP(); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererOGL.h pcsx2-1.4.0/plugins/GSdx/GSRendererOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererOGL.h 2013-07-28 14:40:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -27,25 +27,41 @@ #include "GSTextureCacheOGL.h" #include "GSVertexHW.h" -// FIXME does it need a GSVertexHWOGL ??? Data order can be easily programmed on opengl (the only potential -// issue is the unsupported praga push/pop -// Note it impact GSVertexTrace.cpp => void GSVertexTrace::Update(const GSVertexHWOGL* v, int count, GS_PRIM_CLASS primclass) class GSRendererOGL : public GSRendererHW -//class GSRendererOGL : public GSRendererHW { + enum PRIM_OVERLAP { + PRIM_OVERLAP_UNKNOW, + PRIM_OVERLAP_YES, + PRIM_OVERLAP_NO + }; + + enum ACC_BLEND { + ACC_BLEND_NONE = 0, + ACC_BLEND_FREE = 1, + ACC_BLEND_SPRITE = 2, + ACC_BLEND_CCLIP_DALPHA = 3, + ACC_BLEND_FULL = 4, + ACC_BLEND_ULTRA = 5 + }; + private: - GSVector2 m_pixelcenter; - bool m_logz; - bool m_fba; - bool UserHacks_AlphaHack; - bool UserHacks_AlphaStencil; - bool UserHacks_DateGL4; + bool m_accurate_date; + int m_sw_blending; + PRIM_OVERLAP m_prim_overlap; + unsigned int UserHacks_TCOffset; float UserHacks_TCO_x, UserHacks_TCO_y; + GSDeviceOGL::VSConstantBuffer vs_cb; + GSDeviceOGL::PSConstantBuffer ps_cb; + + GSVector4i ComputeBoundingBox(const GSVector2& rtscale, const GSVector2i& rtsize); + protected: void EmulateGS(); void SetupIA(); + bool EmulateTextureShuffleAndFbmask(GSDeviceOGL::PSSelector& ps_sel, GSDeviceOGL::OMColorMaskSelector& om_csel); + bool EmulateBlending(GSDeviceOGL::PSSelector& ps_sel, bool DATE_GL42); public: GSRendererOGL(); @@ -53,7 +69,9 @@ bool CreateDevice(GSDevice* dev); - void UpdateFBA(GSTexture* rt); - void DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Source* tex); + + PRIM_OVERLAP PrimitiveOverlap(); + + void SendDraw(bool require_barrier); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererSW.cpp pcsx2-1.4.0/plugins/GSdx/GSRendererSW.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSRendererSW.cpp 2014-09-15 13:49:16.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSRendererSW.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -252,9 +252,9 @@ if(s_dump) { - if(s_save && s_n >= s_saven) + if(s_savef && s_n >= s_saven) { - m_texture[i]->Save(format("c:\\temp1\\_%05d_f%lld_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)DISPFB.Block(), (int)DISPFB.PSM)); + m_texture[i]->Save(root_sw + format("%05d_f%lld_fr%d_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), i, (int)DISPFB.Block(), (int)DISPFB.PSM)); } s_n++; @@ -335,7 +335,7 @@ #else - GSVector4i o = (GSVector4i)m_context->XYOFFSET; + GSVector4i off = (GSVector4i)m_context->XYOFFSET; GSVector4 tsize = GSVector4(0x10000 << m_context->TEX0.TW, 0x10000 << m_context->TEX0.TH, 1, 0); for(int i = (int)m_vertex.next; i > 0; i--, src++, dst++) @@ -346,14 +346,14 @@ GSVector4i xyzuvf(src->m[1]); - GSVector4i xy = xyzuvf.upl16() - o; + GSVector4i xy = xyzuvf.upl16() - off; GSVector4i zf = xyzuvf.ywww().min_u32(GSVector4i::xffffff00()); #else uint32 z = src->XYZ.Z; - GSVector4i xy = GSVector4i::load((int)src->XYZ.u32[0]).upl16() - o; + GSVector4i xy = GSVector4i::load((int)src->XYZ.u32[0]).upl16() - off; GSVector4i zf = GSVector4i((int)std::min(z, 0xffffff00), src->FOG); // NOTE: larger values of z may roll over to 0 when converting back to uint32 later #endif @@ -446,7 +446,11 @@ sd->bbox = bbox; sd->frame = m_perfmon.GetFrame(); - if(!GetScanlineGlobalData(sd)) return; + if(!GetScanlineGlobalData(sd)) + { + s_n += 3; // Keep it sync with HW renderer + return; + } if(0) if(LOG) { @@ -512,30 +516,53 @@ Sync(2); uint64 frame = m_perfmon.GetFrame(); + // Dump the texture in 32 bits format. It helps to debug texture shuffle effect + // It will breaks the few games that really uses 16 bits RT + bool texture_shuffle = ((context->FRAME.PSM & 0x2) && ((context->TEX0.PSM & 3) == 2) && (m_vt.m_primclass == GS_SPRITE_CLASS)); string s; - if(s_save && s_n >= s_saven && PRIM->TME) + if(s_n >= s_saven) + { + // Dump Register state + s = format("%05d_context.txt", s_n); + + m_env.Dump(root_sw+s); + m_context->Dump(root_sw+s); + } + + if(s_savet && s_n >= s_saven && PRIM->TME) { - s = format("c:\\temp1\\_%05d_f%lld_tex_%05x_%d.bmp", s_n, frame, (int)m_context->TEX0.TBP0, (int)m_context->TEX0.PSM); + if (texture_shuffle) { + // Dump the RT in 32 bits format. It helps to debug texture shuffle effect + s = format("%05d_f%lld_tex_%05x_32bits.bmp", s_n, frame, (int)m_context->TEX0.TBP0); + m_mem.SaveBMP(root_sw+s, m_context->TEX0.TBP0, m_context->TEX0.TBW, 0, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH); + } - m_mem.SaveBMP(s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH); + s = format("%05d_f%lld_tex_%05x_%d.bmp", s_n, frame, (int)m_context->TEX0.TBP0, (int)m_context->TEX0.PSM); + m_mem.SaveBMP(root_sw+s, m_context->TEX0.TBP0, m_context->TEX0.TBW, m_context->TEX0.PSM, 1 << m_context->TEX0.TW, 1 << m_context->TEX0.TH); } s_n++; if(s_save && s_n >= s_saven) { - s = format("c:\\temp1\\_%05d_f%lld_rt0_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM); - m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); + if (texture_shuffle) { + // Dump the RT in 32 bits format. It helps to debug texture shuffle effect + s = format("%05d_f%lld_rt0_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block()); + m_mem.SaveBMP(root_sw+s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512); + } + + s = format("%05d_f%lld_rt0_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM); + m_mem.SaveBMP(root_sw+s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); } if(s_savez && s_n >= s_saven) { - s = format("c:\\temp1\\_%05d_f%lld_rz0_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM); + s = format("%05d_f%lld_rz0_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM); - m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); + m_mem.SaveBMP(root_sw+s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); } s_n++; @@ -546,19 +573,29 @@ if(s_save && s_n >= s_saven) { - s = format("c:\\temp1\\_%05d_f%lld_rt1_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM); + if (texture_shuffle) { + // Dump the RT in 32 bits format. It helps to debug texture shuffle effect + s = format("%05d_f%lld_rt1_%05x_32bits.bmp", s_n, frame, m_context->FRAME.Block()); + m_mem.SaveBMP(root_sw+s, m_context->FRAME.Block(), m_context->FRAME.FBW, 0, GetFrameRect().width(), 512); + } - m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); + s = format("%05d_f%lld_rt1_%05x_%d.bmp", s_n, frame, m_context->FRAME.Block(), m_context->FRAME.PSM); + m_mem.SaveBMP(root_sw+s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); } if(s_savez && s_n >= s_saven) { - s = format("c:\\temp1\\_%05d_f%lld_rz1_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM); + s = format("%05d_f%lld_rz1_%05x_%d.bmp", s_n, frame, m_context->ZBUF.Block(), m_context->ZBUF.PSM); - m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); + m_mem.SaveBMP(root_sw+s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); } s_n++; + + if(s_savel > 0 && (s_n - s_saven) > s_savel) + { + s_dump = 0; + } } else { @@ -642,16 +679,16 @@ if(s_save) { - s = format("c:\\temp1\\_%05d_f%lld_rt1_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), m_context->FRAME.Block(), m_context->FRAME.PSM); + s = format("%05d_f%lld_rt1_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), m_context->FRAME.Block(), m_context->FRAME.PSM); - m_mem.SaveBMP(s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); + m_mem.SaveBMP(root_sw+s, m_context->FRAME.Block(), m_context->FRAME.FBW, m_context->FRAME.PSM, GetFrameRect().width(), 512); } if(s_savez) { - s = format("c:\\temp1\\_%05d_f%lld_zb1_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), m_context->ZBUF.Block(), m_context->ZBUF.PSM); + s = format("%05d_f%lld_zb1_%05x_%d.bmp", s_n, m_perfmon.GetFrame(), m_context->ZBUF.Block(), m_context->ZBUF.PSM); - m_mem.SaveBMP(s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); + m_mem.SaveBMP(root_sw+s, m_context->ZBUF.Block(), m_context->FRAME.FBW, m_context->ZBUF.PSM, GetFrameRect().width(), 512); } } @@ -668,9 +705,9 @@ { if(LOG) {fprintf(s_fp, "w %05x %d %d, %d %d %d %d\n", BITBLTBUF.DBP, BITBLTBUF.DBW, BITBLTBUF.DPSM, r.x, r.y, r.z, r.w); fflush(s_fp);} - GSOffset* o = m_mem.GetOffset(BITBLTBUF.DBP, BITBLTBUF.DBW, BITBLTBUF.DPSM); + GSOffset* off = m_mem.GetOffset(BITBLTBUF.DBP, BITBLTBUF.DBW, BITBLTBUF.DPSM); - o->GetPages(r, m_tmp_pages); + off->GetPages(r, m_tmp_pages); // check if the changing pages either used as a texture or a target @@ -687,7 +724,7 @@ } } - m_tc->InvalidatePages(m_tmp_pages, o->psm); // if texture update runs on a thread and Sync(5) happens then this must come later + m_tc->InvalidatePages(m_tmp_pages, off->psm); // if texture update runs on a thread and Sync(5) happens then this must come later } void GSRendererSW::InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool clut) @@ -696,9 +733,9 @@ if(!m_rl->IsSynced()) { - GSOffset* o = m_mem.GetOffset(BITBLTBUF.SBP, BITBLTBUF.SBW, BITBLTBUF.SPSM); + GSOffset* off = m_mem.GetOffset(BITBLTBUF.SBP, BITBLTBUF.SBW, BITBLTBUF.SPSM); - o->GetPages(r, m_tmp_pages); + off->GetPages(r, m_tmp_pages); for(uint32* RESTRICT p = m_tmp_pages; *p != GSOffset::EOP; p++) { @@ -1076,19 +1113,23 @@ gd.sel.tfx = TFX_DECAL; } - GSTextureCacheSW::Texture* t = m_tc->Lookup(context->TEX0, env.TEXA); + bool mipmap = IsMipMapActive(); - if(t == NULL) {ASSERT(0); return false;} + GIFRegTEX0 TEX0 = m_context->GetSizeFixedTEX0(m_vt.m_min.t.xyxy(m_vt.m_max.t), m_vt.IsLinear(), mipmap); GSVector4i r; - GetTextureMinMax(r, context->TEX0, context->CLAMP, gd.sel.ltf); + GetTextureMinMax(r, TEX0, context->CLAMP, gd.sel.ltf); + + GSTextureCacheSW::Texture* t = m_tc->Lookup(TEX0, env.TEXA); + + if(t == NULL) {ASSERT(0); return false;} data->SetSource(t, r, 0); gd.sel.tw = t->m_tw - 3; - if(m_mipmap && context->TEX1.MXL > 0 && context->TEX1.MMIN >= 2 && context->TEX1.MMIN <= 5 && m_vt.m_lod.y > 0) + if(mipmap) { // TEX1.MMIN // 000 p @@ -1155,7 +1196,7 @@ gd.k = GSVector4((float)k); } - GIFRegTEX0 MIP_TEX0 = context->TEX0; + GIFRegTEX0 MIP_TEX0 = TEX0; GIFRegCLAMP MIP_CLAMP = context->CLAMP; GSVector4 tmin = m_vt.m_min.t; @@ -1284,8 +1325,8 @@ } } - uint16 tw = 1u << context->TEX0.TW; - uint16 th = 1u << context->TEX0.TH; + uint16 tw = 1u << TEX0.TW; + uint16 th = 1u << TEX0.TH; switch(context->CLAMP.WMS) { @@ -1407,7 +1448,7 @@ { gd.sel.zpsm = GSLocalMemory::m_psm[context->ZBUF.PSM].fmt; gd.sel.ztst = ztest ? context->TEST.ZTST : ZTST_ALWAYS; - gd.sel.zoverflow = GSVector4i(m_vt.m_max.p).z == 0x80000000; + gd.sel.zoverflow = (uint32)GSVector4i(m_vt.m_max.p).z == 0x80000000U; } #if _M_SSE >= 0x501 @@ -1492,6 +1533,8 @@ : m_parent(parent) , m_fb_pages(NULL) , m_zb_pages(NULL) + , m_fpsm(0) + , m_zpsm(0) , m_using_pages(false) , m_syncpoint(SyncNone) { @@ -1519,7 +1562,7 @@ fflush(s_fp);} } -static TransactionScope::Lock s_lock; +//static TransactionScope::Lock s_lock; void GSRendererSW::SharedData::UsePages(const uint32* fb_pages, int fpsm, const uint32* zb_pages, int zpsm) { @@ -1528,12 +1571,12 @@ { //TransactionScope scope(s_lock); - if(global.sel.fb) + if(global.sel.fb && fb_pages != NULL) { m_parent->UsePages(fb_pages, 0); } - if(global.sel.zb) + if(global.sel.zb && zb_pages != NULL) { m_parent->UsePages(zb_pages, 1); } @@ -1618,13 +1661,13 @@ string s; - if(m_parent->s_save && m_parent->s_n >= m_parent->s_saven) + if(m_parent->s_savet && m_parent->s_n >= m_parent->s_saven) { for(size_t i = 0; m_tex[i].t != NULL; i++) { - s = format("c:\\temp1\\_%05d_f%lld_tex%d_%05x_%d.bmp", m_parent->s_n - 2, frame, i, (int)m_parent->m_context->TEX0.TBP0, (int)m_parent->m_context->TEX0.PSM); + s = format("%05d_f%lld_tex%d_%05x_%d.bmp", m_parent->s_n - 2, frame, i, (int)m_parent->m_context->TEX0.TBP0, (int)m_parent->m_context->TEX0.PSM); - m_tex[i].t->Save(s); + m_tex[i].t->Save(root_sw+s); } if(global.clut != NULL) @@ -1633,9 +1676,9 @@ t->Update(GSVector4i(0, 0, 256, 1), global.clut, sizeof(uint32) * 256); - s = format("c:\\temp1\\_%05d_f%lld_texp_%05x_%d.bmp", m_parent->s_n - 2, frame, (int)m_parent->m_context->TEX0.TBP0, (int)m_parent->m_context->TEX0.PSM); + s = format("%05d_f%lld_texp_%05x_%d.bmp", m_parent->s_n - 2, frame, (int)m_parent->m_context->TEX0.TBP0, (int)m_parent->m_context->TEX0.PSM); - t->Save(s); + t->Save(root_sw+s); delete t; } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetting.cpp pcsx2-1.4.0/plugins/GSdx/GSSetting.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetting.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSetting.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 Gabest + * Copyright (C) 2007-2015 Gabest * http://www.gabest.org * * This Program is free software; you can redistribute it and/or modify @@ -21,4 +21,117 @@ #include "stdafx.h" #include "GSSetting.h" +#ifndef __linux__ +#include "resource.h" +#endif +const char* dialog_message(int ID, bool* updateText) { + if (updateText) + *updateText = true; + switch (ID) + { + case IDC_FILTER: + return "Control the texture bilinear filtering of the emulation.\n\n" + "Nearest:\nAlways disable interpolation, rendering will be blocky.\n\n" + "PS2:\nUse same mode as the PS2. It is the more accurate option.\n\n" + "Forced:\nAlways enable interpolation. Rendering is smoother but it could generate some glitches."; + case IDC_CRC_LEVEL: + return "Control the number of Auto-CRC hacks applied to games.\n\n" + "None:\nRemove nearly all CRC hacks (debug only).\n\n" + "Minimum:\nEnable a couple of CRC hacks (23).\n\n" + "Partial:\nEnable most of the CRC hacks.\nRecommended OpenGL setting (Accurate/depth options may be required).\n\n" + "Full:\nEnable all CRC hacks.\nRecommended Direct3D setting.\n\n" + "Aggressive:\nUse more aggressive CRC hacks. Only affects a few games, removing some effects which might make the image sharper/clearer.\n" + "Affected games: FFX, FFX2, FFXII, GOW2, ICO, SoTC, SSX3, SMT3, SMTDDS1, SMTDDS2.\n" + "Works as a speedhack for: Steambot Chronicles."; + case IDC_SKIPDRAWHACK: + case IDC_SKIPDRAWHACKEDIT: + return "Skips drawing n surfaces completely. " + "Use it, for example, to try and get rid of bad post processing effects." + " Try values between 1 and 100."; + case IDC_ALPHAHACK: + return "Different alpha handling. Can work around some shadow problems."; + case IDC_OFFSETHACK: + return "Might fix some misaligned fog, bloom, or blend effect."; + case IDC_SPRITEHACK: + return "Helps getting rid of black inner lines in some filtered sprites." + " Half option is the preferred one. Use it for Mana Khemia or Ar tonelico for example." + " Full can be used for Tales of Destiny."; + case IDC_WILDHACK: + return "Lowers the GS precision to avoid gaps between pixels when upscaling. Fixes the text on Wild Arms games."; + case IDC_MSAACB: + return "Enables hardware Anti-Aliasing. Needs lots of memory." + " The Z-24 modes might need to have LogarithmicZ to compensate for the bits lost (only in DX9 mode).\n\n" + " MSAA is not implemented on the OpenGL renderer."; + case IDC_ALPHASTENCIL: + return "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n" + "Improves many shadows which are normally overdrawn in parts, may affect other effects.\n" + "Will disable partial transparency in some games or even prevent drawing some elements altogether."; + case IDC_CHECK_DISABLE_ALL_HACKS: + return "FOR TESTING ONLY!!\n\n" + "Disable all CRC hacks - will break many games. Overrides CrcHacksExclusion at gsdx.ini\n" + "\n" + "It's possible to exclude CRC hacks also via the gsdx.ini. E.g.:\n" + "CrcHacksExclusions=all\n" + "CrcHacksExclusions=0x0F0C4A9C, 0x0EE5646B, 0x7ACF7E03"; + case IDC_ALIGN_SPRITE: + return "Fixes issues with upscaling(vertical lines) in Namco games like Ace Combat, Tekken, Soul Calibur, etc."; + case IDC_ROUND_SPRITE: + return "Corrects the sampling of 2D sprite textures when upscaling.\n\n" + "Fixes lines in sprites of games like Ar tonelico when upscaling.\n\n" + "Half option is for flat sprites, Full is for all sprites."; + case IDC_TCOFFSETX: + case IDC_TCOFFSETX2: + case IDC_TCOFFSETY: + case IDC_TCOFFSETY2: + return "Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment too.\n\n" + " 0500 0500, fixes Persona 3 minimap, helps Haunting Ground.\n" + " 0000 1000, fixes Xenosaga hair edges (DX10+ Issue)"; + case IDC_PALTEX: + return "When checked 4/8 bits texture will be send to the GPU with a palette. GPU will be in charge of the conversion.\n\n" + "When unchecked the CPU will convert directly the texture to 32 bits.\n\n" + "It is basically a trade-off between GPU/CPU."; + case IDC_ACCURATE_DATE: + return "Implement a more accurate algorithm to compute GS destination alpha testing.\n\n" + "It could be slower when the effects are used.\n\nNote: it requires the OpenGL 4.2 extension GL_ARB_shader_image_load_store."; + case IDC_ACCURATE_BLEND_UNIT: + return "Control the accuracy level of the GS blending unit emulation. Note: it requires OpenGL 4.5 driver support.\n\n" + "None:\nFast but introduce various rendering issues. It is intended for slow computer.\n\n" + "Basic:\nEmulate correctly most of the effects with a limited speed penalty. It is the recommended setting.\n\n" + "Medium:\nExtend it to all sprites. Performance impact remains reasonable in 3D game.\n\n" + "High:\nExtend it to destination alpha blending and color wrapping. (help shadow and fog effect). A good CPU is required.\n\n" + "Full:\nExcept few cases, the blending unit will be fully emulated by the shader. It is ultra slow! It is intended for debug.\n\n" + "Ultra:\nThe blending unit will be completely emulated by the shader. It is ultra slow! It is intended for debug."; + case IDC_TC_DEPTH: + return "Allows the conversion of Depth buffer from/to Color buffer. It is used for blur & depth of field effects"; + case IDC_AFCOMBO: + return "Reduces texture aliasing at extreme viewing angles. High performance impact."; + case IDC_AA1: + return "Internal GS feature. Reduces edge aliasing of lines and triangles when the game requests it."; + case IDC_SWTHREADS: + case IDC_SWTHREADS_EDIT: + return "Number of rendering threads: 0 for single thread, 2 or more for multithread (1 is for debugging)"; + case IDC_SHADEBOOST: + return "Allows brightness, contrast and saturation to be manually adjusted."; + case IDC_SHADER_FX: + return "Enables external shader for additional post-processing effects."; + case IDC_FXAA: + return "Enables fast approximate anti-aliasing. Small performance impact."; +#ifdef _WIN32 + // DX9 only + case IDC_FBA: + return "Makes textures partially or fully transparent as required by emulation. May cause unusual slowdowns for some games."; + case IDC_LOGZ: + return "Treat depth as logarithmic instead of linear. Recommended setting is on unless it causes graphical glitches."; +#endif + // Exclusive for Hardware Renderer + case IDC_PRELOAD_GS: + return "Uploads GS data when rendering a new frame to reproduce some effects accurately. Fixes black screen issues in games like Armored Core: Last Raven."; + case IDC_MIPMAP: + return "Enables mipmapping, which some games require to render correctly. Turn off only for debug purposes."; + default: + if (updateText) + *updateText = false; + return ""; + } +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetting.h pcsx2-1.4.0/plugins/GSdx/GSSetting.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetting.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSetting.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 Gabest + * Copyright (C) 2007-2015 Gabest * http://www.gabest.org * * This Program is free software; you can redistribute it and/or modify @@ -37,3 +37,40 @@ this->note = note; } }; + +const char* dialog_message(int ID, bool* updateText = NULL); + +#ifdef __linux__ +enum { + IDC_FILTER, + IDC_SKIPDRAWHACK, + IDC_SKIPDRAWHACKEDIT, + IDC_ALPHAHACK, + IDC_OFFSETHACK, + IDC_SPRITEHACK, + IDC_WILDHACK, + IDC_MSAACB, + IDC_ALPHASTENCIL, + IDC_CHECK_DISABLE_ALL_HACKS, + IDC_ALIGN_SPRITE, + IDC_ROUND_SPRITE, + IDC_TCOFFSETX, + IDC_TCOFFSETX2, + IDC_TCOFFSETY, + IDC_TCOFFSETY2, + IDC_PALTEX, + IDC_ACCURATE_BLEND_UNIT, + IDC_ACCURATE_DATE, + IDC_TC_DEPTH, + IDC_CRC_LEVEL, + IDC_AFCOMBO, + IDC_AA1, + IDC_SWTHREADS, + IDC_SWTHREADS_EDIT, + IDC_SHADEBOOST, + IDC_SHADER_FX, + IDC_FXAA, + IDC_MIPMAP, + IDC_PRELOAD_GS +}; +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSettingsDlg.cpp pcsx2-1.4.0/plugins/GSdx/GSSettingsDlg.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSettingsDlg.cpp 2015-01-16 08:38:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSettingsDlg.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 Gabest + * Copyright (C) 2007-2015 Gabest * http://www.gabest.org * * This Program is free software; you can redistribute it and/or modify @@ -26,10 +26,12 @@ #include "GSDevice9.h" #include "GSDevice11.h" #include "resource.h" +#include "GSSetting.h" -GSSettingsDlg::GSSettingsDlg(bool isOpen2) - : GSDialog(isOpen2 ? IDD_CONFIG2 : IDD_CONFIG) - , m_IsOpen2(isOpen2) + +GSSettingsDlg::GSSettingsDlg() + : GSDialog(IDD_CONFIG) + { #ifdef ENABLE_OPENCL list ocldevs; @@ -49,8 +51,6 @@ { __super::OnInit(); - m_modes.clear(); - CComPtr d3d9; d3d9.Attach(Direct3DCreate9(D3D_SDK_VERSION)); @@ -61,39 +61,7 @@ { CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&dxgi_factory); } - - if(!m_IsOpen2) - { - D3DDISPLAYMODE mode; - memset(&mode, 0, sizeof(mode)); - m_modes.push_back(mode); - - ComboBoxAppend(IDC_RESOLUTION, "Please select...", (LPARAM)&m_modes.back(), true); - - if(d3d9) - { - uint32 w = theApp.GetConfig("ModeWidth", 0); - uint32 h = theApp.GetConfig("ModeHeight", 0); - uint32 hz = theApp.GetConfig("ModeRefreshRate", 0); - - uint32 n = d3d9->GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_R5G6B5); - - for(uint32 i = 0; i < n; i++) - { - if(S_OK == d3d9->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_R5G6B5, i, &mode)) - { - m_modes.push_back(mode); - - string str = format("%dx%d %dHz", mode.Width, mode.Height, mode.RefreshRate); - - ComboBoxAppend(IDC_RESOLUTION, str.c_str(), (LPARAM)&m_modes.back(), w == mode.Width && h == mode.Height && hz == mode.RefreshRate); - } - } - } - } - - adapters.clear(); - + adapters.clear(); adapters.push_back(Adapter("Default Hardware Device", "default", GSUtil::CheckDirect3D11Level(NULL, D3D_DRIVER_TYPE_HARDWARE))); adapters.push_back(Adapter("Reference Device", "ref", GSUtil::CheckDirect3D11Level(NULL, D3D_DRIVER_TYPE_REFERENCE))); @@ -177,35 +145,25 @@ ComboBoxInit(IDC_ADAPTER, adapter_settings, adapter_sel); ComboBoxInit(IDC_OPENCL_DEVICE, m_ocl_devs, ocl_sel); - UpdateRenderers(); - + ComboBoxInit(IDC_INTERLACE, theApp.m_gs_interlace, theApp.GetConfig("Interlace", 7)); // 7 = "auto", detects interlace based on SMODE2 register - ComboBoxInit(IDC_ASPECTRATIO, theApp.m_gs_aspectratio, theApp.GetConfig("AspectRatio", 1)); ComboBoxInit(IDC_UPSCALE_MULTIPLIER, theApp.m_gs_upscale_multiplier, theApp.GetConfig("upscale_multiplier", 1)); ComboBoxInit(IDC_AFCOMBO, theApp.m_gs_max_anisotropy, theApp.GetConfig("MaxAnisotropy", 0)); + ComboBoxInit(IDC_FILTER, theApp.m_gs_filter, theApp.GetConfig("filter", 2)); + ComboBoxInit(IDC_ACCURATE_BLEND_UNIT, theApp.m_gs_acc_blend_level, theApp.GetConfig("accurate_blending_unit", 1)); + ComboBoxInit(IDC_CRC_LEVEL, theApp.m_gs_crc_level, theApp.GetConfig("crc_hack_level", 3)); - CheckDlgButton(m_hWnd, IDC_WINDOWED, theApp.GetConfig("windowed", 1)); - CheckDlgButton(m_hWnd, IDC_FILTER, theApp.GetConfig("filter", 2)); CheckDlgButton(m_hWnd, IDC_PALTEX, theApp.GetConfig("paltex", 0)); CheckDlgButton(m_hWnd, IDC_LOGZ, theApp.GetConfig("logz", 1)); CheckDlgButton(m_hWnd, IDC_FBA, theApp.GetConfig("fba", 1)); CheckDlgButton(m_hWnd, IDC_AA1, theApp.GetConfig("aa1", 0)); - CheckDlgButton(m_hWnd, IDC_NATIVERES, theApp.GetConfig("nativeres", 1)); - CheckDlgButton(m_hWnd, IDC_ANISOTROPIC, theApp.GetConfig("AnisotropicFiltering", 0)); - - // Shade Boost - CheckDlgButton(m_hWnd, IDC_SHADEBOOST, theApp.GetConfig("ShadeBoost", 0)); - - // FXAA shader - CheckDlgButton(m_hWnd, IDC_FXAA, theApp.GetConfig("Fxaa", 0)); - - // External FX shader - CheckDlgButton(m_hWnd, IDC_SHADER_FX, theApp.GetConfig("shaderfx", 0)); + CheckDlgButton(m_hWnd, IDC_MIPMAP, theApp.GetConfig("mipmap", 1)); + CheckDlgButton(m_hWnd, IDC_ACCURATE_DATE, theApp.GetConfig("accurate_date", 0)); + CheckDlgButton(m_hWnd, IDC_TC_DEPTH, theApp.GetConfig("texture_cache_depth", 0)); // Hacks CheckDlgButton(m_hWnd, IDC_HACKS_ENABLED, theApp.GetConfig("UserHacks", 0)); - SendMessage(GetDlgItem(m_hWnd, IDC_RESX), UDM_SETRANGE, 0, MAKELPARAM(8192, 256)); SendMessage(GetDlgItem(m_hWnd, IDC_RESX), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("resx", 1024), 0)); @@ -213,9 +171,22 @@ SendMessage(GetDlgItem(m_hWnd, IDC_RESY), UDM_SETRANGE, 0, MAKELPARAM(8192, 256)); SendMessage(GetDlgItem(m_hWnd, IDC_RESY), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("resy", 1024), 0)); - SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETRANGE, 0, MAKELPARAM(16, 0)); - SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("extrathreads", 0), 0)); + SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("extrathreads", DEFAULT_EXTRA_RENDERING_THREADS), 0)); + + AddTooltip(IDC_FILTER); + AddTooltip(IDC_CRC_LEVEL); + AddTooltip(IDC_PALTEX); + AddTooltip(IDC_ACCURATE_DATE); + AddTooltip(IDC_ACCURATE_BLEND_UNIT); + AddTooltip(IDC_TC_DEPTH); + AddTooltip(IDC_AFCOMBO); + AddTooltip(IDC_AA1); + AddTooltip(IDC_MIPMAP); + AddTooltip(IDC_SWTHREADS); + AddTooltip(IDC_SWTHREADS_EDIT); + AddTooltip(IDC_FBA); + AddTooltip(IDC_LOGZ); UpdateControls(); } @@ -233,26 +204,18 @@ break; case IDC_RENDERER: case IDC_UPSCALE_MULTIPLIER: - if (code == CBN_SELCHANGE) - UpdateControls(); - break; - case IDC_NATIVERES: - case IDC_SHADEBOOST: case IDC_FILTER: - if (code == BN_CLICKED) - UpdateControls(); - break; - case IDC_ANISOTROPIC: - if (code == BN_CLICKED) + if (code == CBN_SELCHANGE) UpdateControls(); break; + case IDC_PALTEX: case IDC_HACKS_ENABLED: if (code == BN_CLICKED) UpdateControls(); break; case IDC_SHADEBUTTON: if (code == BN_CLICKED) - ShadeBoostDlg.DoModal(); + ShaderDlg.DoModal(); break; case IDC_HACKSBUTTON: if (code == BN_CLICKED) @@ -274,15 +237,6 @@ } } - if(!m_IsOpen2 && ComboBoxGetSelData(IDC_RESOLUTION, data)) - { - const D3DDISPLAYMODE* mode = (D3DDISPLAYMODE*)data; - - theApp.SetConfig("ModeWidth", (int)mode->Width); - theApp.SetConfig("ModeHeight", (int)mode->Height); - theApp.SetConfig("ModeRefreshRate", (int)mode->RefreshRate); - } - if(ComboBoxGetSelData(IDC_RENDERER, data)) { theApp.SetConfig("Renderer", (int)data); @@ -293,11 +247,6 @@ theApp.SetConfig("Interlace", (int)data); } - if(ComboBoxGetSelData(IDC_ASPECTRATIO, data)) - { - theApp.SetConfig("AspectRatio", (int)data); - } - if(ComboBoxGetSelData(IDC_UPSCALE_MULTIPLIER, data)) { theApp.SetConfig("upscale_multiplier", (int)data); @@ -307,40 +256,36 @@ theApp.SetConfig("upscale_multiplier", 1); } - if(ComboBoxGetSelData(IDC_AFCOMBO, data)) + if (ComboBoxGetSelData(IDC_FILTER, data)) { - theApp.SetConfig("MaxAnisotropy", (int)data); + theApp.SetConfig("filter", (int)data); + } + + if(ComboBoxGetSelData(IDC_ACCURATE_BLEND_UNIT, data)) + { + theApp.SetConfig("accurate_blending_unit", (int)data); + } + + if (ComboBoxGetSelData(IDC_CRC_LEVEL, data)) + { + theApp.SetConfig("crc_hack_level", (int)data); } - if(GetId() == IDD_CONFIG) // TODO: other options may not be present in IDD_CONFIG2 as well + if(ComboBoxGetSelData(IDC_AFCOMBO, data)) { - theApp.SetConfig("windowed", (int)IsDlgButtonChecked(m_hWnd, IDC_WINDOWED)); + theApp.SetConfig("MaxAnisotropy", (int)data); } - theApp.SetConfig("filter", (int)IsDlgButtonChecked(m_hWnd, IDC_FILTER)); theApp.SetConfig("paltex", (int)IsDlgButtonChecked(m_hWnd, IDC_PALTEX)); theApp.SetConfig("logz", (int)IsDlgButtonChecked(m_hWnd, IDC_LOGZ)); theApp.SetConfig("fba", (int)IsDlgButtonChecked(m_hWnd, IDC_FBA)); theApp.SetConfig("aa1", (int)IsDlgButtonChecked(m_hWnd, IDC_AA1)); - theApp.SetConfig("nativeres", (int)IsDlgButtonChecked(m_hWnd, IDC_NATIVERES)); + theApp.SetConfig("mipmap", (int)IsDlgButtonChecked(m_hWnd, IDC_MIPMAP)); theApp.SetConfig("resx", (int)SendMessage(GetDlgItem(m_hWnd, IDC_RESX), UDM_GETPOS, 0, 0)); theApp.SetConfig("resy", (int)SendMessage(GetDlgItem(m_hWnd, IDC_RESY), UDM_GETPOS, 0, 0)); theApp.SetConfig("extrathreads", (int)SendMessage(GetDlgItem(m_hWnd, IDC_SWTHREADS), UDM_GETPOS, 0, 0)); - theApp.SetConfig("AnisotropicFiltering", (int)IsDlgButtonChecked(m_hWnd, IDC_ANISOTROPIC)); - - // Shade Boost - theApp.SetConfig("ShadeBoost", (int)IsDlgButtonChecked(m_hWnd, IDC_SHADEBOOST)); - - // FXAA shader - theApp.SetConfig("Fxaa", (int)IsDlgButtonChecked(m_hWnd, IDC_FXAA)); - - // External FX Shader - theApp.SetConfig("shaderfx", (int)IsDlgButtonChecked(m_hWnd, IDC_SHADER_FX)); - - // External FX Shader(OpenGL) - theApp.SetConfig("shaderfx_conf", "shaders/GSdx_FX_Settings.ini"); - theApp.SetConfig("shaderfx_glsl", "shaders/GSdx.fx"); - + theApp.SetConfig("accurate_date", (int)IsDlgButtonChecked(m_hWnd, IDC_ACCURATE_DATE)); + theApp.SetConfig("texture_cache_depth", (int)IsDlgButtonChecked(m_hWnd, IDC_TC_DEPTH)); theApp.SetConfig("UserHacks", (int)IsDlgButtonChecked(m_hWnd, IDC_HACKS_ENABLED)); } break; @@ -363,100 +308,155 @@ vector renderers; - unsigned renderer_setting = theApp.GetConfig("Renderer", 0); - unsigned renderer_sel = 0; + GSRendererType renderer_setting; + + if (ComboBoxGetSelData(IDC_RENDERER, i)) + renderer_setting = static_cast(i); + else + renderer_setting = static_cast(theApp.GetConfig("Renderer", static_cast(GSRendererType::Default))); + + GSRendererType renderer_sel = GSRendererType::Default; for(size_t i = 0; i < theApp.m_gs_renderers.size(); i++) { GSSetting r = theApp.m_gs_renderers[i]; - if(r.id >= 3 && r.id <= 5 || r.id == 15) + GSRendererType renderer = static_cast(r.id); + + if(renderer == GSRendererType::DX1011_HW || renderer == GSRendererType::DX1011_SW || renderer == GSRendererType::DX1011_Null || renderer == GSRendererType::DX1011_OpenCL) { if(level < D3D_FEATURE_LEVEL_10_0) continue; - +#if 0 + // This code is disabled so the renderer name doesn't get messed with. + // Just call it Direct3D11. r.name += (level >= D3D_FEATURE_LEVEL_11_0 ? "11" : "10"); +#endif } renderers.push_back(r); - if(r.id == renderer_setting) + if (static_cast(r.id) == renderer_setting) { renderer_sel = renderer_setting; } } - ComboBoxInit(IDC_RENDERER, renderers, renderer_sel); + ComboBoxInit(IDC_RENDERER, renderers, static_cast(renderer_sel)); } void GSSettingsDlg::UpdateControls() { INT_PTR i; - int scaling = 1; // in case reading the combo doesn't work, enable the custom res control anyway + int integer_scaling = 0; // in case reading the combo doesn't work, enable the custom res control anyway if(ComboBoxGetSelData(IDC_UPSCALE_MULTIPLIER, i)) { - scaling = (int)i; + integer_scaling = (int)i; } if(ComboBoxGetSelData(IDC_RENDERER, i)) { - bool dx9 = i >= 0 && i <= 2 || i == 14; - bool dx11 = i >= 3 && i <= 5 || i == 15; - bool ogl = i >= 12 && i <= 13 || i == 17; - bool hw = i == 0 || i == 3 || i == 12; - //bool sw = i == 1 || i == 4 || i == 10 || i == 13; - bool ocl = i >= 14 && i <= 17; + GSRendererType renderer = static_cast(i); - bool native = !!IsDlgButtonChecked(m_hWnd, IDC_NATIVERES); + bool dx9 = renderer == GSRendererType::DX9_HW || renderer == GSRendererType::DX9_SW || renderer == GSRendererType::DX9_Null || renderer == GSRendererType::DX9_OpenCL; + bool dx11 = renderer == GSRendererType::DX1011_HW || renderer == GSRendererType::DX1011_SW || renderer == GSRendererType::DX1011_Null || renderer == GSRendererType::DX1011_OpenCL; + bool ogl = renderer == GSRendererType::OGL_HW || renderer == GSRendererType::OGL_SW || renderer == GSRendererType::OGL_OpenCL; + + bool hw = renderer == GSRendererType::DX9_HW || renderer == GSRendererType::DX1011_HW || renderer == GSRendererType::OGL_HW || renderer == GSRendererType::Null_HW; + bool sw = renderer == GSRendererType::DX9_SW || renderer == GSRendererType::DX1011_SW || renderer == GSRendererType::OGL_SW || renderer == GSRendererType::Null_SW; + bool ocl = renderer == GSRendererType::DX9_OpenCL || renderer == GSRendererType::DX1011_OpenCL || renderer == GSRendererType::Null_OpenCL || renderer == GSRendererType::OGL_OpenCL; ShowWindow(GetDlgItem(m_hWnd, IDC_LOGO9), dx9 ? SW_SHOW : SW_HIDE); ShowWindow(GetDlgItem(m_hWnd, IDC_LOGO11), dx11 ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_LOGOGL), ogl ? SW_SHOW : SW_HIDE); +#ifndef ENABLE_OPENCL + ShowWindow(GetDlgItem(m_hWnd, IDC_OPENCL_DEVICE), SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_OPENCL_TEXT), SW_HIDE); +#endif + + ShowWindow(GetDlgItem(m_hWnd, IDC_LOGZ), dx9? SW_SHOW: SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_FBA), dx9 ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE), ogl ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT), ogl ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_TEXT), ogl ? SW_SHOW : SW_HIDE); + ShowWindow(GetDlgItem(m_hWnd, IDC_TC_DEPTH), ogl ? SW_SHOW : SW_HIDE); + + EnableWindow(GetDlgItem(m_hWnd, IDC_CRC_LEVEL), hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_CRC_LEVEL_TEXT), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_OPENCL_DEVICE), ocl); - EnableWindow(GetDlgItem(m_hWnd, IDC_WINDOWED), dx9); - EnableWindow(GetDlgItem(m_hWnd, IDC_RESX), hw && !native && scaling == 1); - EnableWindow(GetDlgItem(m_hWnd, IDC_RESX_EDIT), hw && !native && scaling == 1); - EnableWindow(GetDlgItem(m_hWnd, IDC_RESY), hw && !native && scaling == 1); - EnableWindow(GetDlgItem(m_hWnd, IDC_RESY_EDIT), hw && !native && scaling == 1); - EnableWindow(GetDlgItem(m_hWnd, IDC_UPSCALE_MULTIPLIER), hw && !native); - EnableWindow(GetDlgItem(m_hWnd, IDC_NATIVERES), hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_RESX), hw && !integer_scaling); + EnableWindow(GetDlgItem(m_hWnd, IDC_RESX_EDIT), hw && !integer_scaling); + EnableWindow(GetDlgItem(m_hWnd, IDC_RESY), hw && !integer_scaling); + EnableWindow(GetDlgItem(m_hWnd, IDC_RESY_EDIT), hw && !integer_scaling); + EnableWindow(GetDlgItem(m_hWnd, IDC_CUSTOM_TEXT), hw && !integer_scaling); + EnableWindow(GetDlgItem(m_hWnd, IDC_UPSCALE_MULTIPLIER), hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_UPSCALE_MULTIPLIER_TEXT), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_FILTER), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_PALTEX), hw); EnableWindow(GetDlgItem(m_hWnd, IDC_LOGZ), dx9 && hw); EnableWindow(GetDlgItem(m_hWnd, IDC_FBA), dx9 && hw); - EnableWindow(GetDlgItem(m_hWnd, IDC_ANISOTROPIC), (int)IsDlgButtonChecked(m_hWnd, IDC_FILTER) && hw && !ogl); - EnableWindow(GetDlgItem(m_hWnd, IDC_AFCOMBO), (int)IsDlgButtonChecked(m_hWnd, IDC_FILTER) && (int)IsDlgButtonChecked(m_hWnd, IDC_ANISOTROPIC) && hw && !ogl); - //EnableWindow(GetDlgItem(m_hWnd, IDC_AA1), sw); // Let uers set software params regardless of renderer used - //EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS_EDIT), sw); - //EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS), sw); - - // Shade Boost - EnableWindow(GetDlgItem(m_hWnd, IDC_SHADEBUTTON), IsDlgButtonChecked(m_hWnd, IDC_SHADEBOOST) == BST_CHECKED); + INT_PTR filter; + if (ComboBoxGetSelData(IDC_FILTER, filter)) + { + EnableWindow(GetDlgItem(m_hWnd, IDC_AFCOMBO), hw && filter && !IsDlgButtonChecked(m_hWnd, IDC_PALTEX)); + } + EnableWindow(GetDlgItem(m_hWnd, IDC_AFCOMBO_TEXT), hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_FILTER_TEXT), hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_DATE), ogl && hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT), ogl && hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_ACCURATE_BLEND_UNIT_TEXT), ogl && hw); + EnableWindow(GetDlgItem(m_hWnd, IDC_TC_DEPTH), ogl && hw); + + // Software mode settings + EnableWindow(GetDlgItem(m_hWnd, IDC_AA1), sw); + EnableWindow(GetDlgItem(m_hWnd, IDC_MIPMAP), sw); + EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS_TEXT), sw); + EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS_EDIT), sw); + EnableWindow(GetDlgItem(m_hWnd, IDC_SWTHREADS), sw); // Hacks EnableWindow(GetDlgItem(m_hWnd, IDC_HACKS_ENABLED), hw); - EnableWindow(GetDlgItem(m_hWnd, IDC_HACKSBUTTON), hw /*&& IsDlgButtonChecked(m_hWnd, IDC_HACKS_ENABLED) == BST_CHECKED*/); + EnableWindow(GetDlgItem(m_hWnd, IDC_HACKSBUTTON), hw && IsDlgButtonChecked(m_hWnd, IDC_HACKS_ENABLED)); } + } -// Shade Boost Dialog +// Shader Configuration Dialog -GSShadeBostDlg::GSShadeBostDlg() : - GSDialog(IDD_SHADEBOOST) +GSShaderDlg::GSShaderDlg() : + GSDialog(IDD_SHADER) {} -void GSShadeBostDlg::OnInit() +void GSShaderDlg::OnInit() { + //TV Shader + ComboBoxInit(IDC_TVSHADER, theApp.m_gs_tv_shaders, theApp.GetConfig("TVshader", 0)); + + //Shade Boost + CheckDlgButton(m_hWnd, IDC_SHADEBOOST, theApp.GetConfig("ShadeBoost", 0)); contrast = theApp.GetConfig("ShadeBoost_Contrast", 50); brightness = theApp.GetConfig("ShadeBoost_Brightness", 50); saturation = theApp.GetConfig("ShadeBoost_Saturation", 50); + // External FX shader + CheckDlgButton(m_hWnd, IDC_SHADER_FX, theApp.GetConfig("shaderfx", 0)); + SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_EDIT), WM_SETTEXT, 0, (LPARAM)theApp.GetConfig("shaderfx_glsl", "shaders\\GSdx.fx").c_str()); + SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_EDIT), WM_SETTEXT, 0, (LPARAM)theApp.GetConfig("shaderfx_conf", "shaders\\GSdx_FX_Settings.ini").c_str()); + + // FXAA shader + CheckDlgButton(m_hWnd, IDC_FXAA, theApp.GetConfig("Fxaa", 0)); + + AddTooltip(IDC_SHADEBOOST); + AddTooltip(IDC_SHADER_FX); + AddTooltip(IDC_FXAA); + UpdateControls(); } -void GSShadeBostDlg::UpdateControls() +void GSShaderDlg::UpdateControls() { SendMessage(GetDlgItem(m_hWnd, IDC_SATURATION_SLIDER), TBM_SETRANGE, TRUE, MAKELONG(0, 100)); SendMessage(GetDlgItem(m_hWnd, IDC_BRIGHTNESS_SLIDER), TBM_SETRANGE, TRUE, MAKELONG(0, 100)); @@ -474,9 +474,25 @@ SetDlgItemText(m_hWnd, IDC_BRIGHTNESS_TEXT, text); sprintf(text, "%d", contrast); SetDlgItemText(m_hWnd, IDC_CONTRAST_TEXT, text); + + // Shader Settings + bool external_shader_selected = IsDlgButtonChecked(m_hWnd, IDC_SHADER_FX) == BST_CHECKED; + bool shadeboost_selected = IsDlgButtonChecked(m_hWnd, IDC_SHADEBOOST) == BST_CHECKED; + EnableWindow(GetDlgItem(m_hWnd, IDC_SATURATION_SLIDER), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_BRIGHTNESS_SLIDER), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_CONTRAST_SLIDER), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SATURATION_TEXT), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_BRIGHTNESS_TEXT), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_CONTRAST_TEXT), shadeboost_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_TEXT), external_shader_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_EDIT), external_shader_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_BUTTON), external_shader_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_TEXT), external_shader_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_EDIT), external_shader_selected); + EnableWindow(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_BUTTON), external_shader_selected); } -bool GSShadeBostDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) +bool GSShaderDlg::OnMessage(UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { @@ -517,21 +533,60 @@ switch(id) { - case IDOK: + case IDOK: { + INT_PTR data; + //TV Shader + if (ComboBoxGetSelData(IDC_TVSHADER, data)) + { + theApp.SetConfig("TVshader", (int)data); + } + // Shade Boost + theApp.SetConfig("ShadeBoost", (int)IsDlgButtonChecked(m_hWnd, IDC_SHADEBOOST)); theApp.SetConfig("ShadeBoost_Contrast", contrast); theApp.SetConfig("ShadeBoost_Brightness", brightness); theApp.SetConfig("ShadeBoost_Saturation", saturation); + + // FXAA shader + theApp.SetConfig("Fxaa", (int)IsDlgButtonChecked(m_hWnd, IDC_FXAA)); + + // External FX Shader + theApp.SetConfig("shaderfx", (int)IsDlgButtonChecked(m_hWnd, IDC_SHADER_FX)); + + // External FX Shader(OpenGL) + int shader_fx_length = (int)SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_EDIT), WM_GETTEXTLENGTH, 0, 0); + int shader_fx_conf_length = (int)SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_EDIT), WM_GETTEXTLENGTH, 0, 0); + int length = std::max(shader_fx_length, shader_fx_conf_length) + 1; + char *buffer = new char[length]; + + + SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_EDIT), WM_GETTEXT, (WPARAM)length, (LPARAM)buffer); + theApp.SetConfig("shaderfx_glsl", buffer); // Not really glsl only ;) + SendMessage(GetDlgItem(m_hWnd, IDC_SHADER_FX_CONF_EDIT), WM_GETTEXT, (WPARAM)length, (LPARAM)buffer); + theApp.SetConfig("shaderfx_conf", buffer); + delete[] buffer; + EndDialog(m_hWnd, id); } break; + case IDC_SHADEBOOST: + UpdateControls(); + case IDC_SHADER_FX: + if (HIWORD(wParam) == BN_CLICKED) + UpdateControls(); + break; + case IDC_SHADER_FX_BUTTON: + if (HIWORD(wParam) == BN_CLICKED) + OpenFileDialog(IDC_SHADER_FX_EDIT, "Select External Shader"); + break; - case IDRESET: - { - contrast = 50; - brightness = 50; - saturation = 50; + case IDC_SHADER_FX_CONF_BUTTON: + if (HIWORD(wParam) == BN_CLICKED) + OpenFileDialog(IDC_SHADER_FX_CONF_EDIT, "Select External Shader Config"); + break; - UpdateControls(); + case IDCANCEL: + { + EndDialog(m_hWnd, IDCANCEL); } break; } @@ -556,8 +611,13 @@ } void GSHacksDlg::OnInit() -{ - bool dx9 = (int)SendMessage(GetDlgItem(GetParent(m_hWnd), IDC_RENDERER), CB_GETCURSEL, 0, 0) / 3 == 0; +{ + HWND hwnd_renderer = GetDlgItem(GetParent(m_hWnd), IDC_RENDERER); + GSRendererType renderer = static_cast(SendMessage(hwnd_renderer, CB_GETITEMDATA, SendMessage(hwnd_renderer, CB_GETCURSEL, 0, 0), 0)); + // It can only be accessed with a HW renderer, so this is sufficient. + bool dx9 = renderer == GSRendererType::DX9_HW; + // bool dx11 = renderer == GSRendererType::DX1011_HW; + bool ogl = renderer == GSRendererType::OGL_HW; unsigned short cb = 0; if(dx9) for(unsigned short i = 0; i < 17; i++) @@ -594,12 +654,13 @@ CheckDlgButton(m_hWnd, IDC_ALPHAHACK, theApp.GetConfig("UserHacks_AlphaHack", 0)); CheckDlgButton(m_hWnd, IDC_OFFSETHACK, theApp.GetConfig("UserHacks_HalfPixelOffset", 0)); - CheckDlgButton(m_hWnd, IDC_SPRITEHACK, theApp.GetConfig("UserHacks_SpriteHack", 0)); CheckDlgButton(m_hWnd, IDC_WILDHACK, theApp.GetConfig("UserHacks_WildHack", 0)); - CheckDlgButton(m_hWnd, IDC_AGGRESSIVECRC, theApp.GetConfig("UserHacks_AggressiveCRC", 0)); CheckDlgButton(m_hWnd, IDC_ALPHASTENCIL, theApp.GetConfig("UserHacks_AlphaStencil", 0)); - CheckDlgButton(m_hWnd, IDC_CHECK_NVIDIA_HACK, theApp.GetConfig("UserHacks_NVIDIAHack", 0)); - CheckDlgButton(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS, theApp.GetConfig("UserHacks_DisableCrcHacks", 0)); + CheckDlgButton(m_hWnd, IDC_PRELOAD_GS, theApp.GetConfig("preload_frame_with_gs_data", 0)); + CheckDlgButton(m_hWnd, IDC_ALIGN_SPRITE, theApp.GetConfig("UserHacks_align_sprite_X", 0)); + + ComboBoxInit(IDC_ROUND_SPRITE, theApp.m_gs_hack, theApp.GetConfig("UserHacks_round_sprite_offset", 0)); + ComboBoxInit(IDC_SPRITEHACK, theApp.m_gs_hack, theApp.GetConfig("UserHacks_SpriteHack", 0)); SendMessage(GetDlgItem(m_hWnd, IDC_SKIPDRAWHACK), UDM_SETRANGE, 0, MAKELPARAM(1000, 0)); SendMessage(GetDlgItem(m_hWnd, IDC_SKIPDRAWHACK), UDM_SETPOS, 0, MAKELPARAM(theApp.GetConfig("UserHacks_SkipDraw", 0), 0)); @@ -610,8 +671,24 @@ SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETY), UDM_SETRANGE, 0, MAKELPARAM(10000, 0)); SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETY), UDM_SETPOS, 0, MAKELPARAM((theApp.GetConfig("UserHacks_TCOffset", 0) >> 16) & 0xFFFF, 0)); - // Hacks descriptions - SetWindowText(GetDlgItem(m_hWnd, IDC_HACK_DESCRIPTION), "Hover over an item to get a description."); + ShowWindow(GetDlgItem(m_hWnd, IDC_ALPHASTENCIL), ogl ? SW_HIDE : SW_SHOW); + ShowWindow(GetDlgItem(m_hWnd, IDC_ALPHAHACK), ogl ? SW_HIDE : SW_SHOW); + + AddTooltip(IDC_SKIPDRAWHACKEDIT); + AddTooltip(IDC_SKIPDRAWHACK); + AddTooltip(IDC_ALPHAHACK); + AddTooltip(IDC_OFFSETHACK); + AddTooltip(IDC_SPRITEHACK); + AddTooltip(IDC_WILDHACK); + AddTooltip(IDC_MSAACB); + AddTooltip(IDC_ALPHASTENCIL); + AddTooltip(IDC_ALIGN_SPRITE); + AddTooltip(IDC_ROUND_SPRITE); + AddTooltip(IDC_TCOFFSETX); + AddTooltip(IDC_TCOFFSETX2); + AddTooltip(IDC_TCOFFSETY); + AddTooltip(IDC_TCOFFSETY2); + AddTooltip(IDC_PRELOAD_GS); } void GSHacksDlg::UpdateControls() @@ -621,100 +698,6 @@ { switch(message) { - case WM_SETCURSOR: - { - const char *helpstr = ""; - bool updateText = true; - - POINT pos; - GetCursorPos(&pos); - ScreenToClient(m_hWnd, &pos); - - HWND hoveredwnd = ChildWindowFromPointEx(m_hWnd, pos, CWP_SKIPINVISIBLE | CWP_SKIPTRANSPARENT); - - if (hoveredwnd != hovered_window) - hovered_window = hoveredwnd; - else - break; - - switch (GetDlgCtrlID(hoveredwnd)) - { - case IDC_SKIPDRAWHACK: - case IDC_SKIPDRAWHACKEDIT: - case IDC_STATIC_SKIPDRAW: - helpstr = "Skipdraw\n\nSkips drawing n surfaces completely. " - "Use it, for example, to try and get rid of bad post processing effects." - " Try values between 1 and 100."; - break; - case IDC_ALPHAHACK: - helpstr = "Alpha Hack\n\nDifferent alpha handling. Can work around some shadow problems."; - break; - case IDC_OFFSETHACK: - helpstr = "Halfpixel\n\nMight fix some misaligned fog, bloom, or blend effect."; - break; - case IDC_SPRITEHACK: - helpstr = "Sprite Hack\n\nHelps getting rid of black inner lines in some filtered sprites." - " Half option is the preferred one. Use it for Mana Khemia or Ar Tonelico for example." - " Full can be used for Tales of Destiny."; - break; - case IDC_WILDHACK: - helpstr = "WildArms\n\nLowers the GS precision to avoid gaps between pixels when" - " upscaling. Full option fixes the text on WildArms games, while Half option might improve portraits" - " in Ar Tonelico."; - break; - case IDC_MSAACB: - case IDC_STATIC_MSAA: - helpstr = "Multisample Anti-Aliasing\n\nEnables hardware Anti-Aliasing. Needs lots of memory." - " The Z-24 modes might need to have LogarithmicZ to compensate for the bits lost (only in DX9 mode)."; - break; - case IDC_AGGRESSIVECRC: - helpstr = "Use more aggressive CRC hacks on some games\n\n" - "Only affects few games, removing some effects which might make the image sharper/clearer.\n" - "Affected games: FFX, FFX2, FFXII, GOW2, ICO, SoTC, SSX3.\n" - "Works as a speedhack for: Steambot Chronicles."; - break; - case IDC_ALPHASTENCIL: - helpstr = "Extend stencil based emulation of destination alpha to perform stencil operations while drawing.\n\n" - "Improves many shadows which are normally overdrawn in parts, may affect other effects.\n" - "Will disable partial transparency in some games or even prevent drawing some elements altogether."; - break; - case IDC_CHECK_NVIDIA_HACK: - helpstr = "This is a hack to work around problems with recent NVIDIA drivers causing odd stretching problems in DirectX 11 only " - "when using Upscaling.\n\n" - "Try not to use this unless your game Videos or 2D screens are stretching outside the frame.\n\n" - "If you have an AMD/ATi graphics card you should not need this."; - break; - case IDC_CHECK_DISABLE_ALL_HACKS: - helpstr = "FOR TESTING ONLY!!\n\n" - "Disable all CRC hacks - will break many games. Overrides CrcHacksExclusion at gsdx.ini\n" - "\n" - "It's possible to exclude CRC hacks also via the gsdx.ini. E.g.:\n" - "CrcHacksExclusions=all\n" - "CrcHacksExclusions=0x0F0C4A9C, 0x0EE5646B, 0x7ACF7E03"; - break; - - case IDC_TCOFFSETX: - case IDC_TCOFFSETX2: - case IDC_STATIC_TCOFFSETX: - case IDC_TCOFFSETY: - case IDC_TCOFFSETY2: - case IDC_STATIC_TCOFFSETY: - helpstr = "Texture Coordinates Offset Hack\n\n" - "Offset for the ST/UV texture coordinates. Fixes some odd texture issues and might fix some post processing alignment too.\n\n" - " 0500 0500, fixes Persona 3 minimap, helps Haunting Ground.\n" - " 0000 1000, fixes Xenosaga hair edges (DX10+ Issue)\n"; - break; - - default: - updateText = false; - break; - } - - if(updateText) - SetWindowText(GetDlgItem(m_hWnd, IDC_HACK_DESCRIPTION), helpstr); - - } break; - case WM_COMMAND: { int id = LOWORD(wParam); @@ -723,16 +706,23 @@ { case IDOK: { + INT_PTR data; + if (ComboBoxGetSelData(IDC_ROUND_SPRITE, data)) + { + theApp.SetConfig("UserHacks_round_sprite_offset", (int)data); + } + if (ComboBoxGetSelData(IDC_SPRITEHACK, data)) + { + theApp.SetConfig("UserHacks_SpriteHack", (int)data); + } theApp.SetConfig("UserHacks_MSAA", cb2msaa[(int)SendMessage(GetDlgItem(m_hWnd, IDC_MSAACB), CB_GETCURSEL, 0, 0)]); theApp.SetConfig("UserHacks_AlphaHack", (int)IsDlgButtonChecked(m_hWnd, IDC_ALPHAHACK)); theApp.SetConfig("UserHacks_HalfPixelOffset", (int)IsDlgButtonChecked(m_hWnd, IDC_OFFSETHACK)); - theApp.SetConfig("UserHacks_SpriteHack", (int)IsDlgButtonChecked(m_hWnd, IDC_SPRITEHACK)); theApp.SetConfig("UserHacks_SkipDraw", (int)SendMessage(GetDlgItem(m_hWnd, IDC_SKIPDRAWHACK), UDM_GETPOS, 0, 0)); theApp.SetConfig("UserHacks_WildHack", (int)IsDlgButtonChecked(m_hWnd, IDC_WILDHACK)); - theApp.SetConfig("UserHacks_AggressiveCRC", (int)IsDlgButtonChecked(m_hWnd, IDC_AGGRESSIVECRC)); theApp.SetConfig("UserHacks_AlphaStencil", (int)IsDlgButtonChecked(m_hWnd, IDC_ALPHASTENCIL)); - theApp.SetConfig("UserHacks_NVIDIAHack", (int)IsDlgButtonChecked(m_hWnd, IDC_CHECK_NVIDIA_HACK)); - theApp.SetConfig("UserHacks_DisableCrcHacks", (int)IsDlgButtonChecked(m_hWnd, IDC_CHECK_DISABLE_ALL_HACKS)); + theApp.SetConfig("preload_frame_with_gs_data", (int)IsDlgButtonChecked(m_hWnd, IDC_PRELOAD_GS)); + theApp.SetConfig("Userhacks_align_sprite_X", (int)IsDlgButtonChecked(m_hWnd, IDC_ALIGN_SPRITE)); unsigned int TCOFFSET = SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETX), UDM_GETPOS, 0, 0) & 0xFFFF; TCOFFSET |= (SendMessage(GetDlgItem(m_hWnd, IDC_TCOFFSETY), UDM_GETPOS, 0, 0) & 0xFFFF) << 16; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSettingsDlg.h pcsx2-1.4.0/plugins/GSdx/GSSettingsDlg.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSettingsDlg.h 2014-09-22 03:29:40.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSettingsDlg.h 2016-01-05 17:28:08.000000000 +0000 @@ -24,7 +24,7 @@ #include "GSDialog.h" #include "GSSetting.h" -class GSShadeBostDlg : public GSDialog +class GSShaderDlg : public GSDialog { int saturation; int brightness; @@ -37,7 +37,7 @@ bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam); public: - GSShadeBostDlg(); + GSShaderDlg(); }; class GSHacksDlg : public GSDialog @@ -48,8 +48,6 @@ bool isdx9; - HWND hovered_window; - void UpdateControls(); protected: @@ -68,7 +66,6 @@ class GSSettingsDlg : public GSDialog { - list m_modes; struct Adapter { @@ -78,11 +75,9 @@ Adapter(const std::string &n, const std::string &i, const D3D_FEATURE_LEVEL &l) : name(n), id(i), level(l) {} }; - std::vector adapters; + std::vector adapters; vector m_ocl_devs; - - bool m_IsOpen2; uint32 m_lastValidMsaa; // used to revert to previous dialog value if the user changed to invalid one, or lesser one and canceled void UpdateRenderers(); @@ -93,9 +88,9 @@ bool OnCommand(HWND hWnd, UINT id, UINT code); // Shade Boost - GSShadeBostDlg ShadeBoostDlg; + GSShaderDlg ShaderDlg; GSHacksDlg HacksDlg; public: - GSSettingsDlg(bool isOpen2); + GSSettingsDlg(); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetupPrimCodeGenerator.x64.avx.cpp pcsx2-1.4.0/plugins/GSdx/GSSetupPrimCodeGenerator.x64.avx.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetupPrimCodeGenerator.x64.avx.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSetupPrimCodeGenerator.x64.avx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,7 +23,7 @@ #include "GSSetupPrimCodeGenerator.h" #include "GSVertexSW.h" -#if _M_SSE >= 0x500 && (defined(_M_AMD64) || defined(_WIN64)) +#if _M_SSE == 0x500 && (defined(_M_AMD64) || defined(_WIN64)) using namespace Xbyak; @@ -36,7 +36,7 @@ mov(r8, (size_t)&m_local); - if((m_en.z || m_en.f) && !m_sel.sprite || m_en.t || m_en.c && m_sel.iip) + if((m_en.z || m_en.f) && m_sel.prim != GS_SPRITE_CLASS || m_en.t || m_en.c && m_sel.iip) { mov(rax, (size_t)&m_shift[0]); @@ -67,7 +67,7 @@ return; } - if(!m_sel.sprite) + if(m_sel.prim != GS_SPRITE_CLASS) { // GSVector4 p = dscan.p; @@ -95,7 +95,9 @@ vcvttps2dq(xmm2, xmm2); vpshuflw(xmm2, xmm2, _MM_SHUFFLE(2, 2, 0, 0)); vpshufhw(xmm2, xmm2, _MM_SHUFFLE(2, 2, 0, 0)); - vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].f)], xmm2); + + const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].f) + (i * sizeof(GSScanlineLocalData::d[0])); + vmovdqa(ptr[r8 + variableOffset], xmm2); } } @@ -115,7 +117,9 @@ // m_local.d[i].z = dz * m_shift[i]; vmulps(xmm1, xmm0, Xmm(4 + i)); - vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].z)], xmm1); + + const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].z) + (i * sizeof(GSScanlineLocalData::d[0])); + vmovdqa(ptr[r8 + variableOffset], xmm1); } } } @@ -219,21 +223,28 @@ vcvttps2dq(xmm2, xmm2); + const size_t variableOffsetS = offsetof(GSScanlineLocalData, d[0].s) + (i * sizeof(GSScanlineLocalData::d[0])); + const size_t variableOffsetT = offsetof(GSScanlineLocalData, d[0].t) + (i * sizeof(GSScanlineLocalData::d[0])); + switch(j) { - case 0: vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].s)], xmm2); break; - case 1: vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].t)], xmm2); break; + case 0: vmovdqa(ptr[r8 + variableOffsetS], xmm2); break; + case 1: vmovdqa(ptr[r8 + variableOffsetT], xmm2); break; } } else { // m_local.d[i].s/t/q = v; + const size_t variableOffsetS = offsetof(GSScanlineLocalData, d[0].s) + (i * sizeof(GSScanlineLocalData::d[0])); + const size_t variableOffsetT = offsetof(GSScanlineLocalData, d[0].t) + (i * sizeof(GSScanlineLocalData::d[0])); + const size_t variableOffsetQ = offsetof(GSScanlineLocalData, d[0].q) + (i * sizeof(GSScanlineLocalData::d[0])); + switch(j) { - case 0: vmovaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].s)], xmm2); break; - case 1: vmovaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].t)], xmm2); break; - case 2: vmovaps(ptr[r8 + offsetof(GSScanlineLocalData, d[i].q)], xmm2); break; + case 0: vmovaps(ptr[r8 + variableOffsetS], xmm2); break; + case 1: vmovaps(ptr[r8 + variableOffsetT], xmm2); break; + case 2: vmovaps(ptr[r8 + variableOffsetQ], xmm2); break; } } } @@ -286,7 +297,9 @@ // m_local.d[i].rb = r.upl16(b); vpunpcklwd(xmm0, xmm1); - vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].rb)], xmm0); + + const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].rb) + (i * sizeof(GSScanlineLocalData::d[0])); + vmovdqa(ptr[r8 + variableOffset], xmm0); } // GSVector4 c = dscan.c; @@ -316,7 +329,9 @@ // m_local.d[i].ga = g.upl16(a); vpunpcklwd(xmm0, xmm1); - vmovdqa(ptr[r8 + offsetof(GSScanlineLocalData, d[i].ga)], xmm0); + + const size_t variableOffset = offsetof(GSScanlineLocalData, d[0].ga) + (i * sizeof(GSScanlineLocalData::d[0])); + vmovdqa(ptr[r8 + variableOffset], xmm0); } } else @@ -348,4 +363,4 @@ } } -#endif \ No newline at end of file +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetupPrimCodeGenerator.x86.avx2.cpp pcsx2-1.4.0/plugins/GSdx/GSSetupPrimCodeGenerator.x86.avx2.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSSetupPrimCodeGenerator.x86.avx2.cpp 2013-06-24 01:11:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSSetupPrimCodeGenerator.x86.avx2.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,353 +1,353 @@ -/* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "stdafx.h" -#include "GSSetupPrimCodeGenerator.h" -#include "GSVertexSW.h" - -#if _M_SSE >= 0x501 && !(defined(_M_AMD64) || defined(_WIN64)) - -using namespace Xbyak; - -static const int _args = 0; -static const int _vertex = _args + 4; -static const int _index = _args + 8; -static const int _dscan = _args + 12; - -void GSSetupPrimCodeGenerator::Generate() -{ - if((m_en.z || m_en.f) && m_sel.prim != GS_SPRITE_CLASS || m_en.t || m_en.c && m_sel.iip) - { - mov(edx, dword[esp + _dscan]); - - for(int i = 0; i < (m_sel.notest ? 2 : 5); i++) - { - vmovaps(Ymm(3 + i), ptr[&m_shift[i]]); - } - } - - Depth(); - - Texture(); - - Color(); - - ret(); -} - -void GSSetupPrimCodeGenerator::Depth() -{ - if(!m_en.z && !m_en.f) - { - return; - } - - if(m_sel.prim != GS_SPRITE_CLASS) - { - // GSVector4 dp8 = dscan.p * GSVector4::broadcast32(&shift[0]); - - vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, p)]); - - vmulps(ymm1, ymm0, ymm3); - - if(m_en.z) - { - // m_local.d8.p.z = dp8.extract32<2>(); - - vextractps(ptr[&m_local.d8.p.z], xmm1, 2); - } - - if(m_en.f) - { - // m_local.d8.p.f = GSVector4i(dp8).extract32<3>(); - - vcvtps2dq(ymm2, ymm1); - vpextrd(ptr[&m_local.d8.p.f], xmm2, 3); - } - - if(m_en.z) - { - // GSVector8 dz = GSVector8(dscan.p).zzzz(); - - vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); - } - - if(m_en.f) - { - // GSVector8 df = GSVector8(dscan.p).wwww(); - - vshufps(ymm1, ymm0, ymm0, _MM_SHUFFLE(3, 3, 3, 3)); - } - - for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) - { - if(m_en.z) - { - // m_local.d[i].z = dz * shift[1 + i]; - - if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); - else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); - vmovaps(ptr[&m_local.d[i].z], ymm0); - } - - if(m_en.f) - { - // m_local.d[i].f = GSVector8i(df * m_shift[i]).xxzzlh(); - - if(i < 4) vmulps(ymm0, ymm1, Ymm(4 + i)); - else vmulps(ymm0, ymm1, ptr[&m_shift[i + 1]]); - vcvttps2dq(ymm0, ymm0); - vpshuflw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); - vmovdqa(ptr[&m_local.d[i].f], ymm0); - } - } - } - else - { - // GSVector4 p = vertex[index[1]].p; - - mov(ecx, ptr[esp + _index]); - mov(ecx, ptr[ecx + sizeof(uint32) * 1]); - shl(ecx, 6); // * sizeof(GSVertexSW) - add(ecx, ptr[esp + _vertex]); - - if(m_en.f) - { - // m_local.p.f = GSVector4i(vertex[index[1]].p).extract32<3>(); - - vmovaps(xmm0, ptr[ecx + offsetof(GSVertexSW, p)]); - vcvttps2dq(xmm0, xmm0); - vpextrd(ptr[&m_local.p.f], xmm0, 3); - } - - if(m_en.z) - { - // m_local.p.z = vertex[index[1]].t.u32[3]; // uint32 z is bypassed in t.w - - mov(eax, ptr[ecx + offsetof(GSVertexSW, t.w)]); - mov(ptr[&m_local.p.z], eax); - } - } -} - -void GSSetupPrimCodeGenerator::Texture() -{ - if(!m_en.t) - { - return; - } - - // GSVector8 dt(dscan.t); - - vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, t)]); - - // GSVector8 dt8 = dt * shift[0]; - - vmulps(ymm1, ymm0, ymm3); - - if(m_sel.fst) - { - // m_local.d8.stq = GSVector8::cast(GSVector8i(dt8)); - - vcvttps2dq(ymm1, ymm1); - - vmovdqa(ptr[&m_local.d8.stq], xmm1); - } - else - { - // m_local.d8.stq = dt8; - - vmovaps(ptr[&m_local.d8.stq], xmm1); - } - - for(int j = 0, k = m_sel.fst ? 2 : 3; j < k; j++) - { - // GSVector8 dstq = dt.xxxx/yyyy/zzzz(); - - vshufps(ymm1, ymm0, ymm0, (uint8)_MM_SHUFFLE(j, j, j, j)); - - for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) - { - // GSVector8 v = dstq * shift[1 + i]; - - if(i < 4) vmulps(ymm2, ymm1, Ymm(4 + i)); - else vmulps(ymm2, ymm1, ptr[&m_shift[i + 1]]); - - if(m_sel.fst) - { - // m_local.d[i].s/t = GSVector8::cast(GSVector8i(v)); - - vcvttps2dq(ymm2, ymm2); - - switch(j) - { - case 0: vmovdqa(ptr[&m_local.d[i].s], ymm2); break; - case 1: vmovdqa(ptr[&m_local.d[i].t], ymm2); break; - } - } - else - { - // m_local.d[i].s/t/q = v; - - switch(j) - { - case 0: vmovaps(ptr[&m_local.d[i].s], ymm2); break; - case 1: vmovaps(ptr[&m_local.d[i].t], ymm2); break; - case 2: vmovaps(ptr[&m_local.d[i].q], ymm2); break; - } - } - } - } -} - -void GSSetupPrimCodeGenerator::Color() -{ - if(!m_en.c) - { - return; - } - - if(m_sel.iip) - { - // GSVector8 dc(dscan.c); - - vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, c)]); - - // m_local.d8.c = GSVector8i(dc * shift[0]).xzyw().ps32(); - - vmulps(ymm1, ymm0, ymm3); - vcvttps2dq(ymm1, ymm1); - vpshufd(ymm1, ymm1, _MM_SHUFFLE(3, 1, 2, 0)); - vpackssdw(ymm1, ymm1); - vmovq(ptr[&m_local.d8.c], xmm1); - - // ymm3 is not needed anymore - - // GSVector8 dr = dc.xxxx(); - // GSVector8 db = dc.zzzz(); - - vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(0, 0, 0, 0)); - vshufps(ymm3, ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); - - for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) - { - // GSVector8i r = GSVector8i(dr * shift[1 + i]).ps32(); - - if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); - else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); - vcvttps2dq(ymm0, ymm0); - vpackssdw(ymm0, ymm0); - - // GSVector4i b = GSVector8i(db * shift[1 + i]).ps32(); - - if(i < 4) vmulps(ymm1, ymm3, Ymm(4 + i)); - else vmulps(ymm1, ymm3, ptr[&m_shift[i + 1]]); - vcvttps2dq(ymm1, ymm1); - vpackssdw(ymm1, ymm1); - - // m_local.d[i].rb = r.upl16(b); - - vpunpcklwd(ymm0, ymm1); - vmovdqa(ptr[&m_local.d[i].rb], ymm0); - } - - // GSVector8 dc(dscan.c); - - vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, c)]); // not enough regs, have to reload it - - // GSVector8 dg = dc.yyyy(); - // GSVector8 da = dc.wwww(); - - vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(1, 1, 1, 1)); - vshufps(ymm3, ymm0, ymm0, _MM_SHUFFLE(3, 3, 3, 3)); - - for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) - { - // GSVector8i g = GSVector8i(dg * shift[1 + i]).ps32(); - - if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); - else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); - vcvttps2dq(ymm0, ymm0); - vpackssdw(ymm0, ymm0); - - // GSVector8i a = GSVector8i(da * shift[1 + i]).ps32(); - - if(i < 4) vmulps(ymm1, ymm3, Ymm(4 + i)); - else vmulps(ymm1, ymm3, ptr[&m_shift[i + 1]]); - vcvttps2dq(ymm1, ymm1); - vpackssdw(ymm1, ymm1); - - // m_local.d[i].ga = g.upl16(a); - - vpunpcklwd(ymm0, ymm1); - vmovdqa(ptr[&m_local.d[i].ga], ymm0); - } - } - else - { - // GSVector8i c = GSVector8i(GSVector8(vertex[index[last]].c)); - - int last = 0; - - switch(m_sel.prim) - { - case GS_POINT_CLASS: last = 0; break; - case GS_LINE_CLASS: last = 1; break; - case GS_TRIANGLE_CLASS: last = 2; break; - case GS_SPRITE_CLASS: last = 1; break; - } - - if(!(m_sel.prim == GS_SPRITE_CLASS && (m_en.z || m_en.f))) // if this is a sprite, the last vertex was already loaded in Depth() - { - mov(ecx, ptr[esp + _index]); - mov(ecx, ptr[ecx + sizeof(uint32) * last]); - shl(ecx, 6); // * sizeof(GSVertexSW) - add(ecx, ptr[esp + _vertex]); - } - - vbroadcasti128(ymm0, ptr[ecx + offsetof(GSVertexSW, c)]); - vcvttps2dq(ymm0, ymm0); - - // c = c.upl16(c.zwxy()); - - vpshufd(ymm1, ymm0, _MM_SHUFFLE(1, 0, 3, 2)); - vpunpcklwd(ymm0, ymm1); - - // if(!tme) c = c.srl16(7); - - if(m_sel.tfx == TFX_NONE) - { - vpsrlw(ymm0, 7); - } - - // m_local.c.rb = c.xxxx(); - // m_local.c.ga = c.zzzz(); - - vpshufd(ymm1, ymm0, _MM_SHUFFLE(0, 0, 0, 0)); - vpshufd(ymm2, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); - - vmovdqa(ptr[&m_local.c.rb], ymm1); - vmovdqa(ptr[&m_local.c.ga], ymm2); - } -} - +/* + * Copyright (C) 2007-2009 Gabest + * http://www.gabest.org + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include "stdafx.h" +#include "GSSetupPrimCodeGenerator.h" +#include "GSVertexSW.h" + +#if _M_SSE >= 0x501 && !(defined(_M_AMD64) || defined(_WIN64)) + +using namespace Xbyak; + +static const int _args = 0; +static const int _vertex = _args + 4; +static const int _index = _args + 8; +static const int _dscan = _args + 12; + +void GSSetupPrimCodeGenerator::Generate() +{ + if((m_en.z || m_en.f) && m_sel.prim != GS_SPRITE_CLASS || m_en.t || m_en.c && m_sel.iip) + { + mov(edx, dword[esp + _dscan]); + + for(int i = 0; i < (m_sel.notest ? 2 : 5); i++) + { + vmovaps(Ymm(3 + i), ptr[&m_shift[i]]); + } + } + + Depth(); + + Texture(); + + Color(); + + ret(); +} + +void GSSetupPrimCodeGenerator::Depth() +{ + if(!m_en.z && !m_en.f) + { + return; + } + + if(m_sel.prim != GS_SPRITE_CLASS) + { + // GSVector4 dp8 = dscan.p * GSVector4::broadcast32(&shift[0]); + + vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, p)]); + + vmulps(ymm1, ymm0, ymm3); + + if(m_en.z) + { + // m_local.d8.p.z = dp8.extract32<2>(); + + vextractps(ptr[&m_local.d8.p.z], xmm1, 2); + } + + if(m_en.f) + { + // m_local.d8.p.f = GSVector4i(dp8).extract32<3>(); + + vcvtps2dq(ymm2, ymm1); + vpextrd(ptr[&m_local.d8.p.f], xmm2, 3); + } + + if(m_en.z) + { + // GSVector8 dz = GSVector8(dscan.p).zzzz(); + + vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); + } + + if(m_en.f) + { + // GSVector8 df = GSVector8(dscan.p).wwww(); + + vshufps(ymm1, ymm0, ymm0, _MM_SHUFFLE(3, 3, 3, 3)); + } + + for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) + { + if(m_en.z) + { + // m_local.d[i].z = dz * shift[1 + i]; + + if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); + else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); + vmovaps(ptr[&m_local.d[i].z], ymm0); + } + + if(m_en.f) + { + // m_local.d[i].f = GSVector8i(df * m_shift[i]).xxzzlh(); + + if(i < 4) vmulps(ymm0, ymm1, Ymm(4 + i)); + else vmulps(ymm0, ymm1, ptr[&m_shift[i + 1]]); + vcvttps2dq(ymm0, ymm0); + vpshuflw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vpshufhw(ymm0, ymm0, _MM_SHUFFLE(2, 2, 0, 0)); + vmovdqa(ptr[&m_local.d[i].f], ymm0); + } + } + } + else + { + // GSVector4 p = vertex[index[1]].p; + + mov(ecx, ptr[esp + _index]); + mov(ecx, ptr[ecx + sizeof(uint32) * 1]); + shl(ecx, 6); // * sizeof(GSVertexSW) + add(ecx, ptr[esp + _vertex]); + + if(m_en.f) + { + // m_local.p.f = GSVector4i(vertex[index[1]].p).extract32<3>(); + + vmovaps(xmm0, ptr[ecx + offsetof(GSVertexSW, p)]); + vcvttps2dq(xmm0, xmm0); + vpextrd(ptr[&m_local.p.f], xmm0, 3); + } + + if(m_en.z) + { + // m_local.p.z = vertex[index[1]].t.u32[3]; // uint32 z is bypassed in t.w + + mov(eax, ptr[ecx + offsetof(GSVertexSW, t.w)]); + mov(ptr[&m_local.p.z], eax); + } + } +} + +void GSSetupPrimCodeGenerator::Texture() +{ + if(!m_en.t) + { + return; + } + + // GSVector8 dt(dscan.t); + + vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, t)]); + + // GSVector8 dt8 = dt * shift[0]; + + vmulps(ymm1, ymm0, ymm3); + + if(m_sel.fst) + { + // m_local.d8.stq = GSVector8::cast(GSVector8i(dt8)); + + vcvttps2dq(ymm1, ymm1); + + vmovdqa(ptr[&m_local.d8.stq], xmm1); + } + else + { + // m_local.d8.stq = dt8; + + vmovaps(ptr[&m_local.d8.stq], xmm1); + } + + for(int j = 0, k = m_sel.fst ? 2 : 3; j < k; j++) + { + // GSVector8 dstq = dt.xxxx/yyyy/zzzz(); + + vshufps(ymm1, ymm0, ymm0, (uint8)_MM_SHUFFLE(j, j, j, j)); + + for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) + { + // GSVector8 v = dstq * shift[1 + i]; + + if(i < 4) vmulps(ymm2, ymm1, Ymm(4 + i)); + else vmulps(ymm2, ymm1, ptr[&m_shift[i + 1]]); + + if(m_sel.fst) + { + // m_local.d[i].s/t = GSVector8::cast(GSVector8i(v)); + + vcvttps2dq(ymm2, ymm2); + + switch(j) + { + case 0: vmovdqa(ptr[&m_local.d[i].s], ymm2); break; + case 1: vmovdqa(ptr[&m_local.d[i].t], ymm2); break; + } + } + else + { + // m_local.d[i].s/t/q = v; + + switch(j) + { + case 0: vmovaps(ptr[&m_local.d[i].s], ymm2); break; + case 1: vmovaps(ptr[&m_local.d[i].t], ymm2); break; + case 2: vmovaps(ptr[&m_local.d[i].q], ymm2); break; + } + } + } + } +} + +void GSSetupPrimCodeGenerator::Color() +{ + if(!m_en.c) + { + return; + } + + if(m_sel.iip) + { + // GSVector8 dc(dscan.c); + + vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, c)]); + + // m_local.d8.c = GSVector8i(dc * shift[0]).xzyw().ps32(); + + vmulps(ymm1, ymm0, ymm3); + vcvttps2dq(ymm1, ymm1); + vpshufd(ymm1, ymm1, _MM_SHUFFLE(3, 1, 2, 0)); + vpackssdw(ymm1, ymm1); + vmovq(ptr[&m_local.d8.c], xmm1); + + // ymm3 is not needed anymore + + // GSVector8 dr = dc.xxxx(); + // GSVector8 db = dc.zzzz(); + + vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(0, 0, 0, 0)); + vshufps(ymm3, ymm0, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); + + for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) + { + // GSVector8i r = GSVector8i(dr * shift[1 + i]).ps32(); + + if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); + else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); + vcvttps2dq(ymm0, ymm0); + vpackssdw(ymm0, ymm0); + + // GSVector4i b = GSVector8i(db * shift[1 + i]).ps32(); + + if(i < 4) vmulps(ymm1, ymm3, Ymm(4 + i)); + else vmulps(ymm1, ymm3, ptr[&m_shift[i + 1]]); + vcvttps2dq(ymm1, ymm1); + vpackssdw(ymm1, ymm1); + + // m_local.d[i].rb = r.upl16(b); + + vpunpcklwd(ymm0, ymm1); + vmovdqa(ptr[&m_local.d[i].rb], ymm0); + } + + // GSVector8 dc(dscan.c); + + vbroadcastf128(ymm0, ptr[edx + offsetof(GSVertexSW, c)]); // not enough regs, have to reload it + + // GSVector8 dg = dc.yyyy(); + // GSVector8 da = dc.wwww(); + + vshufps(ymm2, ymm0, ymm0, _MM_SHUFFLE(1, 1, 1, 1)); + vshufps(ymm3, ymm0, ymm0, _MM_SHUFFLE(3, 3, 3, 3)); + + for(int i = 0; i < (m_sel.notest ? 1 : 8); i++) + { + // GSVector8i g = GSVector8i(dg * shift[1 + i]).ps32(); + + if(i < 4) vmulps(ymm0, ymm2, Ymm(4 + i)); + else vmulps(ymm0, ymm2, ptr[&m_shift[i + 1]]); + vcvttps2dq(ymm0, ymm0); + vpackssdw(ymm0, ymm0); + + // GSVector8i a = GSVector8i(da * shift[1 + i]).ps32(); + + if(i < 4) vmulps(ymm1, ymm3, Ymm(4 + i)); + else vmulps(ymm1, ymm3, ptr[&m_shift[i + 1]]); + vcvttps2dq(ymm1, ymm1); + vpackssdw(ymm1, ymm1); + + // m_local.d[i].ga = g.upl16(a); + + vpunpcklwd(ymm0, ymm1); + vmovdqa(ptr[&m_local.d[i].ga], ymm0); + } + } + else + { + // GSVector8i c = GSVector8i(GSVector8(vertex[index[last]].c)); + + int last = 0; + + switch(m_sel.prim) + { + case GS_POINT_CLASS: last = 0; break; + case GS_LINE_CLASS: last = 1; break; + case GS_TRIANGLE_CLASS: last = 2; break; + case GS_SPRITE_CLASS: last = 1; break; + } + + if(!(m_sel.prim == GS_SPRITE_CLASS && (m_en.z || m_en.f))) // if this is a sprite, the last vertex was already loaded in Depth() + { + mov(ecx, ptr[esp + _index]); + mov(ecx, ptr[ecx + sizeof(uint32) * last]); + shl(ecx, 6); // * sizeof(GSVertexSW) + add(ecx, ptr[esp + _vertex]); + } + + vbroadcasti128(ymm0, ptr[ecx + offsetof(GSVertexSW, c)]); + vcvttps2dq(ymm0, ymm0); + + // c = c.upl16(c.zwxy()); + + vpshufd(ymm1, ymm0, _MM_SHUFFLE(1, 0, 3, 2)); + vpunpcklwd(ymm0, ymm1); + + // if(!tme) c = c.srl16(7); + + if(m_sel.tfx == TFX_NONE) + { + vpsrlw(ymm0, 7); + } + + // m_local.c.rb = c.xxxx(); + // m_local.c.ga = c.zzzz(); + + vpshufd(ymm1, ymm0, _MM_SHUFFLE(0, 0, 0, 0)); + vpshufd(ymm2, ymm0, _MM_SHUFFLE(2, 2, 2, 2)); + + vmovdqa(ptr[&m_local.c.rb], ymm1); + vmovdqa(ptr[&m_local.c.ga], ymm2); + } +} + #endif \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSShaderOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSShaderOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSShaderOGL.cpp 2014-11-09 14:27:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSShaderOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -24,95 +24,50 @@ #include "GLState.h" GSShaderOGL::GSShaderOGL(bool debug) : - m_debug_shader(debug), - m_vs_sub_count(0), - m_ps_sub_count(0) + m_pipeline(0), + m_debug_shader(debug) { - - memset(&m_vs_sub, 0, countof(m_vs_sub)*sizeof(m_vs_sub[0])); - memset(&m_ps_sub, 0, countof(m_ps_sub)*sizeof(m_ps_sub[0])); - m_single_prog.clear(); -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_separate_shader_objects) { - gl_GenProgramPipelines(1, &m_pipeline); - gl_BindProgramPipeline(m_pipeline); + glGenProgramPipelines(1, &m_pipeline); + glBindProgramPipeline(m_pipeline); } -#endif } GSShaderOGL::~GSShaderOGL() { -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_separate_shader_objects) - gl_DeleteProgramPipelines(1, &m_pipeline); -#endif + glDeleteProgramPipelines(1, &m_pipeline); - for (auto it = m_single_prog.begin(); it != m_single_prog.end() ; it++) gl_DeleteProgram(it->second); + for (auto it = m_single_prog.begin(); it != m_single_prog.end() ; it++) glDeleteProgram(it->second); m_single_prog.clear(); } -void GSShaderOGL::VS(GLuint s, GLuint sub_count) +void GSShaderOGL::VS(GLuint s) { if (GLState::vs != s) { - m_vs_sub_count = sub_count; - GLState::vs = s; GLState::dirty_prog = true; - GLState::dirty_subroutine_vs = true; -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_separate_shader_objects) - gl_UseProgramStages(m_pipeline, GL_VERTEX_SHADER_BIT, s); -#endif - } -} - -void GSShaderOGL::VS_subroutine(GLuint *sub) -{ - if (!(m_vs_sub[0] == sub[0])) { - m_vs_sub[0] = sub[0]; - GLState::dirty_subroutine_vs = true; - } -} - -void GSShaderOGL::PS_subroutine(GLuint *sub) -{ - // FIXME could be more efficient with GSvector - if (!(m_ps_sub[0] == sub[0] && m_ps_sub[1] == sub[1] && m_ps_sub[2] == sub[2] && m_ps_sub[3] == sub[3] && m_ps_sub[4] == sub[4])) { - m_ps_sub[0] = sub[0]; - m_ps_sub[1] = sub[1]; - m_ps_sub[2] = sub[2]; - m_ps_sub[3] = sub[3]; - m_ps_sub[4] = sub[4]; - GLState::dirty_subroutine_ps = true; - } -} - -void GSShaderOGL::PS_ressources(GLuint64 handle[2]) -{ - if (handle[0] != GLState::tex_handle[0] || handle[1] != GLState::tex_handle[1]) { - GLState::tex_handle[0] = handle[0]; - GLState::tex_handle[1] = handle[1]; - GLState::dirty_ressources = true; + glUseProgramStages(m_pipeline, GL_VERTEX_SHADER_BIT, s); } } -void GSShaderOGL::PS(GLuint s, GLuint sub_count) +void GSShaderOGL::PS(GLuint s) { +#ifdef _DEBUG + if (true) +#else if (GLState::ps != s) +#endif { - m_ps_sub_count = sub_count; - + // In debug always sets the program. It allow to replace the program in apitrace easily. GLState::ps = s; GLState::dirty_prog = true; - GLState::dirty_subroutine_ps = true; - GLState::dirty_ressources = true; -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_separate_shader_objects) { - gl_UseProgramStages(m_pipeline, GL_FRAGMENT_SHADER_BIT, s); + glUseProgramStages(m_pipeline, GL_FRAGMENT_SHADER_BIT, s); } -#endif } } @@ -122,48 +77,9 @@ { GLState::gs = s; GLState::dirty_prog = true; -#ifndef ENABLE_GLES if (GLLoader::found_GL_ARB_separate_shader_objects) - gl_UseProgramStages(m_pipeline, GL_GEOMETRY_SHADER_BIT, s); -#endif - } -} - -void GSShaderOGL::SetupRessources() -{ -#ifndef ENABLE_GLES - if (!GLLoader::found_GL_ARB_bindless_texture) return; - - if (GLState::dirty_ressources) { - GLState::dirty_ressources = false; - if (GLLoader::found_GL_ARB_separate_shader_objects) { - gl_ProgramUniformHandleui64vARB(GLState::ps, 0, 1, &GLState::tex_handle[0]); - if (GLState::tex_handle[1]) - gl_ProgramUniformHandleui64vARB(GLState::ps, 1, 1, &GLState::tex_handle[1]); - } else { - gl_UniformHandleui64vARB(0, 1, &GLState::tex_handle[0]); - if (GLState::tex_handle[1]) - gl_UniformHandleui64vARB(1, 1, &GLState::tex_handle[1]); - } - } -#endif -} - -void GSShaderOGL::SetupSubroutineUniform() -{ -#ifndef ENABLE_GLES - if (!GLLoader::found_GL_ARB_shader_subroutine) return; - - if (GLState::dirty_subroutine_vs && m_vs_sub_count) { - gl_UniformSubroutinesuiv(GL_VERTEX_SHADER, m_vs_sub_count, m_vs_sub); - GLState::dirty_subroutine_vs = false; + glUseProgramStages(m_pipeline, GL_GEOMETRY_SHADER_BIT, s); } - - if (GLState::dirty_subroutine_ps && m_ps_sub_count) { - gl_UniformSubroutinesuiv(GL_FRAGMENT_SHADER, m_ps_sub_count, m_ps_sub); - GLState::dirty_subroutine_ps = false; - } -#endif } bool GSShaderOGL::ValidateShader(GLuint s) @@ -171,14 +87,14 @@ if (!m_debug_shader) return true; GLint status = 0; - gl_GetShaderiv(s, GL_COMPILE_STATUS, &status); + glGetShaderiv(s, GL_COMPILE_STATUS, &status); if (status) return true; GLint log_length = 0; - gl_GetShaderiv(s, GL_INFO_LOG_LENGTH, &log_length); + glGetShaderiv(s, GL_INFO_LOG_LENGTH, &log_length); if (log_length > 0) { char* log = new char[log_length]; - gl_GetShaderInfoLog(s, log_length, NULL, log); + glGetShaderInfoLog(s, log_length, NULL, log); fprintf(stderr, "%s", log); delete[] log; } @@ -192,14 +108,14 @@ if (!m_debug_shader) return true; GLint status = 0; - gl_GetProgramiv(p, GL_LINK_STATUS, &status); + glGetProgramiv(p, GL_LINK_STATUS, &status); if (status) return true; GLint log_length = 0; - gl_GetProgramiv(p, GL_INFO_LOG_LENGTH, &log_length); + glGetProgramiv(p, GL_INFO_LOG_LENGTH, &log_length); if (log_length > 0) { char* log = new char[log_length]; - gl_GetProgramInfoLog(p, log_length, NULL, log); + glGetProgramInfoLog(p, log_length, NULL, log); fprintf(stderr, "%s", log); delete[] log; } @@ -210,39 +126,36 @@ bool GSShaderOGL::ValidatePipeline(GLuint p) { -#ifndef ENABLE_GLES if (!m_debug_shader) return true; // FIXME: might be mandatory to validate the pipeline - gl_ValidateProgramPipeline(p); + glValidateProgramPipeline(p); GLint status = 0; - gl_GetProgramPipelineiv(p, GL_VALIDATE_STATUS, &status); + glGetProgramPipelineiv(p, GL_VALIDATE_STATUS, &status); if (status) return true; GLint log_length = 0; - gl_GetProgramPipelineiv(p, GL_INFO_LOG_LENGTH, &log_length); + glGetProgramPipelineiv(p, GL_INFO_LOG_LENGTH, &log_length); if (log_length > 0) { char* log = new char[log_length]; - gl_GetProgramPipelineInfoLog(p, log_length, NULL, log); + glGetProgramPipelineInfoLog(p, log_length, NULL, log); fprintf(stderr, "%s", log); delete[] log; } fprintf(stderr, "\n"); -#endif - return false; } GLuint GSShaderOGL::LinkNewProgram() { - GLuint p = gl_CreateProgram(); - if (GLState::vs) gl_AttachShader(p, GLState::vs); - if (GLState::ps) gl_AttachShader(p, GLState::ps); - if (GLState::gs) gl_AttachShader(p, GLState::gs); + GLuint p = glCreateProgram(); + if (GLState::vs) glAttachShader(p, GLState::vs); + if (GLState::ps) glAttachShader(p, GLState::ps); + if (GLState::gs) glAttachShader(p, GLState::gs); - gl_LinkProgram(p); + glLinkProgram(p); ValidateProgram(p); @@ -253,14 +166,10 @@ { if (GLState::dirty_prog) { if (!GLLoader::found_GL_ARB_separate_shader_objects) { - GLState::dirty_subroutine_vs = true; - GLState::dirty_subroutine_ps = true; - GLState::dirty_ressources = true; - hash_map::iterator it; // Note: shader are integer lookup pointer. They start from 1 and incr // every time you create a new shader OR a new program. - // Note2: vs & gs are precompiled at startup. FGLRX and radeon got value < 128. + // Note2: vs & gs are precompiled at startup. FGLRX and radeon got value < 128. GS has only 2 programs // We migth be able to pack the value in a 32bits int // I would need to check the behavior on Nvidia (pause/resume). uint64 sel = (uint64)GLState::vs << 40 | (uint64)GLState::gs << 20 | GLState::ps; @@ -271,31 +180,23 @@ ValidateProgram(GLState::program); - gl_UseProgram(GLState::program); + glUseProgram(GLState::program); } else { GLuint prog = it->second; if (prog != GLState::program) { GLState::program = prog; - gl_UseProgram(GLState::program); + glUseProgram(GLState::program); } } - - } else { - ValidatePipeline(m_pipeline); } } - SetupRessources(); - - SetupSubroutineUniform(); - GLState::dirty_prog = false; } std::string GSShaderOGL::GenGlslHeader(const std::string& entry, GLenum type, const std::string& macro) { std::string header; -#ifndef ENABLE_GLES header = "#version 330 core\n"; // Need GL version 420 header += "#extension GL_ARB_shading_language_420pack: require\n"; @@ -303,60 +204,30 @@ // Need GL version 410 header += "#extension GL_ARB_separate_shader_objects: require\n"; } - if (GLLoader::found_GL_ARB_shader_subroutine && GLLoader::found_GL_ARB_explicit_uniform_location) { - // Need GL version 400 - header += "#define SUBROUTINE_GL40 1\n"; - header += "#extension GL_ARB_shader_subroutine: require\n"; - } - if (GLLoader::found_GL_ARB_explicit_uniform_location) { - // Need GL version 430 - header += "#extension GL_ARB_explicit_uniform_location: require\n"; - } if (GLLoader::found_GL_ARB_shader_image_load_store) { // Need GL version 420 header += "#extension GL_ARB_shader_image_load_store: require\n"; } else { header += "#define DISABLE_GL42_image\n"; } - if (GLLoader::found_GL_ARB_bindless_texture && GLLoader::found_GL_ARB_explicit_uniform_location) { - // ARB extension (4.4) - header += "#extension GL_ARB_bindless_texture: require\n"; - header += "#define ENABLE_BINDLESS_TEX\n"; - } if (GLLoader::found_GL_ARB_clip_control) { header += "#define ZERO_TO_ONE_DEPTH\n"; } -#ifdef ENABLE_OGL_STENCIL_DEBUG - header += "#define ENABLE_OGL_STENCIL_DEBUG 1\n"; -#endif -#else // ENABLE_GLES - header = "#version 310 es\n"; - header += "#extension GL_EXT_shader_io_blocks: require\n"; - // Disable full GL features (actually GLES3.1 could support it) - header += "#define DISABLE_GL42_image\n"; -#endif // Stupid GL implementation (can't use GL_ES) // AMD/nvidia define it to 0 // intel window don't define it // intel linux refuse to define it -#ifdef ENABLE_GLES - header += "#define pGL_ES 1\n"; - header += "precision highp float;\n"; -#else header += "#define pGL_ES 0\n"; -#endif // Allow to puts several shader in 1 files switch (type) { case GL_VERTEX_SHADER: header += "#define VERTEX_SHADER 1\n"; break; -#ifndef ENABLE_GLES case GL_GEOMETRY_SHADER: header += "#define GEOMETRY_SHADER 1\n"; break; -#endif case GL_FRAGMENT_SHADER: header += "#define FRAGMENT_SHADER 1\n"; break; @@ -377,11 +248,9 @@ GLuint program = 0; -#ifndef ENABLE_GLES if (type == GL_GEOMETRY_SHADER && !GLLoader::found_geometry_shader) { return program; } -#endif // Note it is better to separate header and source file to have the good line number // in the glsl compiler report @@ -398,13 +267,11 @@ #endif if (GLLoader::found_GL_ARB_separate_shader_objects) { -#ifndef ENABLE_GLES - program = gl_CreateShaderProgramv(type, shader_nb, sources); -#endif + program = glCreateShaderProgramv(type, shader_nb, sources); } else { - program = gl_CreateShader(type); - gl_ShaderSource(program, shader_nb, sources, NULL); - gl_CompileShader(program); + program = glCreateShader(type); + glShaderSource(program, shader_nb, sources, NULL); + glCompileShader(program); } bool status; @@ -422,11 +289,70 @@ return program; } +// This function will get the binary program. Normally it must be used a caching +// solution but Nvidia also incorporates the ASM dump. Asm is nice because it allow +// to have an overview of the program performance based on the instruction number +// Note: initially I was using cg offline compiler but it doesn't support latest +// GLSL improvement (unfortunately). +int GSShaderOGL::DumpAsm(const std::string& file, GLuint p) +{ + if (!GLLoader::nvidia_buggy_driver) return 0; + + GLint binaryLength; + glGetProgramiv(p, GL_PROGRAM_BINARY_LENGTH, &binaryLength); + + char* binary = new char[binaryLength+4]; + GLenum binaryFormat; + glGetProgramBinary(p, binaryLength, NULL, &binaryFormat, binary); + + FILE* outfile = fopen(file.c_str(), "w"); + ASSERT(outfile); + + // Search the magic number "!!" + int asm_ = 0; + while (asm_ < binaryLength && (binary[asm_] != '!' || binary[asm_+1] != '!')) { + asm_ += 1; + } + + int instructions = -1; + if (asm_ < binaryLength) { + // Now print asm as text + char* asm_txt = strtok(&binary[asm_], "\n"); + while (asm_txt != NULL && (strncmp(asm_txt, "END", 3) || !strncmp(asm_txt, "ENDIF", 5))) { + if (!strncmp(asm_txt, "OUT", 3) || !strncmp(asm_txt, "TEMP", 4) || !strncmp(asm_txt, "LONG", 4)) { + instructions = 0; + } else if (instructions >= 0) { + if (instructions == 0) + fprintf(outfile, "\n"); + instructions++; + } + + fprintf(outfile, "%s\n", asm_txt); + asm_txt = strtok(NULL, "\n"); + } + fprintf(outfile, "\nFound %d instructions\n", instructions); + } + fclose(outfile); + + if (instructions < 0) { + // RAW dump in case of error + fprintf(stderr, "Error: failed to find the number of instructions!\n"); + outfile = fopen(file.c_str(), "wb"); + fwrite(binary, binaryLength, 1, outfile); + fclose(outfile); + ASSERT(0); + } + + delete[] binary; + + return instructions; +} + void GSShaderOGL::Delete(GLuint s) { if (GLLoader::found_GL_ARB_separate_shader_objects) { - gl_DeleteProgram(s); + glDeleteProgram(s); } else { - gl_DeleteShader(s); + glDeleteShader(s); } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSShaderOGL.h pcsx2-1.4.0/plugins/GSdx/GSShaderOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSShaderOGL.h 2014-10-01 07:50:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSShaderOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -25,14 +25,6 @@ GLuint m_pipeline; hash_map m_single_prog; const bool m_debug_shader; - GLuint m_vs_sub_count; - GLuint m_ps_sub_count; - - GLuint m_vs_sub[1]; - GLuint m_ps_sub[5]; - - void SetupSubroutineUniform(); - void SetupRessources(); bool ValidateShader(GLuint p); bool ValidateProgram(GLuint p); @@ -46,14 +38,14 @@ ~GSShaderOGL(); void GS(GLuint s); - void PS(GLuint s, GLuint sub_count = 0); - void PS_subroutine(GLuint *sub); - void PS_ressources(GLuint64 handle[2]); - void VS(GLuint s, GLuint sub_count = 0); - void VS_subroutine(GLuint *sub); + void PS(GLuint s); + void VS(GLuint s); void UseProgram(); GLuint Compile(const std::string& glsl_file, const std::string& entry, GLenum type, const char* glsl_h_code, const std::string& macro_sel = ""); + + int DumpAsm(const std::string& file, GLuint p); + void Delete(GLuint s); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSState.cpp pcsx2-1.4.0/plugins/GSdx/GSState.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSState.cpp 2014-12-12 21:31:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSState.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -25,6 +25,8 @@ //#define Offset_ST // Fixes Persona3 mini map alignment which is off even in software rendering +static int s_crc_hack_level = 3; + GSState::GSState() : m_version(6) , m_mt(false) @@ -38,22 +40,37 @@ , m_crc(0) , m_options(0) , m_frameskip(0) + , m_crcinited(false) { - m_nativeres = !!theApp.GetConfig("nativeres", 1); + m_nativeres = theApp.GetConfig("upscale_multiplier",1) == 1; + m_mipmap = !!theApp.GetConfig("mipmap", 1); - s_n = 0; - s_dump = !!theApp.GetConfig("dump", 0); - s_save = !!theApp.GetConfig("save", 0); + s_n = 0; + s_dump = !!theApp.GetConfig("dump", 0); + s_save = !!theApp.GetConfig("save", 0); + s_savet = !!theApp.GetConfig("savet", 0); s_savez = !!theApp.GetConfig("savez", 0); + s_savef = !!theApp.GetConfig("savef", 0); s_saven = theApp.GetConfig("saven", 0); + s_savel = theApp.GetConfig("savel", 5000); +#ifdef __linux__ + if (s_dump) { + GSmkdir("/tmp/GS_HW_dump"); + GSmkdir("/tmp/GS_SW_dump"); + } +#endif //s_dump = 1; //s_save = 1; //s_savez = 1; + //s_savet = 1; + //s_savef = 1; + //s_saven = 0; + //s_savel = 0; - UserHacks_AggressiveCRC = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_AggressiveCRC", 0) : 0; - UserHacks_DisableCrcHacks = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig( "UserHacks_DisableCrcHacks", 0 ) : 0; UserHacks_WildHack = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_WildHack", 0) : 0; + m_crc_hack_level = theApp.GetConfig("crc_hack_level", 3); + s_crc_hack_level = m_crc_hack_level; memset(&m_v, 0, sizeof(m_v)); memset(&m_vertex, 0, sizeof(m_vertex)); @@ -332,45 +349,52 @@ GSVector4i GSState::GetDisplayRect(int i) { if(i < 0) i = IsEnabled(1) ? 1 : 0; - + int height = m_regs->DISP[i].DISPLAY.DH + 1; + int width = m_regs->DISP[i].DISPLAY.DW + 1; GSVector4i r; + //Some games (such as Pool Paradise) use alternate line reading and provide a massive height which is really half. + if (height > 640) + { + height /= 2; + } + + r.left = m_regs->DISP[i].DISPLAY.DX / (m_regs->DISP[i].DISPLAY.MAGH + 1); r.top = m_regs->DISP[i].DISPLAY.DY / (m_regs->DISP[i].DISPLAY.MAGV + 1); - r.right = r.left + (m_regs->DISP[i].DISPLAY.DW + 1) / (m_regs->DISP[i].DISPLAY.MAGH + 1); - r.bottom = r.top + (m_regs->DISP[i].DISPLAY.DH + 1) / (m_regs->DISP[i].DISPLAY.MAGV + 1); - + r.right = r.left + width / (m_regs->DISP[i].DISPLAY.MAGH + 1); + r.bottom = r.top + height / (m_regs->DISP[i].DISPLAY.MAGV + 1); + return r; } // There's a problem when games expand/shrink and relocate the visible area since GSdx doesn't support -// moving the output area. (Disgaea 2 intro FMV when upscaling is used, also those games hackfixed below.) +// moving the output area. (Disgaea 2 intro FMV when upscaling is used). GSVector4i GSState::GetFrameRect(int i) { - if(i < 0) i = IsEnabled(1) ? 1 : 0; + if (i < 0) i = IsEnabled(1) ? 1 : 0; GSVector4i r = GetDisplayRect(i); int w = r.width(); int h = r.height(); - //Fixme: These games have an extra black bar at bottom of screen - if((m_game.title == CRC::DevilMayCry3 || m_game.title == CRC::SkyGunner) && (m_game.region == CRC::US || m_game.region == CRC::JP)) + if (m_regs->SMODE1.CMOD == 2 && h > 448) // NTSC: limit games to 448, higher value causes black borders on few games { - h = 448; // + h = 448; } - - if(m_regs->SMODE2.INT && m_regs->SMODE2.FFMD && h > 1) h >>= 1; - //Breaks Disgaea2 FMV borders + if (m_regs->SMODE2.INT && m_regs->SMODE2.FFMD && h > 1) h >>= 1; + + //watch Disgaea2 FMV borders when changing r.left = m_regs->DISP[i].DISPFB.DBX; r.top = m_regs->DISP[i].DISPFB.DBY; r.right = r.left + w; r.bottom = r.top + h; - + /*static GSVector4i old_r = (GSVector4i) 0; if ((old_r.left != r.left) || (old_r.right != r.right) || (old_r.top != r.top) || (old_r.right != r.right)){ - printf("w %d h %d left %d top %d right %d bottom %d\n",w,h,r.left,r.top,r.right,r.bottom); + printf("w %d h %d left %d top %d right %d bottom %d\n",w,h,r.left,r.top,r.right,r.bottom); } old_r = r;*/ @@ -436,10 +460,9 @@ return false; } -float GSState::GetFPS() +float GSState::GetTvRefreshRate() { - float base_rate = ((m_regs->SMODE1.CMOD & 1) ? 25 : (30/1.001f)); - return base_rate * (m_regs->SMODE2.INT ? 2 : 1); + return (m_regs->SMODE1.CMOD & 1) ? 50 : (60/1.001f); } // GIFPackedRegHandler* @@ -479,6 +502,10 @@ q = q.blend8(GSVector4i::cast(GSVector4::m_one), q == GSVector4i::zero()); // character shadow in Vexx, q = 0 (st also 0 on the first 16 vertices), setting it to 1.0f to avoid div by zero later *(int*)&m_q = GSVector4i::store(q); + + ASSERT(!std::isnan(m_q)); // See GIFRegHandlerRGBAQ + ASSERT(!std::isnan(m_v.ST.S)); // See GIFRegHandlerRGBAQ + ASSERT(!std::isnan(m_v.ST.T)); // See GIFRegHandlerRGBAQ #ifdef Offset_ST GIFRegTEX0 TEX0 = m_context->TEX0; @@ -681,15 +708,32 @@ { GSVector4i rgbaq = (GSVector4i)r->RGBAQ; - rgbaq = rgbaq.upl32(rgbaq.blend8(GSVector4i::cast(GSVector4::m_one), rgbaq == GSVector4i::zero()).yyyy()); // see GIFPackedRegHandlerSTQ + GSVector4i q = rgbaq.blend8(GSVector4i::cast(GSVector4::m_one), rgbaq == GSVector4i::zero()).yyyy(); // see GIFPackedRegHandlerSTQ + + // Silent Hill output a nan in Q to emulate the flash light. Unfortunately it + // breaks GSVertexTrace code that rely on min/max. + + q = GSVector4i::cast(GSVector4::cast(q).replace_nan(GSVector4::m_max)); + + m_v.RGBAQ = rgbaq.upl32(q); - m_v.RGBAQ = rgbaq; + /* + // Silent Hill output a nan in Q to emulate the flash light. Unfortunately it + // breaks GSVertexTrace code that rely on min/max. + if (std::isnan(m_v.RGBAQ.Q)) + { + m_v.RGBAQ.Q = std::numeric_limits::max(); + } + */ } void GSState::GIFRegHandlerST(const GIFReg* RESTRICT r) { m_v.ST = (GSVector4i)r->ST; + ASSERT(!std::isnan(m_v.ST.S)); // See GIFRegHandlerRGBAQ + ASSERT(!std::isnan(m_v.ST.T)); // See GIFRegHandlerRGBAQ + #ifdef Offset_ST GIFRegTEX0 TEX0 = m_context->TEX0; m_v.ST.S -= 0.02f * m_q / (1 << TEX0.TW); @@ -1412,7 +1456,7 @@ __assume(0); } - ASSERT(unused < GSUtil::GetVertexCount(PRIM->PRIM)); + ASSERT((int)unused < GSUtil::GetVertexCount(PRIM->PRIM)); } if(GSLocalMemory::m_psm[m_context->FRAME.PSM].fmt < 3 && GSLocalMemory::m_psm[m_context->ZBUF.PSM].fmt < 3) @@ -1462,6 +1506,11 @@ return; } + GL_CACHE("Write! ... => 0x%x W:%d F:%d (DIR %d%d), dPos(%d %d) size(%d %d)", + m_env.BITBLTBUF.DBP, m_env.BITBLTBUF.DBW, m_env.BITBLTBUF.DPSM, + m_env.TRXPOS.DIRX, m_env.TRXPOS.DIRY, + m_env.TRXPOS.DSAX, m_env.TRXPOS.DSAY, w, h); + if(PRIM->TME && (m_env.BITBLTBUF.DBP == m_context->TEX0.TBP0 || m_env.BITBLTBUF.DBP == m_context->TEX0.CBP)) // TODO: hmmmm { FlushPrim(); @@ -1578,6 +1627,12 @@ int w = m_env.TRXREG.RRW; int h = m_env.TRXREG.RRH; + GL_CACHE("Move! 0x%x W:%d F:%d => 0x%x W:%d F:%d (DIR %d%d), sPos(%d %d) dPos(%d %d) size(%d %d)", + m_env.BITBLTBUF.SBP, m_env.BITBLTBUF.SBW, m_env.BITBLTBUF.SPSM, + m_env.BITBLTBUF.DBP, m_env.BITBLTBUF.DBW, m_env.BITBLTBUF.DPSM, + m_env.TRXPOS.DIRX, m_env.TRXPOS.DIRY, + sx, sy, dx, dy, w, h); + InvalidateLocalMem(m_env.BITBLTBUF, GSVector4i(sx, sy, sx + w, sy + h)); InvalidateVideoMem(m_env.BITBLTBUF, GSVector4i(dx, dy, dx + w, dy + h)); @@ -1811,8 +1866,6 @@ template void GSState::Transfer<2>(const uint8* mem, uint32 size); template void GSState::Transfer<3>(const uint8* mem, uint32 size); -static hash_map s_tags; - template void GSState::Transfer(const uint8* mem, uint32 size) { GSPerfMonAutoTimer pmat(&m_perfmon); @@ -1827,16 +1880,6 @@ { path.SetTag(mem); - if(0) - { - GIFTag* t = (GIFTag*)mem; - uint64 hash; - if(t->NREG < 8) hash = t->u32[2] & ((1 << t->NREG * 4) - 1); - else if(t->NREG < 16) {hash = t->u32[2]; ((uint32*)&hash)[1] = t->u32[3] & ((1 << (t->NREG - 8) * 4) - 1);} - else hash = t->u64[1]; - s_tags[hash] += path.nloop * path.nreg; - } - mem += sizeof(GIFTag); size--; @@ -2276,7 +2319,7 @@ { m_crc = crc; m_options = options; - m_game = CRC::Lookup(UserHacks_DisableCrcHacks ? 0 : crc); + m_game = CRC::Lookup(m_crc_hack_level ? crc : 0); } // @@ -2583,6 +2626,8 @@ void GSState::GetTextureMinMax(GSVector4i& r, const GIFRegTEX0& TEX0, const GIFRegCLAMP& CLAMP, bool linear) { + // TODO: some of the +1s can be removed if linear == false + int tw = TEX0.TW; int th = TEX0.TH; @@ -2653,6 +2698,7 @@ int mask = 0; // See commented code below for the meaning of mask + if(wms == CLAMP_REPEAT || wmt == CLAMP_REPEAT) { u = uv & GSVector4i::xffffffff().srl32(32 - tw); @@ -2724,6 +2770,7 @@ // This really shouldn't happen now except with the clamping region set entirely outside the texture, // special handling should be written for that case. + if(vr.rempty()) { // NOTE: this can happen when texcoords are all outside the texture or clamping area is zero, but we can't @@ -2731,6 +2778,7 @@ // examples: // - THPS (no visible problems) // - NFSMW (strange rectangles on screen, might be unrelated) + // - Lupin 3rd (huge problems, textures sizes seem to be randomly specified) vr = (vr + GSVector4i(-1, +1).xxyy()).rintersect(tr); } @@ -2923,11 +2971,17 @@ return context->ALPHA.IsOpaque(amin, amax); } +bool GSState::IsMipMapActive() +{ + return m_mipmap && m_context->TEX1.MXL > 0 && m_context->TEX1.MMIN >= 2 && m_context->TEX1.MMIN <= 5 && m_vt.m_lod.y > 0; +} + // GSTransferBuffer GSState::GSTransferBuffer::GSTransferBuffer() { x = y = 0; + overflow = false; start = end = total = 0; buff = (uint8*)_aligned_malloc(1024 * 1024 * 4, 32); } @@ -2971,6 +3025,8 @@ } // hacks +#define Aggresive (s_crc_hack_level > 3) +#define Dx_only (s_crc_hack_level > 2) struct GSFrameInfo { @@ -2985,9 +3041,8 @@ typedef bool (*GetSkipCount)(const GSFrameInfo& fi, int& skip); CRC::Region g_crc_region = CRC::NoRegion; -int g_aggressive = 0; -bool GSC_Okami(const GSFrameInfo& fi, int& skip) +bool GSC_Okami(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3009,6 +3064,7 @@ bool GSC_MetalGearSolid3(const GSFrameInfo& fi, int& skip) { + // Game requires sub RT support (texture cache limitation) if(skip == 0) { if(fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSM_PSMCT24) @@ -3081,7 +3137,11 @@ } else if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00e00 || fi.FBP == 0x01000) && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMZ16) { - skip = 5; + // Texture shuffling must work on openGL + if (Dx_only) + skip = 5; + else + return false; } else if(fi.TME && fi.FPSM == fi.TPSM && fi.TBP0 == 0x03f00 && fi.TPSM == PSM_PSMCT32) { @@ -3099,7 +3159,7 @@ return true; } -bool GSC_SFEX3(const GSFrameInfo& fi, int& skip) +bool GSC_SFEX3(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3112,7 +3172,7 @@ return true; } -bool GSC_Bully(const GSFrameInfo& fi, int& skip) +bool GSC_Bully(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3154,12 +3214,13 @@ return true; } + bool GSC_SoTC(const GSFrameInfo& fi, int& skip) { // Not needed anymore? What did it fix anyway? (rama) if(skip == 0) { - if(g_aggressive && fi.TME /*&& fi.FBP == 0x03d80*/ && fi.FPSM == 0 && fi.TBP0 == 0x03fc0 && fi.TPSM == 1) + if(Aggresive && fi.TME /*&& fi.FBP == 0x03d80*/ && fi.FPSM == 0 && fi.TBP0 == 0x03fc0 && fi.TPSM == 1) { skip = 48; //removes sky bloom } @@ -3185,7 +3246,7 @@ return true; } -bool GSC_OnePieceGrandAdventure(const GSFrameInfo& fi, int& skip) +bool GSC_OnePieceGrandAdventure(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3198,7 +3259,7 @@ return true; } -bool GSC_OnePieceGrandBattle(const GSFrameInfo& fi, int& skip) +bool GSC_OnePieceGrandBattle(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3223,7 +3284,7 @@ { skip = 1; } - else if( g_aggressive && fi.TME && fi.FBP == 0x0800 && (fi.TBP0 == 0x2800 || fi.TBP0 ==0x2c00) && fi.TPSM ==0 && fi.FBMSK == 0) + else if( Aggresive && fi.TME && fi.FBP == 0x0800 && (fi.TBP0 == 0x2800 || fi.TBP0 ==0x2c00) && fi.TPSM ==0 && fi.FBMSK == 0) { skip = 1; } @@ -3241,6 +3302,7 @@ bool GSC_GT4(const GSFrameInfo& fi, int& skip) { + // Game requires to extract source from RT (block boundary) (texture cache limitation) if(skip == 0) { if(fi.TME && fi.FBP >= 0x02f00 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180 /*|| fi.TBP0 == 0x01a40*/) && fi.TPSM == PSM_PSMT8) //TBP0 0x1a40 progressive @@ -3263,6 +3325,7 @@ bool GSC_GT3(const GSFrameInfo& fi, int& skip) { + // Same issue as GSC_GT4 ??? if(skip == 0) { if(fi.TME && fi.FBP >= 0x02de0 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180) && fi.TPSM == PSM_PSMT8) @@ -3276,6 +3339,7 @@ bool GSC_GTConcept(const GSFrameInfo& fi, int& skip) { + // Same issue as GSC_GT4 ??? if(skip == 0) { if(fi.TME && fi.FBP >= 0x03420 && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01400) && fi.TPSM == PSM_PSMT8) @@ -3377,7 +3441,7 @@ { skip = 176; } - else if(fi.TME && fi.FBP ==0x03100 && (fi.TBP0==0x2a00 ||fi.TBP0==0x3480) && fi.TPSM ==0 && fi.FBMSK == 0) + else if(fi.TME && fi.FBP ==0x03100 && (fi.TBP0==0x2a00 ||fi.TBP0==0x3480) && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0) { skip = 1; } @@ -3391,7 +3455,7 @@ //Fix Sacred Blaze rendering glitches if(skip == 0) { - if(fi.TME && (fi.FBP==0x0000 || fi.FBP==0x0e00) && (fi.TBP0==0x2880 || fi.TBP0==0x2a80 ) && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.TPSM ==0 && fi.FBMSK == 0x0) + if(fi.TME && (fi.FBP==0x0000 || fi.FBP==0x0e00) && (fi.TBP0==0x2880 || fi.TBP0==0x2a80 ) && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x0) { skip = 1; } @@ -3399,11 +3463,32 @@ return true; } +template +bool GSC_SMTNocturneDDS(const GSFrameInfo& fi, int& skip) +{ + // stop the motion blur on the main character and + // smudge filter from being drawn on USA versions of + // Nocturne, Digital Devil Saga 1 and Digital Devil Saga 2 + + if(Aggresive && g_crc_region == CRC::US && skip == 0 && fi.TBP0 == 0xE00 && fi.TME) + { + // Note: it will crash if the core doesn't allocate the EE mem in 0x2000_0000 (unlikely but possible) + // Aggresive hacks are evil anyway + + // Nocturne: + // -0x5900($gp), ref at 0x100740 + const int state = *(int*)(state_addr); + if (state == 23 || state == 24 || state == 25) + skip = 1; + } + return true; +} + bool GSC_Spartan(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(g_crc_region == CRC::NoRegion &&fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) + if(g_crc_region == CRC::EU &&fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSM_PSMCT32) { skip = 107; } @@ -3446,25 +3531,6 @@ return true; } -bool GSC_Drakengard2(const GSFrameInfo& fi, int& skip) -{ - // Below hack breaks the GUI - - /*if(skip == 0) - { - if(g_crc_region == CRC::CH && fi.TME && fi.FBP == 0x026c0 && fi.TBP0 == 0x00a00 && fi.FPSM ==2) - { - skip =34; - } - if((g_crc_region == CRC::US || g_crc_region == CRC::EU) && fi.TME && fi.FBP == 0x026c0 && fi.FPSM == PSM_PSMCT32 && fi.TBP0 == 0x00a00 && fi.TPSM == PSM_PSMCT32) - { - skip = 64; - } - }*/ - - return true; -} - bool GSC_Tekken5(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -3514,7 +3580,7 @@ return true; } -bool GSC_GodOfWar(const GSFrameInfo& fi, int& skip) +bool GSC_GodOfWar(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3530,6 +3596,12 @@ { skip = 1; // wall of fog } + else if (fi.TME && (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S)) + { + // Equivalent to the UserHacks_AutoSkipDrawDepth hack but enabled by default + // http://forums.pcsx2.net/Thread-God-of-War-Red-line-rendering-explained + skip = 1; + } } else { @@ -3542,7 +3614,7 @@ return true; } -bool GSC_GodOfWar2(const GSFrameInfo& fi, int& skip) +bool GSC_GodOfWar2(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3559,14 +3631,20 @@ { skip = 1; // wall of fog } - else if(g_aggressive && fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x1300 ) && (fi.TBP0 ==0x0F00 || fi.TBP0 ==0x1300 || fi.TBP0==0x2b00)) // || fi.FBP == 0x0100 + else if(Aggresive && fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x1300 ) && (fi.TBP0 ==0x0F00 || fi.TBP0 ==0x1300 || fi.TBP0==0x2b00)) // || fi.FBP == 0x0100 { skip = 1; // global haze/halo } - else if(g_aggressive && fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x0100 ) && (fi.TBP0==0x2b00 || fi.TBP0==0x2e80)) //480P 2e80 + else if(Aggresive && fi.TPSM == PSM_PSMCT24 && fi.TME && (fi.FBP ==0x0100 ) && (fi.TBP0==0x2b00 || fi.TBP0==0x2e80)) //480P 2e80 { skip = 1; // water effect and water vertical lines } + else if (fi.TME && (fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S)) + { + // Equivalent to the UserHacks_AutoSkipDrawDepth hack but enabled by default + // http://forums.pcsx2.net/Thread-God-of-War-Red-line-rendering-explained + skip = 1; + } } } else @@ -3580,7 +3658,7 @@ return true; } -bool GSC_GiTS(const GSFrameInfo& fi, int& skip) +bool GSC_GiTS(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3630,7 +3708,7 @@ return true; } -bool GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip) +bool GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3650,7 +3728,7 @@ return true; } -bool GSC_SimpsonsGame(const GSFrameInfo& fi, int& skip) +bool GSC_SimpsonsGame(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3679,7 +3757,11 @@ { if(fi.TME && fi.FBP == 0x01500 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x00e00 && fi.TPSM == PSM_PSMZ16) { - skip = 6; + // likely fixed in openGL (texture shuffle) + if (Dx_only) + skip = 6; + else + return false; } else if(fi.TPSM == PSM_PSMCT24 && fi.TME ==0x0001 && fi.TBP0==fi.FBP) { @@ -3697,8 +3779,21 @@ return true; } -bool GSC_StarOcean3(const GSFrameInfo& fi, int& skip) +bool GSC_StarOcean3(const GSFrameInfo& fi, int& skip) // DX ONLY { + // The game emulate a stencil buffer with the alpha channel of the RT + // The operation of the stencil is selected with the palette + // For example -1 wrap will be [240, 16, 32, 48 ....] + // i.e. p[A>>4] = (A - 16) % 256 + // + // The fastest and accurate solution will be to replace this pseudo stencil + // by a dedicated GPU draw call + // 1/ Use future GPU capabilities to do a "kind" of SW blending + // 2/ Use a real stencil/atomic image, and then compute the RT alpha value + // + // Both of those solutions will increase code complexity (and only avoid upscaling + // glitches) + if(skip == 0) { if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) @@ -3717,7 +3812,7 @@ return true; } -bool GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip) +bool GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3731,6 +3826,7 @@ }*/ if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) { + // GH: Hack is quite similar to GSC_StarOcean3. It is potentially the same issue. skip = 1000; // } } @@ -3745,7 +3841,7 @@ return true; } -bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip) +bool GSC_RadiataStories(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3755,6 +3851,8 @@ } else if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSM_PSMCT32 && fi.TPSM == PSM_PSMT4HH) { + // GH: Hack is quite similar to GSC_StarOcean3. It is potentially the same issue. + // Fixed on openGL skip = 1000; } } @@ -3775,7 +3873,10 @@ { if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16S && fi.FBMSK == 0x03FFF) { - skip = 1; + if (Dx_only) + skip = 1; + else + return false; } else if(fi.TME && fi.FBP == 0x3000 && fi.TBP0 == 0x3380) { @@ -3817,7 +3918,7 @@ return true; } -bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip) +bool GSC_SuikodenTactics(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3904,11 +4005,11 @@ return true; } - bool GSC_EternalPoison(const GSFrameInfo& fi, int& skip) { if(skip == 0) { + // Texture shuffle ??? if(fi.TPSM == PSM_PSMCT16S && fi.TBP0 == 0x3200) { skip = 1; @@ -3917,9 +4018,9 @@ return true; } -bool GSC_LegoBatman(const GSFrameInfo& fi, int& skip) +bool GSC_LegoBatman(const GSFrameInfo& fi, int& skip) // DX ONLY { - if(g_aggressive && skip == 0) + if(Aggresive && skip == 0) { if(fi.TME && fi.TPSM == PSM_PSMZ16 && fi.FPSM == PSM_PSMCT16 && fi.FBMSK == 0x00000) { @@ -3961,7 +4062,7 @@ return true; } -bool GSC_Tenchu(const GSFrameInfo& fi, int& skip) +bool GSC_Tenchu(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3974,7 +4075,7 @@ return true; } -bool GSC_Sly3(const GSFrameInfo& fi, int& skip) +bool GSC_Sly3(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -3994,7 +4095,7 @@ return true; } -bool GSC_Sly2(const GSFrameInfo& fi, int& skip) +bool GSC_Sly2(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4026,7 +4127,7 @@ { skip = 1; } - else if(fi.TME && (fi.FBP >=0x0) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 ==0x0160 ||fi.TBP0==0x01e0 || fi.TBP0<=0x0800) && fi.TPSM == PSM_PSMT8) + else if(fi.TME && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 ==0x0160 ||fi.TBP0==0x01e0 || fi.TBP0<=0x0800) && fi.TPSM == PSM_PSMT8) { skip = 1; } @@ -4041,7 +4142,7 @@ bool GSC_FFXII(const GSFrameInfo& fi, int& skip) { - if(g_aggressive && skip == 0) + if(Aggresive && skip == 0) { if(fi.TME) { @@ -4059,7 +4160,7 @@ bool GSC_FFX2(const GSFrameInfo& fi, int& skip) { - if(g_aggressive && skip == 0) + if(Aggresive && skip == 0) { if(fi.TME) { @@ -4077,7 +4178,7 @@ bool GSC_FFX(const GSFrameInfo& fi, int& skip) { - if(g_aggressive && skip == 0) + if(Aggresive && skip == 0) { if(fi.TME) { @@ -4093,19 +4194,7 @@ return true; } -bool GSC_ArctheLad(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - /*if(fi.TPSM == PSM_PSMT8H && fi.FBMSK >= 0xFFFFFFF) - { - skip = 1; - }*/ - } - return true; -} - -bool GSC_DemonStone(const GSFrameInfo& fi, int& skip) +bool GSC_DemonStone(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4125,7 +4214,7 @@ return true; } -bool GSC_BigMuthaTruckers(const GSFrameInfo& fi, int& skip) +bool GSC_BigMuthaTruckers(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4151,21 +4240,7 @@ return true; } -bool GSC_ReZ(const GSFrameInfo& fi, int& skip) -{ - //not needed anymore - /*if(skip == 0) - { - if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x008c0 || fi.FBP == 0x00a00) && fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT32) - { - skip = 1; - } - }*/ - - return true; -} - -bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip) +bool GSC_LordOfTheRingsTwoTowers(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4270,10 +4345,22 @@ return true; } -bool GSC_Castlevania(const GSFrameInfo& fi, int& skip) +bool GSC_Castlevania(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { + // This hack removes the shadows and globally darker image + // I think there are 2 issues on GSdx + // + // 1/ potential not correctly supported colclip. + // + // 2/ use of a 32 bits format to emulate a 16 bit formats + // For example, if you blend 64 time the value 4 on a dark destination pixels + // + // FMT32: 4*64 = 256 <= white pixels + // + // FMT16: output of blending will always be 0 because the 3 lsb of color is dropped. + // Therefore the pixel remains dark !!! if(fi.TME && fi.FBP == 0 && fi.TBP0 && fi.TPSM == 10 && fi.FBMSK == 0xFFFFFF) { skip = 2; @@ -4287,6 +4374,7 @@ { if(skip == 0) { + // Note: the first part of the hack must be fixed in openGL (texture shuffle). Remains the 2nd part (HasSharedBits) if(fi.TME /*&& (fi.FBP == 0x00000 || fi.FBP == 0x008c0)*/ && fi.FPSM == PSM_PSMCT16 && (fi.TBP0 == 0x01a40 || fi.TBP0 == 0x01b80 || fi.TBP0 == 0x030c0) && fi.TPSM == PSM_PSMZ16 || (GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM))) { skip = 5; @@ -4380,7 +4468,7 @@ bool GSC_SSX3(const GSFrameInfo& fi, int& skip) { - if(g_aggressive && skip == 0) + if(Aggresive && skip == 0) { if(fi.TME) { @@ -4419,7 +4507,7 @@ if(skip == 0) { - if(fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) + if(Dx_only && fi.TME && fi.FBP == 0x01800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01000 && fi.TPSM == PSM_PSMZ16) { skip = 32; } @@ -4436,7 +4524,6 @@ return true; } - bool GSC_StarWarsForceUnleashed(const GSFrameInfo& fi, int& skip) { if(skip == 0) @@ -4492,7 +4579,7 @@ { if(skip == 0) { - if(fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01800 && fi.TPSM == PSM_PSMZ16) + if(Dx_only && fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSM_PSMCT16 && fi.TBP0 == 0x01800 && fi.TPSM == PSM_PSMZ16) { skip = 2; //wall of fog } @@ -4515,6 +4602,8 @@ } else if(fi.TME && fi.FPSM == PSM_PSMCT16 && fi.TPSM == PSM_PSMZ16) //fog { + if (!Dx_only) return false; + if(fi.FBP == 0x00a00 && fi.TBP0 == 0x01e00) { skip = 4; //pal @@ -4546,7 +4635,7 @@ return true; } -bool GSC_SpyroNewBeginning(const GSFrameInfo& fi, int& skip) +bool GSC_SpyroNewBeginning(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4559,7 +4648,7 @@ return true; } -bool GSC_SpyroEternalNight(const GSFrameInfo& fi, int& skip) +bool GSC_SpyroEternalNight(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -4738,6 +4827,8 @@ } else if((fi.FBP | fi.TBP0)&& fi.FPSM == fi.TPSM && fi.TPSM == PSM_PSMCT16 && fi.FBMSK == 0x3FFF) { + // Note start of the effect (texture shuffle) is fixed in openGL but maybe not the extra draw + // call.... skip = 1000; } @@ -4805,7 +4896,7 @@ return true; } -bool GSC_XE3(const GSFrameInfo& fi, int& skip) +bool GSC_XE3(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -5006,7 +5097,7 @@ { if(skip == 0) { - if(!fi.TME && fi.FBP == 0 && fi.TBP0>=0 && (fi.TPSM >= 0 ) && (fi.FBMSK ==0x0001 ||fi.FBMSK == 0x00FFFFFF)) + if(!fi.TME && fi.FBP == 0 && (fi.FBMSK ==0x0001 ||fi.FBMSK == 0x00FFFFFF)) { skip = 2; } @@ -5041,7 +5132,7 @@ return true; } -bool GSC_Grandia3(const GSFrameInfo& fi, int& skip) +bool GSC_Grandia3(const GSFrameInfo& fi, int& skip) // DX ONLY { if(skip == 0) { @@ -5072,7 +5163,7 @@ { if(skip == 0) { - if(fi.TME && (fi.FBP >= 0) && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x2bc0 || fi.TBP0 <= 0x0200) && (fi.FBMSK==0xFF000000 ||fi.FBMSK==0x00FFFFFF)) + if(fi.TME && fi.FPSM == PSM_PSMCT32 && (fi.TBP0 == 0x2bc0 || fi.TBP0 <= 0x0200) && (fi.FBMSK==0xFF000000 ||fi.FBMSK==0x00FFFFFF)) { skip = 1; //fi.FBMSK==0 } @@ -5138,11 +5229,12 @@ } return true; } + bool GSC_UrbanReign(const GSFrameInfo& fi, int& skip) { if(skip == 0) { - if(fi.TME && fi.FBP==0x0000 && fi.TBP0==0x3980 && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.TPSM ==0 && fi.FBMSK == 0x0) + if(fi.TME && fi.FBP==0x0000 && fi.TBP0==0x3980 && fi.FPSM==fi.TPSM && fi.TPSM == PSM_PSMCT32 && fi.FBMSK == 0x0) { skip = 1; } @@ -5165,7 +5257,7 @@ { skip=100;//deletes most others(too high deletes the buggy sea completely;c, too low causes glitches to be visible) } - else if(g_aggressive && fi.FBP != 0)//Agressive CRC + else if(Aggresive && fi.FBP != 0)//Agressive CRC { skip=19;//"speedhack", makes the game very light, vaporized water can disappear when not looked at directly, possibly some interface still, other value to try: 6 breaks menu background, possibly nothing(?) during gameplay, but it's slower, hence not much of a speedhack anymore } @@ -5174,6 +5266,8 @@ return true; } +#undef Agressive + #ifdef ENABLE_DYNAMIC_CRC_HACK #include @@ -5323,137 +5417,152 @@ fi.TZTST = m_context->TEST.ZTST; static GetSkipCount map[CRC::TitleCount]; - static bool inited = false; - if(!inited) + if (!m_crcinited) { - inited = true; + m_crcinited = true; memset(map, 0, sizeof(map)); - map[CRC::Okami] = GSC_Okami; - map[CRC::MetalGearSolid3] = GSC_MetalGearSolid3; - map[CRC::DBZBT2] = GSC_DBZBT2; - map[CRC::DBZBT3] = GSC_DBZBT3; - map[CRC::SFEX3] = GSC_SFEX3; - map[CRC::Bully] = GSC_Bully; - map[CRC::BullyCC] = GSC_BullyCC; - map[CRC::SoTC] = GSC_SoTC; - map[CRC::OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure; - map[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle; - map[CRC::ICO] = GSC_ICO; - map[CRC::GT4] = GSC_GT4; - map[CRC::GT3] = GSC_GT3; - map[CRC::GTConcept] = GSC_GTConcept; - map[CRC::WildArms4] = GSC_WildArms4; - map[CRC::WildArms5] = GSC_WildArms5; - map[CRC::Manhunt2] = GSC_Manhunt2; - map[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC; - map[CRC::ResidentEvil4] = GSC_ResidentEvil4; - map[CRC::Spartan] = GSC_Spartan; - map[CRC::AceCombat4] = GSC_AceCombat4; - map[CRC::Drakengard2] = GSC_Drakengard2; - map[CRC::Tekken5] = GSC_Tekken5; - map[CRC::IkkiTousen] = GSC_IkkiTousen; - map[CRC::GodOfWar] = GSC_GodOfWar; - map[CRC::GodOfWar2] = GSC_GodOfWar2; - map[CRC::GiTS] = GSC_GiTS; - map[CRC::Onimusha3] = GSC_Onimusha3; - map[CRC::TalesOfAbyss] = GSC_TalesOfAbyss; - map[CRC::SonicUnleashed] = GSC_SonicUnleashed; - map[CRC::SimpsonsGame] = GSC_SimpsonsGame; - map[CRC::Genji] = GSC_Genji; - map[CRC::StarOcean3] = GSC_StarOcean3; - map[CRC::ValkyrieProfile2] = GSC_ValkyrieProfile2; - map[CRC::RadiataStories] = GSC_RadiataStories; - map[CRC::HauntingGround] = GSC_HauntingGround; - map[CRC::EvangelionJo] = GSC_EvangelionJo; - map[CRC::SuikodenTactics] = GSC_SuikodenTactics; - map[CRC::CaptainTsubasa] = GSC_CaptainTsubasa; - map[CRC::Oneechanbara2Special] = GSC_Oneechanbara2Special; - map[CRC::NarutimateAccel] = GSC_NarutimateAccel; - map[CRC::Naruto] = GSC_Naruto; - map[CRC::EternalPoison] = GSC_EternalPoison; - map[CRC::LegoBatman] = GSC_LegoBatman; - map[CRC::SakuraTaisen] = GSC_SakuraTaisen; - map[CRC::TenchuWoH] = GSC_Tenchu; - map[CRC::TenchuFS] = GSC_Tenchu; - map[CRC::Sly3] = GSC_Sly3; - map[CRC::Sly2] = GSC_Sly2; - map[CRC::ShadowofRome] = GSC_ShadowofRome; - map[CRC::FFXII] = GSC_FFXII; - map[CRC::FFX2] = GSC_FFX2; - map[CRC::FFX] = GSC_FFX; - map[CRC::ArctheLad] = GSC_ArctheLad; - map[CRC::DemonStone] = GSC_DemonStone; - map[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers; - map[CRC::TimeSplitters2] = GSC_TimeSplitters2; - map[CRC::ReZ] = GSC_ReZ; - map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; - map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge; - map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; - map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; - map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; - map[CRC::CastlevaniaCoD] = GSC_Castlevania; - map[CRC::CastlevaniaLoI] = GSC_Castlevania; - map[CRC::CrashNburn] = GSC_CrashNburn; - map[CRC::TombRaiderUnderworld] = GSC_TombRaiderUnderWorld; - map[CRC::TombRaiderAnniversary] = GSC_TombRaider; - map[CRC::TombRaiderLegend] = GSC_TombRaiderLegend; - map[CRC::SSX3] = GSC_SSX3; - map[CRC::Black] = GSC_Black; - map[CRC::FFVIIDoC] = GSC_FFVIIDoC; - map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; - map[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront; - map[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2; - map[CRC::BlackHawkDown] = GSC_BlackHawkDown; - map[CRC::DevilMayCry3] = GSC_DevilMayCry3; - map[CRC::BurnoutTakedown] = GSC_Burnout; - map[CRC::BurnoutRevenge] = GSC_Burnout; - map[CRC::BurnoutDominator] = GSC_Burnout; - map[CRC::MidnightClub3] = GSC_MidnightClub3; - map[CRC::SpyroNewBeginning] = GSC_SpyroNewBeginning; - map[CRC::SpyroEternalNight] = GSC_SpyroEternalNight; - map[CRC::TalesOfLegendia] = GSC_TalesOfLegendia; - map[CRC::NanoBreaker] = GSC_NanoBreaker; - map[CRC::Kunoichi] = GSC_Kunoichi; - map[CRC::Yakuza] = GSC_Yakuza; - map[CRC::Yakuza2] = GSC_Yakuza2; - map[CRC::SkyGunner] = GSC_SkyGunner; - map[CRC::JamesBondEverythingOrNothing] = GSC_JamesBondEverythingOrNothing; - map[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2; - map[CRC::ShinOnimusha] = GSC_ShinOnimusha; - map[CRC::XE3] = GSC_XE3; - map[CRC::GetaWay] = GSC_GetaWay; - map[CRC::GetaWayBlackMonday] = GSC_GetaWay; - map[CRC::SakuraWarsSoLongMyLove] = GSC_SakuraWarsSoLongMyLove; - map[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong; - map[CRC::TouristTrophy] = GSC_TouristTrophy; - map[CRC::GTASanAndreas] = GSC_GTASanAndreas; - map[CRC::FrontMission5] = GSC_FrontMission5; - map[CRC::GodHand] = GSC_GodHand; - map[CRC::KnightsOfTheTemple2] = GSC_KnightsOfTheTemple2; - map[CRC::UltramanFightingEvolution] = GSC_UltramanFightingEvolution; - map[CRC::DeathByDegreesTekkenNinaWilliams] = GSC_DeathByDegreesTekkenNinaWilliams; - map[CRC::AlpineRacer3] = GSC_AlpineRacer3; - map[CRC::HummerBadlands] = GSC_HummerBadlands; - map[CRC::SengokuBasara] = GSC_SengokuBasara; - map[CRC::Grandia3] = GSC_Grandia3; - map[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; - map[CRC::TalesofSymphonia] = GSC_TalesofSymphonia; - map[CRC::SoulCalibur2] = GSC_SoulCalibur2; - map[CRC::SoulCalibur3] = GSC_SoulCalibur3; - map[CRC::Simple2000Vol114] = GSC_Simple2000Vol114; - map[CRC::UrbanReign] = GSC_UrbanReign; - map[CRC::SteambotChronicles] = GSC_SteambotChronicles; - map[CRC::SacredBlaze] = GSC_SacredBlaze; + if (s_crc_hack_level > 1) { + map[CRC::AceCombat4] = GSC_AceCombat4; + map[CRC::AlpineRacer3] = GSC_AlpineRacer3; + map[CRC::Black] = GSC_Black; + map[CRC::BlackHawkDown] = GSC_BlackHawkDown; + map[CRC::BleachBladeBattlers] = GSC_BleachBladeBattlers; + map[CRC::BullyCC] = GSC_BullyCC; // Bully is fixed, maybe this one too? + map[CRC::BurnoutDominator] = GSC_Burnout; + map[CRC::BurnoutRevenge] = GSC_Burnout; + map[CRC::BurnoutTakedown] = GSC_Burnout; + map[CRC::CaptainTsubasa] = GSC_CaptainTsubasa; + map[CRC::CrashBandicootWoC] = GSC_CrashBandicootWoC; + map[CRC::CrashNburn] = GSC_CrashNburn; + map[CRC::DBZBT2] = GSC_DBZBT2; + map[CRC::DBZBT3] = GSC_DBZBT3; + map[CRC::DeathByDegreesTekkenNinaWilliams] = GSC_DeathByDegreesTekkenNinaWilliams; + map[CRC::DevilMayCry3] = GSC_DevilMayCry3; + map[CRC::EternalPoison] = GSC_EternalPoison; + map[CRC::EvangelionJo] = GSC_EvangelionJo; + map[CRC::FFVIIDoC] = GSC_FFVIIDoC; + map[CRC::FightingBeautyWulong] = GSC_FightingBeautyWulong; + map[CRC::FinalFightStreetwise] = GSC_FinalFightStreetwise; + map[CRC::FrontMission5] = GSC_FrontMission5; + map[CRC::Genji] = GSC_Genji; + map[CRC::GetaWayBlackMonday] = GSC_GetaWay; + map[CRC::GetaWay] = GSC_GetaWay; + map[CRC::GodHand] = GSC_GodHand; + map[CRC::GT3] = GSC_GT3; + map[CRC::GT4] = GSC_GT4; + map[CRC::GTASanAndreas] = GSC_GTASanAndreas; + map[CRC::GTConcept] = GSC_GTConcept; + map[CRC::HauntingGround] = GSC_HauntingGround; + map[CRC::HeavyMetalThunder] = GSC_HeavyMetalThunder; + map[CRC::HummerBadlands] = GSC_HummerBadlands; + map[CRC::ICO] = GSC_ICO; + map[CRC::IkkiTousen] = GSC_IkkiTousen; + map[CRC::JamesBondEverythingOrNothing] = GSC_JamesBondEverythingOrNothing; + map[CRC::KnightsOfTheTemple2] = GSC_KnightsOfTheTemple2; + map[CRC::Kunoichi] = GSC_Kunoichi; + map[CRC::LordOfTheRingsThirdAge] = GSC_LordOfTheRingsThirdAge; + map[CRC::Manhunt2] = GSC_Manhunt2; + map[CRC::MetalGearSolid3] = GSC_MetalGearSolid3; + map[CRC::MidnightClub3] = GSC_MidnightClub3; + map[CRC::NanoBreaker] = GSC_NanoBreaker; + map[CRC::NarutimateAccel] = GSC_NarutimateAccel; + map[CRC::Naruto] = GSC_Naruto; + map[CRC::Oneechanbara2Special] = GSC_Oneechanbara2Special; + map[CRC::Onimusha3] = GSC_Onimusha3; + map[CRC::RedDeadRevolver] = GSC_RedDeadRevolver; + map[CRC::ResidentEvil4] = GSC_ResidentEvil4; + map[CRC::SacredBlaze] = GSC_SacredBlaze; + map[CRC::SakuraTaisen] = GSC_SakuraTaisen; + map[CRC::SakuraWarsSoLongMyLove] = GSC_SakuraWarsSoLongMyLove; + map[CRC::SengokuBasara] = GSC_SengokuBasara; + map[CRC::ShadowofRome] = GSC_ShadowofRome; + map[CRC::ShinOnimusha] = GSC_ShinOnimusha; + map[CRC::Simple2000Vol114] = GSC_Simple2000Vol114; + map[CRC::SkyGunner] = GSC_SkyGunner; + map[CRC::SoulCalibur2] = GSC_SoulCalibur2; + map[CRC::SoulCalibur3] = GSC_SoulCalibur3; + map[CRC::Spartan] = GSC_Spartan; + map[CRC::StarWarsBattlefront2] = GSC_StarWarsBattlefront2; + map[CRC::StarWarsBattlefront] = GSC_StarWarsBattlefront; + map[CRC::StarWarsForceUnleashed] = GSC_StarWarsForceUnleashed; + map[CRC::SteambotChronicles] = GSC_SteambotChronicles; + map[CRC::TalesOfAbyss] = GSC_TalesOfAbyss; + map[CRC::TalesOfLegendia] = GSC_TalesOfLegendia; + map[CRC::TalesofSymphonia] = GSC_TalesofSymphonia; + map[CRC::Tekken5] = GSC_Tekken5; + map[CRC::TimeSplitters2] = GSC_TimeSplitters2; + map[CRC::TombRaiderAnniversary] = GSC_TombRaider; + map[CRC::TombRaiderLegend] = GSC_TombRaiderLegend; + map[CRC::TombRaiderUnderworld] = GSC_TombRaiderUnderWorld; + map[CRC::TouristTrophy] = GSC_TouristTrophy; + map[CRC::UltramanFightingEvolution] = GSC_UltramanFightingEvolution; + map[CRC::UrbanReign] = GSC_UrbanReign; + map[CRC::WildArms4] = GSC_WildArms4; + map[CRC::WildArms5] = GSC_WildArms5; + map[CRC::Yakuza2] = GSC_Yakuza2; + map[CRC::Yakuza] = GSC_Yakuza; + map[CRC::ZettaiZetsumeiToshi2] = GSC_ZettaiZetsumeiToshi2; + // Only Aggresive + map[CRC::FFX2] = GSC_FFX2; + map[CRC::FFX] = GSC_FFX; + map[CRC::FFXII] = GSC_FFXII; + map[CRC::SMTDDS1] = GSC_SMTNocturneDDS<0x203BA820>; + map[CRC::SMTDDS2] = GSC_SMTNocturneDDS<0x20435BF0>; + map[CRC::SMTNocturne] = GSC_SMTNocturneDDS<0x2054E870>; + map[CRC::SoTC] = GSC_SoTC; + map[CRC::SSX3] = GSC_SSX3; + } + + // Hack that were fixed on openGL + if (Dx_only) { + map[CRC::Bully] = GSC_Bully; + map[CRC::GodOfWar2] = GSC_GodOfWar2; + map[CRC::LordOfTheRingsTwoTowers] = GSC_LordOfTheRingsTwoTowers; + map[CRC::Okami] = GSC_Okami; + map[CRC::SimpsonsGame] = GSC_SimpsonsGame; + map[CRC::SuikodenTactics] = GSC_SuikodenTactics; + map[CRC::XE3] = GSC_XE3; + + // Not tested but must be fixed with texture shuffle + map[CRC::BigMuthaTruckers] = GSC_BigMuthaTruckers; + map[CRC::DemonStone] = GSC_DemonStone; + map[CRC::GiTS] = GSC_GiTS; + map[CRC::LegoBatman] = GSC_LegoBatman; + map[CRC::OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure; + map[CRC::OnePieceGrandBattle] = GSC_OnePieceGrandBattle; + map[CRC::SFEX3] = GSC_SFEX3; + map[CRC::SpyroEternalNight] = GSC_SpyroEternalNight; + map[CRC::SpyroNewBeginning] = GSC_SpyroNewBeginning; + map[CRC::SonicUnleashed] = GSC_SonicUnleashed; + map[CRC::TenchuFS] = GSC_Tenchu; + map[CRC::TenchuWoH] = GSC_Tenchu; + + // Those games might requires accurate fbmask + map[CRC::Sly2] = GSC_Sly2; + map[CRC::Sly3] = GSC_Sly3; + + // Those games require accurate_colclip (perf) + map[CRC::CastlevaniaCoD] = GSC_Castlevania; + map[CRC::CastlevaniaLoI] = GSC_Castlevania; + map[CRC::GodOfWar] = GSC_GodOfWar; + + // Those games emulate a stencil buffer with the alpha channel of the RT (Slow) + map[CRC::RadiataStories] = GSC_RadiataStories; + map[CRC::StarOcean3] = GSC_StarOcean3; + map[CRC::ValkyrieProfile2] = GSC_ValkyrieProfile2; + + // Deprecated hack could be removed (Cutie) + map[CRC::Grandia3] = GSC_Grandia3; + } } // TODO: just set gsc in SetGameCRC once GetSkipCount gsc = map[m_game.title]; g_crc_region = m_game.region; - g_aggressive = UserHacks_AggressiveCRC; #ifdef ENABLE_DYNAMIC_CRC_HACK bool res=false; if(IsInvokedDynamicCrcHack(fi, skip, g_crc_region, res, m_crc)){ if( !res ) return false; } else @@ -5476,18 +5585,12 @@ } } } - // Mimic old GSdx behavior (skipping all depth textures with a skip value of 1), to avoid floods of bug reports - // that games are broken, when the user hasn't found the skiphack yet. (God of War, sigh...) - else if (skip == 0) - { - if(fi.TME) - { +#ifdef ENABLE_OGL_DEBUG + else if (fi.TME) { if(fi.TPSM == PSM_PSMZ32 || fi.TPSM == PSM_PSMZ24 || fi.TPSM == PSM_PSMZ16 || fi.TPSM == PSM_PSMZ16S) - { - skip = 1; - } - } + GL_INS("!!! Depth Texture 0x%x!!!", fi.TPSM); } +#endif if(skip > 0) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSState.h pcsx2-1.4.0/plugins/GSdx/GSState.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSState.h 2014-05-02 21:03:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSState.h 2016-01-05 17:28:08.000000000 +0000 @@ -142,10 +142,9 @@ protected: bool IsBadFrame(int& skip, int UserHacks_SkipDraw); - int UserHacks_AggressiveCRC; - int UserHacks_DisableCrcHacks; int UserHacks_WildHack; - bool isPackedUV_HackFlag; + bool isPackedUV_HackFlag; + int m_crc_hack_level; GSVertex m_v; float m_q; @@ -185,6 +184,7 @@ void GetAlphaMinMax(); bool TryAlphaTest(uint32& fm, uint32& zm); bool IsOpaque(); + bool IsMipMapActive(); public: GIFPath m_path[4]; @@ -197,16 +197,21 @@ uint32 m_crc; int m_options; int m_frameskip; + bool m_crcinited; bool m_framelimit; CRC::Game m_game; GSDump m_dump; bool m_nativeres; + bool m_mipmap; int s_n; bool s_dump; bool s_save; + bool s_savet; bool s_savez; + bool s_savef; int s_saven; + int s_savel; public: GSState(); @@ -220,7 +225,7 @@ bool IsEnabled(int i); - float GetFPS(); + float GetTvRefreshRate(); virtual void Reset(); virtual void Flush(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache11.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureCache11.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache11.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache11.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -50,7 +50,7 @@ return; } - if(!t->m_dirty.empty()) + if (!t->m_dirty.empty() || (r.width() == 0 && r.height() == 0)) { return; } @@ -72,19 +72,19 @@ { // TODO: block level write - GSOffset* o = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); + GSOffset* off = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); switch(TEX0.PSM) { case PSM_PSMCT32: - m_renderer->m_mem.WritePixel32(m.bits, m.pitch, o, r); + m_renderer->m_mem.WritePixel32(m.bits, m.pitch, off, r); break; case PSM_PSMCT24: - m_renderer->m_mem.WritePixel24(m.bits, m.pitch, o, r); + m_renderer->m_mem.WritePixel24(m.bits, m.pitch, off, r); break; case PSM_PSMCT16: case PSM_PSMCT16S: - m_renderer->m_mem.WritePixel16(m.bits, m.pitch, o, r); + m_renderer->m_mem.WritePixel16(m.bits, m.pitch, off, r); break; default: ASSERT(0); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache11.h pcsx2-1.4.0/plugins/GSdx/GSTextureCache11.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache11.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache11.h 2016-01-05 17:28:08.000000000 +0000 @@ -31,6 +31,8 @@ void Read(Target* t, const GSVector4i& r); + virtual bool CanConvertDepth() { return false; } + public: GSTextureCache11(GSRenderer* r); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache9.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureCache9.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache9.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache9.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -50,7 +50,7 @@ return; } - if(!t->m_dirty.empty()) + if (!t->m_dirty.empty() || (r.width() == 0 && r.height() == 0)) { return; } @@ -70,19 +70,19 @@ { // TODO: block level write - GSOffset* o = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); + GSOffset* off = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); switch(TEX0.PSM) { case PSM_PSMCT32: - m_renderer->m_mem.WritePixel32(m.bits, m.pitch, o, r); + m_renderer->m_mem.WritePixel32(m.bits, m.pitch, off, r); break; case PSM_PSMCT24: - m_renderer->m_mem.WritePixel24(m.bits, m.pitch, o, r); + m_renderer->m_mem.WritePixel24(m.bits, m.pitch, off, r); break; case PSM_PSMCT16: case PSM_PSMCT16S: - m_renderer->m_mem.WriteFrame16(m.bits, m.pitch, o, r); + m_renderer->m_mem.WriteFrame16(m.bits, m.pitch, off, r); break; default: ASSERT(0); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache9.h pcsx2-1.4.0/plugins/GSdx/GSTextureCache9.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache9.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache9.h 2016-01-05 17:28:08.000000000 +0000 @@ -31,6 +31,8 @@ void Read(Target* t, const GSVector4i& r); + virtual bool CanConvertDepth() { return false; } + public: GSTextureCache9(GSRenderer* r); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureCache.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache.cpp 2014-10-07 17:11:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,16 +22,26 @@ #include "stdafx.h" #include "GSTextureCache.h" +bool s_IS_OPENGL = false; + GSTextureCache::GSTextureCache(GSRenderer* r) : m_renderer(r) { - m_spritehack = !!theApp.GetConfig("UserHacks", 0) ? theApp.GetConfig("UserHacks_SpriteHack", 0) : 0; + bool userhacks = !!theApp.GetConfig("UserHacks", 0); + s_IS_OPENGL = (static_cast(theApp.GetConfig("Renderer", static_cast(GSRendererType::Default))) == GSRendererType::OGL_HW); - UserHacks_HalfPixelOffset = !!theApp.GetConfig("UserHacks", 0) && !!theApp.GetConfig("UserHacks_HalfPixelOffset", 0); - UserHacks_NVIDIAHack = !!theApp.GetConfig("UserHacks_NVIDIAHack", 0) && !!theApp.GetConfig("UserHacks", 0); - m_paltex = !!theApp.GetConfig("paltex", 0); + m_spritehack = userhacks ? theApp.GetConfig("UserHacks_SpriteHack", 0) : 0; + UserHacks_HalfPixelOffset = userhacks && theApp.GetConfig("UserHacks_HalfPixelOffset", 0); - m_temp = (uint8*)_aligned_malloc(1024 * 1024 * sizeof(uint32), 32); + m_paltex = !!theApp.GetConfig("paltex", 0); + m_preload_frame = userhacks && theApp.GetConfig("preload_frame_with_gs_data", 0); + m_can_convert_depth = s_IS_OPENGL && theApp.GetConfig("texture_cache_depth", 1); + m_crc_hack_level = theApp.GetConfig("crc_hack_level", 3); + + // In theory 4MB is enough but 9MB is safer for overflow (8MB + // isn't enough in custom resolution) + // Test: onimusha 3 PAL 60Hz + m_temp = (uint8*)_aligned_malloc(9 * 1024 * 1024, 32); } GSTextureCache::~GSTextureCache() @@ -41,6 +51,18 @@ _aligned_free(m_temp); } +void GSTextureCache::RemovePartial() +{ + //m_src.RemoveAll(); + + for (int type = 0; type < 2; type++) + { + for_each(m_dst[type].begin(), m_dst[type].end(), delete_object()); + + m_dst[type].clear(); + } +} + void GSTextureCache::RemoveAll() { m_src.RemoveAll(); @@ -58,12 +80,18 @@ const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[TEX0.PSM]; //const GSLocalMemory::psm_t& cpsm = psm.pal > 0 ? GSLocalMemory::m_psm[TEX0.CPSM] : psm; - GIFRegTEXA plainTEXA; - - plainTEXA.AEM = 1; - plainTEXA.TA0 = 0; - plainTEXA.TA1 = 0x80; - m_renderer->m_mem.m_clut.Read32(TEX0, plainTEXA); + // Until DX is fixed + if (s_IS_OPENGL) { + if(psm.pal > 0) + m_renderer->m_mem.m_clut.Read32(TEX0, TEXA); + } else { + GIFRegTEXA plainTEXA; + + plainTEXA.AEM = 1; + plainTEXA.TA0 = 0; + plainTEXA.TA1 = 0x80; + m_renderer->m_mem.m_clut.Read32(TEX0, plainTEXA); + } const uint32* clut = m_renderer->m_mem.m_clut; @@ -71,18 +99,27 @@ list& m = m_src.m_map[TEX0.TBP0 >> 5]; + for(list::iterator i = m.begin(); i != m.end(); i++) { Source* s = *i; - if(((TEX0.u32[0] ^ s->m_TEX0.u32[0]) | ((TEX0.u32[1] ^ s->m_TEX0.u32[1]) & 3)) != 0) // TBP0 TBW PSM TW TH - { + if (((TEX0.u32[0] ^ s->m_TEX0.u32[0]) | ((TEX0.u32[1] ^ s->m_TEX0.u32[1]) & 3)) != 0) // TBP0 TBW PSM TW TH continue; - } - if(s->m_palette == NULL && psm.pal > 0 && !GSVector4i::compare64(clut, s->m_clut, psm.pal * sizeof(clut[0]))) - { - continue; + // Target are converted (AEM & palette) on the fly by the GPU. They don't need extra check + if (!s->m_target) { + // We request a palette texture (psm.pal). If the texture was + // converted by the CPU (s->m_palette == NULL), we need to ensure + // palette content is the same. + // Note: content of the palette will be uploaded at the end of the function + if (psm.pal > 0 && s->m_palette == NULL && !GSVector4i::compare64(clut, s->m_clut, psm.pal * sizeof(clut[0]))) + continue; + + // We request a 24/16 bit RGBA texture. Alpha expansion was done by + // the CPU. We need to check that TEXA is identical + if (psm.pal == 0 && psm.fmt > 0 && s->m_TEXA.u64 != TEXA.u64) + continue; } m.splice(m.begin(), m, i); @@ -93,6 +130,7 @@ } Target* dst = NULL; + bool half_right = false; #ifdef DISABLE_HW_TEXTURE_CACHE if( 0 ) @@ -109,17 +147,67 @@ // (Simply not doing this code at all makes a lot of previsouly missing stuff show (but breaks pretty much everything // else.) - //for(int type = 0; type < 2 && dst == NULL; type++) - for(int type = 0; type < 1 && dst == NULL; type++) // Only look for render target, no depth stencil + for(list::iterator i = m_dst[RenderTarget].begin(); i != m_dst[RenderTarget].end(); i++) { - for(list::iterator i = m_dst[type].begin(); i != m_dst[type].end(); i++) - { + Target* t = *i; + + if(t->m_used && t->m_dirty.empty()) { + // Typical bug (MGS3 blue cloud): + // 1/ RT used as 32 bits => alpha channel written + // 2/ RT used as 24 bits => no update of alpha channel + // 3/ Lookup of texture that used alpha channel as index, HasSharedBits will return false + // because of the previous draw call format + // + // Solution: consider the RT as 32 bits if the alpha was used in the past + uint32 t_psm = (t->m_dirty_alpha) ? t->m_TEX0.PSM & ~0x1 : t->m_TEX0.PSM; + + if (GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0, t_psm)) { + if (!s_IS_OPENGL && (psm == PSM_PSMT8)) { + // OpenGL can convert the texture directly in the GPU. Not sure we want to keep this + // code for DX. It fixes effect but it is slow (MGS3) + + // It is a complex to convert the code in shader. As a reference, let's do it on the CPU, it will + // be slow but + // 1/ it just works :) + // 2/ even with upscaling + // 3/ for both DX and OpenGL + + // Gregory: to avoid a massive slow down for nothing, let's only enable + // this code when CRC is below the FULL level + if (m_crc_hack_level < 3) + Read(t, t->m_valid); + else + dst = t; + } else { + dst = t; + } + + break; + + } else if ((t->m_TEX0.TBW >= 16) && GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0 + t->m_TEX0.TBW * 0x10, t->m_TEX0.PSM)) { + // Detect half of the render target (fix snow engine game) + // Target Page (8KB) have always a width of 64 pixels + // Half of the Target is TBW/2 pages * 8KB / (1 block * 256B) = 0x10 + half_right = true; + dst = t; + + break; + } + + } + } + + if (dst == NULL && CanConvertDepth()) { + // Let's try a trick to avoid to use wrongly a depth buffer + // Unfortunately, I don't have any Arc the Lad testcase + // + // 1/ Check only current frame, I guess it is only used as a postprocessing effect + for(list::iterator i = m_dst[DepthStencil].begin(); i != m_dst[DepthStencil].end(); i++) { Target* t = *i; - if(t->m_used && t->m_dirty.empty() && GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0, t->m_TEX0.PSM)) + if(!t->m_age && t->m_used && t->m_dirty.empty() && GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0, t->m_TEX0.PSM)) { dst = t; - break; } } @@ -128,12 +216,26 @@ if(src == NULL) { - src = CreateSource(TEX0, TEXA, dst); +#ifdef ENABLE_OGL_DEBUG + if (dst) { + GL_CACHE("TC: dst %s hit (%s): %d (0x%x, F:0x%x)", to_string(dst->m_type), half_right ? "half" : "full", + dst->m_texture ? dst->m_texture->GetID() : 0, + TEX0.TBP0, TEX0.PSM); + } else { + GL_CACHE("TC: src miss (0x%x, F:0x%x)", TEX0.TBP0, TEX0.PSM); + } +#endif + src = CreateSource(TEX0, TEXA, dst, half_right); if(src == NULL) { return NULL; } + + } else { + GL_CACHE("TC: src hit: %d (0x%x, F:0x%x)", + src->m_texture ? src->m_texture->GetID() : 0, + TEX0.TBP0, TEX0.PSM); } if (src->m_palette) @@ -170,25 +272,95 @@ dst = t; + dst->m_32_bits_fmt |= !(TEX0.PSM & 2); dst->m_TEX0 = TEX0; break; } } + if (dst) { + GL_CACHE("TC: Lookup Target(%s) %dx%d, hit: %d (0x%x, F:0x%x)", to_string(type), w, h, dst->m_texture->GetID(), bp, TEX0.PSM); + + dst->Update(); + + dst->m_dirty_alpha |= (TEX0.PSM != PSM_PSMCT24) && (TEX0.PSM != PSM_PSMZ24); + + } else if (CanConvertDepth()) { + + int rev_type = (type == DepthStencil) ? RenderTarget : DepthStencil; + GSVector4 sRect(0, 0, 1.0, 1.0); + GSVector4 dRect(0, 0, w, h); + + // Depth stencil/RT can be an older RT/DS but only check recent RT/DS to avoid to pick + // some bad data. + + for(list::iterator i = m_dst[rev_type].begin(); i != m_dst[rev_type].end(); i++) + { + Target* t = *i; + + if(!t->m_age && bp == t->m_TEX0.TBP0) + { + dst = CreateTarget(TEX0, w, h, type); + dst->m_32_bits_fmt = t->m_32_bits_fmt; + + if (type == DepthStencil) { + GL_CACHE("TC: Lookup Target(Depth) %dx%d, hit Color (0x%x, F:0x%x)", w, h, bp, TEX0.PSM); + int shader = ShaderConvert_RGBA8_TO_FLOAT32 + GSLocalMemory::m_psm[TEX0.PSM].fmt; + m_renderer->m_dev->StretchRect(t->m_texture, sRect, dst->m_texture, dRect, shader, false); + } else { + GL_CACHE("TC: Lookup Target(Color) %dx%d, hit Depth (0x%x, F:0x%x)", w, h, bp, TEX0.PSM); + m_renderer->m_dev->StretchRect(t->m_texture, sRect, dst->m_texture, dRect, ShaderConvert_FLOAT32_TO_RGBA8, false); + } + + break; + } + } + } + if(dst == NULL) { + GL_CACHE("TC: Lookup Target(%s) %dx%d, miss (0x%x, F:0x%x)", to_string(type), w, h, bp, TEX0.PSM); + dst = CreateTarget(TEX0, w, h, type); if(dst == NULL) - { return NULL; + + // In theory new textures contain invalidated data. Still in theory a new target + // must contains the content of the GS memory. + // In practice, TC will wrongly invalidate some RT. For example due to write on the alpha + // channel but colors is still valid. Unfortunately TC doesn't support the upload of data + // in target. + // + // Cleaning the code here will likely break several games. However it might reduce + // the noise in draw call debugging. It is the main reason to enable it on debug build. + // + // From a performance point of view, it might cost a little on big upscaling + // but normally few RT are miss so it must remain reasonable. + if (s_IS_OPENGL) { + if (m_preload_frame) { + GL_INS("Preloading the RT DATA"); + // RT doesn't have height but if we use a too big value, we will read outside of the GS memory. + int page0 = TEX0.TBP0 >> 5; + int max_page = (MAX_PAGES - page0); + int max_h = 32 * max_page / TEX0.TBW; + // h is likely smaller than w (true most of the time). Reduce the upload size (speed) + max_h = std::min(max_h, TEX0.TBW * 64); + + dst->m_dirty.push_back(GSDirtyRect(GSVector4i(0, 0, TEX0.TBW * 64, max_h), TEX0.PSM)); + dst->Update(); + } else { +#ifdef ENABLE_OGL_DEBUG + switch (type) { + case RenderTarget: m_renderer->m_dev->ClearRenderTarget(dst->m_texture, 0); break; + case DepthStencil: m_renderer->m_dev->ClearDepth(dst->m_texture, 0); break; + default:break; + } +#endif + } } } - else - { - dst->Update(); - } if(m_renderer->CanUpscale()) { @@ -210,6 +382,10 @@ hh *= 2; } + // Gregory: I'm sure this sillyness is related to the usage of a 32bits + // buffer as a 16 bits format. In this case the height of the buffer is + // multiplyed by 2 (Hence a scissor bigger than the RT) + // This vp2 fix doesn't work most of the time if(hh < 512 && m_renderer->m_context->SCISSOR.SCAY1 == 511) // vp2 @@ -219,15 +395,7 @@ if(ww > 0 && hh > 0) { - if(UserHacks_NVIDIAHack) - { - //Nvidia hackage!! to revert to original remove both " - 0.01f"'s - dst->m_texture->SetScale(GSVector2((float)w / ww - 0.01f, (float)h / hh - 0.01f)); - } - else - { - dst->m_texture->SetScale(GSVector2((float)w / ww, (float)h / hh)); - } + dst->m_texture->SetScale(GSVector2((float)w / ww, (float)h / hh)); } } } @@ -240,7 +408,7 @@ return dst; } -GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int w, int h) +GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int w, int h, int real_h) { uint32 bp = TEX0.TBP0; @@ -254,6 +422,8 @@ { dst = t; + GL_CACHE("TC: Lookup Frame %dx%d, perfect hit: %d (0x%x)", w, h, dst->m_texture->GetID(), bp); + break; } else @@ -262,6 +432,7 @@ if(t->m_TEX0.TBP0 <= bp && bp < t->m_TEX0.TBP0 + 0xe00UL && (!dst || t->m_TEX0.TBP0 >= dst->m_TEX0.TBP0)) { + GL_CACHE("TC: Lookup Frame %dx%d, close hit: %d (0x%x, took 0x%x)", w, h, t->m_texture->GetID(), bp, t->m_TEX0.TBP0); dst = t; } } @@ -269,6 +440,8 @@ if(dst == NULL) { + GL_CACHE("TC: Lookup Frame %dx%d, miss (0x%x)", w, h, bp); + dst = CreateTarget(TEX0, w, h, RenderTarget); if(dst == NULL) @@ -277,6 +450,17 @@ } m_renderer->m_dev->ClearRenderTarget(dst->m_texture, 0); // new frame buffers after reset should be cleared, don't display memory garbage + + if (m_preload_frame) { + // Load GS data into frame. Game can directly uploads a background or the full image in + // "CTRC" buffer. It will also avoid various black screen issue in gs dump. + // + // Code is more or less an equivalent of the SW renderer + // + // Option is hidden and not enabled by default to avoid any regression + dst->m_dirty.push_back(GSDirtyRect(GSVector4i(0, 0, TEX0.TBW * 64, real_h), TEX0.PSM)); + dst->Update(); + } } else { @@ -288,15 +472,42 @@ return dst; } +// Goal: Depth And Target at the same address is not possible. On GS it is +// the same memory but not on the Dx/GL. Therefore a write to the Depth/Target +// must invalidate the Target/Depth respectively +void GSTextureCache::InvalidateVideoMemType(int type, uint32 bp) +{ + if (!CanConvertDepth()) + return; + + for(list::iterator i = m_dst[type].begin(); i != m_dst[type].end(); i++) + { + Target* t = *i; + + if(bp == t->m_TEX0.TBP0) + { + GL_CACHE("TC: InvalidateVideoMemType: Remove Target(%s) %d (0x%x)", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); + + m_dst[type].erase(i); + delete t; + + break; + } + } + +} + // Goal: invalidate data sent to the GPU when the source (GS memory) is modified // Called each time you want to write to the GS memory -void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, bool target) +void GSTextureCache::InvalidateVideoMem(GSOffset* off, const GSVector4i& rect, bool target) { - if(!o) return; // Fixme. Crashes Dual Hearts, maybe others as well. Was fine before r1549. + if(!off) return; // Fixme. Crashes Dual Hearts, maybe others as well. Was fine before r1549. - uint32 bp = o->bp; - uint32 bw = o->bw; - uint32 psm = o->psm; + uint32 bp = off->bp; + uint32 bw = off->bw; + uint32 psm = off->psm; if(!target) { @@ -315,13 +526,34 @@ m_src.RemoveAt(s); } } + + uint32 bbp = bp + bw * 0x10; + if (bw >= 16 && bbp < 16384) { + // Detect half of the render target (fix snow engine game) + // Target Page (8KB) have always a width of 64 pixels + // Half of the Target is TBW/2 pages * 8KB / (1 block * 256B) = 0x10 + + const list& m = m_src.m_map[bbp >> 5]; + + for(list::const_iterator i = m.begin(); i != m.end(); ) + { + list::const_iterator j = i++; + + Source* s = *j; + + if(GSUtil::HasSharedBits(bbp, psm, s->m_TEX0.TBP0, s->m_TEX0.PSM)) + { + m_src.RemoveAt(s); + } + } + } } GSVector4i r; uint32* pages = (uint32*)m_temp; - o->GetPages(rect, pages, &r); + off->GetPages(rect, pages, &r); bool found = false; @@ -362,7 +594,7 @@ s->m_complete = false; - found = b; + found |= b; } else { @@ -388,21 +620,41 @@ Target* t = *j; + // GH: (I think) this code is completely broken. Typical issue: + // EE write an alpha channel into 32 bits texture + // Results: the target is deleted (because HasCompatibleBits is false) + // + // Major issues are expected if the game try to reuse the target + // If we dirty the RT, it will likely upload partially invalid data. + // (The color on the previous example) if(GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0, t->m_TEX0.PSM)) { if(!found && GSUtil::HasCompatibleBits(psm, t->m_TEX0.PSM)) { + GL_CACHE("TC: Dirty Target(%s) %d (0x%x)", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); t->m_dirty.push_back(GSDirtyRect(r, psm)); t->m_TEX0.TBW = bw; } else { m_dst[type].erase(j); + GL_CACHE("TC: Remove Target(%s) %d (0x%x)", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); delete t; continue; } + } else if (bp == t->m_TEX0.TBP0) { + // EE writes the ALPHA channel. Mark it as invalid for + // the texture cache. Otherwise it will generate a wrong + // hit on the texture cache. + // Game: Conflict - Desert Storm (flickering) + t->m_dirty_alpha = false; } + // GH: Try to detect texture write that will overlap with a target buffer if(GSUtil::HasSharedBits(psm, t->m_TEX0.PSM) && bp < t->m_TEX0.TBP0) { uint32 rowsize = bw * 8192; @@ -414,6 +666,9 @@ if(r.bottom > y) { + GL_CACHE("TC: Dirty After Target(%s) %d (0x%x)", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); // TODO: do not add this rect above too t->m_dirty.push_back(GSDirtyRect(GSVector4i(r.left, r.top - y, r.right, r.bottom - y), psm)); t->m_TEX0.TBW = bw; @@ -421,17 +676,38 @@ } } } + + // FIXME: this code "fixes" black FMV issue with rule of rose. + // Code is completely hardcoded so maybe not the best solution. Besides I don't + // know the full impact of it. + // Let's keep this code for the future +#if 0 + if(GSUtil::HasSharedBits(psm, t->m_TEX0.PSM) && (t->m_TEX0.TBP0 + 0x200 == bp)) + { + GL_CACHE("TC: Dirty in the middle of Target(%s) %d (0x%x)", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); + + uint32 rowsize = bw * 8192u; + uint32 offset = 0x200 * 256u; + int y = GSLocalMemory::m_psm[psm].pgs.y * offset / rowsize; + + t->m_dirty.push_back(GSDirtyRect(GSVector4i(r.left, r.top + y, r.right, r.bottom + y), psm)); + t->m_TEX0.TBW = bw; + continue; + } +#endif } } } // Goal: retrive the data from the GPU to the GS memory. // Called each time you want to read from the GS memory -void GSTextureCache::InvalidateLocalMem(GSOffset* o, const GSVector4i& r) +void GSTextureCache::InvalidateLocalMem(GSOffset* off, const GSVector4i& r) { - uint32 bp = o->bp; - uint32 psm = o->psm; - //uint32 bw = o->bw; + uint32 bp = off->bp; + uint32 psm = off->psm; + //uint32 bw = off->bw; // No depth handling please. if (psm == PSM_PSMZ32 || psm == PSM_PSMZ24 || psm == PSM_PSMZ16 || psm == PSM_PSMZ16S) @@ -572,9 +848,21 @@ Target* t = *j; + // This variable is used to detect the texture shuffle effect. There is a high + // probability that game will do it on the current RT. + // Variable is cleared here to avoid issue with game that uses a 16 bits + // render target + if (t->m_age > 0) { + // GoW2 uses the effect at the start of the frame + t->m_32_bits_fmt = false; + } + if(++t->m_age > maxage) { m_dst[type].erase(j); + GL_CACHE("TC: Remove Target(%s): %d (0x%x) due to age", to_string(type), + t->m_texture ? t->m_texture->GetID() : 0, + t->m_TEX0.TBP0); delete t; } @@ -583,7 +871,7 @@ } //Fixme: Several issues in here. Not handling depth stencil, pitch conversion doesnt work. -GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, Target* dst) +GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, Target* dst, bool half_right) { const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[TEX0.PSM]; Source* src = new Source(m_renderer, TEX0, TEXA, m_temp); @@ -608,32 +896,46 @@ { // TODO: clean up this mess - src->m_target = true; + int shader = dst->m_type != RenderTarget ? ShaderConvert_FLOAT32_TO_RGBA8 : ShaderConvert_COPY; + bool is_8bits = TEX0.PSM == PSM_PSMT8 && s_IS_OPENGL; - if(dst->m_type != RenderTarget) - { - // GH: caller was modifier to never hit this code. I don't think a zbuffer - // can be reused as an input texture - // TODO - delete src; - return NULL; + if (is_8bits) { + GL_INS("Reading RT as a packed-indexed 8 bits format"); + shader = ShaderConvert_RGBA_TO_8I; } +#ifdef ENABLE_OGL_DEBUG + if (TEX0.PSM == PSM_PSMT4) { + GL_INS("ERROR: Reading RT as a packed-indexed 4 bits format is not supported"); + } +#endif + + if (TEX0.PSM < PSM_PSMT8 || TEX0.PSM > PSM_PSMT4HH) { + src->m_32_bits_fmt = dst->m_32_bits_fmt; + } + src->m_target = true; + dst->Update(); GSTexture* tmp = NULL; - if(dst->m_texture->IsMSAA()) + if (dst->m_texture->IsMSAA()) { tmp = dst->m_texture; dst->m_texture = m_renderer->m_dev->Resolve(dst->m_texture); } + // do not round here!!! if edge becomes a black pixel and addressing mode is clamp => everything outside the clamped area turns into black (kh2 shadows) int w = (int)(dst->m_texture->GetScale().x * tw); int h = (int)(dst->m_texture->GetScale().y * th); + if (is_8bits) { + // Unscale 8 bits textures, quality won't be nice but format is really awful + w = tw; + h = th; + } GSVector2i dstsize = dst->m_texture->GetSize(); @@ -671,15 +973,15 @@ //{ // for(int dx = 0; dx < dw; dx += blockWidth) // { - // int o = dy * dw / blockHeight + dx; + // int off = dy * dw / blockHeight + dx; - // int sx = o % sw; - // int sy = o / sw; + // int sx = off % sw; + // int sy = off / sw; - // GSVector4 sr = GSVector4(GSVector4i(sx, sy).xyxy() + br) * scale / size; - // GSVector4 dr = GSVector4(GSVector4i(dx, dy).xyxy() + br) * scale; + // GSVector4 sRect = GSVector4(GSVector4i(sx, sy).xyxy() + br) * scale / size; + // GSVector4 dRect = GSVector4(GSVector4i(dx, dy).xyxy() + br) * scale; - // m_renderer->m_dev->StretchRect(dst->m_texture, sr, src->m_texture, dr); + // m_renderer->m_dev->StretchRect(dst->m_texture, sRect, src->m_texture, dRect); // // TODO: this is quite a lot of StretchRect, do it with one Draw // } @@ -699,54 +1001,120 @@ GSVector2 scale = dst->m_texture->GetScale(); - GSVector4 dr(0, 0, w, h); + GSVector4 dRect(0, 0, w, h); - if(w > dstsize.x) - { - scale.x = (float)dstsize.x / tw; - dr.z = (float)dstsize.x * scale.x / dst->m_texture->GetScale().x; - w = dstsize.x; - } + // Lengthy explanation of the rescaling code. + // Here an example in 2x: + // RT is 1280x1024 but only contains 512x448 valid data (so 256x224 pixels without upscaling) + // + // PS2 want to read it back as a 1024x1024 pixels (they don't care about the extra pixels) + // So in theory we need to shrink a 2048x2048 RT into a 1024x1024 texture. Obviously the RT is + // too small. + // + // So we will only limit the resize to the available data in RT. + // Therefore we will resize the RT from 1280x1024 to 1280x1024/2048x2048 % of the new texture + // size (which is 1280x1024) (i.e. 800x512) + // From the rendering point of view. UV coordinate will be normalized on the real GS texture size + // This way it can be used on an upscaled texture without extra scaling factor (only requirement is + // to have same proportion) + // + // FIXME: The scaling will create a bad offset. For example if texture coordinate start at 0.5 (pixel 0) + // At 2x it will become 0.5/128 * 256 = 1 (pixel 1) + // I think it is the purpose of the UserHacks_HalfPixelOffset below. However implementation is less + // than ideal. + // 1/ It suppose games have an half pixel offset on texture coordinate which could be wrong + // 2/ It doesn't support rescaling of the RT (tw = 1024) + // Maybe it will be more easy to just round the UV value in the Vertex Shader + + if (!is_8bits) { + // 8 bits handling is special due to unscaling. It is better to not execute this code + if (w > dstsize.x) + { + scale.x = (float)dstsize.x / tw; + dRect.z = (float)dstsize.x * scale.x / dst->m_texture->GetScale().x; + w = dstsize.x; + } - if(h > dstsize.y) - { - scale.y = (float)dstsize.y / th; - dr.w = (float)dstsize.y * scale.y / dst->m_texture->GetScale().y; - h = dstsize.y; + if (h > dstsize.y) + { + scale.y = (float)dstsize.y / th; + dRect.w = (float)dstsize.y * scale.y / dst->m_texture->GetScale().y; + h = dstsize.y; + } } - GSVector4 sr(0, 0, w, h); + GSVector4 sRect(0, 0, w, h); + + GSTexture* sTex = src->m_texture ? src->m_texture : dst->m_texture; + GSTexture* dTex = m_renderer->m_dev->CreateRenderTarget(w, h, false); - GSTexture* st = src->m_texture ? src->m_texture : dst->m_texture; - GSTexture *dt = m_renderer->m_dev->CreateRenderTarget(w, h, false); // GH: by default (m_paltex == 0) GSdx converts texture to the 32 bit format // However it is different here. We want to reuse a Render Target as a texture. // Because the texture is already on the GPU, CPU can't convert it. - if (psm.pal > 0) + if (psm.pal > 0) { src->m_palette = m_renderer->m_dev->CreateTexture(256, 1); + } + // Disable linear filtering for various GS post-processing effect + // 1/ Palette is used to interpret the alpha channel of the RT as an index. + // Star Ocean 3 uses it to emulate a stencil buffer. + // 2/ Z formats are a bad idea to interpolate (discontinuties). + // 3/ 16 bits buffer is used to move data from a channel to another. + // + // I keep linear filtering for standard color even if I'm not sure that it is + // working correctly. + // Indeed, texture is reduced so you need to read all covered pixels (9 in 3x) + // to correctly interpolate the value. Linear interpolation is likely acceptable + // only in 2x scaling + // + // Src texture will still be bilinear interpolated so I'm really not sure + // that we need to do it here too. + // + // Future note: instead to do + // RT 2048x2048 -> T 1024x1024 -> RT 2048x2048 + // We can maybe sample directly a bigger texture + // RT 2048x2048 -> T 2048x2048 -> RT 2048x2048 + // Pro: better quality. Copy instead of StretchRect (must be faster) + // Cons: consume more memory + // + // In distant future: investigate to reuse the RT directly without any + // copy. Likely a speed boost and memory usage reduction. + bool linear = (TEX0.PSM == PSM_PSMCT32 || TEX0.PSM == PSM_PSMCT24); if(!src->m_texture) { - src->m_texture = dt; + src->m_texture = dTex; } - if((sr == dr).alltrue()) + if ((sRect == dRect).alltrue() && !shader) { - m_renderer->m_dev->CopyRect(st, dt, GSVector4i(0, 0, w, h)); + if (half_right) { + // You typically hit this code in snow engine game. Dstsize is the size of of Dx/GL RT + // which is arbitrary set to 1280 (biggest RT used by GS). h/w are based on the input texture + // so the only reliable way to find the real size of the target is to use the TBW value. + float real_width = dst->m_TEX0.TBW * 64u * dst->m_texture->GetScale().x; + m_renderer->m_dev->CopyRect(sTex, dTex, GSVector4i(real_width/2.0f, 0, real_width, h)); + } else { + m_renderer->m_dev->CopyRect(sTex, dTex, GSVector4i(0, 0, w, h)); // <= likely wrong dstsize.x could be bigger than w + } } else { - sr.z /= st->GetWidth(); - sr.w /= st->GetHeight(); + // Different size or not the same format + sRect.z /= sTex->GetWidth(); + sRect.w /= sTex->GetHeight(); - m_renderer->m_dev->StretchRect(st, sr, dt, dr); + if (half_right) { + sRect.x = sRect.z/2.0f; + } + + m_renderer->m_dev->StretchRect(sTex, sRect, dTex, dRect, shader, linear); } - if(dt != src->m_texture) + if(dTex != src->m_texture) { m_renderer->m_dev->Recycle(src->m_texture); - src->m_texture = dt; + src->m_texture = dTex; } if( src->m_texture ) @@ -756,7 +1124,7 @@ if(tmp != NULL) { - // tmp is texture before a MultiSample resolve + // tmp is the texture before a MultiSample resolve m_renderer->m_dev->Recycle(dst->m_texture); dst->m_texture = tmp; @@ -777,6 +1145,7 @@ case 4: modx = 4.2f; mody = 4.2f; dst->m_texture->LikelyOffset = true; break; case 5: modx = 5.3f; mody = 5.3f; dst->m_texture->LikelyOffset = true; break; case 6: modx = 6.2f; mody = 6.2f; dst->m_texture->LikelyOffset = true; break; + case 8: modx = 8.2f; mody = 8.2f; dst->m_texture->LikelyOffset = true; break; default: modx = 0.0f; mody = 0.0f; dst->m_texture->LikelyOffset = false; break; } } @@ -814,7 +1183,7 @@ GSTextureCache::Target* GSTextureCache::CreateTarget(const GIFRegTEX0& TEX0, int w, int h, int type) { - Target* t = new Target(m_renderer, TEX0, m_temp); + Target* t = new Target(m_renderer, TEX0, m_temp, CanConvertDepth()); // FIXME: initial data should be unswizzled from local mem in Update() if dirty @@ -843,6 +1212,38 @@ return t; } +void GSTextureCache::PrintMemoryUsage() +{ +#ifdef ENABLE_OGL_DEBUG + uint32 tex = 0; + uint32 tex_rt = 0; + uint32 rt = 0; + uint32 dss = 0; + for(hash_set::iterator i = m_src.m_surfaces.begin(); i != m_src.m_surfaces.end(); i++) { + Source* s = *i; + if (s) { + if (s->m_target) + tex_rt += s->m_texture->GetMemUsage(); + else + tex += s->m_texture->GetMemUsage(); + + } + } + for(list::iterator i = m_dst[RenderTarget].begin(); i != m_dst[RenderTarget].end(); i++) { + Target* t = *i; + if (t) + rt += t->m_texture->GetMemUsage(); + } + for(list::iterator i = m_dst[DepthStencil].begin(); i != m_dst[DepthStencil].end(); i++) { + Target* t = *i; + if (t) + dss += t->m_texture->GetMemUsage(); + } + + GL_PERF("MEM: RO Tex %dMB. RW Tex %dMB. Target %dMB. Depth %dMB", tex >> 20u, tex_rt >> 20u, rt >> 20u, dss >> 20u); +#endif +} + // GSTextureCache::Surface GSTextureCache::Surface::Surface(GSRenderer* r, uint8* temp) @@ -850,6 +1251,7 @@ , m_texture(NULL) , m_age(0) , m_temp(temp) + , m_32_bits_fmt(false) { m_TEX0.TBP0 = 0x3fff; } @@ -872,6 +1274,7 @@ , m_initpalette(true) , m_target(false) , m_complete(false) + , m_spritehack_t(false) , m_p2t(NULL) { m_TEX0 = TEX0; @@ -924,7 +1327,7 @@ m_complete = true; // lame, but better than nothing } - const GSOffset* o = m_renderer->m_context->offset.tex; + const GSOffset* off = m_renderer->m_context->offset.tex; uint32 blocks = 0; @@ -932,11 +1335,11 @@ { for(int y = r.top; y < r.bottom; y += bs.y) { - uint32 base = o->block.row[y >> 3]; + uint32 base = off->block.row[y >> 3]; for(int x = r.left, i = (y << 7) + x; x < r.right; x += bs.x, i += bs.x) { - uint32 block = base + o->block.col[x >> 3]; + uint32 block = base + off->block.col[x >> 3]; if(block < MAX_BLOCKS) { @@ -961,11 +1364,11 @@ { for(int y = r.top; y < r.bottom; y += bs.y) { - uint32 base = o->block.row[y >> 3]; + uint32 base = off->block.row[y >> 3]; for(int x = r.left; x < r.right; x += bs.x) { - uint32 block = base + o->block.col[x >> 3]; + uint32 block = base + off->block.col[x >> 3]; if(block < MAX_BLOCKS) { @@ -1044,15 +1447,20 @@ GSLocalMemory& mem = m_renderer->m_mem; - const GSOffset* o = m_renderer->m_context->offset.tex; + const GSOffset* off = m_renderer->m_context->offset.tex; GSLocalMemory::readTexture rtx = psm.rtx; GIFRegTEXA plainTEXA; - plainTEXA.AEM = 1; - plainTEXA.TA0 = 0; - plainTEXA.TA1 = 0x80; + // Until DX is fixed + if (s_IS_OPENGL) { + plainTEXA = m_TEXA; + } else { + plainTEXA.AEM = 1; + plainTEXA.TA0 = 0; + plainTEXA.TA1 = 0x80; + } if(m_palette) { @@ -1068,7 +1476,7 @@ if((r > tr).mask() & 0xff00) { - (mem.*rtx)(o, r, buff, pitch, m_TEXA); + (mem.*rtx)(off, r, buff, pitch, m_TEXA); m_texture->Update(r.rintersect(tr), buff, pitch); } @@ -1078,13 +1486,13 @@ if(m_texture->Map(m, &r)) { - (mem.*rtx)(o, r, m.bits, m.pitch, plainTEXA); + (mem.*rtx)(off, r, m.bits, m.pitch, plainTEXA); m_texture->Unmap(); } else { - (mem.*rtx)(o, r, buff, pitch, plainTEXA); + (mem.*rtx)(off, r, buff, pitch, plainTEXA); m_texture->Update(r, buff, pitch); } @@ -1102,12 +1510,15 @@ // GSTextureCache::Target -GSTextureCache::Target::Target(GSRenderer* r, const GIFRegTEX0& TEX0, uint8* temp) +GSTextureCache::Target::Target(GSRenderer* r, const GIFRegTEX0& TEX0, uint8* temp, bool depth_supported) : Surface(r, temp) , m_type(-1) , m_used(false) + , m_depth_supported(depth_supported) { m_TEX0 = TEX0; + m_32_bits_fmt |= !(TEX0.PSM & 2); + m_dirty_alpha = (TEX0.PSM != PSM_PSMCT24) && (TEX0.PSM != PSM_PSMZ24); m_valid = GSVector4i::zero(); } @@ -1117,64 +1528,81 @@ Surface::Update(); // FIXME: the union of the rects may also update wrong parts of the render target (but a lot faster :) + // GH: it must be doable + // 1/ rescale the new t to the good size + // 2/ copy each rectangle (rescale the rectangle) (use CopyRect or multiple vertex) + // Alternate + // 1/ uses multiple vertex rectangle GSVector4i r = m_dirty.GetDirtyRectAndClear(m_TEX0, m_texture->GetSize()); - if(r.rempty()) return; + if (r.rempty()) return; - if(m_type == RenderTarget) - { - int w = r.width(); - int h = r.height(); + // No handling please + if ((m_type == DepthStencil) && !m_depth_supported) { + // do the most likely thing a direct write would do, clear it + GL_INS("ERROR: Update DepthStencil dummy"); - if(GSTexture* t = m_renderer->m_dev->CreateTexture(w, h)) - { - const GSOffset* o = m_renderer->m_mem.GetOffset(m_TEX0.TBP0, m_TEX0.TBW, m_TEX0.PSM); + if((m_renderer->m_game.flags & CRC::ZWriteMustNotClear) == 0) + m_renderer->m_dev->ClearDepth(m_texture, 0); - GIFRegTEXA TEXA; + return; + } - TEXA.AEM = 1; - TEXA.TA0 = 0; - TEXA.TA1 = 0x80; + int w = r.width(); + int h = r.height(); - GSTexture::GSMap m; + GIFRegTEXA TEXA; - if(t->Map(m)) - { - m_renderer->m_mem.ReadTexture(o, r, m.bits, m.pitch, TEXA); + TEXA.AEM = 1; + TEXA.TA0 = 0; + TEXA.TA1 = 0x80; - t->Unmap(); - } - else - { - int pitch = ((w + 3) & ~3) * 4; + GSTexture* t = m_renderer->m_dev->CreateTexture(w, h); + if (t == NULL) return; - m_renderer->m_mem.ReadTexture(o, r, m_temp, pitch, TEXA); + const GSOffset* off = m_renderer->m_mem.GetOffset(m_TEX0.TBP0, m_TEX0.TBW, m_TEX0.PSM); - t->Update(r.rsize(), m_temp, pitch); - } + GSTexture::GSMap m; - // m_renderer->m_perfmon.Put(GSPerfMon::Unswizzle, w * h * 4); + if(t->Map(m)) + { + m_renderer->m_mem.ReadTexture(off, r, m.bits, m.pitch, TEXA); - m_renderer->m_dev->StretchRect(t, m_texture, GSVector4(r) * GSVector4(m_texture->GetScale()).xyxy()); + t->Unmap(); + } + else + { + int pitch = ((w + 3) & ~3) * 4; - m_renderer->m_dev->Recycle(t); - } + m_renderer->m_mem.ReadTexture(off, r, m_temp, pitch, TEXA); + + t->Update(r.rsize(), m_temp, pitch); + } + + // m_renderer->m_perfmon.Put(GSPerfMon::Unswizzle, w * h * 4); + + // Copy the new GS memory content into the destination texture. + if(m_type == RenderTarget) + { + GL_INS("ERROR: Update RenderTarget"); + + m_renderer->m_dev->StretchRect(t, m_texture, GSVector4(r) * GSVector4(m_texture->GetScale()).xyxy()); } else if(m_type == DepthStencil) { - // do the most likely thing a direct write would do, clear it + GL_INS("ERROR: Update DepthStencil"); - if((m_renderer->m_game.flags & CRC::ZWriteMustNotClear) == 0) - { - m_renderer->m_dev->ClearDepth(m_texture, 0); - } + // FIXME linear or not? + m_renderer->m_dev->StretchRect(t, m_texture, GSVector4(r) * GSVector4(m_texture->GetScale()).xyxy(), ShaderConvert_RGBA8_TO_FLOAT32); } + + m_renderer->m_dev->Recycle(t); } // GSTextureCache::SourceMap -void GSTextureCache::SourceMap::Add(Source* s, const GIFRegTEX0& TEX0, const GSOffset* o) +void GSTextureCache::SourceMap::Add(Source* s, const GIFRegTEX0& TEX0, const GSOffset* off) { m_surfaces.insert(s); @@ -1201,11 +1629,11 @@ for(int y = 0; y < th; y += bs.y) { - uint32 base = o->block.row[y >> 3]; + uint32 base = off->block.row[y >> 3]; for(int x = 0; x < tw; x += bs.x) { - uint32 page = (base + o->block.col[x >> 3]) >> 5; + uint32 page = (base + off->block.col[x >> 3]) >> 5; if(page < MAX_PAGES) { @@ -1250,6 +1678,10 @@ { m_surfaces.erase(s); + GL_CACHE("TC: Remove Src Texture: %d (0x%x)", + s->m_texture ? s->m_texture->GetID() : 0, + s->m_TEX0.TBP0); + // Source (except render target) is duplicated for each page they use. for(size_t start = s->m_TEX0.TBP0 >> 5, end = s->m_target ? start : countof(m_map) - 1; start <= end; start++) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache.h pcsx2-1.4.0/plugins/GSdx/GSTextureCache.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCache.h 2014-10-24 18:49:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCache.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,7 +28,6 @@ { public: enum {RenderTarget, DepthStencil}; - bool UserHacks_NVIDIAHack; class Surface : public GSAlignedClass<32> { @@ -41,6 +40,7 @@ GIFRegTEXA m_TEXA; int m_age; uint8* m_temp; + bool m_32_bits_fmt; // Allow to detect the casting of 32 bits as 16 bits texture public: Surface(GSRenderer* r, uint8* temp); @@ -81,9 +81,11 @@ bool m_used; GSDirtyRectList m_dirty; GSVector4i m_valid; + bool m_depth_supported; + bool m_dirty_alpha; public: - Target(GSRenderer* r, const GIFRegTEX0& TEX0, uint8* temp); + Target(GSRenderer* r, const GIFRegTEX0& TEX0, uint8* temp, bool depth_supported); virtual void Update(); }; @@ -98,8 +100,9 @@ SourceMap() : m_used(false) {memset(m_pages, 0, sizeof(m_pages));} - void Add(Source* s, const GIFRegTEX0& TEX0, const GSOffset* o); + void Add(Source* s, const GIFRegTEX0& TEX0, const GSOffset* off); void RemoveAll(); + void RemovePartial(); void RemoveAt(Source* s); }; @@ -109,9 +112,12 @@ list m_dst[2]; bool m_paltex; int m_spritehack; + bool m_preload_frame; uint8* m_temp; + bool m_can_convert_depth; + int m_crc_hack_level; - virtual Source* CreateSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, Target* t = NULL); + virtual Source* CreateSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, Target* t = NULL, bool half_right = false); virtual Target* CreateTarget(const GIFRegTEX0& TEX0, int w, int h, int type); virtual int Get8bitFormat() = 0; @@ -122,6 +128,8 @@ virtual void Read(Target* t, const GSVector4i& r) = 0; #endif + virtual bool CanConvertDepth() { return m_can_convert_depth; } + public: GSTextureCache(GSRenderer* r); virtual ~GSTextureCache(); @@ -129,14 +137,22 @@ virtual void Read(Target* t, const GSVector4i& r) = 0; #endif void RemoveAll(); + void RemovePartial(); Source* LookupSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, const GSVector4i& r); Target* LookupTarget(const GIFRegTEX0& TEX0, int w, int h, int type, bool used); - Target* LookupTarget(const GIFRegTEX0& TEX0, int w, int h); + Target* LookupTarget(const GIFRegTEX0& TEX0, int w, int h, int real_h); - void InvalidateVideoMem(GSOffset* o, const GSVector4i& r, bool target = true); - void InvalidateLocalMem(GSOffset* o, const GSVector4i& r); + void InvalidateVideoMemType(int type, uint32 bp); + void InvalidateVideoMem(GSOffset* off, const GSVector4i& r, bool target = true); + void InvalidateLocalMem(GSOffset* off, const GSVector4i& r); void IncAge(); bool UserHacks_HalfPixelOffset; + + const char* to_string(int type) { + return (type == DepthStencil) ? "Depth" : "Color"; + } + + void PrintMemoryUsage(); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureCacheOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheOGL.cpp 2013-07-19 19:25:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCacheOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -30,44 +30,57 @@ void GSTextureCacheOGL::Read(Target* t, const GSVector4i& r) { - if(t->m_type != RenderTarget) - { - ASSERT(0); - + if (!t->m_dirty.empty() || (r.width() == 0 && r.height() == 0)) return; - } const GIFRegTEX0& TEX0 = t->m_TEX0; - if(TEX0.PSM != PSM_PSMCT32 - && TEX0.PSM != PSM_PSMCT24 - && TEX0.PSM != PSM_PSMCT16 - && TEX0.PSM != PSM_PSMCT16S) + GLuint fmt; + int ps_shader; + switch (TEX0.PSM) { - //ASSERT(0); + case PSM_PSMCT32: + case PSM_PSMCT24: + fmt = GL_RGBA8; + ps_shader = 0; + break; + + case PSM_PSMCT16: + case PSM_PSMCT16S: + fmt = GL_R16UI; + ps_shader = 1; + break; + + case PSM_PSMZ32: + fmt = GL_R32UI; + ps_shader = 10; + break; + + case PSM_PSMZ24: + fmt = GL_R32UI; + ps_shader = 10; + break; + + case PSM_PSMZ16: + case PSM_PSMZ16S: + fmt = GL_R16UI; + ps_shader = 10; + break; - return; + default: + return; } - if(!t->m_dirty.empty()) - { - return; - } - // printf("GSRenderTarget::Read %d,%d - %d,%d (%08x)\n", r.left, r.top, r.right, r.bottom, TEX0.TBP0); + // Yes lots of logging, but I'm not confident with this code + GL_PUSH("Texture Cache Read. Format(0x%x)", TEX0.PSM); - int w = r.width(); - int h = r.height(); + GL_PERF("TC: Read Back Target: %d (0x%x)[fmt: 0x%x]. Size %dx%d", + t->m_texture->GetID(), TEX0.TBP0, TEX0.PSM, r.width(), r.height()); GSVector4 src = GSVector4(r) * GSVector4(t->m_texture->GetScale()).xyxy() / GSVector4(t->m_texture->GetSize()).xyxy(); - GLuint format = TEX0.PSM == PSM_PSMCT16 || TEX0.PSM == PSM_PSMCT16S ? GL_R16UI : GL_RGBA8; - //if (format == GL_R16UI) fprintf(stderr, "Format 16 bits integer\n"); -#if 0 - DXGI_FORMAT format = TEX0.PSM == PSM_PSMCT16 || TEX0.PSM == PSM_PSMCT16S ? DXGI_FORMAT_R16_UINT : DXGI_FORMAT_R8G8B8A8_UNORM; -#endif - - if(GSTexture* offscreen = m_renderer->m_dev->CopyOffscreen(t->m_texture, src, w, h, format)) + if(GSTexture* offscreen = m_renderer->m_dev->CopyOffscreen(t->m_texture, src, r.width(), r.height(), fmt, ps_shader)) { GSTexture::GSMap m; @@ -75,22 +88,34 @@ { // TODO: block level write - GSOffset* o = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); + GSOffset* off = m_renderer->m_mem.GetOffset(TEX0.TBP0, TEX0.TBW, TEX0.PSM); switch(TEX0.PSM) { - case PSM_PSMCT32: - m_renderer->m_mem.WritePixel32(m.bits, m.pitch, o, r); - break; - case PSM_PSMCT24: - m_renderer->m_mem.WritePixel24(m.bits, m.pitch, o, r); - break; - case PSM_PSMCT16: - case PSM_PSMCT16S: - m_renderer->m_mem.WritePixel16(m.bits, m.pitch, o, r); - break; - default: - ASSERT(0); + case PSM_PSMCT32: + m_renderer->m_mem.WritePixel32(m.bits, m.pitch, off, r); + break; + case PSM_PSMCT24: + m_renderer->m_mem.WritePixel24(m.bits, m.pitch, off, r); + break; + case PSM_PSMCT16: + case PSM_PSMCT16S: + m_renderer->m_mem.WritePixel16(m.bits, m.pitch, off, r); + break; + + case PSM_PSMZ32: + m_renderer->m_mem.WritePixel32(m.bits, m.pitch, off, r); + break; + case PSM_PSMZ24: + m_renderer->m_mem.WritePixel24(m.bits, m.pitch, off, r); + break; + case PSM_PSMZ16: + case PSM_PSMZ16S: + m_renderer->m_mem.WritePixel16(m.bits, m.pitch, off, r); + break; + + default: + ASSERT(0); } offscreen->Unmap(); @@ -99,5 +124,7 @@ // FIXME invalidate data m_renderer->m_dev->Recycle(offscreen); } + + GL_POP(); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheOGL.h pcsx2-1.4.0/plugins/GSdx/GSTextureCacheOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheOGL.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCacheOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,7 +28,7 @@ class GSTextureCacheOGL : public GSTextureCache { protected: - int Get8bitFormat() { return GL_R8; /* TODO return DXGI_FORMAT_A8_UNORM;*/} + int Get8bitFormat() { return GL_R8;} void Read(Target* t, const GSVector4i& r); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheSW.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureCacheSW.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureCacheSW.cpp 2013-02-08 15:36:54.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureCacheSW.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -251,7 +251,7 @@ GSLocalMemory& mem = m_state->m_mem; - const GSOffset* RESTRICT o = m_offset; + const GSOffset* RESTRICT off = m_offset; uint32 blocks = 0; @@ -274,11 +274,11 @@ { for(int y = r.top; y < r.bottom; y += bs.y, dst += block_pitch) { - uint32 base = o->block.row[y]; + uint32 base = off->block.row[y]; for(int x = r.left, i = (y << 7) + x; x < r.right; x += bs.x, i += bs.x) { - uint32 block = base + o->block.col[x]; + uint32 block = base + off->block.col[x]; if(block < MAX_BLOCKS) { @@ -301,11 +301,11 @@ { for(int y = r.top; y < r.bottom; y += bs.y, dst += block_pitch) { - uint32 base = o->block.row[y]; + uint32 base = off->block.row[y]; for(int x = r.left; x < r.right; x += bs.x) { - uint32 block = base + o->block.col[x]; + uint32 block = base + off->block.col[x]; if(block < MAX_BLOCKS) { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTexture.cpp pcsx2-1.4.0/plugins/GSdx/GSTexture.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTexture.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTexture.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,11 @@ : m_scale(1, 1) , m_size(0, 0) , m_type(0) + , m_format(0) , m_msaa(false) + , last_frame_used(0) , LikelyOffset(false) + , OffsetHack_modx(0.0f) + , OffsetHack_mody(0.0f) { } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFX11.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureFX11.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFX11.cpp 2014-02-04 21:42:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureFX11.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -54,7 +54,7 @@ memset(&sd, 0, sizeof(sd)); - sd.Filter = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_POINT; + sd.Filter = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_MIP_POINT; sd.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; sd.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; sd.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; @@ -118,7 +118,9 @@ GSVertexShader11 vs; - CompileShader(IDR_TFX_FX, "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); + vector shader; + theApp.LoadResource(IDR_TFX_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "tfx.fx", "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); m_vs[sel] = vs; @@ -163,7 +165,9 @@ {NULL, NULL}, }; - CompileShader(IDR_TFX_FX, "gs_main", macro, &gs); + vector shader; + theApp.LoadResource(IDR_TFX_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "tfx.fx", "gs_main", macro, &gs); m_gs[sel] = gs; } @@ -178,7 +182,7 @@ if(i == m_ps.end()) { - string str[18]; + string str[20]; str[0] = format("%d", sel.fst); str[1] = format("%d", sel.wms); @@ -198,6 +202,8 @@ str[15] = format("%d", sel.spritehack); str[16] = format("%d", sel.tcoffsethack); str[17] = format("%d", sel.point_sampler); + str[18] = format("%d", sel.shuffle); + str[19] = format("%d", sel.read_ba); D3D11_SHADER_MACRO macro[] = { @@ -219,12 +225,16 @@ {"PS_SPRITEHACK", str[15].c_str()}, {"PS_TCOFFSETHACK", str[16].c_str()}, {"PS_POINT_SAMPLER", str[17].c_str()}, + {"PS_SHUFFLE", str[18].c_str() }, + {"PS_READ_BA", str[19].c_str() }, {NULL, NULL}, }; CComPtr ps; - CompileShader(IDR_TFX_FX, "ps_main", macro, &ps); + vector shader; + theApp.LoadResource(IDR_TFX_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "tfx.fx", "ps_main", macro, &ps); m_ps[sel] = ps; @@ -259,7 +269,7 @@ memset(&sd, 0, sizeof(sd)); - af.Filter = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + af.Filter = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3D11_FILTER_ANISOTROPIC : D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; sd.Filter = ssel.ltf ? af.Filter : D3D11_FILTER_MIN_MAG_MIP_POINT; sd.AddressU = ssel.tau ? D3D11_TEXTURE_ADDRESS_WRAP : D3D11_TEXTURE_ADDRESS_CLAMP; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFX9.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureFX9.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFX9.cpp 2014-07-15 05:47:26.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureFX9.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -96,7 +96,9 @@ GSVertexShader9 vs; - CompileShader(IDR_TFX_FX, "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); + vector shader; + theApp.LoadResource(IDR_TFX_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "vs_main", macro, &vs.vs, layout, countof(layout), &vs.il); m_vs[sel] = vs; @@ -179,7 +181,9 @@ CComPtr ps; - CompileShader(IDR_TFX_FX, "ps_main", macro, &ps); + vector shader; + theApp.LoadResource(IDR_TFX_FX, shader); + CompileShader((const char *)shader.data(), shader.size(), "ps_main", macro, &ps); m_ps[sel] = ps; @@ -209,8 +213,8 @@ memset(ss, 0, sizeof(*ss)); - ss->Anisotropic[0] = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; - ss->Anisotropic[1] = !!theApp.GetConfig("AnisotropicFiltering", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_POINT; + ss->Anisotropic[0] = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_LINEAR; + ss->Anisotropic[1] = theApp.GetConfig("MaxAnisotropy", 0) && !theApp.GetConfig("paltex", 0) ? D3DTEXF_ANISOTROPIC : D3DTEXF_POINT; ss->FilterMin[0] = ssel.ltf ? ss->Anisotropic[0] : D3DTEXF_POINT; ss->FilterMag[0] = ssel.ltf ? ss->Anisotropic[0] : D3DTEXF_POINT; ss->FilterMip[0] = ssel.ltf ? ss->Anisotropic[0] : D3DTEXF_POINT; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFXOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureFXOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureFXOGL.cpp 2014-10-02 07:33:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureFXOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -25,6 +25,7 @@ static const uint32 g_vs_cb_index = 20; static const uint32 g_ps_cb_index = 21; +static const uint32 g_gs_cb_index = 22; void GSDeviceOGL::CreateTextureFX() { @@ -33,17 +34,42 @@ // warning 1 sampler by image unit. So you cannot reuse m_ps_ss... m_palette_ss = CreateSampler(false, false, false); - gl_BindSampler(1, m_palette_ss); + glBindSampler(1, m_palette_ss); // Pre compile all Geometry & Vertex Shader // It might cost a seconds at startup but it would reduce benchmark pollution - m_gs = CompileGS(); + GL_PUSH("Compile GS"); - for (uint32 key = 0; key < VSSelector::size(); key++) - m_vs[key] = CompileVS(VSSelector(key)); + for (uint32 key = 0; key < countof(m_gs); key++) { + GSSelector sel(key); + if (sel.point == sel.sprite) + m_gs[key] = 0; + else + m_gs[key] = CompileGS(GSSelector(key)); + } + + GL_POP(); + + GL_PUSH("Compile VS"); + + for (uint32 key = 0; key < countof(m_vs); key++) { + // wildhack is only useful if both TME and FST are enabled. + VSSelector sel(key); + if (sel.wildhack && (!sel.tme || !sel.fst)) + m_vs[key] = 0; + else + m_vs[key] = CompileVS(sel, !GLLoader::found_GL_ARB_clip_control); + } + + GL_POP(); - for (uint32 key = 0; key < OMDepthStencilSelector::size(); key++) + // Enable all bits for stencil operations. Technically 1 bit is + // enough but buffer is polluted with noise. Clear will be limited + // to the mask. + glStencilMask(0xFF); + for (uint32 key = 0; key < countof(m_om_dss); key++) { m_om_dss[key] = CreateDepthStencil(OMDepthStencilSelector(key)); + } // Help to debug FS in apitrace m_apitrace = CompilePS(PSSelector()); @@ -56,7 +82,7 @@ if (dssel.date) { dss->EnableStencil(); - dss->SetStencil(GL_EQUAL, dssel.alpha_stencil ? GL_ZERO : GL_KEEP); + dss->SetStencil(GL_EQUAL, GL_KEEP); } if(dssel.ztst != ZTST_ALWAYS || dssel.zwe) @@ -75,43 +101,9 @@ return dss; } -GSBlendStateOGL* GSDeviceOGL::CreateBlend(OMBlendSelector bsel, uint8 afix) -{ - GSBlendStateOGL* bs = new GSBlendStateOGL(); - - if(bsel.abe) - { - int i = ((bsel.a * 3 + bsel.b) * 3 + bsel.c) * 3 + bsel.d; - - bs->EnableBlend(); - bs->SetRGB(m_blendMapD3D9[i].op, m_blendMapD3D9[i].src, m_blendMapD3D9[i].dst); - - if(m_blendMapD3D9[i].bogus == 1) - { - if (bsel.a == 0) - bs->SetRGB(m_blendMapD3D9[i].op, GL_ONE, m_blendMapD3D9[i].dst); - else - bs->SetRGB(m_blendMapD3D9[i].op, m_blendMapD3D9[i].src, GL_ONE); - - const string afixstr = format("%d >> 7", afix); - const char *col[3] = {"Cs", "Cd", "0"}; - const char *alpha[3] = {"As", "Ad", afixstr.c_str()}; - - // FIXME, need to investigate OGL capabilities. Maybe for OGL5 ;) - fprintf(stderr, "Impossible blend for D3D: (%s - %s) * %s + %s\n", col[bsel.a], col[bsel.b], alpha[bsel.c], col[bsel.d]); - } - - // Not very good but I don't wanna write another 81 row table - if(bsel.negative) bs->RevertOp(); - } - - bs->SetMask(bsel.wr, bsel.wg, bsel.wb, bsel.wa); - - return bs; -} - void GSDeviceOGL::SetupCB(const VSConstantBuffer* vs_cb, const PSConstantBuffer* ps_cb) { + GL_PUSH("UBO"); if(m_vs_cb_cache.Update(vs_cb)) { m_vs_cb->upload(vs_cb); } @@ -119,65 +111,21 @@ if(m_ps_cb_cache.Update(ps_cb)) { m_ps_cb->upload(ps_cb); } - + GL_POP(); } void GSDeviceOGL::SetupVS(VSSelector sel) { - if (GLLoader::found_GL_ARB_shader_subroutine) { - GLuint sub[1]; - sub[0] = sel.tme ? 1 + (uint32)sel.fst : 0; - m_shader->VS_subroutine(sub); - // Handle by subroutine useless now - sel.tme = 0; - sel.fst = 0; - } - - m_shader->VS(m_vs[sel], 1); + m_shader->VS(m_vs[sel]); } -void GSDeviceOGL::SetupGS(bool enable) +void GSDeviceOGL::SetupGS(GSSelector sel) { - if (enable) - m_shader->GS(m_gs); - else - m_shader->GS(0); + m_shader->GS(m_gs[sel]); } void GSDeviceOGL::SetupPS(PSSelector sel) { - if (GLLoader::found_GL_ARB_shader_subroutine) { - GLuint tfx = sel.tfx > 3 ? 19 : 11 + (uint32)sel.tfx + (uint32)sel.tcc*4; - - GLuint colclip = 8 + (uint32)sel.colclip; - - GLuint clamp = - (sel.wms == 2 && sel.wmt == 2) ? 20 : - (sel.wms == 2) ? 21 : - (sel.wmt == 2) ? 22 : 23; - - GLuint wrap = - (sel.wms == 2 && sel.wmt == 2) ? 24 : - (sel.wms == 3 && sel.wmt == 3) ? 25 : - (sel.wms == 2 && sel.wmt == 3) ? 26 : - (sel.wms == 3 && sel.wmt == 2) ? 27 : - (sel.wms == 2) ? 28 : - (sel.wmt == 3) ? 29 : - (sel.wms == 3) ? 30 : - (sel.wmt == 2) ? 31 : 32; - - GLuint sub[5] = {sel.atst, colclip, tfx, clamp, wrap}; - - m_shader->PS_subroutine(sub); - // Handle by subroutine useless now - sel.atst = 0; - sel.colclip = 0; - sel.tfx = 0; - sel.tcc = 0; - // sel.wms = 0; - // sel.wmt = 0; - } - // ************************************************************* // Static // ************************************************************* @@ -194,7 +142,7 @@ // ************************************************************* // Dynamic // ************************************************************* - m_shader->PS(ps, 3); + m_shader->PS(ps); } void GSDeviceOGL::SetupSampler(PSSamplerSelector ssel) @@ -212,28 +160,7 @@ return m_palette_ss; } -void GSDeviceOGL::SetupOM(OMDepthStencilSelector dssel, OMBlendSelector bsel, uint8 afix) +void GSDeviceOGL::SetupOM(OMDepthStencilSelector dssel) { - GSDepthStencilOGL* dss = m_om_dss[dssel]; - - OMSetDepthStencilState(dss, 1); - - // ************************************************************* - // Static - // ************************************************************* - auto j = m_om_bs.find(bsel); - GSBlendStateOGL* bs; - - if(j == m_om_bs.end()) - { - bs = CreateBlend(bsel, afix); - m_om_bs[bsel] = bs; - } else { - bs = j->second; - } - - // ************************************************************* - // Dynamic - // ************************************************************* - OMSetBlendState(bs, (float)(int)afix / 0x80); + OMSetDepthStencilState(m_om_dss[dssel]); } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTexture.h pcsx2-1.4.0/plugins/GSdx/GSTexture.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTexture.h 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTexture.h 2016-01-05 17:28:08.000000000 +0000 @@ -47,6 +47,8 @@ virtual bool Map(GSMap& m, const GSVector4i* r = NULL) = 0; virtual void Unmap() = 0; virtual bool Save(const string& fn, bool dds = false) = 0; + virtual void Invalidate() {} + virtual uint32 GetID() { return 0; } GSVector2 GetScale() const {return m_scale;} void SetScale(const GSVector2& scale) {m_scale = scale;} @@ -67,4 +69,7 @@ bool LikelyOffset; float OffsetHack_modx; float OffsetHack_mody; + + // Typical size of a RGBA texture + virtual uint32 GetMemUsage() { return m_size.x * m_size.y * 4; } }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureOGL.cpp 2014-11-14 10:43:42.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,45 +23,59 @@ #include #include "GSTextureOGL.h" #include "GLState.h" +#include "GSPng.h" #ifdef ENABLE_OGL_DEBUG_MEM_BW -extern uint32 g_texture_upload_byte; +extern uint64 g_real_texture_upload_byte; #endif +// FIXME find the optimal number of PBO +#define PBO_POOL_SIZE 8 + // FIXME OGL4: investigate, only 1 unpack buffer always bound namespace PboPool { - + GLuint m_pool[PBO_POOL_SIZE]; uint32 m_offset[PBO_POOL_SIZE]; char* m_map[PBO_POOL_SIZE]; uint32 m_current_pbo = 0; uint32 m_size; - const uint32 m_pbo_size = 4*1024*1024; + bool m_texture_storage; + GLsync m_fence[PBO_POOL_SIZE]; + const uint32 m_pbo_size = 8*1024*1024; -#ifndef ENABLE_GLES // Option for buffer storage - // Note there is a barrier (but maybe coherent is faster) // XXX: actually does I really need coherent and barrier??? // As far as I understand glTexSubImage2D is a client-server transfer so no need to make // the value visible to the server - const GLbitfield map_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT /*| GL_MAP_COHERENT_BIT*/; - // FIXME do I need GL_DYNAMIC_STORAGE_BIT to allow write? - const GLbitfield create_flags = map_flags /*| GL_DYNAMIC_STORAGE_BIT*/ | GL_CLIENT_STORAGE_BIT; -#endif - + const GLbitfield common_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT; + const GLbitfield map_flags = common_flags | GL_MAP_FLUSH_EXPLICIT_BIT; + const GLbitfield create_flags = common_flags | GL_CLIENT_STORAGE_BIT; + + // Perf impact (test was only done on a gs dump): + // Normal (fast): Message:Buffer detailed info: Buffer object 9 (bound to + // GL_PIXEL_UNPACK_BUFFER_ARB, usage hint is GL_STREAM_COPY) will use VIDEO + // memory as the source for buffer object operations. + // + // Persistent (slower): Message:Buffer detailed info: Buffer object 8 + // (bound to GL_PIXEL_UNPACK_BUFFER_ARB, usage hint is GL_DYNAMIC_DRAW) + // will use DMA CACHED memory as the source for buffer object operations void Init() { - gl_GenBuffers(countof(m_pool), m_pool); + glGenBuffers(countof(m_pool), m_pool); + m_texture_storage = GLLoader::found_GL_ARB_buffer_storage; + // Code is really faster on MT driver. So far only nvidia support it + if (!GLLoader::nvidia_buggy_driver) + m_texture_storage &= (theApp.GetConfig("ogl_texture_storage", 0) == 1); for (size_t i = 0; i < countof(m_pool); i++) { BindPbo(); - if (GLLoader::found_GL_ARB_buffer_storage) { -#ifndef ENABLE_GLES - gl_BufferStorage(GL_PIXEL_UNPACK_BUFFER, m_pbo_size, NULL, create_flags); - m_map[m_current_pbo] = (char*)gl_MapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, m_pbo_size, map_flags); -#endif + if (m_texture_storage) { + glBufferStorage(GL_PIXEL_UNPACK_BUFFER, m_pbo_size, NULL, create_flags); + m_map[m_current_pbo] = (char*)glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, m_pbo_size, map_flags); + m_fence[m_current_pbo] = 0; } else { - gl_BufferData(GL_PIXEL_UNPACK_BUFFER, m_pbo_size, NULL, GL_STREAM_COPY); + glBufferData(GL_PIXEL_UNPACK_BUFFER, m_pbo_size, NULL, GL_STREAM_COPY); m_map[m_current_pbo] = NULL; } @@ -78,9 +92,10 @@ fprintf(stderr, "BUG: PBO too small %d but need %d\n", m_pbo_size, m_size); } - if (GLLoader::found_GL_ARB_buffer_storage) { + if (m_texture_storage) { if (m_offset[m_current_pbo] + m_size >= m_pbo_size) { - NextPbo(); + //NextPbo(); // For test purpose + NextPboWithSync(); } // Note: texsubimage will access currently bound buffer @@ -103,27 +118,17 @@ BindPbo(); // Be sure the map is aligned - map = (char*)gl_MapBufferRange(GL_PIXEL_UNPACK_BUFFER, m_offset[m_current_pbo], m_size, flags); + map = (char*)glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, m_offset[m_current_pbo], m_size, flags); } return map; } - // Used to unmap the buffer when context was detached. - void UnmapAll() { - for (size_t i = 0; i < countof(m_pool); i++) { - m_map[i] = NULL; - m_offset[m_current_pbo] = 0; - } - } - void Unmap() { - if (GLLoader::found_GL_ARB_buffer_storage) { - // As far as I understand glTexSubImage2D is a client-server transfer so no need to make - // the value visible to the server - //gl_MemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT); + if (m_texture_storage) { + glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, m_offset[m_current_pbo], m_size); } else { - gl_UnmapBuffer(GL_PIXEL_UNPACK_BUFFER); + glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); } } @@ -132,13 +137,23 @@ } void Destroy() { - if (GLLoader::found_GL_ARB_buffer_storage) - UnmapAll(); - gl_DeleteBuffers(countof(m_pool), m_pool); + if (m_texture_storage) { + for (size_t i = 0; i < countof(m_pool); i++) { + m_map[i] = NULL; + m_offset[i] = 0; + glDeleteSync(m_fence[i]); + + // Don't know if we must do it + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, m_pool[i]); + glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER); + } + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + } + glDeleteBuffers(countof(m_pool), m_pool); } void BindPbo() { - gl_BindBuffer(GL_PIXEL_UNPACK_BUFFER, m_pool[m_current_pbo]); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, m_pool[m_current_pbo]); } void NextPbo() { @@ -147,8 +162,28 @@ m_offset[m_current_pbo] = 0; } + void NextPboWithSync() { + m_fence[m_current_pbo] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + NextPbo(); + if (m_fence[m_current_pbo]) { +#ifdef ENABLE_OGL_DEBUG_FENCE + GLenum status = glClientWaitSync(m_fence[m_current_pbo], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); +#else + glClientWaitSync(m_fence[m_current_pbo], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); +#endif + glDeleteSync(m_fence[m_current_pbo]); + m_fence[m_current_pbo] = 0; + +#ifdef ENABLE_OGL_DEBUG_FENCE + if (status != GL_ALREADY_SIGNALED) { + fprintf(stderr, "GL_PIXEL_UNPACK_BUFFER: Sync Sync! Buffer too small\n"); + } +#endif + } + } + void UnbindPbo() { - gl_BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } void EndTransfer() { @@ -162,25 +197,23 @@ // glPixelStorei(GL_UNPACK_ALIGNMENT, 1); GSTextureOGL::GSTextureOGL(int type, int w, int h, int format, GLuint fbo_read) - : m_pbo_id(0), - m_pbo_size(0) + : m_pbo_size(0), m_dirty(false), m_clean(false), m_local_buffer(NULL) { - // m_size.x = w; - // m_size.y = h; - // FIXME + // OpenGL didn't like dimensions of size 0 m_size.x = max(1,w); m_size.y = max(1,h); m_format = format; m_type = type; m_fbo_read = fbo_read; m_texture_id = 0; - memset(&m_handles, 0, countof(m_handles) * sizeof(m_handles[0]) ); // Bunch of constant parameter switch (m_format) { + // 1 Channel integer + case GL_R32UI: case GL_R32I: m_int_format = GL_RED_INTEGER; - m_int_type = GL_INT; + m_int_type = (m_format == GL_R32UI) ? GL_UNSIGNED_INT : GL_INT; m_int_alignment = 4; m_int_shift = 2; break; @@ -190,21 +223,56 @@ m_int_alignment = 2; m_int_shift = 1; break; + + // 1 Channel normalized + case GL_R8: + m_int_format = GL_RED; + m_int_type = GL_UNSIGNED_BYTE; + m_int_alignment = 1; + m_int_shift = 0; + break; + + // 4 channel normalized + case GL_RGBA16: + m_int_format = GL_RGBA; + m_int_type = GL_UNSIGNED_SHORT; + m_int_alignment = 8; + m_int_shift = 3; + break; case GL_RGBA8: m_int_format = GL_RGBA; m_int_type = GL_UNSIGNED_BYTE; m_int_alignment = 4; m_int_shift = 2; break; - case GL_R8: - m_int_format = GL_RED; - m_int_type = GL_UNSIGNED_BYTE; - m_int_alignment = 1; - m_int_shift = 0; + + // 4 channel integer + case GL_RGBA16I: + case GL_RGBA16UI: + m_int_format = GL_RGBA_INTEGER; + m_int_type = (m_format == GL_R16UI) ? GL_UNSIGNED_SHORT : GL_SHORT; + m_int_alignment = 8; + m_int_shift = 3; + break; + + // 4 channel float + case GL_RGBA32F: + m_int_format = GL_RGBA; + m_int_type = GL_FLOAT; + m_int_alignment = 16; + m_int_shift = 4; + break; + case GL_RGBA16F: + m_int_format = GL_RGBA; + m_int_type = GL_HALF_FLOAT; + m_int_alignment = 8; + m_int_shift = 3; break; + + // Special case 0: case GL_DEPTH32F_STENCIL8: - // Backbuffer & dss aren't important + // Backbuffer & dss aren't important m_int_format = 0; m_int_type = 0; m_int_alignment = 0; @@ -214,123 +282,93 @@ ASSERT(0); } - // Generate the buffer + // Generate & Allocate the buffer switch (m_type) { case GSTexture::Offscreen: - //FIXME I not sure we need a pixel buffer object. It seems more a texture - // gl_GenBuffers(1, &m_texture_id); - // ASSERT(0); + // 8B is the worst case for depth/stencil + // FIXME I think it is only used for color. So you can save half of the size + m_local_buffer = (uint8*)_aligned_malloc(m_size.x * m_size.y * 4, 32); case GSTexture::Texture: case GSTexture::RenderTarget: case GSTexture::DepthStencil: - glGenTextures(1, &m_texture_id); + glCreateTextures(GL_TEXTURE_2D, 1, &m_texture_id); + glTextureStorage2D(m_texture_id, 1+GL_TEX_LEVEL_0, m_format, m_size.x, m_size.y); + if (m_format == GL_R8) { + // Emulate DX behavior, beside it avoid special code in shader to differentiate + // palette texture from a GL_RGBA target or a GL_R texture. + glTextureParameteri(m_texture_id, GL_TEXTURE_SWIZZLE_A, GL_RED); + } break; case GSTexture::Backbuffer: - break; default: break; } - - // Allocate the buffer - switch (m_type) { - case GSTexture::Offscreen: - // Extra buffer to handle various pixel transfer - gl_GenBuffers(1, &m_pbo_id); - - // Allocate a pbo with the texture - m_pbo_size = (m_size.x * m_size.y) << m_int_shift; - - gl_BindBuffer(GL_PIXEL_PACK_BUFFER, m_pbo_id); - gl_BufferData(GL_PIXEL_PACK_BUFFER, m_pbo_size, NULL, GL_STREAM_READ); - gl_BindBuffer(GL_PIXEL_PACK_BUFFER, 0); - - case GSTexture::DepthStencil: - case GSTexture::RenderTarget: - case GSTexture::Texture: - EnableUnit(); - gl_TexStorage2D(GL_TEXTURE_2D, 1, m_format, m_size.x, m_size.y); - break; - default: break; - } } GSTextureOGL::~GSTextureOGL() { /* Unbind the texture from our local state */ - + if (m_texture_id == GLState::rt) GLState::rt = 0; if (m_texture_id == GLState::ds) GLState::ds = 0; - if (m_texture_id == GLState::tex) - GLState::tex = 0; - if (m_texture_id == GLState::tex_unit[0]) - GLState::tex_unit[0] = 0; - if (m_texture_id == GLState::tex_unit[1]) - GLState::tex_unit[1] = 0; + for (size_t i = 0; i < countof(GLState::tex_unit); i++) { + if (m_texture_id == GLState::tex_unit[i]) + GLState::tex_unit[i] = 0; + } - gl_DeleteBuffers(1, &m_pbo_id); glDeleteTextures(1, &m_texture_id); + + if (m_local_buffer) + _aligned_free(m_local_buffer); } -void GSTextureOGL::Clear(const void *data) +void GSTextureOGL::Invalidate() { -#ifndef ENABLE_GLES - gl_ClearTexImage(m_texture_id, 0, m_int_format, m_int_type, data); -#endif + if (m_dirty && glInvalidateTexImage) { + glInvalidateTexImage(m_texture_id, GL_TEX_LEVEL_0); + m_dirty = false; + } } bool GSTextureOGL::Update(const GSVector4i& r, const void* data, int pitch) { ASSERT(m_type != GSTexture::DepthStencil && m_type != GSTexture::Offscreen); + GL_PUSH("Upload Texture %d", m_texture_id); - EnableUnit(); + m_dirty = true; + m_clean = false; - // Note: reduce noise for gl retracers - // It might introduce bug after an emulator pause so always set it in standard mode - if (GLLoader::in_replayer) { - static uint32 unpack_alignment = 0; - if (unpack_alignment != m_int_alignment) { - unpack_alignment = m_int_alignment; - glPixelStorei(GL_UNPACK_ALIGNMENT, m_int_alignment); - } - } else { - glPixelStorei(GL_UNPACK_ALIGNMENT, m_int_alignment); - } + glPixelStorei(GL_UNPACK_ALIGNMENT, m_int_alignment); char* src = (char*)data; - char* map = PboPool::Map(r.height() * pitch); + uint32 row_byte = r.width() << m_int_shift; + uint32 map_size = r.height() * row_byte; + char* map = PboPool::Map(map_size); #ifdef ENABLE_OGL_DEBUG_MEM_BW - // Note: pitch is the line size that will be copied into the PBO - // pitch >> m_int_shift is the line size that will be actually dma-ed into the GPU - g_texture_upload_byte += pitch * r.height(); + g_real_texture_upload_byte += map_size; #endif - memcpy(map, src, pitch*r.height()); + // PERF: slow path of the texture upload. Dunno if we could do better maybe check if TC can keep row_byte == pitch + // Note: row_byte != pitch + for (int h = 0; h < r.height(); h++) { + memcpy(map, src, row_byte); + map += row_byte; + src += pitch; + } PboPool::Unmap(); - // Note: reduce noise for gl retracers - // It might introduce bug after an emulator pause so always set it in standard mode - if (GLLoader::in_replayer) { - static int unpack_row_length = 0; - if (unpack_row_length != (pitch >> m_int_shift)) { - unpack_row_length = pitch >> m_int_shift; - glPixelStorei(GL_UNPACK_ROW_LENGTH, unpack_row_length); - } - } else { - glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch >> m_int_shift); - } - glTexSubImage2D(GL_TEXTURE_2D, 0, r.x, r.y, r.width(), r.height(), m_int_format, m_int_type, (const void*)PboPool::Offset()); - // Normally only affect TexSubImage call. (i.e. only the previous line) - //glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + glTextureSubImage2D(m_texture_id, GL_TEX_LEVEL_0, r.x, r.y, r.width(), r.height(), m_int_format, m_int_type, (const void*)PboPool::Offset()); // FIXME OGL4: investigate, only 1 unpack buffer always bound PboPool::UnbindPbo(); PboPool::EndTransfer(); + GL_POP(); return true; // For reference, standard upload without pbo (Used to crash on FGLRX) @@ -339,7 +377,7 @@ glPixelStorei(GL_UNPACK_ALIGNMENT, m_int_alignment); glPixelStorei(GL_UNPACK_ROW_LENGTH, pitch >> m_int_shift); - glTexSubImage2D(GL_TEXTURE_2D, 0, r.x, r.y, r.width(), r.height(), m_int_format, m_int_type, data); + glTextureSubImage2D(m_texture_id, GL_TEX_LEVEL_0, r.x, r.y, r.width(), r.height(), m_int_format, m_int_type, data); // FIXME useful? glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); // Restore default behavior @@ -348,92 +386,39 @@ #endif } -GLuint64 GSTextureOGL::GetHandle(GLuint sampler_id) -{ - ASSERT(sampler_id < 12); -#ifndef ENABLE_GLES - if (!m_handles[sampler_id]) { - m_handles[sampler_id] = gl_GetTextureSamplerHandleARB(m_texture_id, sampler_id); - gl_MakeTextureHandleResidentARB(m_handles[sampler_id]); - } -#endif - - return m_handles[sampler_id]; -} - -void GSTextureOGL::EnableUnit() -{ - /* Not a real texture */ - ASSERT(!IsBackbuffer()); - - if (GLState::tex != m_texture_id) { - GLState::tex = m_texture_id; - glBindTexture(GL_TEXTURE_2D, m_texture_id); - } -} - bool GSTextureOGL::Map(GSMap& m, const GSVector4i* r) { + // LOTS OF CRAP CODE!!!! PLEASE FIX ME !!! if (m_type != GSTexture::Offscreen) return false; - // The function allow to modify the texture from the CPU - // Set m.bits <- pointer to the data - // Set m.pitch <- size of a row - // I think in opengl we need to copy back the data to the RAM: glReadPixels — read a block of pixels from the frame buffer - // - // gl_MapBuffer — map a buffer object's data store - // Can be used on GL_PIXEL_UNPACK_BUFFER or GL_TEXTURE_BUFFER - - // Bind the texture to the read framebuffer to avoid any disturbance - EnableUnit(); - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); - gl_FramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture_id, 0); - glReadBuffer(GL_COLOR_ATTACHMENT0); - - // FIXME It might be possible to only read a subrange of the texture based on r object - // Load the PBO with the data - gl_BindBuffer(GL_PIXEL_PACK_BUFFER, m_pbo_id); - glPixelStorei(GL_PACK_ALIGNMENT, m_int_alignment); - glReadPixels(0, 0, m_size.x, m_size.y, m_int_format, m_int_type, 0); - m.pitch = m_size.x << m_int_shift; - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); + // The fastest way will be to use a PBO to read the data asynchronously. Unfortunately GSdx + // architecture is waiting the data right now. - // Give access from the CPU - m.bits = (uint8*) gl_MapBufferRange(GL_PIXEL_PACK_BUFFER, 0, m_pbo_size, GL_MAP_READ_BIT); +#if 0 + // Maybe it is as good as the code below. I don't know - if ( m.bits ) { - return true; - } else { - fprintf(stderr, "bad mapping of the pbo\n"); - gl_BindBuffer(GL_PIXEL_PACK_BUFFER, 0); - return false; - } + glGetTextureImage(m_texture_id, GL_TEX_LEVEL_0, m_int_format, m_int_type, 1024*1024*16, m_local_buffer); -#if 0 - if(m_texture && m_desc.Usage == D3D11_USAGE_STAGING) - { - D3D11_MAPPED_SUBRESOURCE map; +#else - if(SUCCEEDED(m_ctx->Map(m_texture, 0, D3D11_MAP_READ_WRITE, 0, &map))) - { - m.bits = (uint8*)map.pData; - m.pitch = (int)map.RowPitch; + // Bind the texture to the read framebuffer to avoid any disturbance + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture_id, 0); - return true; - } - } + glPixelStorei(GL_PACK_ALIGNMENT, m_int_alignment); + glReadPixels(0, 0, m_size.x, m_size.y, m_int_format, m_int_type, m_local_buffer); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - return false; #endif + + m.bits = m_local_buffer; + m.pitch = m_size.x << m_int_shift; + + return true; } void GSTextureOGL::Unmap() { - if (m_type == GSTexture::Offscreen) { - gl_UnmapBuffer(GL_PIXEL_PACK_BUFFER); - gl_BindBuffer(GL_PIXEL_PACK_BUFFER, 0); - - } } #ifndef _WINDOWS @@ -473,6 +458,8 @@ { // Build a BMP file FILE* fp = fopen(fn.c_str(), "wb"); + if (fp == NULL) + return; BITMAPINFOHEADER bih; @@ -538,96 +525,86 @@ fclose(fp); } -void GSTextureOGL::SaveRaw(const string& fn, const void* image, uint32 pitch) -{ - // Build a raw CSV file - FILE* fp = fopen(fn.c_str(), "w"); - - uint32* data = (uint32*)image; - - for(int h = m_size.y; h > 0; h--) { - for (int w = m_size.x; w > 0; w--, data += 1) { - if (*data > 0xffffff) - ; - else { - fprintf(fp, "%x", *data); - } - if ( w > 1) - fprintf(fp, ","); - } - fprintf(fp, "\n"); - } - - fclose(fp); -} - - bool GSTextureOGL::Save(const string& fn, bool dds) { // Collect the texture data uint32 pitch = 4 * m_size.x; - char* image = (char*)malloc(pitch * m_size.y); + uint32 buf_size = pitch * m_size.y * 2;// Note *2 for security (depth/stencil) + char* image = (char*)malloc(buf_size); bool status = true; +#ifdef ENABLE_OGL_DEBUG + GSPng::Format fmt = GSPng::RGB_A_PNG; +#else + GSPng::Format fmt = GSPng::RGB_PNG; +#endif - // FIXME instead of swapping manually B and R maybe you can request the driver to do it - // for us if (IsBackbuffer()) { - //glReadBuffer(GL_BACK); - //gl_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); glReadPixels(0, 0, m_size.x, m_size.y, GL_RGBA, GL_UNSIGNED_BYTE, image); } else if(IsDss()) { - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); - gl_FramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_texture_id, 0); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_texture_id, 0); glReadPixels(0, 0, m_size.x, m_size.y, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, image); - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + + fmt = GSPng::DEPTH_PNG; } else if(m_format == GL_R32I) { - gl_ActiveTexture(GL_TEXTURE0 + 6); - glBindTexture(GL_TEXTURE_2D, m_texture_id); + glGetTextureImage(m_texture_id, 0, GL_RED_INTEGER, GL_INT, buf_size, image); -#ifndef ENABLE_GLES - glGetTexImage(GL_TEXTURE_2D, 0, GL_RED_INTEGER, GL_INT, image); - SaveRaw(fn, image, pitch); -#endif + fmt = GSPng::R32I_PNG; // Not supported in Save function status = false; } else { - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); - gl_ActiveTexture(GL_TEXTURE0 + 6); - glBindTexture(GL_TEXTURE_2D, m_texture_id); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture_id, 0); - gl_FramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture_id, 0); - - glReadBuffer(GL_COLOR_ATTACHMENT0); - if (m_format == GL_RGBA8) + if (m_format == GL_RGBA8) { glReadPixels(0, 0, m_size.x, m_size.y, GL_RGBA, GL_UNSIGNED_BYTE, image); + } else if (m_format == GL_R16UI) { glReadPixels(0, 0, m_size.x, m_size.y, GL_RED_INTEGER, GL_UNSIGNED_SHORT, image); + fmt = GSPng::R16I_PNG; // Not supported in Save function status = false; } else if (m_format == GL_R8) { + fmt = GSPng::R8I_PNG; glReadPixels(0, 0, m_size.x, m_size.y, GL_RED, GL_UNSIGNED_BYTE, image); // Not supported in Save function status = false; } - gl_BindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); } +#ifdef ENABLE_OGL_PNG + GSPng::Save(fmt, fn, image, m_size.x, m_size.y, pitch); +#else if (status) Save(fn, image, pitch); +#endif free(image); - // Restore state - gl_ActiveTexture(GL_TEXTURE0 + 3); - glBindTexture(GL_TEXTURE_2D, GLState::tex); - return status; } +uint32 GSTextureOGL::GetMemUsage() +{ + switch (m_type) { + case GSTexture::Offscreen: + return m_size.x * m_size.y * (4 + m_int_alignment); + case GSTexture::Texture: + case GSTexture::RenderTarget: + return m_size.x * m_size.y * m_int_alignment; + case GSTexture::DepthStencil: + return m_size.x * m_size.y * 8; + case GSTexture::Backbuffer: + default: + return 0; + } +} diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureOGL.h pcsx2-1.4.0/plugins/GSdx/GSTextureOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureOGL.h 2013-08-17 09:05:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -23,18 +23,14 @@ #include "GSTexture.h" -// FIXME find the optimal number of PBO -#define PBO_POOL_SIZE 4 - namespace PboPool { void BindPbo(); void UnbindPbo(); void NextPbo(); + void NextPboWithSync(); char* Map(uint32 size); - void MapAll(); void Unmap(); - void UnmapAll(); uint32 Offset(); void EndTransfer(); @@ -46,9 +42,12 @@ { private: GLuint m_texture_id; // the texture id - uint32 m_pbo_id; int m_pbo_size; GLuint m_fbo_read; + bool m_dirty; + bool m_clean; + + uint8* m_local_buffer; // internal opengl format/type/alignment GLenum m_int_format; @@ -56,26 +55,24 @@ uint32 m_int_alignment; uint32 m_int_shift; - GLuint64 m_handles[12]; - public: explicit GSTextureOGL(int type, int w, int h, int format, GLuint fbo_read); virtual ~GSTextureOGL(); + void Invalidate(); bool Update(const GSVector4i& r, const void* data, int pitch); bool Map(GSMap& m, const GSVector4i* r = NULL); void Unmap(); bool Save(const string& fn, bool dds = false); void Save(const string& fn, const void* image, uint32 pitch); - void SaveRaw(const string& fn, const void* image, uint32 pitch); - - void Clear(const void *data); - - void EnableUnit(); bool IsBackbuffer() { return (m_type == GSTexture::Backbuffer); } bool IsDss() { return (m_type == GSTexture::DepthStencil); } - GLuint GetID() { return m_texture_id; } - GLuint64 GetHandle(GLuint sampler_id); + uint32 GetID() { return m_texture_id; } + bool HasBeenCleaned() { return m_clean; } + void WasAttached() { m_clean = false; m_dirty = true; } + void WasCleaned() { m_clean = true; } + + uint32 GetMemUsage(); }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureSW.cpp pcsx2-1.4.0/plugins/GSdx/GSTextureSW.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSTextureSW.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSTextureSW.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,6 +21,7 @@ #include "stdafx.h" #include "GSTextureSW.h" +#include "GSPng.h" GSTextureSW::GSTextureSW(int type, int width, int height) : m_mapped(0) @@ -122,6 +123,17 @@ { if(dds) return false; // not implemented +#ifdef ENABLE_OGL_PNG + +#ifdef ENABLE_OGL_DEBUG + GSPng::Format fmt = GSPng::RGB_A_PNG; +#else + GSPng::Format fmt = GSPng::RGB_PNG; +#endif + GSPng::Save(fmt, fn, (char*)m_data, m_size.x, m_size.y, m_pitch); + return true; + +#else if(FILE* fp = fopen(fn.c_str(), "wb")) { BITMAPINFOHEADER bih; @@ -174,4 +186,5 @@ } return false; +#endif } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread.cpp pcsx2-1.4.0/plugins/GSdx/GSThread.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread.cpp 2014-11-18 13:40:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSThread.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,53 +20,7 @@ */ #include "stdafx.h" -#include "GSThread.h" - -#ifdef _WINDOWS - -InitializeConditionVariablePtr pInitializeConditionVariable; -WakeConditionVariablePtr pWakeConditionVariable; -WakeAllConditionVariablePtr pWakeAllConditionVariable; -SleepConditionVariableSRWPtr pSleepConditionVariableSRW; -InitializeSRWLockPtr pInitializeSRWLock; -AcquireSRWLockExclusivePtr pAcquireSRWLockExclusive; -TryAcquireSRWLockExclusivePtr pTryAcquireSRWLockExclusive; -ReleaseSRWLockExclusivePtr pReleaseSRWLockExclusive; -AcquireSRWLockSharedPtr pAcquireSRWLockShared; -TryAcquireSRWLockSharedPtr pTryAcquireSRWLockShared; -ReleaseSRWLockSharedPtr pReleaseSRWLockShared; - -class InitCondVar -{ - HMODULE m_kernel32; - -public: - InitCondVar() - { - m_kernel32 = LoadLibrary("kernel32.dll"); // should not call LoadLibrary from DllMain, but kernel32.dll is the only one guaranteed to be loaded already - - pInitializeConditionVariable = (InitializeConditionVariablePtr)GetProcAddress(m_kernel32, "InitializeConditionVariable"); - pWakeConditionVariable = (WakeConditionVariablePtr)GetProcAddress(m_kernel32, "WakeConditionVariable"); - pWakeAllConditionVariable = (WakeAllConditionVariablePtr)GetProcAddress(m_kernel32, "WakeAllConditionVariable"); - pSleepConditionVariableSRW = (SleepConditionVariableSRWPtr)GetProcAddress(m_kernel32, "SleepConditionVariableSRW"); - pInitializeSRWLock = (InitializeSRWLockPtr)GetProcAddress(m_kernel32, "InitializeSRWLock"); - pAcquireSRWLockExclusive = (AcquireSRWLockExclusivePtr)GetProcAddress(m_kernel32, "AcquireSRWLockExclusive"); - pTryAcquireSRWLockExclusive = (TryAcquireSRWLockExclusivePtr)GetProcAddress(m_kernel32, "TryAcquireSRWLockExclusive"); - pReleaseSRWLockExclusive = (ReleaseSRWLockExclusivePtr)GetProcAddress(m_kernel32, "ReleaseSRWLockExclusive"); - pAcquireSRWLockShared = (AcquireSRWLockSharedPtr)GetProcAddress(m_kernel32, "AcquireSRWLockShared"); - pTryAcquireSRWLockShared = (TryAcquireSRWLockSharedPtr)GetProcAddress(m_kernel32, "TryAcquireSRWLockShared"); - pReleaseSRWLockShared = (ReleaseSRWLockSharedPtr)GetProcAddress(m_kernel32, "ReleaseSRWLockShared"); - } - - virtual ~InitCondVar() - { - FreeLibrary(m_kernel32); - } -}; - -static InitCondVar s_icv; - -#endif +#include "GSThread_CXX11.h" GSThread::GSThread() { @@ -144,13 +98,27 @@ } #else - + // Should be tested on windows too one day, native handle should be disabled there though, or adapted to windows thread #ifdef _STD_THREAD_ + + #define _NATIVE_HANDLE_ // Using std::thread native handle, allows to just use posix stuff. + #ifdef _NATIVE_HANDLE_ // std::thread join seems to be bugged, have to test it again every now and then, it did work at some point(gcc 5), seems there is bug in system lib... + pthread_t m_thread = t->native_handle(); + void *ret = NULL; + pthread_join(m_thread, &ret); + /* We are sure thread is dead, not so bad. + * Still no way to to delete that crap though... Really, wtf is this standard?? + * I guess we will have to wait that someone debug either the implementation or change standard. + * There should be a moderate memory leak for now, I am trying to find a way to fix it. + * 3kinox + */ + #else if(t->joinable()) { t->join(); } delete(t); + #endif #else void* ret = NULL; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread_CXX11.h pcsx2-1.4.0/plugins/GSdx/GSThread_CXX11.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread_CXX11.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSThread_CXX11.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2007-2009 Gabest + * http://www.gabest.org + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#pragma once + +#include "GSdx.h" +#include "boost_spsc_queue.hpp" + +class IGSThread +{ +protected: + virtual void ThreadProc() = 0; +}; + +// let us use std::thread for now, comment out the definition to go back to pthread +// There are currently some bugs/limitations to std::thread (see various comment) +// For the moment let's keep pthread but uses new std object (mutex, cond_var) +//#define _STD_THREAD_ + +#ifdef _WINDOWS + +class GSThread : public IGSThread +{ + DWORD m_ThreadId; + HANDLE m_hThread; + + static DWORD WINAPI StaticThreadProc(void* lpParam); + +protected: + void CreateThread(); + void CloseThread(); + +public: + GSThread(); + virtual ~GSThread(); +}; + +#else + +#ifdef _STD_THREAD_ +#include +#else +#include +#endif + +class GSThread : public IGSThread +{ + #ifdef _STD_THREAD_ + std::thread *t; + #else + pthread_attr_t m_thread_attr; + pthread_t m_thread; + #endif + static void* StaticThreadProc(void* param); + +protected: + void CreateThread(); + void CloseThread(); + +public: + GSThread(); + virtual ~GSThread(); +}; + +#endif + +template class IGSJobQueue : public GSThread +{ +public: + IGSJobQueue() {} + virtual ~IGSJobQueue() {} + + virtual bool IsEmpty() const = 0; + virtual void Push(const T& item) = 0; + virtual void Wait() = 0; + + virtual void Process(T& item) = 0; + virtual int GetPixels(bool reset) = 0; +}; + +template class GSJobQueue : public IGSJobQueue +{ +protected: + std::atomic m_count; + std::atomic m_exit; + ringbuffer_base m_queue; + + std::mutex m_lock; + std::condition_variable m_empty; + std::condition_variable m_notempty; + + void ThreadProc() { + std::unique_lock l(m_lock); + + while (true) { + + while (m_count == 0) { + if (m_exit.load(memory_order_acquire)) return; + m_notempty.wait(l); + } + + l.unlock(); + + int16_t consumed = 0; + for (int16_t nb = m_count; nb >= 0; nb--) { + if (m_queue.consume_one(*this)) + consumed++; + } + + l.lock(); + + m_count -= consumed; + + if (m_count <= 0) + m_empty.notify_one(); + + } + } + +public: + GSJobQueue() : + m_count(0), + m_exit(false) + { + this->CreateThread(); + } + + virtual ~GSJobQueue() { + m_exit.store(true, memory_order_release); + m_notempty.notify_one(); + this->CloseThread(); + } + + bool IsEmpty() const { + ASSERT(m_count >= 0); + + return m_count == 0; + } + + void Push(const T& item) { + while(!m_queue.push(item)) + std::this_thread::yield(); + + std::unique_lock l(m_lock); + + m_count++; + + l.unlock(); + + m_notempty.notify_one(); + } + + void Wait() { + if (m_count > 0) { + std::unique_lock l(m_lock); + while (m_count > 0) { + m_empty.wait(l); + } + } + + ASSERT(m_count == 0); + } + + void operator() (T& item) { + this->Process(item); + } +}; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread.h pcsx2-1.4.0/plugins/GSdx/GSThread.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSThread.h 2014-12-14 11:19:15.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSThread.h 2016-01-05 17:28:08.000000000 +0000 @@ -23,427 +23,8 @@ #include "GSdx.h" -class IGSThread -{ -protected: - virtual void ThreadProc() = 0; -}; - -class IGSLock -{ -public: - virtual void Lock() = 0; - virtual bool TryLock() = 0; - virtual void Unlock() = 0; - virtual ~IGSLock() {} -}; - -class IGSEvent -{ -public: - virtual void Set() = 0; - virtual bool Wait(IGSLock* l) = 0; - virtual ~IGSEvent() {} -}; - -#ifdef _WINDOWS - -typedef void (WINAPI * InitializeConditionVariablePtr)(CONDITION_VARIABLE* ConditionVariable); -typedef void (WINAPI * WakeConditionVariablePtr)(CONDITION_VARIABLE* ConditionVariable); -typedef void (WINAPI * WakeAllConditionVariablePtr)(CONDITION_VARIABLE* ConditionVariable); -typedef BOOL (WINAPI * SleepConditionVariableSRWPtr)(CONDITION_VARIABLE* ConditionVariable, SRWLOCK* SRWLock, DWORD dwMilliseconds, ULONG Flags); -typedef void (WINAPI * InitializeSRWLockPtr)(SRWLOCK* SRWLock); -typedef void (WINAPI * AcquireSRWLockExclusivePtr)(SRWLOCK* SRWLock); -typedef BOOLEAN (WINAPI * TryAcquireSRWLockExclusivePtr)(SRWLOCK* SRWLock); -typedef void (WINAPI * ReleaseSRWLockExclusivePtr)(SRWLOCK* SRWLock); -typedef void (WINAPI * AcquireSRWLockSharedPtr)(SRWLOCK* SRWLock); -typedef BOOLEAN (WINAPI * TryAcquireSRWLockSharedPtr)(SRWLOCK* SRWLock); -typedef void (WINAPI * ReleaseSRWLockSharedPtr)(SRWLOCK* SRWLock); - -extern InitializeConditionVariablePtr pInitializeConditionVariable; -extern WakeConditionVariablePtr pWakeConditionVariable; -extern WakeAllConditionVariablePtr pWakeAllConditionVariable; -extern SleepConditionVariableSRWPtr pSleepConditionVariableSRW; -extern InitializeSRWLockPtr pInitializeSRWLock; -extern AcquireSRWLockExclusivePtr pAcquireSRWLockExclusive; -extern TryAcquireSRWLockExclusivePtr pTryAcquireSRWLockExclusive; -extern ReleaseSRWLockExclusivePtr pReleaseSRWLockExclusive; -extern AcquireSRWLockSharedPtr pAcquireSRWLockShared; -extern TryAcquireSRWLockSharedPtr pTryAcquireSRWLockShared; -extern ReleaseSRWLockSharedPtr pReleaseSRWLockShared; - -class GSThread : public IGSThread -{ - DWORD m_ThreadId; - HANDLE m_hThread; - - static DWORD WINAPI StaticThreadProc(void* lpParam); - -protected: - void CreateThread(); - void CloseThread(); - -public: - GSThread(); - virtual ~GSThread(); -}; - -class GSCritSec : public IGSLock -{ - CRITICAL_SECTION m_cs; - -public: - GSCritSec() {InitializeCriticalSection(&m_cs);} - ~GSCritSec() {DeleteCriticalSection(&m_cs);} - - void Lock() {EnterCriticalSection(&m_cs);} - bool TryLock() {return TryEnterCriticalSection(&m_cs) == TRUE;} - void Unlock() {LeaveCriticalSection(&m_cs);} -}; - -class GSEvent : public IGSEvent -{ -protected: - HANDLE m_hEvent; - -public: - GSEvent() {m_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);} - ~GSEvent() {CloseHandle(m_hEvent);} - - void Set() {SetEvent(m_hEvent);} - bool Wait(IGSLock* l) {if(l) l->Unlock(); bool b = WaitForSingleObject(m_hEvent, INFINITE) == WAIT_OBJECT_0; if(l) l->Lock(); return b;} -}; - -class GSCondVarLock : public IGSLock -{ - SRWLOCK m_lock; - -public: - GSCondVarLock() {pInitializeSRWLock(&m_lock);} - - void Lock() {pAcquireSRWLockExclusive(&m_lock);} - bool TryLock() {return pTryAcquireSRWLockExclusive(&m_lock) == TRUE;} - void Unlock() {pReleaseSRWLockExclusive(&m_lock);} - - operator SRWLOCK* () {return &m_lock;} -}; - -class GSCondVar : public IGSEvent -{ - CONDITION_VARIABLE m_cv; - -public: - GSCondVar() {pInitializeConditionVariable(&m_cv);} - - void Set() {pWakeConditionVariable(&m_cv);} - bool Wait(IGSLock* l) {return pSleepConditionVariableSRW(&m_cv, *(GSCondVarLock*)l, INFINITE, 0) != 0;} - - operator CONDITION_VARIABLE* () {return &m_cv;} -}; - -#else -// let us use std::thread for now, comment out the definition to go back to pthread -//#define _STD_THREAD_ -#ifdef _STD_THREAD_ -#include -#include -#include -#else -#include -#include -#endif - -class GSThread : public IGSThread -{ - #ifdef _STD_THREAD_ - std::thread *t; - #else - pthread_attr_t m_thread_attr; - pthread_t m_thread; - #endif - static void* StaticThreadProc(void* param); - -protected: - void CreateThread(); - void CloseThread(); - -public: - GSThread(); - virtual ~GSThread(); -}; - -class GSCritSec : public IGSLock -{ - #ifdef _STD_THREAD_ - recursive_mutex *mutex_critsec; - #else - pthread_mutexattr_t m_mutex_attr; - pthread_mutex_t m_mutex; - #endif - -public: - GSCritSec(bool recursive = true) - { - #ifdef _STD_THREAD_ - mutex_critsec = new recursive_mutex(); - #else - pthread_mutexattr_init(&m_mutex_attr); - pthread_mutexattr_settype(&m_mutex_attr, recursive ? PTHREAD_MUTEX_RECURSIVE : PTHREAD_MUTEX_NORMAL); - pthread_mutex_init(&m_mutex, &m_mutex_attr); - #endif - } - - ~GSCritSec() - { - #ifdef _STD_THREAD_ - delete(mutex_critsec); - #else - pthread_mutex_destroy(&m_mutex); - pthread_mutexattr_destroy(&m_mutex_attr); - #endif - } - - #ifdef _STD_THREAD_ - void Lock() - { - mutex_critsec->lock(); - } - - bool TryLock() - { - return mutex_critsec->try_lock(); - } - - void Unlock() - { - mutex_critsec->unlock(); - } - - recursive_mutex& GetMutex() {return ref(*mutex_critsec);} - #else - void Lock() {pthread_mutex_lock(&m_mutex);} - bool TryLock() {return pthread_mutex_trylock(&m_mutex) == 0;} - void Unlock() {pthread_mutex_unlock(&m_mutex);} - - operator pthread_mutex_t* () {return &m_mutex;} - #endif -}; -#ifndef _STD_THREAD_ -class GSEvent : public IGSEvent -{ -protected: - sem_t m_sem; - -public: - GSEvent() {sem_init(&m_sem, 0, 0);} - ~GSEvent() {sem_destroy(&m_sem);} - - void Set() {sem_post(&m_sem);} - bool Wait(IGSLock* l) {if(l) l->Unlock(); bool b = sem_wait(&m_sem) == 0; if(l) l->Lock(); return b;} -}; -#endif -class GSCondVarLock : public GSCritSec -{ -public: - GSCondVarLock() : GSCritSec(false) - { - } -}; - -class GSCondVar : public IGSEvent -{ - #ifdef _STD_THREAD_ - condition_variable_any *cond_var; - #else - pthread_cond_t m_cv; - pthread_condattr_t m_cv_attr; - #endif - -public: - GSCondVar() - { - #ifdef _STD_THREAD_ - cond_var = new condition_variable_any(); - #else - pthread_condattr_init(&m_cv_attr); - pthread_cond_init(&m_cv, &m_cv_attr); - #endif - } - - virtual ~GSCondVar() - { - #ifdef _STD_THREAD_ - delete(cond_var); - #else - pthread_condattr_destroy(&m_cv_attr); - pthread_cond_destroy(&m_cv); - #endif - - } - - #ifdef _STD_THREAD_ - void Set() - { - cond_var->notify_one(); - } - - bool Wait(IGSLock* l) - { - cond_var->wait((((GSCondVarLock*)l)->GetMutex())); // Predicate is not useful, it is implicit in the loop - return 1; // Anyway this value is not used(and no way to get it from std::thread) - } - - operator condition_variable_any* () {return cond_var;} - #else - void Set() {pthread_cond_signal(&m_cv);} - bool Wait(IGSLock* l) {return pthread_cond_wait(&m_cv, *(GSCondVarLock*)l) == 0;} - - operator pthread_cond_t* () {return &m_cv;} - #endif -}; - -#endif - -class GSAutoLock -{ - IGSLock* m_lock; - -public: - GSAutoLock(IGSLock* l) {(m_lock = l)->Lock();} - ~GSAutoLock() {m_lock->Unlock();} -}; - -template class GSJobQueue : private GSThread -{ -protected: - queue m_queue; - volatile long m_count; // NOTE: it is the safest to have our own counter because m_queue.pop() might decrement its own before the last item runs out of its scope and gets destroyed (implementation dependent) - volatile bool m_exit; - IGSEvent* m_notempty; - IGSEvent* m_empty; - IGSLock* m_lock; - - void ThreadProc() - { - m_lock->Lock(); - - while(true) - { - while(m_queue.empty()) - { - m_notempty->Wait(m_lock); - - if(m_exit) {m_lock->Unlock(); return;} - } - - T& item = m_queue.front(); - - m_lock->Unlock(); - - Process(item); - - m_lock->Lock(); - - m_queue.pop(); - - if(--m_count == 0) - { - m_empty->Set(); - } - } - } - -public: - GSJobQueue() - : m_count(0) - , m_exit(false) - { - bool condvar = !!theApp.GetConfig("condvar", 1); - - #ifdef _WINDOWS - - if(pInitializeConditionVariable == NULL) - { - condvar = false; - } - - #endif - #ifndef _STD_THREAD_ - if(condvar) - #endif - { - m_notempty = new GSCondVar(); - m_empty = new GSCondVar(); - m_lock = new GSCondVarLock(); - } - #ifndef _STD_THREAD_ - else - { - m_notempty = new GSEvent(); - m_empty = new GSEvent(); - m_lock = new GSCritSec(); - } - #endif - - CreateThread(); - } - - virtual ~GSJobQueue() - { - m_exit = true; - - m_notempty->Set(); - - CloseThread(); - - delete m_notempty; - delete m_empty; - delete m_lock; - } - - bool IsEmpty() const - { - ASSERT(m_count >= 0); - - return m_count == 0; - } - - void Push(const T& item) - { - m_lock->Lock(); - - m_queue.push(item); - - if(m_count++ == 0) - { - m_notempty->Set(); - } - - m_lock->Unlock(); - } - - void Wait() - { - if(m_count > 0) - { - m_lock->Lock(); - - while(m_count != 0) - { - m_empty->Wait(m_lock); - } - - ASSERT(m_queue.empty()); - - m_lock->Unlock(); - } - } - - virtual void Process(T& item) = 0; -}; - // http://software.intel.com/en-us/blogs/2012/11/06/exploring-intel-transactional-synchronization-extensions-with-intel-software - +#if 0 class TransactionScope { public: @@ -485,7 +66,12 @@ TransactionScope(Lock& fallBackLock_, int max_retries = 3) : fallBackLock(fallBackLock_) { - #if _M_SSE >= 0x501 + // The TSX (RTM/HLE) instructions on Intel AVX2 CPUs may either be + // absent or disabled (see errata HSD136 and specification change at + // http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/4th-gen-core-family-desktop-specification-update.pdf) + // This can cause builds for AVX2 CPUs to fail with GCC/Clang on Linux, + // so check that the RTM instructions are actually available. + #if (_M_SSE >= 0x501 && !defined(__GNUC__)) || defined(__RTM__) int nretries = 0; @@ -528,7 +114,7 @@ { fallBackLock.unlock(); } - #if _M_SSE >= 0x501 + #if (_M_SSE >= 0x501 && !defined(__GNUC__)) || defined(__RTM__) else { _xend(); @@ -536,4 +122,4 @@ #endif } }; - +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSUniformBufferOGL.h pcsx2-1.4.0/plugins/GSdx/GSUniformBufferOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSUniformBufferOGL.h 2014-10-07 17:58:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSUniformBufferOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -23,16 +23,21 @@ #include "GLState.h" +#ifdef ENABLE_OGL_DEBUG_MEM_BW +extern uint64 g_uniform_upload_byte; +#endif + + class GSUniformBufferOGL { GLuint buffer; // data object GLuint index; // GLSL slot - uint32 size; // size of the data + uint32 size; // size of the data public: GSUniformBufferOGL(GLuint index, uint32 size) : index(index) , size(size) { - gl_GenBuffers(1, &buffer); + glGenBuffers(1, &buffer); bind(); allocate(); attach(); @@ -42,13 +47,13 @@ { if (GLState::ubo != buffer) { GLState::ubo = buffer; - gl_BindBuffer(GL_UNIFORM_BUFFER, buffer); + glBindBuffer(GL_UNIFORM_BUFFER, buffer); } } void allocate() { - gl_BufferData(GL_UNIFORM_BUFFER, size, NULL, GL_STREAM_DRAW); + glBufferData(GL_UNIFORM_BUFFER, size, NULL, GL_DYNAMIC_DRAW); } void attach() @@ -56,7 +61,7 @@ // From the opengl manpage: // glBindBufferBase also binds buffer to the generic buffer binding point specified by target GLState::ubo = buffer; - gl_BindBufferBase(GL_UNIFORM_BUFFER, index, buffer); + glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer); } void upload(const void* src) @@ -65,10 +70,86 @@ // glMapBufferRange allow to set various parameter but the call is // synchronous whereas glBufferSubData could be asynchronous. // TODO: investigate the extension ARB_invalidate_subdata - gl_BufferSubData(GL_UNIFORM_BUFFER, 0, size, src); + glBufferSubData(GL_UNIFORM_BUFFER, 0, size, src); +#ifdef ENABLE_OGL_DEBUG_MEM_BW + g_uniform_upload_byte += size; +#endif } ~GSUniformBufferOGL() { - gl_DeleteBuffers(1, &buffer); + glDeleteBuffers(1, &buffer); + } +}; + +#define UBO_BUFFER_SIZE (4*1024*1024) + +class GSUniformBufferStorageOGL { + GLuint buffer; // data object + GLuint index; // GLSL slot + uint32 size; // size of the data + uint8* m_buffer_ptr; + uint32 m_offset; + +public: + GSUniformBufferStorageOGL(GLuint index, uint32 size) : index(index) + , size(size), m_offset(0) + { + glGenBuffers(1, &buffer); + bind(); + allocate(); + attach(); + } + + void bind() + { + if (GLState::ubo != buffer) { + GLState::ubo = buffer; + glBindBuffer(GL_UNIFORM_BUFFER, buffer); + } + } + + void allocate() + { + const GLbitfield common_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT /*| GL_MAP_COHERENT_BIT */; + const GLbitfield map_flags = common_flags | GL_MAP_FLUSH_EXPLICIT_BIT; + const GLbitfield create_flags = common_flags /*| GL_CLIENT_STORAGE_BIT */; + + GLsizei buffer_size = UBO_BUFFER_SIZE; + glBufferStorage(GL_UNIFORM_BUFFER, buffer_size, NULL, create_flags); + m_buffer_ptr = (uint8*) glMapBufferRange(GL_UNIFORM_BUFFER, 0, buffer_size, map_flags); + ASSERT(m_buffer_ptr); + } + + void attach() + { + // From the opengl manpage: + // glBindBufferBase also binds buffer to the generic buffer binding point specified by target + GLState::ubo = buffer; + //glBindBufferBase(GL_UNIFORM_BUFFER, index, buffer); + glBindBufferRange(GL_UNIFORM_BUFFER, index, buffer, m_offset, size); + } + + void upload(const void* src) + { +#ifdef ENABLE_OGL_DEBUG_MEM_BW + g_uniform_upload_byte += size; +#endif + + memcpy(m_buffer_ptr + m_offset, src, size); + + attach(); + glFlushMappedBufferRange(GL_UNIFORM_BUFFER, m_offset, size); + + m_offset = (m_offset + size + 255u) & ~0xFF; + if (m_offset >= UBO_BUFFER_SIZE) + m_offset = 0; + } + + ~GSUniformBufferStorageOGL() { + bind(); + glUnmapBuffer(GL_UNIFORM_BUFFER); + glDeleteBuffers(1, &buffer); } }; + +#undef UBO_BUFFER_SIZE diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSUtil.cpp pcsx2-1.4.0/plugins/GSdx/GSUtil.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSUtil.cpp 2014-12-01 22:06:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSUtil.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -52,8 +52,6 @@ list sl; - // TODO: linux (gcc) - #ifdef __INTEL_COMPILER sl.push_back(format("Intel C++ %d.%02d", __INTEL_COMPILER / 100, __INTEL_COMPILER % 100)); #elif _MSC_VER @@ -226,7 +224,7 @@ return true; } -#define OCL_PROGRAM_VERSION 1 +#define OCL_PROGRAM_VERSION 3 #ifdef ENABLE_OPENCL void GSUtil::GetDeviceDescs(list& dl) @@ -354,7 +352,7 @@ if(MessageBox(NULL, "You need to update some directx libraries, would you like to do it now?", "GSdx", MB_YESNO) == IDYES) { - const char* url = "http://www.microsoft.com/downloads/details.aspx?FamilyId=2DA43D38-DB71-4C1B-BC6A-9B6652CD92A3"; + const char* url = "https://www.microsoft.com/en-us/download/details.aspx?id=8109"; ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); } @@ -417,4 +415,12 @@ return SUCCEEDED(hr) ? level : (D3D_FEATURE_LEVEL)0; } +#else + +void GSmkdir(const char* dir) +{ + if (mkdir(dir, 0777)) + fprintf(stderr, "Failed to create directory: %s\n", dir); +} + #endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSUtil.h pcsx2-1.4.0/plugins/GSdx/GSUtil.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSUtil.h 2014-12-01 22:06:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSUtil.h 2016-01-05 17:28:08.000000000 +0000 @@ -65,3 +65,6 @@ #endif }; +#ifdef __linux__ +void GSmkdir(const char* dir); +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSVector.cpp pcsx2-1.4.0/plugins/GSdx/GSVector.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSVector.cpp 2014-05-06 07:25:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSVector.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -72,6 +72,8 @@ const GSVector4 GSVector4::m_four(4.0f); const GSVector4 GSVector4::m_x4b000000(_mm_castsi128_ps(_mm_set1_epi32(0x4b000000))); const GSVector4 GSVector4::m_x4f800000(_mm_castsi128_ps(_mm_set1_epi32(0x4f800000))); +const GSVector4 GSVector4::m_max(FLT_MAX); +const GSVector4 GSVector4::m_min(FLT_MIN); #if _M_SSE >= 0x500 @@ -81,6 +83,8 @@ const GSVector8 GSVector8::m_x80000000(_mm256_castsi256_ps(_mm256_set1_epi32(0x80000000))); const GSVector8 GSVector8::m_x4b000000(_mm256_castsi256_ps(_mm256_set1_epi32(0x4b000000))); const GSVector8 GSVector8::m_x4f800000(_mm256_castsi256_ps(_mm256_set1_epi32(0x4f800000))); +const GSVector8 GSVector8::m_max(FLT_MAX); +const GSVector8 GSVector8::m_min(FLT_MIN); #endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSVector.h pcsx2-1.4.0/plugins/GSdx/GSVector.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSVector.h 2014-11-11 19:54:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSVector.h 2016-01-05 17:28:08.000000000 +0000 @@ -2431,6 +2431,8 @@ static const GSVector4 m_four; static const GSVector4 m_x4b000000; static const GSVector4 m_x4f800000; + static const GSVector4 m_max; + static const GSVector4 m_min; __forceinline GSVector4() { @@ -2908,6 +2910,11 @@ #endif } + __forceinline GSVector4 replace_nan(const GSVector4& v) const + { + return v.blend32(*this, *this == *this); + } + template __forceinline GSVector4 insert32(const GSVector4& v) const { // TODO: use blendps when src == dst @@ -2979,9 +2986,9 @@ // Code extract: // union { int i; float f; } __tmp; -GSVector.h:2977:40: error: declaration of ‘int GSVector4::extract32() const::::i’ +GSVector.h:2977:40: error: declaration of 'int GSVector4::extract32() const::::i' return _mm_extract_ps(m, i); -GSVector.h:2973:15: error: shadows template parm ‘int i’ +GSVector.h:2973:15: error: shadows template parm 'int i' template __forceinline int extract32() const #endif @@ -5134,6 +5141,8 @@ static const GSVector8 m_x80000000; static const GSVector8 m_x4b000000; static const GSVector8 m_x4f800000; + static const GSVector8 m_max; + static const GSVector8 m_min; __forceinline GSVector8() { @@ -5519,6 +5528,10 @@ return _mm256_testz_ps(m, m) != 0; } + __forceinline GSVector8 replace_nan(const GSVector8& v) const + { + return v.blend32(*this, *this == *this); + } template __forceinline GSVector8 insert32(const GSVector8& v) const { @@ -5579,7 +5592,7 @@ { ASSERT(i < 8); - return extract().extract32(); + return extract().template extract32(); } template __forceinline GSVector8 insert(__m128 m) const diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSVertexArrayOGL.h pcsx2-1.4.0/plugins/GSdx/GSVertexArrayOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSVertexArrayOGL.h 2014-10-02 07:33:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSVertexArrayOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -24,7 +24,7 @@ #include "config.h" #ifdef ENABLE_OGL_DEBUG_MEM_BW -extern uint32 g_vertex_upload_byte; +extern uint64 g_vertex_upload_byte; #endif struct GSInputLayoutOGL { @@ -42,9 +42,9 @@ size_t m_limit; const GLenum m_target; GLuint m_buffer_name; - const bool m_sub_data_config; uint8* m_buffer_ptr; const bool m_buffer_storage; + GLsync m_fence[5]; public: GSBufferOGL(GLenum target, size_t stride) : @@ -53,24 +53,32 @@ , m_count(0) , m_limit(0) , m_target(target) - , m_sub_data_config(theApp.GetConfig("ogl_vertex_subdata", 1) != 0) - , m_buffer_storage((theApp.GetConfig("ogl_vertex_storage", 0) == 1) && GLLoader::found_GL_ARB_buffer_storage) + , m_buffer_storage(GLLoader::found_GL_ARB_buffer_storage) { - gl_GenBuffers(1, &m_buffer_name); + glGenBuffers(1, &m_buffer_name); // Opengl works best with 1-4MB buffer. // Warning m_limit is the number of object (not the size in Bytes) - m_limit = 2 * 2 * 1024 * 1024 / m_stride; + m_limit = 8 * 1024 * 1024 / m_stride; + + for (size_t i = 0; i < 5; i++) { + m_fence[i] = 0; + } if (m_buffer_storage) { -#ifndef ENABLE_GLES + // TODO: if we do manually the synchronization, I'm not sure size is important. It worths to investigate it. + // => bigger buffer => less sync bind(); - // FIXME do I need the dynamic - const GLbitfield map_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT; - const GLbitfield create_flags = map_flags | GL_DYNAMIC_STORAGE_BIT; - - gl_BufferStorage(m_target, m_stride*m_limit, NULL, create_flags ); - m_buffer_ptr = (uint8*) gl_MapBufferRange(m_target, 0, m_stride*m_limit, map_flags); -#endif + // coherency will be done by flushing + const GLbitfield common_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT; + const GLbitfield map_flags = common_flags | GL_MAP_FLUSH_EXPLICIT_BIT; + const GLbitfield create_flags = common_flags | GL_CLIENT_STORAGE_BIT; + + glBufferStorage(m_target, m_stride*m_limit, NULL, create_flags ); + m_buffer_ptr = (uint8*) glMapBufferRange(m_target, 0, m_stride*m_limit, map_flags); + if (!m_buffer_ptr) { + fprintf(stderr, "Failed to map buffer\n"); + throw GSDXError(); + } } else { m_buffer_ptr = NULL; } @@ -78,10 +86,14 @@ ~GSBufferOGL() { if (m_buffer_storage) { + for (size_t i = 0; i < 5; i++) { + glDeleteSync(m_fence[i]); + } + // Don't know if we must do it bind(); - gl_UnmapBuffer(m_target); + glUnmapBuffer(m_target); } - gl_DeleteBuffers(1, &m_buffer_name); + glDeleteBuffers(1, &m_buffer_name); } void allocate() { allocate(m_limit); } @@ -91,19 +103,17 @@ if (!m_buffer_storage) { m_start = 0; m_limit = new_limit; - gl_BufferData(m_target, m_limit * m_stride, NULL, GL_STREAM_DRAW); + glBufferData(m_target, m_limit * m_stride, NULL, GL_STREAM_DRAW); } } void bind() { - gl_BindBuffer(m_target, m_buffer_name); + glBindBuffer(m_target, m_buffer_name); } - void subdata_upload(const void* src, uint32 count) + void subdata_upload(const void* src) { - m_count = count; - // Current GPU buffer is really too small need to allocate a new one if (m_count > m_limit) { //fprintf(stderr, "Allocate a new buffer\n %d", m_stride); @@ -118,100 +128,91 @@ allocate(m_limit); } - gl_BufferSubData(m_target, m_stride * m_start, m_stride * m_count, src); + glBufferSubData(m_target, m_stride * m_start, m_stride * m_count, src); } - void map_upload(const void* src, uint32 count) + void map_upload(const void* src) { - void* dst; - if (Map(&dst, count)) { -#if 0 - // FIXME which one to use. Note dst doesn't have any aligment guarantee - // because it depends of the offset - if (m_target == GL_ARRAY_BUFFER) { - GSVector4i::storent(dst, src, m_count * m_stride); - } else { - memcpy(dst, src, m_stride*m_count); + ASSERT(m_count < m_limit); + + size_t offset = m_start*m_stride; + size_t length = m_count*m_stride; + + if (m_count > (m_limit - m_start) ) { + size_t current_chunk = offset >> 21; +#ifdef ENABLE_OGL_DEBUG_FENCE + fprintf(stderr, "%x: Wrap buffer\n", m_target); + fprintf(stderr, "%x: Insert a fence in chunk %d\n", m_target, current_chunk); +#endif + ASSERT(current_chunk > 0 && current_chunk < 5); + if (m_fence[current_chunk] == 0) { + m_fence[current_chunk] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); } + + // Wrap at startup + m_start = 0; + offset = 0; + + // Only check first chunk + if (m_fence[0]) { +#ifdef ENABLE_OGL_DEBUG_FENCE + GLenum status = glClientWaitSync(m_fence[0], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); + if (status != GL_ALREADY_SIGNALED) { + fprintf(stderr, "%x: Sync Sync! Buffer too small\n", m_target); + } +#else + glClientWaitSync(m_fence[0], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); #endif - memcpy(dst, src, m_stride*m_count); - Unmap(); + glDeleteSync(m_fence[0]); + m_fence[0] = 0; + } } - } -#ifdef ENABLE_GLES - void upload(const void* src, uint32 count, uint32 basevertex = 0) + // Protect buffer with fences + size_t current_chunk = offset >> 21; + size_t next_chunk = (offset + length) >> 21; + for (size_t c = current_chunk + 1; c <= next_chunk; c++) { +#ifdef ENABLE_OGL_DEBUG_FENCE + fprintf(stderr, "%x: Insert a fence in chunk %d\n", m_target, c-1); +#endif + ASSERT(c > 0 && c < 5); + m_fence[c-1] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + if (m_fence[c]) { +#ifdef ENABLE_OGL_DEBUG_FENCE + GLenum status = glClientWaitSync(m_fence[c], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); #else - void upload(const void* src, uint32 count) + glClientWaitSync(m_fence[c], GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); +#endif + glDeleteSync(m_fence[c]); + m_fence[c] = 0; + +#ifdef ENABLE_OGL_DEBUG_FENCE + if (status != GL_ALREADY_SIGNALED) { + fprintf(stderr, "%x: Sync Sync! Buffer too small\n", m_target); + } #endif - { -#ifdef ENABLE_GLES - // Emulate gl_DrawElementsBaseVertex... Maybe GLES 4 you know! - if (basevertex) { - uint32* data = (uint32*) src; - for (uint32 i = 0; i < count; i++) { - data[i] += basevertex; } } -#endif + + void* dst = m_buffer_ptr + offset; + + memcpy(dst, src, length); + glFlushMappedBufferRange(m_target, offset, length); + } + + void upload(const void* src, uint32 count) + { #ifdef ENABLE_OGL_DEBUG_MEM_BW g_vertex_upload_byte += count*m_stride; #endif - if (m_sub_data_config && !m_buffer_storage) { - subdata_upload(src, count); - } else { - map_upload(src, count); - } - } - bool Map(void** pointer, uint32 count ) { m_count = count; if (m_buffer_storage) { - // It would need some protection of the data. For the moment finger cross! - - if (m_count > m_limit) { - fprintf(stderr, "Buffer (%x) too small! Please report it upstream\n", m_target); - ASSERT(0); - } else if (m_count > (m_limit - m_start) ) { - //fprintf(stderr, "Wrap buffer (%x)\n", m_target); - // Wrap at startup - m_start = 0; - } - - *pointer = m_buffer_ptr + m_start*m_stride; - + map_upload(src); } else { - // Note: For an explanation of the map flag - // see http://www.opengl.org/wiki/Buffer_Object_Streaming - uint32 map_flags = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - - // Current GPU buffer is really too small need to allocate a new one - if (m_count > m_limit) { - allocate(std::max(m_count * 3 / 2, m_limit)); - - } else if (m_count > (m_limit - m_start) ) { - // Not enough left free room. Just go back at the beginning - m_start = 0; - - // Tell the driver that it can orphan previous buffer and restart from a scratch buffer. - // Technically the buffer will not be accessible by the application anymore but the - // GL will effectively remove it when draws call are finised. - map_flags |= GL_MAP_INVALIDATE_BUFFER_BIT; - } else { - // Tell the driver that it doesn't need to contain any valid buffer data, and that you promise to write the entire range you map - map_flags |= GL_MAP_INVALIDATE_RANGE_BIT; - } - - // Upload the data to the buffer - *pointer = (uint8*) gl_MapBufferRange(m_target, m_stride*m_start, m_stride*m_count, map_flags); + subdata_upload(src); } - - return true; - } - - void Unmap() { - if (!m_buffer_storage) gl_UnmapBuffer(m_target); } void EndScene() @@ -225,31 +226,24 @@ glDrawArrays(mode, m_start, m_count); } + void Draw(GLenum mode, int offset, int count) + { + glDrawArrays(mode, m_start + offset, count); + } + + void Draw(GLenum mode, GLint basevertex) { -#ifdef ENABLE_GLES - glDrawElements(mode, m_count, GL_UNSIGNED_INT, (void*)(m_start * m_stride)); -#else - gl_DrawElementsBaseVertex(mode, m_count, GL_UNSIGNED_INT, (void*)(m_start * m_stride), basevertex); -#endif + glDrawElementsBaseVertex(mode, m_count, GL_UNSIGNED_INT, (void*)(m_start * m_stride), basevertex); } void Draw(GLenum mode, GLint basevertex, int offset, int count) { -#ifdef ENABLE_GLES - glDrawElements(mode, count, GL_UNSIGNED_INT, (void*)((m_start + offset) * m_stride)); -#else - gl_DrawElementsBaseVertex(mode, count, GL_UNSIGNED_INT, (void*)((m_start + offset) * m_stride), basevertex); -#endif + glDrawElementsBaseVertex(mode, count, GL_UNSIGNED_INT, (void*)((m_start + offset) * m_stride), basevertex); } size_t GetStart() { return m_start; } - void debug() - { - fprintf(stderr, "data buffer: start %d, count %d\n", m_start, m_count); - } - }; class GSVertexBufferStateOGL { @@ -259,16 +253,19 @@ GLuint m_va; GLenum m_topology; + // No copy constructor please + GSVertexBufferStateOGL(const GSVertexBufferStateOGL& ) = delete; + public: - GSVertexBufferStateOGL(size_t stride, GSInputLayoutOGL* layout, uint32 layout_nbr) + GSVertexBufferStateOGL(size_t stride, GSInputLayoutOGL* layout, uint32 layout_nbr) : m_vb(NULL), m_ib(NULL), m_topology(0) { - gl_GenVertexArrays(1, &m_va); + glGenVertexArrays(1, &m_va); + glBindVertexArray(m_va); m_vb = new GSBufferOGL(GL_ARRAY_BUFFER, stride); m_ib = new GSBufferOGL(GL_ELEMENT_ARRAY_BUFFER, sizeof(uint32)); - bind(); - // Note: index array are part of the VA state so it need to be bound only once. + m_vb->bind(); m_ib->bind(); m_vb->allocate(); @@ -278,27 +275,29 @@ void bind() { - gl_BindVertexArray(m_va); - m_vb->bind(); + // Note: index array are part of the VA state so it need to be bound only once. + glBindVertexArray(m_va); + if (m_vb) + m_vb->bind(); } void set_internal_format(GSInputLayoutOGL* layout, uint32 layout_nbr) { for (uint32 i = 0; i < layout_nbr; i++) { // Note this function need both a vertex array object and a GL_ARRAY_BUFFER buffer - gl_EnableVertexAttribArray(i); + glEnableVertexAttribArray(i); switch (layout[i].type) { case GL_UNSIGNED_SHORT: case GL_UNSIGNED_INT: if (layout[i].normalize) { - gl_VertexAttribPointer(i, layout[i].size, layout[i].type, layout[i].normalize, layout[i].stride, layout[i].offset); + glVertexAttribPointer(i, layout[i].size, layout[i].type, layout[i].normalize, layout[i].stride, layout[i].offset); } else { - // Rule: when shader use integral (not normalized) you must use gl_VertexAttribIPointer (note the extra I) - gl_VertexAttribIPointer(i, layout[i].size, layout[i].type, layout[i].stride, layout[i].offset); + // Rule: when shader use integral (not normalized) you must use glVertexAttribIPointer (note the extra I) + glVertexAttribIPointer(i, layout[i].size, layout[i].type, layout[i].stride, layout[i].offset); } break; default: - gl_VertexAttribPointer(i, layout[i].size, layout[i].type, layout[i].normalize, layout[i].stride, layout[i].offset); + glVertexAttribPointer(i, layout[i].size, layout[i].type, layout[i].normalize, layout[i].stride, layout[i].offset); break; } } @@ -312,6 +311,8 @@ void DrawPrimitive() { m_vb->Draw(m_topology); } + void DrawPrimitive(int offset, int count) { m_vb->Draw(m_topology, offset, count); } + void DrawIndexedPrimitive() { m_ib->Draw(m_topology, m_vb->GetStart() ); } void DrawIndexedPrimitive(int offset, int count) { m_ib->Draw(m_topology, m_vb->GetStart(), offset, count ); } @@ -321,44 +322,14 @@ void UploadVB(const void* vertices, size_t count) { m_vb->upload(vertices, count); } void UploadIB(const void* index, size_t count) { -#ifdef ENABLE_GLES - m_ib->upload(index, count, m_vb->GetStart()); -#else m_ib->upload(index, count); -#endif } - bool MapVB(void **pointer, size_t count) { return m_vb->Map(pointer, count); } - - void UnmapVB() { m_vb->Unmap(); } - ~GSVertexBufferStateOGL() { - gl_DeleteVertexArrays(1, &m_va); + glDeleteVertexArrays(1, &m_va); delete m_vb; delete m_ib; } - void debug() - { - string topo; - switch (m_topology) { - case GL_POINTS: - topo = "point"; - break; - case GL_LINES: - topo = "line"; - break; - case GL_TRIANGLES: - topo = "triangle"; - break; - case GL_TRIANGLE_STRIP: - topo = "triangle strip"; - break; - } - m_vb->debug(); - m_ib->debug(); - fprintf(stderr, "primitives of %s\n", topo.c_str()); - - } }; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSVertexTrace.cpp pcsx2-1.4.0/plugins/GSdx/GSVertexTrace.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSVertexTrace.cpp 2012-09-09 18:16:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSVertexTrace.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -29,6 +29,9 @@ GSVertexTrace::GSVertexTrace(const GSState* state) : m_state(state) { + m_primclass = GS_INVALID_CLASS; + memset(&m_alpha, 0, sizeof(m_alpha)); + #define InitUpdate3(P, IIP, TME, FST, COLOR) \ m_fmm[COLOR][FST][TME][IIP][P] = &GSVertexTrace::FindMinMax; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWnd.cpp pcsx2-1.4.0/plugins/GSdx/GSWnd.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWnd.cpp 2014-10-01 07:50:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWnd.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -25,127 +25,134 @@ void GSWndGL::PopulateGlFunction() { -#ifndef ENABLE_GLES *(void**)&(gl_ActiveTexture) = GetProcAddress("glActiveTexture"); *(void**)&(gl_BlendColor) = GetProcAddress("glBlendColor"); - *(void**)&(gl_AttachShader) = GetProcAddress("glAttachShader"); - *(void**)&(gl_BindBuffer) = GetProcAddress("glBindBuffer"); - *(void**)&(gl_BindBufferBase) = GetProcAddress("glBindBufferBase"); - *(void**)&(gl_BindFramebuffer) = GetProcAddress("glBindFramebuffer"); - *(void**)&(gl_BindSampler) = GetProcAddress("glBindSampler"); - *(void**)&(gl_BindVertexArray) = GetProcAddress("glBindVertexArray"); - *(void**)&(gl_BlendEquationSeparateiARB) = GetProcAddress("glBlendEquationSeparateiARB"); - *(void**)&(gl_BlendFuncSeparateiARB) = GetProcAddress("glBlendFuncSeparateiARB"); - *(void**)&(gl_BlitFramebuffer) = GetProcAddress("glBlitFramebuffer"); - *(void**)&(gl_BufferData) = GetProcAddress("glBufferData"); - *(void**)&(gl_CheckFramebufferStatus) = GetProcAddress("glCheckFramebufferStatus"); - *(void**)&(gl_ClearBufferfv) = GetProcAddress("glClearBufferfv"); - *(void**)&(gl_ClearBufferiv) = GetProcAddress("glClearBufferiv"); - *(void**)&(gl_ClearBufferuiv) = GetProcAddress("glClearBufferuiv"); - *(void**)&(gl_ColorMaski) = GetProcAddress("glColorMaski"); - *(void**)&(gl_DeleteBuffers) = GetProcAddress("glDeleteBuffers"); - *(void**)&(gl_DeleteFramebuffers) = GetProcAddress("glDeleteFramebuffers"); - *(void**)&(gl_DeleteSamplers) = GetProcAddress("glDeleteSamplers"); - *(void**)&(gl_DeleteVertexArrays) = GetProcAddress("glDeleteVertexArrays"); - *(void**)&(gl_DetachShader) = GetProcAddress("glDetachShader"); - *(void**)&(gl_DrawBuffers) = GetProcAddress("glDrawBuffers"); - *(void**)&(gl_DrawElementsBaseVertex) = GetProcAddress("glDrawElementsBaseVertex"); - *(void**)&(gl_EnableVertexAttribArray) = GetProcAddress("glEnableVertexAttribArray"); - *(void**)&(gl_FramebufferRenderbuffer) = GetProcAddress("glFramebufferRenderbuffer"); - *(void**)&(gl_FramebufferTexture2D) = GetProcAddress("glFramebufferTexture2D"); - *(void**)&(gl_GenBuffers) = GetProcAddress("glGenBuffers"); - *(void**)&(gl_GenFramebuffers) = GetProcAddress("glGenFramebuffers"); - *(void**)&(gl_GenSamplers) = GetProcAddress("glGenSamplers"); - *(void**)&(gl_GenVertexArrays) = GetProcAddress("glGenVertexArrays"); - *(void**)&(gl_GetBufferParameteriv) = GetProcAddress("glGetBufferParameteriv"); - *(void**)&(gl_GetDebugMessageLogARB) = GetProcAddress("glGetDebugMessageLogARB"); - *(void**)&(gl_DebugMessageCallback) = GetProcAddress("glDebugMessageCallback"); - *(void**)&(gl_GetProgramInfoLog) = GetProcAddress("glGetProgramInfoLog"); - *(void**)&(gl_GetProgramiv) = GetProcAddress("glGetProgramiv"); - *(void**)&(gl_GetShaderiv) = GetProcAddress("glGetShaderiv"); - *(void**)&(gl_GetStringi) = GetProcAddress("glGetStringi"); - *(void**)&(gl_IsFramebuffer) = GetProcAddress("glIsFramebuffer"); - *(void**)&(gl_MapBuffer) = GetProcAddress("glMapBuffer"); - *(void**)&(gl_MapBufferRange) = GetProcAddress("glMapBufferRange"); - *(void**)&(gl_ProgramParameteri) = GetProcAddress("glProgramParameteri"); - *(void**)&(gl_SamplerParameterf) = GetProcAddress("glSamplerParameterf"); - *(void**)&(gl_SamplerParameteri) = GetProcAddress("glSamplerParameteri"); - *(void**)&(gl_ShaderSource) = GetProcAddress("glShaderSource"); - *(void**)&(gl_Uniform1i) = GetProcAddress("glUniform1i"); - *(void**)&(gl_UnmapBuffer) = GetProcAddress("glUnmapBuffer"); - *(void**)&(gl_VertexAttribIPointer) = GetProcAddress("glVertexAttribIPointer"); - *(void**)&(gl_VertexAttribPointer) = GetProcAddress("glVertexAttribPointer"); - *(void**)&(gl_BufferSubData) = GetProcAddress("glBufferSubData"); - *(void**)&(gl_FenceSync) = GetProcAddress("glFenceSync"); - *(void**)&(gl_DeleteSync) = GetProcAddress("glDeleteSync"); - *(void**)&(gl_ClientWaitSync) = GetProcAddress("glClientWaitSync"); - *(void**)&(gl_FlushMappedBufferRange) = GetProcAddress("glFlushMappedBufferRange"); + + *(void**)&(glBlendEquationSeparate) = GetProcAddress("glBlendEquationSeparate"); + *(void**)&(glBlendFuncSeparate) = GetProcAddress("glBlendFuncSeparate"); + *(void**)&(glAttachShader) = GetProcAddress("glAttachShader"); + *(void**)&(glBindBuffer) = GetProcAddress("glBindBuffer"); + *(void**)&(glBindBufferBase) = GetProcAddress("glBindBufferBase"); + *(void**)&(glBindBufferRange) = GetProcAddress("glBindBufferRange"); + *(void**)&(glBindFramebuffer) = GetProcAddress("glBindFramebuffer"); + *(void**)&(glBindSampler) = GetProcAddress("glBindSampler"); + *(void**)&(glBindVertexArray) = GetProcAddress("glBindVertexArray"); + *(void**)&(glBlitFramebuffer) = GetProcAddress("glBlitFramebuffer"); + *(void**)&(glBufferData) = GetProcAddress("glBufferData"); + *(void**)&(glCheckFramebufferStatus) = GetProcAddress("glCheckFramebufferStatus"); + *(void**)&(glClearBufferfv) = GetProcAddress("glClearBufferfv"); + *(void**)&(glClearBufferiv) = GetProcAddress("glClearBufferiv"); + *(void**)&(glClearBufferuiv) = GetProcAddress("glClearBufferuiv"); + *(void**)&(glColorMaski) = GetProcAddress("glColorMaski"); + *(void**)&(glDeleteBuffers) = GetProcAddress("glDeleteBuffers"); + *(void**)&(glDeleteFramebuffers) = GetProcAddress("glDeleteFramebuffers"); + *(void**)&(glDeleteSamplers) = GetProcAddress("glDeleteSamplers"); + *(void**)&(glDeleteVertexArrays) = GetProcAddress("glDeleteVertexArrays"); + *(void**)&(glDetachShader) = GetProcAddress("glDetachShader"); + *(void**)&(glDrawBuffers) = GetProcAddress("glDrawBuffers"); + *(void**)&(glDrawElementsBaseVertex) = GetProcAddress("glDrawElementsBaseVertex"); + *(void**)&(glEnableVertexAttribArray) = GetProcAddress("glEnableVertexAttribArray"); + *(void**)&(glFramebufferRenderbuffer) = GetProcAddress("glFramebufferRenderbuffer"); + *(void**)&(glFramebufferTexture2D) = GetProcAddress("glFramebufferTexture2D"); + *(void**)&(glGenBuffers) = GetProcAddress("glGenBuffers"); + *(void**)&(glGenFramebuffers) = GetProcAddress("glGenFramebuffers"); + *(void**)&(glGenSamplers) = GetProcAddress("glGenSamplers"); + *(void**)&(glGenVertexArrays) = GetProcAddress("glGenVertexArrays"); + *(void**)&(glGetBufferParameteriv) = GetProcAddress("glGetBufferParameteriv"); + *(void**)&(glGetDebugMessageLogARB) = GetProcAddress("glGetDebugMessageLogARB"); + *(void**)&(glDebugMessageCallback) = GetProcAddress("glDebugMessageCallback", true); + *(void**)&(glGetProgramInfoLog) = GetProcAddress("glGetProgramInfoLog"); + *(void**)&(glGetProgramiv) = GetProcAddress("glGetProgramiv"); + *(void**)&(glGetShaderiv) = GetProcAddress("glGetShaderiv"); + *(void**)&(glGetStringi) = GetProcAddress("glGetStringi"); + *(void**)&(glIsFramebuffer) = GetProcAddress("glIsFramebuffer"); + *(void**)&(glMapBuffer) = GetProcAddress("glMapBuffer"); + *(void**)&(glMapBufferRange) = GetProcAddress("glMapBufferRange"); + *(void**)&(glProgramParameteri) = GetProcAddress("glProgramParameteri"); + *(void**)&(glSamplerParameterf) = GetProcAddress("glSamplerParameterf"); + *(void**)&(glSamplerParameteri) = GetProcAddress("glSamplerParameteri"); + *(void**)&(glShaderSource) = GetProcAddress("glShaderSource"); + *(void**)&(glUniform1i) = GetProcAddress("glUniform1i"); + *(void**)&(glUnmapBuffer) = GetProcAddress("glUnmapBuffer"); + *(void**)&(glVertexAttribIPointer) = GetProcAddress("glVertexAttribIPointer"); + *(void**)&(glVertexAttribPointer) = GetProcAddress("glVertexAttribPointer"); + *(void**)&(glBufferSubData) = GetProcAddress("glBufferSubData"); + *(void**)&(glFenceSync) = GetProcAddress("glFenceSync"); + *(void**)&(glDeleteSync) = GetProcAddress("glDeleteSync"); + *(void**)&(glClientWaitSync) = GetProcAddress("glClientWaitSync"); + *(void**)&(glFlushMappedBufferRange) = GetProcAddress("glFlushMappedBufferRange"); // GL4.0 - *(void**)&(gl_UniformSubroutinesuiv) = GetProcAddress("glUniformSubroutinesuiv", true); + *(void**)&(glBlendEquationSeparateiARB) = GetProcAddress("glBlendEquationSeparateiARB", true); + *(void**)&(glBlendFuncSeparateiARB) = GetProcAddress("glBlendFuncSeparateiARB", true); // GL4.1 - *(void**)&(gl_CreateShaderProgramv) = GetProcAddress("glCreateShaderProgramv", true); - *(void**)&(gl_BindProgramPipeline) = GetProcAddress("glBindProgramPipeline", true); - *(void**)&(gl_DeleteProgramPipelines) = GetProcAddress("glDeleteProgramPipelines", true); - *(void**)&(gl_GenProgramPipelines) = GetProcAddress("glGenProgramPipelines", true); - *(void**)&(gl_GetProgramPipelineiv) = GetProcAddress("glGetProgramPipelineiv", true); - *(void**)&(gl_GetProgramPipelineInfoLog) = GetProcAddress("glGetProgramPipelineInfoLog", true); - *(void**)&(gl_ValidateProgramPipeline) = GetProcAddress("glValidateProgramPipeline", true); - *(void**)&(gl_UseProgramStages) = GetProcAddress("glUseProgramStages", true); - *(void**)&(gl_ProgramUniform1i) = GetProcAddress("glProgramUniform1i", true); // but no GL4.2 + *(void**)&(glCreateShaderProgramv) = GetProcAddress("glCreateShaderProgramv", true); + *(void**)&(glBindProgramPipeline) = GetProcAddress("glBindProgramPipeline", true); + *(void**)&(glDeleteProgramPipelines) = GetProcAddress("glDeleteProgramPipelines", true); + *(void**)&(glGenProgramPipelines) = GetProcAddress("glGenProgramPipelines", true); + *(void**)&(glGetProgramPipelineiv) = GetProcAddress("glGetProgramPipelineiv", true); + *(void**)&(glGetProgramPipelineInfoLog) = GetProcAddress("glGetProgramPipelineInfoLog", true); + *(void**)&(glValidateProgramPipeline) = GetProcAddress("glValidateProgramPipeline", true); + *(void**)&(glUseProgramStages) = GetProcAddress("glUseProgramStages", true); + *(void**)&(glProgramUniform1i) = GetProcAddress("glProgramUniform1i", true); // but no GL4.2 + *(void**)&(glGetProgramBinary) = GetProcAddress("glGetProgramBinary", true); // NO GL4.1 - *(void**)&(gl_DeleteProgram) = GetProcAddress("glDeleteProgram"); - *(void**)&(gl_DeleteShader) = GetProcAddress("glDeleteShader"); - *(void**)&(gl_CompileShader) = GetProcAddress("glCompileShader"); - *(void**)&(gl_CreateProgram) = GetProcAddress("glCreateProgram"); - *(void**)&(gl_CreateShader) = GetProcAddress("glCreateShader"); - *(void**)&(gl_UseProgram) = GetProcAddress("glUseProgram"); - *(void**)&(gl_GetShaderInfoLog) = GetProcAddress("glGetShaderInfoLog"); - *(void**)&(gl_LinkProgram) = GetProcAddress("glLinkProgram"); + *(void**)&(glDeleteProgram) = GetProcAddress("glDeleteProgram"); + *(void**)&(glDeleteShader) = GetProcAddress("glDeleteShader"); + *(void**)&(glCompileShader) = GetProcAddress("glCompileShader"); + *(void**)&(glCreateProgram) = GetProcAddress("glCreateProgram"); + *(void**)&(glCreateShader) = GetProcAddress("glCreateShader"); + *(void**)&(glUseProgram) = GetProcAddress("glUseProgram"); + *(void**)&(glGetShaderInfoLog) = GetProcAddress("glGetShaderInfoLog"); + *(void**)&(glLinkProgram) = GetProcAddress("glLinkProgram"); // GL4.2 - *(void**)&(gl_BindImageTexture) = GetProcAddress("glBindImageTexture", true); - *(void**)&(gl_MemoryBarrier) = GetProcAddress("glMemoryBarrier", true); - *(void**)&(gl_TexStorage2D) = GetProcAddress("glTexStorage2D"); + *(void**)&(glBindImageTexture) = GetProcAddress("glBindImageTexture", true); + *(void**)&(glMemoryBarrier) = GetProcAddress("glMemoryBarrier", true); + *(void**)&(glTexStorage2D) = GetProcAddress("glTexStorage2D"); // GL4.3 - *(void**)&(gl_CopyImageSubData) = GetProcAddress("glCopyImageSubData", true); + *(void**)&(glCopyImageSubData) = GetProcAddress("glCopyImageSubData", true); + *(void**)&(glInvalidateTexImage) = GetProcAddress("glInvalidateTexImage", true); + *(void**)&(glPushDebugGroup) = GetProcAddress("glPushDebugGroup", true); + *(void**)&(glPopDebugGroup) = GetProcAddress("glPopDebugGroup", true); + *(void**)&(glDebugMessageInsert) = GetProcAddress("glDebugMessageInsert", true); + *(void**)&(glDebugMessageControl) = GetProcAddress("glDebugMessageControl", true); // GL4.4 - *(void**)&(gl_ClearTexImage) = GetProcAddress("glClearTexImage", true); - *(void**)&(gl_BufferStorage) = GetProcAddress("glBufferStorage", true); - // GL_ARB_bindless_texture (GL5?) - *(void**)&(gl_GetTextureSamplerHandleARB) = GetProcAddress("glGetTextureSamplerHandleARB", true); - *(void**)&(gl_MakeTextureHandleResidentARB) = GetProcAddress("glMakeTextureHandleResidentARB", true); - *(void**)&(gl_MakeTextureHandleNonResidentARB) = GetProcAddress("glMakeTextureHandleNonResidentARB", true); - *(void**)&(gl_UniformHandleui64vARB) = GetProcAddress("glUniformHandleui64vARB", true); - *(void**)&(gl_ProgramUniformHandleui64vARB) = GetProcAddress("glProgramUniformHandleui64vARB", true); + *(void**)&(glClearTexImage) = GetProcAddress("glClearTexImage", true); + *(void**)&(glBufferStorage) = GetProcAddress("glBufferStorage", true); // GL4.5 - *(void**)&(gl_CreateTextures) = GetProcAddress("glCreateTextures", true); - *(void**)&(gl_TextureStorage2D) = GetProcAddress("glTextureStorage2D", true); - *(void**)&(gl_TextureSubImage2D) = GetProcAddress("glTextureSubImage2D", true); - *(void**)&(gl_CopyTextureSubImage2D) = GetProcAddress("glCopyTextureSubImage2D", true); - *(void**)&(gl_BindTextureUnit) = GetProcAddress("glBindTextureUnit", true); - *(void**)&(gl_GetTextureImage) = GetProcAddress("glGetTextureImage", true); - - *(void**)&(gl_CreateFramebuffers) = GetProcAddress("glCreateFramebuffers", true); - *(void**)&(gl_ClearNamedFramebufferfv) = GetProcAddress("glClearNamedFramebufferfv", true); - *(void**)&(gl_ClearNamedFramebufferuiv) = GetProcAddress("glClearNamedFramebufferuiv", true); - *(void**)&(gl_ClearNamedFramebufferiv) = GetProcAddress("glClearNamedFramebufferiv", true); - *(void**)&(gl_NamedFramebufferTexture) = GetProcAddress("glNamedFramebufferTexture", true); - *(void**)&(gl_NamedFramebufferDrawBuffers) = GetProcAddress("glNamedFramebufferDrawBuffers", true); - *(void**)&(gl_NamedFramebufferReadBuffer) = GetProcAddress("glNamedFramebufferReadBuffer", true); - *(void**)&(gl_CheckNamedFramebufferStatus) = GetProcAddress("glCheckNamedFramebufferStatus", true); - - *(void**)&(gl_CreateBuffers) = GetProcAddress("glCreateBuffers", true); - *(void**)&(gl_NamedBufferStorage) = GetProcAddress("glNamedBufferStorage", true); - *(void**)&(gl_NamedBufferData) = GetProcAddress("glNamedBufferData", true); - *(void**)&(gl_NamedBufferSubData) = GetProcAddress("glNamedBufferSubData", true); - *(void**)&(gl_MapNamedBuffer) = GetProcAddress("glMapNamedBuffer", true); - *(void**)&(gl_MapNamedBufferRange) = GetProcAddress("glMapNamedBufferRange", true); - *(void**)&(gl_UnmapNamedBuffer) = GetProcAddress("glUnmapNamedBuffer", true); - - *(void**)&(gl_CreateSamplers) = GetProcAddress("glCreateSamplers", true); - *(void**)&(gl_CreateProgramPipelines) = GetProcAddress("glCreateProgramPipelines", true); - - *(void**)&(gl_ClipControl) = GetProcAddress("glClipControl", true); - -#endif + *(void**)&(glCreateTextures) = GetProcAddress("glCreateTextures", true); + *(void**)&(glTextureStorage2D) = GetProcAddress("glTextureStorage2D", true); + *(void**)&(glTextureSubImage2D) = GetProcAddress("glTextureSubImage2D", true); + *(void**)&(glCopyTextureSubImage2D) = GetProcAddress("glCopyTextureSubImage2D", true); + *(void**)&(glBindTextureUnit) = GetProcAddress("glBindTextureUnit", true); + *(void**)&(glGetTextureImage) = GetProcAddress("glGetTextureImage", true); + *(void**)&(glTextureParameteri) = GetProcAddress("glTextureParameteri", true); + + *(void**)&(glCreateFramebuffers) = GetProcAddress("glCreateFramebuffers", true); + *(void**)&(glClearNamedFramebufferfv) = GetProcAddress("glClearNamedFramebufferfv", true); + *(void**)&(glClearNamedFramebufferuiv) = GetProcAddress("glClearNamedFramebufferuiv", true); + *(void**)&(glClearNamedFramebufferiv) = GetProcAddress("glClearNamedFramebufferiv", true); + *(void**)&(glNamedFramebufferTexture) = GetProcAddress("glNamedFramebufferTexture", true); + *(void**)&(glNamedFramebufferDrawBuffers) = GetProcAddress("glNamedFramebufferDrawBuffers", true); + *(void**)&(glNamedFramebufferReadBuffer) = GetProcAddress("glNamedFramebufferReadBuffer", true); + *(void**)&(glCheckNamedFramebufferStatus) = GetProcAddress("glCheckNamedFramebufferStatus", true); + + *(void**)&(glCreateBuffers) = GetProcAddress("glCreateBuffers", true); + *(void**)&(glNamedBufferStorage) = GetProcAddress("glNamedBufferStorage", true); + *(void**)&(glNamedBufferData) = GetProcAddress("glNamedBufferData", true); + *(void**)&(glNamedBufferSubData) = GetProcAddress("glNamedBufferSubData", true); + *(void**)&(glMapNamedBuffer) = GetProcAddress("glMapNamedBuffer", true); + *(void**)&(glMapNamedBufferRange) = GetProcAddress("glMapNamedBufferRange", true); + *(void**)&(glUnmapNamedBuffer) = GetProcAddress("glUnmapNamedBuffer", true); + *(void**)&(glFlushMappedNamedBufferRange) = GetProcAddress("glFlushMappedNamedBufferRange", true); + + *(void**)&(glCreateSamplers) = GetProcAddress("glCreateSamplers", true); + *(void**)&(glCreateProgramPipelines) = GetProcAddress("glCreateProgramPipelines", true); + + *(void**)&(glClipControl) = GetProcAddress("glClipControl", true); + *(void**)&(glTextureBarrier) = GetProcAddress("glTextureBarrier", true); + + if (glCreateFramebuffers == NULL) { + Emulate_DSA::Init(); + } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndEGL.cpp pcsx2-1.4.0/plugins/GSdx/GSWndEGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndEGL.cpp 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndEGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,7 +22,7 @@ #include "stdafx.h" #include "GSWndEGL.h" -#if defined(__linux__) +#if defined(__linux__) && defined(EGL_SUPPORTED) GSWndEGL::GSWndEGL() : m_NativeWindow(0), m_NativeDisplay(NULL) @@ -37,12 +37,10 @@ { EGL_CONTEXT_MAJOR_VERSION_KHR, major, EGL_CONTEXT_MINOR_VERSION_KHR, minor, -#ifndef ENABLE_GLES #ifdef ENABLE_OGL_DEBUG EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, #endif EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR, -#endif EGL_NONE }; EGLint NullContextAttribs[] = { EGL_NONE }; @@ -51,20 +49,16 @@ EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_DEPTH_SIZE, 24, -#ifndef ENABLE_GLES EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, -#endif EGL_NONE }; -#ifndef ENABLE_GLES eglBindAPI(EGL_OPENGL_API); -#endif eglChooseConfig(m_eglDisplay, attrList, &eglConfig, 1, &numConfigs); if ( numConfigs == 0 ) { - fprintf(stderr,"EGL: Failed to get a frame buffer config!\n"); + fprintf(stderr,"EGL: Failed to get a frame buffer config! (0x%x)\n", eglGetError() ); throw GSDXRecoverableError(); } @@ -102,9 +96,7 @@ if (!IsContextAttached()) { // The setting of the API is local to a thread. This function // can be called from 2 threads. -#ifndef ENABLE_GLES eglBindAPI(EGL_OPENGL_API); -#endif //fprintf(stderr, "Attach the context\n"); eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext); @@ -135,12 +127,7 @@ m_NativeDisplay = XOpenDisplay(NULL); OpenEGLDisplay(); -#ifdef ENABLE_GLES - // FIXME: update it to GLES 3.1 when they support it - CreateContext(3, 1); -#else CreateContext(3, 3); -#endif AttachContext(); @@ -187,12 +174,7 @@ m_NativeWindow = XCreateSimpleWindow(m_NativeDisplay, DefaultRootWindow(m_NativeDisplay), 0, 0, w, h, 0, 0, 0); XMapWindow (m_NativeDisplay, m_NativeWindow); -#ifdef ENABLE_GLES - // FIXME: update it to GLES 3.1 when they support it - CreateContext(3, 1); -#else CreateContext(3, 3); -#endif AttachContext(); @@ -301,11 +283,15 @@ { // Create an EGL display from the native display m_eglDisplay = eglGetDisplay((EGLNativeDisplayType)m_NativeDisplay); - if ( m_eglDisplay == EGL_NO_DISPLAY ) + if ( m_eglDisplay == EGL_NO_DISPLAY ) { + fprintf(stderr,"EGL: Failed to open a display! (0x%x)\n", eglGetError() ); throw GSDXRecoverableError(); + } - if ( !eglInitialize(m_eglDisplay, NULL, NULL) ) + if ( !eglInitialize(m_eglDisplay, NULL, NULL) ) { + fprintf(stderr,"EGL: Failed to initialize the display! (0x%x)\n", eglGetError() ); throw GSDXRecoverableError(); + } } #endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndEGL.h pcsx2-1.4.0/plugins/GSdx/GSWndEGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndEGL.h 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndEGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -21,30 +21,11 @@ #include "GSWnd.h" -#if defined(__linux__) +#if defined(__linux__) && defined(EGL_SUPPORTED) #include #include #include -// Need at least MESA 9.0 (plan for october/november 2012) -// So force the destiny to at least check the compilation -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#endif - - class GSWndEGL : public GSWndGL { EGLNativeWindowType m_NativeWindow; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndOGL.cpp pcsx2-1.4.0/plugins/GSdx/GSWndOGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndOGL.cpp 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndOGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,9 +22,9 @@ #include "stdafx.h" #include "GSWndOGL.h" -#if defined(__linux__) && !defined(ENABLE_GLES) +#if defined(__linux__) GSWndOGL::GSWndOGL() - : m_NativeWindow(0), m_NativeDisplay(NULL), m_swapinterval(NULL) + : m_NativeWindow(0), m_NativeDisplay(NULL), m_context(0), m_swapinterval(NULL) { } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndOGL.h pcsx2-1.4.0/plugins/GSdx/GSWndOGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndOGL.h 2014-12-15 18:14:30.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndOGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -21,7 +21,7 @@ #include "GSWnd.h" -#if defined(__linux__) && !defined(ENABLE_GLES) +#if defined(__linux__) #include #include diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndWGL.cpp pcsx2-1.4.0/plugins/GSdx/GSWndWGL.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndWGL.cpp 2015-01-10 01:39:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndWGL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -28,6 +28,23 @@ { } +// Used by GSReplay. Perhaps the stuff used by GSReplay can be moved out? That way all +// the GSOpen 1 stuff can be removed. But that'll take a bit of thinking. +LRESULT CALLBACK GSWndWGL::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_CLOSE: + // This takes place before GSClose, so don't destroy the Window so we can clean up. + ShowWindow(hWnd, SW_HIDE); + // DestroyWindow(hWnd); + return 0; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } +} + + bool GSWndWGL::CreateContext(int major, int minor) { if ( !m_NativeDisplay || !m_NativeWindow ) @@ -130,9 +147,7 @@ CheckContext(); - // TODO - //m_swapinterval = (PFNGLXSWAPINTERVALMESAPROC)glXGetProcAddress((const GLubyte*) "glXSwapIntervalMESA"); - //PFNGLXSWAPINTERVALMESAPROC m_swapinterval = (PFNGLXSWAPINTERVALMESAPROC)glXGetProcAddress((const GLubyte*) "glXSwapInterval"); + m_swapinterval = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT"); PopulateGlFunction(); @@ -151,6 +166,14 @@ m_context = NULL; CloseWGLDisplay(); + + // Used by GSReplay. + if (m_NativeWindow && m_managed) + { + DestroyWindow(m_NativeWindow); + m_NativeWindow = NULL; + } + } bool GSWndWGL::OpenWGLDisplay() @@ -211,55 +234,78 @@ } //TODO: GSopen 1 => Drop? +// Used by GSReplay. At least for now. +// More or less copy pasted from GSWndDX::Create and GSWndWGL::Attach with a few +// modifications bool GSWndWGL::Create(const string& title, int w, int h) { -#if 0 if(m_NativeWindow) return false; - if(w <= 0 || h <= 0) { - w = theApp.GetConfig("ModeWidth", 640); - h = theApp.GetConfig("ModeHeight", 480); + m_managed = true; + + WNDCLASS wc; + + memset(&wc, 0, sizeof(wc)); + + wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_OWNDC; + wc.lpfnWndProc = WndProc; + wc.hInstance = theApp.GetModuleHandle(); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); + wc.lpszClassName = "GSWndOGL"; + + if (!GetClassInfo(wc.hInstance, wc.lpszClassName, &wc)) + { + if (!RegisterClass(&wc)) + { + return false; + } } - m_managed = true; + DWORD style = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW | WS_BORDER; - // note this part must be only executed when replaying .gs debug file - m_NativeDisplay = XOpenDisplay(NULL); + GSVector4i r; - int attrListDbl[] = { GLX_RGBA, GLX_DOUBLEBUFFER, - GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, - GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, - None - }; - XVisualInfo* vi = glXChooseVisual(m_NativeDisplay, DefaultScreen(m_NativeDisplay), attrListDbl); + GetWindowRect(GetDesktopWindow(), r); - /* create a color map */ - XSetWindowAttributes attr; - attr.colormap = XCreateColormap(m_NativeDisplay, RootWindow(m_NativeDisplay, vi->screen), - vi->visual, AllocNone); - attr.border_pixel = 0; - attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | - StructureNotifyMask | SubstructureRedirectMask | SubstructureNotifyMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask ; - - // Create a window at the last position/size - m_NativeWindow = XCreateWindow(m_NativeDisplay, RootWindow(m_NativeDisplay, vi->screen), - 0 , 0 , w, h, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap | CWEventMask, &attr); + // Old GSOpen ModeWidth and ModeHeight are not necessary with this. + bool remote = !!GetSystemMetrics(SM_REMOTESESSION); - XMapWindow (m_NativeDisplay, m_NativeWindow); - XFree(vi); + if (w <= 0 || h <= 0 || remote) + { + w = r.width() / 3; + h = r.width() / 4; + + if (!remote) + { + w *= 2; + h *= 2; + } + } + + r.left = (r.left + r.right - w) / 2; + r.top = (r.top + r.bottom - h) / 2; + r.right = r.left + w; + r.bottom = r.top + h; + + AdjustWindowRect(r, style, FALSE); + + m_NativeWindow = CreateWindow(wc.lpszClassName, title.c_str(), style, r.left, r.top, r.width(), r.height(), NULL, NULL, wc.hInstance, (LPVOID)this); + + if (m_NativeWindow == NULL) return false; + + if (!OpenWGLDisplay()) return false; if (!CreateContext(3, 3)) return false; AttachContext(); - return (m_NativeWindow != 0); -#else - return false; -#endif + m_swapinterval = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT"); + + PopulateGlFunction(); + + return true; + } //Same as DX @@ -277,6 +323,8 @@ void* ptr = (void*)wglGetProcAddress(name); if (ptr == NULL) { fprintf(stderr, "Failed to find %s\n", name); + if (!opt) + throw GSDXRecoverableError(); } return ptr; } @@ -288,9 +336,7 @@ // m_swapinterval uses an integer as parameter // 0 -> disable vsync // n -> wait n frame - //if (m_swapinterval) m_swapinterval((int)enable); - // wglSwapIntervalEXT(!enable); - + if (m_swapinterval) m_swapinterval((int)enable); } void GSWndWGL::Flip() @@ -300,6 +346,12 @@ void GSWndWGL::Show() { + if (!m_managed) return; + + // Used by GSReplay + SetForegroundWindow(m_NativeWindow); + ShowWindow(m_NativeWindow, SW_SHOWNORMAL); + UpdateWindow(m_NativeWindow); } void GSWndWGL::Hide() @@ -315,7 +367,12 @@ bool GSWndWGL::SetWindowText(const char* title) { - return false; + if (!m_managed) return false; + + // Used by GSReplay. + ::SetWindowText(m_NativeWindow, title); + + return true; } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndWGL.h pcsx2-1.4.0/plugins/GSdx/GSWndWGL.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/GSWndWGL.h 2013-08-03 08:29:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/GSWndWGL.h 2016-01-05 17:28:08.000000000 +0000 @@ -29,7 +29,7 @@ HDC m_NativeDisplay; HGLRC m_context; - //PFNGLXSWAPINTERVALMESAPROC m_swapinterval; + PFNWGLSWAPINTERVALEXTPROC m_swapinterval; bool CreateContext(int major, int minor); void CheckContext(); @@ -37,6 +37,8 @@ void CloseWGLDisplay(); bool OpenWGLDisplay(); + static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + public: GSWndWGL(); virtual ~GSWndWGL() {}; diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/linux_replay.cpp pcsx2-1.4.0/plugins/GSdx/linux_replay.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/linux_replay.cpp 2013-10-24 20:54:27.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/linux_replay.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,22 +21,46 @@ #include "stdafx.h" #include +static void* handle; + void help() { fprintf(stderr, "Loader gs file\n"); fprintf(stderr, "ARG1 GSdx plugin\n"); fprintf(stderr, "ARG2 .gs file\n"); fprintf(stderr, "ARG3 Ini directory\n"); + if (handle) { + dlclose(handle); + } exit(1); } +char* read_env(const char* var) { + char* v = getenv(var); + if (!v) { + fprintf(stderr, "Failed to get %s\n", var); + help(); + } + return v; +} + int main ( int argc, char *argv[] ) { - if (argc < 3) help(); + if (argc < 1) help(); + + char* plugin; + char* gs; + if (argc > 2) { + plugin = argv[1]; + gs = argv[2]; + } else { + plugin = read_env("GSDUMP_SO"); + gs = argv[1]; + } - void *handle = dlopen(argv[1], RTLD_LAZY|RTLD_GLOBAL); + handle = dlopen(plugin, RTLD_LAZY|RTLD_GLOBAL); if (handle == NULL) { - fprintf(stderr, "Failed to dlopen plugin %s\n", argv[1]); + fprintf(stderr, "Failed to dlopen plugin %s\n", plugin); help(); } @@ -46,16 +70,17 @@ *(void**)(&GSsetSettingsDir_ptr) = dlsym(handle, "GSsetSettingsDir"); *(void**)(&GSReplay_ptr) = dlsym(handle, "GSReplay"); - if ( argc == 4) { + if (argc == 2) { + char *ini = read_env("GSDUMP_CONF"); + + GSsetSettingsDir_ptr(ini); + + } else if (argc == 4) { (void)GSsetSettingsDir_ptr(argv[3]); + } else if ( argc == 3) { #ifdef XDG_STD - char *val = getenv("HOME"); - if (val == NULL) { - dlclose(handle); - fprintf(stderr, "Failed to get the home dir\n"); - help(); - } + char *val = read_env("HOME"); std::string ini_dir(val); ini_dir += "/.config/pcsx2/inis"; @@ -63,11 +88,13 @@ GSsetSettingsDir_ptr(ini_dir.c_str()); #else fprintf(stderr, "default ini dir only supported on XDG\n"); - dlclose(handle); help(); #endif } - GSReplay_ptr(argv[2], 12); - dlclose(handle); + GSReplay_ptr(gs, 12); + + if (handle) { + dlclose(handle); + } } diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/convert.glsl pcsx2-1.4.0/plugins/GSdx/res/convert.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/convert.glsl 2014-10-01 07:50:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/convert.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,224 +0,0 @@ -//#version 420 // Keep it for editor detection - -struct vertex_basic -{ - vec4 p; - vec2 t; -}; - - -#ifdef VERTEX_SHADER - -out gl_PerVertex { - vec4 gl_Position; - float gl_PointSize; -#if !pGL_ES - float gl_ClipDistance[]; -#endif -}; - -layout(location = 0) in vec2 POSITION; -layout(location = 1) in vec2 TEXCOORD0; - -// FIXME set the interpolation (don't know what dx do) -// flat means that there is no interpolation. The value given to the fragment shader is based on the provoking vertex conventions. -// -// noperspective means that there will be linear interpolation in window-space. This is usually not what you want, but it can have its uses. -// -// smooth, the default, means to do perspective-correct interpolation. -// -// The centroid qualifier only matters when multisampling. If this qualifier is not present, then the value is interpolated to the pixel's center, anywhere in the pixel, or to one of the pixel's samples. This sample may lie outside of the actual primitive being rendered, since a primitive can cover only part of a pixel's area. The centroid qualifier is used to prevent this; the interpolation point must fall within both the pixel's area and the primitive's area. -out SHADER -{ - vec4 p; - vec2 t; -} VSout; - -#define VSout_p (VSout.p) -#define VSout_t (VSout.t) - -void vs_main() -{ - VSout_p = vec4(POSITION, 0.5f, 1.0f); - VSout_t = TEXCOORD0; - gl_Position = vec4(POSITION, 0.5f, 1.0f); // NOTE I don't know if it is possible to merge POSITION_OUT and gl_Position -} - -#endif - -#ifdef FRAGMENT_SHADER - -in SHADER -{ - vec4 p; - vec2 t; -} PSin; - -#define PSin_p (PSin.p) -#define PSin_t (PSin.t) - -// Give a different name so I remember there is a special case! -#ifdef ps_main1 -layout(location = 0) out uint SV_Target1; -#else -layout(location = 0) out vec4 SV_Target0; -#endif - -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else -layout(binding = 0) uniform sampler2D TextureSampler; -#endif - -vec4 sample_c() -{ - return texture(TextureSampler, PSin_t ); -} - -vec4 ps_crt(uint i) -{ - vec4 mask[4] = vec4[4] - ( - vec4(1, 0, 0, 0), - vec4(0, 1, 0, 0), - vec4(0, 0, 1, 0), - vec4(1, 1, 1, 0) - ); - return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); -} - -vec4 ps_scanlines(uint i) -{ - vec4 mask[2] = - { - vec4(1, 1, 1, 0), - vec4(0, 0, 0, 0) - }; - - return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); -} - -#ifdef ps_main0 -void ps_main0() -{ - SV_Target0 = sample_c(); -} -#endif - -#ifdef ps_main1 -void ps_main1() -{ - vec4 c = sample_c(); - - c.a *= 256.0f / 127.0f; // hm, 0.5 won't give us 1.0 if we just multiply with 2 - - highp uvec4 i = uvec4(c * vec4(uint(0x001f), uint(0x03e0), uint(0x7c00), uint(0x8000))); - - SV_Target1 = (i.x & uint(0x001f)) | (i.y & uint(0x03e0)) | (i.z & uint(0x7c00)) | (i.w & uint(0x8000)); -} -#endif - -#ifdef ps_main7 -void ps_main7() -{ - vec4 c = sample_c(); - - c.a = dot(c.rgb, vec3(0.299, 0.587, 0.114)); - - SV_Target0 = c; -} -#endif - -#ifdef ps_main5 -void ps_main5() // scanlines -{ - highp uvec4 p = uvec4(PSin_p); - - vec4 c = ps_scanlines(p.y % 2u); - - SV_Target0 = c; -} -#endif - -#ifdef ps_main6 -void ps_main6() // diagonal -{ - highp uvec4 p = uvec4(PSin_p); - - vec4 c = ps_crt((p.x + (p.y % 3u)) % 3u); - - SV_Target0 = c; -} -#endif - -#ifdef ps_main8 -void ps_main8() // triangular -{ - highp uvec4 p = uvec4(PSin_p); - - vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u); - - SV_Target0 = c; -} -#endif - -#ifdef ps_main9 -void ps_main9() -{ - - const float PI = 3.14159265359f; - - vec2 texdim = vec2(textureSize(TextureSampler, 0)); - - vec4 c; - if (dFdy(PSin_t.y) * PSin_t.y > 0.5f) { - c = sample_c(); - } else { - float factor = (0.9f - 0.4f * cos(2.0f * PI * PSin_t.y * texdim.y)); - c = factor * texture(TextureSampler, vec2(PSin_t.x, (floor(PSin_t.y * texdim.y) + 0.5f) / texdim.y)); - } - - SV_Target0 = c; -} -#endif - -// Used for DATE (stencil) -// DATM == 1 -#ifdef ps_main2 -void ps_main2() -{ - if(sample_c().a < (127.5f / 255.0f)) // >= 0x80 pass - discard; - -#ifdef ENABLE_OGL_STENCIL_DEBUG - SV_Target0 = vec4(1.0f, 0.0f, 0.0f, 1.0f); -#endif -} -#endif - -// Used for DATE (stencil) -// DATM == 0 -#ifdef ps_main3 -void ps_main3() -{ - if((127.5f / 255.0f) < sample_c().a) // < 0x80 pass (== 0x80 should not pass) - discard; - -#ifdef ENABLE_OGL_STENCIL_DEBUG - SV_Target0 = vec4(1.0f, 0.0f, 0.0f, 1.0f); -#endif -} -#endif - -#ifdef ps_main4 -void ps_main4() -{ - // FIXME mod and fmod are different when value are negative - // output.c = fmod(sample_c(input.t) * 255 + 0.5f, 256) / 255; - vec4 c = mod(sample_c() * 255.0f + 0.5f, 256.0f) / 255.0f; - - SV_Target0 = c; -} -#endif - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/fxaa.fx pcsx2-1.4.0/plugins/GSdx/res/fxaa.fx --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/fxaa.fx 2014-11-20 21:07:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/fxaa.fx 2016-01-05 17:28:08.000000000 +0000 @@ -19,11 +19,7 @@ vec2 t; }; -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else layout(binding = 0) uniform sampler2D TextureSampler; -#endif in SHADER { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/convert.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/convert.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/convert.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/convert.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,406 @@ +//#version 420 // Keep it for editor detection + +struct vertex_basic +{ + vec4 p; + vec2 t; +}; + + +#ifdef VERTEX_SHADER + +out gl_PerVertex { + vec4 gl_Position; + float gl_PointSize; +#if !pGL_ES + float gl_ClipDistance[1]; +#endif +}; + +layout(location = 0) in vec2 POSITION; +layout(location = 1) in vec2 TEXCOORD0; + +// FIXME set the interpolation (don't know what dx do) +// flat means that there is no interpolation. The value given to the fragment shader is based on the provoking vertex conventions. +// +// noperspective means that there will be linear interpolation in window-space. This is usually not what you want, but it can have its uses. +// +// smooth, the default, means to do perspective-correct interpolation. +// +// The centroid qualifier only matters when multisampling. If this qualifier is not present, then the value is interpolated to the pixel's center, anywhere in the pixel, or to one of the pixel's samples. This sample may lie outside of the actual primitive being rendered, since a primitive can cover only part of a pixel's area. The centroid qualifier is used to prevent this; the interpolation point must fall within both the pixel's area and the primitive's area. +out SHADER +{ + vec4 p; + vec2 t; +} VSout; + +#define VSout_p (VSout.p) +#define VSout_t (VSout.t) + +void vs_main() +{ + VSout_p = vec4(POSITION, 0.5f, 1.0f); + VSout_t = TEXCOORD0; + gl_Position = vec4(POSITION, 0.5f, 1.0f); // NOTE I don't know if it is possible to merge POSITION_OUT and gl_Position +} + +#endif + +#ifdef FRAGMENT_SHADER + +in SHADER +{ + vec4 p; + vec2 t; +} PSin; + +#define PSin_p (PSin.p) +#define PSin_t (PSin.t) + +// Give a different name so I remember there is a special case! +#if defined(ps_main1) || defined(ps_main10) +layout(location = 0) out uint SV_Target1; +#else +layout(location = 0) out vec4 SV_Target0; +#endif + +layout(binding = 0) uniform sampler2D TextureSampler; + +layout(std140, binding = 15) uniform cb15 +{ + ivec4 ScalingFactor; +}; + +vec4 sample_c() +{ + return texture(TextureSampler, PSin_t); +} + +vec4 ps_crt(uint i) +{ + vec4 mask[4] = vec4[4] + ( + vec4(1, 0, 0, 0), + vec4(0, 1, 0, 0), + vec4(0, 0, 1, 0), + vec4(1, 1, 1, 0) + ); + return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); +} + +#ifdef ps_main0 +void ps_main0() +{ + SV_Target0 = sample_c(); +} +#endif + +#ifdef ps_main1 +void ps_main1() +{ + // Input Color is RGBA8 + + // We want to output a pixel on the PSMCT16* format + // A1-BGR5 + +#if 0 + // Note: dot is a good idea from pseudo. However we must be careful about float accuraccy. + // Here a global idea example: + // + // SV_Target1 = dot(round(sample_c() * vec4(31.f, 31.f, 31.f, 1.f)), vec4(1.f, 32.f, 1024.f, 32768.f)); + // + + // For me this code is more accurate but it will require some tests + + vec4 c = sample_c() * 255.0f + 0.5f; // Denormalize value to avoid float precision issue + + // shift Red: -3 + // shift Green: -3 + 5 + // shift Blue: -3 + 10 + // shift Alpha: -7 + 15 + highp uvec4 i = uvec4(c * vec4(1/8.0f, 4.0f, 128.0f, 256.0f)); // Shift value + + // bit field operation requires GL4 HW. Could be nice to merge it with step/mix below + SV_Target1 = (i.r & uint(0x001f)) | (i.g & uint(0x03e0)) | (i.b & uint(0x7c00)) | (i.a & uint(0x8000)); + +#else + // Old code which is likely wrong. + + vec4 c = sample_c(); + + c.a *= 256.0f / 127.0f; // hm, 0.5 won't give us 1.0 if we just multiply with 2 + + highp uvec4 i = uvec4(c * vec4(uint(0x001f), uint(0x03e0), uint(0x7c00), uint(0x8000))); + + // bit field operation requires GL4 HW. + SV_Target1 = (i.x & uint(0x001f)) | (i.y & uint(0x03e0)) | (i.z & uint(0x7c00)) | (i.w & uint(0x8000)); +#endif + + +} +#endif + +#ifdef ps_main10 +void ps_main10() +{ + // Convert a GL_FLOAT32 depth texture into a 32 bits UINT texture + SV_Target1 = uint(exp2(32.0f) * sample_c().r); +} +#endif + +#ifdef ps_main11 +void ps_main11() +{ + // Convert a GL_FLOAT32 depth texture into a RGBA color texture + const vec4 bitSh = vec4(exp2(24.0f), exp2(16.0f), exp2(8.0f), exp2(0.0f)); + const vec4 bitMsk = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0); + + vec4 res = fract(vec4(sample_c().r) * bitSh); + + SV_Target0 = (res - res.xxyz * bitMsk) * 256.0f/255.0f; +} +#endif + +#ifdef ps_main12 +void ps_main12() +{ + // Convert a GL_FLOAT32 (only 16 lsb) depth into a RGB5A1 color texture + const vec4 bitSh = vec4(exp2(32.0f), exp2(27.0f), exp2(22.0f), exp2(17.0f)); + const uvec4 bitMsk = uvec4(0x1F, 0x1F, 0x1F, 0x1); + uvec4 color = uvec4(vec4(sample_c().r) * bitSh) & bitMsk; + + SV_Target0 = vec4(color) / vec4(32.0f, 32.0f, 32.0f, 1.0f); +} +#endif + +#ifdef ps_main13 +void ps_main13() +{ + // Convert a RRGBA texture into a float depth texture + // FIXME: I'm afraid of the accuracy + const vec4 bitSh = vec4(exp2(-32.0f), exp2(-24.0f), exp2(-16.0f), exp(-8.0f)) * vec4(255.0); + gl_FragDepth = dot(sample_c(), bitSh); +} +#endif + +#ifdef ps_main14 +void ps_main14() +{ + // Same as above but without the alpha channel (24 bits Z) + + // Convert a RRGBA texture into a float depth texture + // FIXME: I'm afraid of the accuracy + const vec3 bitSh = vec3(exp2(-32.0f), exp2(-24.0f), exp2(-16.0f)) * vec3(255.0); + gl_FragDepth = dot(sample_c().rgb, bitSh); +} +#endif + +#ifdef ps_main15 +void ps_main15() +{ + // Same as above but without the A/B channels (16 bits Z) + + // Convert a RRGBA texture into a float depth texture + // FIXME: I'm afraid of the accuracy + const vec2 bitSh = vec2(exp2(-32.0f), exp2(-24.0f)) * vec2(255.0); + gl_FragDepth = dot(sample_c().rg, bitSh); +} +#endif + +#ifdef ps_main16 +void ps_main16() +{ + // Convert a RGB5A1 (saved as RGBA8) color to a 16 bit Z + // FIXME: I'm afraid of the accuracy + const vec4 bitSh = vec4(exp2(-32.0f), exp2(-27.0f), exp2(-22.0f), exp(-17.0f)); + // Trunc color to drop useless lsb + vec4 color = trunc(sample_c() * vec4(255.0f) / vec4(8.0f, 8.0f, 8.0f, 128.0f)); + gl_FragDepth = dot(vec4(color), bitSh); +} +#endif + +#ifdef ps_main17 +void ps_main17() +{ + + // Potential speed optimization. There is a high probability that + // game only want to extract a single channel (blue). It will allow + // to remove most of the conditional operation and yield a +2/3 fps + // boost on MGS3 + // + // Hypothesis wrong in Prince of Persia ... Seriously WTF ! + //#define ONLY_BLUE; + + // Convert a RGBA texture into a 8 bits packed texture + // Input column: 8x2 RGBA pixels + // 0: 8 RGBA + // 1: 8 RGBA + // Output column: 16x4 Index pixels + // 0: 8 R | 8 B + // 1: 8 R | 8 B + // 2: 8 G | 8 A + // 3: 8 G | 8 A + float c; + + uvec2 sel = uvec2(gl_FragCoord.xy) % uvec2(16u, 16u); + ivec2 tb = ((ivec2(gl_FragCoord.xy) & ~ivec2(15, 3)) >> 1); + + int ty = tb.y | (int(gl_FragCoord.y) & 1); + int txN = tb.x | (int(gl_FragCoord.x) & 7); + int txH = tb.x | ((int(gl_FragCoord.x) + 4) & 7); + + txN *= ScalingFactor.x; + txH *= ScalingFactor.x; + ty *= ScalingFactor.y; + + // TODO investigate texture gather + vec4 cN = texelFetch(TextureSampler, ivec2(txN, ty), 0); + vec4 cH = texelFetch(TextureSampler, ivec2(txH, ty), 0); + + + if ((sel.y & 4u) == 0u) { + // Column 0 and 2 +#ifdef ONLY_BLUE + c = cN.b; +#else + if ((sel.y & 3u) < 2u) { + // first 2 lines of the col + if (sel.x < 8u) + c = cN.r; + else + c = cN.b; + } else { + if (sel.x < 8u) + c = cH.g; + else + c = cH.a; + } +#endif + } else { +#ifdef ONLY_BLUE + c = cH.b; +#else + // Column 1 and 3 + if ((sel.y & 3u) < 2u) { + // first 2 lines of the col + if (sel.x < 8u) + c = cH.r; + else + c = cH.b; + } else { + if (sel.x < 8u) + c = cN.g; + else + c = cN.a; + } +#endif + } + + + SV_Target0 = vec4(c); +} +#endif + +#ifdef ps_main7 +void ps_main7() +{ + vec4 c = sample_c(); + + c.a = dot(c.rgb, vec3(0.299, 0.587, 0.114)); + + SV_Target0 = c; +} +#endif + +#ifdef ps_main5 +vec4 ps_scanlines(uint i) +{ + vec4 mask[2] = + { + vec4(1, 1, 1, 0), + vec4(0, 0, 0, 0) + }; + + return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f); +} + +void ps_main5() // scanlines +{ + highp uvec4 p = uvec4(gl_FragCoord); + + vec4 c = ps_scanlines(p.y % 2u); + + SV_Target0 = c; +} +#endif + +#ifdef ps_main6 +void ps_main6() // diagonal +{ + highp uvec4 p = uvec4(gl_FragCoord); + + vec4 c = ps_crt((p.x + (p.y % 3u)) % 3u); + + SV_Target0 = c; +} +#endif + +#ifdef ps_main8 +void ps_main8() // triangular +{ + highp uvec4 p = uvec4(gl_FragCoord); + + vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u); + + SV_Target0 = c; +} +#endif + +#ifdef ps_main9 +void ps_main9() +{ + + const float PI = 3.14159265359f; + + vec2 texdim = vec2(textureSize(TextureSampler, 0)); + + vec4 c; + if (dFdy(PSin_t.y) * PSin_t.y > 0.5f) { + c = sample_c(); + } else { + float factor = (0.9f - 0.4f * cos(2.0f * PI * PSin_t.y * texdim.y)); + c = factor * texture(TextureSampler, vec2(PSin_t.x, (floor(PSin_t.y * texdim.y) + 0.5f) / texdim.y)); + } + + SV_Target0 = c; +} +#endif + +// Used for DATE (stencil) +// DATM == 1 +#ifdef ps_main2 +void ps_main2() +{ + if(sample_c().a < (127.5f / 255.0f)) // >= 0x80 pass + discard; +} +#endif + +// Used for DATE (stencil) +// DATM == 0 +#ifdef ps_main3 +void ps_main3() +{ + if((127.5f / 255.0f) < sample_c().a) // < 0x80 pass (== 0x80 should not pass) + discard; +} +#endif + +#ifdef ps_main4 +void ps_main4() +{ + SV_Target0 = mod(round(sample_c() * 255.0f), 256.0f) / 255.0f; +} +#endif + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/fxaa.fx pcsx2-1.4.0/plugins/GSdx/res/glsl/fxaa.fx --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/fxaa.fx 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/fxaa.fx 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,588 @@ +#if defined(SHADER_MODEL) || defined(FXAA_GLSL_130) + +#ifndef FXAA_GLSL_130 + #define FXAA_GLSL_130 0 +#endif + +#define UHQ_FXAA 1 //High Quality Fast Approximate Anti Aliasing. Adapted for GSdx from Timothy Lottes FXAA 3.11. +#define FxaaSubpixMax 0.0 //[0.00 to 1.00] Amount of subpixel aliasing removal. 0.00: Edge only antialiasing (no blurring) +#define FxaaEarlyExit 1 //[0 or 1] Use Fxaa early exit pathing. When disabled, the entire scene is antialiased(FSAA). 0 is off, 1 is on. + +/*------------------------------------------------------------------------------ + [GLOBALS|FUNCTIONS] +------------------------------------------------------------------------------*/ +#if (FXAA_GLSL_130 == 1) + +struct vertex_basic +{ + vec4 p; + vec2 t; +}; + +layout(binding = 0) uniform sampler2D TextureSampler; + +in SHADER +{ + vec4 p; + vec2 t; +} PSin; + +layout(location = 0) out vec4 SV_Target0; + +#else + +#if (SHADER_MODEL >= 0x400) +Texture2D Texture : register(t0); +SamplerState TextureSampler : register(s0); +#else +texture2D Texture : register(t0); +sampler2D TextureSampler : register(s0); +#define SamplerState sampler2D +#endif + +cbuffer cb0 +{ + float4 _rcpFrame : register(c0); +}; + +struct VS_INPUT +{ + float4 p : POSITION; + float2 t : TEXCOORD0; +}; + +struct VS_OUTPUT +{ + #if (SHADER_MODEL >= 0x400) + float4 p : SV_Position; + #else + float4 p : TEXCOORD1; + #endif + float2 t : TEXCOORD0; +}; + +struct PS_OUTPUT +{ + #if (SHADER_MODEL >= 0x400) + float4 c : SV_Target0; + #else + float4 c : COLOR0; + #endif +}; + +#endif + +/*------------------------------------------------------------------------------ + [FXAA CODE SECTION] +------------------------------------------------------------------------------*/ + +#if (SHADER_MODEL >= 0x500) +#define FXAA_HLSL_5 1 +#define FXAA_GATHER4_ALPHA 1 +#elif (SHADER_MODEL >= 0x400) +#define FXAA_HLSL_4 1 +#define FXAA_GATHER4_ALPHA 0 +#elif (FXAA_GLSL_130 == 1) +#define FXAA_GATHER4_ALPHA 1 +#else +#define FXAA_HLSL_3 1 +#define FXAA_GATHER4_ALPHA 0 +#endif + +#if (FXAA_HLSL_5 == 1) +struct FxaaTex { SamplerState smpl; Texture2D tex; }; +#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) +#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) +#define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p) +#define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o) +#define FxaaDiscard clip(-1) +#define FxaaSat(x) saturate(x) + +#elif (FXAA_HLSL_4 == 1) +struct FxaaTex { SamplerState smpl; Texture2D tex; }; +#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) +#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) +#define FxaaDiscard clip(-1) +#define FxaaSat(x) saturate(x) + +#elif (FXAA_HLSL_3 == 1) +#define FxaaTex sampler2D +#define int2 float2 +#define FxaaSat(x) saturate(x) +#define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0)) +#define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0)) + +#elif (FXAA_GLSL_130 == 1) + +#define int2 ivec2 +#define float2 vec2 +#define float3 vec3 +#define float4 vec4 +#define FxaaDiscard discard +#define FxaaSat(x) clamp(x, 0.0, 1.0) +#define FxaaTex sampler2D +#define FxaaTexTop(t, p) textureLod(t, p, 0.0) +#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) +#if (FXAA_GATHER4_ALPHA == 1) +// use #extension GL_ARB_gpu_shader5 : enable +#define FxaaTexAlpha4(t, p) textureGather(t, p, 3) +#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) +#endif + +#endif + +#define FxaaEdgeThreshold 0.063 +#define FxaaEdgeThresholdMin 0.00 +#define FXAA_QUALITY__P0 1.0 +#define FXAA_QUALITY__P1 1.5 +#define FXAA_QUALITY__P2 2.0 +#define FXAA_QUALITY__P3 2.0 +#define FXAA_QUALITY__P4 2.0 +#define FXAA_QUALITY__P5 2.0 +#define FXAA_QUALITY__P6 2.0 +#define FXAA_QUALITY__P7 2.0 +#define FXAA_QUALITY__P8 2.0 +#define FXAA_QUALITY__P9 2.0 +#define FXAA_QUALITY__P10 4.0 +#define FXAA_QUALITY__P11 8.0 +#define FXAA_QUALITY__P12 8.0 + +/*------------------------------------------------------------------------------ + [GAMMA PREPASS CODE SECTION] +------------------------------------------------------------------------------*/ +float RGBLuminance(float3 color) +{ + const float3 lumCoeff = float3(0.2126729, 0.7151522, 0.0721750); + return dot(color.rgb, lumCoeff); +} + +#if (FXAA_GLSL_130 == 0) +#define PixelSize float2(_rcpFrame.x, _rcpFrame.y) +#endif + + +float3 RGBGammaToLinear(float3 color, float gamma) +{ + color = FxaaSat(color); + color.r = (color.r <= 0.0404482362771082) ? + color.r / 12.92 : pow((color.r + 0.055) / 1.055, gamma); + color.g = (color.g <= 0.0404482362771082) ? + color.g / 12.92 : pow((color.g + 0.055) / 1.055, gamma); + color.b = (color.b <= 0.0404482362771082) ? + color.b / 12.92 : pow((color.b + 0.055) / 1.055, gamma); + + return color; +} + +float3 LinearToRGBGamma(float3 color, float gamma) +{ + color = FxaaSat(color); + color.r = (color.r <= 0.00313066844250063) ? + color.r * 12.92 : 1.055 * pow(color.r, 1.0 / gamma) - 0.055; + color.g = (color.g <= 0.00313066844250063) ? + color.g * 12.92 : 1.055 * pow(color.g, 1.0 / gamma) - 0.055; + color.b = (color.b <= 0.00313066844250063) ? + color.b * 12.92 : 1.055 * pow(color.b, 1.0 / gamma) - 0.055; + + return color; +} + +float4 PreGammaPass(float4 color, float2 uv0) +{ + #if (SHADER_MODEL >= 0x400) + color = Texture.Sample(TextureSampler, uv0); + #elif (FXAA_GLSL_130 == 1) + color = texture(TextureSampler, uv0); + #else + color = tex2D(TextureSampler, uv0); + #endif + + const float GammaConst = 2.233; + color.rgb = RGBGammaToLinear(color.rgb, GammaConst); + color.rgb = LinearToRGBGamma(color.rgb, GammaConst); + color.a = RGBLuminance(color.rgb); + + return color; +} + + +/*------------------------------------------------------------------------------ + [FXAA CODE SECTION] +------------------------------------------------------------------------------*/ + +float FxaaLuma(float4 rgba) +{ + rgba.w = RGBLuminance(rgba.xyz); + return rgba.w; +} + +float4 FxaaPixelShader(float2 pos, FxaaTex tex, float2 fxaaRcpFrame, float fxaaSubpix, float fxaaEdgeThreshold, float fxaaEdgeThresholdMin) +{ + float2 posM; + posM.x = pos.x; + posM.y = pos.y; + + #if (FXAA_GATHER4_ALPHA == 1) + float4 rgbyM = FxaaTexTop(tex, posM); + float4 luma4A = FxaaTexAlpha4(tex, posM); + float4 luma4B = FxaaTexOffAlpha4(tex, posM, int2(-1, -1)); + rgbyM.w = RGBLuminance(rgbyM.xyz); + + #define lumaM rgbyM.w + #define lumaE luma4A.z + #define lumaS luma4A.x + #define lumaSE luma4A.y + #define lumaNW luma4B.w + #define lumaN luma4B.z + #define lumaW luma4B.x + + #else + float4 rgbyM = FxaaTexTop(tex, posM); + rgbyM.w = RGBLuminance(rgbyM.xyz); + #define lumaM rgbyM.w + + float lumaS = FxaaLuma(FxaaTexOff(tex, posM, int2( 0, 1), fxaaRcpFrame.xy)); + float lumaE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1, 0), fxaaRcpFrame.xy)); + float lumaN = FxaaLuma(FxaaTexOff(tex, posM, int2( 0,-1), fxaaRcpFrame.xy)); + float lumaW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1, 0), fxaaRcpFrame.xy)); + #endif + + float maxSM = max(lumaS, lumaM); + float minSM = min(lumaS, lumaM); + float maxESM = max(lumaE, maxSM); + float minESM = min(lumaE, minSM); + float maxWN = max(lumaN, lumaW); + float minWN = min(lumaN, lumaW); + + float rangeMax = max(maxWN, maxESM); + float rangeMin = min(minWN, minESM); + float range = rangeMax - rangeMin; + float rangeMaxScaled = rangeMax * fxaaEdgeThreshold; + float rangeMaxClamped = max(fxaaEdgeThresholdMin, rangeMaxScaled); + + bool earlyExit = range < rangeMaxClamped; + #if (FxaaEarlyExit == 1) + if(earlyExit) { return rgbyM; } + #endif + + #if (FXAA_GATHER4_ALPHA == 0) + float lumaNW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1,-1), fxaaRcpFrame.xy)); + float lumaSE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1, 1), fxaaRcpFrame.xy)); + float lumaNE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1,-1), fxaaRcpFrame.xy)); + float lumaSW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1, 1), fxaaRcpFrame.xy)); + #else + float lumaNE = FxaaLuma(FxaaTexOff(tex, posM, int2( 1,-1), fxaaRcpFrame.xy)); + float lumaSW = FxaaLuma(FxaaTexOff(tex, posM, int2(-1, 1), fxaaRcpFrame.xy)); + #endif + + float lumaNS = lumaN + lumaS; + float lumaWE = lumaW + lumaE; + float subpixRcpRange = 1.0/range; + float subpixNSWE = lumaNS + lumaWE; + float edgeHorz1 = (-2.0 * lumaM) + lumaNS; + float edgeVert1 = (-2.0 * lumaM) + lumaWE; + float lumaNESE = lumaNE + lumaSE; + float lumaNWNE = lumaNW + lumaNE; + float edgeHorz2 = (-2.0 * lumaE) + lumaNESE; + float edgeVert2 = (-2.0 * lumaN) + lumaNWNE; + + float lumaNWSW = lumaNW + lumaSW; + float lumaSWSE = lumaSW + lumaSE; + float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2); + float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2); + float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW; + float edgeVert3 = (-2.0 * lumaS) + lumaSWSE; + float edgeHorz = abs(edgeHorz3) + edgeHorz4; + float edgeVert = abs(edgeVert3) + edgeVert4; + + float subpixNWSWNESE = lumaNWSW + lumaNESE; + float lengthSign = fxaaRcpFrame.x; + bool horzSpan = edgeHorz >= edgeVert; + float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE; + if(!horzSpan) lumaN = lumaW; + if(!horzSpan) lumaS = lumaE; + if(horzSpan) lengthSign = fxaaRcpFrame.y; + float subpixB = (subpixA * (1.0/12.0)) - lumaM; + + float gradientN = lumaN - lumaM; + float gradientS = lumaS - lumaM; + float lumaNN = lumaN + lumaM; + float lumaSS = lumaS + lumaM; + bool pairN = abs(gradientN) >= abs(gradientS); + float gradient = max(abs(gradientN), abs(gradientS)); + if(pairN) lengthSign = -lengthSign; + float subpixC = FxaaSat(abs(subpixB) * subpixRcpRange); + + float2 posB; + posB.x = posM.x; + posB.y = posM.y; + float2 offNP; + offNP.x = (!horzSpan) ? 0.0 : fxaaRcpFrame.x; + offNP.y = ( horzSpan) ? 0.0 : fxaaRcpFrame.y; + if(!horzSpan) posB.x += lengthSign * 0.5; + if( horzSpan) posB.y += lengthSign * 0.5; + + float2 posN; + posN.x = posB.x - offNP.x * FXAA_QUALITY__P0; + posN.y = posB.y - offNP.y * FXAA_QUALITY__P0; + float2 posP; + posP.x = posB.x + offNP.x * FXAA_QUALITY__P0; + posP.y = posB.y + offNP.y * FXAA_QUALITY__P0; + float subpixD = ((-2.0)*subpixC) + 3.0; + float lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)); + float subpixE = subpixC * subpixC; + float lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)); + + if(!pairN) lumaNN = lumaSS; + float gradientScaled = gradient * 1.0/4.0; + float lumaMM = lumaM - lumaNN * 0.5; + float subpixF = subpixD * subpixE; + bool lumaMLTZero = lumaMM < 0.0; + lumaEndN -= lumaNN * 0.5; + lumaEndP -= lumaNN * 0.5; + bool doneN = abs(lumaEndN) >= gradientScaled; + bool doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1; + bool doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P1; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P1; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P2; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P2; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P3; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P3; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P4; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P4; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P5; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P5; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P6; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P6; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P7; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P7; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P8; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P8; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P9; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P9; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P10; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P10; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P11; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P11; + + if(doneNP) { + if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); + if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); + if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; + if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; + doneN = abs(lumaEndN) >= gradientScaled; + doneP = abs(lumaEndP) >= gradientScaled; + if(!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12; + if(!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12; + doneNP = (!doneN) || (!doneP); + if(!doneP) posP.x += offNP.x * FXAA_QUALITY__P12; + if(!doneP) posP.y += offNP.y * FXAA_QUALITY__P12; + }}}}}}}}}}} + + float dstN = posM.x - posN.x; + float dstP = posP.x - posM.x; + if(!horzSpan) dstN = posM.y - posN.y; + if(!horzSpan) dstP = posP.y - posM.y; + + bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero; + float spanLength = (dstP + dstN); + bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero; + float spanLengthRcp = 1.0/spanLength; + + bool directionN = dstN < dstP; + float dst = min(dstN, dstP); + bool goodSpan = directionN ? goodSpanN : goodSpanP; + float subpixG = subpixF * subpixF; + float pixelOffset = (dst * (-spanLengthRcp)) + 0.5; + float subpixH = subpixG * fxaaSubpix; + + float pixelOffsetGood = goodSpan ? pixelOffset : 0.0; + float pixelOffsetSubpix = max(pixelOffsetGood, subpixH); + if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign; + if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign; + + return float4(FxaaTexTop(tex, posM).xyz, lumaM); +} + +#if (FXAA_GLSL_130 == 1) +float4 FxaaPass(float4 FxaaColor, float2 uv0) +#else +float4 FxaaPass(float4 FxaaColor : COLOR0, float2 uv0 : TEXCOORD0) +#endif +{ + + #if (SHADER_MODEL >= 0x400) + FxaaTex tex; + tex.tex = Texture; + tex.smpl = TextureSampler; + + Texture.GetDimensions(PixelSize.x, PixelSize.y); + FxaaColor = FxaaPixelShader(uv0, tex, 1.0/PixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin); + + #elif (FXAA_GLSL_130 == 1) + + vec2 PixelSize = textureSize(TextureSampler, 0); + FxaaColor = FxaaPixelShader(uv0, TextureSampler, 1.0/PixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin); + + #else + FxaaTex tex; + tex = TextureSampler; + FxaaColor = FxaaPixelShader(uv0, tex, PixelSize.xy, FxaaSubpixMax, FxaaEdgeThreshold, FxaaEdgeThresholdMin); + #endif + + return FxaaColor; +} + +/*------------------------------------------------------------------------------ + [MAIN() & COMBINE PASS CODE SECTION] +------------------------------------------------------------------------------*/ +#if (FXAA_GLSL_130 == 1) + +void ps_main() +{ + vec4 color = texture(TextureSampler, PSin.t); + color = PreGammaPass(color, PSin.t); + color = FxaaPass(color, PSin.t); + + SV_Target0 = color; +} + +#else + +PS_OUTPUT ps_main(VS_OUTPUT input) +{ + PS_OUTPUT output; + + #if (SHADER_MODEL >= 0x400) + float4 color = Texture.Sample(TextureSampler, input.t); + + color = PreGammaPass(color, input.t); + color = FxaaPass(color, input.t); + #else + float4 color = tex2D(TextureSampler, input.t); + + color = PreGammaPass(color, input.t); + color = FxaaPass(color, input.t); + #endif + + output.c = color; + + return output; +} + +#endif + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/interlace.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/interlace.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/interlace.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/interlace.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,67 @@ +//#version 420 // Keep it for editor detection + +struct vertex_basic +{ + vec4 p; + vec2 t; +}; + +in SHADER +{ + vec4 p; + vec2 t; +} PSin; + +#define PSin_p (PSin.p) +#define PSin_t (PSin.t) + +#ifdef FRAGMENT_SHADER + +layout(location = 0) out vec4 SV_Target0; + +layout(std140, binding = 11) uniform cb11 +{ + vec2 ZrH; + float hH; +}; + +layout(binding = 0) uniform sampler2D TextureSampler; + +// TODO ensure that clip (discard) is < 0 and not <= 0 ??? +void ps_main0() +{ + if (fract(PSin_t.y * hH) - 0.5 < 0.0) + discard; + // I'm not sure it impact us but be safe to lookup texture before conditional if + // see: http://www.opengl.org/wiki/GLSL_Sampler#Non-uniform_flow_control + vec4 c = texture(TextureSampler, PSin_t); + + SV_Target0 = c; +} + +void ps_main1() +{ + if (0.5 - fract(PSin_t.y * hH) < 0.0) + discard; + // I'm not sure it impact us but be safe to lookup texture before conditional if + // see: http://www.opengl.org/wiki/GLSL_Sampler#Non-uniform_flow_control + vec4 c = texture(TextureSampler, PSin_t); + + SV_Target0 = c; +} + +void ps_main2() +{ + vec4 c0 = texture(TextureSampler, PSin_t - ZrH); + vec4 c1 = texture(TextureSampler, PSin_t); + vec4 c2 = texture(TextureSampler, PSin_t + ZrH); + + SV_Target0 = (c0 + c1 * 2.0f + c2) / 4.0f; +} + +void ps_main3() +{ + SV_Target0 = texture(TextureSampler, PSin_t); +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/merge.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/merge.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/merge.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/merge.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,44 @@ +//#version 420 // Keep it for editor detection + +struct vertex_basic +{ + vec4 p; + vec2 t; +}; + +in SHADER +{ + vec4 p; + vec2 t; +} PSin; + +#define PSin_p (PSin.p) +#define PSin_t (PSin.t) + +#ifdef FRAGMENT_SHADER + +layout(location = 0) out vec4 SV_Target0; + +layout(std140, binding = 10) uniform cb10 +{ + vec4 BGColor; +}; + +layout(binding = 0) uniform sampler2D TextureSampler; + +void ps_main0() +{ + vec4 c = texture(TextureSampler, PSin_t); + // Note: clamping will be done by fixed unit + c.a *= 2.0f; + SV_Target0 = c; +} + +void ps_main1() +{ + vec4 c = texture(TextureSampler, PSin_t); + c.a = BGColor.a; + SV_Target0 = c; +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/shadeboost.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/shadeboost.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/shadeboost.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/shadeboost.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,71 @@ +//#version 420 // Keep it for editor detection + +/* +** Contrast, saturation, brightness +** Code of this function is from TGM's shader pack +** http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=21057 +** TGM's author comment about the license (included in the previous link) +** "do with it, what you want! its total free! +** (but would be nice, if you say that you used my shaders :wink: ) but not necessary" +*/ + +struct vertex_basic +{ + vec4 p; + vec2 t; +}; + +#ifdef FRAGMENT_SHADER + +in SHADER +{ + vec4 p; + vec2 t; +} PSin; + +#define PSin_p (PSin.p) +#define PSin_t (PSin.t) + +layout(location = 0) out vec4 SV_Target0; + +layout(std140, binding = 12) uniform cb12 +{ + vec4 BGColor; +}; + +layout(binding = 0) uniform sampler2D TextureSampler; + +// For all settings: 1.0 = 100% 0.5=50% 1.5 = 150% +vec4 ContrastSaturationBrightness(vec4 color) +{ + const float sat = SB_SATURATION / 50.0; + const float brt = SB_BRIGHTNESS / 50.0; + const float con = SB_CONTRAST / 50.0; + + // Increase or decrease these values to adjust r, g and b color channels separately + const float AvgLumR = 0.5; + const float AvgLumG = 0.5; + const float AvgLumB = 0.5; + + const vec3 LumCoeff = vec3(0.2125, 0.7154, 0.0721); + + vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB); + vec3 brtColor = color.rgb * brt; + float dot_intensity = dot(brtColor, LumCoeff); + vec3 intensity = vec3(dot_intensity, dot_intensity, dot_intensity); + vec3 satColor = mix(intensity, brtColor, sat); + vec3 conColor = mix(AvgLumin, satColor, con); + + color.rgb = conColor; + return color; +} + + +void ps_main() +{ + vec4 c = texture(TextureSampler, PSin_t); + SV_Target0 = ContrastSaturationBrightness(c); +} + + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/tfx_fs.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/tfx_fs.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/tfx_fs.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/tfx_fs.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,615 @@ +//#version 420 // Keep it for text editor detection + +// Require for bit operation +//#extension GL_ARB_gpu_shader5 : enable + +#define FMT_32 0 +#define FMT_24 1 +#define FMT_16 2 + +#define PS_PAL_FMT (PS_TEX_FMT >> 2) +#define PS_AEM_FMT (PS_TEX_FMT & 3) + +// APITRACE_DEBUG enables forced pixel output to easily detect +// the fragment computed by primitive +#define APITRACE_DEBUG 0 +// TEX_COORD_DEBUG output the uv coordinate as color. It is useful +// to detect bad sampling due to upscaling +//#define TEX_COORD_DEBUG +// Just copy directly the texture coordinate +#ifdef TEX_COORD_DEBUG +#define PS_TFX 1 +#define PS_TCC 1 +#endif + +#define SW_BLEND (PS_BLEND_A || PS_BLEND_B || PS_BLEND_D) + +#ifdef FRAGMENT_SHADER + +in SHADER +{ + vec4 t; + vec4 c; + flat vec4 fc; +} PSin; + +#define PSin_t (PSin.t) +#define PSin_c (PSin.c) +#define PSin_fc (PSin.fc) + +// Same buffer but 2 colors for dual source blending +layout(location = 0, index = 0) out vec4 SV_Target0; +layout(location = 0, index = 1) out vec4 SV_Target1; + +layout(binding = 0) uniform sampler2D TextureSampler; +layout(binding = 1) uniform sampler2D PaletteSampler; +layout(binding = 3) uniform sampler2D RtSampler; // note 2 already use by the image below + +#ifndef DISABLE_GL42_image +#if PS_DATE > 0 +// FIXME how to declare memory access +layout(r32i, binding = 2) uniform iimage2D img_prim_min; +// WARNING: +// You can't enable it if you discard the fragment. The depth is still +// updated (shadow in Shin Megami Tensei Nocturne) +// +// early_fragment_tests must still be enabled in the first pass of the 2 passes algo +// First pass search the first primitive that will write the bad alpha value. Value +// won't be written if the fragment fails the depth test. +// +// In theory the best solution will be do +// 1/ copy the depth buffer +// 2/ do the full depth (current depth writes are disabled) +// 3/ restore the depth buffer for 2nd pass +// Of course, it is likely too costly. +#if PS_DATE == 1 || PS_DATE == 2 +layout(early_fragment_tests) in; +#endif + +// I don't remember why I set this parameter but it is surely useless +//layout(pixel_center_integer) in vec4 gl_FragCoord; +#endif +#else +// use basic stencil +#endif + + +// Warning duplicated in both GLSL file +layout(std140, binding = 21) uniform cb21 +{ + vec3 FogColor; + float AREF; + + vec4 WH; + + vec2 _pad0; + vec2 TA; + + uvec4 MskFix; + + uvec4 FbMask; + + vec3 _pad1; + float Af; + + vec4 HalfTexel; + + vec4 MinMax; + + vec2 TextureScale; + vec2 TC_OffsetHack; +}; + +vec4 sample_c(vec2 uv) +{ + return texture(TextureSampler, uv); +} + +vec4 sample_p(float idx) +{ + return texture(PaletteSampler, vec2(idx, 0.0f)); +} + +vec4 clamp_wrap_uv(vec4 uv) +{ + vec4 uv_out = uv; + +#if PS_WMS == PS_WMT + +#if PS_WMS == 2 + uv_out = clamp(uv, MinMax.xyxy, MinMax.zwzw); +#elif PS_WMS == 3 + uv_out = vec4((ivec4(uv * WH.xyxy) & ivec4(MskFix.xyxy)) | ivec4(MskFix.zwzw)) / WH.xyxy; +#endif + +#else // PS_WMS != PS_WMT + +#if PS_WMS == 2 + uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz); + +#elif PS_WMS == 3 + uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx; + +#endif + +#if PS_WMT == 2 + uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww); + +#elif PS_WMT == 3 + + uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy; +#endif + +#endif + + return uv_out; +} + +mat4 sample_4c(vec4 uv) +{ + mat4 c; + + // Note: texture gather can't be used because of special clamping/wrapping + // Also it doesn't support lod + c[0] = sample_c(uv.xy); + c[1] = sample_c(uv.zy); + c[2] = sample_c(uv.xw); + c[3] = sample_c(uv.zw); + + return c; +} + +vec4 sample_4_index(vec4 uv) +{ + vec4 c; + + // Either GSdx will send a texture that contains a single channel + // in this case the red channel is remapped as alpha channel + // + // Or we have an old RT (ie RGBA8) that contains index (4/8) in the alpha channel + + // Note: texture gather can't be used because of special clamping/wrapping + // Also it doesn't support lod + c.x = sample_c(uv.xy).a; + c.y = sample_c(uv.zy).a; + c.z = sample_c(uv.xw).a; + c.w = sample_c(uv.zw).a; + + uvec4 i = uvec4(c * 255.0f + 0.5f); // Denormalize value + +#if PS_PAL_FMT == 1 + // 4HL + return vec4(i & 0xFu) / 255.0f; + +#elif PS_PAL_FMT == 2 + // 4HH + return vec4(i >> 4u) / 255.0f; + +#else + // Most of texture will hit this code so keep normalized float value + + // 8 bits + return c; +#endif + +} + +mat4 sample_4p(vec4 u) +{ + mat4 c; + + c[0] = sample_p(u.x); + c[1] = sample_p(u.y); + c[2] = sample_p(u.z); + c[3] = sample_p(u.w); + + return c; +} + +vec4 sample_color(vec2 st, float q) +{ + //FIXME: maybe we can set gl_Position.w = q in VS +#if (PS_FST == 0) + st /= q; +#endif + +#if (PS_TCOFFSETHACK == 1) + st += TC_OffsetHack.xy; +#endif + + vec4 t; + mat4 c; + vec2 dd; + + // FIXME I'm not sure this condition is useful (I think code will be optimized) +#if (PS_LTF == 0 && PS_AEM_FMT == FMT_32 && PS_PAL_FMT == 0 && PS_WMS < 2 && PS_WMT < 2) + // No software LTF and pure 32 bits RGBA texure without special texture wrapping + c[0] = sample_c(st); +#ifdef TEX_COORD_DEBUG + c[0].rg = st.xy; +#endif + +#else + vec4 uv; + + if(PS_LTF != 0) + { + uv = st.xyxy + HalfTexel; + dd = fract(uv.xy * WH.zw); +#if (PS_FST == 0) + // Background in Shin Megami Tensei Lucifers + // I suspect that uv isn't a standard number, so fract is outside of the [0;1] range + // Note: it is free on GPU but let's do it only for float coordinate + // Strangely Dx doesn't suffer from this issue. + dd = clamp(dd, vec2(0.0f), vec2(1.0f)); +#endif + } + else + { + uv = st.xyxy; + } + + uv = clamp_wrap_uv(uv); + +#if PS_PAL_FMT != 0 + c = sample_4p(sample_4_index(uv)); +#else + c = sample_4c(uv); +#endif + +#ifdef TEX_COORD_DEBUG + c[0].rg = uv.xy; + c[1].rg = uv.xy; + c[2].rg = uv.xy; + c[3].rg = uv.xy; +#endif + +#endif + + // PERF note: using dot product reduces by 1 the number of instruction + // but I'm not sure it is equivalent neither faster. + for (int i = 0; i < 4; i++) + { + //float sum = dot(c[i].rgb, vec3(1.0f)); +#if (PS_AEM_FMT == FMT_24) + c[i].a = ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f; + //c[i].a = ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f; +#elif (PS_AEM_FMT == FMT_16) + c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f; + //c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f; +#endif + } + +#if(PS_LTF != 0) + t = mix(mix(c[0], c[1], dd.x), mix(c[2], c[3], dd.x), dd.y); +#else + t = c[0]; +#endif + + // The 0.05f helps to fix the overbloom of sotc + // I think the issue is related to the rounding of texture coodinate. The linear (from fixed unit) + // interpolation could be slightly below the correct one. + return trunc(t * 255.0f + 0.05f); +} + +vec4 tfx(vec4 T, vec4 C) +{ + vec4 C_out; + vec4 FxT = trunc(trunc(C) * T / 128.0f); + +#if (PS_TFX == 0) + C_out = FxT; +#elif (PS_TFX == 1) + C_out = T; +#elif (PS_TFX == 2) + C_out.rgb = FxT.rgb + C.a; + C_out.a = T.a + C.a; +#elif (PS_TFX == 3) + C_out.rgb = FxT.rgb + C.a; + C_out.a = T.a; +#else + C_out = C; +#endif + +#if (PS_TCC == 0) + C_out.a = C.a; +#endif + +#if (PS_TFX == 0) || (PS_TFX == 2) || (PS_TFX == 3) + // Clamp only when it is useful + C_out = min(C_out, 255.0f); +#endif + + return C_out; +} + +void atst(vec4 C) +{ + // FIXME use integer cmp + float a = C.a; + +#if (PS_ATST == 0) // never + discard; +#elif (PS_ATST == 1) // always + // nothing to do +#elif (PS_ATST == 2) // l + if ((AREF - a - 0.5f) < 0.0f) + discard; +#elif (PS_ATST == 3 ) // le + if ((AREF - a + 0.5f) < 0.0f) + discard; +#elif (PS_ATST == 4) // e + if ((0.5f - abs(a - AREF)) < 0.0f) + discard; +#elif (PS_ATST == 5) // ge + if ((a-AREF + 0.5f) < 0.0f) + discard; +#elif (PS_ATST == 6) // g + if ((a-AREF - 0.5f) < 0.0f) + discard; +#elif (PS_ATST == 7) // ne + if ((abs(a - AREF) - 0.5f) < 0.0f) + discard; +#endif +} + +void fog(inout vec4 C, float f) +{ +#if PS_FOG != 0 + C.rgb = trunc(mix(FogColor, C.rgb, f)); +#endif +} + +vec4 ps_color() +{ + vec4 T = sample_color(PSin_t.xy, PSin_t.w); + +#if PS_IIP == 1 + vec4 C = tfx(T, PSin_c); +#else + vec4 C = tfx(T, PSin_fc); +#endif + + atst(C); + + fog(C, PSin_t.z); + +#if (PS_CLR1 != 0) // needed for Cd * (As/Ad/F + 1) blending modes + C.rgb = vec3(255.0f); +#endif + + return C; +} + +void ps_fbmask(inout vec4 C) +{ + // FIXME do I need special case for 16 bits +#if PS_FBMASK + vec4 RT = trunc(texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0) * 255.0f + 0.1f); + C = vec4((uvec4(C) & ~FbMask) | (uvec4(RT) & FbMask)); +#endif +} + +void ps_blend(inout vec4 Color, float As) +{ +#if SW_BLEND + vec4 RT = trunc(texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0) * 255.0f + 0.1f); + +#if PS_DFMT == FMT_24 + float Ad = 1.0f; +#else + // FIXME FMT_16 case + // FIXME Ad or Ad * 2? + float Ad = RT.a / 128.0f; +#endif + + // Let the compiler do its jobs ! + vec3 Cd = RT.rgb; + vec3 Cs = Color.rgb; + +#if PS_BLEND_A == 0 + vec3 A = Cs; +#elif PS_BLEND_A == 1 + vec3 A = Cd; +#else + vec3 A = vec3(0.0f); +#endif + +#if PS_BLEND_B == 0 + vec3 B = Cs; +#elif PS_BLEND_B == 1 + vec3 B = Cd; +#else + vec3 B = vec3(0.0f); +#endif + +#if PS_BLEND_C == 0 + float C = As; +#elif PS_BLEND_C == 1 + float C = Ad; +#else + float C = Af; +#endif + +#if PS_BLEND_D == 0 + vec3 D = Cs; +#elif PS_BLEND_D == 1 + vec3 D = Cd; +#else + vec3 D = vec3(0.0f); +#endif + +#if PS_BLEND_A == PS_BLEND_B + Color.rgb = D; +#else + Color.rgb = trunc((A - B) * C + D); +#endif + + // FIXME dithering + + // Correct the Color value based on the output format +#if PS_COLCLIP == 0 && PS_HDR == 0 + // Standard Clamp + Color.rgb = clamp(Color.rgb, vec3(0.0f), vec3(255.0f)); +#endif + + // FIXME rouding of negative float? + // compiler uses trunc but it might need floor + + // Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy + // GS: Color = 1, Alpha = 255 => output 1 + // GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875 +#if PS_DFMT == FMT_16 + // In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania + + Color.rgb = vec3(ivec3(Color.rgb) & ivec3(0xF8)); +#elif PS_COLCLIP == 1 && PS_HDR == 0 + Color.rgb = vec3(ivec3(Color.rgb) & ivec3(0xFF)); +#endif + +#endif +} + +void ps_main() +{ +#if ((PS_DATE & 3) == 1 || (PS_DATE & 3) == 2) && !defined(DISABLE_GL42_image) + +#if PS_WRITE_RG == 1 + // Pseudo 16 bits access. + float rt_a = texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0).g; +#else + float rt_a = texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0).a; +#endif + +#if (PS_DATE & 3) == 1 + // DATM == 0: Pixel with alpha equal to 1 will failed + bool bad = (127.5f / 255.0f) < rt_a; +#elif (PS_DATE & 3) == 2 + // DATM == 1: Pixel with alpha equal to 0 will failed + bool bad = rt_a < (127.5f / 255.0f); +#endif + + if (bad) { +#if PS_DATE >= 5 + discard; +#else + imageStore(img_prim_min, ivec2(gl_FragCoord.xy), ivec4(-1)); + return; +#endif + } + +#endif + +#if PS_DATE == 3 && !defined(DISABLE_GL42_image) + int stencil_ceil = imageLoad(img_prim_min, ivec2(gl_FragCoord.xy)).r; + // Note gl_PrimitiveID == stencil_ceil will be the primitive that will update + // the bad alpha value so we must keep it. + + if (gl_PrimitiveID > stencil_ceil) { + discard; + } +#endif + + vec4 C = ps_color(); +#if (APITRACE_DEBUG & 1) == 1 + C.r = 255f; +#endif +#if (APITRACE_DEBUG & 2) == 2 + C.g = 255f; +#endif +#if (APITRACE_DEBUG & 4) == 4 + C.b = 255f; +#endif +#if (APITRACE_DEBUG & 8) == 8 + C.a = 128f; +#endif + +#if PS_SHUFFLE + uvec4 denorm_c = uvec4(C); + uvec2 denorm_TA = uvec2(vec2(TA.xy) * 255.0f + 0.5f); + + // Write RB part. Mask will take care of the correct destination +#if PS_READ_BA + C.rb = C.bb; +#else + C.rb = C.rr; +#endif + + // FIXME precompute my_TA & 0x80 + + // Write GA part. Mask will take care of the correct destination + // Note: GLSL 4.50/GL_EXT_shader_integer_mix support a mix instruction to select a component\n" + // However Nvidia emulate it with an if (at least on kepler arch) ...\n" +#if PS_READ_BA + // bit field operation requires GL4 HW. Could be nice to merge it with step/mix below + // uint my_ta = (bool(bitfieldExtract(denorm_c.a, 7, 1))) ? denorm_TA.y : denorm_TA.x; + // denorm_c.a = bitfieldInsert(denorm_c.a, bitfieldExtract(my_ta, 7, 1), 7, 1); + // c.ga = vec2(float(denorm_c.a)); + + if (bool(denorm_c.a & 0x80u)) + C.ga = vec2(float((denorm_c.a & 0x7Fu) | (denorm_TA.y & 0x80u))); + else + C.ga = vec2(float((denorm_c.a & 0x7Fu) | (denorm_TA.x & 0x80u))); + +#else + if (bool(denorm_c.g & 0x80u)) + C.ga = vec2(float((denorm_c.g & 0x7Fu) | (denorm_TA.y & 0x80u))); + else + C.ga = vec2(float((denorm_c.g & 0x7Fu) | (denorm_TA.x & 0x80u))); + + // Nice idea but step/mix requires 4 instructions + // set / trunc / I2F / Mad + // + // float sel = step(128.0f, c.g); + // vec2 c_shuffle = vec2((denorm_c.gg & 0x7Fu) | (denorm_TA & 0x80u)); + // c.ga = mix(c_shuffle.xx, c_shuffle.yy, sel); +#endif + +#endif + + // Must be done before alpha correction + float alpha_blend = C.a / 128.0f; + + // Correct the ALPHA value based on the output format +#if (PS_DFMT == FMT_16) + float A_one = 128.0f; // alpha output will be 0x80 + C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one; +#elif (PS_DFMT == FMT_32) && (PS_FBA != 0) + if(C.a < 128.0f) C.a += 128.0f; +#endif + + // Get first primitive that will write a failling alpha value +#if PS_DATE == 1 && !defined(DISABLE_GL42_image) + // DATM == 0 + // Pixel with alpha equal to 1 will failed (128-255) + if (C.a > 127.5f) { + imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID); + } + return; +#elif PS_DATE == 2 && !defined(DISABLE_GL42_image) + // DATM == 1 + // Pixel with alpha equal to 0 will failed (0-127) + if (C.a < 127.5f) { + imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID); + } + return; +#endif + + ps_blend(C, alpha_blend); + + ps_fbmask(C); + +#if PS_HDR == 1 + // Use negative value to avoid overflow of the texture (in accumulation mode) + // Note: code were initially done for an Half-Float texture. Due to overflow + // the texture was upgraded to a full float. Maybe this code is useless now! + // Good testcase is castlevania + if (any(greaterThan(C.rgb, vec3(128.0f)))) { + C.rgb = (C.rgb - 256.0f); + } +#endif + SV_Target0 = C / 255.0f; + SV_Target1 = vec4(alpha_blend); +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/tfx_vgs.glsl pcsx2-1.4.0/plugins/GSdx/res/glsl/tfx_vgs.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl/tfx_vgs.glsl 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl/tfx_vgs.glsl 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,276 @@ +//#version 420 // Keep it for text editor detection + +layout(std140, binding = 20) uniform cb20 +{ + vec2 VertexScale; + vec2 VertexOffset; + vec2 _removed_TextureScale; + vec2 PointSize; +}; + +// Warning duplicated in both GLSL file +layout(std140, binding = 21) uniform cb21 +{ + vec3 FogColor; + float AREF; + + vec4 WH; + + vec2 _pad0; + vec2 TA; + + uvec4 MskFix; + + uvec4 FbMask; + + vec3 _pad1; + float Af; + + vec4 HalfTexel; + + vec4 MinMax; + + vec2 TextureScale; + vec2 TC_OffsetHack; +}; + +#ifdef VERTEX_SHADER +layout(location = 0) in vec2 i_st; +layout(location = 2) in vec4 i_c; +layout(location = 3) in float i_q; +layout(location = 4) in uvec2 i_p; +layout(location = 5) in uint i_z; +layout(location = 6) in uvec2 i_uv; +layout(location = 7) in vec4 i_f; + +out SHADER +{ + vec4 t; + vec4 c; + flat vec4 fc; +} VSout; + +#define VSout_t (VSout.t) +#define VSout_c (VSout.c) +#define VSout_fc (VSout.fc) + +out gl_PerVertex { + vec4 gl_Position; + float gl_PointSize; +#if !pGL_ES + float gl_ClipDistance[1]; +#endif +}; + +#ifdef ZERO_TO_ONE_DEPTH +const float exp_min32 = exp2(-32.0f); +#else +const float exp_min31 = exp2(-31.0f); +#endif + +void texture_coord() +{ + if(VS_TME != 0) + { + if(VS_FST != 0) + { + if (VS_WILDHACK == 1) { + VSout_t.xy = vec2(i_uv & uvec2(0x3FEF, 0x3FEF)) * TextureScale; + } else { + VSout_t.xy = vec2(i_uv) * TextureScale; + } + VSout_t.w = 1.0f; + } + else + { + VSout_t.xy = i_st; + VSout_t.w = i_q; + } + } + else + { + VSout_t.xy = vec2(0.0f, 0.0f); + VSout_t.w = 1.0f; + } +} + +void vs_main() +{ + highp uint z; + if(VS_BPPZ == 1) // 24 + z = i_z & uint(0xffffff); + else if(VS_BPPZ == 2) // 16 + z = i_z & uint(0xffff); + else + z = i_z; + + // pos -= 0.05 (1/320 pixel) helps avoiding rounding problems (integral part of pos is usually 5 digits, 0.05 is about as low as we can go) + // example: ceil(afterseveralvertextransformations(y = 133)) => 134 => line 133 stays empty + // input granularity is 1/16 pixel, anything smaller than that won't step drawing up/left by one pixel + // example: 133.0625 (133 + 1/16) should start from line 134, ceil(133.0625 - 0.05) still above 133 + vec4 p; + + p.xy = vec2(i_p) - vec2(0.05f, 0.05f); + p.xy = p.xy * VertexScale - VertexOffset; + p.w = 1.0f; +#ifdef ZERO_TO_ONE_DEPTH + if(VS_LOGZ == 1) { + p.z = max(0.0f, log2(float(z))) / 32.0f; + } else { + p.z = float(z) * exp_min32; + } +#else + if(VS_LOGZ == 1) { + p.z = max(0.0f, log2(float(z))) / 31.0f - 1.0f; + } else { + p.z = float(z) * exp_min31 - 1.0f; + } +#endif + + gl_Position = p; + + texture_coord(); + + VSout_c = i_c; + VSout_fc = i_c; + VSout_t.z = i_f.x; +} + +#endif + +#ifdef GEOMETRY_SHADER + +in gl_PerVertex { + vec4 gl_Position; + float gl_PointSize; +#if !pGL_ES + float gl_ClipDistance[1]; +#endif +} gl_in[]; +//in int gl_PrimitiveIDIn; + +out gl_PerVertex { + vec4 gl_Position; + float gl_PointSize; +#if !pGL_ES + float gl_ClipDistance[1]; +#endif +}; +//out int gl_PrimitiveID; + +in SHADER +{ + vec4 t; + vec4 c; + flat vec4 fc; +} GSin[]; + +out SHADER +{ + vec4 t; + vec4 c; + flat vec4 fc; +} GSout; + +layout(std140, binding = 22) uniform cb22 +{ + vec4 rt_size; +}; + + +struct vertex +{ + vec4 t; + vec4 c; +}; + +void out_vertex(in vertex v) +{ + GSout.t = v.t; + GSout.c = v.c; + gl_PrimitiveID = gl_PrimitiveIDIn; + EmitVertex(); +} + +void out_flat() +{ + // Flat output +#if GS_POINT == 1 + GSout.fc = GSin[0].fc; +#else + GSout.fc = GSin[1].fc; +#endif +} + +#if GS_POINT == 1 +layout(points) in; +#else +layout(lines) in; +#endif +layout(triangle_strip, max_vertices = 6) out; + +void gs_main() +{ + // left top => GSin[0]; + // right bottom => GSin[1]; +#if GS_POINT == 1 + vertex rb = vertex(GSin[0].t, GSin[0].c); +#else + vertex rb = vertex(GSin[1].t, GSin[1].c); +#endif + vertex lt = vertex(GSin[0].t, GSin[0].c); + +#if GS_POINT == 1 + vec4 rb_p = gl_in[0].gl_Position + vec4(PointSize.x, PointSize.y, 0.0f, 0.0f); +#else + vec4 rb_p = gl_in[1].gl_Position; +#endif + vec4 lb_p = rb_p; + vec4 rt_p = rb_p; + vec4 lt_p = gl_in[0].gl_Position; + +#if GS_POINT == 0 + // flat depth + lt_p.z = rb_p.z; + // flat fog and texture perspective + lt.t.zw = rb.t.zw; + // flat color + lt.c = rb.c; +#endif + + // Swap texture and position coordinate + vertex lb = rb; + lb.t.x = lt.t.x; + lb_p.x = lt_p.x; + + vertex rt = rb; + rt_p.y = lt_p.y; + rt.t.y = lt.t.y; + + + // Triangle 1 + gl_Position = lt_p; + out_vertex(lt); + + gl_Position = lb_p; + out_vertex(lb); + + gl_Position = rt_p; + out_flat(); + out_vertex(rt); + EndPrimitive(); + + // Triangle 2 + gl_Position = lb_p; + out_vertex(lb); + + gl_Position = rt_p; + out_vertex(rt); + + gl_Position = rb_p; + out_flat(); + out_vertex(rb); + EndPrimitive(); +} + +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl_source.h pcsx2-1.4.0/plugins/GSdx/res/glsl_source.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/glsl_source.h 2014-12-07 11:46:16.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/glsl_source.h 2016-01-05 17:28:08.000000000 +0000 @@ -38,7 +38,7 @@ " vec4 gl_Position;\n" " float gl_PointSize;\n" "#if !pGL_ES\n" - " float gl_ClipDistance[];\n" + " float gl_ClipDistance[1];\n" "#endif\n" "};\n" "\n" @@ -83,21 +83,22 @@ "#define PSin_t (PSin.t)\n" "\n" "// Give a different name so I remember there is a special case!\n" - "#ifdef ps_main1\n" + "#if defined(ps_main1) || defined(ps_main10)\n" "layout(location = 0) out uint SV_Target1;\n" "#else\n" "layout(location = 0) out vec4 SV_Target0;\n" "#endif\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" - "#endif\n" + "\n" + "layout(std140, binding = 15) uniform cb15\n" + "{\n" + " ivec4 ScalingFactor;\n" + "};\n" "\n" "vec4 sample_c()\n" "{\n" - " return texture(TextureSampler, PSin_t );\n" + " return texture(TextureSampler, PSin_t);\n" "}\n" "\n" "vec4 ps_crt(uint i)\n" @@ -109,18 +110,7 @@ " vec4(0, 0, 1, 0),\n" " vec4(1, 1, 1, 0)\n" " );\n" - " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" - "}\n" - "\n" - "vec4 ps_scanlines(uint i)\n" - "{\n" - " vec4 mask[2] =\n" - " {\n" - " vec4(1, 1, 1, 0),\n" - " vec4(0, 0, 0, 0)\n" - " };\n" - "\n" - " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" + " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" "}\n" "\n" "#ifdef ps_main0\n" @@ -133,13 +123,206 @@ "#ifdef ps_main1\n" "void ps_main1()\n" "{\n" + " // Input Color is RGBA8\n" + "\n" + " // We want to output a pixel on the PSMCT16* format\n" + " // A1-BGR5\n" + "\n" + "#if 0\n" + " // Note: dot is a good idea from pseudo. However we must be careful about float accuraccy.\n" + " // Here a global idea example:\n" + " //\n" + " // SV_Target1 = dot(round(sample_c() * vec4(31.f, 31.f, 31.f, 1.f)), vec4(1.f, 32.f, 1024.f, 32768.f));\n" + " //\n" + "\n" + " // For me this code is more accurate but it will require some tests\n" + "\n" + " vec4 c = sample_c() * 255.0f + 0.5f; // Denormalize value to avoid float precision issue\n" + "\n" + " // shift Red: -3\n" + " // shift Green: -3 + 5\n" + " // shift Blue: -3 + 10\n" + " // shift Alpha: -7 + 15\n" + " highp uvec4 i = uvec4(c * vec4(1/8.0f, 4.0f, 128.0f, 256.0f)); // Shift value\n" + "\n" + " // bit field operation requires GL4 HW. Could be nice to merge it with step/mix below\n" + " SV_Target1 = (i.r & uint(0x001f)) | (i.g & uint(0x03e0)) | (i.b & uint(0x7c00)) | (i.a & uint(0x8000));\n" + "\n" + "#else\n" + " // Old code which is likely wrong.\n" + "\n" " vec4 c = sample_c();\n" "\n" - " c.a *= 256.0f / 127.0f; // hm, 0.5 won't give us 1.0 if we just multiply with 2\n" + " c.a *= 256.0f / 127.0f; // hm, 0.5 won't give us 1.0 if we just multiply with 2\n" "\n" - " highp uvec4 i = uvec4(c * vec4(uint(0x001f), uint(0x03e0), uint(0x7c00), uint(0x8000)));\n" + " highp uvec4 i = uvec4(c * vec4(uint(0x001f), uint(0x03e0), uint(0x7c00), uint(0x8000)));\n" "\n" + " // bit field operation requires GL4 HW.\n" " SV_Target1 = (i.x & uint(0x001f)) | (i.y & uint(0x03e0)) | (i.z & uint(0x7c00)) | (i.w & uint(0x8000));\n" + "#endif\n" + "\n" + "\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main10\n" + "void ps_main10()\n" + "{\n" + " // Convert a GL_FLOAT32 depth texture into a 32 bits UINT texture\n" + " SV_Target1 = uint(exp2(32.0f) * sample_c().r);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main11\n" + "void ps_main11()\n" + "{\n" + " // Convert a GL_FLOAT32 depth texture into a RGBA color texture\n" + " const vec4 bitSh = vec4(exp2(24.0f), exp2(16.0f), exp2(8.0f), exp2(0.0f));\n" + " const vec4 bitMsk = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);\n" + "\n" + " vec4 res = fract(vec4(sample_c().r) * bitSh);\n" + "\n" + " SV_Target0 = (res - res.xxyz * bitMsk) * 256.0f/255.0f;\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main12\n" + "void ps_main12()\n" + "{\n" + " // Convert a GL_FLOAT32 (only 16 lsb) depth into a RGB5A1 color texture\n" + " const vec4 bitSh = vec4(exp2(32.0f), exp2(27.0f), exp2(22.0f), exp2(17.0f));\n" + " const uvec4 bitMsk = uvec4(0x1F, 0x1F, 0x1F, 0x1);\n" + " uvec4 color = uvec4(vec4(sample_c().r) * bitSh) & bitMsk;\n" + "\n" + " SV_Target0 = vec4(color) / vec4(32.0f, 32.0f, 32.0f, 1.0f);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main13\n" + "void ps_main13()\n" + "{\n" + " // Convert a RRGBA texture into a float depth texture\n" + " // FIXME: I'm afraid of the accuracy\n" + " const vec4 bitSh = vec4(exp2(-32.0f), exp2(-24.0f), exp2(-16.0f), exp(-8.0f)) * vec4(255.0);\n" + " gl_FragDepth = dot(sample_c(), bitSh);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main14\n" + "void ps_main14()\n" + "{\n" + " // Same as above but without the alpha channel (24 bits Z)\n" + "\n" + " // Convert a RRGBA texture into a float depth texture\n" + " // FIXME: I'm afraid of the accuracy\n" + " const vec3 bitSh = vec3(exp2(-32.0f), exp2(-24.0f), exp2(-16.0f)) * vec3(255.0);\n" + " gl_FragDepth = dot(sample_c().rgb, bitSh);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main15\n" + "void ps_main15()\n" + "{\n" + " // Same as above but without the A/B channels (16 bits Z)\n" + "\n" + " // Convert a RRGBA texture into a float depth texture\n" + " // FIXME: I'm afraid of the accuracy\n" + " const vec2 bitSh = vec2(exp2(-32.0f), exp2(-24.0f)) * vec2(255.0);\n" + " gl_FragDepth = dot(sample_c().rg, bitSh);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main16\n" + "void ps_main16()\n" + "{\n" + " // Convert a RGB5A1 (saved as RGBA8) color to a 16 bit Z\n" + " // FIXME: I'm afraid of the accuracy\n" + " const vec4 bitSh = vec4(exp2(-32.0f), exp2(-27.0f), exp2(-22.0f), exp(-17.0f));\n" + " // Trunc color to drop useless lsb\n" + " vec4 color = trunc(sample_c() * vec4(255.0f) / vec4(8.0f, 8.0f, 8.0f, 128.0f));\n" + " gl_FragDepth = dot(vec4(color), bitSh);\n" + "}\n" + "#endif\n" + "\n" + "#ifdef ps_main17\n" + "void ps_main17()\n" + "{\n" + "\n" + " // Potential speed optimization. There is a high probability that\n" + " // game only want to extract a single channel (blue). It will allow\n" + " // to remove most of the conditional operation and yield a +2/3 fps\n" + " // boost on MGS3\n" + " //\n" + " // Hypothesis wrong in Prince of Persia ... Seriously WTF !\n" + " //#define ONLY_BLUE;\n" + "\n" + " // Convert a RGBA texture into a 8 bits packed texture\n" + " // Input column: 8x2 RGBA pixels\n" + " // 0: 8 RGBA\n" + " // 1: 8 RGBA\n" + " // Output column: 16x4 Index pixels\n" + " // 0: 8 R | 8 B\n" + " // 1: 8 R | 8 B\n" + " // 2: 8 G | 8 A\n" + " // 3: 8 G | 8 A\n" + " float c;\n" + "\n" + " uvec2 sel = uvec2(gl_FragCoord.xy) % uvec2(16u, 16u);\n" + " ivec2 tb = ((ivec2(gl_FragCoord.xy) & ~ivec2(15, 3)) >> 1);\n" + "\n" + " int ty = tb.y | (int(gl_FragCoord.y) & 1);\n" + " int txN = tb.x | (int(gl_FragCoord.x) & 7);\n" + " int txH = tb.x | ((int(gl_FragCoord.x) + 4) & 7);\n" + "\n" + " txN *= ScalingFactor.x;\n" + " txH *= ScalingFactor.x;\n" + " ty *= ScalingFactor.y;\n" + "\n" + " // TODO investigate texture gather\n" + " vec4 cN = texelFetch(TextureSampler, ivec2(txN, ty), 0);\n" + " vec4 cH = texelFetch(TextureSampler, ivec2(txH, ty), 0);\n" + "\n" + "\n" + " if ((sel.y & 4u) == 0u) {\n" + " // Column 0 and 2\n" + "#ifdef ONLY_BLUE\n" + " c = cN.b;\n" + "#else\n" + " if ((sel.y & 3u) < 2u) {\n" + " // first 2 lines of the col\n" + " if (sel.x < 8u)\n" + " c = cN.r;\n" + " else\n" + " c = cN.b;\n" + " } else {\n" + " if (sel.x < 8u)\n" + " c = cH.g;\n" + " else\n" + " c = cH.a;\n" + " }\n" + "#endif\n" + " } else {\n" + "#ifdef ONLY_BLUE\n" + " c = cH.b;\n" + "#else\n" + " // Column 1 and 3\n" + " if ((sel.y & 3u) < 2u) {\n" + " // first 2 lines of the col\n" + " if (sel.x < 8u)\n" + " c = cH.r;\n" + " else\n" + " c = cH.b;\n" + " } else {\n" + " if (sel.x < 8u)\n" + " c = cN.g;\n" + " else\n" + " c = cN.a;\n" + " }\n" + "#endif\n" + " }\n" + "\n" + "\n" + " SV_Target0 = vec4(c);\n" "}\n" "#endif\n" "\n" @@ -148,18 +331,29 @@ "{\n" " vec4 c = sample_c();\n" "\n" - " c.a = dot(c.rgb, vec3(0.299, 0.587, 0.114));\n" + " c.a = dot(c.rgb, vec3(0.299, 0.587, 0.114));\n" "\n" " SV_Target0 = c;\n" "}\n" "#endif\n" "\n" "#ifdef ps_main5\n" + "vec4 ps_scanlines(uint i)\n" + "{\n" + " vec4 mask[2] =\n" + " {\n" + " vec4(1, 1, 1, 0),\n" + " vec4(0, 0, 0, 0)\n" + " };\n" + "\n" + " return sample_c() * clamp((mask[i] + 0.5f), 0.0f, 1.0f);\n" + "}\n" + "\n" "void ps_main5() // scanlines\n" "{\n" - " highp uvec4 p = uvec4(PSin_p);\n" + " highp uvec4 p = uvec4(gl_FragCoord);\n" "\n" - " vec4 c = ps_scanlines(p.y % 2u);\n" + " vec4 c = ps_scanlines(p.y % 2u);\n" "\n" " SV_Target0 = c;\n" "}\n" @@ -168,9 +362,9 @@ "#ifdef ps_main6\n" "void ps_main6() // diagonal\n" "{\n" - " highp uvec4 p = uvec4(PSin_p);\n" + " highp uvec4 p = uvec4(gl_FragCoord);\n" "\n" - " vec4 c = ps_crt((p.x + (p.y % 3u)) % 3u);\n" + " vec4 c = ps_crt((p.x + (p.y % 3u)) % 3u);\n" "\n" " SV_Target0 = c;\n" "}\n" @@ -179,9 +373,9 @@ "#ifdef ps_main8\n" "void ps_main8() // triangular\n" "{\n" - " highp uvec4 p = uvec4(PSin_p);\n" + " highp uvec4 p = uvec4(gl_FragCoord);\n" "\n" - " vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u);\n" + " vec4 c = ps_crt(((p.x + ((p.y >> 1u) & 1u) * 3u) >> 1u) % 3u);\n" "\n" " SV_Target0 = c;\n" "}\n" @@ -193,14 +387,14 @@ "\n" " const float PI = 3.14159265359f;\n" "\n" - " vec2 texdim = vec2(textureSize(TextureSampler, 0)); \n" + " vec2 texdim = vec2(textureSize(TextureSampler, 0));\n" "\n" " vec4 c;\n" " if (dFdy(PSin_t.y) * PSin_t.y > 0.5f) {\n" - " c = sample_c(); \n" + " c = sample_c();\n" " } else {\n" " float factor = (0.9f - 0.4f * cos(2.0f * PI * PSin_t.y * texdim.y));\n" - " c = factor * texture(TextureSampler, vec2(PSin_t.x, (floor(PSin_t.y * texdim.y) + 0.5f) / texdim.y));\n" + " c = factor * texture(TextureSampler, vec2(PSin_t.x, (floor(PSin_t.y * texdim.y) + 0.5f) / texdim.y));\n" " }\n" "\n" " SV_Target0 = c;\n" @@ -214,10 +408,6 @@ "{\n" " if(sample_c().a < (127.5f / 255.0f)) // >= 0x80 pass\n" " discard;\n" - "\n" - "#ifdef ENABLE_OGL_STENCIL_DEBUG\n" - " SV_Target0 = vec4(1.0f, 0.0f, 0.0f, 1.0f);\n" - "#endif\n" "}\n" "#endif\n" "\n" @@ -228,21 +418,13 @@ "{\n" " if((127.5f / 255.0f) < sample_c().a) // < 0x80 pass (== 0x80 should not pass)\n" " discard;\n" - "\n" - "#ifdef ENABLE_OGL_STENCIL_DEBUG\n" - " SV_Target0 = vec4(1.0f, 0.0f, 0.0f, 1.0f);\n" - "#endif\n" "}\n" "#endif\n" "\n" "#ifdef ps_main4\n" "void ps_main4()\n" "{\n" - " // FIXME mod and fmod are different when value are negative\n" - " // output.c = fmod(sample_c(input.t) * 255 + 0.5f, 256) / 255;\n" - " vec4 c = mod(sample_c() * 255.0f + 0.5f, 256.0f) / 255.0f;\n" - "\n" - " SV_Target0 = c;\n" + " SV_Target0 = mod(round(sample_c() * 255.0f), 256.0f) / 255.0f;\n" "}\n" "#endif\n" "\n" @@ -277,11 +459,7 @@ " float hH;\n" "};\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" - "#endif\n" "\n" "// TODO ensure that clip (discard) is < 0 and not <= 0 ???\n" "void ps_main0()\n" @@ -350,23 +528,20 @@ " vec4 BGColor;\n" "};\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" - "#endif\n" "\n" "void ps_main0()\n" "{\n" " vec4 c = texture(TextureSampler, PSin_t);\n" - " c.a = min(c.a * 2.0, 1.0);\n" + " // Note: clamping will be done by fixed unit\n" + " c.a *= 2.0f;\n" " SV_Target0 = c;\n" "}\n" "\n" "void ps_main1()\n" "{\n" " vec4 c = texture(TextureSampler, PSin_t);\n" - " c.a = BGColor.a;\n" + " c.a = BGColor.a;\n" " SV_Target0 = c;\n" "}\n" "\n" @@ -380,6 +555,9 @@ "** Contrast, saturation, brightness\n" "** Code of this function is from TGM's shader pack\n" "** http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=21057\n" + "** TGM's author comment about the license (included in the previous link)\n" + "** \"do with it, what you want! its total free!\n" + "** (but would be nice, if you say that you used my shaders :wink: ) but not necessary\"\n" "*/\n" "\n" "struct vertex_basic\n" @@ -406,11 +584,7 @@ " vec4 BGColor;\n" "};\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" - "#endif\n" "\n" "// For all settings: 1.0 = 100% 0.5=50% 1.5 = 150% \n" "vec4 ContrastSaturationBrightness(vec4 color)\n" @@ -448,54 +622,41 @@ "#endif\n" ; -static const char* tfx_glsl = +static const char* tfx_vgs_glsl = "//#version 420 // Keep it for text editor detection\n" "\n" - "// note lerp => mix\n" + "layout(std140, binding = 20) uniform cb20\n" + "{\n" + " vec2 VertexScale;\n" + " vec2 VertexOffset;\n" + " vec2 _removed_TextureScale;\n" + " vec2 PointSize;\n" + "};\n" + "\n" + "// Warning duplicated in both GLSL file\n" + "layout(std140, binding = 21) uniform cb21\n" + "{\n" + " vec3 FogColor;\n" + " float AREF;\n" "\n" - "#define FMT_32 0\n" - "#define FMT_24 1\n" - "#define FMT_16 2\n" - "#define FMT_PAL 4 /* flag bit */\n" + " vec4 WH;\n" "\n" - "// Not sure we have same issue on opengl. Doesn't work anyway on ATI card\n" - "// And I say this as an ATI user.\n" - "#define ATI_SUCKS 0\n" - "\n" - "#ifndef VS_BPPZ\n" - "#define VS_BPPZ 0\n" - "#define VS_TME 1\n" - "#define VS_FST 1\n" - "#define VS_LOGZ 0\n" - "#endif\n" - "\n" - "#ifndef PS_FST\n" - "#define PS_FST 0\n" - "#define PS_WMS 0\n" - "#define PS_WMT 0\n" - "#define PS_FMT FMT_32\n" - "#define PS_AEM 0\n" - "#define PS_TFX 0\n" - "#define PS_TCC 1\n" - "#define PS_ATST 1\n" - "#define PS_FOG 0\n" - "#define PS_CLR1 0\n" - "#define PS_FBA 0\n" - "#define PS_AOUT 0\n" - "#define PS_LTF 1\n" - "#define PS_COLCLIP 0\n" - "#define PS_DATE 0\n" - "#define PS_SPRITEHACK 0\n" - "#define PS_POINT_SAMPLER 0\n" - "#define PS_TCOFFSETHACK 0\n" - "#define PS_IIP 1\n" - "#endif\n" + " vec2 _pad0;\n" + " vec2 TA;\n" "\n" - "struct vertex\n" - "{\n" - " vec4 t;\n" - " vec4 c;\n" - " vec4 fc;\n" + " uvec4 MskFix;\n" + "\n" + " uvec4 FbMask;\n" + "\n" + " vec3 _pad1;\n" + " float Af;\n" + "\n" + " vec4 HalfTexel;\n" + "\n" + " vec4 MinMax;\n" + "\n" + " vec2 TextureScale;\n" + " vec2 TC_OffsetHack;\n" "};\n" "\n" "#ifdef VERTEX_SHADER\n" @@ -511,7 +672,7 @@ "{\n" " vec4 t;\n" " vec4 c;\n" - " flat vec4 fc;\n" + " flat vec4 fc;\n" "} VSout;\n" "\n" "#define VSout_t (VSout.t)\n" @@ -519,63 +680,30 @@ "#define VSout_fc (VSout.fc)\n" "\n" "out gl_PerVertex {\n" - " invariant vec4 gl_Position;\n" + " vec4 gl_Position;\n" " float gl_PointSize;\n" "#if !pGL_ES\n" - " float gl_ClipDistance[];\n" + " float gl_ClipDistance[1];\n" "#endif\n" "};\n" "\n" - "layout(std140, binding = 20) uniform cb20\n" - "{\n" - " vec2 VertexScale;\n" - " vec2 VertexOffset;\n" - " vec2 TextureScale;\n" - "};\n" - "\n" "#ifdef ZERO_TO_ONE_DEPTH\n" "const float exp_min32 = exp2(-32.0f);\n" "#else\n" "const float exp_min31 = exp2(-31.0f);\n" "#endif\n" "\n" - "#ifdef SUBROUTINE_GL40\n" - "// Function pointer type\n" - "subroutine void TextureCoordType(void);\n" - "\n" - "// a function pointer variable\n" - "layout(location = 0) subroutine uniform TextureCoordType texture_coord;\n" - "\n" - "layout(index = 0) subroutine(TextureCoordType)\n" - "void tme_0()\n" - "{\n" - " VSout_t.xy = vec2(0.0f, 0.0f);\n" - " VSout_t.w = 1.0f;\n" - "}\n" - "\n" - "layout(index = 1) subroutine(TextureCoordType)\n" - "void tme_1_fst_0()\n" - "{\n" - " VSout_t.xy = i_st;\n" - " VSout_t.w = i_q;\n" - "}\n" - "\n" - "layout(index = 2) subroutine(TextureCoordType)\n" - "void tme_1_fst_1()\n" - "{\n" - " VSout_t.xy = vec2(i_uv) * TextureScale;\n" - " VSout_t.w = 1.0f;\n" - "}\n" - "\n" - "#else\n" - "\n" "void texture_coord()\n" "{\n" " if(VS_TME != 0)\n" " {\n" " if(VS_FST != 0)\n" " {\n" - " VSout_t.xy = vec2(i_uv) * TextureScale;\n" + " if (VS_WILDHACK == 1) {\n" + " VSout_t.xy = vec2(i_uv & uvec2(0x3FEF, 0x3FEF)) * TextureScale;\n" + " } else {\n" + " VSout_t.xy = vec2(i_uv) * TextureScale;\n" + " }\n" " VSout_t.w = 1.0f;\n" " }\n" " else\n" @@ -591,8 +719,6 @@ " }\n" "}\n" "\n" - "#endif\n" - "\n" "void vs_main()\n" "{\n" " highp uint z;\n" @@ -614,13 +740,13 @@ " p.w = 1.0f;\n" "#ifdef ZERO_TO_ONE_DEPTH\n" " if(VS_LOGZ == 1) {\n" - " p.z = log2(float(1u+z)) / 32.0f;\n" + " p.z = max(0.0f, log2(float(z))) / 32.0f;\n" " } else {\n" " p.z = float(z) * exp_min32;\n" " }\n" "#else\n" " if(VS_LOGZ == 1) {\n" - " p.z = log2(float(1u+z)) / 31.0f - 1.0f;\n" + " p.z = max(0.0f, log2(float(z))) / 31.0f - 1.0f;\n" " } else {\n" " p.z = float(z) * exp_min31 - 1.0f;\n" " }\n" @@ -631,18 +757,19 @@ " texture_coord();\n" "\n" " VSout_c = i_c;\n" - " VSout_fc = i_c;\n" - " VSout_t.z = i_f.r;\n" + " VSout_fc = i_c;\n" + " VSout_t.z = i_f.x;\n" "}\n" "\n" "#endif\n" "\n" "#ifdef GEOMETRY_SHADER\n" + "\n" "in gl_PerVertex {\n" - " invariant vec4 gl_Position;\n" + " vec4 gl_Position;\n" " float gl_PointSize;\n" "#if !pGL_ES\n" - " float gl_ClipDistance[];\n" + " float gl_ClipDistance[1];\n" "#endif\n" "} gl_in[];\n" "//in int gl_PrimitiveIDIn;\n" @@ -651,7 +778,7 @@ " vec4 gl_Position;\n" " float gl_PointSize;\n" "#if !pGL_ES\n" - " float gl_ClipDistance[];\n" + " float gl_ClipDistance[1];\n" "#endif\n" "};\n" "//out int gl_PrimitiveID;\n" @@ -670,46 +797,82 @@ " flat vec4 fc;\n" "} GSout;\n" "\n" + "layout(std140, binding = 22) uniform cb22\n" + "{\n" + " vec4 rt_size;\n" + "};\n" + "\n" + "\n" + "struct vertex\n" + "{\n" + " vec4 t;\n" + " vec4 c;\n" + "};\n" + "\n" "void out_vertex(in vertex v)\n" "{\n" " GSout.t = v.t;\n" " GSout.c = v.c;\n" - " GSout.fc = v.fc;\n" " gl_PrimitiveID = gl_PrimitiveIDIn;\n" " EmitVertex();\n" "}\n" "\n" + "void out_flat()\n" + "{\n" + " // Flat output\n" + "#if GS_POINT == 1\n" + " GSout.fc = GSin[0].fc;\n" + "#else\n" + " GSout.fc = GSin[1].fc;\n" + "#endif\n" + "}\n" + "\n" + "#if GS_POINT == 1\n" + "layout(points) in;\n" + "#else\n" "layout(lines) in;\n" + "#endif\n" "layout(triangle_strip, max_vertices = 6) out;\n" "\n" "void gs_main()\n" "{\n" " // left top => GSin[0];\n" " // right bottom => GSin[1];\n" - " vertex rb = vertex(GSin[1].t, GSin[1].c, GSin[1].fc);\n" - " vertex lt = vertex(GSin[0].t, GSin[0].c, GSin[0].fc);\n" + "#if GS_POINT == 1\n" + " vertex rb = vertex(GSin[0].t, GSin[0].c);\n" + "#else\n" + " vertex rb = vertex(GSin[1].t, GSin[1].c);\n" + "#endif\n" + " vertex lt = vertex(GSin[0].t, GSin[0].c);\n" "\n" + "#if GS_POINT == 1\n" + " vec4 rb_p = gl_in[0].gl_Position + vec4(PointSize.x, PointSize.y, 0.0f, 0.0f);\n" + "#else\n" " vec4 rb_p = gl_in[1].gl_Position;\n" - " vec4 lb_p = gl_in[1].gl_Position;\n" - " vec4 rt_p = gl_in[1].gl_Position;\n" + "#endif\n" + " vec4 lb_p = rb_p;\n" + " vec4 rt_p = rb_p;\n" " vec4 lt_p = gl_in[0].gl_Position;\n" "\n" + "#if GS_POINT == 0\n" " // flat depth\n" " lt_p.z = rb_p.z;\n" " // flat fog and texture perspective\n" " lt.t.zw = rb.t.zw;\n" " // flat color\n" " lt.c = rb.c;\n" + "#endif\n" "\n" - " // Swap texture and position coordinate\n" + " // Swap texture and position coordinate\n" " vertex lb = rb;\n" - " lb_p.x = lt_p.x;\n" " lb.t.x = lt.t.x;\n" + " lb_p.x = lt_p.x;\n" "\n" " vertex rt = rb;\n" " rt_p.y = lt_p.y;\n" " rt.t.y = lt.t.y;\n" "\n" + "\n" " // Triangle 1\n" " gl_Position = lt_p;\n" " out_vertex(lt);\n" @@ -718,8 +881,8 @@ " out_vertex(lb);\n" "\n" " gl_Position = rt_p;\n" + " out_flat();\n" " out_vertex(rt);\n" - "\n" " EndPrimitive();\n" "\n" " // Triangle 2\n" @@ -730,12 +893,40 @@ " out_vertex(rt);\n" "\n" " gl_Position = rb_p;\n" + " out_flat();\n" " out_vertex(rb);\n" - "\n" " EndPrimitive();\n" "}\n" "\n" "#endif\n" + ; + +static const char* tfx_fs_all_glsl = + "//#version 420 // Keep it for text editor detection\n" + "\n" + "// Require for bit operation\n" + "//#extension GL_ARB_gpu_shader5 : enable\n" + "\n" + "#define FMT_32 0\n" + "#define FMT_24 1\n" + "#define FMT_16 2\n" + "\n" + "#define PS_PAL_FMT (PS_TEX_FMT >> 2)\n" + "#define PS_AEM_FMT (PS_TEX_FMT & 3)\n" + "\n" + "// APITRACE_DEBUG enables forced pixel output to easily detect\n" + "// the fragment computed by primitive\n" + "#define APITRACE_DEBUG 0\n" + "// TEX_COORD_DEBUG output the uv coordinate as color. It is useful\n" + "// to detect bad sampling due to upscaling\n" + "//#define TEX_COORD_DEBUG\n" + "// Just copy directly the texture coordinate\n" + "#ifdef TEX_COORD_DEBUG\n" + "#define PS_TFX 1\n" + "#define PS_TCC 1\n" + "#endif\n" + "\n" + "#define SW_BLEND (PS_BLEND_A || PS_BLEND_B || PS_BLEND_D)\n" "\n" "#ifdef FRAGMENT_SHADER\n" "\n" @@ -751,263 +942,119 @@ "#define PSin_fc (PSin.fc)\n" "\n" "// Same buffer but 2 colors for dual source blending\n" - "#if pGL_ES\n" - "layout(location = 0) out vec4 SV_Target0;\n" - "#else\n" "layout(location = 0, index = 0) out vec4 SV_Target0;\n" "layout(location = 0, index = 1) out vec4 SV_Target1;\n" - "#endif\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "layout(bindless_sampler, location = 1) uniform sampler2D PaletteSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" "layout(binding = 1) uniform sampler2D PaletteSampler;\n" - "#endif\n" + "layout(binding = 3) uniform sampler2D RtSampler; // note 2 already use by the image below\n" "\n" "#ifndef DISABLE_GL42_image\n" "#if PS_DATE > 0\n" "// FIXME how to declare memory access\n" - "layout(r32i, binding = 2) coherent uniform iimage2D img_prim_min;\n" + "layout(r32i, binding = 2) uniform iimage2D img_prim_min;\n" + "// WARNING:\n" + "// You can't enable it if you discard the fragment. The depth is still\n" + "// updated (shadow in Shin Megami Tensei Nocturne)\n" + "//\n" + "// early_fragment_tests must still be enabled in the first pass of the 2 passes algo\n" + "// First pass search the first primitive that will write the bad alpha value. Value\n" + "// won't be written if the fragment fails the depth test.\n" + "// \n" + "// In theory the best solution will be do \n" + "// 1/ copy the depth buffer\n" + "// 2/ do the full depth (current depth writes are disabled)\n" + "// 3/ restore the depth buffer for 2nd pass\n" + "// Of course, it is likely too costly.\n" + "#if PS_DATE == 1 || PS_DATE == 2\n" + "layout(early_fragment_tests) in;\n" + "#endif\n" + "\n" + "// I don't remember why I set this parameter but it is surely useless\n" + "//layout(pixel_center_integer) in vec4 gl_FragCoord;\n" "#endif\n" "#else\n" "// use basic stencil\n" "#endif\n" "\n" - "#ifndef DISABLE_GL42_image\n" - "#if PS_DATE > 0\n" - "// origin_upper_left\n" - "layout(pixel_center_integer) in vec4 gl_FragCoord;\n" - "//in int gl_PrimitiveID;\n" - "#endif\n" - "#endif\n" "\n" + "// Warning duplicated in both GLSL file\n" "layout(std140, binding = 21) uniform cb21\n" "{\n" " vec3 FogColor;\n" " float AREF;\n" + "\n" " vec4 WH;\n" - " vec2 MinF;\n" + "\n" + " vec2 _pad0;\n" " vec2 TA;\n" + "\n" " uvec4 MskFix;\n" + "\n" + " uvec4 FbMask;\n" + "\n" + " vec3 _pad1;\n" + " float Af;\n" + "\n" " vec4 HalfTexel;\n" + "\n" " vec4 MinMax;\n" - " vec4 TC_OffsetHack;\n" + "\n" + " vec2 TextureScale;\n" + " vec2 TC_OffsetHack;\n" "};\n" "\n" "vec4 sample_c(vec2 uv)\n" "{\n" - " // FIXME: check the issue on openGL\n" - " if (ATI_SUCKS == 1 && PS_POINT_SAMPLER == 1)\n" - " {\n" - " // Weird issue with ATI cards (happens on at least HD 4xxx and 5xxx),\n" - " // it looks like they add 127/128 of a texel to sampling coordinates\n" - " // occasionally causing point sampling to erroneously round up.\n" - " // I'm manually adjusting coordinates to the centre of texels here,\n" - " // though the centre is just paranoia, the top left corner works fine.\n" - " uv = (trunc(uv * WH.zw) + vec2(0.5, 0.5)) / WH.zw;\n" - " }\n" - "\n" " return texture(TextureSampler, uv);\n" "}\n" "\n" - "vec4 sample_p(float u)\n" + "vec4 sample_p(float idx)\n" "{\n" - " //FIXME do we need a 1D sampler. Big impact on opengl to find 1 dim\n" - " // So for the moment cheat with 0.0f dunno if it work\n" - " return texture(PaletteSampler, vec2(u, 0.0f));\n" + " return texture(PaletteSampler, vec2(idx, 0.0f));\n" "}\n" "\n" - "#if 0\n" - "vec4 sample_rt(vec2 uv)\n" + "vec4 clamp_wrap_uv(vec4 uv)\n" "{\n" - " return texture(RTCopySampler, uv);\n" - "}\n" - "#endif\n" - "\n" - "// FIXME crash nvidia\n" - "#if 0\n" - "// Function pointer type\n" - "subroutine vec4 WrapType(vec4 uv);\n" + " vec4 uv_out = uv;\n" "\n" - "// a function pointer variable\n" - "layout(location = 4) subroutine uniform WrapType wrapuv;\n" + "#if PS_WMS == PS_WMT\n" "\n" - "layout(index = 24) subroutine(WrapType)\n" - "vec4 wrapuv_wms_wmt_2(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" + "#if PS_WMS == 2\n" " uv_out = clamp(uv, MinMax.xyxy, MinMax.zwzw);\n" - " return uv_out;\n" - "}\n" - "\n" - "layout(index = 25) subroutine(WrapType)\n" - "vec4 wrapuv_wms_wmt3(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" + "#elif PS_WMS == 3\n" " uv_out = vec4((ivec4(uv * WH.xyxy) & ivec4(MskFix.xyxy)) | ivec4(MskFix.zwzw)) / WH.xyxy;\n" - " return uv_out;\n" - "}\n" + "#endif\n" "\n" - "layout(index = 26) subroutine(WrapType)\n" - "vec4 wrapuv_wms2_wmt3(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" + "#else // PS_WMS != PS_WMT\n" + "\n" + "#if PS_WMS == 2\n" " uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz);\n" - " uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy;\n" - " return uv_out;\n" - "}\n" "\n" - "layout(index = 27) subroutine(WrapType)\n" - "vec4 wrapuv_wms3_wmt2(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" + "#elif PS_WMS == 3\n" " uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx;\n" + "\n" + "#endif\n" + "\n" + "#if PS_WMT == 2\n" " uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww);\n" - " return uv_out;\n" - "}\n" "\n" - "layout(index = 28) subroutine(WrapType)\n" - "vec4 wrapuv_wms2_wmtx(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" - " uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz);\n" - " return uv_out;\n" - "}\n" + "#elif PS_WMT == 3\n" "\n" - "layout(index = 29) subroutine(WrapType)\n" - "vec4 wrapuv_wmsx_wmt3(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" " uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy;\n" + "#endif\n" + "\n" + "#endif\n" + "\n" " return uv_out;\n" "}\n" "\n" - "layout(index = 30) subroutine(WrapType)\n" - "vec4 wrapuv_wms3_wmtx(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" - " uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx;\n" - " return uv_out;\n" - "}\n" - "\n" - "layout(index = 31) subroutine(WrapType)\n" - "vec4 wrapuv_wmsx_wmt2(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" - " uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww);\n" - " return uv_out;\n" - "}\n" - "\n" - "layout(index = 32) subroutine(WrapType)\n" - "vec4 wrapuv_dummy(vec4 uv)\n" - "{\n" - " return uv;\n" - "}\n" - "\n" - "#else\n" - "vec4 wrapuv(vec4 uv)\n" - "{\n" - " vec4 uv_out = uv;\n" - "\n" - " if(PS_WMS == PS_WMT)\n" - " {\n" - " if(PS_WMS == 2)\n" - " {\n" - " uv_out = clamp(uv, MinMax.xyxy, MinMax.zwzw);\n" - " }\n" - " else if(PS_WMS == 3)\n" - " {\n" - " uv_out = vec4((ivec4(uv * WH.xyxy) & ivec4(MskFix.xyxy)) | ivec4(MskFix.zwzw)) / WH.xyxy;\n" - " }\n" - " }\n" - " else\n" - " {\n" - " if(PS_WMS == 2)\n" - " {\n" - " uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz);\n" - " }\n" - " else if(PS_WMS == 3)\n" - " {\n" - " uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx;\n" - " }\n" - " if(PS_WMT == 2)\n" - " {\n" - " uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww);\n" - " }\n" - " else if(PS_WMT == 3)\n" - " {\n" - " uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy;\n" - " }\n" - " }\n" - "\n" - " return uv_out;\n" - "}\n" - "#endif\n" - "\n" - "// FIXME crash nvidia\n" - "#if 0\n" - "// Function pointer type\n" - "subroutine vec2 ClampType(vec2 uv);\n" - "\n" - "// a function pointer variable\n" - "layout(location = 3) subroutine uniform ClampType clampuv;\n" - "\n" - "layout(index = 20) subroutine(ClampType)\n" - "vec2 clampuv_wms2_wmt2(vec2 uv)\n" - "{\n" - " return clamp(uv, MinF, MinMax.zw);\n" - "}\n" - "\n" - "layout(index = 21) subroutine(ClampType)\n" - "vec2 clampuv_wms2(vec2 uv)\n" - "{\n" - " vec2 uv_out = uv;\n" - " uv_out.x = clamp(uv.x, MinF.x, MinMax.z);\n" - " return uv_out;\n" - "}\n" - "\n" - "layout(index = 22) subroutine(ClampType)\n" - "vec2 clampuv_wmt2(vec2 uv)\n" - "{\n" - " vec2 uv_out = uv;\n" - " uv_out.y = clamp(uv.y, MinF.y, MinMax.w);\n" - " return uv_out;\n" - "}\n" - "\n" - "layout(index = 23) subroutine(ClampType)\n" - "vec2 clampuv_dummy(vec2 uv)\n" - "{\n" - " return uv;\n" - "}\n" - "\n" - "#else\n" - "vec2 clampuv(vec2 uv)\n" - "{\n" - " vec2 uv_out = uv;\n" - "\n" - " if(PS_WMS == 2 && PS_WMT == 2) \n" - " {\n" - " uv_out = clamp(uv, MinF, MinMax.zw);\n" - " }\n" - " else if(PS_WMS == 2)\n" - " {\n" - " uv_out.x = clamp(uv.x, MinF.x, MinMax.z);\n" - " }\n" - " else if(PS_WMT == 2)\n" - " {\n" - " uv_out.y = clamp(uv.y, MinF.y, MinMax.w);\n" - " }\n" - "\n" - " return uv_out;\n" - "}\n" - "#endif\n" - "\n" - "mat4 sample_4c(vec4 uv)\n" + "mat4 sample_4c(vec4 uv)\n" "{\n" " mat4 c;\n" "\n" + " // Note: texture gather can't be used because of special clamping/wrapping\n" + " // Also it doesn't support lod\n" " c[0] = sample_c(uv.xy);\n" " c[1] = sample_c(uv.zy);\n" " c[2] = sample_c(uv.xw);\n" @@ -1016,18 +1063,39 @@ " return c;\n" "}\n" "\n" - "vec4 sample_4a(vec4 uv)\n" + "vec4 sample_4_index(vec4 uv)\n" "{\n" " vec4 c;\n" "\n" - " // Dx used the alpha channel.\n" - " // Opengl is only 8 bits on red channel.\n" - " c.x = sample_c(uv.xy).r;\n" - " c.y = sample_c(uv.zy).r;\n" - " c.z = sample_c(uv.xw).r;\n" - " c.w = sample_c(uv.zw).r;\n" + " // Either GSdx will send a texture that contains a single channel\n" + " // in this case the red channel is remapped as alpha channel\n" + " //\n" + " // Or we have an old RT (ie RGBA8) that contains index (4/8) in the alpha channel\n" + "\n" + " // Note: texture gather can't be used because of special clamping/wrapping\n" + " // Also it doesn't support lod\n" + " c.x = sample_c(uv.xy).a;\n" + " c.y = sample_c(uv.zy).a;\n" + " c.z = sample_c(uv.xw).a;\n" + " c.w = sample_c(uv.zw).a;\n" + "\n" + " uvec4 i = uvec4(c * 255.0f + 0.5f); // Denormalize value\n" + "\n" + "#if PS_PAL_FMT == 1\n" + " // 4HL\n" + " return vec4(i & 0xFu) / 255.0f;\n" + "\n" + "#elif PS_PAL_FMT == 2\n" + " // 4HH\n" + " return vec4(i >> 4u) / 255.0f;\n" + "\n" + "#else\n" + " // Most of texture will hit this code so keep normalized float value\n" + "\n" + " // 8 bits\n" + " return c;\n" + "#endif\n" "\n" - " return c * 255.0/256.0 + 0.5/256.0;\n" "}\n" "\n" "mat4 sample_4p(vec4 u)\n" @@ -1044,481 +1112,409 @@ "\n" "vec4 sample_color(vec2 st, float q)\n" "{\n" - " if(PS_FST == 0) st /= q;\n" + " //FIXME: maybe we can set gl_Position.w = q in VS\n" + "#if (PS_FST == 0)\n" + " st /= q;\n" + "#endif\n" "\n" - " if(PS_TCOFFSETHACK == 1) st += TC_OffsetHack.xy;\n" + "#if (PS_TCOFFSETHACK == 1)\n" + " st += TC_OffsetHack.xy;\n" + "#endif\n" "\n" " vec4 t;\n" " mat4 c;\n" " vec2 dd;\n" "\n" - " if (PS_LTF == 0 && PS_FMT <= FMT_16 && PS_WMS < 3 && PS_WMT < 3)\n" - " {\n" - " c[0] = sample_c(clampuv(st));\n" - " }\n" - " else\n" - " {\n" - " vec4 uv;\n" - "\n" - " if(PS_LTF != 0)\n" - " {\n" - " uv = st.xyxy + HalfTexel;\n" - " dd = fract(uv.xy * WH.zw);\n" - " }\n" - " else\n" - " {\n" - " uv = st.xyxy;\n" - " }\n" - "\n" - " uv = wrapuv(uv);\n" - "\n" - " if((PS_FMT & FMT_PAL) != 0)\n" - " {\n" - " c = sample_4p(sample_4a(uv));\n" - " }\n" - " else\n" - " {\n" - " c = sample_4c(uv);\n" - " }\n" - " }\n" + " // FIXME I'm not sure this condition is useful (I think code will be optimized)\n" + "#if (PS_LTF == 0 && PS_AEM_FMT == FMT_32 && PS_PAL_FMT == 0 && PS_WMS < 2 && PS_WMT < 2)\n" + " // No software LTF and pure 32 bits RGBA texure without special texture wrapping\n" + " c[0] = sample_c(st);\n" + "#ifdef TEX_COORD_DEBUG\n" + " c[0].rg = st.xy;\n" + "#endif\n" "\n" - " // PERF: see the impact of the exansion before/after the interpolation\n" - " for (int i = 0; i < 4; i++)\n" - " {\n" - " if((PS_FMT & ~FMT_PAL) == FMT_24)\n" - " {\n" - " // FIXME GLSL any only support bvec so try to mix it with notEqual\n" - " bvec3 rgb_check = notEqual( c[i].rgb, vec3(0.0f, 0.0f, 0.0f) );\n" - " c[i].a = ( (PS_AEM == 0) || any(rgb_check) ) ? TA.x : 0.0f;\n" - " }\n" - " else if((PS_FMT & ~FMT_PAL) == FMT_16)\n" - " {\n" - " // FIXME GLSL any only support bvec so try to mix it with notEqual\n" - " bvec3 rgb_check = notEqual( c[i].rgb, vec3(0.0f, 0.0f, 0.0f) );\n" - " c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(rgb_check) ) ? TA.x : 0.0f;\n" - " }\n" - " }\n" + "#else\n" + " vec4 uv;\n" "\n" " if(PS_LTF != 0)\n" " {\n" - " t = mix(mix(c[0], c[1], dd.x), mix(c[2], c[3], dd.x), dd.y);\n" + " uv = st.xyxy + HalfTexel;\n" + " dd = fract(uv.xy * WH.zw);\n" + "#if (PS_FST == 0)\n" + " // Background in Shin Megami Tensei Lucifers\n" + " // I suspect that uv isn't a standard number, so fract is outside of the [0;1] range\n" + " // Note: it is free on GPU but let's do it only for float coordinate\n" + " // Strangely Dx doesn't suffer from this issue.\n" + " dd = clamp(dd, vec2(0.0f), vec2(1.0f));\n" + "#endif\n" " }\n" " else\n" " {\n" - " t = c[0];\n" + " uv = st.xyxy;\n" " }\n" "\n" - " return t;\n" - "}\n" - "\n" - "#ifdef SUBROUTINE_GL40\n" - "// Function pointer type\n" - "subroutine vec4 TfxType(vec4 t, vec4 c);\n" - "\n" - "// a function pointer variable\n" - "layout(location = 2) subroutine uniform TfxType tfx;\n" - "\n" - "layout(index = 11) subroutine(TfxType)\n" - "vec4 tfx_0_tcc_0(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 12) subroutine(TfxType)\n" - "vec4 tfx_1_tcc_0(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = t.rgb;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 13) subroutine(TfxType)\n" - "vec4 tfx_2_tcc_0(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 14) subroutine(TfxType)\n" - "vec4 tfx_3_tcc_0(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 15) subroutine(TfxType)\n" - "vec4 tfx_0_tcc_1(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out = c * t * 255.0f / 128.0f;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 16) subroutine(TfxType)\n" - "vec4 tfx_1_tcc_1(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out = t;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 17) subroutine(TfxType)\n" - "vec4 tfx_2_tcc_1(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - " c_out.a += t.a;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 18) subroutine(TfxType)\n" - "vec4 tfx_3_tcc_1(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - " c_out.a = t.a;\n" - " return c_out;\n" - "}\n" - "\n" - "layout(index = 19) subroutine(TfxType)\n" - "vec4 tfx_dummy(vec4 t, vec4 c)\n" - "{\n" - " return c;\n" - "}\n" + " uv = clamp_wrap_uv(uv);\n" "\n" + "#if PS_PAL_FMT != 0\n" + " c = sample_4p(sample_4_index(uv));\n" "#else\n" - "vec4 tfx(vec4 t, vec4 c)\n" - "{\n" - " vec4 c_out = c;\n" - " if(PS_TFX == 0)\n" - " {\n" - " if(PS_TCC != 0) \n" - " {\n" - " c_out = c * t * 255.0f / 128.0f;\n" - " }\n" - " else\n" - " {\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f;\n" - " }\n" - " }\n" - " else if(PS_TFX == 1)\n" - " {\n" - " if(PS_TCC != 0) \n" - " {\n" - " c_out = t;\n" - " }\n" - " else\n" - " {\n" - " c_out.rgb = t.rgb;\n" - " }\n" - " }\n" - " else if(PS_TFX == 2)\n" - " {\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - "\n" - " if(PS_TCC != 0) \n" - " {\n" - " c_out.a += t.a;\n" - " }\n" - " }\n" - " else if(PS_TFX == 3)\n" - " {\n" - " c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a;\n" - "\n" - " if(PS_TCC != 0) \n" - " {\n" - " c_out.a = t.a;\n" - " }\n" - " }\n" - "\n" - " return c_out;\n" - "}\n" + " c = sample_4c(uv);\n" "#endif\n" "\n" + "#ifdef TEX_COORD_DEBUG\n" + " c[0].rg = uv.xy;\n" + " c[1].rg = uv.xy;\n" + " c[2].rg = uv.xy;\n" + " c[3].rg = uv.xy;\n" + "#endif\n" "\n" - "#if 0\n" - "void datst()\n" - "{\n" - "#if PS_DATE > 0\n" - " float alpha = sample_rt(PSin_tp.xy).a;\n" - " float alpha0x80 = 128.0 / 255;\n" + "#endif\n" "\n" - " if (PS_DATE == 1 && alpha >= alpha0x80)\n" - " discard;\n" - " else if (PS_DATE == 2 && alpha < alpha0x80)\n" - " discard;\n" + " // PERF note: using dot product reduces by 1 the number of instruction\n" + " // but I'm not sure it is equivalent neither faster.\n" + " for (int i = 0; i < 4; i++)\n" + " {\n" + " //float sum = dot(c[i].rgb, vec3(1.0f));\n" + "#if (PS_AEM_FMT == FMT_24)\n" + " c[i].a = ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f;\n" + " //c[i].a = ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f;\n" + "#elif (PS_AEM_FMT == FMT_16)\n" + " c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(bvec3(c[i].rgb)) ) ? TA.x : 0.0f;\n" + " //c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || (sum > 0.0f) ) ? TA.x : 0.0f;\n" "#endif\n" - "}\n" + " }\n" + "\n" + "#if(PS_LTF != 0)\n" + " t = mix(mix(c[0], c[1], dd.x), mix(c[2], c[3], dd.x), dd.y);\n" + "#else\n" + " t = c[0];\n" "#endif\n" "\n" - "#ifdef SUBROUTINE_GL40\n" - "// Function pointer type\n" - "subroutine void AlphaTestType(vec4 c);\n" + " // The 0.05f helps to fix the overbloom of sotc\n" + " // I think the issue is related to the rounding of texture coodinate. The linear (from fixed unit)\n" + " // interpolation could be slightly below the correct one.\n" + " return trunc(t * 255.0f + 0.05f);\n" + "}\n" + "\n" + "vec4 tfx(vec4 T, vec4 C)\n" + "{\n" + " vec4 C_out;\n" + " vec4 FxT = trunc(trunc(C) * T / 128.0f);\n" + "\n" + "#if (PS_TFX == 0)\n" + " C_out = FxT;\n" + "#elif (PS_TFX == 1)\n" + " C_out = T;\n" + "#elif (PS_TFX == 2)\n" + " C_out.rgb = FxT.rgb + C.a;\n" + " C_out.a = T.a + C.a;\n" + "#elif (PS_TFX == 3)\n" + " C_out.rgb = FxT.rgb + C.a;\n" + " C_out.a = T.a;\n" + "#else\n" + " C_out = C;\n" + "#endif\n" "\n" - "// a function pointer variable\n" - "layout(location = 0) subroutine uniform AlphaTestType atst;\n" + "#if (PS_TCC == 0)\n" + " C_out.a = C.a;\n" + "#endif\n" "\n" - "layout(index = 0) subroutine(AlphaTestType)\n" - "void atest_never(vec4 c)\n" - "{\n" - " discard;\n" - "}\n" + "#if (PS_TFX == 0) || (PS_TFX == 2) || (PS_TFX == 3)\n" + " // Clamp only when it is useful\n" + " C_out = min(C_out, 255.0f);\n" + "#endif\n" "\n" - "layout(index = 1) subroutine(AlphaTestType)\n" - "void atest_always(vec4 c)\n" - "{\n" - " // Nothing to do\n" + " return C_out;\n" "}\n" "\n" - "layout(index = 2) subroutine(AlphaTestType)\n" - "void atest_l(vec4 c)\n" + "void atst(vec4 C)\n" "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" - " if (PS_SPRITEHACK == 0)\n" - " if ((AREF - a - 0.5f) < 0.0f)\n" - " discard;\n" - "}\n" + " // FIXME use integer cmp\n" + " float a = C.a;\n" "\n" - "layout(index = 3) subroutine(AlphaTestType)\n" - "void atest_le(vec4 c)\n" - "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" + "#if (PS_ATST == 0) // never\n" + " discard;\n" + "#elif (PS_ATST == 1) // always\n" + " // nothing to do\n" + "#elif (PS_ATST == 2) // l\n" + " if ((AREF - a - 0.5f) < 0.0f)\n" + " discard;\n" + "#elif (PS_ATST == 3 ) // le\n" " if ((AREF - a + 0.5f) < 0.0f)\n" " discard;\n" - "}\n" - "\n" - "layout(index = 4) subroutine(AlphaTestType)\n" - "void atest_e(vec4 c)\n" - "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" + "#elif (PS_ATST == 4) // e\n" " if ((0.5f - abs(a - AREF)) < 0.0f)\n" " discard;\n" - "}\n" - "\n" - "layout(index = 5) subroutine(AlphaTestType)\n" - "void atest_ge(vec4 c)\n" - "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" + "#elif (PS_ATST == 5) // ge\n" " if ((a-AREF + 0.5f) < 0.0f)\n" " discard;\n" - "}\n" - "\n" - "layout(index = 6) subroutine(AlphaTestType)\n" - "void atest_g(vec4 c)\n" - "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" + "#elif (PS_ATST == 6) // g\n" " if ((a-AREF - 0.5f) < 0.0f)\n" " discard;\n" + "#elif (PS_ATST == 7) // ne\n" + " if ((abs(a - AREF) - 0.5f) < 0.0f)\n" + " discard;\n" + "#endif\n" "}\n" "\n" - "layout(index = 7) subroutine(AlphaTestType)\n" - "void atest_ne(vec4 c)\n" + "void fog(inout vec4 C, float f)\n" "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" - " if ((abs(a - AREF) - 0.5f) < 0.0f)\n" - " discard;\n" + "#if PS_FOG != 0\n" + " C.rgb = trunc(mix(FogColor, C.rgb, f));\n" + "#endif\n" "}\n" "\n" - "#else\n" - "void atst(vec4 c)\n" + "vec4 ps_color()\n" "{\n" - " float a = trunc(c.a * 255.0 + 0.01);\n" + " vec4 T = sample_color(PSin_t.xy, PSin_t.w);\n" "\n" - " if(PS_ATST == 0) // never\n" - " {\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 1) // always\n" - " {\n" - " // nothing to do\n" - " }\n" - " else if(PS_ATST == 2 ) // l\n" - " {\n" - " if (PS_SPRITEHACK == 0)\n" - " if ((AREF - a - 0.5f) < 0.0f)\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 3 ) // le\n" - " {\n" - " if ((AREF - a + 0.5f) < 0.0f)\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 4) // e\n" - " {\n" - " if ((0.5f - abs(a - AREF)) < 0.0f)\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 5) // ge\n" - " {\n" - " if ((a-AREF + 0.5f) < 0.0f)\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 6) // g\n" - " {\n" - " if ((a-AREF - 0.5f) < 0.0f)\n" - " discard;\n" - " }\n" - " else if(PS_ATST == 7) // ne\n" - " {\n" - " if ((abs(a - AREF) - 0.5f) < 0.0f)\n" - " discard;\n" - " }\n" - "}\n" + "#if PS_IIP == 1\n" + " vec4 C = tfx(T, PSin_c);\n" + "#else\n" + " vec4 C = tfx(T, PSin_fc);\n" "#endif\n" "\n" - "// Note layout stuff might require gl4.3\n" - "#ifdef SUBROUTINE_GL40\n" - "// Function pointer type\n" - "subroutine void ColClipType(inout vec4 c);\n" + " atst(C);\n" "\n" - "// a function pointer variable\n" - "layout(location = 1) subroutine uniform ColClipType colclip;\n" + " fog(C, PSin_t.z);\n" "\n" - "layout(index = 8) subroutine(ColClipType)\n" - "void colclip_0(inout vec4 c)\n" - "{\n" - " // nothing to do\n" + "#if (PS_CLR1 != 0) // needed for Cd * (As/Ad/F + 1) blending modes\n" + " C.rgb = vec3(255.0f);\n" + "#endif\n" + "\n" + " return C;\n" "}\n" "\n" - "layout(index = 9) subroutine(ColClipType)\n" - "void colclip_1(inout vec4 c)\n" + "void ps_fbmask(inout vec4 C)\n" "{\n" - " // FIXME !!!!\n" - " //c.rgb *= c.rgb < 128./255;\n" - " bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f);\n" - " c.rgb *= vec3(factor);\n" + " // FIXME do I need special case for 16 bits\n" + "#if PS_FBMASK\n" + " vec4 RT = trunc(texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0) * 255.0f + 0.1f);\n" + " C = vec4((uvec4(C) & ~FbMask) | (uvec4(RT) & FbMask));\n" + "#endif\n" "}\n" "\n" - "layout(index = 10) subroutine(ColClipType)\n" - "void colclip_2(inout vec4 c)\n" + "void ps_blend(inout vec4 Color, float As)\n" "{\n" - " c.rgb = 256.0f/255.0f - c.rgb;\n" - " // FIXME !!!!\n" - " //c.rgb *= c.rgb < 128./255;\n" - " bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f);\n" - " c.rgb *= vec3(factor);\n" - "}\n" + "#if SW_BLEND\n" + " vec4 RT = trunc(texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0) * 255.0f + 0.1f);\n" "\n" + "#if PS_DFMT == FMT_24\n" + " float Ad = 1.0f;\n" "#else\n" - "void colclip(inout vec4 c)\n" - "{\n" - " if (PS_COLCLIP == 2)\n" - " {\n" - " c.rgb = 256.0f/255.0f - c.rgb;\n" - " }\n" - " if (PS_COLCLIP > 0)\n" - " {\n" - " // FIXME !!!!\n" - " //c.rgb *= c.rgb < 128./255;\n" - " bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f);\n" - " c.rgb *= vec3(factor);\n" - " }\n" - "}\n" + " // FIXME FMT_16 case\n" + " // FIXME Ad or Ad * 2?\n" + " float Ad = RT.a / 128.0f;\n" "#endif\n" "\n" - "void fog(inout vec4 c, float f)\n" - "{\n" - " if(PS_FOG != 0)\n" - " {\n" - " c.rgb = mix(FogColor, c.rgb, f);\n" - " }\n" - "}\n" + " // Let the compiler do its jobs !\n" + " vec3 Cd = RT.rgb;\n" + " vec3 Cs = Color.rgb;\n" + "\n" + "#if PS_BLEND_A == 0\n" + " vec3 A = Cs;\n" + "#elif PS_BLEND_A == 1\n" + " vec3 A = Cd;\n" + "#else\n" + " vec3 A = vec3(0.0f);\n" + "#endif\n" "\n" - "vec4 ps_color()\n" - "{\n" - " vec4 t = sample_color(PSin_t.xy, PSin_t.w);\n" + "#if PS_BLEND_B == 0\n" + " vec3 B = Cs;\n" + "#elif PS_BLEND_B == 1\n" + " vec3 B = Cd;\n" + "#else\n" + " vec3 B = vec3(0.0f);\n" + "#endif\n" "\n" - " vec4 zero = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n" - " vec4 one = vec4(1.0f, 1.0f, 1.0f, 1.0f);\n" - "#if PS_IIP == 1\n" - " vec4 c = clamp(tfx(t, PSin_c), zero, one);\n" + "#if PS_BLEND_C == 0\n" + " float C = As;\n" + "#elif PS_BLEND_C == 1\n" + " float C = Ad;\n" "#else\n" - " vec4 c = clamp(tfx(t, PSin_fc), zero, one);\n" + " float C = Af;\n" "#endif\n" "\n" - " atst(c);\n" + "#if PS_BLEND_D == 0\n" + " vec3 D = Cs;\n" + "#elif PS_BLEND_D == 1\n" + " vec3 D = Cd;\n" + "#else\n" + " vec3 D = vec3(0.0f);\n" + "#endif\n" "\n" - " fog(c, PSin_t.z);\n" + "#if PS_BLEND_A == PS_BLEND_B\n" + " Color.rgb = D;\n" + "#else\n" + " Color.rgb = trunc((A - B) * C + D);\n" + "#endif\n" "\n" - " colclip(c);\n" + " // FIXME dithering\n" "\n" - " if(PS_CLR1 != 0) // needed for Cd * (As/Ad/F + 1) blending modes\n" - " {\n" - " c.rgb = vec3(1.0f, 1.0f, 1.0f); \n" - " }\n" + " // Correct the Color value based on the output format\n" + "#if PS_COLCLIP == 0 && PS_HDR == 0\n" + " // Standard Clamp\n" + " Color.rgb = clamp(Color.rgb, vec3(0.0f), vec3(255.0f));\n" + "#endif\n" "\n" - " return c;\n" + " // FIXME rouding of negative float?\n" + " // compiler uses trunc but it might need floor\n" + "\n" + " // Warning: normally blending equation is mult(A, B) = A * B >> 7. GPU have the full accuracy\n" + " // GS: Color = 1, Alpha = 255 => output 1\n" + " // GPU: Color = 1/255, Alpha = 255/255 * 255/128 => output 1.9921875\n" + "#if PS_DFMT == FMT_16\n" + " // In 16 bits format, only 5 bits of colors are used. It impacts shadows computation of Castlevania\n" + "\n" + " Color.rgb = vec3(ivec3(Color.rgb) & ivec3(0xF8));\n" + "#elif PS_COLCLIP == 1 && PS_HDR == 0\n" + " Color.rgb = vec3(ivec3(Color.rgb) & ivec3(0xFF));\n" + "#endif\n" + "\n" + "#endif\n" "}\n" "\n" - "#if pGL_ES\n" "void ps_main()\n" "{\n" - " vec4 c = ps_color();\n" - " c.a *= 2.0;\n" - " SV_Target0 = c;\n" - "}\n" + "#if ((PS_DATE & 3) == 1 || (PS_DATE & 3) == 2) && !defined(DISABLE_GL42_image)\n" + "\n" + "#if PS_WRITE_RG == 1\n" + " // Pseudo 16 bits access.\n" + " float rt_a = texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0).g;\n" + "#else\n" + " float rt_a = texelFetch(RtSampler, ivec2(gl_FragCoord.xy), 0).a;\n" + "#endif\n" + "\n" + "#if (PS_DATE & 3) == 1\n" + " // DATM == 0: Pixel with alpha equal to 1 will failed\n" + " bool bad = (127.5f / 255.0f) < rt_a;\n" + "#elif (PS_DATE & 3) == 2\n" + " // DATM == 1: Pixel with alpha equal to 0 will failed\n" + " bool bad = rt_a < (127.5f / 255.0f);\n" + "#endif\n" + "\n" + " if (bad) {\n" + "#if PS_DATE >= 5\n" + " discard;\n" + "#else\n" + " imageStore(img_prim_min, ivec2(gl_FragCoord.xy), ivec4(-1));\n" + " return;\n" + "#endif\n" + " }\n" + "\n" "#endif\n" "\n" - "#if !pGL_ES\n" - "void ps_main()\n" - "{\n" "#if PS_DATE == 3 && !defined(DISABLE_GL42_image)\n" - " int stencil_ceil = imageLoad(img_prim_min, ivec2(gl_FragCoord.xy));\n" + " int stencil_ceil = imageLoad(img_prim_min, ivec2(gl_FragCoord.xy)).r;\n" " // Note gl_PrimitiveID == stencil_ceil will be the primitive that will update\n" " // the bad alpha value so we must keep it.\n" "\n" - " if (gl_PrimitiveID > stencil_ceil) {\n" - " discard;\n" - " }\n" + " if (gl_PrimitiveID > stencil_ceil) {\n" + " discard;\n" + " }\n" "#endif\n" "\n" - " vec4 c = ps_color();\n" + " vec4 C = ps_color();\n" + "#if (APITRACE_DEBUG & 1) == 1\n" + " C.r = 255f;\n" + "#endif\n" + "#if (APITRACE_DEBUG & 2) == 2\n" + " C.g = 255f;\n" + "#endif\n" + "#if (APITRACE_DEBUG & 4) == 4\n" + " C.b = 255f;\n" + "#endif\n" + "#if (APITRACE_DEBUG & 8) == 8\n" + " C.a = 128f;\n" + "#endif\n" "\n" - " float alpha = c.a * 2.0;\n" + "#if PS_SHUFFLE\n" + " uvec4 denorm_c = uvec4(C);\n" + " uvec2 denorm_TA = uvec2(vec2(TA.xy) * 255.0f + 0.5f);\n" "\n" - " if(PS_AOUT != 0) // 16 bit output\n" - " {\n" - " float a = 128.0f / 255.0; // alpha output will be 0x80\n" + " // Write RB part. Mask will take care of the correct destination\n" + "#if PS_READ_BA\n" + " C.rb = C.bb;\n" + "#else\n" + " C.rb = C.rr;\n" + "#endif\n" "\n" - " c.a = (PS_FBA != 0) ? a : step(0.5, c.a) * a;\n" - " }\n" - " else if(PS_FBA != 0)\n" - " {\n" - " if(c.a < 0.5) c.a += 0.5;\n" - " }\n" + " // FIXME precompute my_TA & 0x80\n" + "\n" + " // Write GA part. Mask will take care of the correct destination\n" + " // Note: GLSL 4.50/GL_EXT_shader_integer_mix support a mix instruction to select a component\\n\"\n" + " // However Nvidia emulate it with an if (at least on kepler arch) ...\\n\"\n" + "#if PS_READ_BA\n" + " // bit field operation requires GL4 HW. Could be nice to merge it with step/mix below\n" + " // uint my_ta = (bool(bitfieldExtract(denorm_c.a, 7, 1))) ? denorm_TA.y : denorm_TA.x;\n" + " // denorm_c.a = bitfieldInsert(denorm_c.a, bitfieldExtract(my_ta, 7, 1), 7, 1);\n" + " // c.ga = vec2(float(denorm_c.a));\n" + "\n" + " if (bool(denorm_c.a & 0x80u))\n" + " C.ga = vec2(float((denorm_c.a & 0x7Fu) | (denorm_TA.y & 0x80u)));\n" + " else\n" + " C.ga = vec2(float((denorm_c.a & 0x7Fu) | (denorm_TA.x & 0x80u)));\n" + "\n" + "#else\n" + " if (bool(denorm_c.g & 0x80u))\n" + " C.ga = vec2(float((denorm_c.g & 0x7Fu) | (denorm_TA.y & 0x80u)));\n" + " else\n" + " C.ga = vec2(float((denorm_c.g & 0x7Fu) | (denorm_TA.x & 0x80u)));\n" + "\n" + " // Nice idea but step/mix requires 4 instructions\n" + " // set / trunc / I2F / Mad\n" + " //\n" + " // float sel = step(128.0f, c.g);\n" + " // vec2 c_shuffle = vec2((denorm_c.gg & 0x7Fu) | (denorm_TA & 0x80u));\n" + " // c.ga = mix(c_shuffle.xx, c_shuffle.yy, sel);\n" + "#endif\n" + "\n" + "#endif\n" + "\n" + " // Must be done before alpha correction\n" + " float alpha_blend = C.a / 128.0f;\n" + "\n" + " // Correct the ALPHA value based on the output format\n" + "#if (PS_DFMT == FMT_16)\n" + " float A_one = 128.0f; // alpha output will be 0x80\n" + " C.a = (PS_FBA != 0) ? A_one : step(128.0f, C.a) * A_one;\n" + "#elif (PS_DFMT == FMT_32) && (PS_FBA != 0)\n" + " if(C.a < 128.0f) C.a += 128.0f;\n" + "#endif\n" "\n" " // Get first primitive that will write a failling alpha value\n" "#if PS_DATE == 1 && !defined(DISABLE_GL42_image)\n" " // DATM == 0\n" - " // Pixel with alpha equal to 1 will failed\n" - " if (c.a > 127.5f / 255.0f) {\n" + " // Pixel with alpha equal to 1 will failed (128-255)\n" + " if (C.a > 127.5f) {\n" " imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID);\n" " }\n" - " //memoryBarrier();\n" + " return;\n" "#elif PS_DATE == 2 && !defined(DISABLE_GL42_image)\n" " // DATM == 1\n" - " // Pixel with alpha equal to 0 will failed\n" - " if (c.a < 127.5f / 255.0f) {\n" + " // Pixel with alpha equal to 0 will failed (0-127)\n" + " if (C.a < 127.5f) {\n" " imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID);\n" " }\n" + " return;\n" "#endif\n" "\n" + " ps_blend(C, alpha_blend);\n" "\n" - "#if (PS_DATE == 2 || PS_DATE == 1) && !defined(DISABLE_GL42_image)\n" - " // Don't write anything on the framebuffer\n" - " // Note: you can't use discard because it will also drop\n" - " // image operation\n" - "#else\n" - " SV_Target0 = c;\n" - " SV_Target1 = vec4(alpha, alpha, alpha, alpha);\n" - "#endif\n" + " ps_fbmask(C);\n" "\n" + "#if PS_HDR == 1\n" + " // Use negative value to avoid overflow of the texture (in accumulation mode)\n" + " // Note: code were initially done for an Half-Float texture. Due to overflow\n" + " // the texture was upgraded to a full float. Maybe this code is useless now!\n" + " // Good testcase is castlevania\n" + " if (any(greaterThan(C.rgb, vec3(128.0f)))) {\n" + " C.rgb = (C.rgb - 256.0f);\n" + " }\n" + "#endif\n" + " SV_Target0 = C / 255.0f;\n" + " SV_Target1 = vec4(alpha_blend);\n" "}\n" - "#endif // !pGL_ES\n" "\n" "#endif\n" ; @@ -1545,11 +1541,7 @@ " vec2 t;\n" "};\n" "\n" - "#ifdef ENABLE_BINDLESS_TEX\n" - "layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler;\n" - "#else\n" "layout(binding = 0) uniform sampler2D TextureSampler;\n" - "#endif\n" "\n" "in SHADER\n" "{\n" diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/interlace.glsl pcsx2-1.4.0/plugins/GSdx/res/interlace.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/interlace.glsl 2014-10-01 07:50:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/interlace.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -//#version 420 // Keep it for editor detection - -struct vertex_basic -{ - vec4 p; - vec2 t; -}; - -in SHADER -{ - vec4 p; - vec2 t; -} PSin; - -#define PSin_p (PSin.p) -#define PSin_t (PSin.t) - -#ifdef FRAGMENT_SHADER - -layout(location = 0) out vec4 SV_Target0; - -layout(std140, binding = 11) uniform cb11 -{ - vec2 ZrH; - float hH; -}; - -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else -layout(binding = 0) uniform sampler2D TextureSampler; -#endif - -// TODO ensure that clip (discard) is < 0 and not <= 0 ??? -void ps_main0() -{ - if (fract(PSin_t.y * hH) - 0.5 < 0.0) - discard; - // I'm not sure it impact us but be safe to lookup texture before conditional if - // see: http://www.opengl.org/wiki/GLSL_Sampler#Non-uniform_flow_control - vec4 c = texture(TextureSampler, PSin_t); - - SV_Target0 = c; -} - -void ps_main1() -{ - if (0.5 - fract(PSin_t.y * hH) < 0.0) - discard; - // I'm not sure it impact us but be safe to lookup texture before conditional if - // see: http://www.opengl.org/wiki/GLSL_Sampler#Non-uniform_flow_control - vec4 c = texture(TextureSampler, PSin_t); - - SV_Target0 = c; -} - -void ps_main2() -{ - vec4 c0 = texture(TextureSampler, PSin_t - ZrH); - vec4 c1 = texture(TextureSampler, PSin_t); - vec4 c2 = texture(TextureSampler, PSin_t + ZrH); - - SV_Target0 = (c0 + c1 * 2.0f + c2) / 4.0f; -} - -void ps_main3() -{ - SV_Target0 = texture(TextureSampler, PSin_t); -} - -#endif Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/plugins/GSdx/res/logo-ogl.bmp and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/plugins/GSdx/res/logo-ogl.bmp differ diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/merge.glsl pcsx2-1.4.0/plugins/GSdx/res/merge.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/merge.glsl 2014-10-01 07:50:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/merge.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -//#version 420 // Keep it for editor detection - -struct vertex_basic -{ - vec4 p; - vec2 t; -}; - -in SHADER -{ - vec4 p; - vec2 t; -} PSin; - -#define PSin_p (PSin.p) -#define PSin_t (PSin.t) - -#ifdef FRAGMENT_SHADER - -layout(location = 0) out vec4 SV_Target0; - -layout(std140, binding = 10) uniform cb10 -{ - vec4 BGColor; -}; - -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else -layout(binding = 0) uniform sampler2D TextureSampler; -#endif - -void ps_main0() -{ - vec4 c = texture(TextureSampler, PSin_t); - c.a = min(c.a * 2.0, 1.0); - SV_Target0 = c; -} - -void ps_main1() -{ - vec4 c = texture(TextureSampler, PSin_t); - c.a = BGColor.a; - SV_Target0 = c; -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/shadeboost.glsl pcsx2-1.4.0/plugins/GSdx/res/shadeboost.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/shadeboost.glsl 2014-12-07 11:46:16.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/shadeboost.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -//#version 420 // Keep it for editor detection - -/* -** Contrast, saturation, brightness -** Code of this function is from TGM's shader pack -** http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=21057 -*/ - -struct vertex_basic -{ - vec4 p; - vec2 t; -}; - -#ifdef FRAGMENT_SHADER - -in SHADER -{ - vec4 p; - vec2 t; -} PSin; - -#define PSin_p (PSin.p) -#define PSin_t (PSin.t) - -layout(location = 0) out vec4 SV_Target0; - -layout(std140, binding = 12) uniform cb12 -{ - vec4 BGColor; -}; - -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -#else -layout(binding = 0) uniform sampler2D TextureSampler; -#endif - -// For all settings: 1.0 = 100% 0.5=50% 1.5 = 150% -vec4 ContrastSaturationBrightness(vec4 color) -{ - const float sat = SB_SATURATION / 50.0; - const float brt = SB_BRIGHTNESS / 50.0; - const float con = SB_CONTRAST / 50.0; - - // Increase or decrease these values to adjust r, g and b color channels separately - const float AvgLumR = 0.5; - const float AvgLumG = 0.5; - const float AvgLumB = 0.5; - - const vec3 LumCoeff = vec3(0.2125, 0.7154, 0.0721); - - vec3 AvgLumin = vec3(AvgLumR, AvgLumG, AvgLumB); - vec3 brtColor = color.rgb * brt; - float dot_intensity = dot(brtColor, LumCoeff); - vec3 intensity = vec3(dot_intensity, dot_intensity, dot_intensity); - vec3 satColor = mix(intensity, brtColor, sat); - vec3 conColor = mix(AvgLumin, satColor, con); - - color.rgb = conColor; - return color; -} - - -void ps_main() -{ - vec4 c = texture(TextureSampler, PSin_t); - SV_Target0 = ContrastSaturationBrightness(c); -} - - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.cl pcsx2-1.4.0/plugins/GSdx/res/tfx.cl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.cl 2014-09-22 07:15:25.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/tfx.cl 2016-01-05 17:28:08.000000000 +0000 @@ -1,3 +1,9 @@ +#if defined(CL_VERSION_2_0) + +#error hello + +#endif + #if defined(CL_VERSION_1_1) || defined(CL_VERSION_1_2) // make safe to include in resource file to enforce dependency #ifdef cl_amd_printf @@ -26,6 +32,13 @@ #error "MAX_PRIM_PER_BATCH != 32u OR 64u" #endif +#define TFX_ABA(sel) ((sel.x >> 24) & 3) +#define TFX_ABB(sel) ((sel.x >> 26) & 3) +#define TFX_ABC(sel) ((sel.x >> 28) & 3) +#define TFX_ABD(sel) ((sel.x >> 30) & 3) +#define TFX_WMS(sel) ((sel.y >> 8) & 3) +#define TFX_WMT(sel) ((sel.y >> 10) & 3) + typedef struct { union {float4 p; struct {float x, y; uint z, f;};}; @@ -35,9 +48,9 @@ typedef struct { gs_vertex v[3]; - uint zmin; + uint zmin, zmax; uint pb_index; - uint _pad[2]; + uint _pad; } gs_prim; typedef struct @@ -60,6 +73,7 @@ { int4 scissor; char dimx[4][4]; + uint2 sel; int fbp, zbp, bw; uint fm, zm; uchar4 fog; // rgb @@ -110,10 +124,10 @@ enum GS_CLAMP { - CLAMP_REPEAT = 0, - CLAMP_CLAMP = 1, - CLAMP_REGION_CLAMP = 2, - CLAMP_REGION_REPEAT = 3, + CLAMP_REGION_REPEAT = 0, + CLAMP_REPEAT = 1, + CLAMP_CLAMP = 2, + CLAMP_REGION_CLAMP = 3, }; enum GS_ZTST @@ -603,6 +617,7 @@ // only interpolate the relative to zmin and hopefully small values uint zmin = min(min(v0->z, v1->z), v2->z); + uint zmax = max(max(v0->z, v1->z), v2->z); prim->v[0].p = (float4)(v0->p.x, v0->p.y, as_float(v0->z - zmin), v0->p.w); prim->v[0].tc = v0->tc; @@ -612,6 +627,7 @@ prim->v[2].tc = v2->tc; prim->zmin = zmin; + prim->zmax = zmax; float4 dp0 = v1->p - v0->p; float4 dp1 = v0->p - v2->p; @@ -969,27 +985,34 @@ int Wrap(int a, int b, int c, int mode) { - switch(mode) + if(MERGED) { - case CLAMP_REPEAT: - return a & b; - case CLAMP_CLAMP: - return clamp(a, 0, c); - case CLAMP_REGION_CLAMP: - return clamp(a, b, c); - case CLAMP_REGION_REPEAT: - return (a & b) | c; + return select((a & b) | c, clamp(a, b, c), (mode & 2) != 0); + } + else + { + switch(mode) + { + case CLAMP_REGION_REPEAT: + return (a & b) | c; + case CLAMP_REPEAT: + return a & b; + case CLAMP_CLAMP: + return clamp(a, 0, c); + case CLAMP_REGION_CLAMP: + return clamp(a, b, c); + } } } -int4 AlphaBlend(int4 c, int afix, uint fd) +int4 AlphaBlend(int4 c, uint fd, int afix, uint2 sel) { if(FWRITE && (ABE || AA1)) { int4 cs = c; int4 cd; - if(ABA != ABB && (ABA == 1 || ABB == 1 || ABC == 1) || ABD == 1) + if(ABA != ABB && (ABA == 1 || ABB == 1 || ABC == 1) || ABD == 1 || MERGED) { if(is32bit(FPSM) || is24bit(FPSM)) { @@ -1007,50 +1030,69 @@ } } - if(ABA != ABB) + if(MERGED) { - switch(ABA) - { - case 0: break; // c.xyz = cs.xyz; - case 1: c.xyz = cd.xyz; break; - case 2: c.xyz = 0; break; - } + int aba = TFX_ABA(sel); + int abb = TFX_ABB(sel); + int abc = TFX_ABC(sel); + int abd = TFX_ABD(sel); + + int ad = !is24bit(FPSM) ? cd.w : 0x80; + + int3 A = aba == 0 ? cs.xyz : aba == 1 ? cd.xyz : 0; + int3 B = abb == 0 ? cs.xyz : abb == 1 ? cd.xyz : 0; + int C = abc == 0 ? cs.w : abc == 1 ? ad : afix; + int3 D = abd == 0 ? cs.xyz : abd == 1 ? cd.xyz : 0; - switch(ABB) - { - case 0: c.xyz -= cs.xyz; break; - case 1: c.xyz -= cd.xyz; break; - case 2: break; - } - - if(!(is24bit(FPSM) && ABC == 1)) + c.xyz = (mul24(A - B, C) >> 7) + D; + } + else + { + if(ABA != ABB) { - int a = 0; + switch(ABA) + { + case 0: break; // c.xyz = cs.xyz; + case 1: c.xyz = cd.xyz; break; + case 2: c.xyz = 0; break; + } - switch(ABC) + switch(ABB) { - case 0: a = cs.w; break; - case 1: a = cd.w; break; - case 2: a = afix; break; + case 0: c.xyz -= cs.xyz; break; + case 1: c.xyz -= cd.xyz; break; + case 2: break; } - c.xyz = c.xyz * a >> 7; - } + if(!(is24bit(FPSM) && ABC == 1)) + { + int a = 0; - switch(ABD) - { - case 0: c.xyz += cs.xyz; break; - case 1: c.xyz += cd.xyz; break; - case 2: break; + switch(ABC) + { + case 0: a = cs.w; break; + case 1: a = cd.w; break; + case 2: a = afix; break; + } + + c.xyz = c.xyz * a >> 7; + } + + switch(ABD) + { + case 0: c.xyz += cs.xyz; break; + case 1: c.xyz += cd.xyz; break; + case 2: break; + } } - } - else - { - switch(ABD) + else { - case 0: break; - case 1: c.xyz = cd.xyz; break; - case 2: c.xyz = 0; break; + switch(ABD) + { + case 0: break; + case 1: c.xyz = cd.xyz; break; + case 2: c.xyz = 0; break; + } } } @@ -1150,8 +1192,6 @@ if(!FST) { uv = convert_int2_rte(t.xy * native_recip(t.z)); - - if(LTF) uv -= 0x0008; } else { @@ -1167,15 +1207,17 @@ uv = convert_int2(t.xy); } + if(LTF) uv -= 0x0008; + int2 uvf = uv & 0x000f; int2 uv0 = uv >> 4; int2 uv1 = uv0 + 1; - uv0.x = Wrap(uv0.x, pb->minu, pb->maxu, WMS); - uv0.y = Wrap(uv0.y, pb->minv, pb->maxv, WMT); - uv1.x = Wrap(uv1.x, pb->minu, pb->maxu, WMS); - uv1.y = Wrap(uv1.y, pb->minv, pb->maxv, WMT); + uv0.x = Wrap(uv0.x, pb->minu, pb->maxu, MERGED ? TFX_WMS(pb->sel) : WMS); + uv0.y = Wrap(uv0.y, pb->minv, pb->maxv, MERGED ? TFX_WMT(pb->sel) : WMT); + uv1.x = Wrap(uv1.x, pb->minu, pb->maxu, MERGED ? TFX_WMS(pb->sel) : WMS); + uv1.y = Wrap(uv1.y, pb->minv, pb->maxv, MERGED ? TFX_WMT(pb->sel) : WMT); int4 c00 = ReadTexel(tex, uv0.x, uv0.y, 0, pb); int4 c01 = ReadTexel(tex, uv1.x, uv0.y, 0, pb); @@ -1356,6 +1398,11 @@ { // TODO: aa1: draw edge as a line + if(!ZTest(prim->zmax, zd)) + { + continue; + } + __global gs_barycentric* b = &barycentric[prim_index + i]; float3 f = b->dx.xyz * (pf.x - b->dx.w) + b->dy.xyz * (pf.y - b->dy.w) + (float3)(0, 0, 1); @@ -1420,8 +1467,6 @@ if(TFX != TFX_NONE) { - tex = vm; // TODO: use the texture cache - ct = SampleTexture(tex, pb, t); } @@ -1515,7 +1560,7 @@ // alpha blend - c = AlphaBlend(c, pb->afix, fd); + c = AlphaBlend(c, fd, pb->afix, pb->sel); // write frame diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.fx pcsx2-1.4.0/plugins/GSdx/res/tfx.fx --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.fx 2013-02-12 12:08:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/tfx.fx 2016-01-05 17:28:08.000000000 +0000 @@ -39,6 +39,8 @@ #define PS_SPRITEHACK 0 #define PS_TCOFFSETHACK 0 #define PS_POINT_SAMPLER 0 +#define PS_SHUFFLE 0 +#define PS_READ_BA 0 #endif struct VS_INPUT @@ -712,6 +714,38 @@ PS_OUTPUT output; + if (PS_SHUFFLE){ + uint4 denorm_c = uint4(c * 255.0f + 0.5f); + uint2 denorm_TA = uint2(float2(TA.xy) * 255.0f + 0.5f); + + // Mask will take care of the correct destination + if (PS_READ_BA){ + c.rb = c.bb; + } + else { + c.rb = c.rr; + } + c.g = c.a; + if (PS_READ_BA){ + if (denorm_c.a & 0x80) + c.a = float((denorm_c.a & 0x7Fu) | (denorm_TA.y & 0x80u)) / 255.0f; + else + c.a = float((denorm_c.a & 0x7Fu) | (denorm_TA.x & 0x80u)) / 255.0f; + + //c.g = c.a; + } + else { + if (denorm_c.g & 0x80) + c.a = float((denorm_c.g & 0x7Fu) | (denorm_TA.y & 0x80u)) / 255.0f; + else + c.a = float((denorm_c.g & 0x7Fu) | (denorm_TA.x & 0x80u)) / 255.0f; + + //c.g = c.a; + } + //Probably not right :/ + //c.g = c.b; + } + output.c1 = c.a * 2; // used for alpha blending if(PS_AOUT) // 16 bit output diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.glsl pcsx2-1.4.0/plugins/GSdx/res/tfx.glsl --- pcsx2-1.3.1+dfsg/plugins/GSdx/res/tfx.glsl 2014-10-07 17:11:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/res/tfx.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,1072 +0,0 @@ -//#version 420 // Keep it for text editor detection - -// note lerp => mix - -#define FMT_32 0 -#define FMT_24 1 -#define FMT_16 2 -#define FMT_PAL 4 /* flag bit */ - -// Not sure we have same issue on opengl. Doesn't work anyway on ATI card -// And I say this as an ATI user. -#define ATI_SUCKS 0 - -#ifndef VS_BPPZ -#define VS_BPPZ 0 -#define VS_TME 1 -#define VS_FST 1 -#define VS_LOGZ 0 -#endif - -#ifndef PS_FST -#define PS_FST 0 -#define PS_WMS 0 -#define PS_WMT 0 -#define PS_FMT FMT_32 -#define PS_AEM 0 -#define PS_TFX 0 -#define PS_TCC 1 -#define PS_ATST 1 -#define PS_FOG 0 -#define PS_CLR1 0 -#define PS_FBA 0 -#define PS_AOUT 0 -#define PS_LTF 1 -#define PS_COLCLIP 0 -#define PS_DATE 0 -#define PS_SPRITEHACK 0 -#define PS_POINT_SAMPLER 0 -#define PS_TCOFFSETHACK 0 -#define PS_IIP 1 -#endif - -struct vertex -{ - vec4 t; - vec4 c; - vec4 fc; -}; - -#ifdef VERTEX_SHADER -layout(location = 0) in vec2 i_st; -layout(location = 2) in vec4 i_c; -layout(location = 3) in float i_q; -layout(location = 4) in uvec2 i_p; -layout(location = 5) in uint i_z; -layout(location = 6) in uvec2 i_uv; -layout(location = 7) in vec4 i_f; - -out SHADER -{ - vec4 t; - vec4 c; - flat vec4 fc; -} VSout; - -#define VSout_t (VSout.t) -#define VSout_c (VSout.c) -#define VSout_fc (VSout.fc) - -out gl_PerVertex { - invariant vec4 gl_Position; - float gl_PointSize; -#if !pGL_ES - float gl_ClipDistance[]; -#endif -}; - -layout(std140, binding = 20) uniform cb20 -{ - vec2 VertexScale; - vec2 VertexOffset; - vec2 TextureScale; -}; - -#ifdef ZERO_TO_ONE_DEPTH -const float exp_min32 = exp2(-32.0f); -#else -const float exp_min31 = exp2(-31.0f); -#endif - -#ifdef SUBROUTINE_GL40 -// Function pointer type -subroutine void TextureCoordType(void); - -// a function pointer variable -layout(location = 0) subroutine uniform TextureCoordType texture_coord; - -layout(index = 0) subroutine(TextureCoordType) -void tme_0() -{ - VSout_t.xy = vec2(0.0f, 0.0f); - VSout_t.w = 1.0f; -} - -layout(index = 1) subroutine(TextureCoordType) -void tme_1_fst_0() -{ - VSout_t.xy = i_st; - VSout_t.w = i_q; -} - -layout(index = 2) subroutine(TextureCoordType) -void tme_1_fst_1() -{ - VSout_t.xy = vec2(i_uv) * TextureScale; - VSout_t.w = 1.0f; -} - -#else - -void texture_coord() -{ - if(VS_TME != 0) - { - if(VS_FST != 0) - { - VSout_t.xy = vec2(i_uv) * TextureScale; - VSout_t.w = 1.0f; - } - else - { - VSout_t.xy = i_st; - VSout_t.w = i_q; - } - } - else - { - VSout_t.xy = vec2(0.0f, 0.0f); - VSout_t.w = 1.0f; - } -} - -#endif - -void vs_main() -{ - highp uint z; - if(VS_BPPZ == 1) // 24 - z = i_z & uint(0xffffff); - else if(VS_BPPZ == 2) // 16 - z = i_z & uint(0xffff); - else - z = i_z; - - // pos -= 0.05 (1/320 pixel) helps avoiding rounding problems (integral part of pos is usually 5 digits, 0.05 is about as low as we can go) - // example: ceil(afterseveralvertextransformations(y = 133)) => 134 => line 133 stays empty - // input granularity is 1/16 pixel, anything smaller than that won't step drawing up/left by one pixel - // example: 133.0625 (133 + 1/16) should start from line 134, ceil(133.0625 - 0.05) still above 133 - vec4 p; - - p.xy = vec2(i_p) - vec2(0.05f, 0.05f); - p.xy = p.xy * VertexScale - VertexOffset; - p.w = 1.0f; -#ifdef ZERO_TO_ONE_DEPTH - if(VS_LOGZ == 1) { - p.z = log2(float(1u+z)) / 32.0f; - } else { - p.z = float(z) * exp_min32; - } -#else - if(VS_LOGZ == 1) { - p.z = log2(float(1u+z)) / 31.0f - 1.0f; - } else { - p.z = float(z) * exp_min31 - 1.0f; - } -#endif - - gl_Position = p; - - texture_coord(); - - VSout_c = i_c; - VSout_fc = i_c; - VSout_t.z = i_f.r; -} - -#endif - -#ifdef GEOMETRY_SHADER -in gl_PerVertex { - invariant vec4 gl_Position; - float gl_PointSize; -#if !pGL_ES - float gl_ClipDistance[]; -#endif -} gl_in[]; -//in int gl_PrimitiveIDIn; - -out gl_PerVertex { - vec4 gl_Position; - float gl_PointSize; -#if !pGL_ES - float gl_ClipDistance[]; -#endif -}; -//out int gl_PrimitiveID; - -in SHADER -{ - vec4 t; - vec4 c; - flat vec4 fc; -} GSin[]; - -out SHADER -{ - vec4 t; - vec4 c; - flat vec4 fc; -} GSout; - -void out_vertex(in vertex v) -{ - GSout.t = v.t; - GSout.c = v.c; - GSout.fc = v.fc; - gl_PrimitiveID = gl_PrimitiveIDIn; - EmitVertex(); -} - -layout(lines) in; -layout(triangle_strip, max_vertices = 6) out; - -void gs_main() -{ - // left top => GSin[0]; - // right bottom => GSin[1]; - vertex rb = vertex(GSin[1].t, GSin[1].c, GSin[1].fc); - vertex lt = vertex(GSin[0].t, GSin[0].c, GSin[0].fc); - - vec4 rb_p = gl_in[1].gl_Position; - vec4 lb_p = gl_in[1].gl_Position; - vec4 rt_p = gl_in[1].gl_Position; - vec4 lt_p = gl_in[0].gl_Position; - - // flat depth - lt_p.z = rb_p.z; - // flat fog and texture perspective - lt.t.zw = rb.t.zw; - // flat color - lt.c = rb.c; - - // Swap texture and position coordinate - vertex lb = rb; - lb_p.x = lt_p.x; - lb.t.x = lt.t.x; - - vertex rt = rb; - rt_p.y = lt_p.y; - rt.t.y = lt.t.y; - - // Triangle 1 - gl_Position = lt_p; - out_vertex(lt); - - gl_Position = lb_p; - out_vertex(lb); - - gl_Position = rt_p; - out_vertex(rt); - - EndPrimitive(); - - // Triangle 2 - gl_Position = lb_p; - out_vertex(lb); - - gl_Position = rt_p; - out_vertex(rt); - - gl_Position = rb_p; - out_vertex(rb); - - EndPrimitive(); -} - -#endif - -#ifdef FRAGMENT_SHADER - -in SHADER -{ - vec4 t; - vec4 c; - flat vec4 fc; -} PSin; - -#define PSin_t (PSin.t) -#define PSin_c (PSin.c) -#define PSin_fc (PSin.fc) - -// Same buffer but 2 colors for dual source blending -#if pGL_ES -layout(location = 0) out vec4 SV_Target0; -#else -layout(location = 0, index = 0) out vec4 SV_Target0; -layout(location = 0, index = 1) out vec4 SV_Target1; -#endif - -#ifdef ENABLE_BINDLESS_TEX -layout(bindless_sampler, location = 0) uniform sampler2D TextureSampler; -layout(bindless_sampler, location = 1) uniform sampler2D PaletteSampler; -#else -layout(binding = 0) uniform sampler2D TextureSampler; -layout(binding = 1) uniform sampler2D PaletteSampler; -#endif - -#ifndef DISABLE_GL42_image -#if PS_DATE > 0 -// FIXME how to declare memory access -layout(r32i, binding = 2) coherent uniform iimage2D img_prim_min; -#endif -#else -// use basic stencil -#endif - -#ifndef DISABLE_GL42_image -#if PS_DATE > 0 -// origin_upper_left -layout(pixel_center_integer) in vec4 gl_FragCoord; -//in int gl_PrimitiveID; -#endif -#endif - -layout(std140, binding = 21) uniform cb21 -{ - vec3 FogColor; - float AREF; - vec4 WH; - vec2 MinF; - vec2 TA; - uvec4 MskFix; - vec4 HalfTexel; - vec4 MinMax; - vec4 TC_OffsetHack; -}; - -vec4 sample_c(vec2 uv) -{ - // FIXME: check the issue on openGL - if (ATI_SUCKS == 1 && PS_POINT_SAMPLER == 1) - { - // Weird issue with ATI cards (happens on at least HD 4xxx and 5xxx), - // it looks like they add 127/128 of a texel to sampling coordinates - // occasionally causing point sampling to erroneously round up. - // I'm manually adjusting coordinates to the centre of texels here, - // though the centre is just paranoia, the top left corner works fine. - uv = (trunc(uv * WH.zw) + vec2(0.5, 0.5)) / WH.zw; - } - - return texture(TextureSampler, uv); -} - -vec4 sample_p(float u) -{ - //FIXME do we need a 1D sampler. Big impact on opengl to find 1 dim - // So for the moment cheat with 0.0f dunno if it work - return texture(PaletteSampler, vec2(u, 0.0f)); -} - -#if 0 -vec4 sample_rt(vec2 uv) -{ - return texture(RTCopySampler, uv); -} -#endif - -// FIXME crash nvidia -#if 0 -// Function pointer type -subroutine vec4 WrapType(vec4 uv); - -// a function pointer variable -layout(location = 4) subroutine uniform WrapType wrapuv; - -layout(index = 24) subroutine(WrapType) -vec4 wrapuv_wms_wmt_2(vec4 uv) -{ - vec4 uv_out = uv; - uv_out = clamp(uv, MinMax.xyxy, MinMax.zwzw); - return uv_out; -} - -layout(index = 25) subroutine(WrapType) -vec4 wrapuv_wms_wmt3(vec4 uv) -{ - vec4 uv_out = uv; - uv_out = vec4((ivec4(uv * WH.xyxy) & ivec4(MskFix.xyxy)) | ivec4(MskFix.zwzw)) / WH.xyxy; - return uv_out; -} - -layout(index = 26) subroutine(WrapType) -vec4 wrapuv_wms2_wmt3(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz); - uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy; - return uv_out; -} - -layout(index = 27) subroutine(WrapType) -vec4 wrapuv_wms3_wmt2(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx; - uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww); - return uv_out; -} - -layout(index = 28) subroutine(WrapType) -vec4 wrapuv_wms2_wmtx(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz); - return uv_out; -} - -layout(index = 29) subroutine(WrapType) -vec4 wrapuv_wmsx_wmt3(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy; - return uv_out; -} - -layout(index = 30) subroutine(WrapType) -vec4 wrapuv_wms3_wmtx(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx; - return uv_out; -} - -layout(index = 31) subroutine(WrapType) -vec4 wrapuv_wmsx_wmt2(vec4 uv) -{ - vec4 uv_out = uv; - uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww); - return uv_out; -} - -layout(index = 32) subroutine(WrapType) -vec4 wrapuv_dummy(vec4 uv) -{ - return uv; -} - -#else -vec4 wrapuv(vec4 uv) -{ - vec4 uv_out = uv; - - if(PS_WMS == PS_WMT) - { - if(PS_WMS == 2) - { - uv_out = clamp(uv, MinMax.xyxy, MinMax.zwzw); - } - else if(PS_WMS == 3) - { - uv_out = vec4((ivec4(uv * WH.xyxy) & ivec4(MskFix.xyxy)) | ivec4(MskFix.zwzw)) / WH.xyxy; - } - } - else - { - if(PS_WMS == 2) - { - uv_out.xz = clamp(uv.xz, MinMax.xx, MinMax.zz); - } - else if(PS_WMS == 3) - { - uv_out.xz = vec2((ivec2(uv.xz * WH.xx) & ivec2(MskFix.xx)) | ivec2(MskFix.zz)) / WH.xx; - } - if(PS_WMT == 2) - { - uv_out.yw = clamp(uv.yw, MinMax.yy, MinMax.ww); - } - else if(PS_WMT == 3) - { - uv_out.yw = vec2((ivec2(uv.yw * WH.yy) & ivec2(MskFix.yy)) | ivec2(MskFix.ww)) / WH.yy; - } - } - - return uv_out; -} -#endif - -// FIXME crash nvidia -#if 0 -// Function pointer type -subroutine vec2 ClampType(vec2 uv); - -// a function pointer variable -layout(location = 3) subroutine uniform ClampType clampuv; - -layout(index = 20) subroutine(ClampType) -vec2 clampuv_wms2_wmt2(vec2 uv) -{ - return clamp(uv, MinF, MinMax.zw); -} - -layout(index = 21) subroutine(ClampType) -vec2 clampuv_wms2(vec2 uv) -{ - vec2 uv_out = uv; - uv_out.x = clamp(uv.x, MinF.x, MinMax.z); - return uv_out; -} - -layout(index = 22) subroutine(ClampType) -vec2 clampuv_wmt2(vec2 uv) -{ - vec2 uv_out = uv; - uv_out.y = clamp(uv.y, MinF.y, MinMax.w); - return uv_out; -} - -layout(index = 23) subroutine(ClampType) -vec2 clampuv_dummy(vec2 uv) -{ - return uv; -} - -#else -vec2 clampuv(vec2 uv) -{ - vec2 uv_out = uv; - - if(PS_WMS == 2 && PS_WMT == 2) - { - uv_out = clamp(uv, MinF, MinMax.zw); - } - else if(PS_WMS == 2) - { - uv_out.x = clamp(uv.x, MinF.x, MinMax.z); - } - else if(PS_WMT == 2) - { - uv_out.y = clamp(uv.y, MinF.y, MinMax.w); - } - - return uv_out; -} -#endif - -mat4 sample_4c(vec4 uv) -{ - mat4 c; - - c[0] = sample_c(uv.xy); - c[1] = sample_c(uv.zy); - c[2] = sample_c(uv.xw); - c[3] = sample_c(uv.zw); - - return c; -} - -vec4 sample_4a(vec4 uv) -{ - vec4 c; - - // Dx used the alpha channel. - // Opengl is only 8 bits on red channel. - c.x = sample_c(uv.xy).r; - c.y = sample_c(uv.zy).r; - c.z = sample_c(uv.xw).r; - c.w = sample_c(uv.zw).r; - - return c * 255.0/256.0 + 0.5/256.0; -} - -mat4 sample_4p(vec4 u) -{ - mat4 c; - - c[0] = sample_p(u.x); - c[1] = sample_p(u.y); - c[2] = sample_p(u.z); - c[3] = sample_p(u.w); - - return c; -} - -vec4 sample_color(vec2 st, float q) -{ - if(PS_FST == 0) st /= q; - - if(PS_TCOFFSETHACK == 1) st += TC_OffsetHack.xy; - - vec4 t; - mat4 c; - vec2 dd; - - if (PS_LTF == 0 && PS_FMT <= FMT_16 && PS_WMS < 3 && PS_WMT < 3) - { - c[0] = sample_c(clampuv(st)); - } - else - { - vec4 uv; - - if(PS_LTF != 0) - { - uv = st.xyxy + HalfTexel; - dd = fract(uv.xy * WH.zw); - } - else - { - uv = st.xyxy; - } - - uv = wrapuv(uv); - - if((PS_FMT & FMT_PAL) != 0) - { - c = sample_4p(sample_4a(uv)); - } - else - { - c = sample_4c(uv); - } - } - - // PERF: see the impact of the exansion before/after the interpolation - for (int i = 0; i < 4; i++) - { - if((PS_FMT & ~FMT_PAL) == FMT_24) - { - // FIXME GLSL any only support bvec so try to mix it with notEqual - bvec3 rgb_check = notEqual( c[i].rgb, vec3(0.0f, 0.0f, 0.0f) ); - c[i].a = ( (PS_AEM == 0) || any(rgb_check) ) ? TA.x : 0.0f; - } - else if((PS_FMT & ~FMT_PAL) == FMT_16) - { - // FIXME GLSL any only support bvec so try to mix it with notEqual - bvec3 rgb_check = notEqual( c[i].rgb, vec3(0.0f, 0.0f, 0.0f) ); - c[i].a = c[i].a >= 0.5 ? TA.y : ( (PS_AEM == 0) || any(rgb_check) ) ? TA.x : 0.0f; - } - } - - if(PS_LTF != 0) - { - t = mix(mix(c[0], c[1], dd.x), mix(c[2], c[3], dd.x), dd.y); - } - else - { - t = c[0]; - } - - return t; -} - -#ifdef SUBROUTINE_GL40 -// Function pointer type -subroutine vec4 TfxType(vec4 t, vec4 c); - -// a function pointer variable -layout(location = 2) subroutine uniform TfxType tfx; - -layout(index = 11) subroutine(TfxType) -vec4 tfx_0_tcc_0(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f; - return c_out; -} - -layout(index = 12) subroutine(TfxType) -vec4 tfx_1_tcc_0(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = t.rgb; - return c_out; -} - -layout(index = 13) subroutine(TfxType) -vec4 tfx_2_tcc_0(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - return c_out; -} - -layout(index = 14) subroutine(TfxType) -vec4 tfx_3_tcc_0(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - return c_out; -} - -layout(index = 15) subroutine(TfxType) -vec4 tfx_0_tcc_1(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out = c * t * 255.0f / 128.0f; - return c_out; -} - -layout(index = 16) subroutine(TfxType) -vec4 tfx_1_tcc_1(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out = t; - return c_out; -} - -layout(index = 17) subroutine(TfxType) -vec4 tfx_2_tcc_1(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - c_out.a += t.a; - return c_out; -} - -layout(index = 18) subroutine(TfxType) -vec4 tfx_3_tcc_1(vec4 t, vec4 c) -{ - vec4 c_out = c; - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - c_out.a = t.a; - return c_out; -} - -layout(index = 19) subroutine(TfxType) -vec4 tfx_dummy(vec4 t, vec4 c) -{ - return c; -} - -#else -vec4 tfx(vec4 t, vec4 c) -{ - vec4 c_out = c; - if(PS_TFX == 0) - { - if(PS_TCC != 0) - { - c_out = c * t * 255.0f / 128.0f; - } - else - { - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f; - } - } - else if(PS_TFX == 1) - { - if(PS_TCC != 0) - { - c_out = t; - } - else - { - c_out.rgb = t.rgb; - } - } - else if(PS_TFX == 2) - { - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - - if(PS_TCC != 0) - { - c_out.a += t.a; - } - } - else if(PS_TFX == 3) - { - c_out.rgb = c.rgb * t.rgb * 255.0f / 128.0f + c.a; - - if(PS_TCC != 0) - { - c_out.a = t.a; - } - } - - return c_out; -} -#endif - - -#if 0 -void datst() -{ -#if PS_DATE > 0 - float alpha = sample_rt(PSin_tp.xy).a; - float alpha0x80 = 128.0 / 255; - - if (PS_DATE == 1 && alpha >= alpha0x80) - discard; - else if (PS_DATE == 2 && alpha < alpha0x80) - discard; -#endif -} -#endif - -#ifdef SUBROUTINE_GL40 -// Function pointer type -subroutine void AlphaTestType(vec4 c); - -// a function pointer variable -layout(location = 0) subroutine uniform AlphaTestType atst; - -layout(index = 0) subroutine(AlphaTestType) -void atest_never(vec4 c) -{ - discard; -} - -layout(index = 1) subroutine(AlphaTestType) -void atest_always(vec4 c) -{ - // Nothing to do -} - -layout(index = 2) subroutine(AlphaTestType) -void atest_l(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if (PS_SPRITEHACK == 0) - if ((AREF - a - 0.5f) < 0.0f) - discard; -} - -layout(index = 3) subroutine(AlphaTestType) -void atest_le(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if ((AREF - a + 0.5f) < 0.0f) - discard; -} - -layout(index = 4) subroutine(AlphaTestType) -void atest_e(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if ((0.5f - abs(a - AREF)) < 0.0f) - discard; -} - -layout(index = 5) subroutine(AlphaTestType) -void atest_ge(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if ((a-AREF + 0.5f) < 0.0f) - discard; -} - -layout(index = 6) subroutine(AlphaTestType) -void atest_g(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if ((a-AREF - 0.5f) < 0.0f) - discard; -} - -layout(index = 7) subroutine(AlphaTestType) -void atest_ne(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - if ((abs(a - AREF) - 0.5f) < 0.0f) - discard; -} - -#else -void atst(vec4 c) -{ - float a = trunc(c.a * 255.0 + 0.01); - - if(PS_ATST == 0) // never - { - discard; - } - else if(PS_ATST == 1) // always - { - // nothing to do - } - else if(PS_ATST == 2 ) // l - { - if (PS_SPRITEHACK == 0) - if ((AREF - a - 0.5f) < 0.0f) - discard; - } - else if(PS_ATST == 3 ) // le - { - if ((AREF - a + 0.5f) < 0.0f) - discard; - } - else if(PS_ATST == 4) // e - { - if ((0.5f - abs(a - AREF)) < 0.0f) - discard; - } - else if(PS_ATST == 5) // ge - { - if ((a-AREF + 0.5f) < 0.0f) - discard; - } - else if(PS_ATST == 6) // g - { - if ((a-AREF - 0.5f) < 0.0f) - discard; - } - else if(PS_ATST == 7) // ne - { - if ((abs(a - AREF) - 0.5f) < 0.0f) - discard; - } -} -#endif - -// Note layout stuff might require gl4.3 -#ifdef SUBROUTINE_GL40 -// Function pointer type -subroutine void ColClipType(inout vec4 c); - -// a function pointer variable -layout(location = 1) subroutine uniform ColClipType colclip; - -layout(index = 8) subroutine(ColClipType) -void colclip_0(inout vec4 c) -{ - // nothing to do -} - -layout(index = 9) subroutine(ColClipType) -void colclip_1(inout vec4 c) -{ - // FIXME !!!! - //c.rgb *= c.rgb < 128./255; - bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f); - c.rgb *= vec3(factor); -} - -layout(index = 10) subroutine(ColClipType) -void colclip_2(inout vec4 c) -{ - c.rgb = 256.0f/255.0f - c.rgb; - // FIXME !!!! - //c.rgb *= c.rgb < 128./255; - bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f); - c.rgb *= vec3(factor); -} - -#else -void colclip(inout vec4 c) -{ - if (PS_COLCLIP == 2) - { - c.rgb = 256.0f/255.0f - c.rgb; - } - if (PS_COLCLIP > 0) - { - // FIXME !!!! - //c.rgb *= c.rgb < 128./255; - bvec3 factor = bvec3(128.0f/255.0f, 128.0f/255.0f, 128.0f/255.0f); - c.rgb *= vec3(factor); - } -} -#endif - -void fog(inout vec4 c, float f) -{ - if(PS_FOG != 0) - { - c.rgb = mix(FogColor, c.rgb, f); - } -} - -vec4 ps_color() -{ - vec4 t = sample_color(PSin_t.xy, PSin_t.w); - - vec4 zero = vec4(0.0f, 0.0f, 0.0f, 0.0f); - vec4 one = vec4(1.0f, 1.0f, 1.0f, 1.0f); -#if PS_IIP == 1 - vec4 c = clamp(tfx(t, PSin_c), zero, one); -#else - vec4 c = clamp(tfx(t, PSin_fc), zero, one); -#endif - - atst(c); - - fog(c, PSin_t.z); - - colclip(c); - - if(PS_CLR1 != 0) // needed for Cd * (As/Ad/F + 1) blending modes - { - c.rgb = vec3(1.0f, 1.0f, 1.0f); - } - - return c; -} - -#if pGL_ES -void ps_main() -{ - vec4 c = ps_color(); - c.a *= 2.0; - SV_Target0 = c; -} -#endif - -#if !pGL_ES -void ps_main() -{ -#if PS_DATE == 3 && !defined(DISABLE_GL42_image) - int stencil_ceil = imageLoad(img_prim_min, ivec2(gl_FragCoord.xy)); - // Note gl_PrimitiveID == stencil_ceil will be the primitive that will update - // the bad alpha value so we must keep it. - - if (gl_PrimitiveID > stencil_ceil) { - discard; - } -#endif - - vec4 c = ps_color(); - - float alpha = c.a * 2.0; - - if(PS_AOUT != 0) // 16 bit output - { - float a = 128.0f / 255.0; // alpha output will be 0x80 - - c.a = (PS_FBA != 0) ? a : step(0.5, c.a) * a; - } - else if(PS_FBA != 0) - { - if(c.a < 0.5) c.a += 0.5; - } - - // Get first primitive that will write a failling alpha value -#if PS_DATE == 1 && !defined(DISABLE_GL42_image) - // DATM == 0 - // Pixel with alpha equal to 1 will failed - if (c.a > 127.5f / 255.0f) { - imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID); - } - //memoryBarrier(); -#elif PS_DATE == 2 && !defined(DISABLE_GL42_image) - // DATM == 1 - // Pixel with alpha equal to 0 will failed - if (c.a < 127.5f / 255.0f) { - imageAtomicMin(img_prim_min, ivec2(gl_FragCoord.xy), gl_PrimitiveID); - } -#endif - - -#if (PS_DATE == 2 || PS_DATE == 1) && !defined(DISABLE_GL42_image) - // Don't write anything on the framebuffer - // Note: you can't use discard because it will also drop - // image operation -#else - SV_Target0 = c; - SV_Target1 = vec4(alpha, alpha, alpha, alpha); -#endif - -} -#endif // !pGL_ES - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/resource.h pcsx2-1.4.0/plugins/GSdx/resource.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,113 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by GSdx.rc +// + +#define IDC_PALTEX 2001 +#define IDC_LOGZ 2002 +#define IDC_CODECS 2003 +#define IDC_RESOLUTION 2004 +#define IDC_RESX_EDIT 2005 +#define IDC_RESY_EDIT 2006 +#define IDC_AA1 2007 +#define IDC_SWTHREADS_TEXT 2008 +#define IDC_SWTHREADS 2009 +#define IDC_SWTHREADS_EDIT 2010 +#define IDC_FILTER_TEXT 2011 +#define IDC_FILTER 2012 +#define IDC_DITHERING 2013 +#define IDC_RESX 2014 +#define IDC_RESY 2015 +#define IDD_CONFIG 2016 +#define IDB_LOGO9 2017 +#define IDB_LOGO10 2018 +#define IDB_LOGOGL 2019 +#define IDC_FBA 2020 +#define IDC_LOGO9 2021 +#define IDC_LOGO11 2022 +#define IDC_LOGOGL 2023 +#define IDD_CAPTURE 2024 +#define IDD_GPUCONFIG 2025 +#define IDC_RENDERER 2026 +#define IDC_INTERLACE 2027 +#define IDC_ASPECTRATIO 2028 +#define IDC_ALPHAHACK 2029 +#define IDC_SCALE 2030 +#define IDC_UPSCALE_MULTIPLIER 2031 +#define IDC_BROWSE 2032 +#define IDC_OFFSETHACK 2033 +#define IDC_FILENAME 2034 +#define IDC_SKIPDRAWHACK 2035 +#define IDC_WIDTH 2036 +#define IDC_HEIGHT 2037 +#define IDC_CONFIGURE 2038 +#define IDC_ACCURATE_BLEND_UNIT_TEXT 2039 +#define IDC_WINDOWED 2040 +#define IDC_SKIPDRAWHACKEDIT 2041 +#define IDC_SPRITEHACK 2042 +#define IDC_SATURATION_SLIDER 2043 +#define IDC_BRIGHTNESS_SLIDER 2044 +#define IDC_CONTRAST_SLIDER 2045 +#define IDC_SHADEBUTTON 2046 +#define IDC_SHADEBOOST 2047 +#define IDC_HACKS_ENABLED 2048 +#define IDC_SATURATION_TEXT 2049 +#define IDC_BRIGHTNESS_TEXT 2050 +#define IDC_CONTRAST_TEXT 2051 +#define IDC_MSAACB 2052 +#define IDC_HACKSBUTTON 2053 +#define IDC_WILDHACK 2054 +#define IDC_CHECK_DISABLE_ALL_HACKS 2055 +#define IDC_ALPHASTENCIL 2056 +#define IDC_ADAPTER 2057 +#define IDC_TCOFFSETX 2058 +#define IDC_TCOFFSETX2 2059 +#define IDC_TCOFFSETY 2060 +#define IDC_TCOFFSETY2 2061 +#define IDC_FXAA 2062 +#define IDC_SHADER_FX 2063 +#define IDC_AFCOMBO_TEXT 2064 +#define IDC_AFCOMBO 2065 +#define IDC_OPENCL_DEVICE 2066 +#define IDC_OPENCL_TEXT 2067 +#define IDC_ACCURATE_BLEND_UNIT 2068 +#define IDC_ACCURATE_DATE 2069 +#define IDC_ROUND_SPRITE 2070 +#define IDC_ALIGN_SPRITE 2071 +#define IDC_CRC_LEVEL 2072 +#define IDC_CRC_LEVEL_TEXT 2073 +#define IDC_TC_DEPTH 2074 +#define IDC_COLORSPACE 2075 +#define IDC_SHADER_FX_EDIT 2076 +#define IDC_SHADER_FX_CONF_EDIT 2077 +#define IDC_SHADER_FX_BUTTON 2078 +#define IDC_SHADER_FX_CONF_BUTTON 2079 +#define IDC_SHADER_FX_TEXT 2080 +#define IDC_SHADER_FX_CONF_TEXT 2081 +#define IDC_CUSTOM_TEXT 2082 +#define IDC_UPSCALE_MULTIPLIER_TEXT 2083 +#define IDC_MIPMAP 2084 +#define IDC_PRELOAD_GS 2085 +#define IDC_TVSHADER 2086 +#define IDR_CONVERT_FX 10000 +#define IDR_TFX_FX 10001 +#define IDR_MERGE_FX 10002 +#define IDR_INTERLACE_FX 10003 +#define IDR_FXAA_FX 10004 +#define IDR_CS_FX 10005 +#define IDD_SHADER 10006 +#define IDR_SHADEBOOST_FX 10007 +#define IDR_TFX_CL 10008 +#define IDD_HACKS 10009 +#define IDC_STATIC -1 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 10013 +#define _APS_NEXT_COMMAND_VALUE 32771 +#define _APS_NEXT_CONTROL_VALUE 2087 +#define _APS_NEXT_SYMED_VALUE 5000 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/stdafx.cpp pcsx2-1.4.0/plugins/GSdx/stdafx.cpp --- pcsx2-1.3.1+dfsg/plugins/GSdx/stdafx.cpp 2014-07-12 17:57:26.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/stdafx.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -103,7 +103,7 @@ #endif -#if !defined(_MSC_VER) && !defined(HAVE_ALIGNED_MALLOC) +#if !defined(_MSC_VER) // declare linux equivalents (alignment must be power of 2 (1,2,4...2^15) @@ -111,18 +111,9 @@ void* _aligned_malloc(size_t size, size_t alignment) { - ASSERT(alignment <= 0x8000); - size_t r = (size_t)malloc(size + --alignment + 2); - size_t o = (r + 2 + alignment) & ~(size_t)alignment; - if(!r) return NULL; - ((uint16*)o)[-1] = (uint16)(o-r); - return (void*)o; -} - -void _aligned_free(void* p) -{ - if(!p) return; - free((void*)((size_t)p-((uint16*)p)[-1])); + void *ret = 0; + posix_memalign(&ret, alignment, size); + return ret; } #endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/stdafx.h pcsx2-1.4.0/plugins/GSdx/stdafx.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/stdafx.h 2014-12-12 20:56:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/stdafx.h 2016-01-05 17:28:08.000000000 +0000 @@ -42,8 +42,7 @@ #include #include #include -#include "../../common/include/comptr.h" - +#include #define D3DCOLORWRITEENABLE_RGBA (D3DCOLORWRITEENABLE_RED | D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_BLUE | D3DCOLORWRITEENABLE_ALPHA) #define D3D11_SHADER_MACRO D3D10_SHADER_MACRO @@ -76,6 +75,11 @@ typedef uint32 uptr; #endif + +// xbyak compatibilities +typedef int64 sint64; +#define MIE_INTEGER_TYPE_DEFINED + // stdc #include @@ -96,11 +100,30 @@ #include #include #include +#include +#include +#include +#include using namespace std; #include +#if _MSC_VER >= 1800 || !defined(_WINDOWS) +#include +#include +#define hash_map unordered_map +#define hash_set unordered_set +#else +#include +#include +using namespace stdext; +#endif + +#ifdef __linux__ +#include // mkdir +#endif + #ifdef _WINDOWS // Note use GL/glcorearb.h on the future @@ -109,11 +132,6 @@ #include #include "GLLoader.h" - #include - #include - - using namespace stdext; - // hashing algoritms at: http://www.cris.com/~Ttwang/tech/inthash.htm // default hash_compare does ldiv and other crazy stuff to reduce speed @@ -172,24 +190,11 @@ #else - #define hash_map map - #define hash_set set - - //#include - //#include - -#ifdef ENABLE_GLES - #include - #include -#else // Note use GL/glcorearb.h on the future #include #include -#endif #include "GLLoader.h" - //using namespace __gnu_cxx; - #define DIRECTORY_SEPARATOR '/' #endif @@ -231,7 +236,13 @@ #define countof(a) (sizeof(a) / sizeof(a[0])) +// GCC removes the variable as dead code and generates some warnings. +// Stack is automatically realigned due to SSE/AVX operations +#ifdef __GNUC__ +#define ALIGN_STACK(n) (void)0; +#else #define ALIGN_STACK(n) __aligned(int, n) __dummy; +#endif #ifndef RESTRICT @@ -279,6 +290,16 @@ #define _M_SSE 0x501 #elif defined(__AVX__) #define _M_SSE 0x500 +#elif defined(__SSE4_2__) + #define _M_SSE 0x402 +#elif defined(__SSE4_1__) + #define _M_SSE 0x401 +#elif defined(__SSSE3__) + #define _M_SSE 0x301 +#elif defined(__SSE2__) + #define _M_SSE 0x200 +#elif defined(__SSE__) + #define _M_SSE 0x100 #endif #endif @@ -340,19 +361,20 @@ #undef abs #if !defined(_MSC_VER) - #if defined(__USE_ISOC11) && !defined(ASAN_WORKAROUND) // not supported yet on gcc 4.9 #define _aligned_malloc(size, a) aligned_alloc(a, size) - static inline void _aligned_free(void* p) { free(p); } - #elif !defined(HAVE_ALIGNED_MALLOC) + #else extern void* _aligned_malloc(size_t size, size_t alignment); - extern void _aligned_free(void* p); #endif + static inline void _aligned_free(void* p) { + free(p); + } + // http://svn.reactos.org/svn/reactos/trunk/reactos/include/crt/mingw32/intrin_x86.h?view=markup __forceinline unsigned char _BitScanForward(unsigned long* const Index, const unsigned long Mask) @@ -473,3 +495,34 @@ #endif #endif + +#define GL_INSERT(type, code, sev, ...) \ + do if (glDebugMessageInsert) glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, type, code, sev, -1, format(__VA_ARGS__).c_str()); while(0); + +// Except apple any sane driver support this extension +#if defined(_DEBUG) +#define GL_CACHE(...) GL_INSERT(GL_DEBUG_TYPE_OTHER, 0xFEAD, GL_DEBUG_SEVERITY_NOTIFICATION, __VA_ARGS__) +#else +#define GL_CACHE(...) (0); +#endif + +#if defined(ENABLE_OGL_DEBUG) +#define GL_PUSH(...) do if (glPushDebugGroup) glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0xBAD, -1, format(__VA_ARGS__).c_str()); while(0); +#define GL_POP() do if (glPopDebugGroup) glPopDebugGroup(); while(0); +#define GL_INS(...) GL_INSERT(GL_DEBUG_TYPE_ERROR, 0xDEAD, GL_DEBUG_SEVERITY_MEDIUM, __VA_ARGS__) +#define GL_PERF(...) GL_INSERT(GL_DEBUG_TYPE_PERFORMANCE, 0xFEE1, GL_DEBUG_SEVERITY_NOTIFICATION, __VA_ARGS__) +#else +#define GL_PUSH(...) (0); +#define GL_POP() (0); +#define GL_INS(...) (0); +#define GL_PERF(...) (0); +#endif + +// Helper path to dump texture +#ifdef _WINDOWS +const std::string root_sw("c:\\temp1\\_"); +const std::string root_hw("c:\\temp2\\_"); +#else +const std::string root_sw("/tmp/GS_SW_dump/"); +const std::string root_hw("/tmp/GS_HW_dump/"); +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/targetver.h pcsx2-1.4.0/plugins/GSdx/targetver.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/targetver.h 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/targetver.h 2016-01-05 17:28:08.000000000 +0000 @@ -1,56 +1,56 @@ -/* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#pragma once -/* -// Including SDKDDKVer.h defines the highest available Windows platform. - -// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and -// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. - -#include -*/ - -// The following macros define the minimum required platform. The minimum required platform -// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run -// your application. The macros work by enabling all features available on platform versions up to and -// including the version specified. - -// Modify the following defines if you have to target a platform prior to the ones specified below. -// Refer to MSDN for the latest info on corresponding values for different platforms. - -#ifndef WINVER // Specifies that the minimum required platform is Windows Vista. -#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. -#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. -#endif - -#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. -#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. -#endif - -#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. -#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. -#endif - -#include +/* + * Copyright (C) 2007-2009 Gabest + * http://www.gabest.org + * + * 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#pragma once +/* +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include +*/ + +// The following macros define the minimum required platform. The minimum required platform +// is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run +// your application. The macros work by enabling all features available on platform versions up to and +// including the version specified. + +// Modify the following defines if you have to target a platform prior to the ones specified below. +// Refer to MSDN for the latest info on corresponding values for different platforms. + +#ifndef WINVER // Specifies that the minimum required platform is Windows Vista. +#define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. +#define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. +#endif + +#ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. +#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. +#endif + +#ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. +#define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. +#endif + +#include diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/avx_vs10.props pcsx2-1.4.0/plugins/GSdx/vsprops/avx_vs10.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/avx_vs10.props 2013-06-10 18:48:14.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/avx_vs10.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - - - - AVX - - - <_ProjectFileVersion>10.0.30128.1 - - - - _M_SSE=0x500;%(PreprocessorDefinitions) - StreamingSIMDExtensions2 - - - - - $(SSEtype) - - + + + + AVX + + + <_ProjectFileVersion>10.0.30128.1 + + + + _M_SSE=0x500;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + + + $(SSEtype) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/avx_vs2013.props pcsx2-1.4.0/plugins/GSdx/vsprops/avx_vs2013.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/avx_vs2013.props 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/avx_vs2013.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - - - - AVX - - - <_ProjectFileVersion>10.0.30128.1 - - - - _M_SSE=0x500;%(PreprocessorDefinitions) - AdvancedVectorExtensions - - - - - $(SSEtype) - - + + + + AVX + + + <_ProjectFileVersion>10.0.30128.1 + + + + _M_SSE=0x500;%(PreprocessorDefinitions) + AdvancedVectorExtensions + + + + + $(SSEtype) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/common.props pcsx2-1.4.0/plugins/GSdx/vsprops/common.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/common.props 2014-09-19 20:48:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/common.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,35 +1,32 @@ - - - - <_ProjectFileVersion>10.0.30128.1 - $(SolutionDir)bin\$(PcsxSubsection)\ - $(PlatformName)\$(Configuration)\ - - - - true - _WINDOWS;_WIN32_WINNT=0x500;%(PreprocessorDefinitions) - Fast - false - Level4 - ProgramDatabase - 4996;4995;4324;4100;4101;4201;4556;4127;4512;%(DisableSpecificWarnings) - $(DXSDK_DIR)include;$(VTUNE_AMPLIFIER_XE_2015_DIR)include;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\opencl;%(AdditionalIncludeDirectories) - true - - - d3d11.lib;d3dx11.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;dxgi.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;opengl32.lib;opencl.lib;comsuppw.lib;%(AdditionalDependencies) - d3d9.dll;d3dx9_43.dll;d3d11.dll;d3dx11_43.dll;dxgi.dll;opengl32.dll;%(DelayLoadDLLs) - true - Windows - false - $(VTUNE_AMPLIFIER_XE_2015_DIR)lib32;%(AdditionalLibraryDirectories) - - - .\postBuild.cmd "$(TargetPath)" "$(TargetName)" $(TargetExt) $(PcsxSubsection) - - - "$(SvnCommonDir)\vsprops\preBuild.cmd" "$(ProjectRootDir)" - - + + + + <_ProjectFileVersion>10.0.30128.1 + $(SolutionDir)bin\$(PcsxSubsection)\ + $(PlatformName)\$(Configuration)\ + + + + true + _WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions) + Fast + false + Level4 + ProgramDatabase + 4456;4458;4996;4995;4324;4100;4101;4201;4556;4127;4512;%(DisableSpecificWarnings) + $(DXSDK_DIR)include;$(VTUNE_AMPLIFIER_XE_2015_DIR)include;$(SolutionDir)3rdparty;$(SolutionDir)3rdparty\opencl;%(AdditionalIncludeDirectories) + true + + + d3d11.lib;d3dx11.lib;d3d10_1.lib;d3dx10.lib;d3d9.lib;d3dx9.lib;dxgi.lib;dxguid.lib;winmm.lib;strmiids.lib;xinput.lib;opengl32.lib;opencl.lib;comsuppw.lib;comctl32.lib;%(AdditionalDependencies) + d3d9.dll;d3dx9_43.dll;d3d11.dll;d3dx11_43.dll;dxgi.dll;opengl32.dll;%(DelayLoadDLLs) + true + Windows + false + $(VTUNE_AMPLIFIER_XE_2015_DIR)lib32;%(AdditionalLibraryDirectories) + + + "$(SvnCommonDir)\vsprops\preBuild.cmd" "$(ProjectRootDir)" + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/debug.props pcsx2-1.4.0/plugins/GSdx/vsprops/debug.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/debug.props 2011-02-24 04:55:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/debug.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,16 +1,16 @@ - - - - <_ProjectFileVersion>10.0.30128.1 - $(ProjectName)$(PlatformArchitecture)-$(SSEtype)-dbg - true - - - - Disabled - _DEBUG;%(PreprocessorDefinitions) - StackFrameRuntimeCheck - MultiThreadedDebugDLL - - + + + + <_ProjectFileVersion>10.0.30128.1 + $(ProjectName)$(PlatformArchitecture)-$(SSEtype)-dbg + true + + + + Disabled + _DEBUG;%(PreprocessorDefinitions) + StackFrameRuntimeCheck + MultiThreadedDebugDLL + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/ProjectRootDir.props pcsx2-1.4.0/plugins/GSdx/vsprops/ProjectRootDir.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/ProjectRootDir.props 2011-02-19 10:57:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/ProjectRootDir.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,26 +1,26 @@ - - - - $(ProjectDir). - $(ProjectRootDir)\..\.. - $(SvnRootDir)\common - plugins - - - <_ProjectFileVersion>10.0.30128.1 - - - - $(ProjectRootDir) - - - $(SvnRootDir) - - - $(SvnCommonDir) - - - $(PcsxSubsection) - - + + + + $(ProjectDir). + $(ProjectRootDir)\..\.. + $(SvnRootDir)\common + plugins + + + <_ProjectFileVersion>10.0.30128.1 + + + + $(ProjectRootDir) + + + $(SvnRootDir) + + + $(SvnCommonDir) + + + $(PcsxSubsection) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/release.props pcsx2-1.4.0/plugins/GSdx/vsprops/release.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/release.props 2011-02-24 04:55:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/release.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,26 +1,26 @@ - - - - <_ProjectFileVersion>10.0.30128.1 - false - $(ProjectName)$(PlatformArchitecture)-$(SSEtype) - - - - MaxSpeed - AnySuitable - true - Speed - true - true - NDEBUG;_SECURE_SCL=0;%(PreprocessorDefinitions) - true - MultiThreadedDLL - false - - - true - true - - + + + + <_ProjectFileVersion>10.0.30128.1 + false + $(ProjectName)$(PlatformArchitecture)-$(SSEtype) + + + + MaxSpeed + AnySuitable + true + Speed + true + true + NDEBUG;_SECURE_SCL=0;%(PreprocessorDefinitions) + true + MultiThreadedDLL + false + + + true + true + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/sse2.props pcsx2-1.4.0/plugins/GSdx/vsprops/sse2.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/sse2.props 2011-02-19 10:57:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/sse2.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - - - - SSE2 - - - <_ProjectFileVersion>10.0.30128.1 - - - - _M_SSE=0x200;%(PreprocessorDefinitions) - StreamingSIMDExtensions2 - - - - - $(SSEtype) - - + + + + SSE2 + + + <_ProjectFileVersion>10.0.30128.1 + + + + _M_SSE=0x200;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + + + $(SSEtype) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/sse4.props pcsx2-1.4.0/plugins/GSdx/vsprops/sse4.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/sse4.props 2011-02-19 10:57:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/sse4.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - - - - SSE4 - - - <_ProjectFileVersion>10.0.30128.1 - - - - _M_SSE=0x401;%(PreprocessorDefinitions) - StreamingSIMDExtensions2 - - - - - $(SSEtype) - - + + + + SSE4 + + + <_ProjectFileVersion>10.0.30128.1 + + + + _M_SSE=0x401;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + + + $(SSEtype) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/ssse3.props pcsx2-1.4.0/plugins/GSdx/vsprops/ssse3.props --- pcsx2-1.3.1+dfsg/plugins/GSdx/vsprops/ssse3.props 2011-02-19 10:57:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/vsprops/ssse3.props 2016-01-05 17:28:08.000000000 +0000 @@ -1,21 +1,21 @@ - - - - SSSE3 - - - <_ProjectFileVersion>10.0.30128.1 - <_PropertySheetDisplayName>sse3 - - - - _M_SSE=0x301;%(PreprocessorDefinitions) - StreamingSIMDExtensions2 - - - - - $(SSEtype) - - + + + + SSSE3 + + + <_ProjectFileVersion>10.0.30128.1 + <_PropertySheetDisplayName>sse3 + + + + _M_SSE=0x301;%(PreprocessorDefinitions) + StreamingSIMDExtensions2 + + + + + $(SSEtype) + + \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/work_to_use_gpu_buffer_directly.patch pcsx2-1.4.0/plugins/GSdx/work_to_use_gpu_buffer_directly.patch --- pcsx2-1.3.1+dfsg/plugins/GSdx/work_to_use_gpu_buffer_directly.patch 2014-04-06 13:11:19.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/work_to_use_gpu_buffer_directly.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp -index a4c90a4..7a6b9a2 100644 ---- a/plugins/GSdx/GS.cpp -+++ b/plugins/GSdx/GS.cpp -@@ -58,7 +58,7 @@ extern bool RunLinuxDialog(); - #define PS2E_X86 0x01 // 32 bit - #define PS2E_X86_64 0x02 // 64 bit - --static GSRenderer* s_gs = NULL; -+GSRenderer* s_gs = NULL; - static void (*s_irq)() = NULL; - static uint8* s_basemem = NULL; - static int s_renderer = -1; -diff --git a/plugins/GSdx/GS.h b/plugins/GSdx/GS.h -index ec414a3..b5ce390 100644 ---- a/plugins/GSdx/GS.h -+++ b/plugins/GSdx/GS.h -@@ -1245,3 +1245,5 @@ enum {FREEZE_LOAD=0, FREEZE_SAVE=1, FREEZE_SIZE=2}; - struct GSFreezeData {int size; uint8* data;}; - - enum stateType {ST_WRITE, ST_TRANSFER, ST_VSYNC}; -+ -+enum GpuVertexType {GPU_VERTEX_BUFFER, GPU_INDEX_BUFFER}; -diff --git a/plugins/GSdx/GSDevice.h b/plugins/GSdx/GSDevice.h -index 97eb407..3042802 100644 ---- a/plugins/GSdx/GSDevice.h -+++ b/plugins/GSdx/GSDevice.h -@@ -157,6 +157,8 @@ public: - - GSTexture* GetCurrent(); - -+ virtual void* AllocateGpuBuffer(GpuVertexType type, uint32 max_count) { return NULL; } -+ - void Merge(GSTexture* st[2], GSVector4* sr, GSVector4* dr, const GSVector2i& fs, bool slbg, bool mmod, const GSVector4& c); - void Interlace(const GSVector2i& ds, int field, int mode, float yoffset); - void FXAA(); -diff --git a/plugins/GSdx/GSDeviceOGL.cpp b/plugins/GSdx/GSDeviceOGL.cpp -index 5d34ff4..0a85fd2 100644 ---- a/plugins/GSdx/GSDeviceOGL.cpp -+++ b/plugins/GSdx/GSDeviceOGL.cpp -@@ -986,6 +986,10 @@ void GSDeviceOGL::EndScene() - m_state.vb->EndScene(); - } - -+void GSDeviceOGL::AllocateGpuBuffer(GpuVertexType type, uint32 max_count) -+{ -+} -+ - void GSDeviceOGL::IASetVertexState(GSVertexBufferStateOGL* vb) - { - if (vb == NULL) vb = m_vb; -diff --git a/plugins/GSdx/GSDeviceOGL.h b/plugins/GSdx/GSDeviceOGL.h -index a1680a8..a2aff3c 100644 ---- a/plugins/GSdx/GSDeviceOGL.h -+++ b/plugins/GSdx/GSDeviceOGL.h -@@ -628,4 +628,6 @@ class GSDeviceOGL : public GSDevice - GLuint GetPaletteSamplerID(); - - void Barrier(GLbitfield b); -+ -+ void* AllocateGpuBuffer(GpuVertexType type, uint32 max_count); - }; -diff --git a/plugins/GSdx/GSState.cpp b/plugins/GSdx/GSState.cpp -index 2c7995c..735a269 100644 ---- a/plugins/GSdx/GSState.cpp -+++ b/plugins/GSdx/GSState.cpp -@@ -23,6 +23,9 @@ - #include "GSState.h" - #include "GSdx.h" - -+#include "GSRendererOGL.h"; -+extern GSRenderer* s_gs; -+ - //#define Offset_ST // Fixes Persona3 mini map alignment which is off even in software rendering - - GSState::GSState() -@@ -2285,8 +2288,20 @@ void GSState::GrowVertexBuffer() - { - int maxcount = std::max(m_vertex.maxcount * 3 / 2, 10000); - -- GSVertex* vertex = (GSVertex*)_aligned_malloc(sizeof(GSVertex) * maxcount, 32); -- uint32* index = (uint32*)_aligned_malloc(sizeof(uint32) * maxcount * 3, 32); // worst case is slightly less than vertex number * 3 -+ GSVertex* vertex = NULL; -+ uint32* index = NULL; -+ -+ if (s_gs && s_gs->m_dev) { -+ vertex = (GSVertex*)s_gs->m_dev->AllocateGpuBuffer(GPU_VERTEX_BUFFER, maxcount); -+ index = (uint32*)s_gs->m_dev->AllocateGpuBuffer(GPU_INDEX_BUFFER, maxcount*3); -+ } else { -+ maxcount = 10; -+ } -+ -+ if (!vertex || !index) { -+ vertex = (GSVertex*)_aligned_malloc(sizeof(GSVertex) * maxcount, 32); -+ index = (uint32*)_aligned_malloc(sizeof(uint32) * maxcount * 3, 32); // worst case is slightly less than vertex number * 3 -+ } - - if (!vertex || !index) - { diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak.h pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak.h 2014-04-13 08:06:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak.h 2016-01-05 17:28:08.000000000 +0000 @@ -48,18 +48,42 @@ #include #include #include -#if (__cplusplus >= 201103) || (_MSC_VER >= 1500) || defined(__GXX_EXPERIMENTAL_CXX0X__) +#ifndef NDEBUG +#include +#endif + +//#define XBYAK_USE_MMAP_ALLOCATOR +#if !defined(__GNUC__) || defined(__MINGW32__) + #undef XBYAK_USE_MMAP_ALLOCATOR +#endif + +// This covers -std=(gnu|c)++(0x|11|1y), -stdlib=libc++, and modern Microsoft. +#if ((defined(_MSC_VER) && (_MSC_VER >= 1600)) || defined(_LIBCPP_VERSION) ||\ + ((__cplusplus >= 201103) || defined(__GXX_EXPERIMENTAL_CXX0X__))) #include - #if defined(_MSC_VER) && (_MSC_VER < 1600) - #define XBYAK_USE_TR1_UNORDERED_MAP - #else - #define XBYAK_USE_UNORDERED_MAP - #endif -#elif (__GNUC__ >= 4 && __GNUC_MINOR__ >= 5) || (__clang_major__ >= 3) + #define XBYAK_STD_UNORDERED_MAP std::unordered_map + #define XBYAK_STD_UNORDERED_MULTIMAP std::unordered_multimap + +// Clang/llvm-gcc and ICC-EDG in 'GCC-mode' always claim to be GCC 4.2, using +// libstdcxx 20070719 (from GCC 4.2.1, the last GPL 2 version). +// These headers have been expanded/fixed in various forks. +// In F.S.F. 'real' GCC, issues with the tr headers were resolved in GCC 4.5. +#elif defined(__GNUC__) && (__GNUC__ >= 4) && ((__GNUC_MINOR__ >= 5) || \ + ((__GLIBCXX__ >= 20070719) && (__GNUC_MINOR__ >= 2) && \ + (defined(__INTEL_COMPILER) || defined(__llvm__)))) #include - #define XBYAK_USE_TR1_UNORDERED_MAP + #define XBYAK_STD_UNORDERED_MAP std::tr1::unordered_map + #define XBYAK_STD_UNORDERED_MULTIMAP std::tr1::unordered_multimap + +#elif defined(_MSC_VER) && (_MSC_VER >= 1500) && (_MSC_VER < 1600) + #include + #define XBYAK_STD_UNORDERED_MAP std::tr1::unordered_map + #define XBYAK_STD_UNORDERED_MULTIMAP std::tr1::unordered_multimap + #else #include + #define XBYAK_STD_UNORDERED_MAP std::map + #define XBYAK_STD_UNORDERED_MULTIMAP std::multimap #endif #ifdef _WIN32 #include @@ -73,10 +97,10 @@ #include #endif -#if defined(__x86_64__) && !defined(__MINGW64__) - #define XBYAK64_GCC -#elif defined(_WIN64) - #define XBYAK64_WIN +#if defined(_WIN64) || defined(__MINGW64__) || (defined(__CYGWIN__) && defined(__x86_64__)) + #define XBYAK64_WIN +#elif defined(__x86_64__) + #define XBYAK64_GCC #endif #if !defined(XBYAK64) && !defined(XBYAK32) #if defined(XBYAK64_GCC) || defined(XBYAK64_WIN) @@ -86,6 +110,10 @@ #endif #endif +#if (__cplusplus >= 201103) || (_MSC_VER >= 1800) + #define XBYAK_VARIADIC_TEMPLATE +#endif + #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4514) /* remove inline function */ @@ -100,9 +128,9 @@ enum { DEFAULT_MAX_CODE_SIZE = 4096, - VERSION = 0x4000 /* 0xABCD = A.BC(D) */ + VERSION = 0x4840 /* 0xABCD = A.BC(D) */ }; -/* + #ifndef MIE_INTEGER_TYPE_DEFINED #define MIE_INTEGER_TYPE_DEFINED #ifdef _MSC_VER @@ -116,7 +144,7 @@ typedef unsigned short uint16; typedef unsigned char uint8; #endif -*/ + #ifndef MIE_ALIGN #ifdef _MSC_VER #define MIE_ALIGN(x) __declspec(align(x)) @@ -128,7 +156,7 @@ #define MIE_PACK(x, y, z, w) ((x) * 64 + (y) * 16 + (z) * 4 + (w)) #endif -enum Error { +enum { ERR_NONE = 0, ERR_BAD_ADDRESSING, ERR_CODE_IS_TOO_BIG, @@ -149,7 +177,7 @@ ERR_MEM_SIZE_IS_NOT_SPECIFIED, ERR_BAD_MEM_SIZE, ERR_BAD_ST_COMBINATION, - ERR_OVER_LOCAL_LABEL, + ERR_OVER_LOCAL_LABEL, // not used ERR_UNDER_LOCAL_LABEL, ERR_CANT_ALLOC, ERR_ONLY_T_NEAR_IS_SUPPORTED_IN_AUTO_GROW, @@ -157,44 +185,71 @@ ERR_BAD_PNUM, ERR_BAD_TNUM, ERR_BAD_VSIB_ADDRESSING, + ERR_CANT_CONVERT, + ERR_LABEL_ISNOT_SET_BY_L, + ERR_LABEL_IS_ALREADY_SET_BY_L, + ERR_BAD_LABEL_STR, + ERR_MUNMAP, ERR_INTERNAL }; +class Error : public std::exception { + int err_; +public: + explicit Error(int err) : err_(err) + { + if (err_ < 0 || err_ > ERR_INTERNAL) { + fprintf(stderr, "bad err=%d in Xbyak::Error\n", err_); + exit(1); + } + } + operator int() const { return err_; } + const char *what() const throw() + { + static const char *errTbl[] = { + "none", + "bad addressing", + "code is too big", + "bad scale", + "esp can't be index", + "bad combination", + "bad size of register", + "imm is too big", + "bad align", + "label is redefined", + "label is too far", + "label is not found", + "code is not copyable", + "bad parameter", + "can't protect", + "can't use 64bit disp(use (void*))", + "offset is too big", + "MEM size is not specified", + "bad mem size", + "bad st combination", + "over local label", + "under local label", + "can't alloc", + "T_SHORT is not supported in AutoGrow", + "bad protect mode", + "bad pNum", + "bad tNum", + "bad vsib addressing", + "can't convert", + "label is not set by L()", + "label is already set by L()", + "bad label string", + "err munmap", + "internal error", + }; + assert((size_t)err_ < sizeof(errTbl) / sizeof(*errTbl)); + return errTbl[err_]; + } +}; + inline const char *ConvertErrorToString(Error err) { - static const char errTbl[][40] = { - "none", - "bad addressing", - "code is too big", - "bad scale", - "esp can't be index", - "bad combination", - "bad size of register", - "imm is too big", - "bad align", - "label is redefined", - "label is too far", - "label is not found", - "code is not copyable", - "bad parameter", - "can't protect", - "can't use 64bit disp(use (void*))", - "offset is too big", - "MEM size is not specified", - "bad mem size", - "bad st combination", - "over local label", - "under local label", - "can't alloc", - "T_SHORT is not supported in AutoGrow", - "bad protect mode", - "bad pNum", - "bad tNum", - "bad vsib addressing", - "internal error", - }; - if (err < 0 || err > ERR_INTERNAL) return 0; - return errTbl[err]; + return err.what(); } inline void *AlignedMalloc(size_t size, size_t alignment) @@ -228,7 +283,6 @@ } namespace inner { -enum { debug = 1 }; static const size_t ALIGN_PAGE_SIZE = 4096; inline bool IsInDisp8(uint32 x) { return 0xFFFFFF80 <= x || x <= 0x7F; } @@ -237,7 +291,7 @@ inline uint32 VerifyInInt32(uint64 x) { #ifdef XBYAK64 - if (!IsInInt32(x)) throw ERR_OFFSET_IS_TOO_BIG; + if (!IsInInt32(x)) throw Error(ERR_OFFSET_IS_TOO_BIG); #endif return static_cast(x); } @@ -261,6 +315,39 @@ virtual bool useProtect() const { return true; } }; +#ifdef XBYAK_USE_MMAP_ALLOCATOR +class MmapAllocator : Allocator { + typedef XBYAK_STD_UNORDERED_MAP SizeList; + SizeList sizeList_; +public: + uint8 *alloc(size_t size) + { + const size_t alignedSizeM1 = inner::ALIGN_PAGE_SIZE - 1; + size = (size + alignedSizeM1) & ~alignedSizeM1; +#ifdef MAP_ANONYMOUS + const int mode = MAP_PRIVATE | MAP_ANONYMOUS; +#elif defined(MAP_ANON) + const int mode = MAP_PRIVATE | MAP_ANON; +#else + #error "not supported" +#endif + void *p = mmap(NULL, size, PROT_READ | PROT_WRITE, mode, -1, 0); + if (p == MAP_FAILED) throw Error(ERR_CANT_ALLOC); + assert(p); + sizeList_[(uintptr_t)p] = size; + return (uint8*)p; + } + void free(uint8 *p) + { + if (p == 0) return; + SizeList::iterator i = sizeList_.find((uintptr_t)p); + if (i == sizeList_.end()) throw Error(ERR_BAD_PARAMETER); + if (munmap((void*)i->first, i->second) < 0) throw Error(ERR_MUNMAP); + sizeList_.erase(i); + } +}; +#endif + class Operand { private: uint8 idx_; // 0..15, MSB = 1 if spl/bpl/sil/dil @@ -307,6 +394,14 @@ bool isMEM(int bit = 0) const { return is(MEM, bit); } bool isFPU() const { return is(FPU); } bool isExt8bit() const { return (idx_ & 0x80) != 0; } + // ah, ch, dh, bh? + bool isHigh8bit() const + { + if (!isBit(8)) return false; + if (isExt8bit()) return false; + const int idx = getIdx(); + return AH <= idx && idx <= BH; + } // any bit is accetable if bit == 0 bool is(int kind, uint32 bit = 0) const { @@ -319,10 +414,10 @@ const int idx = getIdx(); if (kind_ == REG) { if (isExt8bit()) { - static const char tbl[4][4] = { "spl", "bpl", "sil", "dil" }; + static const char *tbl[4] = { "spl", "bpl", "sil", "dil" }; return tbl[idx - 4]; } - static const char tbl[4][16][5] = { + static const char *tbl[4][16] = { { "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh", "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" }, { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" }, { "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" }, @@ -330,24 +425,32 @@ }; return tbl[bit_ == 8 ? 0 : bit_ == 16 ? 1 : bit_ == 32 ? 2 : 3][idx]; } else if (isYMM()) { - static const char tbl[16][5] = { "ym0", "ym1", "ym2", "ym3", "ym4", "ym5", "ym6", "ym7", "ym8", "ym9", "ym10", "ym11", "ym12", "ym13", "ym14", "ym15" }; + static const char *tbl[16] = { "ym0", "ym1", "ym2", "ym3", "ym4", "ym5", "ym6", "ym7", "ym8", "ym9", "ym10", "ym11", "ym12", "ym13", "ym14", "ym15" }; return tbl[idx]; } else if (isXMM()) { - static const char tbl[16][5] = { "xm0", "xm1", "xm2", "xm3", "xm4", "xm5", "xm6", "xm7", "xm8", "xm9", "xm10", "xm11", "xm12", "xm13", "xm14", "xm15" }; + static const char *tbl[16] = { "xm0", "xm1", "xm2", "xm3", "xm4", "xm5", "xm6", "xm7", "xm8", "xm9", "xm10", "xm11", "xm12", "xm13", "xm14", "xm15" }; return tbl[idx]; } else if (isMMX()) { - static const char tbl[8][4] = { "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" }; + static const char *tbl[8] = { "mm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7" }; return tbl[idx]; } else if (isFPU()) { - static const char tbl[8][4] = { "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7" }; + static const char *tbl[8] = { "st0", "st1", "st2", "st3", "st4", "st5", "st6", "st7" }; return tbl[idx]; } - throw ERR_INTERNAL; + throw Error(ERR_INTERNAL); } bool operator==(const Operand& rhs) const { return idx_ == rhs.idx_ && kind_ == rhs.kind_ && bit_ == rhs.bit_; } bool operator!=(const Operand& rhs) const { return !operator==(rhs); } }; +class Label; + +struct Reg8; +struct Reg16; +struct Reg32; +#ifdef XBYAK64 +struct Reg64; +#endif class Reg : public Operand { bool hasRex() const { return isExt8bit() | isREG(64) | isExtIdx(); } public: @@ -359,6 +462,12 @@ { return (hasRex() || base.hasRex()) ? uint8(0x40 | ((isREG(64) | base.isREG(64)) ? 8 : 0) | (isExtIdx() ? 4 : 0)| (base.isExtIdx() ? 1 : 0)) : 0; } + Reg8 cvt8() const; + Reg16 cvt16() const; + Reg32 cvt32() const; +#ifdef XBYAK64 + Reg64 cvt64() const; +#endif }; struct Reg8 : public Reg { @@ -385,87 +494,9 @@ explicit Fpu(int idx = 0) : Reg(idx, Operand::FPU, 32) { } }; -// register for addressing(32bit or 64bit) -class Reg32e : public Reg { -public: - // [base_(this) + index_ * scale_ + disp_] - Reg index_; - int scale_; // 0(index is none), 1, 2, 4, 8 - uint32 disp_; -private: - friend class Address; - friend Reg32e operator+(const Reg32e& a, const Reg32e& b) - { - if (a.scale_ == 0) { - if (b.scale_ == 0) { // base + base - if (b.getIdx() == Operand::ESP) { // [reg + esp] => [esp + reg] - return Reg32e(b, a, 1, a.disp_ + b.disp_); - } else { - return Reg32e(a, b, 1, a.disp_ + b.disp_); - } - } else if (b.isNone()) { // base + index - return Reg32e(a, b.index_, b.scale_, a.disp_ + b.disp_); - } - } - throw ERR_BAD_ADDRESSING; - } - friend Reg32e operator*(const Reg32e& r, int scale) - { - if (r.scale_ == 0) { - if (scale == 1) { - return r; - } else if (scale == 2 || scale == 4 || scale == 8) { - return Reg32e(Reg(), r, scale, r.disp_); - } - } - throw ERR_BAD_SCALE; - } - friend Reg32e operator+(const Reg32e& r, unsigned int disp) - { - return Reg32e(r, r.index_, r.scale_, r.disp_ + disp); - } - friend Reg32e operator+(unsigned int disp, const Reg32e& r) - { - return operator+(r, disp); - } - friend Reg32e operator-(const Reg32e& r, unsigned int disp) - { - return operator+(r, -static_cast(disp)); - } -public: - explicit Reg32e(int idx, int bit) - : Reg(idx, REG, bit) - , index_() - , scale_(0) - , disp_(0) - { - } - Reg32e(const Reg& base, const Reg& index, int scale, unsigned int disp, bool allowUseEspIndex = false) - : Reg(base) - , index_(index) - , scale_(scale) - , disp_(disp) - { - if (scale != 0 && scale != 1 && scale != 2 && scale != 4 && scale != 8) throw ERR_BAD_SCALE; - if (!base.isNone() && !index.isNone() && base.getBit() != index.getBit()) throw ERR_BAD_COMBINATION; - if (!allowUseEspIndex && index.getIdx() == Operand::ESP) throw ERR_ESP_CANT_BE_INDEX; - } - Reg32e optimize() const // select smaller size - { - // [reg * 2] => [reg + reg] - if (isNone() && !index_.isNone() && scale_ == 2) { - const Reg index(index_.getIdx(), Operand::REG, index_.getBit()); - return Reg32e(index, index, 1, disp_); - } - return *this; - } - bool operator==(const Reg32e& rhs) const - { - if (getIdx() == rhs.getIdx() && index_.getIdx() == rhs.getIdx() && scale_ == rhs.scale_ && disp_ == rhs.disp_) return true; - return false; - } +struct Reg32e : public Reg { + explicit Reg32e(int idx, int bit) : Reg(idx, Operand::REG, bit) {} }; - struct Reg32 : public Reg32e { explicit Reg32(int idx = 0) : Reg32e(idx, 32) {} }; @@ -474,103 +505,162 @@ explicit Reg64(int idx = 0) : Reg32e(idx, 64) {} }; struct RegRip { - uint32 disp_; - RegRip(unsigned int disp = 0) : disp_(disp) {} - friend const RegRip operator+(const RegRip& r, unsigned int disp) { - return RegRip(r.disp_ + disp); - } - friend const RegRip operator-(const RegRip& r, unsigned int disp) { - return RegRip(r.disp_ - disp); + sint64 disp_; + Label* label_; + explicit RegRip(sint64 disp = 0, Label* label = 0) : disp_(disp), label_(label) {} + friend const RegRip operator+(const RegRip& r, sint64 disp) { + return RegRip(r.disp_ + disp, r.label_); + } + friend const RegRip operator-(const RegRip& r, sint64 disp) { + return RegRip(r.disp_ - disp, r.label_); + } + friend const RegRip operator+(const RegRip& r, Label& label) { + if (r.label_) throw Error(ERR_BAD_ADDRESSING); + return RegRip(r.disp_, &label); } }; #endif -// QQQ:need to refactor -struct Vsib { - // [index_ * scale_ + base_ + disp_] - uint8 indexIdx_; // xmm reg idx - uint8 scale_; // 0(none), 1, 2, 4, 8 - uint8 baseIdx_; // base reg idx - uint8 baseBit_; // 0(none), 32, 64 - uint32 disp_; - bool isYMM_; // idx is YMM +inline Reg8 Reg::cvt8() const +{ + const int idx = getIdx(); + if (isBit(8)) return Reg8(idx, isExt8bit()); +#ifdef XBYAK32 + if (idx >= 4) throw Error(ERR_CANT_CONVERT); +#endif + return Reg8(idx, 4 <= idx && idx < 8); +} + +inline Reg16 Reg::cvt16() const +{ + const int idx = getIdx(); + if (isBit(8) && (4 <= idx && idx < 8) && !isExt8bit()) throw Error(ERR_CANT_CONVERT); + return Reg16(idx); +} + +inline Reg32 Reg::cvt32() const +{ + const int idx = getIdx(); + if (isBit(8) && (4 <= idx && idx < 8) && !isExt8bit()) throw Error(ERR_CANT_CONVERT); + return Reg32(idx); +} + +#ifdef XBYAK64 +inline Reg64 Reg::cvt64() const +{ + const int idx = getIdx(); + if (isBit(8) && (4 <= idx && idx < 8) && !isExt8bit()) throw Error(ERR_CANT_CONVERT); + return Reg64(idx); +} +#endif + +class RegExp { public: - static inline void verifyScale(int scale) + struct SReg { + uint16 bit:9; // 32/64/128/256 none if 0 + uint16 idx:7; + SReg() : bit(0), idx(0) { } + void set(const Reg& r) { this->bit = uint16(r.getBit()); this->idx = uint16(r.getIdx()); } + bool operator==(const SReg& rhs) const { return bit == rhs.bit && idx == rhs.idx; } + }; + RegExp(size_t disp = 0) : disp_(disp), scale_(0) { } + RegExp(const Reg& r, int scale = 1) + : disp_(0) + , scale_(scale) + { + if (!r.is(Reg::REG, 32|64) && !r.is(Reg::XMM|Reg::YMM)) throw Error(ERR_BAD_SIZE_OF_REGISTER); + if (scale != 1 && scale != 2 && scale != 4 && scale != 8) throw Error(ERR_BAD_SCALE); + if (r.getBit() >= 128 || scale != 1) { // xmm/ymm is always index + index_.set(r); + } else { + base_.set(r); + } + } + bool isVsib() const { return index_.bit >= 128; } + bool isYMM() const { return index_.bit >= 256; } + RegExp optimize() const // select smaller size + { + // [reg * 2] => [reg + reg] + if (!isVsib() && !base_.bit && index_.bit && scale_ == 2) { + RegExp ret = *this; + ret.base_ = index_; + ret.scale_ = 1; + return ret; + } + return *this; + } + bool operator==(const RegExp& rhs) const { - if (scale != 1 && scale != 2 && scale != 4 && scale != 8) throw ERR_BAD_SCALE; + return base_ == rhs.base_ && index_ == rhs.index_ && disp_ == rhs.disp_; } - int getIndexIdx() const { return indexIdx_; } + const SReg& getBase() const { return base_; } + const SReg& getIndex() const { return index_; } int getScale() const { return scale_; } - int getBaseIdx() const { return baseIdx_; } - int getBaseBit() const { return baseBit_; } - bool isYMM() const { return isYMM_; } - uint32 getDisp() const { return disp_; } - Vsib(int indexIdx, int scale, bool isYMM, int baseIdx = 0, int baseBit = 0, uint32 disp = 0) - : indexIdx_((uint8)indexIdx) - , scale_((uint8)scale) - , baseIdx_((uint8)baseIdx) - , baseBit_((uint8)baseBit) - , disp_(disp) - , isYMM_(isYMM) + uint32 getDisp() const { return uint32(disp_); } + void verify() const { + if (base_.bit >= 128) throw Error(ERR_BAD_SIZE_OF_REGISTER); + if (index_.bit && index_.bit <= 64) { + if (index_.idx == Operand::ESP) throw Error(ERR_ESP_CANT_BE_INDEX); + if (base_.bit && base_.bit != index_.bit) throw Error(ERR_BAD_SIZE_OF_REGISTER); + } } +private: + friend RegExp operator+(const RegExp& a, const RegExp& b); + friend RegExp operator-(const RegExp& e, size_t disp); + /* + [base_ + index_ * scale_ + disp_] + base : Reg32e, index : Reg32e(w/o esp), Xmm, Ymm + */ + size_t disp_; + int scale_; + SReg base_; + SReg index_; }; -inline Vsib operator*(const Xmm& x, int scale) -{ - Vsib::verifyScale(scale); - return Vsib(x.getIdx(), scale, x.isYMM()); -} -inline Vsib operator+(const Xmm& x, uint32 disp) -{ - return Vsib(x.getIdx(), 1, x.isYMM(), 0, 0, disp); -} -inline Vsib operator+(const Xmm& x, const Reg32e& r) + +inline RegExp operator+(const RegExp& a, const RegExp& b) { - if (!r.index_.isNone()) throw ERR_BAD_COMBINATION; - return Vsib(x.getIdx(), 1, x.isYMM(), r.getIdx(), r.getBit(), r.disp_); + if (a.index_.bit && b.index_.bit) throw Error(ERR_BAD_ADDRESSING); + RegExp ret = a; + if (!ret.index_.bit) { ret.index_ = b.index_; ret.scale_ = b.scale_; } + if (b.base_.bit) { + if (ret.base_.bit) { + if (ret.index_.bit) throw Error(ERR_BAD_ADDRESSING); + // base + base => base + index * 1 + ret.index_ = b.base_; + // [reg + esp] => [esp + reg] + if (ret.index_.idx == Operand::ESP) std::swap(ret.base_, ret.index_); + ret.scale_ = 1; + } else { + ret.base_ = b.base_; + } + } + ret.disp_ += b.disp_; + return ret; } -inline Vsib operator+(const Vsib& vs, uint32 disp) +inline RegExp operator*(const Reg& r, int scale) { - Vsib ret(vs); - ret.disp_ += disp; - return ret; + return RegExp(r, scale); } -inline Vsib operator+(const Vsib& vs, const Reg32e& r) +inline RegExp operator-(const RegExp& e, size_t disp) { - if (vs.getBaseBit() || !r.index_.isNone()) throw ERR_BAD_COMBINATION; - Vsib ret(vs); - ret.baseIdx_ = (uint8)r.getIdx(); - ret.baseBit_ = (uint8)r.getBit(); - ret.disp_ += r.disp_; + RegExp ret = e; + ret.disp_ -= disp; return ret; } -inline Vsib operator+(uint32 disp, const Xmm& x) { return x + disp; } -inline Vsib operator+(uint32 disp, const Vsib& vs) { return vs + disp; } -inline Vsib operator+(const Reg32e& r, const Xmm& x) { return x + r; } -inline Vsib operator+(const Reg32e& r, const Vsib& vs) { return vs + r; } // 2nd parameter for constructor of CodeArray(maxSize, userPtr, alloc) void *const AutoGrow = (void*)1; class CodeArray { - enum { - MAX_FIXED_BUF_SIZE = 8 - }; enum Type { - FIXED_BUF, // use buf_(non alignment, non protect) - USER_BUF, // use userPtr(non alignment, non protect) + USER_BUF = 1, // use userPtr(non alignment, non protect) ALLOC_BUF, // use new(alignment, protect) AUTO_GROW // automatically move and grow memory if necessary }; + CodeArray(const CodeArray& rhs); void operator=(const CodeArray&); bool isAllocType() const { return type_ == ALLOC_BUF || type_ == AUTO_GROW; } - Type getType(size_t maxSize, void *userPtr) const - { - if (userPtr == AutoGrow) return AUTO_GROW; - if (userPtr) return USER_BUF; - if (maxSize <= MAX_FIXED_BUF_SIZE) return FIXED_BUF; - return ALLOC_BUF; - } struct AddrInfo { size_t codeOffset; // position to write size_t jmpAddr; // value to write @@ -588,9 +678,12 @@ typedef std::list AddrInfoList; AddrInfoList addrInfoList_; const Type type_; +#ifdef XBYAK_USE_MMAP_ALLOCATOR + MmapAllocator defaultAllocator_; +#else Allocator defaultAllocator_; +#endif Allocator *alloc_; - uint8 buf_[MAX_FIXED_BUF_SIZE]; // for FIXED_BUF protected: size_t maxSize_; uint8 *top_; @@ -603,7 +696,7 @@ { const size_t newSize = (std::max)(DEFAULT_MAX_CODE_SIZE, maxSize_ * 2); uint8 *newTop = alloc_->alloc(newSize); - if (newTop == 0) throw ERR_CANT_ALLOC; + if (newTop == 0) throw Error(ERR_CANT_ALLOC); for (size_t i = 0; i < size_; i++) newTop[i] = top_[i]; alloc_->free(top_); top_ = newTop; @@ -618,20 +711,20 @@ uint64 disp = i->getVal(top_); rewrite(i->codeOffset, disp, i->jmpSize); } - if (alloc_->useProtect() && !protect(top_, size_, true)) throw ERR_CANT_PROTECT; + if (alloc_->useProtect() && !protect(top_, size_, true)) throw Error(ERR_CANT_PROTECT); } public: - CodeArray(size_t maxSize = MAX_FIXED_BUF_SIZE, void *userPtr = 0, Allocator *allocator = 0) - : type_(getType(maxSize, userPtr)) - , alloc_(allocator ? allocator : &defaultAllocator_) + explicit CodeArray(size_t maxSize, void *userPtr = 0, Allocator *allocator = 0) + : type_(userPtr == AutoGrow ? AUTO_GROW : userPtr ? USER_BUF : ALLOC_BUF) + , alloc_(allocator ? allocator : (Allocator*)&defaultAllocator_) , maxSize_(maxSize) - , top_(isAllocType() ? alloc_->alloc((std::max)(maxSize, 1)) : type_ == USER_BUF ? reinterpret_cast(userPtr) : buf_) + , top_(type_ == USER_BUF ? reinterpret_cast(userPtr) : alloc_->alloc((std::max)(maxSize, 1))) , size_(0) { - if (maxSize_ > 0 && top_ == 0) throw ERR_CANT_ALLOC; + if (maxSize_ > 0 && top_ == 0) throw Error(ERR_CANT_ALLOC); if ((type_ == ALLOC_BUF && alloc_->useProtect()) && !protect(top_, maxSize, true)) { alloc_->free(top_); - throw ERR_CANT_PROTECT; + throw Error(ERR_CANT_PROTECT); } } virtual ~CodeArray() @@ -641,16 +734,6 @@ alloc_->free(top_); } } - CodeArray(const CodeArray& rhs) - : type_(rhs.type_) - , defaultAllocator_(rhs.defaultAllocator_) - , maxSize_(rhs.maxSize_) - , top_(buf_) - , size_(rhs.size_) - { - if (type_ != FIXED_BUF) throw ERR_CODE_ISNOT_COPYABLE; - for (size_t i = 0; i < size_; i++) top_[i] = rhs.top_[i]; - } void resetSize() { size_ = 0; @@ -662,7 +745,7 @@ if (type_ == AUTO_GROW) { growMemory(); } else { - throw ERR_CODE_IS_TOO_BIG; + throw Error(ERR_CODE_IS_TOO_BIG); } } top_[size_++] = static_cast(code); @@ -673,11 +756,12 @@ } void db(uint64 code, int codeSize) { - if (codeSize > 8) throw ERR_BAD_PARAMETER; + if (codeSize > 8) throw Error(ERR_BAD_PARAMETER); for (int i = 0; i < codeSize; i++) db(static_cast(code >> (i * 8))); } void dw(uint32 code) { db(code, 2); } void dd(uint32 code) { db(code, 4); } + void dq(uint64 code) { db(code, 8); } const uint8 *getCode() const { return top_; } template const F getCode() const { return CastTo(top_); } @@ -687,7 +771,7 @@ size_t getSize() const { return size_; } void setSize(size_t size) { - if (size >= maxSize_) throw ERR_OFFSET_IS_TOO_BIG; + if (size > maxSize_) throw Error(ERR_OFFSET_IS_TOO_BIG); size_ = size; } void dump() const @@ -720,7 +804,7 @@ void rewrite(size_t offset, uint64 disp, size_t size) { assert(offset < maxSize_); - if (size != 1 && size != 2 && size != 4 && size != 8) throw ERR_BAD_PARAMETER; + if (size != 1 && size != 2 && size != 4 && size != 8) throw Error(ERR_BAD_PARAMETER); uint8 *const data = top_ + offset; for (size_t i = 0; i < size; i++) { data[i] = static_cast(disp >> (i * 8)); @@ -731,10 +815,6 @@ addrInfoList_.push_back(AddrInfo(offset, val, size, mode)); } bool isAutoGrow() const { return type_ == AUTO_GROW; } - void updateRegField(uint8 regIdx) const - { - *top_ = (*top_ & B11000111) | ((regIdx << 3) & B00111000); - } /** change exec permission of memory @param addr [in] buffer address @@ -769,79 +849,104 @@ } }; -class Address : public Operand, public CodeArray { - void operator=(const Address&); - uint64 disp_; +class Address : public Operand { + mutable uint8 top_[6]; // 6 = 1(ModRM) + 1(SIB) + 4(disp) + uint8 size_; uint8 rex_; + size_t disp_; + const Label* label_; bool isOnlyDisp_; bool is64bitDisp_; + bool is32bit_; mutable bool isVsib_; bool isYMM_; - void verify() const { if (isVsib_) throw ERR_BAD_VSIB_ADDRESSING; } - const bool is32bit_; + void verify() const { if (isVsib_) throw Error(ERR_BAD_VSIB_ADDRESSING); } public: - Address(uint32 sizeBit, bool isOnlyDisp, uint64 disp, bool is32bit, bool is64bitDisp = false, bool isVsib = false, bool isYMM = false) + Address(uint32 sizeBit, bool isOnlyDisp, size_t disp, bool is32bit, bool is64bitDisp = false, bool isVsib = false, bool isYMM = false) : Operand(0, MEM, sizeBit) - , CodeArray(6) // 6 = 1(ModRM) + 1(SIB) + 4(disp) - , disp_(disp) + , size_(0) , rex_(0) + , disp_(disp) + , label_(0) , isOnlyDisp_(isOnlyDisp) , is64bitDisp_(is64bitDisp) + , is32bit_(is32bit) , isVsib_(isVsib) , isYMM_(isYMM) - , is32bit_(is32bit) { } + void db(int code) + { + if (size_ >= sizeof(top_)) throw Error(ERR_CODE_IS_TOO_BIG); + top_[size_++] = static_cast(code); + } + void dd(uint32 code) { for (int i = 0; i < 4; i++) db(code >> (i * 8)); } + const uint8 *getCode() const { return top_; } + size_t getSize() const { return size_; } + void updateRegField(uint8 regIdx) const + { + *top_ = (*top_ & B11000111) | ((regIdx << 3) & B00111000); + } void setVsib(bool isVsib) const { isVsib_ = isVsib; } bool isVsib() const { return isVsib_; } bool isYMM() const { return isYMM_; } bool is32bit() const { verify(); return is32bit_; } bool isOnlyDisp() const { verify(); return isOnlyDisp_; } // for mov eax - uint64 getDisp() const { verify(); return disp_; } + size_t getDisp() const { verify(); return disp_; } uint8 getRex() const { verify(); return rex_; } bool is64bitDisp() const { verify(); return is64bitDisp_; } // for moffset void setRex(uint8 rex) { rex_ = rex; } + void setLabel(const Label* label) { label_ = label; } + const Label* getLabel() const { return label_; } }; class AddressFrame { private: void operator=(const AddressFrame&); - Address makeAddress(const Reg32e& r, bool isVsib, bool isYMM) const + Address makeAddress(const RegExp& e) const { - Address frame(bit_, (r.isNone() && r.index_.isNone()), r.disp_, r.isBit(32) || r.index_.isBit(32), false, isVsib, isYMM); + e.verify(); + const bool isVsib = e.isVsib(); + const bool isYMM = e.isYMM(); + const RegExp::SReg& base = e.getBase(); + const RegExp::SReg& index = e.getIndex(); + const uint32 disp = e.getDisp(); + Address frame(bit_, (!base.bit && !index.bit), disp, base.bit == 32 || index.bit == 32, false, isVsib, isYMM); enum { mod00 = 0, mod01 = 1, mod10 = 2 }; int mod; - if (r.isNone() || ((r.getIdx() & 7) != Operand::EBP && r.disp_ == 0)) { + if (!base.bit || ((base.idx & 7) != Operand::EBP && disp == 0)) { mod = mod00; - } else if (inner::IsInDisp8(r.disp_)) { + } else if (inner::IsInDisp8(disp)) { mod = mod01; } else { mod = mod10; } - const int base = r.isNone() ? Operand::EBP : (r.getIdx() & 7); + const int baseIdx = base.bit ? (base.idx & 7) : Operand::EBP; /* ModR/M = [2:3:3] = [Mod:reg/code:R/M] */ - bool hasSIB = !r.index_.isNone() || (r.getIdx() & 7) == Operand::ESP; + bool hasSIB = index.bit || (base.idx & 7) == Operand::ESP; #ifdef XBYAK64 - if (r.isNone() && r.index_.isNone()) hasSIB = true; + if (!base.bit && !index.bit) hasSIB = true; #endif - if (!hasSIB) { - frame.db((mod << 6) | base); - } else { + if (hasSIB) { frame.db((mod << 6) | Operand::ESP); /* SIB = [2:3:3] = [SS:index:base(=rm)] */ - int index = r.index_.isNone() ? Operand::ESP : (r.index_.getIdx() & 7); - int ss = (r.scale_ == 8) ? 3 : (r.scale_ == 4) ? 2 : (r.scale_ == 2) ? 1 : 0; - frame.db((ss << 6) | (index << 3) | base); + const int indexIdx = index.bit ? (index.idx & 7) : Operand::ESP; + const int scale = e.getScale(); + const int ss = (scale == 8) ? 3 : (scale == 4) ? 2 : (scale == 2) ? 1 : 0; + frame.db((ss << 6) | (indexIdx << 3) | baseIdx); + } else { + frame.db((mod << 6) | baseIdx); } if (mod == mod01) { - frame.db(r.disp_); - } else if (mod == mod10 || (mod == mod00 && r.isNone())) { - frame.dd(r.disp_); - } - uint8 rex = ((r.getIdx() | r.index_.getIdx()) < 8) ? 0 : uint8(0x40 | ((r.index_.getIdx() >> 3) << 1) | (r.getIdx() >> 3)); - frame.setRex(rex); + frame.db(disp); + } else if (mod == mod10 || (mod == mod00 && !base.bit)) { + frame.dd(disp); + } + int rex = ((index.idx >> 3) << 1) | (base.idx >> 3); + if (rex) rex |= 0x40; + frame.setRex(uint8(rex)); return frame; } public: @@ -851,10 +956,10 @@ { size_t adr = reinterpret_cast(disp); #ifdef XBYAK64 - if (adr > 0xFFFFFFFFU) throw ERR_OFFSET_IS_TOO_BIG; + if (adr > 0xFFFFFFFFU) throw Error(ERR_OFFSET_IS_TOO_BIG); #endif - Reg32e r(Reg(), Reg(), 0, static_cast(adr)); - return operator[](r); + RegExp e(static_cast(adr)); + return operator[](e); } #ifdef XBYAK64 Address operator[](uint64 disp) const @@ -864,33 +969,18 @@ Address operator[](const RegRip& addr) const { Address frame(bit_, true, addr.disp_, false); - frame.db(B00000101); - frame.dd(addr.disp_); - return frame; - } -#endif - Address operator[](const Reg32e& in) const - { - return makeAddress(in.optimize(), false, false); - } - Address operator[](const Vsib& vs) const - { - if (vs.getBaseBit() == 0) { -#ifdef XBYAK64 - const int bit = 64; -#else - const int bit = 32; -#endif - const Reg32e r(Reg(), Reg32e(vs.getIndexIdx(), bit), vs.getScale(), vs.getDisp(), true); - return makeAddress(r, true, vs.isYMM()); + frame.db(0x05); + if (addr.label_) { + frame.setLabel(addr.label_); } else { - const Reg32e r(Reg32e(vs.getBaseIdx(), vs.getBaseBit()), Reg32e(vs.getIndexIdx(), vs.getBaseBit()), vs.getScale(), vs.getDisp(), true); - return makeAddress(r, true, vs.isYMM()); + frame.dd(inner::VerifyInInt32(addr.disp_)); } + return frame; } - Address operator[](const Xmm& x) const +#endif + Address operator[](const RegExp& e) const { - return operator[](x + 0); + return makeAddress(e.optimize()); } }; @@ -898,156 +988,252 @@ size_t endOfJmp; /* offset from top to the end address of jmp */ int jmpSize; inner::LabelMode mode; + size_t disp; // disp for [rip + disp] + explicit JmpLabel(size_t endOfJmp = 0, int jmpSize = 0, inner::LabelMode mode = inner::LasIs, size_t disp = 0) + : endOfJmp(endOfJmp), jmpSize(jmpSize), mode(mode), disp(disp) + { + } }; +class LabelManager; + class Label { - CodeArray *base_; - int anonymousCount_; // for @@, @f, @b - enum { - maxStack = 10 - }; - int stack_[maxStack]; - int stackPos_; - int usedCount_; - int localCount_; // for .*** + mutable LabelManager *mgr; + mutable int id; + friend class LabelManager; public: -private: -#ifdef XBYAK_USE_UNORDERED_MAP - typedef std::unordered_map DefinedList; - typedef std::unordered_multimap UndefinedList; -#elif defined(XBYAK_USE_TR1_UNORDERED_MAP) - typedef std::tr1::unordered_map DefinedList; - typedef std::tr1::unordered_multimap UndefinedList; -#else - typedef std::map DefinedList; - typedef std::multimap UndefinedList; -#endif - DefinedList definedList_; - UndefinedList undefinedList_; + Label() : mgr(0), id(0) {} + Label(const Label& rhs); + Label& operator=(const Label& rhs); + ~Label(); + int getId() const { return id; } - /* - @@ --> @@. - @b --> @@. - @f --> @@. - .*** -> .***. - */ - std::string convertLabel(const char *label) const - { - std::string newLabel(label); - if (newLabel == "@f" || newLabel == "@F") { - newLabel = std::string("@@") + toStr(anonymousCount_ + 1); - } else if (newLabel == "@b" || newLabel == "@B") { - newLabel = std::string("@@") + toStr(anonymousCount_); - } else if (*label == '.') { - newLabel += toStr(localCount_); - } - return newLabel; - } -public: - Label() - : base_(0) - , anonymousCount_(0) - , stackPos_(1) - , usedCount_(0) - , localCount_(0) - { - } - void reset() - { - base_ = 0; - anonymousCount_ = 0; - stackPos_ = 1; - usedCount_ = 0; - localCount_ = 0; - definedList_.clear(); - undefinedList_.clear(); - } - void enterLocal() + // backward compatibility + static std::string toStr(int num) { - if (stackPos_ == maxStack) throw ERR_OVER_LOCAL_LABEL; - localCount_ = stack_[stackPos_++] = ++usedCount_; + char buf[16]; +#ifdef _MSC_VER + _snprintf_s +#else + snprintf +#endif + (buf, sizeof(buf), ".%08x", num); + return buf; } - void leaveLocal() +}; + +class LabelManager { + // for string label + struct SlabelVal { + size_t offset; + SlabelVal(size_t offset) : offset(offset) {} + }; + typedef XBYAK_STD_UNORDERED_MAP SlabelDefList; + typedef XBYAK_STD_UNORDERED_MULTIMAP SlabelUndefList; + struct SlabelState { + SlabelDefList defList; + SlabelUndefList undefList; + }; + typedef std::list StateList; + // for Label class + struct ClabelVal { + ClabelVal(size_t offset = 0) : offset(offset), refCount(1) {} + size_t offset; + int refCount; + }; + typedef XBYAK_STD_UNORDERED_MAP ClabelDefList; + typedef XBYAK_STD_UNORDERED_MULTIMAP ClabelUndefList; + + CodeArray *base_; + // global : stateList_.front(), local : stateList_.back() + StateList stateList_; + mutable int labelId_; + ClabelDefList clabelDefList_; + ClabelUndefList clabelUndefList_; + + int getId(const Label& label) const { - if (stackPos_ == 1) throw ERR_UNDER_LOCAL_LABEL; - localCount_ = stack_[--stackPos_ - 1]; + if (label.id == 0) label.id = labelId_++; + return label.id; } - void set(CodeArray *base) { base_ = base; } - void define(const char *label, size_t addrOffset, const uint8 *addr) + template + void define_inner(DefList& defList, UndefList& undefList, const T& labelId, size_t addrOffset) { - std::string newLabel(label); - if (newLabel == "@@") { - newLabel += toStr(++anonymousCount_); - } else if (*label == '.') { - newLabel += toStr(localCount_); - } - label = newLabel.c_str(); // add label - DefinedList::value_type item(label, addrOffset); - std::pair ret = definedList_.insert(item); - if (!ret.second) throw ERR_LABEL_IS_REDEFINED; + typename DefList::value_type item(labelId, addrOffset); + std::pair ret = defList.insert(item); + if (!ret.second) throw Error(ERR_LABEL_IS_REDEFINED); // search undefined label for (;;) { - UndefinedList::iterator itr = undefinedList_.find(label); - if (itr == undefinedList_.end()) break; + typename UndefList::iterator itr = undefList.find(labelId); + if (itr == undefList.end()) break; const JmpLabel *jmp = &itr->second; const size_t offset = jmp->endOfJmp - jmp->jmpSize; size_t disp; if (jmp->mode == inner::LaddTop) { disp = addrOffset; } else if (jmp->mode == inner::Labs) { - disp = size_t(addr); + disp = size_t(base_->getCurr()); } else { - disp = addrOffset - jmp->endOfJmp; - if (jmp->jmpSize <= 4) disp = inner::VerifyInInt32(disp); - if (jmp->jmpSize == 1 && !inner::IsInDisp8((uint32)disp)) throw ERR_LABEL_IS_TOO_FAR; + disp = addrOffset - jmp->endOfJmp + jmp->disp; +#ifdef XBYAK64 + if (jmp->jmpSize <= 4 && !inner::IsInInt32(disp)) throw Error(ERR_OFFSET_IS_TOO_BIG); +#endif + if (jmp->jmpSize == 1 && !inner::IsInDisp8((uint32)disp)) throw Error(ERR_LABEL_IS_TOO_FAR); } if (base_->isAutoGrow()) { base_->save(offset, disp, jmp->jmpSize, jmp->mode); } else { base_->rewrite(offset, disp, jmp->jmpSize); } - undefinedList_.erase(itr); + undefList.erase(itr); } } - bool getOffset(size_t *offset, const char *label) const + template + bool getOffset_inner(const DefList& defList, size_t *offset, const T& label) const { - std::string newLabel = convertLabel(label); - DefinedList::const_iterator itr = definedList_.find(newLabel); - if (itr != definedList_.end()) { - *offset = itr->second; - return true; + typename DefList::const_iterator i = defList.find(label); + if (i == defList.end()) return false; + *offset = i->second.offset; + return true; + } + friend class Label; + void incRefCount(int id) { clabelDefList_[id].refCount++; } + void decRefCount(int id) + { + ClabelDefList::iterator i = clabelDefList_.find(id); + if (i == clabelDefList_.end()) return; + if (i->second.refCount == 1) { + clabelDefList_.erase(id); } else { - return false; + --i->second.refCount; + } + } + template + bool hasUndefinedLabel_inner(const T& list) const + { +#ifndef NDEBUG + for (typename T::const_iterator i = list.begin(); i != list.end(); ++i) { + std::cerr << "undefined label:" << i->first << std::endl; + } +#endif + return !list.empty(); + } +public: + LabelManager() + { + reset(); + } + void reset() + { + base_ = 0; + labelId_ = 1; + stateList_.clear(); + stateList_.push_back(SlabelState()); + stateList_.push_back(SlabelState()); + } + void enterLocal() + { + stateList_.push_back(SlabelState()); + } + void leaveLocal() + { + if (stateList_.size() <= 2) throw Error(ERR_UNDER_LOCAL_LABEL); + if (hasUndefinedLabel_inner(stateList_.back().undefList)) throw Error(ERR_LABEL_IS_NOT_FOUND); + stateList_.pop_back(); + } + void set(CodeArray *base) { base_ = base; } + void defineSlabel(std::string label) + { + if (label == "@b" || label == "@f") throw Error(ERR_BAD_LABEL_STR); + if (label == "@@") { + SlabelDefList& defList = stateList_.front().defList; + SlabelDefList::iterator i = defList.find("@f"); + if (i != defList.end()) { + defList.erase(i); + label = "@b"; + } else { + i = defList.find("@b"); + if (i != defList.end()) { + defList.erase(i); + } + label = "@f"; + } } + SlabelState& st = *label.c_str() == '.' ? stateList_.back() : stateList_.front(); + define_inner(st.defList, st.undefList, label, base_->getSize()); + } + void defineClabel(const Label& label) + { + define_inner(clabelDefList_, clabelUndefList_, getId(label), base_->getSize()); + label.mgr = this; } - void addUndefinedLabel(const char *label, const JmpLabel& jmp) + void assign(Label& dst, const Label& src) { - std::string newLabel = convertLabel(label); - undefinedList_.insert(UndefinedList::value_type(newLabel, jmp)); + ClabelDefList::const_iterator i = clabelDefList_.find(src.id); + if (i == clabelDefList_.end()) throw Error(ERR_LABEL_ISNOT_SET_BY_L); + define_inner(clabelDefList_, clabelUndefList_, dst.id, i->second.offset); + dst.mgr = this; } - bool hasUndefinedLabel() const + bool getOffset(size_t *offset, std::string& label) const { - if (inner::debug) { - for (UndefinedList::const_iterator i = undefinedList_.begin(); i != undefinedList_.end(); ++i) { - fprintf(stderr, "undefined label:%s\n", i->first.c_str()); + const SlabelDefList& defList = stateList_.front().defList; + if (label == "@b") { + if (defList.find("@f") != defList.end()) { + label = "@f"; + } else if (defList.find("@b") == defList.end()) { + throw Error(ERR_LABEL_IS_NOT_FOUND); + } + } else if (label == "@f") { + if (defList.find("@f") != defList.end()) { + label = "@b"; } } - return !undefinedList_.empty(); + const SlabelState& st = *label.c_str() == '.' ? stateList_.back() : stateList_.front(); + return getOffset_inner(st.defList, offset, label); } - static inline std::string toStr(int num) + bool getOffset(size_t *offset, const Label& label) const { - char buf[16]; -#ifdef _MSC_VER - _snprintf_s -#else - snprintf -#endif - (buf, sizeof(buf), ".%08x", num); - return buf; + return getOffset_inner(clabelDefList_, offset, getId(label)); } + void addUndefinedLabel(const std::string& label, const JmpLabel& jmp) + { + SlabelState& st = *label.c_str() == '.' ? stateList_.back() : stateList_.front(); + st.undefList.insert(SlabelUndefList::value_type(label, jmp)); + } + void addUndefinedLabel(const Label& label, const JmpLabel& jmp) + { + clabelUndefList_.insert(ClabelUndefList::value_type(label.id, jmp)); + } + bool hasUndefSlabel() const + { + for (StateList::const_iterator i = stateList_.begin(), ie = stateList_.end(); i != ie; ++i) { + if (hasUndefinedLabel_inner(i->undefList)) return true; + } + return false; + } + bool hasUndefClabel() const { return hasUndefinedLabel_inner(clabelUndefList_); } }; +inline Label::Label(const Label& rhs) +{ + id = rhs.id; + mgr = rhs.mgr; + if (mgr) mgr->incRefCount(id); +} +inline Label& Label::operator=(const Label& rhs) +{ + if (id) throw Error(ERR_LABEL_IS_ALREADY_SET_BY_L); + id = rhs.id; + mgr = rhs.mgr; + if (mgr) mgr->incRefCount(id); + return *this; +} +inline Label::~Label() +{ + if (id && mgr) mgr->decRefCount(id); +} + class CodeGenerator : public CodeArray { public: enum LabelType { @@ -1059,8 +1245,12 @@ CodeGenerator operator=(const CodeGenerator&); // don't call #ifdef XBYAK64 enum { i32e = 32 | 64, BIT = 64 }; + static const size_t dummyAddr = (size_t(0x11223344) << 32) | 55667788; + typedef Reg64 NativeReg; #else enum { i32e = 32, BIT = 32 }; + static const size_t dummyAddr = 0x12345678; + typedef Reg32 NativeReg; #endif // (XMM, XMM|MEM) static inline bool isXMM_XMMorMEM(const Operand& op1, const Operand& op2) @@ -1092,12 +1282,17 @@ { return op1.isREG(i32e) && (op2.isXMM() || op2.isMEM()); } + // (REG32, REG32|MEM) + static inline bool isREG32_REG32orMEM(const Operand& op1, const Operand& op2) + { + return op1.isREG(i32e) && ((op2.isREG(i32e) && op1.getBit() == op2.getBit()) || op2.isMEM()); + } void rex(const Operand& op1, const Operand& op2 = Operand()) { uint8 rex = 0; const Operand *p1 = &op1, *p2 = &op2; if (p1->isMEM()) std::swap(p1, p2); - if (p1->isMEM()) throw ERR_BAD_COMBINATION; + if (p1->isMEM()) throw Error(ERR_BAD_COMBINATION); if (p2->isMEM()) { const Address& addr = static_cast(*p2); if (BIT == 64 && addr.is32bit()) db(0x67); @@ -1131,7 +1326,7 @@ db(0xC4); db((r ? 0 : 0x80) | (x ? 0 : 0x40) | (b ? 0 : 0x20) | mmmm); db((w << 7) | vvvv); } } - Label label_; + LabelManager labelMgr_; bool isInDisp16(uint32 x) const { return 0xFFFF8000 <= x || x <= 0x7FFF; } uint8 getModRM(int mod, int r1, int r2) const { return static_cast((mod << 6) | ((r1 & 7) << 3) | (r2 & 7)); } void opModR(const Reg& reg1, const Reg& reg2, int code0, int code1 = NONE, int code2 = NONE) @@ -1142,11 +1337,11 @@ } void opModM(const Address& addr, const Reg& reg, int code0, int code1 = NONE, int code2 = NONE) { - if (addr.is64bitDisp()) throw ERR_CANT_USE_64BIT_DISP; + if (addr.is64bitDisp()) throw Error(ERR_CANT_USE_64BIT_DISP); rex(addr, reg); db(code0 | (reg.isBit(8) ? 0 : 1)); if (code1 != NONE) db(code1); if (code2 != NONE) db(code2); addr.updateRegField(static_cast(reg.getIdx())); - db(addr.getCode(), static_cast(addr.getSize())); + opAddr(addr); } void makeJmp(uint32 disp, LabelType type, uint8 shortCode, uint8 longCode, uint8 longPref) { @@ -1156,36 +1351,36 @@ if (type != T_NEAR && inner::IsInDisp8(disp - shortJmpSize)) { db(shortCode); db(disp - shortJmpSize); } else { - if (type == T_SHORT) throw ERR_LABEL_IS_TOO_FAR; + if (type == T_SHORT) throw Error(ERR_LABEL_IS_TOO_FAR); if (longPref) db(longPref); db(longCode); dd(disp - longJmpSize); } } - void opJmp(const char *label, LabelType type, uint8 shortCode, uint8 longCode, uint8 longPref) + template + void opJmp(T& label, LabelType type, uint8 shortCode, uint8 longCode, uint8 longPref) { if (isAutoGrow() && size_ + 16 >= maxSize_) growMemory(); /* avoid splitting code of jmp */ size_t offset = 0; - if (label_.getOffset(&offset, label)) { /* label exists */ + if (labelMgr_.getOffset(&offset, label)) { /* label exists */ makeJmp(inner::VerifyInInt32(offset - size_), type, shortCode, longCode, longPref); } else { - JmpLabel jmp; + int jmpSize = 0; if (type == T_NEAR) { - jmp.jmpSize = 4; + jmpSize = 4; if (longPref) db(longPref); db(longCode); dd(0); } else { - jmp.jmpSize = 1; + jmpSize = 1; db(shortCode); db(0); } - jmp.mode = inner::LasIs; - jmp.endOfJmp = size_; - label_.addUndefinedLabel(label, jmp); + JmpLabel jmp(size_, jmpSize, inner::LasIs); + labelMgr_.addUndefinedLabel(label, jmp); } } void opJmpAbs(const void *addr, LabelType type, uint8 shortCode, uint8 longCode) { if (isAutoGrow()) { - if (type != T_NEAR) throw ERR_ONLY_T_NEAR_IS_SUPPORTED_IN_AUTO_GROW; + if (type != T_NEAR) throw Error(ERR_ONLY_T_NEAR_IS_SUPPORTED_IN_AUTO_GROW); if (size_ + 16 >= maxSize_) growMemory(); db(longCode); dd(0); @@ -1195,10 +1390,17 @@ } } + void opAddr(const Address &addr) + { + db(addr.getCode(), static_cast(addr.getSize())); + if (addr.getLabel()) { // [rip + Label] + putL_inner(*addr.getLabel(), true, addr.getDisp()); + } + } /* preCode is for SSSE3/SSE4 */ void opGen(const Operand& reg, const Operand& op, int code, int pref, bool isValid(const Operand&, const Operand&), int imm8 = NONE, int preCode = NONE) { - if (isValid && !isValid(reg, op)) throw ERR_BAD_COMBINATION; + if (isValid && !isValid(reg, op)) throw Error(ERR_BAD_COMBINATION); if (pref != NONE) db(pref); if (op.isMEM()) { opModM(static_cast(op), static_cast(reg), 0x0F, preCode, code); @@ -1225,7 +1427,7 @@ } else if (op1.isMEM() && op2.isXMM()) { opModM(static_cast(op1), static_cast(op2), 0x0F, code | 1); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } void opExt(const Operand& op, const Mmx& mmx, int code, int imm, bool hasMMX2 = false) @@ -1246,7 +1448,7 @@ } else if (op.isMEM()) { opModM(static_cast(op), Reg(ext, Operand::REG, opBit), code0, code1, code2); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } void opShift(const Operand& op, int imm, int ext) @@ -1257,7 +1459,7 @@ } void opShift(const Operand& op, const Reg8& cl, int ext) { - if (cl.getIdx() != Operand::CL) throw ERR_BAD_COMBINATION; + if (cl.getIdx() != Operand::CL) throw Error(ERR_BAD_COMBINATION); opR_ModM(op, 0, ext, B11010010); } void opModRM(const Operand& op1, const Operand& op2, bool condR, bool condM, int code0, int code1 = NONE, int code2 = NONE) @@ -1267,12 +1469,12 @@ } else if (condM) { opModM(static_cast(op2), static_cast(op1), code0, code1, code2); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } void opShxd(const Operand& op, const Reg& reg, uint8 imm, int code, const Reg8 *cl = 0) { - if (cl && cl->getIdx() != Operand::CL) throw ERR_BAD_COMBINATION; + if (cl && cl->getIdx() != Operand::CL) throw Error(ERR_BAD_COMBINATION); opModRM(reg, op, (op.isREG(16 | i32e) && op.getBit() == reg.getBit()), op.isMEM() && (reg.isREG(16 | i32e)), 0x0F, code | (cl ? 1 : 0)); if (!cl) db(imm); } @@ -1291,7 +1493,7 @@ verifyMemHasSize(op); uint32 immBit = inner::IsInDisp8(imm) ? 8 : isInDisp16(imm) ? 16 : 32; if (op.isBit(8)) immBit = 8; - if (op.getBit() < immBit) throw ERR_IMM_IS_TOO_BIG; + if (op.getBit() < immBit) throw Error(ERR_IMM_IS_TOO_BIG); if (op.isBit(32|64) && immBit == 16) immBit = 32; /* don't use MEM16 if 32/64bit mode */ if (op.isREG() && op.getIdx() == 0 && (op.getBit() == immBit || (op.isBit(64) && immBit == 32))) { // rax, eax, ax, al rex(op); @@ -1327,38 +1529,41 @@ } else if (op.isMEM()) { opModM(static_cast(op), Reg(ext, Operand::REG, op.getBit()), code); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } void verifyMemHasSize(const Operand& op) const { - if (op.isMEM() && op.getBit() == 0) throw ERR_MEM_SIZE_IS_NOT_SPECIFIED; + if (op.isMEM() && op.getBit() == 0) throw Error(ERR_MEM_SIZE_IS_NOT_SPECIFIED); } void opMovxx(const Reg& reg, const Operand& op, uint8 code) { - if (op.isBit(32)) throw ERR_BAD_COMBINATION; + if (op.isBit(32)) throw Error(ERR_BAD_COMBINATION); int w = op.isBit(16); +#ifdef XBYAK64 + if (op.isHigh8bit()) throw Error(ERR_BAD_COMBINATION); +#endif bool cond = reg.isREG() && (reg.getBit() > op.getBit()); opModRM(reg, op, cond && op.isREG(), cond && op.isMEM(), 0x0F, code | w); } void opFpuMem(const Address& addr, uint8 m16, uint8 m32, uint8 m64, uint8 ext, uint8 m64ext) { - if (addr.is64bitDisp()) throw ERR_CANT_USE_64BIT_DISP; + if (addr.is64bitDisp()) throw Error(ERR_CANT_USE_64BIT_DISP); uint8 code = addr.isBit(16) ? m16 : addr.isBit(32) ? m32 : addr.isBit(64) ? m64 : 0; - if (!code) throw ERR_BAD_MEM_SIZE; + if (!code) throw Error(ERR_BAD_MEM_SIZE); if (m64ext && addr.isBit(64)) ext = m64ext; rex(addr, st0); db(code); addr.updateRegField(ext); - db(addr.getCode(), static_cast(addr.getSize())); + opAddr(addr); } // use code1 if reg1 == st0 // use code2 if reg1 != st0 && reg2 == st0 void opFpuFpu(const Fpu& reg1, const Fpu& reg2, uint32 code1, uint32 code2) { uint32 code = reg1.getIdx() == 0 ? code1 : reg2.getIdx() == 0 ? code2 : 0; - if (!code) throw ERR_BAD_ST_COMBINATION; + if (!code) throw Error(ERR_BAD_ST_COMBINATION); db(uint8(code >> 8)); db(uint8(code | (reg1.getIdx() | reg2.getIdx()))); } @@ -1381,12 +1586,12 @@ b = static_cast(*p2).isExtIdx(); } if (w == -1) w = 0; - vex(r.isExtIdx(), p1->getIdx(), r.isYMM(), type, x, b, w); + vex(r.isExtIdx(), p1 ? p1->getIdx() : 0, r.isYMM(), type, x, b, w); db(code); if (p2->isMEM()) { const Address& addr = static_cast(*p2); addr.updateRegField(static_cast(r.getIdx())); - db(addr.getCode(), static_cast(addr.getSize())); + opAddr(addr); } else { db(getModRM(3, r.getIdx(), p2->getIdx())); } @@ -1399,7 +1604,7 @@ const Operand *p2 = &op2; if (!isR_R_RM) std::swap(p1, p2); const unsigned int bit = r.getBit(); - if (p1->getBit() != bit || (p2->isREG() && p2->getBit() != bit)) throw ERR_BAD_COMBINATION; + if (p1->getBit() != bit || (p2->isREG() && p2->getBit() != bit)) throw Error(ERR_BAD_COMBINATION); int w = bit == 64; opVex(r, p1, p2, type, code, w); } @@ -1411,12 +1616,12 @@ x2 = &x1; op = &op1; } else { - if (!(op1.isXMM() || (supportYMM && op1.isYMM()))) throw ERR_BAD_COMBINATION; + if (!(op1.isXMM() || (supportYMM && op1.isYMM()))) throw Error(ERR_BAD_COMBINATION); x2 = static_cast(&op1); op = &op2; } // (x1, x2, op) - if (!((x1.isXMM() && x2->isXMM()) || (supportYMM && x1.isYMM() && x2->isYMM()))) throw ERR_BAD_COMBINATION; + if (!((x1.isXMM() && x2->isXMM()) || (supportYMM && x1.isYMM() && x2->isYMM()))) throw Error(ERR_BAD_COMBINATION); opVex(x1, x2, op, type, code0, w); } // if cvt then return pointer to Xmm(idx) (or Ymm(idx)), otherwise return op @@ -1433,15 +1638,15 @@ // QQQ:need to refactor void opSp1(const Reg& reg, const Operand& op, uint8 pref, uint8 code0, uint8 code1) { - if (reg.isBit(8)) throw ERR_BAD_SIZE_OF_REGISTER; + if (reg.isBit(8)) throw Error(ERR_BAD_SIZE_OF_REGISTER); bool is16bit = reg.isREG(16) && (op.isREG(16) || op.isMEM()); - if (!is16bit && !(reg.isREG(i32e) && (op.isREG(reg.getBit()) || op.isMEM()))) throw ERR_BAD_COMBINATION; + if (!is16bit && !(reg.isREG(i32e) && (op.isREG(reg.getBit()) || op.isMEM()))) throw Error(ERR_BAD_COMBINATION); if (is16bit) db(0x66); db(pref); opModRM(reg.changeBit(i32e == 32 ? 32 : reg.getBit()), op, op.isREG(), true, code0, code1); } void opGather(const Xmm& x1, const Address& addr, const Xmm& x2, int type, uint8 code, int w, int mode) { - if (!addr.isVsib()) throw ERR_BAD_VSIB_ADDRESSING; + if (!addr.isVsib()) throw Error(ERR_BAD_VSIB_ADDRESSING); const int y_vx_y = 0; const int y_vy_y = 1; // const int x_vy_x = 2; @@ -1455,7 +1660,7 @@ } else { // x_vy_x isOK = !x1.isYMM() && isAddrYMM && !x2.isYMM(); } - if (!isOK) throw ERR_BAD_VSIB_ADDRESSING; + if (!isOK) throw Error(ERR_BAD_VSIB_ADDRESSING); } addr.setVsib(false); opAVX_X_X_XM(isAddrYMM ? Ymm(x1.getIdx()) : x1, isAddrYMM ? Ymm(x2.getIdx()) : x2, addr, type, code, true, w); @@ -1486,16 +1691,26 @@ const Ymm &ym8, &ym9, &ym10, &ym11, &ym12, &ym13, &ym14, &ym15; const RegRip rip; #endif - void L(const char *label) + void L(const std::string& label) { labelMgr_.defineSlabel(label); } + void L(const Label& label) { labelMgr_.defineClabel(label); } + /* + assign src to dst + require + dst : does not used by L() + src : used by L() + */ + void assignL(Label& dst, const Label& src) { labelMgr_.assign(dst, src); } + void inLocalLabel() { labelMgr_.enterLocal(); } + void outLocalLabel() { labelMgr_.leaveLocal(); } + void jmp(std::string label, LabelType type = T_AUTO) { - label_.define(label, getSize(), getCurr()); + opJmp(label, type, B11101011, B11101001, 0); } - void inLocalLabel() { label_.enterLocal(); } - void outLocalLabel() { label_.leaveLocal(); } - void jmp(const char *label, LabelType type = T_AUTO) + void jmp(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, B11101011, B11101001, 0); } + void jmp(const char *label, LabelType type = T_AUTO) { jmp(std::string(label), type); } void jmp(const void *addr, LabelType type = T_AUTO) { opJmpAbs(addr, type, B11101011, B11101001); @@ -1598,7 +1813,7 @@ db(reg1.isREG(8) ? 0xA0 : reg1.isREG() ? 0xA1 : reg2.isREG(8) ? 0xA2 : 0xA3); db(addr->getDisp(), 8); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } else #else @@ -1612,76 +1827,89 @@ opRM_RM(reg1, reg2, B10001000); } } - void mov(const Operand& op, -#ifdef XBYAK64 - uint64 imm, bool opti = true -#else - uint32 imm, bool = true -#endif - ) +private: + /* + mov(r, imm) = db(imm, mov_imm(r, imm)) + */ + int mov_imm(const Reg& reg, size_t imm) { - verifyMemHasSize(op); - if (op.isREG()) { - rex(op); - int code, size; -#ifdef XBYAK64 - if (opti && op.isBit(64) && inner::IsInInt32(imm)) { + int bit = reg.getBit(); + const int idx = reg.getIdx(); + int code = B10110000 | ((bit == 8 ? 0 : 1) << 3); + if (bit == 64 && (imm & ~size_t(0xffffffffu)) == 0) { + rex(Reg32(idx)); + bit = 32; + } else { + rex(reg); + if (bit == 64 && inner::IsInInt32(imm)) { db(B11000111); code = B11000000; - size = 4; - } else -#endif - { - code = B10110000 | ((op.isBit(8) ? 0 : 1) << 3); - size = op.getBit() / 8; + bit = 32; } - - db(code | (op.getIdx() & 7)); + } + db(code | (idx & 7)); + return bit / 8; + } + template + void putL_inner(T& label, bool relative = false, size_t disp = 0) + { + const int jmpSize = relative ? 4 : (int)sizeof(size_t); + if (isAutoGrow() && size_ + 16 >= maxSize_) growMemory(); + size_t offset = 0; + if (labelMgr_.getOffset(&offset, label)) { + if (relative) { + db(inner::VerifyInInt32(offset + disp - size_ - jmpSize), jmpSize); + } else if (isAutoGrow()) { + db(uint64(0), jmpSize); + save(size_ - jmpSize, offset, jmpSize, inner::LaddTop); + } else { + db(size_t(top_) + offset, jmpSize); + } + return; + } + db(uint64(0), jmpSize); + JmpLabel jmp(size_, jmpSize, (relative ? inner::LasIs : isAutoGrow() ? inner::LaddTop : inner::Labs), disp); + labelMgr_.addUndefinedLabel(label, jmp); + } +public: + void mov(const Operand& op, size_t imm) + { + verifyMemHasSize(op); + if (op.isREG()) { + const int size = mov_imm(static_cast(op), imm); db(imm, size); } else if (op.isMEM()) { opModM(static_cast(op), Reg(0, Operand::REG, op.getBit()), B11000110); int size = op.getBit() / 8; if (size > 4) size = 4; db(static_cast(imm), size); } else { - throw ERR_BAD_COMBINATION; + throw Error(ERR_BAD_COMBINATION); } } - void mov( -#ifdef XBYAK64 - const Reg64& reg, -#else - const Reg32& reg, -#endif - const char *label) + void mov(const NativeReg& reg, const char *label) // can't use std::string { if (label == 0) { - mov(reg, 0, true); + mov(static_cast(reg), 0); // call imm return; } - const int jmpSize = (int)sizeof(size_t); -#ifdef XBYAK64 - const size_t dummyAddr = (size_t(0x11223344) << 32) | 55667788; -#else - const size_t dummyAddr = 0x12345678; -#endif - if (isAutoGrow() && size_ + 16 >= maxSize_) growMemory(); - size_t offset = 0; - if (label_.getOffset(&offset, label)) { - if (isAutoGrow()) { - mov(reg, dummyAddr); - save(size_ - jmpSize, offset, jmpSize, inner::LaddTop); - } else { - mov(reg, size_t(top_) + offset, false); // not to optimize 32-bit imm - } - return; - } - mov(reg, dummyAddr); - JmpLabel jmp; - jmp.endOfJmp = size_; - jmp.jmpSize = jmpSize; - jmp.mode = isAutoGrow() ? inner::LaddTop : inner::Labs; - label_.addUndefinedLabel(label, jmp); + mov_imm(reg, dummyAddr); + putL(label); + } + void mov(const NativeReg& reg, const Label& label) + { + mov_imm(reg, dummyAddr); + putL(label); } + void movbe(const Reg& reg, const Address& addr) { opModM(addr, reg, 0x0F, 0x38, 0xF0); } + void movbe(const Address& addr, const Reg& reg) { opModM(addr, reg, 0x0F, 0x38, 0xF1); } + /* + put address of label to buffer + @note the put size is 4(32-bit), 8(64-bit) + */ + void putL(std::string label) { putL_inner(label); } + void putL(const Label& label) { putL_inner(label); } + void adcx(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0x66, isREG32_REG32orMEM, NONE, 0x38); } + void adox(const Reg32e& reg, const Operand& op) { opGen(reg, op, 0xF6, 0xF3, isREG32_REG32orMEM, NONE, 0x38); } void cmpxchg8b(const Address& addr) { opModM(addr, Reg32(1), 0x0F, B11000111); } #ifdef XBYAK64 void cmpxchg16b(const Address& addr) { opModM(addr, Reg64(1), 0x0F, B11000111); } @@ -1690,13 +1918,17 @@ { opModRM(reg, op, (op.isREG() && reg.isREG() && op.getBit() == reg.getBit()), op.isMEM(), 0x0F, B11000000 | (reg.isBit(8) ? 0 : 1)); } + void cmpxchg(const Operand& op, const Reg& reg) + { + opModRM(reg, op, (op.isREG() && reg.isREG() && op.getBit() == reg.getBit()), op.isMEM(), 0x0F, 0xb0 | (reg.isBit(8) ? 0 : 1)); + } void xchg(const Operand& op1, const Operand& op2) { const Operand *p1 = &op1, *p2 = &op2; if (p1->isMEM() || (p2->isREG(16 | i32e) && p2->getIdx() == 0)) { p1 = &op2; p2 = &op1; } - if (p1->isMEM()) throw ERR_BAD_COMBINATION; + if (p1->isMEM()) throw Error(ERR_BAD_COMBINATION); if (p2->isREG() && (p1->isREG(16 | i32e) && p1->getIdx() == 0) #ifdef XBYAK64 && (p2->getIdx() != 0 || !p1->isREG(32)) @@ -1707,14 +1939,16 @@ } opModRM(*p1, *p2, (p1->isREG() && p2->isREG() && (p1->getBit() == p2->getBit())), p2->isMEM(), B10000110 | (p1->isBit(8) ? 0 : 1)); } - void call(const char *label) - { - opJmp(label, T_NEAR, 0, B11101000, 0); - } - void call(const void *addr) - { - opJmpAbs(addr, T_NEAR, 0, B11101000); - } + void call(std::string label) { opJmp(label, T_NEAR, 0, B11101000, 0); } + // call(string label) + void call(const char *label) { call(std::string(label)); } + void call(const Label& label) { opJmp(label, T_NEAR, 0, B11101000, 0); } + // call(function pointer) +#ifdef XBYAK_VARIADIC_TEMPLATE + template + void call(Ret(*func)(Params...)) { call(CastTo(func)); } +#endif + void call(const void *addr) { opJmpAbs(addr, T_NEAR, 0, B11101000); } // special case void movd(const Address& addr, const Mmx& mmx) { @@ -1767,17 +2001,17 @@ } void pextrq(const Operand& op, const Xmm& xmm, uint8 imm) { - if (!op.isREG(64) && !op.isMEM()) throw ERR_BAD_COMBINATION; + if (!op.isREG(64) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opGen(Reg64(xmm.getIdx()), op, 0x16, 0x66, 0, imm, B00111010); // force to 64bit } void pinsrq(const Xmm& xmm, const Operand& op, uint8 imm) { - if (!op.isREG(64) && !op.isMEM()) throw ERR_BAD_COMBINATION; + if (!op.isREG(64) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opGen(Reg64(xmm.getIdx()), op, 0x22, 0x66, 0, imm, B00111010); // force to 64bit } void movsxd(const Reg64& reg, const Operand& op) { - if (!op.isBit(32)) throw ERR_BAD_COMBINATION; + if (!op.isBit(32)) throw Error(ERR_BAD_COMBINATION); opModRM(reg, op, op.isREG(), op.isMEM(), 0x63); } #endif @@ -1789,7 +2023,7 @@ void extractps(const Operand& op, const Xmm& xmm, uint8 imm) { opExt(op, xmm, 0x17, imm); } void pinsrw(const Mmx& mmx, const Operand& op, int imm) { - if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; + if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opGen(mmx, op, B11000100, mmx.isXMM() ? 0x66 : NONE, 0, imm); } void insertps(const Xmm& xmm, const Operand& op, uint8 imm) { opGen(xmm, op, 0x21, 0x66, isXMM_XMMorMEM, imm, B00111010); } @@ -1803,7 +2037,7 @@ } void maskmovq(const Mmx& reg1, const Mmx& reg2) { - if (!reg1.isMMX() || !reg2.isMMX()) throw ERR_BAD_COMBINATION; + if (!reg1.isMMX() || !reg2.isMMX()) throw Error(ERR_BAD_COMBINATION); opModR(reg1, reg2, 0x0F, B11110111); } void lea(const Reg32e& reg, const Address& addr) { opModM(addr, reg, B10001101); } @@ -1816,7 +2050,7 @@ void movnti(const Address& addr, const Reg32e& reg) { opModM(addr, reg, 0x0F, B11000011); } void movntq(const Address& addr, const Mmx& mmx) { - if (!mmx.isMMX()) throw ERR_BAD_COMBINATION; + if (!mmx.isMMX()) throw Error(ERR_BAD_COMBINATION); opModM(addr, mmx, 0x0F, B11100111); } void crc32(const Reg32e& reg, const Operand& op) @@ -1825,7 +2059,8 @@ db(0xF2); opModRM(reg, op, op.isREG(), op.isMEM(), 0x0F, 0x38, 0xF0 | (op.isBit(8) ? 0 : 1)); } - void rdrand(const Reg& r) { if (r.isBit(8)) throw ERR_BAD_SIZE_OF_REGISTER; opModR(Reg(6, Operand::REG, r.getBit()), r, 0x0f, 0xc7); } + void rdrand(const Reg& r) { if (r.isBit(8)) throw Error(ERR_BAD_SIZE_OF_REGISTER); opModR(Reg(6, Operand::REG, r.getBit()), r, 0x0f, 0xc7); } + void rdseed(const Reg& r) { if (r.isBit(8)) throw Error(ERR_BAD_SIZE_OF_REGISTER); opModR(Reg(7, Operand::REG, r.getBit()), r, 0x0f, 0xc7); } void rorx(const Reg32e& r, const Operand& op, uint8 imm) { opGpr(r, op, Reg32e(0, r.getBit()), MM_0F3A | PP_F2, 0xF0, false); db(imm); } enum { NONE = 256 }; CodeGenerator(size_t maxSize = DEFAULT_MAX_CODE_SIZE, void *userPtr = 0, Allocator *allocator = 0) @@ -1853,21 +2088,21 @@ , rip() #endif { - label_.set(this); + labelMgr_.set(this); } void reset() { resetSize(); - label_.reset(); - label_.set(this); + labelMgr_.reset(); + labelMgr_.set(this); } - bool hasUndefinedLabel() const { return label_.hasUndefinedLabel(); } + bool hasUndefinedLabel() const { return labelMgr_.hasUndefSlabel() || labelMgr_.hasUndefClabel(); } /* call ready() to complete generating code on AutoGrow */ void ready() { - if (hasUndefinedLabel()) throw ERR_LABEL_IS_NOT_FOUND; + if (hasUndefinedLabel()) throw Error(ERR_LABEL_IS_NOT_FOUND); calcJmpAddress(); } #ifdef XBYAK_TEST @@ -1883,7 +2118,7 @@ void align(int x = 16) { if (x == 1) return; - if (x < 1 || (x & (x - 1))) throw ERR_BAD_ALIGN; + if (x < 1 || (x & (x - 1))) throw Error(ERR_BAD_ALIGN); if (isAutoGrow() && x > (int)inner::ALIGN_PAGE_SIZE) fprintf(stderr, "warning:autoGrow mode does not support %d align\n", x); while (size_t(getCurr()) % x) { nop(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak_mnemonic.h pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak_mnemonic.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak_mnemonic.h 2014-04-13 08:06:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak_mnemonic.h 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,7 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -const char *getVersionString() const { return "4.00"; } +const char *getVersionString() const { return "4.84"; } void packssdw(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x6B); } void packsswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x63); } void packuswb(const Mmx& mmx, const Operand& op) { opMMX(mmx, op, 0x67); } @@ -211,101 +211,135 @@ void movhpd(const Operand& op1, const Operand& op2) { opMovXMM(op1, op2, 0x16, 0x66); } void movlpd(const Operand& op1, const Operand& op2) { opMovXMM(op1, op2, 0x12, 0x66); } void cmovo(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 0); } -void jo(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x70, 0x80, 0x0F); } +void jo(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x70, 0x80, 0x0F); } +void jo(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x70, 0x80, 0x0F); } void seto(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 0); } void cmovno(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 1); } -void jno(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x71, 0x81, 0x0F); } +void jno(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x71, 0x81, 0x0F); } +void jno(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x71, 0x81, 0x0F); } void setno(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 1); } void cmovb(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 2); } -void jb(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jb(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jb(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } void setb(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 2); } void cmovc(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 2); } -void jc(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jc(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jc(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } void setc(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 2); } void cmovnae(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 2); } -void jnae(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jnae(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } +void jnae(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x72, 0x82, 0x0F); } void setnae(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 2); } void cmovnb(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 3); } -void jnb(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jnb(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jnb(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } void setnb(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 3); } void cmovae(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 3); } -void jae(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jae(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jae(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } void setae(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 3); } void cmovnc(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 3); } -void jnc(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jnc(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } +void jnc(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x73, 0x83, 0x0F); } void setnc(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 3); } void cmove(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 4); } -void je(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } +void je(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } +void je(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } void sete(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 4); } void cmovz(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 4); } -void jz(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } +void jz(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } +void jz(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x74, 0x84, 0x0F); } void setz(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 4); } void cmovne(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 5); } -void jne(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } +void jne(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } +void jne(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } void setne(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 5); } void cmovnz(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 5); } -void jnz(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } +void jnz(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } +void jnz(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x75, 0x85, 0x0F); } void setnz(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 5); } void cmovbe(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 6); } -void jbe(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } +void jbe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } +void jbe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } void setbe(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 6); } void cmovna(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 6); } -void jna(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } +void jna(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } +void jna(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x76, 0x86, 0x0F); } void setna(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 6); } void cmovnbe(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 7); } -void jnbe(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } +void jnbe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } +void jnbe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } void setnbe(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 7); } void cmova(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 7); } -void ja(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } +void ja(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } +void ja(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x77, 0x87, 0x0F); } void seta(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 7); } void cmovs(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 8); } -void js(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x78, 0x88, 0x0F); } +void js(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x78, 0x88, 0x0F); } +void js(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x78, 0x88, 0x0F); } void sets(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 8); } void cmovns(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 9); } -void jns(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x79, 0x89, 0x0F); } +void jns(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x79, 0x89, 0x0F); } +void jns(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x79, 0x89, 0x0F); } void setns(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 9); } void cmovp(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 10); } -void jp(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } +void jp(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } +void jp(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } void setp(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 10); } void cmovpe(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 10); } -void jpe(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } +void jpe(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } +void jpe(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7A, 0x8A, 0x0F); } void setpe(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 10); } void cmovnp(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 11); } -void jnp(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } +void jnp(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } +void jnp(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } void setnp(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 11); } void cmovpo(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 11); } -void jpo(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } +void jpo(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } +void jpo(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7B, 0x8B, 0x0F); } void setpo(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 11); } void cmovl(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 12); } -void jl(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } +void jl(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } +void jl(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } void setl(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 12); } void cmovnge(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 12); } -void jnge(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } +void jnge(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } +void jnge(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7C, 0x8C, 0x0F); } void setnge(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 12); } void cmovnl(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 13); } -void jnl(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } +void jnl(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } +void jnl(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } void setnl(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 13); } void cmovge(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 13); } -void jge(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } +void jge(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } +void jge(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7D, 0x8D, 0x0F); } void setge(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 13); } void cmovle(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 14); } -void jle(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } +void jle(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } +void jle(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } void setle(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 14); } void cmovng(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 14); } -void jng(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } +void jng(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } +void jng(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7E, 0x8E, 0x0F); } void setng(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 14); } void cmovnle(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 15); } -void jnle(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } +void jnle(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } +void jnle(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } void setnle(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 15); } void cmovg(const Reg32e& reg, const Operand& op) { opModRM(reg, op, op.isREG(i32e), op.isMEM(), 0x0F, B01000000 | 15); } -void jg(const char *label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } +void jg(std::string label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } +void jg(const Label& label, LabelType type = T_AUTO) { opJmp(label, type, 0x7F, 0x8F, 0x0F); } void setg(const Operand& op) { opR_ModM(op, 8, 0, 0x0F, B10010000 | 15); } #ifdef XBYAK32 -void jcxz(const char *label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } -void jecxz(const char *label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jcxz(std::string label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jcxz(const Label& label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jecxz(std::string label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jecxz(const Label& label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } #else -void jecxz(const char *label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } -void jrcxz(const char *label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jecxz(std::string label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jecxz(const Label& label) { db(0x67); opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jrcxz(std::string label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } +void jrcxz(const Label& label) { opJmp(label, T_SHORT, 0xe3, 0, 0); } #endif #ifdef XBYAK64 void cdqe() { db(0x48); db(0x98); } @@ -359,6 +393,7 @@ void xlatb() { db(0xD7); } void popf() { db(0x9D); } void pushf() { db(0x9C); } +void stac() { db(0x0F); db(0x01); db(0xCB); } void vzeroall() { db(0xC5); db(0xFC); db(0x77); } void vzeroupper() { db(0xC5); db(0xF8); db(0x77); } void xgetbv() { db(0x0F); db(0x01); db(0xD0); } @@ -435,6 +470,14 @@ #endif void dec(const Operand& op) { opIncDec(op, 0x48, 1); } void inc(const Operand& op) { opIncDec(op, 0x40, 0); } +void bt(const Operand& op, const Reg& reg) { opModRM(reg, op, op.isREG(16|32|64) && op.getBit() == reg.getBit(), op.isMEM(), 0x0f, 0xa3); } +void bt(const Operand& op, uint8 imm) { opR_ModM(op, 16|32|64, 4, 0x0f, 0xba); db(imm); } +void bts(const Operand& op, const Reg& reg) { opModRM(reg, op, op.isREG(16|32|64) && op.getBit() == reg.getBit(), op.isMEM(), 0x0f, 0xab); } +void bts(const Operand& op, uint8 imm) { opR_ModM(op, 16|32|64, 5, 0x0f, 0xba); db(imm); } +void btr(const Operand& op, const Reg& reg) { opModRM(reg, op, op.isREG(16|32|64) && op.getBit() == reg.getBit(), op.isMEM(), 0x0f, 0xb3); } +void btr(const Operand& op, uint8 imm) { opR_ModM(op, 16|32|64, 6, 0x0f, 0xba); db(imm); } +void btc(const Operand& op, const Reg& reg) { opModRM(reg, op, op.isREG(16|32|64) && op.getBit() == reg.getBit(), op.isMEM(), 0x0f, 0xbb); } +void btc(const Operand& op, uint8 imm) { opR_ModM(op, 16|32|64, 7, 0x0f, 0xba); db(imm); } void div(const Operand& op) { opR_ModM(op, 0, 6, 0xF6); } void idiv(const Operand& op) { opR_ModM(op, 0, 7, 0xF6); } void imul(const Operand& op) { opR_ModM(op, 0, 5, 0xF6); } @@ -445,25 +488,25 @@ void not(const Operand& op) { opR_ModM(op, 0, 2, 0xF6); } #endif void rcl(const Operand& op, int imm) { opShift(op, imm, 2); } -void rcl(const Operand& op, const Reg8& cl) { opShift(op, cl, 2); } +void rcl(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 2); } void rcr(const Operand& op, int imm) { opShift(op, imm, 3); } -void rcr(const Operand& op, const Reg8& cl) { opShift(op, cl, 3); } +void rcr(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 3); } void rol(const Operand& op, int imm) { opShift(op, imm, 0); } -void rol(const Operand& op, const Reg8& cl) { opShift(op, cl, 0); } +void rol(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 0); } void ror(const Operand& op, int imm) { opShift(op, imm, 1); } -void ror(const Operand& op, const Reg8& cl) { opShift(op, cl, 1); } +void ror(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 1); } void sar(const Operand& op, int imm) { opShift(op, imm, 7); } -void sar(const Operand& op, const Reg8& cl) { opShift(op, cl, 7); } +void sar(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 7); } void shl(const Operand& op, int imm) { opShift(op, imm, 4); } -void shl(const Operand& op, const Reg8& cl) { opShift(op, cl, 4); } +void shl(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 4); } void shr(const Operand& op, int imm) { opShift(op, imm, 5); } -void shr(const Operand& op, const Reg8& cl) { opShift(op, cl, 5); } +void shr(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 5); } void sal(const Operand& op, int imm) { opShift(op, imm, 4); } -void sal(const Operand& op, const Reg8& cl) { opShift(op, cl, 4); } +void sal(const Operand& op, const Reg8& _cl) { opShift(op, _cl, 4); } void shld(const Operand& op, const Reg& reg, uint8 imm) { opShxd(op, reg, imm, 0xA4); } -void shld(const Operand& op, const Reg& reg, const Reg8& cl) { opShxd(op, reg, 0, 0xA4, &cl); } +void shld(const Operand& op, const Reg& reg, const Reg8& _cl) { opShxd(op, reg, 0, 0xA4, &_cl); } void shrd(const Operand& op, const Reg& reg, uint8 imm) { opShxd(op, reg, imm, 0xAC); } -void shrd(const Operand& op, const Reg& reg, const Reg8& cl) { opShxd(op, reg, 0, 0xAC, &cl); } +void shrd(const Operand& op, const Reg& reg, const Reg8& _cl) { opShxd(op, reg, 0, 0xAC, &_cl); } void bsf(const Reg®, const Operand& op) { opModRM(reg, op, op.isREG(16 | i32e), op.isMEM(), 0x0F, 0xBC); } void bsr(const Reg®, const Operand& op) { opModRM(reg, op, op.isREG(16 | i32e), op.isMEM(), 0x0F, 0xBD); } void popcnt(const Reg®, const Operand& op) { opSp1(reg, op, 0xF3, 0x0F, 0xB8); } @@ -661,231 +704,231 @@ void vorps(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F, 0x56, true); } void vxorpd(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F | PP_66, 0x57, true); } void vxorps(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F, 0x57, true); } -void vblendpd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0D, true, 0); db(imm); } +void vblendpd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0D, true, 0); db(imm); } void vblendpd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0D, true, 0); db(imm); } -void vblendps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0C, true, 0); db(imm); } +void vblendps(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0C, true, 0); db(imm); } void vblendps(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0C, true, 0); db(imm); } -void vdppd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x41, false, 0); db(imm); } +void vdppd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x41, false, 0); db(imm); } void vdppd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x41, false, 0); db(imm); } -void vdpps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x40, true, 0); db(imm); } +void vdpps(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x40, true, 0); db(imm); } void vdpps(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x40, true, 0); db(imm); } -void vmpsadbw(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x42, true, 0); db(imm); } +void vmpsadbw(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x42, true, 0); db(imm); } void vmpsadbw(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x42, true, 0); db(imm); } -void vpblendw(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0E, true, 0); db(imm); } +void vpblendw(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0E, true, 0); db(imm); } void vpblendw(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0E, true, 0); db(imm); } -void vpblendd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x02, true, 0); db(imm); } +void vpblendd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x02, true, 0); db(imm); } void vpblendd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x02, true, 0); db(imm); } -void vroundsd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0B, false, 0); db(imm); } +void vroundsd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0B, false, 0); db(imm); } void vroundsd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0B, false, 0); db(imm); } -void vroundss(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0A, false, 0); db(imm); } +void vroundss(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0A, false, 0); db(imm); } void vroundss(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0A, false, 0); db(imm); } -void vpclmulqdq(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x44, false, 0); db(imm); } +void vpclmulqdq(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x44, false, 0); db(imm); } void vpclmulqdq(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x44, false, 0); db(imm); } -void vpermilps(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0C, true, 0); } -void vpermilpd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0D, true, 0); } -void vpsllvd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x47, true, 0); } -void vpsllvq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x47, true, 1); } -void vpsravd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x46, true, 0); } -void vpsrlvd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x45, true, 0); } -void vpsrlvq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x45, true, 1); } -void vcmppd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xC2, true, -1); db(imm); } +void vpermilps(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x0C, true, 0); } +void vpermilpd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x0D, true, 0); } +void vpsllvd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x47, true, 0); } +void vpsllvq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x47, true, 1); } +void vpsravd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x46, true, 0); } +void vpsrlvd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x45, true, 0); } +void vpsrlvq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x45, true, 1); } +void vcmppd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xC2, true, -1); db(imm); } void vcmppd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xC2, true, -1); db(imm); } -void vcmpps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F, 0xC2, true, -1); db(imm); } +void vcmpps(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F, 0xC2, true, -1); db(imm); } void vcmpps(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F, 0xC2, true, -1); db(imm); } -void vcmpsd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F2, 0xC2, false, -1); db(imm); } +void vcmpsd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F2, 0xC2, false, -1); db(imm); } void vcmpsd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F2, 0xC2, false, -1); db(imm); } -void vcmpss(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F3, 0xC2, false, -1); db(imm); } +void vcmpss(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0xC2, false, -1); db(imm); } void vcmpss(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F3, 0xC2, false, -1); db(imm); } -void vcvtsd2ss(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F2, 0x5A, false, -1); } +void vcvtsd2ss(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F2, 0x5A, false, -1); } void vcvtsd2ss(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F2, 0x5A, false, -1); } -void vcvtss2sd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F3, 0x5A, false, -1); } +void vcvtss2sd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x5A, false, -1); } void vcvtss2sd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F3, 0x5A, false, -1); } -void vinsertps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x21, false, 0); db(imm); } +void vinsertps(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x21, false, 0); db(imm); } void vinsertps(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x21, false, 0); db(imm); } -void vpacksswb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x63, true, -1); } +void vpacksswb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x63, true, -1); } void vpacksswb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x63, true, -1); } -void vpackssdw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x6B, true, -1); } +void vpackssdw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x6B, true, -1); } void vpackssdw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x6B, true, -1); } -void vpackuswb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x67, true, -1); } +void vpackuswb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x67, true, -1); } void vpackuswb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x67, true, -1); } -void vpackusdw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x2B, true, -1); } +void vpackusdw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x2B, true, -1); } void vpackusdw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x2B, true, -1); } -void vpaddb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xFC, true, -1); } +void vpaddb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xFC, true, -1); } void vpaddb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xFC, true, -1); } -void vpaddw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xFD, true, -1); } +void vpaddw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xFD, true, -1); } void vpaddw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xFD, true, -1); } -void vpaddd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xFE, true, -1); } +void vpaddd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xFE, true, -1); } void vpaddd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xFE, true, -1); } -void vpaddq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD4, true, -1); } +void vpaddq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD4, true, -1); } void vpaddq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD4, true, -1); } -void vpaddsb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xEC, true, -1); } +void vpaddsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xEC, true, -1); } void vpaddsb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEC, true, -1); } -void vpaddsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xED, true, -1); } +void vpaddsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xED, true, -1); } void vpaddsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xED, true, -1); } -void vpaddusb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDC, true, -1); } +void vpaddusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDC, true, -1); } void vpaddusb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDC, true, -1); } -void vpaddusw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDD, true, -1); } +void vpaddusw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDD, true, -1); } void vpaddusw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDD, true, -1); } -void vpalignr(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F3A | PP_66, 0x0F, true, -1); db(imm); } +void vpalignr(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F3A | PP_66, 0x0F, true, -1); db(imm); } void vpalignr(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x0F, true, -1); db(imm); } -void vpand(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDB, true, -1); } +void vpand(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDB, true, -1); } void vpand(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDB, true, -1); } -void vpandn(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDF, true, -1); } +void vpandn(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDF, true, -1); } void vpandn(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDF, true, -1); } -void vpavgb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE0, true, -1); } +void vpavgb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE0, true, -1); } void vpavgb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE0, true, -1); } -void vpavgw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE3, true, -1); } +void vpavgw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE3, true, -1); } void vpavgw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE3, true, -1); } -void vpcmpeqb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x74, true, -1); } +void vpcmpeqb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x74, true, -1); } void vpcmpeqb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x74, true, -1); } -void vpcmpeqw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x75, true, -1); } +void vpcmpeqw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x75, true, -1); } void vpcmpeqw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x75, true, -1); } -void vpcmpeqd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x76, true, -1); } +void vpcmpeqd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x76, true, -1); } void vpcmpeqd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x76, true, -1); } -void vpcmpeqq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x29, true, -1); } +void vpcmpeqq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x29, true, -1); } void vpcmpeqq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x29, true, -1); } -void vpcmpgtb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x64, true, -1); } +void vpcmpgtb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x64, true, -1); } void vpcmpgtb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x64, true, -1); } -void vpcmpgtw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x65, true, -1); } +void vpcmpgtw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x65, true, -1); } void vpcmpgtw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x65, true, -1); } -void vpcmpgtd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x66, true, -1); } +void vpcmpgtd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x66, true, -1); } void vpcmpgtd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x66, true, -1); } -void vpcmpgtq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x37, true, -1); } +void vpcmpgtq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x37, true, -1); } void vpcmpgtq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x37, true, -1); } -void vphaddw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x01, true, -1); } +void vphaddw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x01, true, -1); } void vphaddw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x01, true, -1); } -void vphaddd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x02, true, -1); } +void vphaddd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x02, true, -1); } void vphaddd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x02, true, -1); } -void vphaddsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x03, true, -1); } +void vphaddsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x03, true, -1); } void vphaddsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x03, true, -1); } -void vphsubw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x05, true, -1); } +void vphsubw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x05, true, -1); } void vphsubw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x05, true, -1); } -void vphsubd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x06, true, -1); } +void vphsubd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x06, true, -1); } void vphsubd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x06, true, -1); } -void vphsubsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x07, true, -1); } +void vphsubsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x07, true, -1); } void vphsubsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x07, true, -1); } -void vpmaddwd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF5, true, -1); } +void vpmaddwd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF5, true, -1); } void vpmaddwd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF5, true, -1); } -void vpmaddubsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x04, true, -1); } +void vpmaddubsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x04, true, -1); } void vpmaddubsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x04, true, -1); } -void vpmaxsb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3C, true, -1); } +void vpmaxsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3C, true, -1); } void vpmaxsb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3C, true, -1); } -void vpmaxsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xEE, true, -1); } +void vpmaxsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xEE, true, -1); } void vpmaxsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEE, true, -1); } -void vpmaxsd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3D, true, -1); } +void vpmaxsd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3D, true, -1); } void vpmaxsd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3D, true, -1); } -void vpmaxub(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDE, true, -1); } +void vpmaxub(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDE, true, -1); } void vpmaxub(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDE, true, -1); } -void vpmaxuw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3E, true, -1); } +void vpmaxuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3E, true, -1); } void vpmaxuw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3E, true, -1); } -void vpmaxud(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3F, true, -1); } +void vpmaxud(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3F, true, -1); } void vpmaxud(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3F, true, -1); } -void vpminsb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x38, true, -1); } +void vpminsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x38, true, -1); } void vpminsb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x38, true, -1); } -void vpminsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xEA, true, -1); } +void vpminsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xEA, true, -1); } void vpminsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEA, true, -1); } -void vpminsd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x39, true, -1); } +void vpminsd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x39, true, -1); } void vpminsd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x39, true, -1); } -void vpminub(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xDA, true, -1); } +void vpminub(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xDA, true, -1); } void vpminub(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xDA, true, -1); } -void vpminuw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3A, true, -1); } +void vpminuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3A, true, -1); } void vpminuw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3A, true, -1); } -void vpminud(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x3B, true, -1); } +void vpminud(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x3B, true, -1); } void vpminud(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x3B, true, -1); } -void vpmulhuw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE4, true, -1); } +void vpmulhuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE4, true, -1); } void vpmulhuw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE4, true, -1); } -void vpmulhrsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0B, true, -1); } +void vpmulhrsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x0B, true, -1); } void vpmulhrsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x0B, true, -1); } -void vpmulhw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE5, true, -1); } +void vpmulhw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE5, true, -1); } void vpmulhw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE5, true, -1); } -void vpmullw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD5, true, -1); } +void vpmullw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD5, true, -1); } void vpmullw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD5, true, -1); } -void vpmulld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x40, true, -1); } +void vpmulld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x40, true, -1); } void vpmulld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x40, true, -1); } -void vpmuludq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF4, false, -1); } +void vpmuludq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF4, false, -1); } void vpmuludq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF4, false, -1); } -void vpmuldq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x28, true, -1); } +void vpmuldq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x28, true, -1); } void vpmuldq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x28, true, -1); } -void vpor(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xEB, true, -1); } +void vpor(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xEB, true, -1); } void vpor(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEB, true, -1); } -void vpsadbw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF6, true, -1); } +void vpsadbw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF6, true, -1); } void vpsadbw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF6, true, -1); } -void vpshufb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x00, true, -1); } -void vpsignb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x08, true, -1); } +void vpshufb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x00, true, -1); } +void vpsignb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x08, true, -1); } void vpsignb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x08, true, -1); } -void vpsignw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x09, true, -1); } +void vpsignw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x09, true, -1); } void vpsignw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x09, true, -1); } -void vpsignd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0A, true, -1); } +void vpsignd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F38 | PP_66, 0x0A, true, -1); } void vpsignd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F38 | PP_66, 0x0A, true, -1); } -void vpsllw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF1, true, -1); } +void vpsllw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF1, true, -1); } void vpsllw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF1, true, -1); } -void vpslld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF2, true, -1); } +void vpslld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF2, true, -1); } void vpslld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF2, true, -1); } -void vpsllq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF3, true, -1); } +void vpsllq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF3, true, -1); } void vpsllq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF3, true, -1); } -void vpsraw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE1, true, -1); } +void vpsraw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE1, true, -1); } void vpsraw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE1, true, -1); } -void vpsrad(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE2, true, -1); } +void vpsrad(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE2, true, -1); } void vpsrad(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE2, true, -1); } -void vpsrlw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD1, true, -1); } +void vpsrlw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD1, true, -1); } void vpsrlw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD1, true, -1); } -void vpsrld(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD2, true, -1); } +void vpsrld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD2, true, -1); } void vpsrld(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD2, true, -1); } -void vpsrlq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD3, true, -1); } +void vpsrlq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD3, true, -1); } void vpsrlq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD3, true, -1); } -void vpsubb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF8, true, -1); } +void vpsubb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF8, true, -1); } void vpsubb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF8, true, -1); } -void vpsubw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xF9, true, -1); } +void vpsubw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xF9, true, -1); } void vpsubw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xF9, true, -1); } -void vpsubd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xFA, true, -1); } +void vpsubd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xFA, true, -1); } void vpsubd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xFA, true, -1); } -void vpsubq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xFB, true, -1); } +void vpsubq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xFB, true, -1); } void vpsubq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xFB, true, -1); } -void vpsubsb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE8, true, -1); } +void vpsubsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE8, true, -1); } void vpsubsb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE8, true, -1); } -void vpsubsw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xE9, true, -1); } +void vpsubsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xE9, true, -1); } void vpsubsw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xE9, true, -1); } -void vpsubusb(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD8, true, -1); } +void vpsubusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD8, true, -1); } void vpsubusb(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD8, true, -1); } -void vpsubusw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xD9, true, -1); } +void vpsubusw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xD9, true, -1); } void vpsubusw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xD9, true, -1); } -void vpunpckhbw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x68, true, -1); } +void vpunpckhbw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x68, true, -1); } void vpunpckhbw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x68, true, -1); } -void vpunpckhwd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x69, true, -1); } +void vpunpckhwd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x69, true, -1); } void vpunpckhwd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x69, true, -1); } -void vpunpckhdq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x6A, true, -1); } +void vpunpckhdq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x6A, true, -1); } void vpunpckhdq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x6A, true, -1); } -void vpunpckhqdq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x6D, true, -1); } +void vpunpckhqdq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x6D, true, -1); } void vpunpckhqdq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x6D, true, -1); } -void vpunpcklbw(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x60, true, -1); } +void vpunpcklbw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x60, true, -1); } void vpunpcklbw(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x60, true, -1); } -void vpunpcklwd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x61, true, -1); } +void vpunpcklwd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x61, true, -1); } void vpunpcklwd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x61, true, -1); } -void vpunpckldq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x62, true, -1); } +void vpunpckldq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x62, true, -1); } void vpunpckldq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x62, true, -1); } -void vpunpcklqdq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x6C, true, -1); } +void vpunpcklqdq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x6C, true, -1); } void vpunpcklqdq(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x6C, true, -1); } -void vpxor(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xEF, true, -1); } +void vpxor(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xEF, true, -1); } void vpxor(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xEF, true, -1); } -void vrcpss(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F3, 0x53, false, -1); } +void vrcpss(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x53, false, -1); } void vrcpss(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F3, 0x53, false, -1); } -void vrsqrtss(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F3, 0x52, false, -1); } +void vrsqrtss(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x52, false, -1); } void vrsqrtss(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F3, 0x52, false, -1); } -void vshufpd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xC6, true, -1); db(imm); } +void vshufpd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0xC6, true, -1); db(imm); } void vshufpd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xC6, true, -1); db(imm); } -void vshufps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F, 0xC6, true, -1); db(imm); } +void vshufps(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, MM_0F, 0xC6, true, -1); db(imm); } void vshufps(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F, 0xC6, true, -1); db(imm); } -void vsqrtsd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F2, 0x51, false, -1); } +void vsqrtsd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F2, 0x51, false, -1); } void vsqrtsd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F2, 0x51, false, -1); } -void vsqrtss(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_F3, 0x51, false, -1); } +void vsqrtss(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x51, false, -1); } void vsqrtss(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_F3, 0x51, false, -1); } -void vunpckhpd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x15, true, -1); } +void vunpckhpd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x15, true, -1); } void vunpckhpd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x15, true, -1); } -void vunpckhps(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F, 0x15, true, -1); } +void vunpckhps(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F, 0x15, true, -1); } void vunpckhps(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F, 0x15, true, -1); } -void vunpcklpd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0x14, true, -1); } +void vunpcklpd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F | PP_66, 0x14, true, -1); } void vunpcklpd(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0x14, true, -1); } -void vunpcklps(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F, 0x14, true, -1); } +void vunpcklps(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, MM_0F, 0x14, true, -1); } void vunpcklps(const Xmm& xmm, const Operand& op) { opAVX_X_X_XM(xmm, xmm, op, MM_0F, 0x14, true, -1); } void vaeskeygenassist(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F3A | PP_66, 0xDF, false, 0, imm); } void vroundpd(const Xmm& xm, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(xm, op, MM_0F3A | PP_66, 0x09, true, 0, imm); } @@ -954,14 +997,14 @@ void vaesenclast(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F38 | PP_66, 0xDD, false, 0); } void vaesdec(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F38 | PP_66, 0xDE, false, 0); } void vaesdeclast(const Xmm& xmm, const Operand& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F38 | PP_66, 0xDF, false, 0); } -void vmaskmovps(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x2C, true, 0); } -void vmaskmovps(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x2E, true, 0); } -void vmaskmovpd(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x2D, true, 0); } -void vmaskmovpd(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x2F, true, 0); } -void vpmaskmovd(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x8C, true, 0); } -void vpmaskmovd(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 0); } -void vpmaskmovq(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x8C, true, 1); } -void vpmaskmovq(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 1); } +void vmaskmovps(const Xmm& x1, const Xmm& x2, const Address& addr) { opAVX_X_X_XM(x1, x2, addr, MM_0F38 | PP_66, 0x2C, true, 0); } +void vmaskmovps(const Address& addr, const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x2, x1, addr, MM_0F38 | PP_66, 0x2E, true, 0); } +void vmaskmovpd(const Xmm& x1, const Xmm& x2, const Address& addr) { opAVX_X_X_XM(x1, x2, addr, MM_0F38 | PP_66, 0x2D, true, 0); } +void vmaskmovpd(const Address& addr, const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x2, x1, addr, MM_0F38 | PP_66, 0x2F, true, 0); } +void vpmaskmovd(const Xmm& x1, const Xmm& x2, const Address& addr) { opAVX_X_X_XM(x1, x2, addr, MM_0F38 | PP_66, 0x8C, true, 0); } +void vpmaskmovd(const Address& addr, const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x2, x1, addr, MM_0F38 | PP_66, 0x8E, true, 0); } +void vpmaskmovq(const Xmm& x1, const Xmm& x2, const Address& addr) { opAVX_X_X_XM(x1, x2, addr, MM_0F38 | PP_66, 0x8C, true, 1); } +void vpmaskmovq(const Address& addr, const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x2, x1, addr, MM_0F38 | PP_66, 0x8E, true, 1); } void vpermd(const Ymm& y1, const Ymm& y2, const Operand& op) { opAVX_X_X_XM(y1, y2, op, MM_0F38 | PP_66, 0x36, true, 0); } void vpermps(const Ymm& y1, const Ymm& y2, const Operand& op) { opAVX_X_X_XM(y1, y2, op, MM_0F38 | PP_66, 0x16, true, 0); } void vpermq(const Ymm& y, const Operand& op, uint8 imm) { opAVX_X_XM_IMM(y, op, MM_0F3A | PP_66, 0x00, true, 1, imm); } @@ -1254,13 +1297,13 @@ void vcmpgt_oqss(const Xmm& x, const Operand& op) { vcmpss(x, op, 30); } void vcmptrue_usss(const Xmm& x1, const Xmm& x2, const Operand& op) { vcmpss(x1, x2, op, 31); } void vcmptrue_usss(const Xmm& x, const Operand& op) { vcmpss(x, op, 31); } -void vmovhpd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x, op1, op2, MM_0F | PP_66, 0x16, false); } +void vmovhpd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x, op1, op2, MM_0F | PP_66, 0x16, false); } void vmovhpd(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_66, 0x17, false); } -void vmovhps(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x, op1, op2, MM_0F, 0x16, false); } +void vmovhps(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x, op1, op2, MM_0F, 0x16, false); } void vmovhps(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F, 0x17, false); } -void vmovlpd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x, op1, op2, MM_0F | PP_66, 0x12, false); } +void vmovlpd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x, op1, op2, MM_0F | PP_66, 0x12, false); } void vmovlpd(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_66, 0x13, false); } -void vmovlps(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x, op1, op2, MM_0F, 0x12, false); } +void vmovlps(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !op2.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x, op1, op2, MM_0F, 0x12, false); } void vmovlps(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F, 0x13, false); } void vfmadd132pd(const Xmm& xmm, const Xmm& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F38 | PP_66, 0x98, true, 1); } void vfmadd213pd(const Xmm& xmm, const Xmm& op1, const Operand& op2 = Operand()) { opAVX_X_X_XM(xmm, op1, op2, MM_0F38 | PP_66, 0xA8, true, 1); } @@ -1325,11 +1368,15 @@ void vaesimc(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0xDB, false, 0); } void vbroadcastf128(const Ymm& y, const Address& addr) { opAVX_X_XM_IMM(y, addr, MM_0F38 | PP_66, 0x1A, true, 0); } void vbroadcasti128(const Ymm& y, const Address& addr) { opAVX_X_XM_IMM(y, addr, MM_0F38 | PP_66, 0x5A, true, 0); } -void vbroadcastsd(const Ymm& y, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(y, op, MM_0F38 | PP_66, 0x19, true, 0); } -void vbroadcastss(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x18, true, 0); } +void vbroadcastsd(const Ymm& y, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(y, op, MM_0F38 | PP_66, 0x19, true, 0); } +void vbroadcastss(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x18, true, 0); } +void vpbroadcastb(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x78, true, 0); } +void vpbroadcastw(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x79, true, 0); } +void vpbroadcastd(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x58, true, 0); } +void vpbroadcastq(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x59, true, 0); } void vextractf128(const Operand& op, const Ymm& y, uint8 imm) { opAVX_X_X_XMcvt(y, y.isXMM() ? xm0 : ym0, op, op.isXMM(), Operand::YMM, MM_0F3A | PP_66, 0x19, true, 0); db(imm); } void vextracti128(const Operand& op, const Ymm& y, uint8 imm) { opAVX_X_X_XMcvt(y, y.isXMM() ? xm0 : ym0, op, op.isXMM(), Operand::YMM, MM_0F3A | PP_66, 0x39, true, 0); db(imm); } -void vextractps(const Operand& op, const Xmm& x, uint8 imm) { if (!(op.isREG(32) || op.isMEM()) || x.isYMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, op.isREG(), Operand::XMM, MM_0F3A | PP_66, 0x17, false, 0); db(imm); } +void vextractps(const Operand& op, const Xmm& x, uint8 imm) { if (!(op.isREG(32) || op.isMEM()) || x.isYMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, op.isREG(), Operand::XMM, MM_0F3A | PP_66, 0x17, false, 0); db(imm); } void vinsertf128(const Ymm& y1, const Ymm& y2, const Operand& op, uint8 imm) { opAVX_X_X_XMcvt(y1, y2, op, op.isXMM(), Operand::YMM, MM_0F3A | PP_66, 0x18, true, 0); db(imm); } void vinserti128(const Ymm& y1, const Ymm& y2, const Operand& op, uint8 imm) { opAVX_X_X_XMcvt(y1, y2, op, op.isXMM(), Operand::YMM, MM_0F3A | PP_66, 0x38, true, 0); db(imm); } void vperm2f128(const Ymm& y1, const Ymm& y2, const Operand& op, uint8 imm) { opAVX_X_X_XM(y1, y2, op, MM_0F3A | PP_66, 0x06, true, 0); db(imm); } @@ -1338,16 +1385,16 @@ void vldmxcsr(const Address& addr) { opAVX_X_X_XM(xm2, xm0, addr, MM_0F, 0xAE, false, -1); } void vstmxcsr(const Address& addr) { opAVX_X_X_XM(xm3, xm0, addr, MM_0F, 0xAE, false, -1); } void vmaskmovdqu(const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x1, xm0, x2, MM_0F | PP_66, 0xF7, false, -1); } -void vpextrb(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(i32e) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x14, false); db(imm); } +void vpextrb(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(i32e) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x14, false); db(imm); } void vpextrw(const Reg& r, const Xmm& x, uint8 imm) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, x, MM_0F | PP_66, 0xC5, false, r.isBit(64) ? 1 : 0); db(imm); } void vpextrw(const Address& addr, const Xmm& x, uint8 imm) { opAVX_X_X_XM(x, xm0, addr, MM_0F3A | PP_66, 0x15, false); db(imm); } -void vpextrd(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x16, false, 0); db(imm); } -void vpinsrb(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x20, false); db(imm); } -void vpinsrb(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x20, false); db(imm); } -void vpinsrw(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F | PP_66, 0xC4, false); db(imm); } -void vpinsrw(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F | PP_66, 0xC4, false); db(imm); } -void vpinsrd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 0); db(imm); } -void vpinsrd(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 0); db(imm); } +void vpextrd(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x16, false, 0); db(imm); } +void vpinsrb(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x20, false); db(imm); } +void vpinsrb(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x20, false); db(imm); } +void vpinsrw(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F | PP_66, 0xC4, false); db(imm); } +void vpinsrw(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F | PP_66, 0xC4, false); db(imm); } +void vpinsrd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 0); db(imm); } +void vpinsrd(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 0); db(imm); } void vpmovmskb(const Reg32e& r, const Xmm& x) { bool isYMM= x.isYMM(); opAVX_X_X_XM(isYMM ? Ymm(r.getIdx()) : Xmm(r.getIdx()), isYMM ? ym0 : xm0, x, MM_0F | PP_66, 0xD7, true); } void vpslldq(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym7 : xm7, x1, x2, MM_0F | PP_66, 0x73, true); db(imm); } void vpslldq(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym7 : xm7, x, x, MM_0F | PP_66, 0x73, true); db(imm); } @@ -1382,37 +1429,39 @@ void vmovq(const Xmm& x, const Address& addr) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_F3, 0x7E, false, -1); } void vmovq(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_66, 0xD6, false, -1); } void vmovq(const Xmm& x1, const Xmm& x2) { opAVX_X_X_XM(x1, xm0, x2, MM_0F | PP_F3, 0x7E, false, -1); } -void vmovhlps(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x1, x2, op, MM_0F, 0x12, false); } -void vmovlhps(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x1, x2, op, MM_0F, 0x16, false); } -void vmovmskpd(const Reg& r, const Xmm& x) { if (!r.isBit(i32e)) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x.isXMM() ? Xmm(r.getIdx()) : Ymm(r.getIdx()), x.isXMM() ? xm0 : ym0, x, MM_0F | PP_66, 0x50, true, 0); } -void vmovmskps(const Reg& r, const Xmm& x) { if (!r.isBit(i32e)) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x.isXMM() ? Xmm(r.getIdx()) : Ymm(r.getIdx()), x.isXMM() ? xm0 : ym0, x, MM_0F, 0x50, true, 0); } +void vmovhlps(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x1, x2, op, MM_0F, 0x12, false); } +void vmovlhps(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x1, x2, op, MM_0F, 0x16, false); } +void vmovmskpd(const Reg& r, const Xmm& x) { if (!r.isBit(i32e)) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x.isXMM() ? Xmm(r.getIdx()) : Ymm(r.getIdx()), x.isXMM() ? xm0 : ym0, x, MM_0F | PP_66, 0x50, true, 0); } +void vmovmskps(const Reg& r, const Xmm& x) { if (!r.isBit(i32e)) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x.isXMM() ? Xmm(r.getIdx()) : Ymm(r.getIdx()), x.isXMM() ? xm0 : ym0, x, MM_0F, 0x50, true, 0); } void vmovntdq(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, x.isXMM() ? xm0 : ym0, addr, MM_0F | PP_66, 0xE7, true); } void vmovntpd(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, x.isXMM() ? xm0 : ym0, addr, MM_0F | PP_66, 0x2B, true); } void vmovntps(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, x.isXMM() ? xm0 : ym0, addr, MM_0F, 0x2B, true); } void vmovntdqa(const Xmm& x, const Address& addr) { opAVX_X_X_XM(x, x.isXMM() ? xm0 : ymm0, addr, MM_0F38 | PP_66, 0x2A, true); } -void vmovsd(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F2, 0x10, false); } +void vmovsd(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F2, 0x10, false); } void vmovsd(const Xmm& x, const Address& addr) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_F2, 0x10, false); } void vmovsd(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_F2, 0x11, false); } -void vmovss(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x10, false); } +void vmovss(const Xmm& x1, const Xmm& x2, const Operand& op = Operand()) { if (!op.isNone() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(x1, x2, op, MM_0F | PP_F3, 0x10, false); } void vmovss(const Xmm& x, const Address& addr) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_F3, 0x10, false); } void vmovss(const Address& addr, const Xmm& x) { opAVX_X_X_XM(x, xm0, addr, MM_0F | PP_F3, 0x11, false); } void vcvtss2si(const Reg32& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F3, 0x2D, false, 0); } void vcvttss2si(const Reg32& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F3, 0x2C, false, 0); } void vcvtsd2si(const Reg32& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F2, 0x2D, false, 0); } void vcvttsd2si(const Reg32& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F2, 0x2C, false, 0); } -void vcvtsi2ss(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !(op2.isREG(i32e) || op2.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, op1, op2, op2.isREG(), Operand::XMM, MM_0F | PP_F3, 0x2A, false, (op1.isMEM() || op2.isMEM()) ? -1 : (op1.isREG(32) || op2.isREG(32)) ? 0 : 1); } -void vcvtsi2sd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !(op2.isREG(i32e) || op2.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, op1, op2, op2.isREG(), Operand::XMM, MM_0F | PP_F2, 0x2A, false, (op1.isMEM() || op2.isMEM()) ? -1 : (op1.isREG(32) || op2.isREG(32)) ? 0 : 1); } -void vcvtps2pd(const Xmm& x, const Operand& op) { if (!op.isMEM() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, !op.isMEM(), x.isXMM() ? Operand::XMM : Operand::YMM, MM_0F, 0x5A, true); } -void vcvtdq2pd(const Xmm& x, const Operand& op) { if (!op.isMEM() && !op.isXMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, !op.isMEM(), x.isXMM() ? Operand::XMM : Operand::YMM, MM_0F | PP_F3, 0xE6, true); } -void vcvtpd2ps(const Xmm& x, const Operand& op) { if (x.isYMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_66, 0x5A, true); } -void vcvtpd2dq(const Xmm& x, const Operand& op) { if (x.isYMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_F2, 0xE6, true); } -void vcvttpd2dq(const Xmm& x, const Operand& op) { if (x.isYMM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_66, 0xE6, true); } +void vcvtsi2ss(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !(op2.isREG(i32e) || op2.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, op1, op2, op2.isREG(), Operand::XMM, MM_0F | PP_F3, 0x2A, false, (op1.isMEM() || op2.isMEM()) ? -1 : (op1.isREG(32) || op2.isREG(32)) ? 0 : 1); } +void vcvtsi2sd(const Xmm& x, const Operand& op1, const Operand& op2 = Operand()) { if (!op2.isNone() && !(op2.isREG(i32e) || op2.isMEM())) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, op1, op2, op2.isREG(), Operand::XMM, MM_0F | PP_F2, 0x2A, false, (op1.isMEM() || op2.isMEM()) ? -1 : (op1.isREG(32) || op2.isREG(32)) ? 0 : 1); } +void vcvtps2pd(const Xmm& x, const Operand& op) { if (!op.isMEM() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, !op.isMEM(), x.isXMM() ? Operand::XMM : Operand::YMM, MM_0F, 0x5A, true); } +void vcvtdq2pd(const Xmm& x, const Operand& op) { if (!op.isMEM() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x.isXMM() ? xm0 : ym0, op, !op.isMEM(), x.isXMM() ? Operand::XMM : Operand::YMM, MM_0F | PP_F3, 0xE6, true); } +void vcvtpd2ps(const Xmm& x, const Operand& op) { if (x.isYMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_66, 0x5A, true); } +void vcvtpd2dq(const Xmm& x, const Operand& op) { if (x.isYMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_F2, 0xE6, true); } +void vcvttpd2dq(const Xmm& x, const Operand& op) { if (x.isYMM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XM(op.isYMM() ? Ymm(x.getIdx()) : x, op.isYMM() ? ym0 : xm0, op, MM_0F | PP_66, 0xE6, true); } +void vcvtph2ps(const Xmm& x, const Operand& op) { if (!op.isMEM() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opVex(x, NULL, &op, MM_0F38 | PP_66, 0x13, 0); } +void vcvtps2ph(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isMEM() && !op.isXMM()) throw Error(ERR_BAD_COMBINATION); opVex(x, NULL, &op, MM_0F3A | PP_66, 0x1d, 0); db(imm); } #ifdef XBYAK64 void vmovq(const Xmm& x, const Reg64& reg) { opAVX_X_X_XM(x, xm0, Xmm(reg.getIdx()), MM_0F | PP_66, 0x6E, false, 1); } void vmovq(const Reg64& reg, const Xmm& x) { opAVX_X_X_XM(x, xm0, Xmm(reg.getIdx()), MM_0F | PP_66, 0x7E, false, 1); } -void vpextrq(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x16, false, 1); db(imm); } -void vpinsrq(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 1); db(imm); } -void vpinsrq(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw ERR_BAD_COMBINATION; opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 1); db(imm); } +void vpextrq(const Operand& op, const Xmm& x, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, xm0, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x16, false, 1); db(imm); } +void vpinsrq(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 1); db(imm); } +void vpinsrq(const Xmm& x, const Operand& op, uint8 imm) { if (!op.isREG(64) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x, x, op, !op.isMEM(), Operand::XMM, MM_0F3A | PP_66, 0x22, false, 1); db(imm); } void vcvtss2si(const Reg64& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F3, 0x2D, false, 1); } void vcvttss2si(const Reg64& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F3, 0x2C, false, 1); } void vcvtsd2si(const Reg64& r, const Operand& op) { opAVX_X_X_XM(Xmm(r.getIdx()), xm0, op, MM_0F | PP_F2, 0x2D, false, 1); } @@ -1438,13 +1487,3 @@ void vpgatherqd(const Xmm& x1, const Address& addr, const Xmm& x2) { opGather(x1, addr, x2, MM_0F38 | PP_66, 0x91, 0, 2); } void vpgatherdq(const Xmm& x1, const Address& addr, const Xmm& x2) { opGather(x1, addr, x2, MM_0F38 | PP_66, 0x90, 1, 0); } void vpgatherqq(const Xmm& x1, const Address& addr, const Xmm& x2) { opGather(x1, addr, x2, MM_0F38 | PP_66, 0x91, 1, 1); } - -// mods - -void vpbroadcastb(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x78, true, 0); } -void vpbroadcastw(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x79, true, 0); } -void vpbroadcastd(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x58, true, 0); } -void vpbroadcastq(const Xmm& x, const Operand& op) { if (!(op.isXMM() || op.isMEM())) throw ERR_BAD_COMBINATION; opAVX_X_XM_IMM(x, op, MM_0F38 | PP_66, 0x59, true, 0); } - -// supportYMM = true -// vpblendvb, vpsllw-vpsrlq diff -Nru pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak_util.h pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak_util.h --- pcsx2-1.3.1+dfsg/plugins/GSdx/xbyak/xbyak_util.h 2014-04-13 08:06:28.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSdx/xbyak/xbyak_util.h 2016-01-05 17:28:08.000000000 +0000 @@ -37,7 +37,7 @@ */ #include "xbyak.h" -#ifdef _WIN32 +#ifdef _MSC_VER #if (_MSC_VER < 1400) && defined(XBYAK32) static inline __declspec(naked) void __cpuid(int[4], int) { @@ -86,7 +86,7 @@ CPU detection class */ class Cpu { - unsigned int type_; + uint64 type_; unsigned int get32bitAsBE(const char *x) const { return x[0] | (x[1] << 8) | (x[2] << 16) | (x[3] << 24); @@ -126,7 +126,7 @@ int displayModel; // model + extModel static inline void getCpuid(unsigned int eaxIn, unsigned int data[4]) { -#ifdef _WIN32 +#ifdef _MSC_VER __cpuid(reinterpret_cast(data), eaxIn); #else __cpuid(eaxIn, data[0], data[1], data[2], data[3]); @@ -134,7 +134,7 @@ } static inline void getCpuidEx(unsigned int eaxIn, unsigned int ecxIn, unsigned int data[4]) { -#ifdef _WIN32 +#ifdef _MSC_VER __cpuidex(reinterpret_cast(data), eaxIn, ecxIn); #else __cpuid_count(eaxIn, ecxIn, data[0], data[1], data[2], data[3]); @@ -152,42 +152,53 @@ return ((uint64)edx << 32) | eax; #endif } - enum Type { - NONE = 0, - tMMX = 1 << 0, - tMMX2 = 1 << 1, - tCMOV = 1 << 2, - tSSE = 1 << 3, - tSSE2 = 1 << 4, - tSSE3 = 1 << 5, - tSSSE3 = 1 << 6, - tSSE41 = 1 << 7, - tSSE42 = 1 << 8, - tPOPCNT = 1 << 9, - tAESNI = 1 << 10, - tSSE5 = 1 << 11, - tOSXSAVE = 1 << 12, - tPCLMULQDQ = 1 << 13, - tAVX = 1 << 14, - tFMA = 1 << 15, - - t3DN = 1 << 16, - tE3DN = 1 << 17, - tSSE4a = 1 << 18, - tRDTSCP = 1 << 19, - tAVX2 = 1 << 20, - tGPR1 = 1 << 21, // andn, bextr, blsi, blsmk, blsr, tzcnt - tGPR2 = 1 << 22, // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx - tLZCNT = 1 << 23, - - tINTEL = 1 << 24, - tAMD = 1 << 25 - }; + typedef uint64 Type; + static const Type NONE = 0; + static const Type tMMX = 1 << 0; + static const Type tMMX2 = 1 << 1; + static const Type tCMOV = 1 << 2; + static const Type tSSE = 1 << 3; + static const Type tSSE2 = 1 << 4; + static const Type tSSE3 = 1 << 5; + static const Type tSSSE3 = 1 << 6; + static const Type tSSE41 = 1 << 7; + static const Type tSSE42 = 1 << 8; + static const Type tPOPCNT = 1 << 9; + static const Type tAESNI = 1 << 10; + static const Type tSSE5 = 1 << 11; + static const Type tOSXSAVE = 1 << 12; + static const Type tPCLMULQDQ = 1 << 13; + static const Type tAVX = 1 << 14; + static const Type tFMA = 1 << 15; + + static const Type t3DN = 1 << 16; + static const Type tE3DN = 1 << 17; + static const Type tSSE4a = 1 << 18; + static const Type tRDTSCP = 1 << 19; + static const Type tAVX2 = 1 << 20; + static const Type tBMI1 = 1 << 21; // andn, bextr, blsi, blsmsk, blsr, tzcnt + static const Type tBMI2 = 1 << 22; // bzhi, mulx, pdep, pext, rorx, sarx, shlx, shrx + static const Type tLZCNT = 1 << 23; + + static const Type tINTEL = 1 << 24; + static const Type tAMD = 1 << 25; + + static const Type tENHANCED_REP = 1 << 26; // enhanced rep movsb/stosb + static const Type tRDRAND = 1 << 27; + static const Type tADX = 1 << 28; // adcx, adox + static const Type tRDSEED = 1 << 29; // rdseed + static const Type tSMAP = 1 << 30; // stac + static const Type tHLE = uint64(1) << 31; // xacquire, xrelease, xtest + static const Type tRTM = uint64(1) << 32; // xbegin, xend, xabort + static const Type tF16C = uint64(1) << 33; // vcvtph2ps, vcvtps2ph + static const Type tMOVBE = uint64(1) << 34; // mobve + Cpu() : type_(NONE) { unsigned int data[4]; getCpuid(0, data); + const unsigned int maxNum = data[0]; static const char intel[] = "ntel"; static const char amd[] = "cAMD"; if (data[2] == get32bitAsBE(amd)) { @@ -210,10 +221,13 @@ if (data[2] & (1U << 9)) type_ |= tSSSE3; if (data[2] & (1U << 19)) type_ |= tSSE41; if (data[2] & (1U << 20)) type_ |= tSSE42; + if (data[2] & (1U << 22)) type_ |= tMOVBE; if (data[2] & (1U << 23)) type_ |= tPOPCNT; if (data[2] & (1U << 25)) type_ |= tAESNI; if (data[2] & (1U << 1)) type_ |= tPCLMULQDQ; if (data[2] & (1U << 27)) type_ |= tOSXSAVE; + if (data[2] & (1U << 30)) type_ |= tRDRAND; + if (data[2] & (1U << 29)) type_ |= tF16C; if (data[3] & (1U << 15)) type_ |= tCMOV; if (data[3] & (1U << 23)) type_ |= tMMX; @@ -228,10 +242,18 @@ if (data[2] & (1U << 12)) type_ |= tFMA; } } - getCpuidEx(7, 0, data); - if (type_ & tAVX && data[1] & 0x20) type_ |= tAVX2; - if (data[1] & (1U << 3)) type_ |= tGPR1; - if (data[1] & (1U << 8)) type_ |= tGPR2; + if (maxNum >= 7) { + getCpuidEx(7, 0, data); + if (type_ & tAVX && data[1] & 0x20) type_ |= tAVX2; + if (data[1] & (1U << 3)) type_ |= tBMI1; + if (data[1] & (1U << 8)) type_ |= tBMI2; + if (data[1] & (1U << 9)) type_ |= tENHANCED_REP; + if (data[1] & (1U << 18)) type_ |= tRDSEED; + if (data[1] & (1U << 19)) type_ |= tADX; + if (data[1] & (1U << 20)) type_ |= tSMAP; + if (data[1] & (1U << 4)) type_ |= tHLE; + if (data[1] & (1U << 11)) type_ |= tRTM; + } setFamily(); } void putFamily() @@ -294,6 +316,7 @@ Pack(const Pack& rhs) : n_(rhs.n_) { + if (n_ > maxTblNum) throw Error(ERR_INTERNAL); for (size_t i = 0; i < n_; i++) tbl_[i] = rhs.tbl_[i]; } Pack(const Xbyak::Reg64& t0) @@ -320,7 +343,7 @@ { if (n_ == 10) { fprintf(stderr, "ERR Pack::can't append\n"); - throw ERR_BAD_PARAMETER; + throw Error(ERR_BAD_PARAMETER); } tbl_[n_++] = &t; return *this; @@ -329,7 +352,7 @@ { if (n > maxTblNum) { fprintf(stderr, "ERR Pack::init bad n=%d\n", (int)n); - throw ERR_BAD_PARAMETER; + throw Error(ERR_BAD_PARAMETER); } n_ = n; for (size_t i = 0; i < n; i++) { @@ -340,7 +363,7 @@ { if (n >= n_) { fprintf(stderr, "ERR Pack bad n=%d\n", (int)n); - throw ERR_BAD_PARAMETER; + throw Error(ERR_BAD_PARAMETER); } return *tbl_[n]; } @@ -353,7 +376,7 @@ if (num == size_t(-1)) num = n_ - pos; if (pos + num > n_) { fprintf(stderr, "ERR Pack::sub bad pos=%d, num=%d\n", (int)pos, (int)num); - throw ERR_BAD_PARAMETER; + throw Error(ERR_BAD_PARAMETER); } Pack pack; pack.n_ = num; @@ -362,6 +385,13 @@ } return pack; } + void put() const + { + for (size_t i = 0; i < n_; i++) { + printf("%s ", tbl_[i]->toString()); + } + printf("\n"); + } }; class StackFrame { @@ -420,27 +450,27 @@ , t(t_) { using namespace Xbyak; - if (pNum < 0 || pNum > 4) throw ERR_BAD_PNUM; + if (pNum < 0 || pNum > 4) throw Error(ERR_BAD_PNUM); const int allRegNum = pNum + tNum_ + (useRcx_ ? 1 : 0) + (useRdx_ ? 1 : 0); - if (allRegNum < pNum || allRegNum > 14) throw ERR_BAD_TNUM; - const Reg64& rsp = code->rsp; - const AddressFrame& ptr = code->ptr; + if (allRegNum < pNum || allRegNum > 14) throw Error(ERR_BAD_TNUM); + const Reg64& _rsp = code->rsp; + const AddressFrame& _ptr = code->ptr; saveNum_ = (std::max)(0, allRegNum - noSaveNum); const int *tbl = getOrderTbl() + noSaveNum; P_ = saveNum_ + (stackSizeByte + 7) / 8; if (P_ > 0 && (P_ & 1) == 0) P_++; // here (rsp % 16) == 8, then increment P_ for 16 byte alignment P_ *= 8; - if (P_ > 0) code->sub(rsp, P_); + if (P_ > 0) code->sub(_rsp, P_); #ifdef XBYAK64_WIN for (int i = 0; i < (std::min)(saveNum_, 4); i++) { - code->mov(ptr [rsp + P_ + (i + 1) * 8], Reg64(tbl[i])); + code->mov(_ptr [_rsp + P_ + (i + 1) * 8], Reg64(tbl[i])); } for (int i = 4; i < saveNum_; i++) { - code->mov(ptr [rsp + P_ - 8 * (saveNum_ - i)], Reg64(tbl[i])); + code->mov(_ptr [_rsp + P_ - 8 * (saveNum_ - i)], Reg64(tbl[i])); } #else for (int i = 0; i < saveNum_; i++) { - code->mov(ptr [rsp + P_ - 8 * (saveNum_ - i)], Reg64(tbl[i])); + code->mov(_ptr [_rsp + P_ - 8 * (saveNum_ - i)], Reg64(tbl[i])); } #endif int pos = 0; @@ -462,22 +492,22 @@ void close(bool callRet = true) { using namespace Xbyak; - const Reg64& rsp = code_->rsp; - const AddressFrame& ptr = code_->ptr; + const Reg64& _rsp = code_->rsp; + const AddressFrame& _ptr = code_->ptr; const int *tbl = getOrderTbl() + noSaveNum; #ifdef XBYAK64_WIN for (int i = 0; i < (std::min)(saveNum_, 4); i++) { - code_->mov(Reg64(tbl[i]), ptr [rsp + P_ + (i + 1) * 8]); + code_->mov(Reg64(tbl[i]), _ptr [_rsp + P_ + (i + 1) * 8]); } for (int i = 4; i < saveNum_; i++) { - code_->mov(Reg64(tbl[i]), ptr [rsp + P_ - 8 * (saveNum_ - i)]); + code_->mov(Reg64(tbl[i]), _ptr [_rsp + P_ - 8 * (saveNum_ - i)]); } #else for (int i = 0; i < saveNum_; i++) { - code_->mov(Reg64(tbl[i]), ptr [rsp + P_ - 8 * (saveNum_ - i)]); + code_->mov(Reg64(tbl[i]), _ptr [_rsp + P_ - 8 * (saveNum_ - i)]); } #endif - if (P_ > 0) code_->add(rsp, P_); + if (P_ > 0) code_->add(_rsp, P_); if (callRet) code_->ret(); } @@ -486,8 +516,8 @@ if (!makeEpilog_) return; try { close(); - } catch (Xbyak::Error e) { - printf("ERR:StackFrame %s\n", ConvertErrorToString(e)); + } catch (std::exception& e) { + printf("ERR:StackFrame %s\n", e.what()); exit(1); } catch (...) { printf("ERR:StackFrame otherwise\n"); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/CMakeLists.txt pcsx2-1.4.0/plugins/GSnull/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/GSnull/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output GSnull) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(GSnullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(GSnullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(GSnullFinalFlags ${OptimizationFlags}) - -endif() +set(GSnullFinalFlags "") # GSnull sources set(GSnullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/GS.cpp pcsx2-1.4.0/plugins/GSnull/GS.cpp --- pcsx2-1.3.1+dfsg/plugins/GSnull/GS.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/GS.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -121,7 +121,7 @@ GSLog::Close(); } -EXPORT_C_(s32) GSopen(void *pDsp, char *Title, int multithread) +EXPORT_C_(s32) GSopen(void *pDsp, const char *Title, int multithread) { int err = 0; GSLog::WriteLn("GS open."); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/GS.h pcsx2-1.4.0/plugins/GSnull/GS.h --- pcsx2-1.3.1+dfsg/plugins/GSnull/GS.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/GS.h 2016-01-05 17:28:08.000000000 +0000 @@ -40,7 +40,7 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif //#define GS_LOG GSLog::Log diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Linux/GSLinux.cpp pcsx2-1.4.0/plugins/GSnull/Linux/GSLinux.cpp --- pcsx2-1.3.1+dfsg/plugins/GSnull/Linux/GSLinux.cpp 2010-06-06 22:25:11.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Linux/GSLinux.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -20,7 +20,7 @@ int screen; GtkScrolledWindow *win; -int GSOpenWindow(void *pDsp, char *Title) +int GSOpenWindow(void *pDsp, const char *Title) { display = XOpenDisplay(0); screen = DefaultScreen(display); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Linux/GSLinux.h pcsx2-1.4.0/plugins/GSnull/Linux/GSLinux.h --- pcsx2-1.3.1+dfsg/plugins/GSnull/Linux/GSLinux.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Linux/GSLinux.h 2016-01-05 17:28:08.000000000 +0000 @@ -20,7 +20,7 @@ #include #include -extern int GSOpenWindow(void *pDsp, char *Title); +extern int GSOpenWindow(void *pDsp, const char *Title); extern int GSOpenWindow2(void *pDsp, u32 flags); extern void GSCloseWindow(); extern void GSProcessMessages(); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vc2008.sln pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vc2008.sln --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vc2008.sln 2009-10-30 22:34:27.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vc2008.sln 2016-01-05 17:28:08.000000000 +0000 @@ -1,20 +1,20 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "GSnull_vc2008.vcproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 - {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GSnull", "GSnull_vc2008.vcproj", "{3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.ActiveCfg = Debug|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Debug|Win32.Build.0 = Debug|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.ActiveCfg = Release|Win32 + {3D0EB14D-32F3-4D82-9C6D-B806ADBB859C}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull.vcxproj pcsx2-1.4.0/plugins/GSnull/Windows/GSnull.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull.vcxproj 2011-10-30 01:39:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -21,10 +21,12 @@ DynamicLibrary MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary MultiByte + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull.vcxproj.filters pcsx2-1.4.0/plugins/GSnull/Windows/GSnull.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull.vcxproj.filters 2011-10-30 01:39:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -39,6 +39,9 @@ Source Files + + Source Files + diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2012.vcxproj pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - GSnull - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} - GSnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName)-dbg - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - GS.def - MachineX86 - - - - - - - - - GS.def - MachineX86 - - - - - - - - - - true - true - - - - - - - - - - true - true - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ - - - - - {c3be7c7d-acc0-4d04-87e2-d8c905f5623d} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {d049a6c7-ffed-4403-8697-c32b110473ec} - h;hpp;hxx;hm;inl;inc - - - {43d885bc-a996-4dc7-935e-c5511250143e} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Resource Files - - - - - Header Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2013.vcxproj pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - GSnull - {5FCBD521-5A0B-4D97-A823-A97E6BAB9101} - GSnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName)-dbg - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - GS.def - MachineX86 - - - - - - - - - GS.def - MachineX86 - - - - - - - - - - true - true - - - - - - - - - - true - true - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSnull_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSnull_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ - - - - - {c3be7c7d-acc0-4d04-87e2-d8c905f5623d} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {d049a6c7-ffed-4403-8697-c32b110473ec} - h;hpp;hxx;hm;inl;inc - - - {43d885bc-a996-4dc7-935e-c5511250143e} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Resource Files - - - - - Header Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GS.rc pcsx2-1.4.0/plugins/GSnull/Windows/GS.rc --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GS.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GS.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,116 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Argentina) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESS) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 212, 121 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "GSNull Configuration" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,100,50,14 + PUSHBUTTON "Cancel",IDCANCEL,113,100,50,14 + CONTROL "Enable Logging (for develop use only)",IDC_LOGGING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,187,13 +END + +IDD_ABOUT DIALOGEX 0, 0, 177, 106 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "GSNull About" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,65,85,50,14 + LTEXT "GS Driver",IDC_NAME,70,10,48,8 + GROUPBOX "",IDC_STATIC,5,35,170,40 + LTEXT "Author: Shadow and linuzappz",IDC_STATIC,29,19,141,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 205 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 99 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Argentina) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSwin.cpp pcsx2-1.4.0/plugins/GSnull/Windows/GSwin.cpp --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSwin.cpp 2011-10-30 01:39:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSwin.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -34,7 +34,7 @@ return 0; } -int GSOpenWindow(void *pDsp, char *Title) +int GSOpenWindow(void *pDsp, const char *Title) { WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSwin.h pcsx2-1.4.0/plugins/GSnull/Windows/GSwin.h --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/GSwin.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/GSwin.h 2016-01-05 17:28:08.000000000 +0000 @@ -18,7 +18,7 @@ #include #include -extern int GSOpenWindow(void *pDsp, char *Title); +extern int GSOpenWindow(void *pDsp, const char *Title); extern void GSCloseWindow(); extern void GSProcessMessages(); extern void HandleKeyEvent(keyEvent *ev); diff -Nru pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/resource.h pcsx2-1.4.0/plugins/GSnull/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/GSnull/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/GSnull/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by GS.rc +// +#define IDD_CONFDLG 101 +#define IDD_CONFIG 101 +#define IDD_ABOUT 103 +#define IDC_NAME 1000 +#define IDC_CHECK1 1007 +#define IDC_LOGGING 1007 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/CMakeLists.txt pcsx2-1.4.0/plugins/LilyPad/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/LilyPad/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,66 @@ +# Check that people use the good file +if(NOT TOP_CMAKE_WAS_SOURCED) + message(FATAL_ERROR " + You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir. + It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt") +endif() + + +# plugin name +set(Output LilyPad-0.11.0) + +if(CMAKE_BUILD_TYPE STREQUAL Debug) + set(lilypadFinalFlags "-DPCSX2_DEBUG") +else() + set(lilypadFinalFlags "") +endif() + +# lilypad sources +set(lilypadSources + DeviceEnumerator.cpp + InputManager.cpp + KeyboardQueue.cpp + LilyPad.cpp + Linux/Config.cpp + Linux/ConfigHelper.cpp + Linux/JoyEvdev.cpp + Linux/KeyboardMouse.cpp + Linux/KeyboardQueue.cpp + ) + +# lilypad headers +set(lilypadHeaders + ) + +# lilypad Linux sources +set(lilypadLinuxSources + ) + +# lilypad Linux headers +set(lilypadLinuxHeaders + ) + +if (SDL2_API) + set(lilypadFinalLibs + ${SDL2_LIBRARIES} + ) +else() + set(lilypadFinalLibs + ${SDL_LIBRARY} + ) +endif() + +set(lilypadFinalLibs + #${lilypadFinalLibs} + #${GTK2_LIBRARIES} + #${X11_LIBRARIES} +) + +set(lilypadFinalSources + ${lilypadSources} + ${lilypadHeaders} + ${lilypadLinuxSources} + ${lilypadLinuxHeaders} +) + +add_pcsx2_plugin(${Output} "${lilypadFinalSources}" "${lilypadFinalLibs}" "${lilypadFinalFlags}") diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Config.cpp pcsx2-1.4.0/plugins/LilyPad/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Config.cpp 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -30,6 +30,25 @@ // Needed to know if raw input is available. It requires XP or higher. #include "RawInput.h" +// Hacks or configurations which PCSX2 needs with a specific value +void PCSX2_overrideConfig(GeneralConfig& config_in_out) { + config_in_out.disableScreenSaver = 0; // Not required - handled internally by PCSX2 + config_in_out.escapeFullscreenHack = 0; // Not required - handled internally by PCSX2 + config_in_out.saveStateTitle = 0; // Not required - handled internally by PCSX2 +} + +// Dialog widgets which should be disabled - mostly matching PCSX2_overrideConfig +const UINT* PCSX2_disabledWidgets() { + static const UINT disabledWidgets[] = { + IDC_DISABLE_SCREENSAVER, + IDC_ESCAPE_FULLSCREEN_HACK, + IDC_SAVE_STATE_TITLE, + IDC_ANALOG_START1, // start in analog mode - only useful for PS1 + 0 + }; + return disabledWidgets; +} + GeneralConfig config; // 1 if running inside a PS2 emulator. Set to 1 on any @@ -71,11 +90,11 @@ {L"Multitap 1", IDC_MULTITAP1, 0}, {L"Multitap 2", IDC_MULTITAP2, 0}, - {L"Escape Fullscreen Hack", IDC_ESCAPE_FULLSCREEN_HACK, 1}, - {L"Disable Screen Saver", IDC_DISABLE_SCREENSAVER, 1}, + {L"Escape Fullscreen Hack", IDC_ESCAPE_FULLSCREEN_HACK, 1}, // Not required for PCSX2 + {L"Disable Screen Saver", IDC_DISABLE_SCREENSAVER, 1}, // Not required for PCSX2 {L"Logging", IDC_DEBUG_FILE, 0}, - {L"Save State in Title", IDC_SAVE_STATE_TITLE, 0}, //No longer required, PCSX2 now handles it - avih 2011-05-17 + {L"Save State in Title", IDC_SAVE_STATE_TITLE, 0}, // Not required for PCSX2 {L"GH2", IDC_GH2_HACK, 0}, {L"Turbo Key Hack", IDC_TURBO_KEY_HACK, 0}, @@ -302,6 +321,25 @@ wcscat_s(iniFile, L"/LilyPad.ini"); createIniDir = false; + + FILE *temp = nullptr; + _wfopen_s(&temp, iniFile, L"r"); + if (!temp) { // File not found, possibly. + HRSRC res = FindResource(hInst, MAKEINTRESOURCE(IDR_INI1), RT_RCDATA); + if (!res) return; + HGLOBAL data = LoadResource(hInst, res); + if (!data) return; + size_t size = SizeofResource(hInst, res); + u8 *fdata = (u8*)LockResource(data); + _wfopen_s(&temp, iniFile, L"w"); + if (!temp) return; + fwrite(fdata, 1, size, temp); + fclose(temp); + } + else { + fclose(temp); + } + } int GetBinding(int port, int slot, int index, Device *&dev, Binding *&b, ForceFeedbackBinding *&ffb); @@ -1027,6 +1065,9 @@ RefreshEnabledDevicesAndDisplay(1); + if (ps2e) + PCSX2_overrideConfig(config); + return 0; } @@ -1765,7 +1806,7 @@ CheckDlgButton(hWnd, IDC_ANALOG_START1, BST_CHECKED*config.padConfigs[port][slot].autoAnalog); } EnableWindow(hWndCombo, enable); - EnableWindow(hWndAnalog, enable && !ps2e); + EnableWindow(hWndAnalog, enable); //ListView_SetExtendedListViewStyleEx(hWndList, LVS_EX_DOUBLEBUFFER|LVS_EX_ONECLICKACTIVATE, LVS_EX_DOUBLEBUFFER|LVS_EX_ONECLICKACTIVATE); recurse = 0; } @@ -1795,6 +1836,16 @@ SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Unplugged"); SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Dualshock 2"); SendMessage(hWndCombo, CB_ADDSTRING, 0, (LPARAM) L"Guitar"); + + if (ps2e) { + // This disabled some widgets which are not required for PCSX2. + // Currently the trigger is that it's in PS2 emulation mode + const UINT* toDisable = PCSX2_disabledWidgets(); + while (toDisable && *toDisable) { + EnableWindow(GetDlgItem(hWnd, *toDisable), 0); + toDisable++; + } + } } } UpdatePadPages(); @@ -1862,6 +1913,7 @@ wcscpy(file, config.lastSaveConfigFileName); ofn.lpstrInitialDir = config.lastSaveConfigPath; ofn.Flags = OFN_DONTADDTORECENT | OFN_LONGNAMES | OFN_NOCHANGEDIR; + ofn.lpstrDefExt = L"lily"; if (LOWORD(wParam) == ID_LOAD) { ofn.lpstrTitle = L"Load LilyPad Configuration"; ofn.Flags |= OFN_FILEMUSTEXIST; @@ -1924,7 +1976,6 @@ // sound plugin plays with it. SetVolume(100); } - config.vistaVolume = 100; } for (i=0; i<4; i++) { diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Config.h pcsx2-1.4.0/plugins/LilyPad/Config.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Config.h 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Config.h 2016-01-05 17:28:08.000000000 +0000 @@ -68,7 +68,7 @@ u8 vistaVolume; }; - u8 bools[1]; + u8 bools[16]; }; int volume; @@ -84,8 +84,6 @@ void UnloadConfigs(); -void AddIgnore(LPARAM k); - void SetVolume(int volume); int LoadSettings(int force = 0, wchar_t *file = 0); diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Default.ini pcsx2-1.4.0/plugins/LilyPad/Default.ini --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Default.ini 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Default.ini 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,120 @@ +[General Settings] +Last Config Path=inis +Last Config Name=LilyPad.lily +Force Cursor Hide=0 +Mouse Unfocus=1 +Background=1 +Multiple Bindings=0 +DirectInput Game Devices=1 +XInput=1 +DualShock 3=0 +Multitap 1=0 +Multitap 2=0 +Escape Fullscreen Hack=0 +Disable Screen Saver=0 +Logging=0 +Save State in Title=0 +GH2=0 +Turbo Key Hack=0 +Vista Volume=1 +Close Hacks=0 +Keyboard Mode=2 +Mouse Mode=0 +Volume=100 +[Pad 0 0] +Mode=1 +Auto Analog=0 +[Pad 0 1] +Mode=1 +Auto Analog=0 +[Pad 0 2] +Mode=1 +Auto Analog=0 +[Pad 0 3] +Mode=1 +Auto Analog=0 +[Pad 1 0] +Mode=1 +Auto Analog=0 +[Pad 1 1] +Mode=1 +Auto Analog=0 +[Pad 1 2] +Mode=1 +Auto Analog=0 +[Pad 1 3] +Mode=1 +Auto Analog=0 +[Device 0] +Display Name=XInput Pad 0 +Instance ID=XInput Pad 0 +API=4 +Type=3 +Binding 0=0x00040000, 0, 20, 65536, 0, 0, 0 +Binding 1=0x00040001, 0, 22, 65536, 0, 0, 0 +Binding 2=0x00040002, 0, 23, 65536, 0, 0, 0 +Binding 3=0x00040003, 0, 21, 65536, 0, 0, 0 +Binding 4=0x00040004, 0, 19, 65536, 0, 0, 0 +Binding 5=0x00040005, 0, 16, 65536, 0, 0, 0 +Binding 6=0x00040006, 0, 17, 65536, 0, 0, 0 +Binding 7=0x00040007, 0, 18, 65536, 0, 0, 0 +Binding 8=0x00040008, 0, 26, 65536, 0, 0, 0 +Binding 9=0x00040009, 0, 27, 65536, 0, 0, 0 +Binding 10=0x0004000C, 0, 30, 65536, 0, 0, 0 +Binding 11=0x0004000D, 0, 29, 65536, 0, 0, 0 +Binding 12=0x0004000E, 0, 31, 65536, 0, 0, 0 +Binding 13=0x0004000F, 0, 28, 65536, 0, 0, 0 +Binding 14=0x00200010, 0, 24, 65536, 0, 0, 1 +Binding 15=0x00200011, 0, 25, 65536, 0, 0, 1 +Binding 16=0x01020012, 0, 33, 87183, 0, 0, 13172 +Binding 17=0x02020012, 0, 35, 87183, 0, 0, 13172 +Binding 18=0x01020013, 0, 32, 87183, 0, 0, 13172 +Binding 19=0x02020013, 0, 34, 87183, 0, 0, 13172 +Binding 20=0x01020014, 0, 37, 87183, 0, 0, 13172 +Binding 21=0x02020014, 0, 39, 87183, 0, 0, 13172 +Binding 22=0x01020015, 0, 36, 87183, 0, 0, 13172 +Binding 23=0x02020015, 0, 38, 87183, 0, 0, 13172 +FF Binding 0=Constant 0, 0, 0, 0, 65536, 1, 0 +FF Binding 1=Constant 0, 1, 0, 0, 0, 1, 65536 +[Device 1] +Display Name=XInput Pad 1 +Instance ID=XInput Pad 1 +API=4 +Type=3 +Binding 0=0x00040000, 1, 20, 65536, 0, 0, 0 +Binding 1=0x00040001, 1, 22, 65536, 0, 0, 0 +Binding 2=0x00040002, 1, 23, 65536, 0, 0, 0 +Binding 3=0x00040003, 1, 21, 65536, 0, 0, 0 +Binding 4=0x00040004, 1, 19, 65536, 0, 0, 0 +Binding 5=0x00040005, 1, 16, 65536, 0, 0, 0 +Binding 6=0x00040006, 1, 17, 65536, 0, 0, 0 +Binding 7=0x00040007, 1, 18, 65536, 0, 0, 0 +Binding 8=0x00040008, 1, 26, 65536, 0, 0, 0 +Binding 9=0x00040009, 1, 27, 65536, 0, 0, 0 +Binding 10=0x0004000C, 1, 30, 65536, 0, 0, 0 +Binding 11=0x0004000D, 1, 29, 65536, 0, 0, 0 +Binding 12=0x0004000E, 1, 31, 65536, 0, 0, 0 +Binding 13=0x0004000F, 1, 28, 65536, 0, 0, 0 +Binding 14=0x00200010, 1, 24, 65536, 0, 0, 1 +Binding 15=0x00200011, 1, 25, 65536, 0, 0, 1 +Binding 16=0x01020012, 1, 33, 87183, 0, 0, 13172 +Binding 17=0x02020012, 1, 35, 87183, 0, 0, 13172 +Binding 18=0x01020013, 1, 32, 87183, 0, 0, 13172 +Binding 19=0x02020013, 1, 34, 87183, 0, 0, 13172 +Binding 20=0x01020014, 1, 37, 87183, 0, 0, 13172 +Binding 21=0x02020014, 1, 39, 87183, 0, 0, 13172 +Binding 22=0x01020015, 1, 36, 87183, 0, 0, 13172 +Binding 23=0x02020015, 1, 38, 87183, 0, 0, 13172 +FF Binding 0=Constant 1, 0, 0, 0, 65536, 1, 0 +FF Binding 1=Constant 1, 1, 0, 0, 0, 1, 65536 +[Device 12] +Display Name=XInput Pad 2 +Instance ID=XInput Pad 2 +API=4 +Type=3 +[Device 13] +Display Name=XInput Pad 3 +Instance ID=XInput Pad 3 +API=4 +Type=3 + diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/DeviceEnumerator.cpp pcsx2-1.4.0/plugins/LilyPad/DeviceEnumerator.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/DeviceEnumerator.cpp 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/DeviceEnumerator.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,22 +23,32 @@ #include "DirectInput.h" #include "KeyboardHook.h" #include "RawInput.h" -#include "XInput.h" +#include "XInputEnum.h" #include "HidDevice.h" #include "DualShock3.h" +#ifdef __linux__ +#include "Linux/KeyboardMouse.h" +#include "Linux/JoyEvdev.h" +#endif + void EnumDevices(int hideDXXinput) { // Needed for enumeration of some device types. dm->ReleaseInput(); InputDeviceManager *oldDm = dm; dm = new InputDeviceManager(); +#ifdef _MSC_VER EnumHookDevices(); EnumWindowsMessagingDevices(); EnumRawInputDevices(); EnumDualShock3s(); EnumXInputDevices(); EnumDirectInputDevices(hideDXXinput); +#else + EnumLnx(); + EnumJoystickEvdev(); +#endif dm->CopyBindings(oldDm->numDevices, oldDm->devices); diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Global.h pcsx2-1.4.0/plugins/LilyPad/Global.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Global.h 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Global.h 2016-01-05 17:28:08.000000000 +0000 @@ -20,6 +20,76 @@ // dll size by over 100k while avoiding any dependencies on updated CRT dlls. #pragma once +#ifdef __linux__ +// Seriously why there is no standard +#include "stdint.h" +typedef uint32_t DWORD; +typedef uint16_t USHORT; +typedef int64_t __int64; + +#define MAX_PATH (256) // random value + +#include + +#define VK_SHIFT XK_Shift_L +#define VK_LSHIFT XK_Shift_L +#define VK_RSHIFT XK_Shift_R +#define VK_LMENU XK_Menu +#define VK_RMENU XK_Menu +#define VK_MENU XK_Menu +#define VK_CONTROL XK_Control_L +#define VK_TAB XK_Tab +#define VK_ESCAPE XK_Escape +#define VK_F4 XK_F4 + +#include +#include + +template +void wsprintfW(Array& buf, const wchar_t *format, ...) { + va_list a; + va_start(a, format); + + vswprintf(buf, sizeof(buf)/sizeof(buf[0]), format, a); + + va_end(a); +} + +template +void wsprintf(Array& buf, const wchar_t *format, ...) { + va_list a; + va_start(a, format); + + vswprintf(buf, sizeof(buf)/sizeof(buf[0]), format, a); + + va_end(a); +} + +static inline int wcsicmp(const wchar_t* w1, const wchar_t* w2) { + // I didn't find a way to put ignore case ... + return wcscmp(w1, w2); +} + +#include +static inline unsigned int timeGetTime() { + struct timeval now; + gettimeofday(&now, NULL); + uint64_t ms = (now.tv_usec/1000) + ((uint64_t)now.tv_sec * 1000); + return (ms & 0xFFFFFFFF); // MS code is u32 ... +} + +#include "Utilities/Dependencies.h" +#include "Utilities/StringHelpers.h" +#include "Utilities/Path.h" + +#include + +extern Display *GSdsp; +extern Window GSwin; + +#endif + + #define DIRECTINPUT_VERSION 0x0800 #ifdef NO_CRT @@ -40,9 +110,10 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" __declspec(dllexport) type CALLBACK #else -#define EXPORT_C_(type) extern "C" type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type CALLBACK #endif +#ifdef _MSC_VER // Actually works with 0x0400, but need 0x500 to get XBUTTON defines, // 0x501 to get raw input structures, and 0x0600 to get WM_MOUSEHWHEEL. #define WINVER 0x0600 @@ -61,17 +132,28 @@ #include #endif +#else + +#include +#include + +#endif + #include #include #include +#ifdef _MSC_VER #include // Only needed for DBT_DEVNODES_CHANGED #include +#endif #include "PS2Edefs.h" +#ifdef _MSC_VER extern HINSTANCE hInst; +#endif // Needed for config screen void GetNameAndVersionString(wchar_t *out); @@ -106,6 +188,7 @@ EXPORT_C_(s32) PADfreeze(int mode, freezeData *data); EXPORT_C_(s32) PADsetSlot(u8 port, u8 slot); EXPORT_C_(s32) PADqueryMtap(u8 port); +EXPORT_C_(void) PADsetSettingsDir(const char *dir); #ifdef NO_CRT diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/InputManager.cpp pcsx2-1.4.0/plugins/LilyPad/InputManager.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/InputManager.cpp 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/InputManager.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -54,7 +54,9 @@ attached = 1; enabled = 0; +#ifdef _MSC_VER hWndProc = 0; +#endif virtualControls = 0; numVirtualControls = 0; @@ -221,7 +223,11 @@ double East = sin(angle); double South = -cos(angle); // Normalize so greatest direction is 1. +#ifdef __linux__ + double mul = FULLY_DOWN / std::max(fabs(South), fabs(East)); +#else double mul = FULLY_DOWN / max(fabs(South), fabs(East)); +#endif iEast = (int) floor(East * mul + 0.5); iSouth = (int) floor(South * mul + 0.5); } diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/InputManager.h pcsx2-1.4.0/plugins/LilyPad/InputManager.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/InputManager.h 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/InputManager.h 2016-01-05 17:28:08.000000000 +0000 @@ -130,6 +130,9 @@ // to ignore individual buttons. Wrapper itself takes care // of ignoring bound keys. Otherwise, works normally. IGNORE_KEYBOARD = 7, + // XXX + LNX_KEYBOARD = 16, + LNX_JOY = 17, }; enum DeviceType { @@ -196,12 +199,18 @@ // 1 when binding. int binding; +#ifdef _MSC_VER HWND hWndTop; // For config screen, need to eat button's message handling. //HWND hWndButton; WndProcEater* hWndProc; +#else + // Linux equivalent to HWND + Display *GSdsp; + Window GSwin; +#endif }; @@ -216,9 +225,11 @@ // Based on input modes. char enabled; +#ifdef _MSC_VER // Not all devices need to subclass the windproc, but most do so might as well // put it here... --air WndProcEater* hWndProc; +#endif union { // Allows for one loop to compare all 3 in order. diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/KeyboardQueue.cpp pcsx2-1.4.0/plugins/LilyPad/KeyboardQueue.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/KeyboardQueue.cpp 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/KeyboardQueue.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -21,8 +21,12 @@ // What MS calls a single process Mutex. Faster, supposedly. // More importantly, can be abbreviated, amusingly, as cSection. +#ifdef _MSC_VER static CRITICAL_SECTION cSection; static u8 csInitialized = 0; +#else +static std::mutex cSection; +#endif #define EVENT_QUEUE_LEN 16 // Actually points one beyond the last queued event. @@ -31,11 +35,15 @@ static keyEvent queuedEvents[EVENT_QUEUE_LEN]; void QueueKeyEvent(int key, int event) { +#ifdef _MSC_VER if (!csInitialized) { csInitialized = 1; InitializeCriticalSection(&cSection); } EnterCriticalSection(&cSection); +#else + std::lock_guard lock(cSection); +#endif // Don't queue events if escape is on top of queue. This is just for safety // purposes when a game is killing the emulator for whatever reason. @@ -57,23 +65,33 @@ nextQueuedEvent = (nextQueuedEvent + 1) % EVENT_QUEUE_LEN; } } +#ifdef _MSC_VER LeaveCriticalSection(&cSection); +#endif } int GetQueuedKeyEvent(keyEvent *event) { if (lastQueuedEvent == nextQueuedEvent) return 0; +#ifdef _MSC_VER EnterCriticalSection(&cSection); +#else + std::lock_guard lock(cSection); +#endif *event = queuedEvents[nextQueuedEvent]; nextQueuedEvent = (nextQueuedEvent + 1) % EVENT_QUEUE_LEN; +#ifdef _MSC_VER LeaveCriticalSection(&cSection); +#endif return 1; } void ClearKeyQueue() { lastQueuedEvent = nextQueuedEvent; +#ifdef _MSC_VER if (csInitialized) { DeleteCriticalSection(&cSection); csInitialized = 0; } +#endif } diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/KeyboardQueue.h pcsx2-1.4.0/plugins/LilyPad/KeyboardQueue.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/KeyboardQueue.h 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/KeyboardQueue.h 2016-01-05 17:28:08.000000000 +0000 @@ -24,3 +24,9 @@ // Cleans up as well as clears queue. void ClearKeyQueue(); + +#ifdef __linux__ +void R_QueueKeyEvent(const keyEvent& event); +int R_GetQueuedKeyEvent(keyEvent *event); +void R_ClearKeyQueue(); +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.cpp pcsx2-1.4.0/plugins/LilyPad/LilyPad.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.cpp 2014-04-16 15:39:07.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,9 @@ #define PADdefs #include "DeviceEnumerator.h" +#ifdef _MSC_VER #include "WndProcEater.h" +#endif #include "KeyboardQueue.h" #include "svnrev.h" #include "DualShock3.h" @@ -39,6 +41,10 @@ // LilyPad version. #define VERSION ((0<<8) | 11 | (0<<24)) +#ifdef __linux__ +Display *GSdsp; +Window GSwin; +#else HINSTANCE hInst; HWND hWnd; HWND hWndTop; @@ -49,10 +55,15 @@ // ButtonProc is used mostly by the Config panel for eating the procedures of the // button with keyboard focus. WndProcEater hWndButtonProc; +#endif // Keeps the various sources for Update polling (PADpoll, PADupdate, etc) from wreaking // havoc on each other... +#ifdef __linux__ +static std::mutex updateLock; +#else CRITICAL_SECTION updateLock; +#endif // Used to toggle mouse listening. u8 miceEnabled; @@ -61,10 +72,12 @@ int openCount = 0; int activeWindow = 0; +#ifdef _MSC_VER int windowThreadId = 0; int updateQueued = 0; +#endif -int bufSize = 0; +u32 bufSize = 0; unsigned char outBuf[50]; unsigned char inBuf[50]; @@ -74,6 +87,7 @@ #define MODE_ANALOG 0x73 #define MODE_DS2_NATIVE 0x79 +#ifdef _MSC_VER int IsWindowMaximized (HWND hWnd) { RECT rect; if (GetWindowRect(hWnd, &rect)) { @@ -92,8 +106,10 @@ } return 0; } +#endif void DEBUG_TEXT_OUT(const char *text) { +#ifdef _MSC_VER if (config.debug) { HANDLE hFile = CreateFileA("logs\\padLog.txt", FILE_APPEND_DATA, FILE_SHARE_READ, 0, OPEN_ALWAYS, 0, 0); if (hFile != INVALID_HANDLE_VALUE) { @@ -102,13 +118,15 @@ CloseHandle(hFile);; } } +#endif } void DEBUG_NEW_SET() { +#ifdef _MSC_VER if (config.debug && bufSize>1) { HANDLE hFile = CreateFileA("logs\\padLog.txt", FILE_APPEND_DATA, FILE_SHARE_READ, 0, OPEN_ALWAYS, 0, 0); if (hFile != INVALID_HANDLE_VALUE) { - int i; + u32 i; char temp[1500]; char *end = temp; sprintf(end, "%02X (%02X) ", inBuf[0], inBuf[1]); @@ -132,6 +150,7 @@ } } bufSize = 0; +#endif } inline void DEBUG_IN(unsigned char c) { @@ -289,6 +308,7 @@ } } +#ifdef _MSC_VER BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, void* lpvReserved) { hInst = hInstance; if (fdwReason == DLL_PROCESS_ATTACH) { @@ -306,6 +326,7 @@ } return 1; } +#endif void AddForce(ButtonSum *sum, u8 cmd, int delta = 255) { if (!delta) return; @@ -400,7 +421,11 @@ void CapSum(ButtonSum *sum) { int i; for (i=0; i<3; i++) { +#ifdef __linux__ + int div = std::max(abs(sum->sticks[i].horiz), abs(sum->sticks[i].vert)); +#else int div = max(abs(sum->sticks[i].horiz), abs(sum->sticks[i].vert)); +#endif if (div > 255) { sum->sticks[i].horiz = sum->sticks[i].horiz * 255 / div; sum->sticks[i].vert = sum->sticks[i].vert * 255 / div; @@ -423,6 +448,7 @@ #define LOCK_BUTTONS 4 #define LOCK_BOTH 1 +#ifdef _MSC_VER struct EnterScopedSection { CRITICAL_SECTION& m_cs; @@ -435,6 +461,7 @@ LeaveCriticalSection( &m_cs ); } }; +#endif void Update(unsigned int port, unsigned int slot) { char *stateUpdated; @@ -452,12 +479,17 @@ } // Lock prior to timecheck code to avoid pesky race conditions. +#ifdef __linux__ + std::lock_guard lock(updateLock); +#else EnterScopedSection padlock( updateLock ); +#endif static unsigned int LastCheck = 0; unsigned int t = timeGetTime(); if (t - LastCheck < 15 || !openCount) return; +#ifdef _MSC_VER if (windowThreadId != GetCurrentThreadId()) { if (stateUpdated[0] < 0) { if (!updateQueued) { @@ -470,6 +502,7 @@ } return; } +#endif LastCheck = t; @@ -481,10 +514,15 @@ for (i=0; i<8; i++) { s[i&1][i>>1] = pads[i&1][i>>1].lockedSum; } +#ifdef __linux__ + InitInfo info = { + 0, 0, GSdsp, GSwin + }; +#else InitInfo info = { 0, 0, hWndTop, &hWndGSProc }; - +#endif dm->Update(&info); static int turbo = 0; turbo++; @@ -669,6 +707,7 @@ return 0; } +#ifdef _MSC_VER // Used in about and config screens. void GetNameAndVersionString(wchar_t *out) { #ifdef NO_CRT @@ -679,6 +718,7 @@ wsprintfW(out, L"LilyPad %i.%i.%i (%lld)", (VERSION>>8)&0xFF, VERSION&0xFF, (VERSION>>24)&0xFF, SVN_REV); #endif } +#endif char* CALLBACK PSEgetLibName() { #ifdef NO_CRT @@ -760,7 +800,9 @@ u8 response[42]; } query = {0,0,0,0, 0,0xFF, 0xF3}; +#ifdef _MSC_VER int saveStateIndex = 0; +#endif s32 CALLBACK PADinit(u32 flags) { // Note: Won't load settings if already loaded. @@ -773,7 +815,7 @@ return PADinit(2); } - #ifdef PCSX2_DEBUG + #if defined(PCSX2_DEBUG) && defined(_MSC_VER) int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag( tmpFlag ); @@ -790,6 +832,9 @@ query.lastByte = 1; query.numBytes = 0; ClearKeyQueue(); +#ifdef __linux__ + R_ClearKeyQueue(); +#endif // Just in case, when resuming emulation. ReleaseModifierKeys(); @@ -836,6 +881,7 @@ static const u8 setNativeMode[7] = {0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A}; +#ifdef _MSC_VER // Implements a couple of the hacks that affect whatever top-level window // the GS viewport belongs to (title, screensaver) ExtraWndProcResult TitleHackWndProc(HWND hWndTop, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *output) { @@ -934,6 +980,8 @@ } char restoreFullScreen = 0; +// This hack sends ALT+ENTER to the window to toggle fullscreen. +// PCSX2 doesn't need it (it exits full screen on ESC on its own). DWORD WINAPI MaximizeWindowThreadProc(void *lpParameter) { Sleep(100); keybd_event(VK_LMENU, MapVirtualKey(VK_LMENU, MAPVK_VK_TO_VSC), 0, 0); @@ -943,6 +991,7 @@ keybd_event(VK_LMENU, MapVirtualKey(VK_LMENU, MAPVK_VK_TO_VSC), KEYEVENTF_KEYUP, 0); return 0; } +#endif void CALLBACK PADconfigure() { if (openCount) { @@ -951,7 +1000,7 @@ Configure(); } - +#ifdef _MSC_VER DWORD WINAPI RenameWindowThreadProc(void *lpParameter) { wchar_t newTitle[200]; if (hWndTop) { @@ -973,12 +1022,14 @@ if (hThread) CloseHandle(hThread); } } +#endif s32 CALLBACK PADopen(void *pDsp) { if (openCount++) return 0; DEBUG_TEXT_OUT("LilyPad opened\n\n"); miceEnabled = !config.mouseUnfocus; +#ifdef _MSC_VER if (!hWnd) { if (IsWindow((HWND)pDsp)) { hWnd = (HWND) pDsp; @@ -1036,6 +1087,7 @@ } restoreFullScreen = 0; } +#endif for (int port=0; port<2; port++) { for (int slot=0; slot<4; slot++) { memset(&pads[port][slot].sum, 0, sizeof(pads[port][slot].sum)); @@ -1044,6 +1096,7 @@ } } +#ifdef _MSC_VER // I'd really rather use this line, but GetActiveWindow() does not have complete specs. // It *seems* to return null when no window from this thread has focus, but the // Microsoft specs seem to imply it returns the window from this thread that would have focus, @@ -1052,6 +1105,11 @@ // activeWindow = GetActiveWindow() == hWnd; // activeWindow = (GetAncestor(hWnd, GA_ROOT) == GetAncestor(GetForegroundWindow(), GA_ROOT)); +#else + // Not used so far + GSdsp = *(Display**)pDsp; + GSwin = (Window)*(((uptr*)pDsp)+1); +#endif activeWindow = 1; UpdateEnabledDevices(); return 0; @@ -1060,12 +1118,16 @@ void CALLBACK PADclose() { if (openCount && !--openCount) { DEBUG_TEXT_OUT("LilyPad closed\n\n"); +#ifdef _MSC_VER updateQueued = 0; hWndGSProc.Release(); hWndTopProc.Release(); dm->ReleaseInput(); hWnd = 0; hWndTop = 0; +#else + R_ClearKeyQueue(); +#endif ClearKeyQueue(); } } @@ -1268,7 +1330,7 @@ // READ_DATA_AND_VIBRATE case 0x42: if (query.lastByte == pad->vibrateI[0]) { - SetVibrate(query.port, query.slot, 1, 255*(0!=value)); + SetVibrate(query.port, query.slot, 1, 255*(value&1)); } else if (query.lastByte == pad->vibrateI[1]) { SetVibrate(query.port, query.slot, 0, value); @@ -1363,6 +1425,7 @@ return 3; } +#ifdef _MSC_VER INT_PTR CALLBACK AboutDialogProc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_INITDIALOG) { wchar_t idString[100]; @@ -1375,10 +1438,13 @@ } return 0; } +#endif void CALLBACK PADabout() { +#ifdef _MSC_VER DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT), 0, AboutDialogProc); +#endif } s32 CALLBACK PADtest() { @@ -1395,11 +1461,12 @@ eventCount = 0; Update(2, 0); - static char shiftDown = 0; - static char altDown = 0; static keyEvent ev; if (!GetQueuedKeyEvent(&ev)) return 0; +#ifdef _MSC_VER + static char shiftDown = 0; + static char altDown = 0; if (miceEnabled && (ev.key == VK_ESCAPE || (int)ev.key == -2) && ev.evt == KEYPRESS) { // Disable mouse/KB hooks on escape (before going into paused mode). // This is a hack, since PADclose (which is called on pause) should enevtually also deactivate the @@ -1453,6 +1520,7 @@ ev.key = VK_MENU; altDown = (ev.evt == KEYPRESS); } +#endif return &ev; } diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.def pcsx2-1.4.0/plugins/LilyPad/LilyPad.def --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.def 2009-12-19 18:30:56.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,25 +1,25 @@ -EXPORTS - PS2EgetLibType - PS2EgetLibName - PS2EgetLibVersion2 - PSEgetLibType - PSEgetLibName - PSEgetLibVersion - PADreadPort1 - PADreadPort2 - PADinit - PADshutdown - PADopen - PADclose - PADkeyEvent - PADstartPoll - PADpoll - PADquery - PADconfigure - PADtest - PADabout - PADupdate - PADfreeze - PADsetSlot - PADsetSettingsDir - PADqueryMtap +EXPORTS + PS2EgetLibType + PS2EgetLibName + PS2EgetLibVersion2 + PSEgetLibType + PSEgetLibName + PSEgetLibVersion + PADreadPort1 + PADreadPort2 + PADinit + PADshutdown + PADopen + PADclose + PADkeyEvent + PADstartPoll + PADpoll + PADquery + PADconfigure + PADtest + PADabout + PADupdate + PADfreeze + PADsetSlot + PADsetSettingsDir + PADqueryMtap diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.rc pcsx2-1.4.0/plugins/LilyPad/LilyPad.rc --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,359 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 424, 318 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,7,183,285,WS_EX_CLIENTEDGE + PUSHBUTTON "Delete Selected",ID_DELETE,7,296,59,15 + PUSHBUTTON "Clear All",ID_CLEAR,71,296,56,15 + PUSHBUTTON "Ignore Key",ID_IGNORE,132,296,58,15 + PUSHBUTTON "Square",ID_SQUARE,196,7,45,15 + PUSHBUTTON "Cross",ID_CROSS,196,26,45,15 + PUSHBUTTON "Triangle",ID_TRIANGLE,246,7,45,15 + PUSHBUTTON "Circle",ID_CIRCLE,246,26,45,15 + PUSHBUTTON "Select",ID_SELECT,306,7,45,15 + PUSHBUTTON "Start",ID_START,306,26,45,15 + PUSHBUTTON "Analog",ID_ANALOG,372,7,45,15 + PUSHBUTTON "Mouse",ID_MOUSE,372,26,45,15 + PUSHBUTTON "L1",ID_L1,196,52,45,15 + PUSHBUTTON "R1",ID_R1,372,52,45,15 + PUSHBUTTON "L2",ID_L2,196,73,45,15 + PUSHBUTTON "R2",ID_R2,372,73,45,15 + PUSHBUTTON "L3",ID_L3,195,93,45,15 + PUSHBUTTON "R3",ID_R3,371,93,46,15 + GROUPBOX "D-Pad",IDC_DPAD,251,44,110,70 + PUSHBUTTON "Up",ID_DPAD_UP,285,55,35,15 + PUSHBUTTON "Left",ID_DPAD_LEFT,267,74,35,15 + PUSHBUTTON "Right",ID_DPAD_RIGHT,307,74,35,15 + PUSHBUTTON "Down",ID_DPAD_DOWN,285,93,35,15 + GROUPBOX "Left Analog Stick",IDC_LSTICK,195,115,108,70 + PUSHBUTTON "Up",ID_LSTICK_UP,228,126,35,15 + PUSHBUTTON "Left",ID_LSTICK_LEFT,210,145,35,15 + PUSHBUTTON "Right",ID_LSTICK_RIGHT,250,145,35,15 + PUSHBUTTON "Down",ID_LSTICK_DOWN,228,165,35,15 + GROUPBOX "Right Analog Stick",IDC_RSTICK,309,115,108,70 + PUSHBUTTON "Up",ID_RSTICK_UP,342,126,35,15 + PUSHBUTTON "Left",ID_RSTICK_LEFT,324,145,35,15 + PUSHBUTTON "Right",ID_RSTICK_RIGHT,364,145,35,15 + PUSHBUTTON "Down",ID_RSTICK_DOWN,342,165,35,15 + GROUPBOX "",ID_FF,195,6,222,248 + COMBOBOX IDC_FF_EFFECT,203,20,206,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_FF_AXIS1,"msctls_trackbar32",WS_TABSTOP,199,40,214,17 + CONTROL "Axis 1",IDC_FF_AXIS1_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,60,91,10 + CONTROL "Flip",IDC_FF_AXIS1_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,60,35,10 + EDITTEXT IDC_FF_AXIS1_SCALE,375,60,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS2,"msctls_trackbar32",WS_TABSTOP,199,76,214,17 + CONTROL "Axis 2",IDC_FF_AXIS2_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,96,91,10 + CONTROL "Flip",IDC_FF_AXIS2_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,96,35,10 + EDITTEXT IDC_FF_AXIS2_SCALE,375,96,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS3,"msctls_trackbar32",WS_TABSTOP,199,112,214,17 + CONTROL "Axis 3",IDC_FF_AXIS3_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,91,10 + CONTROL "Flip",IDC_FF_AXIS3_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,132,35,10 + EDITTEXT IDC_FF_AXIS3_SCALE,375,132,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS4,"msctls_trackbar32",WS_TABSTOP,199,148,214,17 + CONTROL "Axis 4",IDC_FF_AXIS4_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,168,91,10 + CONTROL "Flip",IDC_FF_AXIS4_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,168,35,10 + EDITTEXT IDC_FF_AXIS4_SCALE,375,168,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS5,"msctls_trackbar32",WS_TABSTOP,199,184,214,17 + CONTROL "Axis 5",IDC_FF_AXIS5_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,204,91,10 + CONTROL "Flip",IDC_FF_AXIS5_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,204,35,10 + EDITTEXT IDC_FF_AXIS5_SCALE,375,204,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS6,"msctls_trackbar32",WS_TABSTOP,199,220,214,17 + CONTROL "Axis 6",IDC_FF_AXIS6_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,240,91,10 + CONTROL "Flip",IDC_FF_AXIS6_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,240,35,10 + EDITTEXT IDC_FF_AXIS6_SCALE,375,240,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + PUSHBUTTON "Test",ID_TEST,196,260,59,15 + PUSHBUTTON "Back to Controls",ID_CONTROLS,196,296,59,15 + GROUPBOX "Configure Binding",ID_SENSITIVITY,195,186,222,70 + EDITTEXT IDC_AXIS_DEVICE1,202,199,74,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + COMBOBOX IDC_AXIS_DIRECTION,276,197,70,47,CBS_DROPDOWNLIST | WS_TABSTOP + EDITTEXT IDC_AXIS_CONTROL1,349,199,65,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Sensitivity",IDC_LABEL_SENSITIVITY,202,215,42,8 + CONTROL "Turbo",IDC_TURBO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,225,34,10 + CONTROL "",IDC_SLIDER1,"msctls_trackbar32",WS_TABSTOP,240,215,131,17 + EDITTEXT IDC_AXIS_SENSITIVITY1,377,213,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "Flip",IDC_FLIP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,385,224,27,10 + LTEXT "Dead Zone",IDC_LABEL_DEADZONE,202,240,42,8 + CONTROL "",IDC_SLIDER_DEADZONE,"msctls_trackbar32",WS_TABSTOP,240,236,131,17 + EDITTEXT IDC_AXIS_DEADZONE,377,239,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + PUSHBUTTON "Lock Input",ID_LOCK,196,260,59,15 + PUSHBUTTON "Lock Direction",ID_LOCK_DIRECTION,196,278,59,15 + PUSHBUTTON "Lock Buttons",ID_LOCK_BUTTONS,196,296,59,15 + GROUPBOX "Add Force Feedback Effect",IDC_STATIC,262,260,155,51 + COMBOBOX IDC_FORCEFEEDBACK,269,273,142,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Big Motor",ID_BIG_MOTOR,269,291,64,14 + PUSHBUTTON "Small Motor",ID_SMALL_MOTOR,347,291,64,14 +END + +IDD_CONFIG_GUITAR DIALOGEX 0, 0, 424, 318 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,7,183,285,WS_EX_CLIENTEDGE + PUSHBUTTON "Delete Selected",ID_DELETE,7,296,59,15 + PUSHBUTTON "Clear All",ID_CLEAR,71,296,56,15 + PUSHBUTTON "Ignore Key",ID_IGNORE,132,296,58,15 + PUSHBUTTON "Fret 1",ID_R2,283,7,45,15 + PUSHBUTTON "Fret 2",ID_CIRCLE,283,30,45,15 + PUSHBUTTON "Fret 3",ID_TRIANGLE,283,53,45,15 + PUSHBUTTON "Fret 4",ID_CROSS,283,76,45,15 + PUSHBUTTON "Fret 5",ID_SQUARE,283,99,45,15 + PUSHBUTTON "Start",ID_START,256,122,45,15 + PUSHBUTTON "Select/Tilt",ID_SELECT,307,122,45,15 + PUSHBUTTON "Whammy Bar Up",ID_LSTICK_UP,219,146,69,15 + PUSHBUTTON "Whammy Bar Down",ID_LSTICK_DOWN,219,164,69,15 + PUSHBUTTON "Strum Bar Up",ID_DPAD_UP,336,146,58,15 + PUSHBUTTON "Strum Bar Down",ID_DPAD_DOWN,336,164,58,15 + GROUPBOX "",ID_FF,195,6,222,248 + COMBOBOX IDC_FF_EFFECT,203,20,206,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_FF_AXIS1,"msctls_trackbar32",WS_TABSTOP,199,40,214,17 + CONTROL "Axis 1",IDC_FF_AXIS1_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,60,91,10 + CONTROL "Flip",IDC_FF_AXIS1_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,60,35,10 + EDITTEXT IDC_FF_AXIS1_SCALE,375,60,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS2,"msctls_trackbar32",WS_TABSTOP,199,76,214,17 + CONTROL "Axis 2",IDC_FF_AXIS2_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,96,91,10 + CONTROL "Flip",IDC_FF_AXIS2_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,96,35,10 + EDITTEXT IDC_FF_AXIS2_SCALE,375,96,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS3,"msctls_trackbar32",WS_TABSTOP,199,112,214,17 + CONTROL "Axis 3",IDC_FF_AXIS3_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,132,91,10 + CONTROL "Flip",IDC_FF_AXIS3_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,132,35,10 + EDITTEXT IDC_FF_AXIS3_SCALE,375,132,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS4,"msctls_trackbar32",WS_TABSTOP,199,148,214,17 + CONTROL "Axis 4",IDC_FF_AXIS4_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,168,91,10 + CONTROL "Flip",IDC_FF_AXIS4_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,168,35,10 + EDITTEXT IDC_FF_AXIS4_SCALE,375,168,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS5,"msctls_trackbar32",WS_TABSTOP,199,184,214,17 + CONTROL "Axis 5",IDC_FF_AXIS5_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,204,91,10 + CONTROL "Flip",IDC_FF_AXIS5_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,204,35,10 + EDITTEXT IDC_FF_AXIS5_SCALE,375,204,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "",IDC_FF_AXIS6,"msctls_trackbar32",WS_TABSTOP,199,220,214,17 + CONTROL "Axis 6",IDC_FF_AXIS6_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,205,240,91,10 + CONTROL "Flip",IDC_FF_AXIS6_FLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,302,240,35,10 + EDITTEXT IDC_FF_AXIS6_SCALE,375,240,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + PUSHBUTTON "Test",ID_TEST,196,260,59,15 + PUSHBUTTON "Back to Controls",ID_CONTROLS,196,296,59,15 + GROUPBOX "Configure Binding",ID_SENSITIVITY,195,186,222,70 + EDITTEXT IDC_AXIS_DEVICE1,202,199,74,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + COMBOBOX IDC_AXIS_DIRECTION,276,197,70,47,CBS_DROPDOWNLIST | WS_TABSTOP + EDITTEXT IDC_AXIS_CONTROL1,349,199,65,12,ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + LTEXT "Sensitivity",IDC_LABEL_SENSITIVITY,202,215,42,8 + CONTROL "Turbo",IDC_TURBO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,202,225,34,10 + CONTROL "",IDC_SLIDER1,"msctls_trackbar32",WS_TABSTOP,240,215,131,17 + EDITTEXT IDC_AXIS_SENSITIVITY1,377,213,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + CONTROL "Flip",IDC_FLIP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,385,224,27,10 + LTEXT "Dead Zone",IDC_LABEL_DEADZONE,202,240,42,8 + CONTROL "",IDC_SLIDER_DEADZONE,"msctls_trackbar32",WS_TABSTOP,240,236,131,17 + EDITTEXT IDC_AXIS_DEADZONE,377,239,33,12,ES_RIGHT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP,WS_EX_RTLREADING + PUSHBUTTON "Lock Input",ID_LOCK,196,260,59,15 + PUSHBUTTON "Lock Direction",ID_LOCK_DIRECTION,196,278,59,15 + PUSHBUTTON "Lock Buttons",ID_LOCK_BUTTONS,196,296,59,15 + GROUPBOX "Add Force Feedback Effect",IDC_STATIC,262,260,155,51 + COMBOBOX IDC_FORCEFEEDBACK,269,273,142,106,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Big Motor",ID_BIG_MOTOR,269,291,64,14 + PUSHBUTTON "Small Motor",ID_SMALL_MOTOR,347,291,64,14 +END + +IDD_GENERAL DIALOGEX 0, 0, 424, 327 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + GROUPBOX "Input APIs",IDC_STATIC,7,6,410,133 + GROUPBOX "Keyboard API",IDC_STATIC,16,16,192,51 + CONTROL "Windows messaging (Recommended)",IDC_KB_WM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,22,28,134,10 + CONTROL "Raw input (XP and later only)",IDC_KB_RAW,"Button",BS_AUTORADIOBUTTON,22,40,112,10 + CONTROL "DirectInput",IDC_KB_DI,"Button",BS_AUTORADIOBUTTON,22,52,112,10 + GROUPBOX "Game Device APIs",IDC_STATIC,16,70,191,62 + CONTROL "DirectInput",IDC_G_DI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,82,65,10 + CONTROL "XInput (Xbox 360 controllers only)",IDC_G_XI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,94,125,10 + CONTROL "DualShock 3 native mode (Requires libusb)",IDC_G_DS3, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,106,151,10 + CONTROL "Monitor when in background",IDC_BACKGROUND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,22,118,106,10 + GROUPBOX "Mouse API",IDC_STATIC,216,16,192,86 + CONTROL "Windows messaging (Recommended)",IDC_M_WM,"Button",BS_AUTORADIOBUTTON | WS_GROUP,223,27,134,10 + CONTROL "Raw input (XP and later only)",IDC_M_RAW,"Button",BS_AUTORADIOBUTTON,223,39,112,10 + CONTROL "DirectInput",IDC_M_DI,"Button",BS_AUTORADIOBUTTON,223,51,112,10 + CONTROL "Disable",IDC_M_DISABLE,"Button",BS_AUTORADIOBUTTON,223,63,39,10 + CONTROL "Start without mouse focus",IDC_MOUSE_UNFOCUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,75,97,10 + CONTROL "Always hide cursor",IDC_FORCE_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,87,71,10 + GROUPBOX "Advanced",IDC_STATIC,215,105,192,27 + CONTROL "Allow binding multiple PS2 controls to one PC control",IDC_MULTIPLE_BINDING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,117,182,10 + GROUPBOX "Pads",IDC_STATIC,7,145,410,69 + CONTROL "Port 1 Multitap",IDC_MULTITAP1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,157,63,10 + CONTROL "Port 2 Multitap",IDC_MULTITAP2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,169,63,10 + CONTROL "",IDC_PAD_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_TABSTOP,81,156,183,52,WS_EX_CLIENTEDGE + COMBOBOX IDC_PAD_TYPE,270,155,140,41,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Use analog mode if possible - PS1 only",IDC_ANALOG_START1, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,172,132,10 + GROUPBOX "Device Diagnostics",IDC_STATIC,7,219,201,101 + CONTROL "",IDC_LIST,"SysListView32",LVS_LIST | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_NOSORTHEADER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,14,231,187,65,WS_EX_CLIENTEDGE + PUSHBUTTON "Test Device",ID_TEST,87,300,57,15 + PUSHBUTTON "Refresh",ID_REFRESH,153,300,48,15 + GROUPBOX "Miscellaneous",IDC_STATIC,216,219,201,35 + CONTROL "Disable screensaver",IDC_DISABLE_SCREENSAVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,230,80,10 + CONTROL "Local volume control",IDC_VISTA_VOLUME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,241,77,10 + CONTROL "Enable logging",IDC_DEBUG_FILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,230,62,10 + GROUPBOX "Hacks",IDC_STATIC,216,256,201,46 + CONTROL "Send escape on window close",IDC_CLOSE_HACK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,266,113,10 + CONTROL "Exit emulator on window close",IDC_CLOSE_HACK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,277,112,10 + CONTROL "Safe fullscreen exit on escape",IDC_ESCAPE_FULLSCREEN_HACK, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,223,288,112,10 + CONTROL "Save state # in title",IDC_SAVE_STATE_TITLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,266,79,10 + CONTROL "Guitar Hero 2 Hack",IDC_GH2_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,277,76,10 + PUSHBUTTON "Load Bindings",ID_LOAD,283,305,62,15 + PUSHBUTTON "Save Bindings",ID_SAVE,355,305,62,15 + CONTROL "L3 Toggles Turbo",IDC_TURBO_KEY_HACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,336,288,66,10 +END + +IDD_ABOUT DIALOGEX 0, 0, 108, 66 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About LilyPad" +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + CTEXT "LilyPad plugin",IDC_VERSION,7,7,94,10 + ICON IDI_FROG,IDC_STATIC,42,20,21,20 + DEFPUSHBUTTON "OK",IDOK,28,45,50,14 +END + +IDD_DIAG DIALOGEX 0, 0, 190, 178 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION " " +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOSORTHEADER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,7,7,176,164,WS_EX_CLIENTEDGE +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 417 + TOPMARGIN, 7 + BOTTOMMARGIN, 311 + END + + IDD_CONFIG_GUITAR, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 417 + TOPMARGIN, 7 + BOTTOMMARGIN, 311 + END + + IDD_GENERAL, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 417 + TOPMARGIN, 7 + BOTTOMMARGIN, 319 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 101 + TOPMARGIN, 7 + BOTTOMMARGIN, 59 + END + + IDD_DIAG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 183 + TOPMARGIN, 7 + BOTTOMMARGIN, 171 + END +END +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// DATA +// + +IDR_INI1 RCDATA "Default.ini" + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_FROG ICON "frog.ico" +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.vcxproj pcsx2-1.4.0/plugins/LilyPad/LilyPad.vcxproj --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.vcxproj 2012-06-01 18:18:14.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -37,34 +37,40 @@ false MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte false + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary false MultiByte + $(DefaultPlatformToolset)_xp @@ -118,10 +124,8 @@ true false false - false false false - false AllRules.ruleset @@ -140,8 +144,9 @@ AllRules.ruleset - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\include;$(IncludePath) + $(DXSDK_DIR)Lib\x86;$(LibraryPath) + $(DXSDK_DIR)Lib\x64;$(LibraryPath) + $(DXSDK_DIR)include;$(IncludePath) @@ -339,9 +344,6 @@ true .\Release/LilyPad.bsc - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - @@ -392,9 +394,6 @@ true .\Release No CRT/LilyPad.bsc - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - @@ -443,7 +442,7 @@ - + @@ -477,13 +476,14 @@ - + + diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.vcxproj.filters pcsx2-1.4.0/plugins/LilyPad/LilyPad.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad.vcxproj.filters 2010-04-14 19:44:04.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -60,9 +60,6 @@ InputAPIs - - InputAPIs - Input @@ -75,6 +72,9 @@ Input + + InputAPIs + @@ -119,9 +119,6 @@ InputAPIs - - InputAPIs - Input @@ -134,6 +131,9 @@ Input + + InputAPIs + @@ -142,6 +142,9 @@ Resource Files + + Resource Files + diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2012.vcxproj pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,509 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release No CRT - Win32 - - - Release No CRT - x64 - - - Release - Win32 - - - Release - x64 - - - - LilyPad - {E4081455-398C-4610-A87C-90A8A7D72DC3} - LilyPad - - - - DynamicLibrary - false - MultiByte - true - v110_xp - - - DynamicLibrary - false - MultiByte - true - v110_xp - - - DynamicLibrary - false - MultiByte - v110_xp - - - DynamicLibrary - false - MultiByte - false - v110_xp - - - DynamicLibrary - false - MultiByte - true - v110_xp - - - DynamicLibrary - false - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - false - false - true - false - false - false - false - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\include;$(IncludePath) - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - _USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - Use - Global.h - 4995; 4996;%(DisableSpecificWarnings) - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - .\LilyPad.def - false - MachineX86 - - - true - .\Debug/LilyPad.bsc - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - NDEBUG;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - - - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - true - .\LilyPad.def - true - true - - - false - - - MachineX86 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - false - NDEBUG;_USRDLL;TEST_EXPORTS;NO_CRT;%(PreprocessorDefinitions) - - - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)-no CRT.dll - true - true - .\LilyPad.def - true - true - - - DllMain - false - MachineX86 - - - true - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - Use - Global.h - Level3 - true - ProgramDatabase - 4995; 4996;%(DisableSpecificWarnings) - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - true - true - MachineX64 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - AnySuitable - Speed - true - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - Fast - Use - Global.h - Level3 - true - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - odbc32.lib;odbccp32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)64.dll - true - .\LilyPad.def - true - true - DllMain - false - MachineX86 - - - true - .\Release/LilyPad.bsc - - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - AnySuitable - Speed - true - true - false - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - Fast - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)64.dll - true - true - .\LilyPad.def - true - true - - - 0x15000000 - MachineX64 - - - true - .\Release No CRT/LilyPad.bsc - - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ - - - - - {c3444fe6-e86c-41ad-b284-9aaa0085018c} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {3dc117c4-127f-4132-8d90-a21203ff7c9a} - h;hpp;hxx;hm;inl - - - {acd9ab42-6216-4bd0-a5b5-b849e2d1ba3f} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {15d8bba0-4d93-410e-9892-ff6062a6a6c0} - - - {0ef876e2-98b1-4cf0-8733-7cfe1a728411} - - - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - Input - - - Input - - - Input - - - Input - - - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - Input - - - Input - - - Input - - - Input - - - - - Resource Files - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2013.vcxproj pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,509 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release No CRT - Win32 - - - Release No CRT - x64 - - - Release - Win32 - - - Release - x64 - - - - LilyPad - {E4081455-398C-4610-A87C-90A8A7D72DC3} - LilyPad - - - - DynamicLibrary - false - MultiByte - true - v120_xp - - - DynamicLibrary - false - MultiByte - true - v120_xp - - - DynamicLibrary - false - MultiByte - v120_xp - - - DynamicLibrary - false - MultiByte - false - v120_xp - - - DynamicLibrary - false - MultiByte - true - v120_xp - - - DynamicLibrary - false - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - false - false - true - false - false - false - false - false - false - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\include;$(IncludePath) - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - _USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - Use - Global.h - 4995; 4996;%(DisableSpecificWarnings) - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - .\LilyPad.def - false - MachineX86 - - - true - .\Debug/LilyPad.bsc - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - NDEBUG;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - - - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - true - .\LilyPad.def - true - true - - - false - - - MachineX86 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - false - NDEBUG;_USRDLL;TEST_EXPORTS;NO_CRT;%(PreprocessorDefinitions) - - - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)-no CRT.dll - true - true - .\LilyPad.def - true - true - - - DllMain - false - MachineX86 - - - true - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebug - Use - Global.h - Level3 - true - ProgramDatabase - 4995; 4996;%(DisableSpecificWarnings) - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - true - true - MachineX64 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - AnySuitable - Speed - true - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - Fast - Use - Global.h - Level3 - true - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - odbc32.lib;odbccp32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)64.dll - true - .\LilyPad.def - true - true - DllMain - false - MachineX86 - - - true - .\Release/LilyPad.bsc - - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - X64 - - - - - AnySuitable - Speed - true - true - false - WIN32;NDEBUG;_WINDOWS;_USRDLL;TEST_EXPORTS;%(PreprocessorDefinitions) - true - - - MultiThreadedDLL - false - true - Fast - Use - Global.h - FastCall - 4995; 4996;%(DisableSpecificWarnings) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ntdll.lib;Setupapi.lib;Winmm.lib;ole32.lib;advapi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;dinput8.lib;dxguid.lib;comctl32.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName)64.dll - true - true - .\LilyPad.def - true - true - - - 0x15000000 - MachineX64 - - - true - .\Release No CRT/LilyPad.bsc - - - mt.exe -manifest $(IntDir)LilyPad64.dll.manifest -outputresource:$(OutDir)$(ProjectName)64.dll - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - MaxSpeed - %(PreprocessorDefinitions) - MaxSpeed - Size - %(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/LilyPad/LilyPad_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/LilyPad_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ - - - - - {c3444fe6-e86c-41ad-b284-9aaa0085018c} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {3dc117c4-127f-4132-8d90-a21203ff7c9a} - h;hpp;hxx;hm;inl - - - {acd9ab42-6216-4bd0-a5b5-b849e2d1ba3f} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {15d8bba0-4d93-410e-9892-ff6062a6a6c0} - - - {0ef876e2-98b1-4cf0-8733-7cfe1a728411} - - - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - Input - - - Input - - - Input - - - Input - - - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - InputAPIs - - - Input - - - Input - - - Input - - - Input - - - - - Resource Files - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/bitmaskros.h pcsx2-1.4.0/plugins/LilyPad/Linux/bitmaskros.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/bitmaskros.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/bitmaskros.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * bitmaskros.h + * + * Helper macros for large bit masks management + * + * Copyright (C) 2008 Jean-Philippe Meuret + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* Number of bits for 1 unsigned char */ +#define nBitsPerUchar (sizeof(unsigned char) * 8) + +/* Number of unsigned chars to contain a given number of bits */ +#define nUcharsForNBits(nBits) ((((nBits)-1)/nBitsPerUchar)+1) + +/* Index=Offset of given bit in 1 unsigned char */ +#define bitOffsetInUchar(bit) ((bit)%nBitsPerUchar) + +/* Index=Offset of the unsigned char associated to the bit + at the given index=offset */ +#define ucharIndexForBit(bit) ((bit)/nBitsPerUchar) + +/* Value of an unsigned char with bit set at given index=offset */ +#define ucharValueForBit(bit) (((unsigned char)(1))<> bitOffsetInUchar(bit)) & 1) diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/Config.cpp pcsx2-1.4.0/plugins/LilyPad/Linux/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/Config.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,514 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" + +#include "InputManager.h" +#include "Config.h" +#include "DeviceEnumerator.h" +#include "Linux/ConfigHelper.h" + +GeneralConfig config; +u8 ps2e = 0; + +#if 0 +remove 0x10F0 to compute the cmd value + +#define ID_SENSITIVITY 0x1007 +#define ID_LOCK_BUTTONS 0x10FC +#define ID_LOCK 0x10FD +#define ID_LOCK_DIRECTION 0x10FE +#define ID_MOUSE 0x10FF +#define ID_SELECT 0x1100 +#define ID_L3 0x1101 +#define ID_R3 0x1102 +#define ID_START 0x1103 +#define ID_DPAD_UP 0x1104 +#define ID_DPAD_RIGHT 0x1105 +#define ID_DPAD_DOWN 0x1106 +#define ID_DPAD_LEFT 0x1107 +#define ID_L2 0x1108 +#define ID_R2 0x1109 +#define ID_L1 0x110A +#define ID_R1 0x110B +#define ID_TRIANGLE 0x110C +#define ID_CIRCLE 0x110D +#define ID_CROSS 0x110E +#define ID_SQUARE 0x110F +#define ID_LSTICK_UP 0x1110 +#define ID_LSTICK_RIGHT 0x1111 +#define ID_LSTICK_DOWN 0x1112 +#define ID_LSTICK_LEFT 0x1113 +#define ID_RSTICK_UP 0x1114 +#define ID_RSTICK_RIGHT 0x1115 +#define ID_RSTICK_DOWN 0x1116 +#define ID_RSTICK_LEFT 0x1117 +#define ID_ANALOG 0x1118 +#define ID_DELETE 0x11FF +#define ID_DEBUG 0x1200 +#define ID_IGNORE 0x1201 +#define ID_CLEAR 0x1202 +#define ID_REFRESH 0x1202 +#define ID_SAVE 0x1204 +#define ID_LOAD 0x1205 +#define ID_BIG_MOTOR 0x120A +#define ID_SMALL_MOTOR 0x120B +#define ID_TEST 0x1300 +#define ID_CONTROLS 0x1301 +#define ID_FF 0x1304 + +#endif + +struct GeneralSettingsBool { + const wchar_t *name; + unsigned int ControlId; + u8 defaultValue; +}; + +// XXX: I try to remove only gui stuff +void DeleteBinding(int port, int slot, Device *dev, Binding *b) { + fprintf(stderr, "delete binding %d:%d\n", port, slot); + Binding *bindings = dev->pads[port][slot].bindings; + int i = b - bindings; + memmove(bindings+i, bindings+i+1, sizeof(Binding) * (dev->pads[port][slot].numBindings - i - 1)); + dev->pads[port][slot].numBindings--; +} + +void DeleteBinding(int port, int slot, Device *dev, ForceFeedbackBinding *b) { + ForceFeedbackBinding *bindings = dev->pads[port][slot].ffBindings; + int i = b - bindings; + memmove(bindings+i, bindings+i+1, sizeof(Binding) * (dev->pads[port][slot].numFFBindings - i - 1)); + dev->pads[port][slot].numFFBindings--; +} + +int BindCommand(Device *dev, unsigned int uid, unsigned int port, unsigned int slot, int command, int sensitivity, int turbo, int deadZone) { + // Checks needed because I use this directly when loading bindings. + if (port > 1 || slot>3) { + return -1; + } + if (!sensitivity) sensitivity = BASE_SENSITIVITY; + if ((uid>>16) & (PSHBTN|TGLBTN)) { + deadZone = 0; + } + else if (!deadZone) { + if ((uid>>16) & PRESSURE_BTN) { + deadZone = 1; + } + else { + deadZone = DEFAULT_DEADZONE; + } + } + // Relative axes can have negative sensitivity. + else if (((uid>>16) & 0xFF) == RELAXIS) { + sensitivity = abs(sensitivity); + } + VirtualControl *c = dev->GetVirtualControl(uid); + if (!c) return -1; + // Add before deleting. Means I won't scroll up one line when scrolled down to bottom. + int controlIndex = c - dev->virtualControls; + int index = 0; + PadBindings *p = dev->pads[port]+slot; + p->bindings = (Binding*) realloc(p->bindings, (p->numBindings+1) * sizeof(Binding)); + for (index = p->numBindings; index > 0; index--) { + if (p->bindings[index-1].controlIndex < controlIndex) break; + p->bindings[index] = p->bindings[index-1]; + } + Binding *b = p->bindings+index; + p->numBindings++; + b->command = command; + b->controlIndex = controlIndex; + b->turbo = turbo; + b->sensitivity = sensitivity; + b->deadZone = deadZone; + // Where it appears in listview. + //int count = ListBoundCommand(port, slot, dev, b); + + int newBindingIndex = index; + index = 0; + while (index < p->numBindings) { + if (index == newBindingIndex) { + index ++; + continue; + } + b = p->bindings + index; + int nuke = 0; + if (config.multipleBinding) { + if (b->controlIndex == controlIndex && b->command == command) + nuke = 1; + } + else { + int uid2 = dev->virtualControls[b->controlIndex].uid; + if (b->controlIndex == controlIndex || (!((uid2^uid) & 0xFFFFFF) && ((uid|uid2) & (UID_POV | UID_AXIS)))) + nuke = 1; + } + if (!nuke) { + index++; + continue; + } + if (index < newBindingIndex) { + newBindingIndex--; + //count --; + } + DeleteBinding(port, slot, dev, b); + } + if (!config.multipleBinding) { + for (int port2=0; port2<2; port2++) { + for (int slot2=0; slot2<4; slot2++) { + if (port2==(int)port && slot2 == (int)slot) continue; + PadBindings *p = dev->pads[port2]+slot2; + for (int i=0; i < p->numBindings; i++) { + Binding *b = p->bindings+i; + int uid2 = dev->virtualControls[b->controlIndex].uid; + if (b->controlIndex == controlIndex || (!((uid2^uid) & 0xFFFFFF) && ((uid|uid2) & (UID_POV | UID_AXIS)))) { + DeleteBinding(port2, slot2, dev, b); + i--; + } + } + } + } + } + + //return count; + return 0; +} + +// Ties together config data structure, config files, and general config +// dialog. +const GeneralSettingsBool BoolOptionsInfo[] = { + {L"Force Cursor Hide", 0 /*IDC_FORCE_HIDE*/, 0}, + {L"Mouse Unfocus", 0 /*IDC_MOUSE_UNFOCUS*/, 1}, + {L"Background", 0 /*IDC_BACKGROUND*/, 1}, + {L"Multiple Bindings", 0 /*IDC_MULTIPLE_BINDING*/, 0}, + + {L"DirectInput Game Devices", 0 /*IDC_G_DI*/, 1}, + {L"XInput", 0 /*IDC_G_XI*/, 1}, + {L"DualShock 3", 0 /*IDC_G_DS3*/, 0}, + + {L"Multitap 1", 0 /*IDC_MULTITAP1*/, 0}, + {L"Multitap 2", 0 /*IDC_MULTITAP2*/, 0}, + + {L"Escape Fullscreen Hack", 0 /*IDC_ESCAPE_FULLSCREEN_HACK*/, 1}, + {L"Disable Screen Saver", 0 /*IDC_DISABLE_SCREENSAVER*/, 1}, + {L"Logging", 0 /*IDC_DEBUG_FILE*/, 0}, + + {L"Save State in Title", 0 /*IDC_SAVE_STATE_TITLE*/, 0}, //No longer required, PCSX2 now handles it - avih 2011-05-17 + {L"GH2", 0 /*IDC_GH2_HACK*/, 0}, + {L"Turbo Key Hack", 0 /*IDC_TURBO_KEY_HACK*/, 0}, + + {L"Vista Volume", 0 /*IDC_VISTA_VOLUME*/, 1}, +}; + +void CALLBACK PADsetSettingsDir( const char *dir ) +{ + CfgHelper::SetSettingsDir(dir); +} + +int SaveSettings(wchar_t *file=0) { + CfgHelper cfg; + + for (size_t i=0; inumDevices; i++) { + wchar_t id[50]; + wchar_t temp[50], temp2[1000]; + wsprintfW(id, L"Device %i", i); + Device *dev = dm->devices[i]; + wchar_t *name = dev->displayName; + while (name[0] == '[') { + wchar_t *name2 = wcschr(name, ']'); + if (!name2) break; + name = name2+1; + while (iswspace(name[0])) name++; + } + + cfg.WriteStr(id, L"Display Name", name); + cfg.WriteStr(id, L"Instance ID", dev->instanceID); + if (dev->productID) { + cfg.WriteStr(id, L"Product ID", dev->productID); + } + cfg.WriteInt(id, L"API", dev->api); + cfg.WriteInt(id, L"Type", dev->type); + int ffBindingCount = 0; + int bindingCount = 0; + for (int port=0; port<2; port++) { + for (int slot=0; slot<4; slot++) { + for (int j=0; jpads[port][slot].numBindings; j++) { + Binding *b = dev->pads[port][slot].bindings+j; + VirtualControl *c = &dev->virtualControls[b->controlIndex]; + wsprintfW(temp, L"Binding %i", bindingCount++); + wsprintfW(temp2, L"0x%08X, %i, %i, %i, %i, %i, %i", c->uid, port, b->command, b->sensitivity, b->turbo, slot, b->deadZone); + cfg.WriteStr(id, temp, temp2); + } + + for (int j=0; jpads[port][slot].numFFBindings; j++) { + ForceFeedbackBinding *b = dev->pads[port][slot].ffBindings+j; + ForceFeedbackEffectType *eff = &dev->ffEffectTypes[b->effectIndex]; + wsprintfW(temp, L"FF Binding %i", ffBindingCount++); + wsprintfW(temp2, L"%s %i, %i, %i", eff->effectID, port, b->motor, slot); + for (int k=0; knumFFAxes; k++) { + ForceFeedbackAxis *axis = dev->ffAxes + k; + AxisEffectInfo *info = b->axes + k; + //wsprintfW(wcschr(temp2,0), L", %i, %i", axis->id, info->force); + // Not secure because I'm too lazy to compute the remaining size + wprintf(wcschr(temp2, 0), L", %i, %i", axis->id, info->force); + } + cfg.WriteStr(id, temp, temp2); + } + } + } + } + + return 0; +} + +int LoadSettings(int force, wchar_t *file) { + if (dm && !force) return 0; + + // Could just do ClearDevices() instead, but if I ever add any extra stuff, + // this will still work. + UnloadConfigs(); + dm = new InputDeviceManager(); + + CfgHelper cfg; + + for (size_t i=0; i= 100) break; + continue; + } + wchar_t *id2 = 0; + if (cfg.ReadStr(id, L"Product ID", temp4) && temp4[0]) + id2 = temp4; + + int api = cfg.ReadInt(id, L"API"); + int type = cfg.ReadInt(id, L"Type"); + if (!api || !type) continue; + + Device *dev = new Device((DeviceAPI)api, (DeviceType)type, temp2, temp3, id2); + dev->attached = 0; + dm->AddDevice(dev); + int j = 0; + int last = 0; + while (1) { + wsprintfW(temp, L"Binding %i", j++); + if (!cfg.ReadStr(id, temp, temp2)) { + if (j >= 100) { + if (!last) break; + last = 0; + } + continue; + } + last = 1; + unsigned int uid; + int port, command, sensitivity, turbo, slot = 0, deadZone = 0; + int w = 0; + char string[1000]; + while (temp2[w]) { + string[w] = (char)temp2[w]; + w++; + } + string[w] = 0; + int len = sscanf(string, " %i , %i , %i , %i , %i , %i , %i", &uid, &port, &command, &sensitivity, &turbo, &slot, &deadZone); + if (len >= 5 && type) { + VirtualControl *c = dev->GetVirtualControl(uid); + if (!c) c = dev->AddVirtualControl(uid, -1); + if (c) { + BindCommand(dev, uid, port, slot, command, sensitivity, turbo, deadZone); + } + } + } + j = 0; + while (1) { + wsprintfW(temp, L"FF Binding %i", j++); + if (!cfg.ReadStr(id, temp, temp2)) { + if (j >= 10) { + if (!last) break; + last = 0; + } + continue; + } + last = 1; + int port, slot, motor; + int w = 0; + char string[1000]; + char effect[1000]; + while (temp2[w]) { + string[w] = (char)temp2[w]; + w++; + } + string[w] = 0; + // wcstok not in ntdll. More effore than its worth to shave off + // whitespace without it. + if (sscanf(string, " %s %i , %i , %i", effect, &port, &motor, &slot) == 4) { + char *s = strchr(strchr(strchr(string, ',')+1, ',')+1, ','); + if (!s) continue; + s++; + w = 0; + while (effect[w]) { + temp2[w] = effect[w]; + w++; + } + temp2[w] = 0; + ForceFeedbackEffectType *eff = dev->GetForcefeedbackEffect(temp2); + if (!eff) { + // At the moment, don't record effect types. + // Only used internally, anyways, so not an issue. + dev->AddFFEffectType(temp2, temp2, EFFECT_CONSTANT); + // eff = &dev->ffEffectTypes[dev->numFFEffectTypes-1]; + } +#if 0 + ForceFeedbackBinding *b; + CreateEffectBinding(dev, temp2, port, slot, motor, &b); + if (b) { + while (1) { + int axisID = atoi(s); + if (!(s = strchr(s, ','))) break; + s++; + int force = atoi(s); + int i; + for (i=0; inumFFAxes; i++) { + if (axisID == dev->ffAxes[i].id) break; + } + if (i == dev->numFFAxes) { + dev->AddFFAxis(L"?", axisID); + } + b->axes[i].force = force; + if (!(s = strchr(s, ','))) break; + s++; + } + } +#endif + } + } + } + config.multipleBinding = multipleBinding; + + //TODO RefreshEnabledDevicesAndDisplay(1); + RefreshEnabledDevices(1); // XXX For the moment only a subfonction + + return 0; +} + +void UnloadConfigs() { + if (dm) { + delete dm; + dm = 0; + } +} + +void RefreshEnabledDevices(int updateDeviceList) { + // Clears all device state. + static int lastXInputState = -1; + if (updateDeviceList || lastXInputState != config.gameApis.xInput) { + EnumDevices(config.gameApis.xInput); + lastXInputState = config.gameApis.xInput; + } + + for (int i=0; inumDevices; i++) { + Device *dev = dm->devices[i]; + + // XXX windows magic? + if (!dev->attached && dev->displayName[0] != '[') { + wchar_t *newName = (wchar_t*) malloc(sizeof(wchar_t) * (wcslen(dev->displayName) + 12)); + wsprintfW(newName, L"[Detached] %s", dev->displayName); + free(dev->displayName); + dev->displayName = newName; + } + + dm->EnableDevice(i); +#if 0 // windows magic? + if ((dev->type == KEYBOARD && dev->api == IGNORE_KEYBOARD) || + (dev->type == KEYBOARD && dev->api == config.keyboardApi) || + (dev->type == MOUSE && dev->api == config.mouseApi) || + (dev->type == OTHER && + ((dev->api == DI && config.gameApis.directInput) || + (dev->api == DS3 && config.gameApis.dualShock3) || + (dev->api == XINPUT && config.gameApis.xInput)))) { + dm->EnableDevice(i); + if (config.gameApis.dualShock3 && dev->api == DI && dev->displayName && + !wcsicmp(dev->displayName, L"DX PLAYSTATION(R)3 Controller")) { + dm->DisableDevice(i); + } + else { + dm->EnableDevice(i); + } + } + else { + dm->DisableDevice(i); + } +#endif + } +} + +void Configure() { + // Can end up here without PADinit() being called first. + LoadSettings(); + // Can also end up here after running emulator a bit, and possibly + // disabling some devices due to focus changes, or releasing mouse. + RefreshEnabledDevices(0); +} diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/ConfigHelper.cpp pcsx2-1.4.0/plugins/LilyPad/Linux/ConfigHelper.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/ConfigHelper.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/ConfigHelper.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,112 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * File imported from SPU2-X (and tranformed to object) + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Linux/ConfigHelper.h" +#include + +wxString CfgHelper::m_path = L"inis/LilyPad.ini"; + +void CfgHelper::SetSettingsDir(const char* dir) +{ + m_path = wxString::FromAscii(dir) + L"/LilyPad.ini"; +} + +CfgHelper::CfgHelper() +{ + m_config = new wxFileConfig(L"", L"", m_path, L"", wxCONFIG_USE_LOCAL_FILE); +} + +CfgHelper::~CfgHelper() +{ + delete m_config; +} + +void CfgHelper::setIni(const wchar_t* Section) +{ + m_config->SetPath(wxsFormat(L"/%s", Section)); +} + + +void CfgHelper::WriteBool(const wchar_t* Section, const wchar_t* Name, bool Value) +{ + setIni(Section); + m_config->Write(Name, Value); +} + +void CfgHelper::WriteInt(const wchar_t* Section, const wchar_t* Name, int Value) +{ + setIni(Section); + m_config->Write(Name, Value); +} + +void CfgHelper::WriteFloat(const wchar_t* Section, const wchar_t* Name, float Value) +{ + setIni(Section); + m_config->Write(Name, (double)Value); +} + +void CfgHelper::WriteStr(const wchar_t* Section, const wchar_t* Name, const wxString& Data) +{ + setIni(Section); + m_config->Write(Name, Data); +} + +bool CfgHelper::ReadBool(const wchar_t *Section,const wchar_t* Name, bool Default) +{ + bool ret; + + setIni(Section); + m_config->Read(Name, &ret, Default); + + return ret; +} + +int CfgHelper::ReadInt(const wchar_t* Section, const wchar_t* Name,int Default) +{ + int ret; + + setIni(Section); + m_config->Read(Name, &ret, Default); + + return ret; +} + +float CfgHelper::ReadFloat(const wchar_t* Section, const wchar_t* Name, float Default) +{ + double ret; + + setIni(Section); + m_config->Read(Name, &ret, (double)Default); + + return (float)ret; +} + +int CfgHelper::ReadStr(const wchar_t* Section, const wchar_t* Name, wchar_t* Data, const wchar_t* Default) +{ + setIni(Section); + wcscpy(Data, m_config->Read(Name, Default).wc_str()); + return wcslen(Data); +} + +int CfgHelper::ReadStr(const wchar_t* Section, const wchar_t* Name, wxString& Data, const wchar_t* Default) +{ + setIni(Section); + Data = m_config->Read(Name, Default); + return Data.size(); +} diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/ConfigHelper.h pcsx2-1.4.0/plugins/LilyPad/Linux/ConfigHelper.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/ConfigHelper.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/ConfigHelper.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,48 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * File imported from SPU2-X (and tranformed to object) + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +#include + +extern void CfgSetSettingsDir(const char* dir); + +class CfgHelper { + wxFileConfig* m_config; + static wxString m_path; + + void setIni(const wchar_t* Section); + + public: + CfgHelper(); + ~CfgHelper(); + + void WriteBool(const wchar_t* Section, const wchar_t* Name, bool Value); + void WriteInt(const wchar_t* Section, const wchar_t* Name, int Value); + void WriteFloat(const wchar_t* Section, const wchar_t* Name, float Value); + void WriteStr(const wchar_t* Section, const wchar_t* Name, const wxString& Data); + + bool ReadBool(const wchar_t *Section,const wchar_t* Name, bool Default = false); + int ReadStr(const wchar_t* Section, const wchar_t* Name, wxString& Data, const wchar_t* Default = 0); + int ReadStr(const wchar_t* Section, const wchar_t* Name, wchar_t* Data, const wchar_t* Default = 0); + int ReadInt(const wchar_t* Section, const wchar_t* Name,int Default = 0); + float ReadFloat(const wchar_t* Section, const wchar_t* Name, float Default = 0.0f); + + static void SetSettingsDir(const char* dir); + +}; diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/JoyEvdev.cpp pcsx2-1.4.0/plugins/LilyPad/Linux/JoyEvdev.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/JoyEvdev.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/JoyEvdev.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,208 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2015 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +#include "InputManager.h" +#include "Linux/JoyEvdev.h" +#include "Linux/bitmaskros.h" + +JoyEvdev::JoyEvdev(int fd, bool ds3, const wchar_t *id) : Device(LNX_JOY, OTHER, id, id), m_fd(fd) { + // XXX LNX_JOY => DS3 or ??? + + m_abs.clear(); + m_btn.clear(); + m_rel.clear(); + int last = 0; + + uint8_t abs_bitmap[nUcharsForNBits(ABS_CNT)] = {0}; + uint8_t btn_bitmap[nUcharsForNBits(KEY_CNT)] = {0}; + uint8_t rel_bitmap[nUcharsForNBits(REL_CNT)] = {0}; + + // Add buttons + if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(btn_bitmap)), btn_bitmap) >= 0) { + for (int bit = BTN_MISC; bit < KEY_CNT; bit++) { + if (testBit(bit, btn_bitmap)) { + AddPhysicalControl(PSHBTN, last, 0); + m_btn.push_back(bit); + last++; + } + } + } + + // Add Absolute axis + if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(abs_bitmap)), abs_bitmap) >= 0) { + for (int bit = 0; bit < ABS_CNT; bit++) { + ControlType type = ABSAXIS; // FIXME DS3 + + if (testBit(bit, abs_bitmap)) { + input_absinfo info; + if (ioctl(m_fd, EVIOCGABS(bit), &info) < 0) { + fprintf(stderr, "Invalid IOCTL EVIOCGID\n"); + continue; + } + + AddPhysicalControl(ABSAXIS, last, 0); + last++; + if (std::abs(info.value - 127) < 2) { + fprintf(stderr, "HALF Axis info %d=>%d, current %d, flat %d, resolution %d\n", info.minimum, info.maximum, info.value, info.flat, info.resolution); + + // Half axis must be split into 2 parts... + AddPhysicalControl(ABSAXIS, last, 0); + last++; + + m_abs.push_back(abs_info(bit, info.minimum, info.value, type)); + m_abs.push_back(abs_info(bit, info.value, info.maximum, type)); + } else { + fprintf(stderr, "FULL Axis info %d=>%d, current %d, flat %d, resolution %d\n", info.minimum, info.maximum, info.value, info.flat, info.resolution); + + m_abs.push_back(abs_info(bit, info.minimum, info.maximum, type)); + } + } + } + } + + // Add relative axis + if (ioctl(fd, EVIOCGBIT(EV_REL, sizeof(rel_bitmap)), rel_bitmap) >= 0) { + for (int bit = 0; bit < REL_CNT; bit++) { + if (testBit(bit, rel_bitmap)) { + AddPhysicalControl(RELAXIS, last, last); + m_rel.push_back(bit); + last++; + + fprintf(stderr, "Add relative nb %d\n", bit); + } + } + } + + fprintf(stderr, "New device created. Found axe:%d, buttons:%d, m_rel:%d\n\n", m_abs.size(), m_btn.size(), m_rel.size()); +} + +JoyEvdev::~JoyEvdev() { + close(m_fd); +} + +int JoyEvdev::Activate(InitInfo* args) { + AllocState(); + + uint16_t size = m_abs.size()+m_rel.size()+m_btn.size(); + memset(physicalControlState, 0, sizeof(int)*size); + + active = 1; + return 1; +} + +int JoyEvdev::Update() { + struct input_event events[32]; + int len; + int status = 0; + //fprintf(stderr, "Update was called\n"); + + // Do a big read to reduce kernel validation + while ((len = read(m_fd, events, (sizeof events))) > 0) { + int evt_nb = len / sizeof(input_event); + //fprintf(stderr, "Poll %d events available\n", evt_nb); + for (int i = 0; i < evt_nb; i++) { + switch(events[i].type) { + case EV_ABS: + { + for (size_t idx = 0; idx < m_abs.size(); idx++) { + if (m_abs[idx].code == events[i].code) { + // XXX strict or not ? + if ((events[i].value >= m_abs[idx].min) && (events[i].value <= m_abs[idx].max)) { + // XXX FIX shitty api + int scale = m_abs[idx].scale(events[i].value); + fprintf(stderr, "axis value %d scaled to %d\n", events[i].value, scale); + physicalControlState[idx + m_btn.size()] = scale; + status = 1; + } + } + } + } + break; + case EV_KEY: + { + for (size_t idx = 0; idx < m_btn.size(); idx++) { + if (m_btn[idx] == events[i].code) { + fprintf(stderr, "Event KEY:%d detected with value %d\n", events[i].code, events[i].value); + physicalControlState[idx] = FULLY_DOWN * events[i].value; + status = 1; + break; + } + } + + } + break; + case EV_REL: + // XXX + break; + default: + break; + } + } + + } + + return status; +} + + +static std::wstring CorrectJoySupport(int fd) { + struct input_id id; + if (ioctl(fd, EVIOCGID, &id) < 0) { + fprintf(stderr, "Invalid IOCTL EVIOCGID\n"); + return L""; + } + + char dev_name[128]; + if (ioctl(fd, EVIOCGNAME(128), dev_name) < 0) { + fprintf(stderr, "Invalid IOCTL EVIOCGNAME\n"); + return L""; + } + + fprintf(stderr, "Found input device => bustype:%x, vendor:%x, product:%x, version:%x\n", id.bustype, id.vendor, id.product, id.version); + fprintf(stderr, "\tName:%s\n", dev_name); + + std::string s(dev_name); + return std::wstring(s.begin(), s.end()); +} + +void EnumJoystickEvdev() { + // Technically it must be done with udev but another lib for + // avoid a loop is too much for me (even if udev is mandatory + // so maybe later) + int found_devices = 0; + std::string input_root("/dev/input/event"); + for (int i = 0; i < 32; i++) { + std::string dev = input_root + std::to_string(i); + + int fd = open(dev.c_str(), O_RDWR | O_NONBLOCK); + if (fd < 0) { + continue; + } + + std::wstring id = CorrectJoySupport(fd); + if (id.size() != 0) { + bool ds3 = id.find(L"PLAYSTATION(R)3") != std::string::npos; + if (ds3) { + fprintf(stderr, "DS3 device detected !!!\n"); + } + dm->AddDevice(new JoyEvdev(fd, ds3, id.c_str())); + } else if (fd >= 0) + close(fd); + } + +} diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/JoyEvdev.h pcsx2-1.4.0/plugins/LilyPad/Linux/JoyEvdev.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/JoyEvdev.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/JoyEvdev.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,77 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2015 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +#include "InputManager.h" + +#include +#include +#include +#include + +struct abs_info { + uint16_t code; + int32_t min; + int32_t max; + + int32_t factor; + int32_t translation; + + abs_info(int32_t _code, int32_t _min, int32_t _max, ControlType type) : code(_code), min(_min), max(_max) { + translation = 0; + // Note: ABSAXIS ranges from -64K to 64K + // Note: PSHBTN ranges from 0 to 64K + if ((min == 0) && (max == 255)) { + if (type == ABSAXIS) { + translation = 128; + factor = FULLY_DOWN/128; + } else { + factor = FULLY_DOWN/256; + } + } else if ((min == -1) && (max == 1)) { + factor = FULLY_DOWN; + } else if ((min == 0) && (std::abs(max - 127) < 2)) { + translation = 64; + factor = -FULLY_DOWN/64; + } else if ((max == 255) && (std::abs(min - 127) < 2)) { + translation = 64+128; + factor = FULLY_DOWN/64; + } else { + fprintf(stderr, "Scale not supported\n"); + factor = 0; + } + } + + int scale(int32_t value) { + return (value - translation) * factor; + } +}; + +class JoyEvdev : public Device { + int m_fd; + std::vector m_abs; + std::vector m_btn; + std::vector m_rel; + + public: + JoyEvdev(int fd, bool ds3, const wchar_t *id); + ~JoyEvdev(); + int Activate(InitInfo* args); + int Update(); +}; + +void EnumJoystickEvdev(); diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardMouse.cpp pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardMouse.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardMouse.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardMouse.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,78 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2015 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Linux/KeyboardMouse.h" + +// actually it is even more but it is enough to distinguish different key +#define MAX_KEYCODE (0xFF) + +LinuxKeyboard::LinuxKeyboard() : + Device(LNX_KEYBOARD, KEYBOARD, L"displayName", L"instanceID", L"deviceID") +{ + for (int i=0; i>15); + value += value&1; + if (vkey == VK_CONTROL || vkey == VK_MENU || vkey == VK_SHIFT) { + value = 0; + } + physicalControlState[vkey] = 0; + } +#endif + // Every button released + memset(physicalControlState, 0, sizeof(int)*MAX_KEYCODE); + + return 1; +} + +int LinuxKeyboard::Update() { + keyEvent event; + int status = 0; + while (R_GetQueuedKeyEvent(&event)) { + switch (event.evt) { + case KeyPress: + physicalControlState[MAX_KEYCODE & event.key] = FULLY_DOWN; + status = 1; + break; + case KeyRelease: + physicalControlState[MAX_KEYCODE & event.key] = 0; + status = 1; + break; + default: + //fprintf(stderr, "Unsupported event %x\n", event.evt); + //assert(0); + break; + } + } + + return status; // XXX ???? +} + +void EnumLnx() { + dm->AddDevice(new LinuxKeyboard()); +} diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardMouse.h pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardMouse.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardMouse.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardMouse.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,29 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2015 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +#include "InputManager.h" +#include "KeyboardQueue.h" + +class LinuxKeyboard : public Device { + public: + LinuxKeyboard(); + int Activate(InitInfo* args); + int Update(); +}; + +void EnumLnx(); diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardQueue.cpp pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardQueue.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/Linux/KeyboardQueue.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/Linux/KeyboardQueue.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,61 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +// This is undoubtedly completely unnecessary. +#include "KeyboardQueue.h" + +#ifdef __linux__ +// Above code is for events that go from the plugin to core +// Here we need the contrary, event that come from core to the plugin +// Yes it is a crazy ping-pong hell ! I mostly copy past with +// a R_ (which stand for reverse) + +#define R_EVENT_QUEUE_LEN 256 +static std::mutex core_event; + +static u8 R_lastQueuedEvent = 0; +static u8 R_nextQueuedEvent = 0; +static keyEvent R_queuedEvents[R_EVENT_QUEUE_LEN]; + +void R_QueueKeyEvent(const keyEvent &evt) { + std::lock_guard lock(core_event); + + R_queuedEvents[R_lastQueuedEvent] = evt; + R_lastQueuedEvent = (R_lastQueuedEvent + 1) % R_EVENT_QUEUE_LEN; + // In case someone has a severe Parkingson's disease + assert(R_nextQueuedEvent != R_lastQueuedEvent); +} + +int R_GetQueuedKeyEvent(keyEvent *event) { + if (R_lastQueuedEvent == R_nextQueuedEvent) return 0; + + std::lock_guard lock(core_event); + *event = R_queuedEvents[R_nextQueuedEvent]; + R_nextQueuedEvent = (R_nextQueuedEvent + 1) % R_EVENT_QUEUE_LEN; + return 1; +} + +void R_ClearKeyQueue() { + R_lastQueuedEvent = R_nextQueuedEvent; +} + +EXPORT_C_(void) PADWriteEvent(keyEvent &evt) +{ + R_QueueKeyEvent(evt); +} +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/resource.h pcsx2-1.4.0/plugins/LilyPad/resource.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,154 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by LilyPad.rc +// +#define IDD_GENERAL 102 +#define IDD_ABOUT 103 +#define IDI_FROG 104 +#define IDD_CONFIG 105 +#define IDD_CONFIG_GUITAR 106 +#define IDD_PROPPAGE_LARGE 107 +#define IDC_CURSOR1 108 +#define IDC_ESCAPE_FULLSCREEN_HACK 109 +#define IDD_DIAG 110 +#define IDR_INI1 111 +#define IDC_CLOSE_HACK1 1099 +#define IDC_KB_DISABLE 1100 +#define IDC_KB_DI 1101 +#define IDC_KB_WM 1102 +#define IDC_KB_RAW 1103 +#define IDC_DISABLE_PAD1 1104 +#define IDC_M_DISABLE 1105 +#define IDC_M_DI 1106 +#define IDC_M_WM 1107 +#define IDC_M_RAW 1108 +#define IDC_G_XI 1109 +#define IDC_G_DI 1110 +#define IDC_G_DS3 1111 +#define IDC_CLOSE_HACK2 1112 +#define IDC_DEBUG_FILE 1113 +#define IDC_GUITAR1 1114 +#define IDC_ANALOG_START1 1115 +#define IDC_MULTITAP1 1116 +#define IDC_DISABLE_SCREENSAVER 1117 +#define IDC_MOUSE_UNFOCUS 1118 +#define IDC_AXIS_BUTTONS 1119 +#define IDC_MULTITAP2 1120 +#define IDC_BACKGROUND 1121 +#define IDC_MULTIPLE_BINDING 1122 +#define IDC_DISABLE_SCREENSAVER2 1123 +#define IDC_FORCE_HIDE 1124 +#define IDC_GH2_HACK 1125 +#define IDC_FORCEFEEDBACK_HACK1 1126 +#define IDC_VISTA_VOLUME 1127 +#define IDC_TURBO_KEY_HACK 1128 +#define IDC_SAVE_STATE_TITLE 1129 +#define IDC_PAD_LIST 1130 +#define IDC_COMBO1 1131 +#define IDC_PAD_TYPE 1132 +#define IDC_SLIDER1 0x1000 +#define IDC_FLIP1 0x1001 +#define IDC_AXIS_DIRECTION 0x1002 +#define IDC_AXIS_CONTROL1 0x1003 +#define IDC_AXIS_SENSITIVITY1 0x1004 +#define IDC_TURBO 0x1005 +#define IDC_AXIS_DEVICE1 0x1006 +#define ID_SENSITIVITY 0x1007 +#define IDC_DPAD 0x1008 +#define IDC_LSTICK 0x1009 +#define IDC_RSTICK 0x100A +#define IDC_SLIDER_DEADZONE 0x1010 +#define IDC_AXIS_DEADZONE 0x1014 +#define IDC_LABEL_SENSITIVITY 0x1020 +#define IDC_LABEL_DEADZONE 0x1021 +#define ID_LOCK_BUTTONS 0x10FC +#define ID_LOCK 0x10FD +#define ID_LOCK_DIRECTION 0x10FE +#define ID_MOUSE 0x10FF +#define ID_SELECT 0x1100 +#define ID_L3 0x1101 +#define ID_R3 0x1102 +#define ID_START 0x1103 +#define ID_DPAD_UP 0x1104 +#define ID_DPAD_RIGHT 0x1105 +#define ID_DPAD_DOWN 0x1106 +#define ID_DPAD_LEFT 0x1107 +#define ID_L2 0x1108 +#define ID_R2 0x1109 +#define ID_L1 0x110A +#define ID_R1 0x110B +#define ID_TRIANGLE 0x110C +#define ID_CIRCLE 0x110D +#define ID_CROSS 0x110E +#define ID_SQUARE 0x110F +#define ID_LSTICK_UP 0x1110 +#define ID_LSTICK_RIGHT 0x1111 +#define ID_LSTICK_DOWN 0x1112 +#define ID_LSTICK_LEFT 0x1113 +#define ID_RSTICK_UP 0x1114 +#define ID_RSTICK_RIGHT 0x1115 +#define ID_RSTICK_DOWN 0x1116 +#define ID_RSTICK_LEFT 0x1117 +#define ID_ANALOG 0x1118 +#define ID_DELETE 0x11FF +#define ID_DEBUG 0x1200 +#define ID_IGNORE 0x1201 +#define ID_CLEAR 0x1202 +#define ID_REFRESH 0x1202 +#define ID_SAVE 0x1204 +#define ID_LOAD 0x1205 +#define IDC_LIST 0x1207 +#define IDC_FORCEFEEDBACK 0x1208 +#define IDC_FORCEFEEDBACK_FUNCTION 0x1209 +#define ID_BIG_MOTOR 0x120A +#define ID_SMALL_MOTOR 0x120B +#define ID_TEST 0x1300 +#define ID_CONTROLS 0x1301 +#define IDC_FF_DEVICE 0x1302 +#define IDC_FF_MOTOR 0x1303 +#define ID_FF 0x1304 +#define IDC_FF_EFFECT 0x1305 +#define IDC_VERSION 0x1306 +#define IDC_FF_AXIS1_ENABLED 0x1310 +#define IDC_FF_AXIS1 0x1311 +#define IDC_FF_AXIS1_FLIP 0x1312 +#define IDC_FF_AXIS1_SCALE 0x1313 +#define IDC_FF_AXIS2_ENABLED 0x1320 +#define IDC_FF_AXIS2 0x1321 +#define IDC_FF_AXIS2_FLIP 0x1322 +#define IDC_FF_AXIS2_SCALE 0x1323 +#define IDC_FF_AXIS3_ENABLED 0x1330 +#define IDC_FF_AXIS3 0x1331 +#define IDC_FF_AXIS3_FLIP 0x1332 +#define IDC_FF_AXIS3_SCALE 0x1333 +#define IDC_FF_AXIS4_ENABLED 0x1340 +#define IDC_FF_AXIS4 0x1341 +#define IDC_FF_AXIS4_FLIP 0x1342 +#define IDC_FF_AXIS4_SCALE 0x1343 +#define IDC_FF_AXIS5_ENABLED 0x1350 +#define IDC_FF_AXIS5 0x1351 +#define IDC_FF_AXIS5_FLIP 0x1352 +#define IDC_FF_AXIS5_SCALE 0x1353 +#define IDC_FF_AXIS6_ENABLED 0x1360 +#define IDC_FF_AXIS6 0x1361 +#define IDC_FF_AXIS6_FLIP 0x1362 +#define IDC_FF_AXIS6_SCALE 0x1363 +#define IDC_FF_AXIS7_ENABLED 0x1370 +#define IDC_FF_AXIS7 0x1371 +#define IDC_FF_AXIS7_FLIP 0x1372 +#define IDC_FF_AXIS7_SCALE 0x1373 +#define IDC_FF_AXIS8_ENABLED 0x1380 +#define IDC_FF_AXIS8 0x1381 +#define IDC_FF_AXIS8_FLIP 0x1382 +#define IDC_FF_AXIS8_SCALE 0x1383 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 112 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1133 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/XInput.cpp pcsx2-1.4.0/plugins/LilyPad/XInput.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/XInput.cpp 2014-07-16 09:18:20.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/XInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,220 +0,0 @@ -/* LilyPad - Pad plugin for PS2 Emulator - * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver - * - * PCSX2 is free software: you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Found- ation, either version 3 of the License, or (at your option) - * any later version. - * - * PCSX2 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 PCSX2. If not, see . - */ - -#include "Global.h" -#include -#include "VKey.h" -#include "InputManager.h" - -// This way, I don't require that XInput junk be installed. -typedef void (CALLBACK *_XInputEnable)(BOOL enable); -typedef DWORD (CALLBACK *_XInputGetState)(DWORD dwUserIndex, XINPUT_STATE* pState); -typedef DWORD (CALLBACK *_XInputSetState)(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration); - -_XInputEnable pXInputEnable = 0; -_XInputGetState pXInputGetState = 0; -_XInputSetState pXInputSetState = 0; - -static int xInputActiveCount = 0; - -// Completely unncessary, really. -__forceinline int ShortToAxis(int v) { - // If positive and at least 1 << 14, increment. - v += (!((v>>15)&1)) & ((v>>14)&1); - // Just double. - return v * 2; -} - -class XInputDevice : public Device { - // Cached last vibration values by pad and motor. - // Need this, as only one value is changed at a time. - int ps2Vibration[2][4][2]; - // Minor optimization - cache last set vibration values - // When there's no change, no need to do anything. - XINPUT_VIBRATION xInputVibration; -public: - int index; - - XInputDevice(int index, wchar_t *displayName) : Device(XINPUT, OTHER, displayName) { - memset(ps2Vibration, 0, sizeof(ps2Vibration)); - memset(&xInputVibration, 0, sizeof(xInputVibration)); - this->index = index; - int i; - for (i=0; i<14; i++) { - // The i > 9 accounts for the 2 bit skip in button flags. - AddPhysicalControl(PSHBTN, i + 2*(i > 9), 0); - } - for (i=14; i<16; i++) { - // The i > 9 accounts for the 2 bit skip in button flags. - AddPhysicalControl(PRESSURE_BTN, i + 2*(i > 9), 0); - } - for (; i<20; i++) { - AddPhysicalControl(ABSAXIS, i + 2, 0); - } - AddFFAxis(L"Slow Motor", 0); - AddFFAxis(L"Fast Motor", 1); - AddFFEffectType(L"Constant Effect", L"Constant", EFFECT_CONSTANT); - } - - wchar_t *GetPhysicalControlName(PhysicalControl *c) { - const static wchar_t *names[] = { - L"D-pad Up", - L"D-pad Down", - L"D-pad Left", - L"D-pad Right", - L"Start", - L"Back", - L"Left Thumb", - L"Right Thumb", - L"Left Shoulder", - L"Right Shoulder", - L"A", - L"B", - L"X", - L"Y", - L"Left Trigger", - L"Right Trigger", - L"Left Thumb X", - L"Left Thumb Y", - L"Right Thumb X", - L"Right Thumb Y", - }; - unsigned int i = (unsigned int) (c - physicalControls); - if (i < 20) { - return (wchar_t*)names[i]; - } - return Device::GetPhysicalControlName(c); - } - - int Activate(InitInfo *initInfo) { - if (active) Deactivate(); - if (!xInputActiveCount) { - pXInputEnable(1); - } - xInputActiveCount++; - active = 1; - AllocState(); - return 1; - } - - int Update() { - if (!active) return 0; - XINPUT_STATE state; - if (ERROR_SUCCESS != pXInputGetState(index, &state)) { - Deactivate(); - return 0; - } - int buttons = state.Gamepad.wButtons; - for (int i=0; i<14; i++) { - physicalControlState[i] = ((buttons >> physicalControls[i].id)&1)<<16; - } - physicalControlState[14] = (((int)state.Gamepad.bLeftTrigger) + (state.Gamepad.bLeftTrigger>>7)) << 8; - physicalControlState[15] = (((int)state.Gamepad.bRightTrigger) + (state.Gamepad.bRightTrigger>>7)) << 8; - physicalControlState[16] = ShortToAxis(state.Gamepad.sThumbLX); - physicalControlState[17] = ShortToAxis(state.Gamepad.sThumbLY); - physicalControlState[18] = ShortToAxis(state.Gamepad.sThumbRX); - physicalControlState[19] = ShortToAxis(state.Gamepad.sThumbRY); - return 1; - } - - void SetEffects(unsigned char port, unsigned int slot, unsigned char motor, unsigned char force) { - ps2Vibration[port][slot][motor] = force; - int newVibration[2] = {0,0}; - for (int p=0; p<2; p++) { - for (int s=0; s<4; s++) { - for (int i=0; iaxes[0].force * (__int64)ps2Vibration[p][s][ffb->motor]) / 255); - newVibration[1] += (int)((ffb->axes[1].force * (__int64)ps2Vibration[p][s][ffb->motor]) / 255); - } - } - } - newVibration[0] = abs(newVibration[0]); - if (newVibration[0] > 65535) { - newVibration[0] = 65535; - } - newVibration[1] = abs(newVibration[1]); - if (newVibration[1] > 65535) { - newVibration[1] = 65535; - } - if (newVibration[0] || newVibration[1] || newVibration[0] != xInputVibration.wLeftMotorSpeed || newVibration[1] != xInputVibration.wRightMotorSpeed) { - XINPUT_VIBRATION newv = {newVibration[0], newVibration[1]}; - if (ERROR_SUCCESS == pXInputSetState(index, &newv)) { - xInputVibration = newv; - } - } - } - - void SetEffect(ForceFeedbackBinding *binding, unsigned char force) { - PadBindings pBackup = pads[0][0]; - pads[0][0].ffBindings = binding; - pads[0][0].numFFBindings = 1; - SetEffects(0, 0, binding->motor, 255); - pads[0][0] = pBackup; - } - - void Deactivate() { - memset(&xInputVibration, 0, sizeof(xInputVibration)); - memset(ps2Vibration, 0, sizeof(ps2Vibration)); - pXInputSetState(index, &xInputVibration); - - FreeState(); - if (active) { - if (!--xInputActiveCount) { - pXInputEnable(0); - } - active = 0; - } - } - - ~XInputDevice() { - } -}; - -void EnumXInputDevices() { - int i; - wchar_t temp[30]; - if (!pXInputSetState) { - // Also used as flag to indicute XInput not installed, so - // don't repeatedly try to load it. - if (pXInputEnable) return; - - HMODULE hMod = 0; - for (i=3; i>= 0; i--) { - wsprintfW(temp, L"xinput1_%i.dll", i); - if (hMod = LoadLibraryW(temp)) break; - } - if (hMod) { - if ((pXInputEnable = (_XInputEnable) GetProcAddress(hMod, "XInputEnable")) && - (pXInputGetState = (_XInputGetState) GetProcAddress(hMod, "XInputGetState"))) { - pXInputSetState = (_XInputSetState) GetProcAddress(hMod, "XInputSetState"); - } - } - if (!pXInputSetState) { - pXInputEnable = (_XInputEnable)-1; - return; - } - } - pXInputEnable(1); - for (i=0; i<4; i++) { - wsprintfW(temp, L"XInput Pad %i", i); - dm->AddDevice(new XInputDevice(i, temp)); - } - pXInputEnable(0); -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/XInputEnum.cpp pcsx2-1.4.0/plugins/LilyPad/XInputEnum.cpp --- pcsx2-1.3.1+dfsg/plugins/LilyPad/XInputEnum.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/XInputEnum.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,221 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +#include "Global.h" +#include +#include "VKey.h" +#include "InputManager.h" +#include "XInputEnum.h" + +// This way, I don't require that XInput junk be installed. +typedef void (CALLBACK *_XInputEnable)(BOOL enable); +typedef DWORD (CALLBACK *_XInputGetState)(DWORD dwUserIndex, XINPUT_STATE* pState); +typedef DWORD (CALLBACK *_XInputSetState)(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration); + +_XInputEnable pXInputEnable = 0; +_XInputGetState pXInputGetState = 0; +_XInputSetState pXInputSetState = 0; + +static int xInputActiveCount = 0; + +// Completely unncessary, really. +__forceinline int ShortToAxis(int v) { + // If positive and at least 1 << 14, increment. + v += (!((v>>15)&1)) & ((v>>14)&1); + // Just double. + return v * 2; +} + +class XInputDevice : public Device { + // Cached last vibration values by pad and motor. + // Need this, as only one value is changed at a time. + int ps2Vibration[2][4][2]; + // Minor optimization - cache last set vibration values + // When there's no change, no need to do anything. + XINPUT_VIBRATION xInputVibration; +public: + int index; + + XInputDevice(int index, wchar_t *displayName) : Device(XINPUT, OTHER, displayName) { + memset(ps2Vibration, 0, sizeof(ps2Vibration)); + memset(&xInputVibration, 0, sizeof(xInputVibration)); + this->index = index; + int i; + for (i=0; i<14; i++) { + // The i > 9 accounts for the 2 bit skip in button flags. + AddPhysicalControl(PSHBTN, i + 2*(i > 9), 0); + } + for (i=14; i<16; i++) { + // The i > 9 accounts for the 2 bit skip in button flags. + AddPhysicalControl(PRESSURE_BTN, i + 2*(i > 9), 0); + } + for (; i<20; i++) { + AddPhysicalControl(ABSAXIS, i + 2, 0); + } + AddFFAxis(L"Slow Motor", 0); + AddFFAxis(L"Fast Motor", 1); + AddFFEffectType(L"Constant Effect", L"Constant", EFFECT_CONSTANT); + } + + wchar_t *GetPhysicalControlName(PhysicalControl *c) { + const static wchar_t *names[] = { + L"D-pad Up", + L"D-pad Down", + L"D-pad Left", + L"D-pad Right", + L"Start", + L"Back", + L"Left Thumb", + L"Right Thumb", + L"Left Shoulder", + L"Right Shoulder", + L"A", + L"B", + L"X", + L"Y", + L"Left Trigger", + L"Right Trigger", + L"Left Thumb X", + L"Left Thumb Y", + L"Right Thumb X", + L"Right Thumb Y", + }; + unsigned int i = (unsigned int) (c - physicalControls); + if (i < 20) { + return (wchar_t*)names[i]; + } + return Device::GetPhysicalControlName(c); + } + + int Activate(InitInfo *initInfo) { + if (active) Deactivate(); + if (!xInputActiveCount) { + pXInputEnable(1); + } + xInputActiveCount++; + active = 1; + AllocState(); + return 1; + } + + int Update() { + if (!active) return 0; + XINPUT_STATE state; + if (ERROR_SUCCESS != pXInputGetState(index, &state)) { + Deactivate(); + return 0; + } + int buttons = state.Gamepad.wButtons; + for (int i=0; i<14; i++) { + physicalControlState[i] = ((buttons >> physicalControls[i].id)&1)<<16; + } + physicalControlState[14] = (((int)state.Gamepad.bLeftTrigger) + (state.Gamepad.bLeftTrigger>>7)) << 8; + physicalControlState[15] = (((int)state.Gamepad.bRightTrigger) + (state.Gamepad.bRightTrigger>>7)) << 8; + physicalControlState[16] = ShortToAxis(state.Gamepad.sThumbLX); + physicalControlState[17] = ShortToAxis(state.Gamepad.sThumbLY); + physicalControlState[18] = ShortToAxis(state.Gamepad.sThumbRX); + physicalControlState[19] = ShortToAxis(state.Gamepad.sThumbRY); + return 1; + } + + void SetEffects(unsigned char port, unsigned int slot, unsigned char motor, unsigned char force) { + ps2Vibration[port][slot][motor] = force; + int newVibration[2] = {0,0}; + for (int p=0; p<2; p++) { + for (int s=0; s<4; s++) { + for (int i=0; iaxes[0].force * (__int64)ps2Vibration[p][s][ffb->motor]) / 255); + newVibration[1] += (int)((ffb->axes[1].force * (__int64)ps2Vibration[p][s][ffb->motor]) / 255); + } + } + } + newVibration[0] = abs(newVibration[0]); + if (newVibration[0] > 65535) { + newVibration[0] = 65535; + } + newVibration[1] = abs(newVibration[1]); + if (newVibration[1] > 65535) { + newVibration[1] = 65535; + } + if (newVibration[0] || newVibration[1] || newVibration[0] != xInputVibration.wLeftMotorSpeed || newVibration[1] != xInputVibration.wRightMotorSpeed) { + XINPUT_VIBRATION newv = {newVibration[0], newVibration[1]}; + if (ERROR_SUCCESS == pXInputSetState(index, &newv)) { + xInputVibration = newv; + } + } + } + + void SetEffect(ForceFeedbackBinding *binding, unsigned char force) { + PadBindings pBackup = pads[0][0]; + pads[0][0].ffBindings = binding; + pads[0][0].numFFBindings = 1; + SetEffects(0, 0, binding->motor, 255); + pads[0][0] = pBackup; + } + + void Deactivate() { + memset(&xInputVibration, 0, sizeof(xInputVibration)); + memset(ps2Vibration, 0, sizeof(ps2Vibration)); + pXInputSetState(index, &xInputVibration); + + FreeState(); + if (active) { + if (!--xInputActiveCount) { + pXInputEnable(0); + } + active = 0; + } + } + + ~XInputDevice() { + } +}; + +void EnumXInputDevices() { + int i; + wchar_t temp[30]; + if (!pXInputSetState) { + // Also used as flag to indicute XInput not installed, so + // don't repeatedly try to load it. + if (pXInputEnable) return; + + HMODULE hMod = 0; + for (i=3; i>= 0; i--) { + wsprintfW(temp, L"xinput1_%i.dll", i); + if (hMod = LoadLibraryW(temp)) break; + } + if (hMod) { + if ((pXInputEnable = (_XInputEnable) GetProcAddress(hMod, "XInputEnable")) && + (pXInputGetState = (_XInputGetState) GetProcAddress(hMod, "XInputGetState"))) { + pXInputSetState = (_XInputSetState) GetProcAddress(hMod, "XInputSetState"); + } + } + if (!pXInputSetState) { + pXInputEnable = (_XInputEnable)-1; + return; + } + } + pXInputEnable(1); + for (i=0; i<4; i++) { + wsprintfW(temp, L"XInput Pad %i", i); + dm->AddDevice(new XInputDevice(i, temp)); + } + pXInputEnable(0); +} + diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/XInputEnum.h pcsx2-1.4.0/plugins/LilyPad/XInputEnum.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/XInputEnum.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/XInputEnum.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,18 @@ +/* LilyPad - Pad plugin for PS2 Emulator + * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver + * + * PCSX2 is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Found- ation, either version 3 of the License, or (at your option) + * any later version. + * + * PCSX2 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 PCSX2. If not, see . + */ + +void EnumXInputDevices(); diff -Nru pcsx2-1.3.1+dfsg/plugins/LilyPad/XInput.h pcsx2-1.4.0/plugins/LilyPad/XInput.h --- pcsx2-1.3.1+dfsg/plugins/LilyPad/XInput.h 2014-04-12 10:44:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/LilyPad/XInput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -/* LilyPad - Pad plugin for PS2 Emulator - * Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver - * - * PCSX2 is free software: you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Found- ation, either version 3 of the License, or (at your option) - * any later version. - * - * PCSX2 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 PCSX2. If not, see . - */ - -void EnumXInputDevices(); diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/CMakeLists.txt pcsx2-1.4.0/plugins/onepad/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/onepad/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,37 +8,25 @@ # plugin name set(Output onepad-1.1.0) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(onepadFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(onepadFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(onepadFinalFlags ${OptimizationFlags}) - -endif() +set(onepadFinalFlags "") # onepad sources set(onepadSources controller.cpp - joystick.cpp + GamePad.cpp + SDL/joystick.cpp keyboard.cpp - KeyStatus.cpp + KeyStatus.cpp onepad.cpp) # onepad headers set(onepadHeaders bitwise.h controller.h - joystick.h + GamePad.h + SDL/joystick.h keyboard.h - KeyStatus.h + KeyStatus.h onepad.h) # onepad Linux sources @@ -63,10 +51,12 @@ set(onepadFinalLibs ${SDL2_LIBRARIES} ) + add_definitions(-DSDL_BUILD) else() set(onepadFinalLibs ${SDL_LIBRARY} ) + add_definitions(-DSDL_BUILD) endif() set(onepadFinalLibs diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/controller.h pcsx2-1.4.0/plugins/onepad/controller.h --- pcsx2-1.3.1+dfsg/plugins/onepad/controller.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/controller.h 2016-01-05 17:28:08.000000000 +0000 @@ -19,9 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __CONTROLLER_H__ -#define __CONTROLLER_H__ - +#pragma once +#include // for memset #ifdef __linux__ #define MAX_KEYS 24 #else @@ -55,23 +54,38 @@ extern int PadEnum[2][2]; -struct PADconf +class PADconf { + u32 ff_intensity; + u32 sensibility; public: + union { + struct { + u16 forcefeedback :1; + u16 reverse_lx :1; + u16 reverse_ly :1; + u16 reverse_rx :1; + u16 reverse_ry :1; + u16 mouse_l :1; + u16 mouse_r :1; + u16 sixaxis_usb :1; + u16 sixaxis_pressure :1; + u16 _free : 7; // The 8 remaining bits are unused, do what you wish with them ;) + } pad_options[2]; // One for each pads + u32 packed_options; // Only first 8 bits of each 16 bits series are really used, rest is padding + }; + u32 keys[2][MAX_KEYS]; u32 log; - u32 options; // upper 16 bits are for pad2 - u32 sensibility; u32 joyid_map; - u32 ff_intensity; map keysym_map[2]; PADconf() { init(); } void init() { memset(&keys, 0, sizeof(keys)); - log = options = joyid_map = 0; - ff_intensity = 100; + log = packed_options = joyid_map = 0; + ff_intensity = 0x7FFF; // set it at max value by default sensibility = 500; for (int pad = 0; pad < 2 ; pad++) keysym_map[pad].clear(); @@ -87,6 +101,43 @@ int shift = 8 * pad; return ((joyid_map >> shift) & 0xFF); } + + /** + * Return (a copy of) private memner ff_instensity + **/ + u32 get_ff_intensity() + { + return ff_intensity; + } + + /** + * Set intensity while checking that the new value is within + * valid range, more than 0x7FFF will cause pad not to rumble(and less than 0 is obviously bad) + **/ + void set_ff_intensity(u32 new_intensity) + { + if(new_intensity < 0x7FFF && new_intensity >= 0) + { + ff_intensity = new_intensity; + } + } + + /** + * Set sensibility value, sensibility is not yet implemented(and will probably be after evdev) + * However, there will be an upper range too, less than 0 is an obvious wrong + * Anyway, we are doing object oriented code, members are definitely not supposed to be public + **/ + void set_sensibility(u32 new_sensibility) + { + if(sensibility > 0) + { + sensibility = new_sensibility; + } + } + + u32 get_sensibility() + { + return sensibility; + } }; extern PADconf *conf; -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/GamePad.cpp pcsx2-1.4.0/plugins/onepad/GamePad.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/GamePad.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/GamePad.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,57 @@ +#include "GamePad.h" +#ifdef SDL_BUILD +#include "SDL/joystick.h" +#endif + +vector s_vgamePad; +bool GamePadIdWithinBounds(int GamePadId) +{ + return ((GamePadId >= 0) && (GamePadId < (int)s_vgamePad.size())); +} + +/** + * Following static methods are just forwarders to their backend + * This is where link between agnostic and specific code is done + **/ + +/** + * Find every interesting devices and create right structure for them(depend on backend) + **/ +void GamePad::EnumerateGamePads(vector& vgamePad) +{ +#ifdef SDL_BUILD + JoystickInfo::EnumerateJoysticks(vgamePad); +#endif +} + +void GamePad::UpdateReleaseState() +{ +#ifdef SDL_BUILD + JoystickInfo::UpdateReleaseState(); +#endif +} + +/** + * Safely dispatch to the Rumble method above + **/ +void GamePad::DoRumble(int type, int pad) +{ + u32 id = conf->get_joyid(pad); + if (GamePadIdWithinBounds(id)) { + GamePad* gamePad = s_vgamePad[id]; + if (gamePad) + gamePad->Rumble(type, pad); + } +} + +/** + * Update state of every attached devices + **/ +void GamePad::UpdateGamePadState() +{ +#ifdef SDL_BUILD + SDL_JoystickUpdate(); // No need to make yet another function call for that +#endif +} + + diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/GamePad.h pcsx2-1.4.0/plugins/onepad/GamePad.h --- pcsx2-1.3.1+dfsg/plugins/onepad/GamePad.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/GamePad.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,143 @@ +#pragma once + +#include "onepad.h" +#include "controller.h" +#ifdef SDL_BUILD +#include +#define HAT_UP SDL_HAT_UP +#define HAT_DOWN SDL_HAT_DOWN +#define HAT_RIGHT SDL_HAT_RIGHT +#define HAT_LEFT SDL_HAT_LEFT +#endif + +class GamePad +{ + public: + GamePad() : devname(""), _id(-1), numbuttons(0), numaxes(0), numhats(0), + deadzone(1500), pad(-1) { + vbuttonstate.clear(); + vaxisstate.clear(); + vhatstate.clear(); + } + + virtual ~GamePad() + { + return; + } + + GamePad(const GamePad&); // copy constructor + GamePad& operator=(const GamePad&); // assignment + + /** + * Find every interesting devices and create right structure for them(depend on backend) + **/ + static void EnumerateGamePads(vector& vgamePad); + static void UpdateReleaseState(); + /** + * Update state of every attached devices + **/ + static void UpdateGamePadState(); + + /** + * Causes devices to rumble + * Rumble will differ according to type which is either 0(small motor) or 1(big motor) + **/ + virtual void Rumble(int type,int pad){return;} + /** + * Safely dispatch to the Rumble method above + **/ + static void DoRumble(int type, int pad); + + virtual bool Init(int id){return false;} // opens a handle and gets information + + /** + * Used for GUI checkbox to give feedback to the user + **/ + virtual void TestForce(){return;} + + virtual bool PollButtons(u32 &pkey){return false;} + virtual bool PollAxes(u32 &pkey){return false;} + virtual bool PollHats(u32 &pkey){return false;} + + virtual int GetHat(int key_to_axis) + { + return 0; + } + + virtual int GetButton(int key_to_button) + { + return 0; + } + + virtual const string& GetName() + { + return devname; + } + + virtual int GetNumButtons() + { + return numbuttons; + } + + virtual int GetNumAxes() + { + return numaxes; + } + + virtual int GetNumHats() + { + return numhats; + } + + virtual int GetDeadzone() + { + return deadzone; + } + + virtual void SaveState(){return;} + + virtual int GetButtonState(int i) + { + return vbuttonstate[i]; + } + + virtual int GetAxisState(int i) + { + return vaxisstate[i]; + } + + virtual int GetHatState(int i) + { + //PAD_LOG("Getting POV State of %d.\n", i); + return vhatstate[i]; + } + + virtual void SetButtonState(int i, int state) + { + vbuttonstate[i] = state; + } + + virtual void SetAxisState(int i, int value) + { + vaxisstate[i] = value; + } + + virtual void SetHatState(int i, int value) + { + //PAD_LOG("We should set %d to %d.\n", i, value); + vhatstate[i] = value; + } + + virtual int GetAxisFromKey(int pad, int index){return 0;} +// These fields need to be inherited by child classes + protected: + string devname; // pretty device name + int _id; + int numbuttons, numaxes, numhats; + int deadzone; + int pad; + vector vbuttonstate, vaxisstate, vhatstate; +}; + +extern vector s_vgamePad; +extern bool GamePadIdWithinBounds(int joyid); diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/joystick.cpp pcsx2-1.4.0/plugins/onepad/joystick.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/joystick.cpp 2013-11-01 21:05:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/joystick.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,366 +0,0 @@ -/* OnePAD - author: arcum42(@gmail.com) - * Copyright (C) 2009 - * - * Based on ZeroPAD, author zerofrog@gmail.com - * Copyright (C) 2006-2007 - * - * 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 - */ - -#include "joystick.h" - -////////////////////////// -// Joystick definitions // -////////////////////////// - -vector s_vjoysticks; -static u32 s_bSDLInit = false; - -void JoystickInfo::UpdateReleaseState() -{ - vector::iterator itjoy = s_vjoysticks.begin(); - - SDL_JoystickUpdate(); - - // Save everything in the vector s_vjoysticks. - while (itjoy != s_vjoysticks.end()) - { - (*itjoy)->SaveState(); - itjoy++; - } -} - -bool JoystickIdWithinBounds(int joyid) -{ - return ((joyid >= 0) && (joyid < (int)s_vjoysticks.size())); -} - -// opens handles to all possible joysticks -void JoystickInfo::EnumerateJoysticks(vector& vjoysticks) -{ - - if (!s_bSDLInit) - { -#if SDL_MAJOR_VERSION >= 2 - // Tell SDL to catch event even if the windows isn't focussed - SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); - // SDL in 3rdparty wrap X11 call. In order to get x11 symbols loaded - // video must be loaded too. - // Example of X11 symbol are XAutoRepeatOn/XAutoRepeatOff - if (SDL_Init(SDL_INIT_JOYSTICK|SDL_INIT_VIDEO|SDL_INIT_HAPTIC|SDL_INIT_GAMECONTROLLER|SDL_INIT_EVENTS) < 0) return; -#else - if (SDL_Init(SDL_INIT_JOYSTICK) < 0) return; -#endif - SDL_JoystickEventState(SDL_QUERY); - s_bSDLInit = true; - } - - vector::iterator it = vjoysticks.begin(); - - // Delete everything in the vector vjoysticks. - while (it != vjoysticks.end()) - { - delete *it; - it ++; - } - - vjoysticks.resize(SDL_NumJoysticks()); - - for (int i = 0; i < (int)vjoysticks.size(); ++i) - { - vjoysticks[i] = new JoystickInfo(); - vjoysticks[i]->Init(i); - } -} - -void JoystickInfo::InitHapticEffect() -{ -#if SDL_MAJOR_VERSION >= 2 - if (haptic == NULL) return; - -#if 0 - additional field of the effect - /* Trigger */ - Uint16 button; /**< Button that triggers the effect. */ - Uint16 interval; /**< How soon it can be triggered again after button. */ - - // periodic parameter - Sint16 offset; /**< Mean value of the wave. */ - Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ -#endif - - /*******************************************************************/ - /* Effect big & small */ - /*******************************************************************/ - for (int new_effect = 0; new_effect < 2 ; new_effect++) { - - // Direction of the effect SDL_HapticDirection - haptic_effect_data[new_effect].periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates - haptic_effect_data[new_effect].periodic.direction.dir[0] = 18000; // Force comes from south - - // periodic parameter - haptic_effect_data[new_effect].periodic.period = 20; // 20 ms - haptic_effect_data[new_effect].periodic.magnitude = 2000; // 2000/32767 strength - - // Replay - haptic_effect_data[new_effect].periodic.length = 60; // 60 ms long - haptic_effect_data[new_effect].periodic.delay = 0; // start 0 second after the upload - - // enveloppe - haptic_effect_data[new_effect].periodic.attack_length = 5;// Takes 5 ms to get max strength - haptic_effect_data[new_effect].periodic.attack_level = 0; // start at 0 - haptic_effect_data[new_effect].periodic.fade_length = 5; // Takes 5 ms to fade away - haptic_effect_data[new_effect].periodic.fade_level = 0; // finish at 0 - } - - /*******************************************************************/ - /* Effect small */ - /*******************************************************************/ - haptic_effect_data[0].type = SDL_HAPTIC_LEFTRIGHT; - - /*******************************************************************/ - /* Effect big */ - /*******************************************************************/ - haptic_effect_data[1].type = SDL_HAPTIC_TRIANGLE; - - /*******************************************************************/ - /* Upload effect to the device */ - /*******************************************************************/ - for (int i = 0 ; i < 2 ; i++) - haptic_effect_id[i] = SDL_HapticNewEffect(haptic, &haptic_effect_data[i]); -#endif -} - -void JoystickInfo::DoHapticEffect(int type, int pad, int force) -{ - if (type > 1) return; - if ( !(conf->options & (PADOPTION_FORCEFEEDBACK << 16 * pad)) ) return; - -#if SDL_MAJOR_VERSION >= 2 - int joyid = conf->get_joyid(pad); - if (!JoystickIdWithinBounds(joyid)) return; - JoystickInfo* pjoy = s_vjoysticks[joyid]; - - if (pjoy->haptic == NULL) return; - if (pjoy->haptic_effect_id[type] < 0) return; - - // FIXME: might need to multiply force - pjoy->haptic_effect_data[type].periodic.magnitude = force * conf->ff_intensity ; // force/32767 strength - // Upload the new effect - SDL_HapticUpdateEffect(pjoy->haptic, pjoy->haptic_effect_id[type], &pjoy->haptic_effect_data[type]); - - // run the effect once - SDL_HapticRunEffect( pjoy->haptic, pjoy->haptic_effect_id[type], 1 ); -#endif -} - -void JoystickInfo::Destroy() -{ - if (joy != NULL) - { -#if SDL_MAJOR_VERSION >= 2 - // Haptic must be closed before the joystick - if (haptic != NULL) { - SDL_HapticClose(haptic); - haptic = NULL; - } -#endif - -#if SDL_MAJOR_VERSION >= 2 - if (joy) SDL_JoystickClose(joy); -#else - if (SDL_JoystickOpened(_id)) SDL_JoystickClose(joy); -#endif - joy = NULL; - } -} - -bool JoystickInfo::Init(int id) -{ - Destroy(); - _id = id; - - joy = SDL_JoystickOpen(id); - if (joy == NULL) - { - PAD_LOG("failed to open joystick %d\n", id); - return false; - } - - numaxes = SDL_JoystickNumAxes(joy); - numbuttons = SDL_JoystickNumButtons(joy); - numhats = SDL_JoystickNumHats(joy); -#if SDL_MAJOR_VERSION >= 2 - devname = SDL_JoystickName(joy); -#else - devname = SDL_JoystickName(id); -#endif - - vaxisstate.resize(numaxes); - vbuttonstate.resize(numbuttons); - vhatstate.resize(numhats); - - // Sixaxis, dualshock3 hack - // Most buttons are actually axes due to analog pressure support. Only the first 4 buttons - // are digital (select, start, l3, r3). To avoid conflict just forget the others. - // Keep the 4 hat buttons too (usb driver). (left pressure does not work with recent kernel). Moreover the pressure - // work sometime on half axis neg others time in fulll axis. So better keep them as button for the moment - u32 found_hack = devname.find(string("PLAYSTATION(R)3")); - if (found_hack != string::npos) { - numbuttons = 4; - // Enable this hack is bluetooth too. It avoid to restart the onepad gui - numbuttons += 4; - } - -#if SDL_MAJOR_VERSION >= 2 - if ( haptic == NULL ) { - if (!SDL_JoystickIsHaptic(joy)) { - PAD_LOG("Haptic devices not supported!\n"); - } else { - haptic = SDL_HapticOpenFromJoystick(joy); - // upload some default effect - InitHapticEffect(); - } - } -#endif - - //PAD_LOG("There are %d buttons, %d axises, and %d hats.\n", numbuttons, numaxes, numhats); - return true; -} - -void JoystickInfo::SaveState() -{ - for (int i = 0; i < numbuttons; ++i) - SetButtonState(i, SDL_JoystickGetButton(joy, i)); - for (int i = 0; i < numaxes; ++i) - SetAxisState(i, SDL_JoystickGetAxis(joy, i)); - for (int i = 0; i < numhats; ++i) - SetHatState(i, SDL_JoystickGetHat(joy, i)); -} - -void JoystickInfo::TestForce() -{ -} - -bool JoystickInfo::PollButtons(u32 &pkey) -{ - // MAKE sure to look for changes in the state!! - for (int i = 0; i < GetNumButtons(); ++i) - { - int but = SDL_JoystickGetButton(GetJoy(), i); - if (but != GetButtonState(i)) - { - // Pressure sensitive button are detected as both button (digital) and axes (analog). So better - // drop the button to emulate the pressure sensiblity of the ds2 :) - // Trick: detect the release of the button. It avoid all races condition between axes and buttons :) - // If the button support pressure it will be detected as an axis when it is pressed. - if (but) { - SetButtonState(i, but); - return false; - } - - - pkey = button_to_key(i); - return true; - } - } - - return false; -} - -bool JoystickInfo::PollAxes(u32 &pkey) -{ - for (int i = 0; i < GetNumAxes(); ++i) - { - // Sixaxis, dualshock3 hack - u32 found_hack = devname.find(string("PLAYSTATION(R)3")); - if (found_hack != string::npos) { - // The analog mode of the hat button is quite erratic. Values can be in half- axis - // or full axis... So better keep them as button for the moment -- gregory - if (i >= 8 && i <= 11 && (conf->options & PADOPTION_SIXAXIS_USB)) - continue; - // Disable accelerometer - if ((i >= 4 && i <= 6)) - continue; - } - - s32 value = SDL_JoystickGetAxis(GetJoy(), i); - s32 old_value = GetAxisState(i); - - if (abs(value - old_value) < 0x1000) - continue; - - if (value != old_value) - { - PAD_LOG("Change in joystick %d: %d.\n", i, value); - // There are several kinds of axes - // Half+: 0 (release) -> 32768 - // Half-: 0 (release) -> -32768 - // Full (like dualshock 3): -32768 (release) ->32768 - const s32 full_axis_ceil = -0x6FFF; - const s32 half_axis_ceil = 0x1FFF; - - // Normally, old_value contains the release state so it can be used to detect the types of axis. - bool is_full_axis = (old_value < full_axis_ceil) ? true : false; - - if ((!is_full_axis && abs(value) <= half_axis_ceil) - || (is_full_axis && value <= full_axis_ceil)) // we don't want this - { - continue; - } - - if ((!is_full_axis && abs(value) > half_axis_ceil) - || (is_full_axis && value > full_axis_ceil)) - { - bool sign = (value < 0); - pkey = axis_to_key(is_full_axis, sign, i); - - return true; - } - } - } - - return false; -} - -bool JoystickInfo::PollHats(u32 &pkey) -{ - for (int i = 0; i < GetNumHats(); ++i) - { - int value = SDL_JoystickGetHat(GetJoy(), i); - - if ((value != GetHatState(i)) && (value != SDL_HAT_CENTERED)) - { - switch (value) - { - case SDL_HAT_UP: - case SDL_HAT_RIGHT: - case SDL_HAT_DOWN: - case SDL_HAT_LEFT: - pkey = hat_to_key(value, i); - PAD_LOG("Hat Pressed!"); - return true; - default: - break; - } - } - } - return false; -} - -int JoystickInfo::GetAxisFromKey(int pad, int index) -{ - return SDL_JoystickGetAxis(GetJoy(), key_to_axis(pad, index)); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/joystick.h pcsx2-1.4.0/plugins/onepad/joystick.h --- pcsx2-1.3.1+dfsg/plugins/onepad/joystick.h 2014-12-07 20:06:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/joystick.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,167 +0,0 @@ -/* OnePAD - author: arcum42(@gmail.com) - * Copyright (C) 2009 - * - * Based on ZeroPAD, author zerofrog@gmail.com - * Copyright (C) 2006-2007 - * - * 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 - */ - -#ifndef __JOYSTICK_H__ -#define __JOYSTICK_H__ - -#include -#if SDL_MAJOR_VERSION >= 2 -#include -#endif - - -#include "onepad.h" -#include "controller.h" - -// holds all joystick info -class JoystickInfo -{ - public: - JoystickInfo() : devname(""), _id(-1), numbuttons(0), numaxes(0), numhats(0), - deadzone(1500), pad(-1), joy(NULL) { - vbuttonstate.clear(); - vaxisstate.clear(); - vhatstate.clear(); -#if SDL_MAJOR_VERSION >= 2 - haptic = NULL; - for (int i = 0 ; i < 2 ; i++) - haptic_effect_id[i] = -1; -#endif - } - - ~JoystickInfo() - { - Destroy(); - } - - JoystickInfo(const JoystickInfo&); // copy constructor - JoystickInfo& operator=(const JoystickInfo&); // assignment - - void Destroy(); - // opens handles to all possible joysticks - static void EnumerateJoysticks(vector& vjoysticks); - - void InitHapticEffect(); - static void DoHapticEffect(int type, int pad, int force); - - bool Init(int id); // opens a handle and gets information - - void TestForce(); - - bool PollButtons(u32 &pkey); - bool PollAxes(u32 &pkey); - bool PollHats(u32 &pkey); - - const string& GetName() - { - return devname; - } - - int GetNumButtons() - { - return numbuttons; - } - - int GetNumAxes() - { - return numaxes; - } - - int GetNumHats() - { - return numhats; - } - - int GetPAD() - { - return pad; - } - - int GetDeadzone() - { - return deadzone; - } - - void SaveState(); - - int GetButtonState(int i) - { - return vbuttonstate[i]; - } - - int GetAxisState(int i) - { - return vaxisstate[i]; - } - - int GetHatState(int i) - { - //PAD_LOG("Getting POV State of %d.\n", i); - return vhatstate[i]; - } - - void SetButtonState(int i, int state) - { - vbuttonstate[i] = state; - } - - void SetAxisState(int i, int value) - { - vaxisstate[i] = value; - } - - void SetHatState(int i, int value) - { - //PAD_LOG("We should set %d to %d.\n", i, value); - vhatstate[i] = value; - } - - SDL_Joystick* GetJoy() - { - return joy; - } - - int GetAxisFromKey(int pad, int index); - - static void UpdateReleaseState(); - - private: - string devname; // pretty device name - int _id; - int numbuttons, numaxes, numhats; - int deadzone; - int pad; - - vector vbuttonstate, vaxisstate, vhatstate; - - SDL_Joystick* joy; -#if SDL_MAJOR_VERSION >= 2 - SDL_Haptic* haptic; - SDL_HapticEffect haptic_effect_data[2]; - int haptic_effect_id[2]; -#endif -}; - - -extern int s_selectedpad; -extern vector s_vjoysticks; -extern bool JoystickIdWithinBounds(int joyid); -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/keyboard.cpp pcsx2-1.4.0/plugins/onepad/keyboard.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/keyboard.cpp 2014-12-16 21:24:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/keyboard.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -120,11 +120,12 @@ break; case FocusIn: - XAutoRepeatOff(GSdsp); + //XAutoRepeatOff(GSdsp); break; case FocusOut: - XAutoRepeatOn(GSdsp); + //XAutoRepeatOn(GSdsp); + s_Shift = false; break; case ButtonPress: @@ -142,11 +143,11 @@ // 1/ small move == no move. Cons : can not do small movement // 2/ use a watchdog timer thread // 3/ ??? idea welcome ;) - if (conf->options & ((PADOPTION_MOUSE_L|PADOPTION_MOUSE_R) << 16 * pad )) { + if (conf->pad_options[pad].mouse_l|conf->pad_options[pad].mouse_r) { unsigned int pad_x; unsigned int pad_y; // Note when both PADOPTION_MOUSE_R and PADOPTION_MOUSE_L are set, take only the right one - if (conf->options & (PADOPTION_MOUSE_R << 16 * pad)) { + if (conf->pad_options[pad].mouse_r) { pad_x = PAD_R_RIGHT; pad_y = PAD_R_UP; } else { @@ -156,7 +157,7 @@ unsigned x = evt.key & 0xFFFF; unsigned int value = (s_previous_mouse_x > x) ? s_previous_mouse_x - x : x - s_previous_mouse_x; - value *= conf->sensibility; + value *= conf->get_sensibility(); if (x == 0) key_status->press(pad, pad_x, -MAX_ANALOG_VALUE); @@ -172,7 +173,7 @@ unsigned y = evt.key >> 16; value = (s_previous_mouse_y > y) ? s_previous_mouse_y - y : y - s_previous_mouse_y; - value *= conf->sensibility; + value *= conf->get_sensibility(); if (y == 0) key_status->press(pad, pad_y, -MAX_ANALOG_VALUE); diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/KeyStatus.cpp pcsx2-1.4.0/plugins/onepad/KeyStatus.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/KeyStatus.cpp 2011-06-28 22:16:06.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/KeyStatus.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -69,7 +69,7 @@ // Normal mode : expect value 0 -> 80 -> FF // Reverse mode: expect value FF -> 7F -> 0 u8 force = (value / 256); - if (analog_is_reversed(index)) analog_set(pad, index, 0x7F - force); + if (analog_is_reversed(pad,index)) analog_set(pad, index, 0x7F - force); else analog_set(pad, index, 0x80 + force); } } @@ -117,25 +117,25 @@ } } -bool KeyStatus::analog_is_reversed(u32 index) +bool KeyStatus::analog_is_reversed(u32 pad, u32 index) { switch (index) { case PAD_L_RIGHT: case PAD_L_LEFT: - return ((conf->options & PADOPTION_REVERSELX) != 0); + return (conf->pad_options[pad].reverse_lx); case PAD_R_LEFT: case PAD_R_RIGHT: - return ((conf->options & PADOPTION_REVERSERX) != 0); + return (conf->pad_options[pad].reverse_rx); case PAD_L_UP: case PAD_L_DOWN: - return ((conf->options & PADOPTION_REVERSELY) != 0); + return (conf->pad_options[pad].reverse_ly); case PAD_R_DOWN: case PAD_R_UP: - return ((conf->options & PADOPTION_REVERSERY) != 0); + return (conf->pad_options[pad].reverse_ry); default: return false; } diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/KeyStatus.h pcsx2-1.4.0/plugins/onepad/KeyStatus.h --- pcsx2-1.3.1+dfsg/plugins/onepad/KeyStatus.h 2011-06-28 22:16:06.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/KeyStatus.h 2016-01-05 17:28:08.000000000 +0000 @@ -49,7 +49,7 @@ PADAnalog m_internal_analog_joy[2]; void analog_set(u32 pad, u32 index, u8 value); - bool analog_is_reversed(u32 index); + bool analog_is_reversed(u32 pad, u32 index); u8 analog_merge(u8 kbd, u8 joy); public: diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/Linux/dialog.cpp pcsx2-1.4.0/plugins/onepad/Linux/dialog.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/Linux/dialog.cpp 2014-12-08 19:38:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/Linux/dialog.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "joystick.h" +#include "GamePad.h" #include "keyboard.h" #include "onepad.h" #include @@ -243,14 +243,14 @@ void populate_new_joysticks(GtkComboBoxText *box) { char str[255]; - JoystickInfo::EnumerateJoysticks(s_vjoysticks); + GamePad::EnumerateGamePads(s_vgamePad); gtk_combo_box_text_append_text(box, "Keyboard/mouse only"); - vector::iterator it = s_vjoysticks.begin(); + vector::iterator it = s_vgamePad.begin(); // Get everything in the vector vjoysticks. - while (it != s_vjoysticks.end()) + while (it != s_vgamePad.end()) { sprintf(str, "Keyboard/mouse and %s - but: %d, axes: %d, hats: %d", (*it)->GetName().c_str(), (*it)->GetNumButtons(), (*it)->GetNumAxes(), (*it)->GetNumHats()); @@ -262,7 +262,7 @@ void set_current_joy() { u32 joyid = conf->get_joyid(current_pad); - if (JoystickIdWithinBounds(joyid)) + if (GamePadIdWithinBounds(joyid)) // 0 is special case for no gamepad. So you must increase of 1. gtk_combo_box_set_active(GTK_COMBO_BOX(joy_choose_cbox), joyid+1); else @@ -294,7 +294,7 @@ mask = mask_value; gtk_fixed_put(GTK_FIXED(area), widget, x, y); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), mask & conf->options); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), mask & conf->packed_options); g_signal_connect(widget, "toggled", G_CALLBACK(on_toggle_option), this); } } dialog_checkbox; @@ -305,10 +305,10 @@ u32 key_pressed = 0; // I don't have any guarantee that not-yet-pressed state is egual to released state - JoystickInfo::UpdateReleaseState(); + GamePad::UpdateReleaseState(); while (!captured) { - vector::iterator itjoy; + vector::iterator itjoy; if (PollX11KeyboardMouseEvent(key_pressed)) { @@ -321,10 +321,10 @@ break; } - SDL_JoystickUpdate(); + GamePad::UpdateGamePadState(); - itjoy = s_vjoysticks.begin(); - while ((itjoy != s_vjoysticks.end()) && (!captured)) + itjoy = s_vgamePad.begin(); + while ((itjoy != s_vgamePad.end()) && (!captured)) { if ((*itjoy)->PollButtons(key_pressed)) { set_key(pad, key, key_pressed); @@ -393,9 +393,13 @@ dialog_checkbox *checkbox = (dialog_checkbox*)user_data; if (gtk_toggle_button_get_active(togglebutton)) - conf->options |= checkbox->mask; + { + conf->packed_options |= checkbox->mask; + if(checkbox->mask == PADOPTION_FORCEFEEDBACK && (conf->get_joyid(current_pad)< s_vgamePad.size())) + s_vgamePad[conf->get_joyid(current_pad)]->TestForce(); + } else - conf->options &= ~checkbox->mask; + conf->packed_options &= ~checkbox->mask; } void joy_changed(GtkComboBoxText *box, gpointer user_data) @@ -427,23 +431,6 @@ set_current_joy(); } -//void on_forcefeedback_toggled(GtkToggleButton *togglebutton, gpointer user_data) -//{ -// int mask = PADOPTION_REVERSELX << (16 * s_selectedpad); -// -// if (gtk_toggle_button_get_active(togglebutton)) -// { -// conf->options |= mask; -// -// u32 joyid = conf->get_joyid(current_pad); -// if (JoystickIdWithinBounds(joyid)) s_vjoysticks[joyid]->TestForce(); -// } -// else -// { -// conf->options &= ~mask; -// } -//} - struct button_positions { const char* label; @@ -488,7 +475,7 @@ }; // Warning position is important and must match the order of the PadOptions structure -#define CHECK_NBR 8 +#define CHECK_NBR 9 button_positions check_pos[CHECK_NBR] = { { "Enable force feedback", 40, 400}, @@ -498,7 +485,8 @@ { "Reverse Ry", 368, 328}, { "Use mouse for left analog joy", 40, 352}, { "Use mouse for right analog joy", 368, 352}, - { "Hack: Sixaxis/DS3 plugged in USB", 368, 400} + { "Hack: Sixaxis/DS3 plugged in USB", 368, 400}, + { "Hack: Sixaxis/DS3 pressure", 368, 424} }; GtkWidget *create_notebook_page_dialog(int page, dialog_buttons btn[MAX_KEYS], dialog_checkbox checkbox[CHECK_NBR]) diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/Linux/ini.cpp pcsx2-1.4.0/plugins/onepad/Linux/ini.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/Linux/ini.cpp 2011-08-20 12:17:47.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/Linux/ini.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -22,7 +22,7 @@ #include #include -#include "joystick.h" +#include "GamePad.h" #include "keyboard.h" #include "onepad.h" #include "linux.h" @@ -73,19 +73,19 @@ int axis = key_to_axis(pad, key); switch(key_to_hat_dir(pad, key)) { - case SDL_HAT_UP: + case HAT_UP: sprintf(&tmp[0], "JPOVU-%d", axis); break; - case SDL_HAT_RIGHT: + case HAT_RIGHT: sprintf(&tmp[0], "JPOVR-%d", axis); break; - case SDL_HAT_DOWN: + case HAT_DOWN: sprintf(&tmp[0], "JPOVD-%d", axis); break; - case SDL_HAT_LEFT: + case HAT_LEFT: sprintf(&tmp[0], "JPOVL-%d", axis); break; } @@ -129,10 +129,10 @@ } fprintf(f, "log = %d\n", conf->log); - fprintf(f, "options = %d\n", conf->options); - fprintf(f, "mouse_sensibility = %d\n", conf->sensibility); + fprintf(f, "options = %d\n", conf->packed_options); + fprintf(f, "mouse_sensibility = %d\n", conf->get_sensibility()); fprintf(f, "joy_pad_map = %d\n", conf->joyid_map); - fprintf(f, "ff_intensity = %d\n", conf->ff_intensity); + fprintf(f, "ff_intensity = %d\n", conf->get_ff_intensity()); for (int pad = 0; pad < 2; pad++) { @@ -171,16 +171,16 @@ } u32 value; - if (fscanf(f, "log = %d\n", &value) == 0) return; + if (fscanf(f, "log = %d\n", &value) == 0) goto error; conf->log = value; - if (fscanf(f, "options = %d\n", &value) == 0) return; - conf->options = value; - if (fscanf(f, "mouse_sensibility = %d\n", &value) == 0) return; - conf->sensibility = value; - if (fscanf(f, "joy_pad_map = %d\n", &value) == 0) return; + if (fscanf(f, "options = %d\n", &value) == 0) goto error; + conf->packed_options = value; + if (fscanf(f, "mouse_sensibility = %d\n", &value) == 0) goto error; + conf->set_sensibility(value); + if (fscanf(f, "joy_pad_map = %d\n", &value) == 0) goto error; conf->joyid_map = value; - if (fscanf(f, "ff_intensity = %d\n", &value) == 0) return; - conf->ff_intensity = value; + if (fscanf(f, "ff_intensity = %d\n", &value) == 0) goto error; + conf->set_ff_intensity(value); for (int pad = 0; pad < 2; pad++) { @@ -199,11 +199,13 @@ u32 keysym; u32 index; while( fscanf(f, "PAD %d:KEYSYM 0x%x = %d\n", &pad, &keysym, &index) != EOF ) { - set_keyboad_key(pad, keysym, index); + set_keyboad_key(pad & 1, keysym, index); if(pad == 0) have_user_setting = true; } + if (!have_user_setting) DefaultKeyboardValues(); + +error: fclose(f); - if (!have_user_setting) DefaultKeyboardValues(); } diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/Linux/linux.cpp pcsx2-1.4.0/plugins/onepad/Linux/linux.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/Linux/linux.cpp 2013-11-01 21:05:59.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/Linux/linux.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "joystick.h" +#include "GamePad.h" #include "onepad.h" #include "keyboard.h" @@ -74,34 +74,34 @@ { SetAutoRepeat(true); - vector::iterator it = s_vjoysticks.begin(); + vector::iterator it = s_vgamePad.begin(); // Delete everything in the vector vjoysticks. - while (it != s_vjoysticks.end()) + while (it != s_vgamePad.end()) { delete *it; it ++; } - s_vjoysticks.clear(); + s_vgamePad.clear(); } void PollForJoystickInput(int cpad) { int joyid = conf->get_joyid(cpad); - if (!JoystickIdWithinBounds(joyid)) return; + if (!GamePadIdWithinBounds(joyid)) return; - SDL_JoystickUpdate(); + GamePad::UpdateGamePadState(); for (int i = 0; i < MAX_KEYS; i++) { - JoystickInfo* pjoy = s_vjoysticks[joyid]; + GamePad* gamePad = s_vgamePad[joyid]; switch (type_of_joykey(cpad, i)) { case PAD_JOYBUTTONS: { - int value = SDL_JoystickGetButton((pjoy)->GetJoy(), key_to_button(cpad, i)); + int value = gamePad->GetButton(key_to_button(cpad, i)); if (value) key_status->press(cpad, i); else @@ -111,7 +111,7 @@ } case PAD_HAT: { - int value = SDL_JoystickGetHat((pjoy)->GetJoy(), key_to_axis(cpad, i)); + int value = gamePad->GetHat(key_to_axis(cpad, i)); // key_to_hat_dir and SDL_JoystickGetHat are a 4 bits bitmap, one for each directions. Only 1 bit can be high for // key_to_hat_dir. SDL_JoystickGetHat handles diagonal too (2 bits) so you must check the intersection @@ -125,12 +125,12 @@ } case PAD_AXIS: { - int value = pjoy->GetAxisFromKey(cpad, i); + int value = gamePad->GetAxisFromKey(cpad, i); bool sign = key_to_axis_sign(cpad, i); bool full_axis = key_to_axis_type(cpad, i); if (IsAnalogKey(i)) { - if (abs(value) > pjoy->GetDeadzone()) + if (abs(value) > gamePad->GetDeadzone()) key_status->press(cpad, i, value); else key_status->release(cpad, i); @@ -138,15 +138,15 @@ } else { if (full_axis) { value += 0x8000; - if (value > pjoy->GetDeadzone()) + if (value > gamePad->GetDeadzone()) key_status->press(cpad, i, min(value/256 , 0xFF)); else key_status->release(cpad, i); } else { - if (sign && (-value > pjoy->GetDeadzone())) + if (sign && (-value > gamePad->GetDeadzone())) key_status->press(cpad, i, min(-value /128, 0xFF)); - else if (!sign && (value > pjoy->GetDeadzone())) + else if (!sign && (value > gamePad->GetDeadzone())) key_status->press(cpad, i, min(value /128, 0xFF)); else key_status->release(cpad, i); @@ -160,6 +160,16 @@ EXPORT_C_(void) PADupdate(int pad) { + // Gamepad inputs don't count as an activity. Therefore screensaver will + // be fired after a couple of minute. + // Emulate an user activity + static int count = 0; + count++; + if ((count & 0xFFF) == 0) { + // 1 call every 4096 Vsync is enough + XResetScreenSaver(GSdsp); + } + // Actually PADupdate is always call with pad == 0. So you need to update both // pads -- Gregory for (int cpad = 0; cpad < 2; cpad++) { diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/onepad.cpp pcsx2-1.4.0/plugins/onepad/onepad.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/onepad.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/onepad.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -36,14 +36,14 @@ #endif PADconf* conf; -char libraryName[256]; +static char libraryName[256]; keyEvent event; static keyEvent s_event; std::string s_strIniPath("inis/"); std::string s_strLogPath("logs/"); -bool toggleAutoRepeat = true; +bool toggleAutoRepeat = false; const u32 version = PS2E_PAD_VERSION; const u32 revision = 1; @@ -246,9 +246,11 @@ EXPORT_C_(void) PADshutdown() { - CloseLogging(); - if (conf) delete conf; - if (key_status) delete key_status; + CloseLogging(); + delete conf; + conf = nullptr; + delete key_status; + key_status = nullptr; } EXPORT_C_(s32) PADopen(void *pDsp) @@ -261,7 +263,7 @@ mutex_WasInit = true; #ifdef __linux__ - JoystickInfo::EnumerateJoysticks(s_vjoysticks); + GamePad::EnumerateGamePads(s_vgamePad); #endif return _PADopen(pDsp); } @@ -298,7 +300,6 @@ void PADsetMode(int pad, int mode) { padMode[pad] = mode; - // FIXME FEEDBACK padVib0[pad] = 0; padVib1[pad] = 0; padVibF[pad][0] = 0; @@ -411,15 +412,13 @@ buf = stdpar[curPad]; - // FIXME FEEDBACK. Set effect here /* Small Motor */ vib_small = padVibF[curPad][0] ? 2000 : 0; // if ((padVibF[curPad][2] != vib_small) && (padVibC[curPad] >= 0)) if (padVibF[curPad][2] != vib_small) { padVibF[curPad][2] = vib_small; - // SetDeviceForceS (padVibC[curPad], vib_small); - JoystickInfo::DoHapticEffect(0, curPad, vib_small); + GamePad::DoRumble(0, curPad); } /* Big Motor */ @@ -428,8 +427,7 @@ if (padVibF[curPad][3] != vib_big) { padVibF[curPad][3] = vib_big; - // SetDeviceForceB (padVibC[curPad], vib_big); - JoystickInfo::DoHapticEffect(1, curPad, vib_big); + GamePad::DoRumble(1, curPad); } return padID[curPad]; @@ -489,9 +487,9 @@ switch (curCmd) { case CMD_READ_DATA_AND_VIBRATE: - // FIXME FEEDBACK + if (curByte == padVib0[curPad]) - padVibF[curPad][0] = value; + padVibF[curPad][0] = value&1; if (curByte == padVib1[curPad]) padVibF[curPad][1] = value; break; @@ -555,7 +553,7 @@ break; case CMD_VIBRATION_TOGGLE: - // FIXME FEEDBACK + if (curByte >= 2) { if (curByte == padVib0[curPad]) @@ -565,16 +563,10 @@ if (value == 0x00) { padVib0[curPad] = curByte; - // FIXME: code from SSSXPAD I'm not sure we need this part - // if ((padID[curPad] & 0x0f) < (curByte - 1) / 2) - // padID[curPad] = (padID[curPad] & 0xf0) + (curByte - 1) / 2; } else if (value == 0x01) { padVib1[curPad] = curByte; - // FIXME: code from SSSXPAD I'm not sure we need this part - // if ((padID[curPad] & 0x0f) < (curByte - 1) / 2) - // padID[curPad] = (padID[curPad] & 0xf0) + (curByte - 1) / 2; } } break; diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/onepad.h pcsx2-1.4.0/plugins/onepad/onepad.h --- pcsx2-1.3.1+dfsg/plugins/onepad/onepad.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/onepad.h 2016-01-05 17:28:08.000000000 +0000 @@ -48,7 +48,7 @@ #include "PS2Edefs.h" #ifdef __linux__ -#include "joystick.h" +#include "GamePad.h" #endif #include "bitwise.h" #include "controller.h" @@ -57,21 +57,20 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" __declspec(dllexport) type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif -extern char libraryName[256]; - enum PadOptions { - PADOPTION_FORCEFEEDBACK = 0x1, - PADOPTION_REVERSELX = 0x2, - PADOPTION_REVERSELY = 0x4, - PADOPTION_REVERSERX = 0x8, - PADOPTION_REVERSERY = 0x10, - PADOPTION_MOUSE_L = 0x20, - PADOPTION_MOUSE_R = 0x40, - PADOPTION_SIXAXIS_USB = 0x80 + PADOPTION_FORCEFEEDBACK = 0x1, + PADOPTION_REVERSELX = 0x2, + PADOPTION_REVERSELY = 0x4, + PADOPTION_REVERSERX = 0x8, + PADOPTION_REVERSERY = 0x10, + PADOPTION_MOUSE_L = 0x20, + PADOPTION_MOUSE_R = 0x40, + PADOPTION_SIXAXIS_USB = 0x80, + PADOPTION_SIXAXIS_PRESSURE = 0x100 }; extern FILE *padLog; diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/SDL/joystick.cpp pcsx2-1.4.0/plugins/onepad/SDL/joystick.cpp --- pcsx2-1.3.1+dfsg/plugins/onepad/SDL/joystick.cpp 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/SDL/joystick.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,373 @@ +/* OnePAD - author: arcum42(@gmail.com) + * Copyright (C) 2009 + * + * Based on ZeroPAD, author zerofrog@gmail.com + * Copyright (C) 2006-2007 + * + * 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 + */ + +#include "joystick.h" +#include // sigaction + +////////////////////////// +// Joystick definitions // +////////////////////////// + +static u32 s_bSDLInit = false; + +void JoystickInfo::UpdateReleaseState() +{ + vector::iterator itjoy = s_vgamePad.begin(); + + SDL_JoystickUpdate(); + + // Save everything in the vector s_vjoysticks. + while (itjoy != s_vgamePad.end()) + { + (*itjoy)->SaveState(); + itjoy++; + } +} + +// opens handles to all possible joysticks +void JoystickInfo::EnumerateJoysticks(vector& vjoysticks) +{ + + if (!s_bSDLInit) + { +#if SDL_MAJOR_VERSION >= 2 + // Tell SDL to catch event even if the windows isn't focussed + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + if (SDL_Init(SDL_INIT_JOYSTICK|SDL_INIT_HAPTIC|SDL_INIT_EVENTS) < 0) return; + // WTF! Give me back the control of my system + struct sigaction action = { 0 }; + action.sa_handler = SIG_DFL; + sigaction(SIGINT, &action, NULL); + sigaction(SIGTERM, &action, NULL); +#else + if (SDL_Init(SDL_INIT_JOYSTICK) < 0) return; +#endif + SDL_JoystickEventState(SDL_QUERY); + s_bSDLInit = true; + } + + vector::iterator it = vjoysticks.begin(); + + // Delete everything in the vector vjoysticks. + while (it != vjoysticks.end()) + { + delete *it; + it ++; + } + + vjoysticks.resize(SDL_NumJoysticks()); + + for (int i = 0; i < (int)vjoysticks.size(); ++i) + { + vjoysticks[i] = new JoystickInfo(); + vjoysticks[i]->Init(i); + } +} + +void JoystickInfo::GenerateDefaultEffect() +{ +#if SDL_MAJOR_VERSION >= 2 + for(int i=0;iget_ff_intensity()); // Effect at maximum instensity + effect.periodic.offset = 0; + effect.periodic.phase = 18000; + effect.periodic.length = 125; // 125ms feels quite near to original + effect.periodic.delay = 0; + effect.periodic.attack_length = 0; + effects[i] = effect; + } +#endif +} + +void JoystickInfo::Rumble(int type, int pad) +{ + if (type > 1) return; + if ( !(conf->pad_options[pad].forcefeedback) ) return; + +#if SDL_MAJOR_VERSION >= 2 + if (haptic == NULL) return; + + if(first) + {// If done multiple times, device memory will be filled + first = 0; + GenerateDefaultEffect(); + /** Sine and triangle are quite probably the best, don't change that lightly and if you do + * keep effects ordered by type + **/ + /** Effect for small motor **/ + /** Sine seems to be the only effect making little motor from DS3/4 react + * Intensity has pretty much no effect either(which is coherent with what is explain in hid_sony driver + **/ + effects[0].type = SDL_HAPTIC_SINE; + effects_id[0] = SDL_HapticNewEffect(haptic, &effects[0]); + if(effects_id[0] < 0) + { + fprintf(stderr,"ERROR: Effect is not uploaded! %s, id is %d\n",SDL_GetError(),effects_id[0]); + } + + /** Effect for big motor **/ + effects[1].type = SDL_HAPTIC_TRIANGLE; + effects_id[1] = SDL_HapticNewEffect(haptic, &effects[1]); + if(effects_id[1] < 0) + { + fprintf(stderr,"ERROR: Effect is not uploaded! %s, id is %d\n",SDL_GetError(),effects_id[1]); + } + } + + int id; + id = effects_id[type]; + if(SDL_HapticRunEffect(haptic, id, 1) != 0) + { + fprintf(stderr,"ERROR: Effect is not working! %s, id is %d\n",SDL_GetError(),id); + } +#endif +} + +void JoystickInfo::Destroy() +{ + if (joy != NULL) + { +#if SDL_MAJOR_VERSION >= 2 + // Haptic must be closed before the joystick + if (haptic != NULL) { + SDL_HapticClose(haptic); + haptic = NULL; + } +#endif + +#if SDL_MAJOR_VERSION >= 2 +#if SDL_MINOR_VERSION >= 4 // Version before 2.0.4 are bugged, JoystickClose crashes randomly + if (joy) SDL_JoystickClose(joy); +#endif +#else + if (SDL_JoystickOpened(_id)) SDL_JoystickClose(joy); +#endif + joy = NULL; + } +} + +bool JoystickInfo::Init(int id) +{ + Destroy(); + _id = id; + + joy = SDL_JoystickOpen(id); + if (joy == NULL) + { + PAD_LOG("failed to open joystick %d\n", id); + return false; + } + + numaxes = SDL_JoystickNumAxes(joy); + numbuttons = SDL_JoystickNumButtons(joy); + numhats = SDL_JoystickNumHats(joy); +#if SDL_MAJOR_VERSION >= 2 + devname = SDL_JoystickName(joy); +#else + devname = SDL_JoystickName(id); +#endif + + vaxisstate.resize(numaxes); + vbuttonstate.resize(numbuttons); + vhatstate.resize(numhats); + + // Sixaxis, dualshock3 hack + // Most buttons are actually axes due to analog pressure support. Only the first 4 buttons + // are digital (select, start, l3, r3). To avoid conflict just forget the others. + // Keep the 4 hat buttons too (usb driver). (left pressure does not work with recent kernel). Moreover the pressure + // work sometime on half axis neg others time in fulll axis. So better keep them as button for the moment + u32 found_hack = devname.find(string("PLAYSTATION(R)3")); + // FIXME: people need to restart the plugin to take the option into account. + bool hack_enabled = (conf->pad_options[0].sixaxis_pressure) || (conf->pad_options[1].sixaxis_pressure); + if (found_hack != string::npos && numaxes > 4 && hack_enabled) { + numbuttons = 4; // (select, start, l3, r3) + // Enable this hack in bluetooth too. It avoid to restart the onepad gui + numbuttons += 4; // the 4 hat buttons + } + +#if SDL_MAJOR_VERSION >= 2 + if ( haptic == NULL ) { + if (!SDL_JoystickIsHaptic(joy)) { + PAD_LOG("Haptic devices not supported!\n"); + } else { + haptic = SDL_HapticOpenFromJoystick(joy); + first = true; + } + } +#endif + + //PAD_LOG("There are %d buttons, %d axises, and %d hats.\n", numbuttons, numaxes, numhats); + return true; +} + +void JoystickInfo::SaveState() +{ + for (int i = 0; i < numbuttons; ++i) + SetButtonState(i, SDL_JoystickGetButton(joy, i)); + for (int i = 0; i < numaxes; ++i) + SetAxisState(i, SDL_JoystickGetAxis(joy, i)); + for (int i = 0; i < numhats; ++i) + SetHatState(i, SDL_JoystickGetHat(joy, i)); +} + +void JoystickInfo::TestForce() +{ +#if SDL_MAJOR_VERSION >= 2 + // This code just use standard rumble to check that SDL handles the pad correctly! --3kinox + if(haptic == NULL) return; // Otherwise, core dump! + SDL_HapticRumbleInit( haptic ); + // Make the haptic pad rumble 60% strength for half a second, shoudld be enough for user to see if it works or not + if( SDL_HapticRumblePlay( haptic, 0.60, 400 ) != 0) + { + fprintf(stderr,"ERROR: Rumble is not working! %s\n",SDL_GetError()); + } +#endif +} + +bool JoystickInfo::PollButtons(u32 &pkey) +{ + // MAKE sure to look for changes in the state!! + for (int i = 0; i < GetNumButtons(); ++i) + { + int but = SDL_JoystickGetButton(GetJoy(), i); + if (but != GetButtonState(i)) + { + // Pressure sensitive button are detected as both button (digital) and axes (analog). So better + // drop the button to emulate the pressure sensiblity of the ds2 :) + // Trick: detect the release of the button. It avoid all races condition between axes and buttons :) + // If the button support pressure it will be detected as an axis when it is pressed. + if (but) { + SetButtonState(i, but); + return false; + } + + + pkey = button_to_key(i); + return true; + } + } + + return false; +} + +bool JoystickInfo::PollAxes(u32 &pkey) +{ + u32 found_hack = devname.find(string("PLAYSTATION(R)3")); + + for (int i = 0; i < GetNumAxes(); ++i) + { + // Sixaxis, dualshock3 hack + if (found_hack != string::npos) { + // The analog mode of the hat button is quite erratic. Values can be in half- axis + // or full axis... So better keep them as button for the moment -- gregory + if (i >= 8 && i <= 11 && (conf->pad_options[pad].sixaxis_usb)) + continue; + // Disable accelerometer + if ((i >= 4 && i <= 6)) + continue; + } + + s32 value = SDL_JoystickGetAxis(GetJoy(), i); + s32 old_value = GetAxisState(i); + + if (abs(value - old_value) < 0x1000) + continue; + + if (value != old_value) + { + PAD_LOG("Change in joystick %d: %d.\n", i, value); + // There are several kinds of axes + // Half+: 0 (release) -> 32768 + // Half-: 0 (release) -> -32768 + // Full (like dualshock 3): -32768 (release) ->32768 + const s32 full_axis_ceil = -0x6FFF; + const s32 half_axis_ceil = 0x1FFF; + + // Normally, old_value contains the release state so it can be used to detect the types of axis. + bool is_full_axis = (old_value < full_axis_ceil) ? true : false; + + if ((!is_full_axis && abs(value) <= half_axis_ceil) + || (is_full_axis && value <= full_axis_ceil)) // we don't want this + { + continue; + } + + if ((!is_full_axis && abs(value) > half_axis_ceil) + || (is_full_axis && value > full_axis_ceil)) + { + bool sign = (value < 0); + pkey = axis_to_key(is_full_axis, sign, i); + + return true; + } + } + } + + return false; +} + +bool JoystickInfo::PollHats(u32 &pkey) +{ + for (int i = 0; i < GetNumHats(); ++i) + { + int value = SDL_JoystickGetHat(GetJoy(), i); + + if ((value != GetHatState(i)) && (value != SDL_HAT_CENTERED)) + { + switch (value) + { + case SDL_HAT_UP: + case SDL_HAT_RIGHT: + case SDL_HAT_DOWN: + case SDL_HAT_LEFT: + pkey = hat_to_key(value, i); + PAD_LOG("Hat Pressed!"); + return true; + default: + break; + } + } + } + return false; +} + +int JoystickInfo::GetHat(int key_to_axis) +{ + return SDL_JoystickGetHat(GetJoy(),key_to_axis); +} + +int JoystickInfo::GetButton(int key_to_button) +{ + return SDL_JoystickGetButton(GetJoy(),key_to_button); +} + +int JoystickInfo::GetAxisFromKey(int pad, int index) +{ + return SDL_JoystickGetAxis(GetJoy(), key_to_axis(pad, index)); +} diff -Nru pcsx2-1.3.1+dfsg/plugins/onepad/SDL/joystick.h pcsx2-1.4.0/plugins/onepad/SDL/joystick.h --- pcsx2-1.3.1+dfsg/plugins/onepad/SDL/joystick.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/onepad/SDL/joystick.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,163 @@ +/* OnePAD - author: arcum42(@gmail.com) + * Copyright (C) 2009 + * + * Based on ZeroPAD, author zerofrog@gmail.com + * Copyright (C) 2006-2007 + * + * 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 + */ + +#pragma once + +#include +#if SDL_MAJOR_VERSION >= 2 +#include +#endif + +#include "GamePad.h" +#include "onepad.h" +#include "controller.h" +#define NB_EFFECT 2 // Don't use more than two, ps2 only has one for big motor and one for small(like most systems) +// holds all joystick info +class JoystickInfo : GamePad +{ + public: + JoystickInfo() : devname(""), _id(-1), numbuttons(0), numaxes(0), numhats(0), + deadzone(1500), pad(-1), joy(NULL) { + vbuttonstate.clear(); + vaxisstate.clear(); + vhatstate.clear(); +#if SDL_MAJOR_VERSION >= 2 + haptic = NULL; + first = true; +#endif + } + + ~JoystickInfo() + { + Destroy(); + } + + JoystickInfo(const JoystickInfo&); // copy constructor + JoystickInfo& operator=(const JoystickInfo&); // assignment + + void Destroy(); + // opens handles to all possible joysticks + static void EnumerateJoysticks(vector& vjoysticks); + + void Rumble(int type,int pad); + + bool Init(int id); // opens a handle and gets information + + void TestForce(); + + bool PollButtons(u32 &pkey); + bool PollAxes(u32 &pkey); + bool PollHats(u32 &pkey); + + int GetHat(int key_to_axis); + + int GetButton(int key_to_button); + + const string& GetName() + { + return devname; + } + + int GetNumButtons() + { + return numbuttons; + } + + int GetNumAxes() + { + return numaxes; + } + + int GetNumHats() + { + return numhats; + } + + int GetPAD() + { + return pad; + } + + int GetDeadzone() + { + return deadzone; + } + + void SaveState(); + + int GetButtonState(int i) + { + return vbuttonstate[i]; + } + + int GetAxisState(int i) + { + return vaxisstate[i]; + } + + int GetHatState(int i) + { + //PAD_LOG("Getting POV State of %d.\n", i); + return vhatstate[i]; + } + + void SetButtonState(int i, int state) + { + vbuttonstate[i] = state; + } + + void SetAxisState(int i, int value) + { + vaxisstate[i] = value; + } + + void SetHatState(int i, int value) + { + //PAD_LOG("We should set %d to %d.\n", i, value); + vhatstate[i] = value; + } + + int GetAxisFromKey(int pad, int index); + + static void UpdateReleaseState(); + + private: + SDL_Joystick* GetJoy() + { + return joy; + } + void GenerateDefaultEffect(); + string devname; // pretty device name + int _id; + int numbuttons, numaxes, numhats; + int deadzone; + int pad; + + vector vbuttonstate, vaxisstate, vhatstate; + + SDL_Joystick* joy; +#if SDL_MAJOR_VERSION >= 2 + SDL_Haptic* haptic; + bool first; + SDL_HapticEffect effects[NB_EFFECT]; + int effects_id[NB_EFFECT]; +#endif +}; diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/CMakeLists.txt pcsx2-1.4.0/plugins/PadNull/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/PadNull/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -7,21 +7,7 @@ # plugin name set(Output PADnull) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(PadNullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(PadNullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(PadNullFinalFlags ${OptimizationFlags}) - -endif() +set(PadNullFinalFlags "") # PadNull sources set(PadNullSources @@ -38,7 +24,6 @@ # PadNull Linux headers set(PadNullLinuxHeaders - Linux/Config.h Linux/PadLinux.h) # PadNull Windows sources diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Linux/Config.cpp pcsx2-1.4.0/plugins/PadNull/Linux/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/PadNull/Linux/Config.cpp 2010-07-04 22:49:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Linux/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -17,12 +17,10 @@ */ #include -using namespace std; #include "Pad.h" -#include "Config.h" -extern string s_strIniPath; +extern std::string s_strIniPath; PluginConf Ini; EXPORT_C_(void) PADabout() diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Linux/Config.h pcsx2-1.4.0/plugins/PadNull/Linux/Config.h --- pcsx2-1.3.1+dfsg/plugins/PadNull/Linux/Config.h 2010-07-31 09:01:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Linux/Config.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -/* PadNull - * Copyright (C) 2004-2010 PCSX2 Team - * - * 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 - */ - -void SaveConf(); -void LoadConf(); -void SysMessage(char *fmt, ...); diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Pad.cpp pcsx2-1.4.0/plugins/PadNull/Pad.cpp --- pcsx2-1.3.1+dfsg/plugins/PadNull/Pad.cpp 2014-03-23 14:44:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Pad.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -92,7 +92,7 @@ if (padLog != NULL) setvbuf(padLog, NULL, _IONBF, 0); else { - SysMessage("Can't create log file %s\n", LogFile.c_str()); + fprintf(stderr, "Can't create log file %s\n", LogFile.c_str()); result = false; } PAD_LOG("PADinit\n"); @@ -151,6 +151,7 @@ s_event = event; event.evt = 0; + event.key = 0; return &s_event; } diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Pad.h pcsx2-1.4.0/plugins/PadNull/Pad.h --- pcsx2-1.3.1+dfsg/plugins/PadNull/Pad.h 2010-08-06 11:43:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Pad.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,16 +28,10 @@ #include "PadLinux.h" #endif -/*#ifdef _MSC_VER -#define EXPORT_C_(type) extern "C" __declspec(dllexport) type CALLBACK -#else -#define EXPORT_C_(type) extern "C" type -#endif*/ - #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif #define PAD_LOG __Log @@ -52,7 +46,6 @@ extern keyEvent event; extern void __Log(char *fmt, ...); -extern void SysMessage(char *fmt, ...); extern void SaveConfig(); extern void LoadConfig(); diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/Config.cpp pcsx2-1.4.0/plugins/PadNull/Windows/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/Config.cpp 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -13,54 +13,35 @@ * If not, see . */ -#include - #include "../Pad.h" -extern HINSTANCE hInst; +extern std::string s_strIniPath; + void SaveConfig() { + const std::string iniFile = s_strIniPath + "/Padnull.ini"; - Config *Conf1 = &conf; - char *szTemp; - char szIniFile[256], szValue[256]; - - GetModuleFileName(GetModuleHandle((LPCSTR)hInst), szIniFile, 256); - szTemp = strrchr(szIniFile, '\\'); - - if(!szTemp) return; - strcpy(szTemp, "\\inis\\fwnull.ini"); - sprintf(szValue,"%u",Conf1->Log); - WritePrivateProfileString("Interface", "Logging",szValue,szIniFile); - + PluginConf ini; + if (!ini.Open(iniFile, READ_FILE)) + { + printf("failed to open %s\n", iniFile.c_str()); + SaveConfig();//save and return + return; + } + conf.Log = ini.ReadInt("logging", 0); + ini.Close(); } -void LoadConfig() { - FILE *fp; - - - Config *Conf1 = &conf; - char *szTemp; - char szIniFile[256], szValue[256]; - - GetModuleFileName(GetModuleHandle((LPCSTR)hInst), szIniFile, 256); - szTemp = strrchr(szIniFile, '\\'); +void LoadConfig() +{ + const std::string iniFile(s_strIniPath + "/Padnull.ini"); - if(!szTemp) return ; - strcpy(szTemp, "\\inis\\fwnull.ini"); - fp=fopen("inis\\fwnull.ini","rt");//check if firewirenull.ini really exists - if (!fp) + PluginConf ini; + if (!ini.Open(iniFile, WRITE_FILE)) { - CreateDirectory("inis",NULL); - memset(&conf, 0, sizeof(conf)); - conf.Log = 0;//default value - SaveConfig();//save and return - return ; + printf("failed to open %s\n", iniFile.c_str()); + return; } - fclose(fp); - GetPrivateProfileString("Interface", "Logging", NULL, szValue, 20, szIniFile); - Conf1->Log = strtoul(szValue, NULL, 10); - return ; - + ini.WriteInt("logging", conf.Log); + ini.Close(); } - diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull.rc pcsx2-1.4.0/plugins/PadNull/Windows/PadNull.rc --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,116 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Argentina) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESS) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 212, 121 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "PadNull Settings" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,100,50,14 + PUSHBUTTON "Cancel",IDCANCEL,113,100,50,14 + CONTROL "Enable Logging (for develop use only)",IDC_LOGGING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,187,13 +END + +IDD_ABOUT DIALOGEX 0, 0, 177, 106 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "PadNull About" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,65,85,50,14 + LTEXT "PadNull Plugin",IDC_NAME,70,10,48,8 + GROUPBOX "",IDC_STATIC,5,35,170,40 + LTEXT "Author: Shadow and linuzappz",IDC_STATIC,29,19,141,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 205 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 99 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Argentina) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull.vcxproj pcsx2-1.4.0/plugins/PadNull/Windows/PadNull.vcxproj --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull.vcxproj 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -19,12 +19,14 @@ DynamicLibrary - MultiByte + Unicode true + $(DefaultPlatformToolset)_xp DynamicLibrary - MultiByte + Unicode + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2012.vcxproj pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - Padnull - {6BC4D85D-A399-407E-96A9-CD5416A54269} - Padnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - EnableFastChecks - MultiThreadedDebug - - - - - PadNull.def - false - MachineX86 - $(OutDir)$(TargetName)$(TargetExt) - - - - - MaxSpeed - AnySuitable - true - MultiThreaded - - - - - PadNull.def - false - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - - - - - {ea821597-bb54-4b64-bf78-6dac5a784811} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {0899555b-4159-4c99-8d04-8c7c39430402} - h;hpp;hxx;hm;inl;inc - - - {995a9f7e-492c-425a-8736-4481f7a54804} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2013.vcxproj pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,108 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - Padnull - {6BC4D85D-A399-407E-96A9-CD5416A54269} - Padnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - AllRules.ruleset - - - AllRules.ruleset - - - - - - Disabled - EnableFastChecks - MultiThreadedDebug - - - - - PadNull.def - false - MachineX86 - $(OutDir)$(TargetName)$(TargetExt) - - - - - MaxSpeed - AnySuitable - true - MultiThreaded - - - - - PadNull.def - false - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadNull_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadNull_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ - - - - - {ea821597-bb54-4b64-bf78-6dac5a784811} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {0899555b-4159-4c99-8d04-8c7c39430402} - h;hpp;hxx;hm;inl;inc - - - {995a9f7e-492c-425a-8736-4481f7a54804} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadWin.h pcsx2-1.4.0/plugins/PadNull/Windows/PadWin.h --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/PadWin.h 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/PadWin.h 2016-01-05 17:28:08.000000000 +0000 @@ -13,12 +13,11 @@ * If not, see . */ -#ifndef __PADLINUX_H__ -#define __PADLINUX_H__ +#ifndef PADWIN_H +#define PADWIN_H #include "../Pad.h" #include -#include void _PadUpdate(int pad); s32 _PADOpen(void *pDsp); diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/resource.h pcsx2-1.4.0/plugins/PadNull/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by FireWireNull.rc +// +#define IDD_CONFDLG 101 +#define IDD_CONFIG 101 +#define IDD_ABOUT 103 +#define IDC_NAME 1000 +#define IDC_CHECK1 1007 +#define IDC_LOGGING 1007 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/Win32.cpp pcsx2-1.4.0/plugins/PadNull/Windows/Win32.cpp --- pcsx2-1.3.1+dfsg/plugins/PadNull/Windows/Win32.cpp 2010-05-03 14:08:02.000000000 +0000 +++ pcsx2-1.4.0/plugins/PadNull/Windows/Win32.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -13,26 +13,13 @@ * If not, see . */ -#include #include -#include - #include "resource.h" #include "../Pad.h" HINSTANCE hInst; -void SysMessage(char *fmt, ...) { - va_list list; - char tmp[512]; - - va_start(list,fmt); - vsprintf(tmp,fmt,list); - va_end(list); - MessageBox(0, tmp, "Pad Plugin Msg", 0); -} - BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/Changelog.txt pcsx2-1.4.0/plugins/SPU2null/Changelog.txt --- pcsx2-1.3.1+dfsg/plugins/SPU2null/Changelog.txt 2009-05-02 03:41:03.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/Changelog.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,30 +1,30 @@ -[ Legend: ] -[ + Added feature ] -[ * Improved/changed feature ] -[ - Bug fixed (we hope) ] -[ ! Attention (Notes) ] - -ChangeLog: - -v0.5 - [+] Added Seperate IRQ Callbacks with AutoDMA check (refraction) - [-] Updated Specs to 0.9 (refraction) - -v0.4 - [+] added vsnet2005beta1 project files. 64bit dll should work fine now (not tested!!) - -v0.2 - -15/06/03 - [*] clear some stuff,made code more readable (shadow) - - -9/06/03 - [+] Added some work on CoRE1_ATTR to get bios work (linuzappz) - -9/06/03 - - [+] Added new SPU2 functions to PS2Edefs.h 0.3.2 version - [+] Added loggin system . IT can be enable in SPU2.H - [*] Update Ps2edefs to 0.3.1 (shadow) - +[ Legend: ] +[ + Added feature ] +[ * Improved/changed feature ] +[ - Bug fixed (we hope) ] +[ ! Attention (Notes) ] + +ChangeLog: + +v0.5 + [+] Added Seperate IRQ Callbacks with AutoDMA check (refraction) + [-] Updated Specs to 0.9 (refraction) + +v0.4 + [+] added vsnet2005beta1 project files. 64bit dll should work fine now (not tested!!) + +v0.2 + +15/06/03 + [*] clear some stuff,made code more readable (shadow) + + +9/06/03 + [+] Added some work on CoRE1_ATTR to get bios work (linuzappz) + +9/06/03 + + [+] Added new SPU2 functions to PS2Edefs.h 0.3.2 version + [+] Added loggin system . IT can be enable in SPU2.H + [*] Update Ps2edefs to 0.3.1 (shadow) + diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/CMakeLists.txt pcsx2-1.4.0/plugins/SPU2null/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/SPU2null/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output SPU2null) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(SPU2nullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(SPU2nullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(SPU2nullFinalFlags ${OptimizationFlags}) - -endif() +set(SPU2nullFinalFlags "") # SPU2null sources set(SPU2nullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/ReadMe.txt pcsx2-1.4.0/plugins/SPU2null/ReadMe.txt --- pcsx2-1.3.1+dfsg/plugins/SPU2null/ReadMe.txt 2009-02-06 19:39:52.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/ReadMe.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,39 +1,39 @@ -SPU2null v0.4 -------------- - - This is an extension to use with play station2 emulators - as PCSX2 (only one right now). - The plugin is free open source code. - -Usage: ------ - Place the file "SPU2null.dll" (Windows) or "libSPU2null.so" (Linux) - at the Plugins directory of the Emulator to use it. - -Changes: -------- - v0.5 - * added debug logging dialog + about dialog - * linuz did some reg fixes - * Added DEVC++ (4.9.9.2) project files for compiling with mingw32 - v0.4 - * added vsnet2005beta1 project files. 64bit dll should work fine now (not tested!) - * Fixed one more bug in regs stuff - - v0.21 - * more work on regs - - v0.2: - * New functions & regs - - v0.1: - * First Release - * Tested with Pcsx2 - -Authors: -------- - - linuzappz - shadow - - +SPU2null v0.4 +------------- + + This is an extension to use with play station2 emulators + as PCSX2 (only one right now). + The plugin is free open source code. + +Usage: +----- + Place the file "SPU2null.dll" (Windows) or "libSPU2null.so" (Linux) + at the Plugins directory of the Emulator to use it. + +Changes: +------- + v0.5 + * added debug logging dialog + about dialog + * linuz did some reg fixes + * Added DEVC++ (4.9.9.2) project files for compiling with mingw32 + v0.4 + * added vsnet2005beta1 project files. 64bit dll should work fine now (not tested!) + * Fixed one more bug in regs stuff + + v0.21 + * more work on regs + + v0.2: + * New functions & regs + + v0.1: + * First Release + * Tested with Pcsx2 + +Authors: +------- + + linuzappz + shadow + + diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/SPU2.h pcsx2-1.4.0/plugins/SPU2null/SPU2.h --- pcsx2-1.3.1+dfsg/plugins/SPU2null/SPU2.h 2010-08-06 11:43:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/SPU2.h 2016-01-05 17:28:08.000000000 +0000 @@ -39,7 +39,7 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" __declspec(dllexport) type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif extern FILE *spu2Log; diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/resource.h pcsx2-1.4.0/plugins/SPU2null/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by SPU2null.rc +// +#define IDD_CONFDLG 101 +#define IDD_CONFIG 101 +#define IDD_ABOUT 103 +#define IDC_NAME 1000 +#define IDC_CHECK1 1007 +#define IDC_LOGGING 1007 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/SPU2null.def pcsx2-1.4.0/plugins/SPU2null/Windows/SPU2null.def --- pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/SPU2null.def 2009-05-02 03:41:03.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/Windows/SPU2null.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,31 +1,31 @@ -; SPU2null.def : Declares the module parameters for the DLL. - -LIBRARY "SPU2null" -DESCRIPTION 'SPU2 Null Driver' - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - SPU2init @5 - SPU2shutdown @6 - SPU2open @7 - SPU2close @8 - SPU2write @9 - SPU2read @10 - SPU2readDMA4Mem @11 - SPU2writeDMA4Mem @12 - SPU2readDMA7Mem @13 - SPU2writeDMA7Mem @14 - SPU2async @15 - SPU2interruptDMA4 @16 - SPU2interruptDMA7 @17 - SPU2freeze @18 - SPU2configure @21 - SPU2test @22 - SPU2about @23 - - SPU2ReadMemAddr @24 - SPU2WriteMemAddr @25 +; SPU2null.def : Declares the module parameters for the DLL. + +LIBRARY "SPU2null" +DESCRIPTION 'SPU2 Null Driver' + +EXPORTS + ; Explicit exports can go here + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + SPU2init @5 + SPU2shutdown @6 + SPU2open @7 + SPU2close @8 + SPU2write @9 + SPU2read @10 + SPU2readDMA4Mem @11 + SPU2writeDMA4Mem @12 + SPU2readDMA7Mem @13 + SPU2writeDMA7Mem @14 + SPU2async @15 + SPU2interruptDMA4 @16 + SPU2interruptDMA7 @17 + SPU2freeze @18 + SPU2configure @21 + SPU2test @22 + SPU2about @23 + + SPU2ReadMemAddr @24 + SPU2WriteMemAddr @25 SPU2irqCallback @26 \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/SPU2null.rc pcsx2-1.4.0/plugins/SPU2null/Windows/SPU2null.rc --- pcsx2-1.3.1+dfsg/plugins/SPU2null/Windows/SPU2null.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/SPU2null/Windows/SPU2null.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,127 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Greek resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ELL) +#ifdef _WIN32 +LANGUAGE LANG_GREEK, SUBLANG_DEFAULT +#pragma code_page(1253) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 203, 81 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "SPU2configure" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,60,50,14 + PUSHBUTTON "Cancel",IDCANCEL,113,60,50,14 + CONTROL "Enable logging(for develop use only)",IDC_LOGGING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,159,15 +END + +IDD_ABOUT DIALOGEX 0, 0, 181, 82 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About SPU2 Null..." +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,65,54,50,14 + LTEXT "SPU2 Null Driver v0.7.1",IDC_NAME,53,7,76,8 + LTEXT "Authors: Shadow (shadowpcsx2@yahoo.gr) Linuzappz",IDC_STATIC,7,24,146,24 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 196 + TOPMARGIN, 7 + BOTTOMMARGIN, 74 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 174 + TOPMARGIN, 7 + BOTTOMMARGIN, 75 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Greek resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/GPL.txt pcsx2-1.4.0/plugins/spu2-x/GPL.txt --- pcsx2-1.3.1+dfsg/plugins/spu2-x/GPL.txt 2009-06-21 11:00:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/GPL.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - 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. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -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. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - 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 -state 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program 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, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU 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. But first, please read + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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. But first, please read . \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/LGPL.txt pcsx2-1.4.0/plugins/spu2-x/LGPL.txt --- pcsx2-1.3.1+dfsg/plugins/spu2-x/LGPL.txt 2009-06-21 11:00:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/LGPL.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,164 +1,164 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the Library. + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the Library. diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/License.txt pcsx2-1.4.0/plugins/spu2-x/License.txt --- pcsx2-1.3.1+dfsg/plugins/spu2-x/License.txt 2011-12-27 21:03:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/License.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,21 +1,21 @@ -[This file contains the template for the SPU2-X code rights license. For the full - rant-like preamble of the LGPL, see GPL.txt and LGPL.txt -- both lisences apply, - with the LGPL as a subset extension of the GPL.] - - -/* SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 - * Developed and maintained by the Pcsx2 Development Team. - * - * Original portions from SPU2ghz are (c) 2008 by David Quintana [gigaherz] - * - * SPU2-X is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * SPU2-X 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with SPU2-X. If not, see . +[This file contains the template for the SPU2-X code rights license. For the full + rant-like preamble of the LGPL, see GPL.txt and LGPL.txt -- both lisences apply, + with the LGPL as a subset extension of the GPL.] + + +/* SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 + * Developed and maintained by the Pcsx2 Development Team. + * + * Original portions from SPU2ghz are (c) 2008 by David Quintana [gigaherz] + * + * SPU2-X is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * SPU2-X 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with SPU2-X. If not, see . */ \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/ADSR.cpp pcsx2-1.4.0/plugins/spu2-x/src/ADSR.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/ADSR.cpp 2012-04-01 14:09:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/ADSR.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -34,7 +34,7 @@ else rate <<= shift; - PsxRates[i] = (int)std::min( rate, 0x3fffffffLL ); + PsxRates[i] = (int)std::min( rate, (s64)0x3fffffffLL ); } } diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/CMakeLists.txt pcsx2-1.4.0/plugins/spu2-x/src/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -14,21 +14,7 @@ # plugin name set(Output spu2x-2.0.0) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(spu2xFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(spu2xFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(spu2xFinalFlags ${OptimizationFlags}) - -endif() +set(spu2xFinalFlags "") # spu2x sources set(spu2xSources diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/DplIIdecoder.cpp pcsx2-1.4.0/plugins/spu2-x/src/DplIIdecoder.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/DplIIdecoder.cpp 2014-07-12 13:59:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/DplIIdecoder.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -1,174 +1,174 @@ -/* SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 - * Developed and maintained by the Pcsx2 Development Team. - * - * Original portions from SPU2ghz are (c) 2008 by David Quintana [gigaherz] - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your - * option) any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License along - * with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "Global.h" - -static const u8 sLogTable[256] = { - 0x00,0x3C,0x60,0x78,0x8C,0x9C,0xA8,0xB4,0xBE,0xC8,0xD0,0xD8,0xDE,0xE4,0xEA,0xF0, - 0xF6,0xFA,0xFE,0x04,0x08,0x0C,0x10,0x14,0x16,0x1A,0x1E,0x20,0x24,0x26,0x2A,0x2C, - 0x2E,0x32,0x34,0x36,0x38,0x3A,0x3E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50, - 0x50,0x52,0x54,0x56,0x58,0x5A,0x5A,0x5C,0x5E,0x60,0x60,0x62,0x64,0x66,0x66,0x68, - 0x6A,0x6A,0x6C,0x6E,0x6E,0x70,0x70,0x72,0x74,0x74,0x76,0x76,0x78,0x7A,0x7A,0x7C, - 0x7C,0x7E,0x7E,0x80,0x80,0x82,0x82,0x84,0x84,0x86,0x86,0x88,0x88,0x8A,0x8A,0x8C, - 0x8C,0x8C,0x8E,0x8E,0x90,0x90,0x92,0x92,0x92,0x94,0x94,0x96,0x96,0x96,0x98,0x98, - 0x9A,0x9A,0x9A,0x9C,0x9C,0x9C,0x9E,0x9E,0xA0,0xA0,0xA0,0xA2,0xA2,0xA2,0xA4,0xA4, - 0xA4,0xA6,0xA6,0xA6,0xA8,0xA8,0xA8,0xAA,0xAA,0xAA,0xAC,0xAC,0xAC,0xAC,0xAE,0xAE, - 0xAE,0xB0,0xB0,0xB0,0xB2,0xB2,0xB2,0xB2,0xB4,0xB4,0xB4,0xB6,0xB6,0xB6,0xB6,0xB8, - 0xB8,0xB8,0xB8,0xBA,0xBA,0xBA,0xBC,0xBC,0xBC,0xBC,0xBE,0xBE,0xBE,0xBE,0xC0,0xC0, - 0xC0,0xC0,0xC2,0xC2,0xC2,0xC2,0xC2,0xC4,0xC4,0xC4,0xC4,0xC6,0xC6,0xC6,0xC6,0xC8, - 0xC8,0xC8,0xC8,0xC8,0xCA,0xCA,0xCA,0xCA,0xCC,0xCC,0xCC,0xCC,0xCC,0xCE,0xCE,0xCE, - 0xCE,0xCE,0xD0,0xD0,0xD0,0xD0,0xD0,0xD2,0xD2,0xD2,0xD2,0xD2,0xD4,0xD4,0xD4,0xD4, - 0xD4,0xD6,0xD6,0xD6,0xD6,0xD6,0xD8,0xD8,0xD8,0xD8,0xD8,0xD8,0xDA,0xDA,0xDA,0xDA, - 0xDA,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xE0,0xE0,0xE0, -}; - -static float Gfl=0,Gfr=0; -static float LMax=0,RMax=0; - -static float AccL=0; -static float AccR=0; - -const float Scale = 4294967296.0f; // tweak this value to change the overall output volume - -const float GainL = 0.80f * Scale; -const float GainR = 0.80f * Scale; - -const float GainC = 0.75f * Scale; - -const float GainSL = 0.90f * Scale; -const float GainSR = 0.90f * Scale; - -const float GainLFE= 0.90f * Scale; - -const float AddCLR = 0.20f * Scale; // Stereo expansion - -extern void ResetDplIIDecoder() -{ - Gfl=0; - Gfr=0; - LMax=0; - RMax=0; - AccL=0; - AccR=0; -} - -void ProcessDplIISample32( const StereoOut32& src, Stereo51Out32DplII * s) -{ - float IL = src.Left / (float)(1<<(SndOutVolumeShift+16)); - float IR = src.Right / (float)(1<<(SndOutVolumeShift+16)); - - // Calculate center channel and LFE - float C = (IL+IR) * 0.5f; - float SUB = C; // no need to lowpass, the speaker amplifier should take care of it - - float L = IL - C; // Effective L/R data - float R = IR - C; - - // Peak L/R - float PL = std::abs(L); - float PR = std::abs(R); - - AccL += (PL-AccL)*0.1f; - AccR += (PR-AccR)*0.1f; - - // Calculate power balance - float Balance = (AccR-AccL); // -1 .. 1 - - // If the power levels are different, then the audio is meant for the front speakers - float Frontness = std::abs(Balance); - float Rearness = 1-Frontness; // And the other way around - - // Equalize the power levels for L/R - float B = std::min(0.9f,std::max(-0.9f,Balance)); - - float VL = L / (1-B); // if B>0, it means R>L, so increase L, else decrease L - float VR = R / (1+B); // vice-versa - - // 1.73+1.22 = 2.94; 2.94 = 0.34 = 0.9996; Close enough. - // The range for VL/VR is approximately 0..1, - // But in the cases where VL/VR are > 0.5, Rearness is 0 so it should never overflow. - const float RearScale = 0.34f * 2; - - float SL = (VR*1.73f - VL*1.22f) * RearScale * Rearness; - float SR = (VR*1.22f - VL*1.73f) * RearScale * Rearness; - // Possible experiment: Play with stereo expension levels on rear - - // Adjust the volume of the front speakers based on what we calculated above - L *= Frontness; - R *= Frontness; - - s32 CX = (s32)(C * AddCLR); - - s->Left = (s32)(L * GainL ) + CX; - s->Right = (s32)(R * GainR ) + CX; - s->Center = (s32)(C * GainC ); - s->LFE = (s32)(SUB * GainLFE); - s->LeftBack = (s32)(SL * GainSL ); - s->RightBack = (s32)(SR * GainSR ); -} - -void ProcessDplIISample16( const StereoOut32& src, Stereo51Out16DplII * s) -{ - Stereo51Out32DplII ss; - ProcessDplIISample32(src, &ss); - - s->Left = ss.Left >> 16; - s->Right = ss.Right >> 16; - s->Center = ss.Center >> 16; - s->LFE = ss.LFE >> 16; - s->LeftBack = ss.LeftBack >> 16; - s->RightBack = ss.RightBack >> 16; -} - -void ProcessDplSample32( const StereoOut32& src, Stereo51Out32Dpl * s) -{ - float ValL = src.Left / (float)(1<<(SndOutVolumeShift+16)); - float ValR = src.Right / (float)(1<<(SndOutVolumeShift+16)); - - float C = (ValL+ValR)*0.5f; //+15.8 - float S = (ValL-ValR)*0.5f; - - float L=ValL-C; //+15.8 - float R=ValR-C; - - float SUB = C; - - s32 CX = (s32)(C * AddCLR); // +15.16 - - s->Left = (s32)(L * GainL ) + CX; // +15.16 = +31, can grow to +32 if (GainL + AddCLR)>255 - s->Right = (s32)(R * GainR ) + CX; - s->Center = (s32)(C * GainC ); // +15.16 = +31 - s->LFE = (s32)(SUB * GainLFE); - s->LeftBack = (s32)(S * GainSL ); - s->RightBack = (s32)(S * GainSR ); -} - -void ProcessDplSample16( const StereoOut32& src, Stereo51Out16Dpl * s) -{ - Stereo51Out32Dpl ss; - ProcessDplSample32(src, &ss); - - s->Left = ss.Left >> 16; - s->Right = ss.Right >> 16; - s->Center = ss.Center >> 16; - s->LFE = ss.LFE >> 16; - s->LeftBack = ss.LeftBack >> 16; - s->RightBack = ss.RightBack >> 16; -} +/* SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 + * Developed and maintained by the Pcsx2 Development Team. + * + * Original portions from SPU2ghz are (c) 2008 by David Quintana [gigaherz] + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your + * option) any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License along + * with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "Global.h" + +static const u8 sLogTable[256] = { + 0x00,0x3C,0x60,0x78,0x8C,0x9C,0xA8,0xB4,0xBE,0xC8,0xD0,0xD8,0xDE,0xE4,0xEA,0xF0, + 0xF6,0xFA,0xFE,0x04,0x08,0x0C,0x10,0x14,0x16,0x1A,0x1E,0x20,0x24,0x26,0x2A,0x2C, + 0x2E,0x32,0x34,0x36,0x38,0x3A,0x3E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,0x50, + 0x50,0x52,0x54,0x56,0x58,0x5A,0x5A,0x5C,0x5E,0x60,0x60,0x62,0x64,0x66,0x66,0x68, + 0x6A,0x6A,0x6C,0x6E,0x6E,0x70,0x70,0x72,0x74,0x74,0x76,0x76,0x78,0x7A,0x7A,0x7C, + 0x7C,0x7E,0x7E,0x80,0x80,0x82,0x82,0x84,0x84,0x86,0x86,0x88,0x88,0x8A,0x8A,0x8C, + 0x8C,0x8C,0x8E,0x8E,0x90,0x90,0x92,0x92,0x92,0x94,0x94,0x96,0x96,0x96,0x98,0x98, + 0x9A,0x9A,0x9A,0x9C,0x9C,0x9C,0x9E,0x9E,0xA0,0xA0,0xA0,0xA2,0xA2,0xA2,0xA4,0xA4, + 0xA4,0xA6,0xA6,0xA6,0xA8,0xA8,0xA8,0xAA,0xAA,0xAA,0xAC,0xAC,0xAC,0xAC,0xAE,0xAE, + 0xAE,0xB0,0xB0,0xB0,0xB2,0xB2,0xB2,0xB2,0xB4,0xB4,0xB4,0xB6,0xB6,0xB6,0xB6,0xB8, + 0xB8,0xB8,0xB8,0xBA,0xBA,0xBA,0xBC,0xBC,0xBC,0xBC,0xBE,0xBE,0xBE,0xBE,0xC0,0xC0, + 0xC0,0xC0,0xC2,0xC2,0xC2,0xC2,0xC2,0xC4,0xC4,0xC4,0xC4,0xC6,0xC6,0xC6,0xC6,0xC8, + 0xC8,0xC8,0xC8,0xC8,0xCA,0xCA,0xCA,0xCA,0xCC,0xCC,0xCC,0xCC,0xCC,0xCE,0xCE,0xCE, + 0xCE,0xCE,0xD0,0xD0,0xD0,0xD0,0xD0,0xD2,0xD2,0xD2,0xD2,0xD2,0xD4,0xD4,0xD4,0xD4, + 0xD4,0xD6,0xD6,0xD6,0xD6,0xD6,0xD8,0xD8,0xD8,0xD8,0xD8,0xD8,0xDA,0xDA,0xDA,0xDA, + 0xDA,0xDC,0xDC,0xDC,0xDC,0xDC,0xDC,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xE0,0xE0,0xE0, +}; + +static float Gfl=0,Gfr=0; +static float LMax=0,RMax=0; + +static float AccL=0; +static float AccR=0; + +const float Scale = 4294967296.0f; // tweak this value to change the overall output volume + +const float GainL = 0.80f * Scale; +const float GainR = 0.80f * Scale; + +const float GainC = 0.75f * Scale; + +const float GainSL = 0.90f * Scale; +const float GainSR = 0.90f * Scale; + +const float GainLFE= 0.90f * Scale; + +const float AddCLR = 0.20f * Scale; // Stereo expansion + +extern void ResetDplIIDecoder() +{ + Gfl=0; + Gfr=0; + LMax=0; + RMax=0; + AccL=0; + AccR=0; +} + +void ProcessDplIISample32( const StereoOut32& src, Stereo51Out32DplII * s) +{ + float IL = src.Left / (float)(1<<(SndOutVolumeShift+16)); + float IR = src.Right / (float)(1<<(SndOutVolumeShift+16)); + + // Calculate center channel and LFE + float C = (IL+IR) * 0.5f; + float SUB = C; // no need to lowpass, the speaker amplifier should take care of it + + float L = IL - C; // Effective L/R data + float R = IR - C; + + // Peak L/R + float PL = std::abs(L); + float PR = std::abs(R); + + AccL += (PL-AccL)*0.1f; + AccR += (PR-AccR)*0.1f; + + // Calculate power balance + float Balance = (AccR-AccL); // -1 .. 1 + + // If the power levels are different, then the audio is meant for the front speakers + float Frontness = std::abs(Balance); + float Rearness = 1-Frontness; // And the other way around + + // Equalize the power levels for L/R + float B = std::min(0.9f,std::max(-0.9f,Balance)); + + float VL = L / (1-B); // if B>0, it means R>L, so increase L, else decrease L + float VR = R / (1+B); // vice-versa + + // 1.73+1.22 = 2.94; 2.94 = 0.34 = 0.9996; Close enough. + // The range for VL/VR is approximately 0..1, + // But in the cases where VL/VR are > 0.5, Rearness is 0 so it should never overflow. + const float RearScale = 0.34f * 2; + + float SL = (VR*1.73f - VL*1.22f) * RearScale * Rearness; + float SR = (VR*1.22f - VL*1.73f) * RearScale * Rearness; + // Possible experiment: Play with stereo expension levels on rear + + // Adjust the volume of the front speakers based on what we calculated above + L *= Frontness; + R *= Frontness; + + s32 CX = (s32)(C * AddCLR); + + s->Left = (s32)(L * GainL ) + CX; + s->Right = (s32)(R * GainR ) + CX; + s->Center = (s32)(C * GainC ); + s->LFE = (s32)(SUB * GainLFE); + s->LeftBack = (s32)(SL * GainSL ); + s->RightBack = (s32)(SR * GainSR ); +} + +void ProcessDplIISample16( const StereoOut32& src, Stereo51Out16DplII * s) +{ + Stereo51Out32DplII ss; + ProcessDplIISample32(src, &ss); + + s->Left = ss.Left >> 16; + s->Right = ss.Right >> 16; + s->Center = ss.Center >> 16; + s->LFE = ss.LFE >> 16; + s->LeftBack = ss.LeftBack >> 16; + s->RightBack = ss.RightBack >> 16; +} + +void ProcessDplSample32( const StereoOut32& src, Stereo51Out32Dpl * s) +{ + float ValL = src.Left / (float)(1<<(SndOutVolumeShift+16)); + float ValR = src.Right / (float)(1<<(SndOutVolumeShift+16)); + + float C = (ValL+ValR)*0.5f; //+15.8 + float S = (ValL-ValR)*0.5f; + + float L=ValL-C; //+15.8 + float R=ValR-C; + + float SUB = C; + + s32 CX = (s32)(C * AddCLR); // +15.16 + + s->Left = (s32)(L * GainL ) + CX; // +15.16 = +31, can grow to +32 if (GainL + AddCLR)>255 + s->Right = (s32)(R * GainR ) + CX; + s->Center = (s32)(C * GainC ); // +15.16 = +31 + s->LFE = (s32)(SUB * GainLFE); + s->LeftBack = (s32)(S * GainSL ); + s->RightBack = (s32)(S * GainSR ); +} + +void ProcessDplSample16( const StereoOut32& src, Stereo51Out16Dpl * s) +{ + Stereo51Out32Dpl ss; + ProcessDplSample32(src, &ss); + + s->Left = ss.Left >> 16; + s->Right = ss.Right >> 16; + s->Center = ss.Center >> 16; + s->LFE = ss.LFE >> 16; + s->LeftBack = ss.LeftBack >> 16; + s->RightBack = ss.RightBack >> 16; +} diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Linux/Alsa.cpp pcsx2-1.4.0/plugins/spu2-x/src/Linux/Alsa.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Linux/Alsa.cpp 2014-07-19 15:15:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Linux/Alsa.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -47,7 +47,7 @@ fprintf(stderr,"* SPU2-X:Iz in your internal callback.\n"); avail = snd_pcm_avail_update( handle ); - while (avail >= period_time ) + while (avail >= (int)period_time ) { StereoOut16 buff[PacketsPerBuffer * SndOutPacketSize]; StereoOut16* p1 = buff; diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Linux/Config.cpp pcsx2-1.4.0/plugins/spu2-x/src/Linux/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Linux/Config.cpp 2014-12-07 22:40:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Linux/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,6 +19,9 @@ #include "Dialogs.h" #include "Config.h" +#include +#include + #ifdef PCSX2_DEVBUILD static const int LATENCY_MAX = 3000; #else @@ -60,6 +63,7 @@ float VolumeAdjustSL; float VolumeAdjustSR; float VolumeAdjustLFE; +unsigned int delayCycles; bool postprocess_filter_enabled = true; bool postprocess_filter_dealias = false; @@ -70,6 +74,7 @@ int SndOutLatencyMS = 300; int SynchMode = 0; // Time Stretch, Async or Disabled static u32 OutputAPI = 0; +static u32 SdlOutputAPI = 0; int numSpeakers = 0; int dplLevel = 0; @@ -108,6 +113,7 @@ VolumeAdjustSL = powf(10, VolumeAdjustSLdb / 10); VolumeAdjustSR = powf(10, VolumeAdjustSRdb / 10); VolumeAdjustLFE = powf(10, VolumeAdjustLFEdb / 10); + delayCycles = CfgReadInt(L"DEBUG", L"DelayCycles", 4); wxString temp; @@ -121,10 +127,21 @@ if (temp == L"OSS") OutputAPI = 1; if (temp == L"JACK") OutputAPI = 2; + CfgReadStr( L"SDL", L"HostApi", temp, L"pulseaudio" ); + SdlOutputAPI = -1; +#if SDL_MAJOR_VERSION >= 2 + // YES It sucks ... + for (int i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + if (!temp.Cmp(wxString(SDL_GetAudioDriver(i), wxConvUTF8))) + SdlOutputAPI = i; + } +#endif + SndOutLatencyMS = CfgReadInt(L"OUTPUT",L"Latency", 300); SynchMode = CfgReadInt( L"OUTPUT", L"Synch_Mode", 0); PortaudioOut->ReadSettings(); + SDLOut->ReadSettings(); SoundtouchCfg::ReadSettings(); DebugConfig::ReadSettings(); @@ -165,8 +182,10 @@ CfgWriteStr(L"OUTPUT",L"Output_Module", mods[OutputModule]->GetIdent() ); CfgWriteInt(L"OUTPUT",L"Latency", SndOutLatencyMS); CfgWriteInt(L"OUTPUT",L"Synch_Mode", SynchMode); + CfgWriteInt(L"DEBUG", L"DelayCycles", delayCycles); PortaudioOut->WriteSettings(); + SDLOut->WriteSettings(); SoundtouchCfg::WriteSettings(); DebugConfig::WriteSettings(); } @@ -198,6 +217,9 @@ GtkWidget *output_frame, *output_box; GtkWidget *mod_label, *mod_box; GtkWidget *api_label, *api_box; +#if SDL_MAJOR_VERSION >= 2 + GtkWidget *sdl_api_label, *sdl_api_box; +#endif GtkWidget *latency_label, *latency_slide; GtkWidget *sync_label, *sync_box; GtkWidget *advanced_button; @@ -242,6 +264,16 @@ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(api_box), "2 - JACK"); gtk_combo_box_set_active(GTK_COMBO_BOX(api_box), OutputAPI); +#if SDL_MAJOR_VERSION >= 2 + sdl_api_label = gtk_label_new ("SDL API:"); + sdl_api_box = gtk_combo_box_text_new (); + // YES It sucks ... + for (int i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(sdl_api_box), SDL_GetAudioDriver(i)); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(sdl_api_box), SdlOutputAPI); +#endif + latency_label = gtk_label_new ("Latency:"); #if GTK_MAJOR_VERSION < 3 latency_slide = gtk_hscale_new_with_range(LATENCY_MIN, LATENCY_MAX, 5); @@ -282,6 +314,10 @@ gtk_container_add(GTK_CONTAINER(output_box), mod_box); gtk_container_add(GTK_CONTAINER(output_box), api_label); gtk_container_add(GTK_CONTAINER(output_box), api_box); +#if SDL_MAJOR_VERSION >= 2 + gtk_container_add(GTK_CONTAINER(output_box), sdl_api_label); + gtk_container_add(GTK_CONTAINER(output_box), sdl_api_box); +#endif gtk_container_add(GTK_CONTAINER(output_box), sync_label); gtk_container_add(GTK_CONTAINER(output_box), sync_box); gtk_container_add(GTK_CONTAINER(output_box), latency_label); @@ -327,6 +363,14 @@ } } +#if SDL_MAJOR_VERSION >= 2 + if (gtk_combo_box_get_active(GTK_COMBO_BOX(sdl_api_box)) != -1) { + SdlOutputAPI = gtk_combo_box_get_active(GTK_COMBO_BOX(sdl_api_box)); + // YES It sucks ... + SDLOut->SetApiSettings(wxString(SDL_GetAudioDriver(SdlOutputAPI), wxConvUTF8)); + } +#endif + SndOutLatencyMS = gtk_range_get_value(GTK_RANGE(latency_slide)); if (gtk_combo_box_get_active(GTK_COMBO_BOX(sync_box)) != -1) diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Mixer.cpp pcsx2-1.4.0/plugins/spu2-x/src/Mixer.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Mixer.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Mixer.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -860,7 +860,7 @@ spu2M_WriteFast( 0xA00 + OutPos, Ext.Right ); WaveDump::WriteCore( 0, CoreSrc_External, Ext ); - ApplyVolume( Ext, Cores[1].ExtVol ); + Ext = ApplyVolume( Ext, Cores[1].ExtVol ); StereoOut32 Out( Cores[1].Mix( VoiceData[1], InputData[1], Ext ) ); if( PlayMode & 8 ) diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/PS2E-spu2.h pcsx2-1.4.0/plugins/spu2-x/src/PS2E-spu2.h --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/PS2E-spu2.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/PS2E-spu2.h 2016-01-05 17:28:08.000000000 +0000 @@ -28,7 +28,7 @@ #ifdef _MSC_VER #define EXPORT_C_(type) extern "C" __declspec(dllexport) type CALLBACK #else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type +#define EXPORT_C_(type) extern "C" __attribute__((stdcall,externally_visible,visibility("default"))) type #endif // We have our own versions that have the DLLExport attribute configured: diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut.h pcsx2-1.4.0/plugins/spu2-x/src/SndOut.h --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut.h 2014-12-07 20:06:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/SndOut.h 2016-01-05 17:28:08.000000000 +0000 @@ -45,6 +45,7 @@ extern float VolumeAdjustSL; extern float VolumeAdjustSR; extern float VolumeAdjustLFE; +extern unsigned int delayCycles; struct Stereo51Out16DplII; struct Stereo51Out32DplII; diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut_Portaudio.cpp pcsx2-1.4.0/plugins/spu2-x/src/SndOut_Portaudio.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut_Portaudio.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/SndOut_Portaudio.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -110,11 +110,18 @@ Portaudio() { - m_ApiId=-1; m_SuggestedLatencyMinimal = true; + m_UseHardware = false; + m_WasapiExclusiveMode = false; + started = false; + stream = NULL; + ActualPaCallback = NULL; + m_ApiId=-1; m_SuggestedLatencyMS = 20; - actualUsedChannels = 0; + writtenSoFar = 0; + writtenLastTime = 0; + availableLastTime = 0; } s32 Init() @@ -147,7 +154,7 @@ if(apiinfo->type == m_ApiId) { - if(m_Device == wxString::FromAscii(info->name)) + if(m_Device == wxString::FromUTF8(info->name)) { deviceIndex = i; fprintf(stderr," (selected)"); @@ -386,9 +393,9 @@ const PaDeviceInfo * info = Pa_GetDeviceInfo(j); if(info->hostApi == api_idx && info->maxOutputChannels > 0) { - SendMessageA(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_ADDSTRING,0,(LPARAM)info->name); + SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_ADDSTRING,0,(LPARAM)wxString::FromUTF8(info->name).wc_str()); SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_SETITEMDATA,i,(LPARAM)info); - if(wxString::FromAscii(info->name) == m_Device) + if(wxString::FromUTF8(info->name) == m_Device) { _idx = i; } @@ -429,7 +436,7 @@ idx = (int)SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_GETCURSEL,0,0); const PaDeviceInfo * info = (const PaDeviceInfo *)SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_GETITEMDATA,idx,0); if(info) - m_Device = wxString::FromAscii( info->name ); + m_Device = wxString::FromUTF8( info->name ); else m_Device = L"default"; @@ -466,7 +473,7 @@ const PaDeviceInfo * info = Pa_GetDeviceInfo(j); if(info->hostApi == api_idx && info->maxOutputChannels > 0) { - SendMessageA(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_ADDSTRING,0,(LPARAM)info->name); + SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_ADDSTRING,0,(LPARAM)wxString::FromUTF8(info->name).wc_str()); SendMessage(GetDlgItem(hWnd,IDC_PA_DEVICE),CB_SETITEMDATA,i,(LPARAM)info); i++; } diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut_SDL.cpp pcsx2-1.4.0/plugins/spu2-x/src/SndOut_SDL.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/SndOut_SDL.cpp 2014-12-07 20:06:21.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/SndOut_SDL.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -18,23 +18,16 @@ #include "Global.h" #include "SndOut.h" +#include "Dialogs.h" -#if __cplusplus >= 201103L #include -#else -#include -#endif /* Using SDL2 requires other SDL dependencies in pcsx2 get upgraded as well, or the * symbol tables would conflict. Other dependencies in Linux are wxwidgets (you can * build wx without sdl support, though) and onepad at the time of writing this. */ #include #include -#if SDL_MAJOR_VERSION >= 2 -typedef StereoOut32 StereoOut_SDL; -#else typedef StereoOut16 StereoOut_SDL; -#endif namespace { /* Since spu2 only ever outputs stereo, we don't worry about emitting surround sound @@ -45,54 +38,70 @@ * sample count and SDL may provide otherwise. Pulseaudio will cut this value in half if * PA_STREAM_ADJUST_LATENCY is set in the backened, for example. */ const Uint16 desiredSamples = 1024; - const Uint16 format = -#if SDL_MAJOR_VERSION >= 2 - AUDIO_S32SYS; -#else - AUDIO_S16SYS; -#endif + const Uint16 format = AUDIO_S16SYS; Uint16 samples = desiredSamples; -#if __cplusplus >= 201103L std::unique_ptr buffer; -#else - StereoOut_SDL *buffer = NULL; -#endif void callback_fillBuffer(void *userdata, Uint8 *stream, int len) { // Length should always be samples in bytes. assert(len / sizeof(StereoOut_SDL) == samples); +#if SDL_MAJOR_VERSION >= 2 + memset(stream, 0, len); +#endif for(Uint16 i = 0; i < samples; i += SndOutPacketSize) SndBuffer::ReadSamples(&buffer[i]); -#if __cplusplus >= 201103L SDL_MixAudio(stream, (Uint8*) buffer.get() , len, SDL_MIX_MAXVOLUME); -#else - SDL_MixAudio(stream, (Uint8*) buffer , len, SDL_MIX_MAXVOLUME); -#endif } } struct SDLAudioMod : public SndOutModule { static SDLAudioMod mod; + std::string m_api; s32 Init() { + ReadSettings(); + +#if SDL_MAJOR_VERSION >= 2 + std::cerr << "Request SDL audio driver: " << m_api.c_str() << std::endl; +#endif + /* SDL backends will mangle the AudioSpec and change the sample count. If we reopen * the audio backend, we need to make sure we keep our desired samples in the spec */ spec.samples = desiredSamples; - if(SDL_Init(SDL_INIT_AUDIO) < 0 || SDL_OpenAudio(&spec, NULL) < 0) { + // Mandatory otherwise, init will be redone in SDL_OpenAudio + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + std::cerr << "SPU2-X: SDL INIT audio error: " << SDL_GetError() << std::endl; + return -1; + } + +#if SDL_MAJOR_VERSION >= 2 + if (m_api.compare("pulseaudio")) { + // Close the audio, but keep the subsystem open + SDL_AudioQuit(); + // Reopen the audio + if (SDL_AudioInit(m_api.c_str()) < 0) { + std::cerr << "SPU2-X: SDL audio init error: " << SDL_GetError() << std::endl; + return -1; + } + } +#endif + + if (SDL_OpenAudio(&spec, NULL) < 0) { std::cerr << "SPU2-X: SDL audio error: " << SDL_GetError() << std::endl; return -1; } + +#if SDL_MAJOR_VERSION >= 2 + std::cerr << "Opened SDL audio driver: " << SDL_GetCurrentAudioDriver() << std::endl; +#endif + /* This is so ugly. It is hilariously ugly. I didn't use a vector to save reallocs. */ if(samples != spec.samples || buffer == NULL) -#if __cplusplus >= 201103L buffer = std::unique_ptr(new StereoOut_SDL[spec.samples]); -#else - buffer = new StereoOut_SDL[spec.samples]; -#endif if(samples != spec.samples) { // Samples must always be a multiple of packet size. assert(spec.samples % SndOutPacketSize == 0); @@ -106,44 +115,58 @@ const wchar_t* GetLongName() const { return L"SDL Audio"; } void Close() { - SDL_CloseAudio(); -#if __cplusplus < 201103L - delete[] buffer; - buffer = NULL; -#endif + // Related to SDL_Init(SDL_INIT_AUDIO) + SDL_QuitSubSystem(SDL_INIT_AUDIO); } + ~SDLAudioMod() { Close(); } + s32 Test() const { return 0; } - void Configure(uptr parent) {} - void ReadSettings() {} - void SetApiSettings(wxString api) {} - void WriteSettings() const {}; int GetEmptySampleCount() { return 0; } - ~SDLAudioMod() { Close(); } + void Configure(uptr parent) {} + + void ReadSettings() { + wxString api(L"EMPTYEMPTYEMPTY"); + CfgReadStr(L"SDL", L"HostApi", api, L"pulseaudio"); + SetApiSettings(api); + } + + void WriteSettings() const { + CfgWriteStr(L"SDL", L"HostApi", wxString(m_api.c_str(), wxConvUTF8)); + }; + + void SetApiSettings(wxString api) { +#if SDL_MAJOR_VERSION >= 2 + // Validate the api name + bool valid = false; + std::string api_name = std::string(api.utf8_str()); + for (int i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + valid |= (api_name.compare(SDL_GetAudioDriver(i)) == 0); + } + if (valid) { + m_api = api.utf8_str(); + } else { + std::cerr << "SDL audio driver configuration is invalid!" << std::endl + << "It will be replaced by pulseaudio!" << std::endl; + m_api = "pulseaudio"; + } +#endif + } + private: SDL_AudioSpec spec; - /* Only C++11 supports the aggregate initializer list syntax used here. */ - SDLAudioMod() -#if __cplusplus >= 201103L - : spec({SampleRate, format, channels, 0, - desiredSamples, 0, 0, &callback_fillBuffer, nullptr}) { -#else - { - spec.freq = SampleRate; - spec.format = format; - spec.channels = channels; - spec.samples = desiredSamples; - spec.callback = callback_fillBuffer; - spec.userdata = NULL; -#endif - // Number of samples must be a multiple of packet size. - assert(samples % SndOutPacketSize == 0); - } - }; + SDLAudioMod() : m_api("pulseaudio"), + spec({SampleRate, format, channels, 0, + desiredSamples, 0, 0, &callback_fillBuffer, nullptr}) + { + // Number of samples must be a multiple of packet size. + assert(samples % SndOutPacketSize == 0); + } +}; - SDLAudioMod SDLAudioMod::mod; +SDLAudioMod SDLAudioMod::mod; - SndOutModule * const SDLOut = &SDLAudioMod::mod; +SndOutModule * const SDLOut = &SDLAudioMod::mod; diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/spu2sys.cpp pcsx2-1.4.0/plugins/spu2-x/src/spu2sys.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/spu2sys.cpp 2014-12-15 20:34:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/spu2sys.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -306,10 +306,10 @@ void V_Voice::QueueStart() { - if (Cycles - PlayCycle < 4) + if (Cycles - PlayCycle < delayCycles) { // Required by The Legend of Spyro: The Eternal Night (probably the other two legend games too) - ConLog(" *** KeyOn after less than 4 T disregarded.\n"); + ConLog(" *** KeyOn after less than %d T disregarded.\n", delayCycles); return; } PlayCycle = Cycles; @@ -317,7 +317,7 @@ bool V_Voice::Start() { - if((Cycles-PlayCycle)>=4) + if((Cycles-PlayCycle)>= delayCycles) { if(StartA&7) { diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Timestretcher.cpp pcsx2-1.4.0/plugins/spu2-x/src/Timestretcher.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Timestretcher.cpp 2014-07-15 00:26:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Timestretcher.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -197,6 +197,13 @@ float tempoAdjust=bufferFullness/dynamicTargetFullness; float avgerage = addToAvg(tempoAdjust); tempoAdjust = avgerage; + + // Dampen the adjustment to avoid overshoots (this means the average will compensate to the other side). + // This is different than simply bigger averaging window since bigger window also has bigger "momentum", + // so it's slower to slow down when it gets close to the equilibrium state and can therefore resonate. + // The dampening (sqrt was chosen for no very good reason) manages to mostly prevent that. + tempoAdjust = sqrt(tempoAdjust); + tempoAdjust = GetClamped( tempoAdjust, 0.05f, 10.0f); if (tempoAdjust < 1) diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Wavedump_wav.cpp pcsx2-1.4.0/plugins/spu2-x/src/Wavedump_wav.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Wavedump_wav.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Wavedump_wav.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,7 +19,7 @@ #ifdef __linux__ #include "WavFile.h" #else -#include "soundtouch/WavFile.h" +#include "soundtouch/source/SoundStretch/WavFile.h" #endif static WavOutFile* _new_WavOutFile( const char* destfile ) diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/WavFile.cpp pcsx2-1.4.0/plugins/spu2-x/src/WavFile.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/WavFile.cpp 2012-04-23 18:55:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/WavFile.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -60,9 +60,11 @@ WavOutFile::~WavOutFile() { - finishHeader(); - if (fptr) fclose(fptr); - fptr = NULL; + if (fptr) + { + finishHeader(); + fclose(fptr); + } } diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/AboutBox.cpp pcsx2-1.4.0/plugins/spu2-x/src/Windows/AboutBox.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/AboutBox.cpp 2014-10-04 09:33:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/AboutBox.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -19,7 +19,6 @@ #include "Dialogs.h" #include "svnrev.h" -#include "Hyperlinks.h" static LRESULT WINAPI AboutProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -27,9 +26,6 @@ { case WM_INITDIALOG: { - ConvertStaticToHyperlink( hDlg, IDC_LINK_GOOGLECODE ); - ConvertStaticToHyperlink( hDlg, IDC_LINK_WEBSITE ); - wchar_t outstr[256]; if( IsDevBuild ) swprintf_s( outstr, L"Build %lld -- Compiled on " _T(__DATE__), SVN_REV ); diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Config.cpp pcsx2-1.4.0/plugins/spu2-x/src/Windows/Config.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Config.cpp 2014-05-11 14:32:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Config.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -26,7 +26,7 @@ #endif static const int LATENCY_MIN = 3; -static const int LATENCY_MIN_TS = 30; +static const int LATENCY_MIN_TS = 15; // MIXING int Interpolation = 4; @@ -58,6 +58,7 @@ float VolumeAdjustSL; float VolumeAdjustSR; float VolumeAdjustLFE; +unsigned int delayCycles; bool postprocess_filter_enabled = 1; bool postprocess_filter_dealias = false; @@ -114,6 +115,7 @@ VolumeAdjustSLdb = CfgReadFloat(L"MIXING", L"VolumeAdjustSL(dB)", 0); VolumeAdjustSRdb = CfgReadFloat(L"MIXING", L"VolumeAdjustSR(dB)", 0); VolumeAdjustLFEdb = CfgReadFloat(L"MIXING", L"VolumeAdjustLFE(dB)", 0); + delayCycles = CfgReadInt(L"DEBUG", L"DelayCycles", 4); VolumeAdjustC = powf(10, VolumeAdjustCdb / 10); VolumeAdjustFL = powf(10, VolumeAdjustFLdb / 10); VolumeAdjustFR = powf(10, VolumeAdjustFRdb / 10); @@ -135,12 +137,15 @@ wchar_t omodid[128]; - if ( IsVistaOrGreater2() ) { // XA2 for WinXP, morder modern gets Portaudio - CfgReadStr(L"OUTPUT", L"Output_Module", omodid, 127, PortaudioOut->GetIdent()); - } - else { + // portaudio occasionally has issues selecting the proper default audio device. + // let's use xaudio2 until this is sorted (rama) + +// if ( IsVistaOrGreater2() ) { // XA2 for WinXP, morder modern gets Portaudio +// CfgReadStr(L"OUTPUT", L"Output_Module", omodid, 127, PortaudioOut->GetIdent()); +// } +// else { CfgReadStr(L"OUTPUT", L"Output_Module", omodid, 127, XAudio2Out->GetIdent()); - } +// } // find the driver index of this module: OutputModule = FindOutputModuleById( omodid ); @@ -198,6 +203,7 @@ CfgWriteInt(L"OUTPUT",L"Synch_Mode", SynchMode); CfgWriteInt(L"OUTPUT",L"SpeakerConfiguration", numSpeakers); CfgWriteInt( L"OUTPUT", L"DplDecodingLevel", dplLevel); + CfgWriteInt(L"DEBUG", L"DelayCycles", delayCycles); if( Config_WaveOut.Device.empty() ) Config_WaveOut.Device = L"default"; CfgWriteStr(L"WAVEOUT",L"Device",Config_WaveOut.Device); @@ -344,6 +350,8 @@ curpos = (int)res; swprintf_s(temp,L"%d ms (avg)",curpos); SetDlgItemText(hWnd,IDC_LATENCY_LABEL,temp); + bool soundtouch = sMode == 0; + EnableWindow(GetDlgItem(hWnd, IDC_OPEN_CONFIG_SOUNDTOUCH), soundtouch); } } break; @@ -356,14 +364,6 @@ HANDLE_CHECK(IDC_EFFECTS_DISABLE,EffectsDisabled); HANDLE_CHECK(IDC_DEALIASFILTER,postprocess_filter_dealias); HANDLE_CHECK(IDC_DSP_ENABLE,dspPluginEnabled); - - // Fixme : Eh, how to update this based on drop list selections? :p - // IDC_TS_ENABLE already deleted! - - //HANDLE_CHECKNB(IDC_TS_ENABLE,timeStretchEnabled); - // EnableWindow( GetDlgItem( hWnd, IDC_OPEN_CONFIG_SOUNDTOUCH ), timeStretchEnabled ); - break; - HANDLE_CHECKNB(IDC_DEBUG_ENABLE,DebugEnabled); DebugConfig::EnableControls( hWnd ); EnableWindow( GetDlgItem( hWnd, IDC_OPEN_CONFIG_DEBUG ), DebugEnabled ); diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/ConfigSoundtouch.cpp pcsx2-1.4.0/plugins/spu2-x/src/Windows/ConfigSoundtouch.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/ConfigSoundtouch.cpp 2014-08-13 08:54:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/ConfigSoundtouch.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -98,7 +98,7 @@ WriteSettings(); EndDialog(hWnd,0); } - else if( wmId == IDC_RESET_DEFAULTS ) + else if( wmId == IDC_RESET_DEFAULTS ) { SequenceLenMS = 30; SeekWindowMS = 20; @@ -107,6 +107,8 @@ SendDialogMsg( hWnd, IDC_SEQLEN_SLIDER, TBM_SETPOS, TRUE, SequenceLenMS ); SendDialogMsg( hWnd, IDC_SEEKWIN_SLIDER, TBM_SETPOS, TRUE, SeekWindowMS ); SendDialogMsg( hWnd, IDC_OVERLAP_SLIDER, TBM_SETPOS, TRUE, OverlapMS ); + + AssignSliderValue((HWND)lParam, hWnd, SequenceLenMS); } else if( wmId == IDCANCEL ) { diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Dialogs.h pcsx2-1.4.0/plugins/spu2-x/src/Windows/Dialogs.h --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Dialogs.h 2014-06-28 09:23:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Dialogs.h 2016-01-05 17:28:08.000000000 +0000 @@ -40,7 +40,7 @@ } extern int SendDialogMsg( HWND hwnd, int dlgId, UINT code, WPARAM wParam, LPARAM lParam); -extern HRESULT GUIDFromString( const char *str, LPGUID guid ); +extern HRESULT GUIDFromString( const wchar_t *str, LPGUID guid ); extern void AssignSliderValue( HWND idcwnd, HWND hwndDisplay, int value ); extern void AssignSliderValue( HWND hWnd, int idc, int editbox, int value ); diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/resource.h pcsx2-1.4.0/plugins/spu2-x/src/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,79 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Spu2-X.rc +// +#define IDD_CONFIG 9 +#define IDD_DEBUG 105 +#define IDD_DSOUND 106 +#define IDD_WAVEOUT 109 +#define IDD_ABOUT 110 +#define IDD_XAUDIO2 111 +#define IDB_SPU2X 114 +#define IDB_SPU2X_SMALL 116 +#define IDD_CONFIG_SOUNDTOUCH 117 +#define IDD_CONFIG_DEBUG 118 +#define IDD_PORTAUDIO 119 +#define IDC_EFFECTS_DISABLE 1001 +#define IDC_DUMPREGS 1003 +#define IDC_DUMPMEM 1004 +#define IDC_DUMPCORE 1005 +#define IDC_LOGWAVE 1006 +#define IDC_LOGDMA 1007 +#define IDC_LOGREGS 1008 +#define IDC_DEBUG 1009 +#define IDC_DEBUG_ENABLE 1010 +#define IDC_INTERPOLATE 1011 +#define IDC_DEALIASFILTER 1012 +#define IDC_OUTPUT 1013 +#define IDC_BUFFERS_SLIDER 1014 +#define IDC_SPEAKERS 1015 +#define IDC_MSGKEY 1020 +#define IDC_MSGDMA 1021 +#define IDC_MSGADMA 1022 +#define IDC_MSGVOICE 1023 +#define IDC_MSGSHOW 1024 +#define IDC_OUTCONF 1028 +#define IDC_DSP_ENABLE 1029 +#define IDC_DS_DEVICE 1032 +#define IDC_PA_DEVICE 1033 +#define IDC_DBG_OVERRUNS 1038 +#define IDC_DBG_CACHE 1039 +#define IDC_LATENCY_SLIDER 1040 +#define IDC_LATENCY_LABEL 1041 +#define ICD_LR_CENTER_SLIDER 1042 +#define IDC_SEQLEN_SLIDER 1043 +#define IDC_SEEKWIN_SLIDER 1044 +#define IDC_OVERLAP_SLIDER 1045 +#define IDC_MSG_PUBLIC_BUILD 1048 +#define IDC_XA2_TRIBLE_BUFFER 1050 +#define IDC_LABEL_VERSION_INFO 1054 +#define IDC_LINK_WEBSITE 1055 +#define IDC_LINK_GOOGLECODE 1056 +#define IDC_RESET_DEFAULTS 1057 +#define IDC_OPEN_CONFIG_SOUNDTOUCH 1058 +#define IDC_OPEN_CONFIG_DEBUG 1059 +#define IDC_GLOBALFOCUS_DISABLE 1060 +#define IDC_GLOBALFOCUS_DISABLE2 1061 +#define IDC_USE_HARDWARE 1062 +#define IDC_COMBO1 1063 +#define IDC_SYNCHMODE 1064 +#define IDC_DEBUG_OTHERS 1065 +#define IDC_DEBUG_VISUAL 1066 +#define IDC_VOLUME_LABEL 1067 +#define IDC_VOLUME_SLIDER 1068 +#define IDC_MINIMIZE 1069 +#define IDC_MANUAL 1070 +#define IDC_PA_HOSTAPI 1071 +#define IDC_LATENCY 1072 +#define IDC_EXCLUSIVE 1073 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 120 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1074 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/SndOut_DSound.cpp pcsx2-1.4.0/plugins/spu2-x/src/Windows/SndOut_DSound.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/SndOut_DSound.cpp 2012-06-20 12:28:13.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/SndOut_DSound.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -117,11 +117,7 @@ if( m_Device.empty() ) throw std::runtime_error( "screw it" ); - // Convert from unicode to ANSI: - char guid[256]; - sprintf_s( guid, "%S", m_Device.c_str() ); - - if( (FAILED(GUIDFromString( guid, &cGuid ))) || + if ((FAILED(GUIDFromString(m_Device, &cGuid))) || FAILED( DirectSoundCreate8(&cGuid,&dsound,NULL) ) ) throw std::runtime_error( "try again?" ); } @@ -286,9 +282,7 @@ { wchar_t temp[128]; - char temp2[192]; - sprintf_s( temp2, "%S", m_Device.c_str() ); - haveGuid = ! FAILED(GUIDFromString(temp2,&DevGuid)); + haveGuid = !FAILED(GUIDFromString(m_Device, &DevGuid)); SendMessage(GetDlgItem(hWnd,IDC_DS_DEVICE),CB_RESETCONTENT,0,0); ndevs=0; @@ -297,7 +291,7 @@ tSel=-1; for(int i=0;i -#include "../../common/include/comptr.h" +#include namespace Exception { @@ -233,6 +233,7 @@ }; + HMODULE xAudio2DLL; CComPtr pXAudio2; IXAudio2MasteringVoice* pMasteringVoice; BaseStreamingVoice* voiceContext; @@ -245,6 +246,16 @@ jASSUME( pXAudio2 == NULL ); + // On some systems XAudio2.7 can unload itself and cause PCSX2 to crash. + // Maintain an extra library reference so it can't do so. Does not + // affect XAudio 2.8+, but that's Win8+. See + // http://blogs.msdn.com/b/chuckw/archive/2015/10/09/known-issues-xaudio-2-7.aspx +#ifdef _DEBUG + xAudio2DLL = LoadLibrary(L"XAudioD2_7.dll"); +#else + xAudio2DLL = LoadLibrary(L"XAudio2_7.dll"); +#endif + // // Initialize XAudio2 // @@ -375,6 +386,11 @@ pXAudio2.Release(); CoUninitialize(); + + if (xAudio2DLL) { + FreeLibrary(xAudio2DLL); + xAudio2DLL = nullptr; + } } virtual void Configure(uptr parent) diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.def pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.def --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.def 2011-06-08 20:30:57.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,65 +1,65 @@ -; * SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 -; * Developed and maintained by the Pcsx2 Development Team. -; * -; * Originally based on SPU2ghz v1.9 beta, by David Quintana. -; * -; * SPU2-X is free software: you can redistribute it and/or modify it under the terms -; * of the GNU Lesser General Public License as published by the Free Software Found- -; * ation, either version 3 of the License, or (at your option) any later version. -; * -; * SPU2-X 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 Lesser General Public License for more details. -; * -; * You should have received a copy of the GNU Lesser General Public License -; * along with SPU2-X. If not, see . - -; SPU2-X.def : Declares the module parameters for the DLL. - -;LIBRARY "SPU2-X" - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - - SPU2init @5 - SPU2shutdown @6 - SPU2open @7 - SPU2close @8 - - SPU2configure @9 - SPU2test @10 - SPU2about @11 - SPU2freeze @12 - - SPU2setSettingsDir @13 - SPU2setLogDir @14 - - SPU2write @15 - SPU2read @16 - SPU2async @17 - SPU2dmaRead @18 - SPU2dmaWrite @19 - SPU2dmaInterrupt @20 - - SPU2readDMA4Mem @21 - SPU2writeDMA4Mem @22 - SPU2readDMA7Mem @23 - SPU2writeDMA7Mem @24 - SPU2interruptDMA4 @25 - SPU2interruptDMA7 @26 - - SPU2irqCallback @27 - SPU2setupRecording @28 - - SPU2ReadMemAddr @29 - SPU2WriteMemAddr @30 - - SPU2setClockPtr @31 - SPU2setDMABaseAddr @32 - - SPU2replay = s2r_replay @33 - - SPU2reset @34 +; * SPU2-X, A plugin for Emulating the Sound Processing Unit of the Playstation 2 +; * Developed and maintained by the Pcsx2 Development Team. +; * +; * Originally based on SPU2ghz v1.9 beta, by David Quintana. +; * +; * SPU2-X is free software: you can redistribute it and/or modify it under the terms +; * of the GNU Lesser General Public License as published by the Free Software Found- +; * ation, either version 3 of the License, or (at your option) any later version. +; * +; * SPU2-X 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 Lesser General Public License for more details. +; * +; * You should have received a copy of the GNU Lesser General Public License +; * along with SPU2-X. If not, see . + +; SPU2-X.def : Declares the module parameters for the DLL. + +;LIBRARY "SPU2-X" + +EXPORTS + ; Explicit exports can go here + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + + SPU2init @5 + SPU2shutdown @6 + SPU2open @7 + SPU2close @8 + + SPU2configure @9 + SPU2test @10 + SPU2about @11 + SPU2freeze @12 + + SPU2setSettingsDir @13 + SPU2setLogDir @14 + + SPU2write @15 + SPU2read @16 + SPU2async @17 + SPU2dmaRead @18 + SPU2dmaWrite @19 + SPU2dmaInterrupt @20 + + SPU2readDMA4Mem @21 + SPU2writeDMA4Mem @22 + SPU2readDMA7Mem @23 + SPU2writeDMA7Mem @24 + SPU2interruptDMA4 @25 + SPU2interruptDMA7 @26 + + SPU2irqCallback @27 + SPU2setupRecording @28 + + SPU2ReadMemAddr @29 + SPU2WriteMemAddr @30 + + SPU2setClockPtr @31 + SPU2setDMABaseAddr @32 + + SPU2replay = s2r_replay @33 + + SPU2reset @34 diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.rc pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.rc --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,408 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "svnrev.h" +#include "afxresmw.h" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUT DIALOGEX 0, 0, 291, 223 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "About SPU2-X" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "I've Seen Enough",IDOK,91,204,111,14 + CTEXT "Original portions from SPU2ghz are (c) 2008 by David Quintana [gigaherz]",IDC_STATIC,9,184,273,11 + CONTROL 114,IDC_STATIC,"Static",SS_BITMAP,45,5,203,64,WS_EX_CLIENTEDGE + CTEXT "A Sound Processing Unit 2 plugin for Playstation 2 emulators.",IDC_STATIC,9,71,273,10 + CTEXT "For updates and news, visit the following links:",IDC_STATIC,9,98,273,10 + CTEXT "The SPU2-X project is derived from SPU2ghz v1.9beta released in 2008 and later modified and upgraded by the Pcsx2 Playground Team.",IDC_STATIC,25,161,242,17 + CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,20,157,252,41 + CTEXT "Compile Date, Revision, Etc.",IDC_LABEL_VERSION_INFO,9,80,273,17 + CTEXT "Pcsx2 Official Git Repository @ GitHub",IDC_LINK_GOOGLECODE,9,121,273,10,SS_NOPREFIX | SS_NOTIFY + CTEXT "Pcsx2 Official Website and Forums",IDC_LINK_WEBSITE,9,110,273,10,SS_NOPREFIX | SS_NOTIFY + CTEXT "Brought to you by the collaborative efforts of the Pcsx2 Development Team.",IDC_STATIC,9,141,273,10 +END + +IDD_CONFIG DIALOGEX 0, 0, 319, 302 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "SPU2-X Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x0 +BEGIN + PUSHBUTTON "OK",IDOK,200,276,54,15,NOT WS_TABSTOP + PUSHBUTTON "Cancel",IDCANCEL,259,276,54,15,NOT WS_TABSTOP + GROUPBOX "Mixing Settings",IDC_STATIC,6,5,130,115 + GROUPBOX "Output Settings",IDC_STATIC,142,0,172,268 + COMBOBOX IDC_OUTPUT,154,26,126,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Configure...",IDC_OUTCONF,236,40,54,12 + COMBOBOX IDC_INTERPOLATE,14,26,114,84,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Slider2",IDC_LATENCY_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,166,94,116,10 + CONTROL "Use a Winamp DSP plugin",IDC_DSP_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,149,223,126,11 + CHECKBOX "Disable Effects Processing",IDC_EFFECTS_DISABLE,14,47,112,10 + LTEXT "Latency:",IDC_STATIC,189,84,29,8,NOT WS_GROUP + LTEXT "Interpolation:",IDC_STATIC,12,16,55,10,NOT WS_GROUP + LTEXT "Module:",IDC_STATIC,161,16,50,9,NOT WS_GROUP + LTEXT "(speedup!) Skips reverb effects processing, but won't sound as good in most games.",IDC_STATIC,26,60,104,36 + LTEXT "(currently requires manual configuration via the ini file)",IDC_STATIC,162,236,146,20 + CTEXT "100 ms (avg)",IDC_LATENCY_LABEL,224,86,58,9 + CONTROL 116,IDC_STATIC,"Static",SS_BITMAP | SS_REALSIZECONTROL,6,213,119,55,WS_EX_CLIENTEDGE + PUSHBUTTON "Advanced...",IDC_OPEN_CONFIG_SOUNDTOUCH,219,149,84,12 + PUSHBUTTON "Configure Debug Options...",IDC_OPEN_CONFIG_DEBUG,14,167,108,14 + CHECKBOX "Enable Debug Options",IDC_DEBUG_ENABLE,14,153,104,10,NOT WS_TABSTOP + GROUPBOX "",IDC_STATIC,6,143,129,46 + LTEXT "Audio Expansion Mode:",IDC_STATIC,161,176,135,9,NOT WS_GROUP + COMBOBOX IDC_SPEAKERS,163,185,135,84,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "WIP - XAudio2 Only",IDC_STATIC,161,204,135,9,NOT WS_GROUP + CONTROL "Synchronizing Mode:",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,161,116,131,8 + COMBOBOX IDC_SYNCHMODE,163,125,134,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Volume:",IDC_STATIC,192,59,26,8,NOT WS_GROUP + CTEXT "100%",IDC_VOLUME_LABEL,224,59,58,9 + CONTROL "",IDC_VOLUME_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,166,69,116,10 + CONTROL "Use the de-alias filter",IDC_DEALIASFILTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,92,112,10 + LTEXT "(overemphasizes the highs)",IDC_STATIC,26,104,100,12,NOT WS_GROUP +END + +IDD_DEBUG DIALOGEX 0, 0, 303, 473 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "SPU2-X Debug" +FONT 9, "Lucida Console", 400, 0, 0x0 +BEGIN + DEFPUSHBUTTON "Close",IDOK,246,451,50,14 +END + +IDD_DSOUND DIALOGEX 0, 0, 196, 218 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "DirectSound Output Module Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,83,200,50,14 + PUSHBUTTON "Cancel",IDCANCEL,141,200,50,14 + COMBOBOX IDC_DS_DEVICE,4,15,146,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "DirectSound Device",IDC_STATIC,4,3,63,8 + CONTROL "",IDC_BUFFERS_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,38,137,108,10 + LTEXT "Increase the buffer count if you are experiencing loopy or studdery audio even when games run at high FPS.",IDC_STATIC,11,157,169,27 + CTEXT "8 (80 ms latency)",IDC_LATENCY_LABEL,44,123,95,11 + LTEXT "The options above are useful for compatibility with older and/or buggy sound drivers ONLY, and should not be checked unless you experience sound problems (such as crackly audio or silence).",IDC_STATIC,16,68,175,38 + CONTROL "Disable Global Focus",IDC_GLOBALFOCUS_DISABLE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,4,38,140,10 + CONTROL "Use a crappy alternate buffering mode",IDC_USE_HARDWARE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,4,53,140,10 + GROUPBOX "Output Buffers",IDC_STATIC,4,111,185,79 +END + +IDD_WAVEOUT DIALOGEX 0, 0, 170, 122 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "waveOut Output Module Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,52,104,50,14 + PUSHBUTTON "Cancel",IDCANCEL,115,104,50,14 + COMBOBOX IDC_DS_DEVICE,4,15,161,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "waveOut Device",IDC_STATIC,4,3,54,8 + LTEXT "Number of Buffers",IDC_STATIC,4,39,61,11 + CONTROL "",IDC_BUFFERS_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,71,48,94,10 + LTEXT "Use extra buffers if you are experiencing loopy or studdery audio even when games run at high FPS.",IDC_STATIC,8,66,151,27 + CTEXT "8 (80 ms latency)",IDC_LATENCY_LABEL,70,37,95,11 +END + +IDD_XAUDIO2 DIALOGEX 0, 0, 202, 116 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "XAudio2 Output Module Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,88,98,50,14 + PUSHBUTTON "Cancel",IDCANCEL,147,98,50,14 + COMBOBOX IDC_DS_DEVICE,4,15,193,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "XAudio Device",IDC_STATIC,4,3,46,8 + CONTROL "Use Triple Buffering",IDC_XA2_TRIBLE_BUFFER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,40,109,10 + LTEXT "Increases latency by a few milliseconds. Enable triple buffering you are experiencing loopy or studdery audio even when games run at high FPS.",IDC_STATIC,20,53,175,35 +END + +IDD_CONFIG_SOUNDTOUCH DIALOGEX 0, 0, 206, 223 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Soundtouch Advanced Configuration - SPU2-X" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,50,205,50,14 + PUSHBUTTON "Cancel",IDCANCEL,104,205,50,14 + CTEXT "These are advanced configuration options for fine tuning time stretching behavior. Larger values are better for slowdown, while smaller values are better for speed-up (better than 60fps).\n\nAll options are in milliseconds (ms).",IDC_STATIC,5,5,196,52 + CONTROL "",IDC_SEQLEN_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,50,98,105,10 + CTEXT "Sequence Length",IDC_STATIC,72,88,64,9 + CONTROL "",IDC_SEEKWIN_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,50,136,105,10 + CTEXT "Seekwindow Size",IDC_STATIC,70,125,66,9 + CONTROL "",IDC_OVERLAP_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,50,170,105,10 + CTEXT "Overlap",IDC_STATIC,86,162,34,9 + LTEXT "20",IDC_STATIC,50,112,9,8 + LTEXT "100",IDC_STATIC,146,112,13,8 + LTEXT "10",IDC_STATIC,50,149,9,8 + LTEXT "30",IDC_STATIC,146,149,9,8 + LTEXT "5",IDC_STATIC,52,184,8,8 + LTEXT "15",IDC_STATIC,146,184,9,8 + PUSHBUTTON "Reset Defaults",IDC_RESET_DEFAULTS,61,62,82,12 +END + +IDD_CONFIG_DEBUG DIALOGEX 0, 0, 292, 239 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "SPU2-X Debugging Options" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,190,220,46,14 + PUSHBUTTON "Cancel",IDCANCEL,241,220,46,14 + GROUPBOX "",IDC_STATIC,5,5,135,93 + GROUPBOX "Logfile-only Logs",IDC_STATIC,151,5,136,53 + GROUPBOX "Dumps (on close)",IDC_STATIC,151,60,135,54 + CONTROL "Show In Console",IDC_MSGSHOW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,5,69,10 + CHECKBOX "KeyOn/Off Events",IDC_MSGKEY,17,18,74,9,NOT WS_TABSTOP + CONTROL "Voice Stop Events",IDC_MSGVOICE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,31,75,9 + CONTROL "DMA Operations",IDC_MSGDMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,44,68,9 + CONTROL "AutoDMA Operations",IDC_MSGADMA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,57,83,9 + CONTROL "Buffer Over/Underruns",IDC_DBG_OVERRUNS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,70,97,9 + CONTROL "ADPCM Cache Statistics",IDC_DBG_CACHE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,83,114,9 + CHECKBOX "Dump Core and Voice State",IDC_DUMPCORE,159,74,104,10,NOT WS_TABSTOP + CHECKBOX "Dump Memory Contents",IDC_DUMPMEM,159,87,91,10,NOT WS_TABSTOP + CHECKBOX "Dump Register Data",IDC_DUMPREGS,159,100,80,10,NOT WS_TABSTOP + CHECKBOX "Log Register/DMA Actions",IDC_LOGREGS,159,18,101,10,WS_GROUP | NOT WS_TABSTOP + CHECKBOX "Log DMA Writes",IDC_LOGDMA,159,31,68,10,NOT WS_TABSTOP + CHECKBOX "Log Audio Output",IDC_LOGWAVE,159,44,71,10,NOT WS_TABSTOP + LTEXT "Note: This is a non-devel build. For performance reasons, some logging options are disabled; and only available in devel/debug builds.",IDC_MSG_PUBLIC_BUILD,9,187,174,30 + GROUPBOX "Others",IDC_DEBUG_OTHERS,5,104,135,68 + CONTROL "Show Core Activity",IDC_DEBUG_VISUAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,116,90,11 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 9 + RIGHTMARGIN, 282 + TOPMARGIN, 5 + BOTTOMMARGIN, 218 + END + + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 6 + RIGHTMARGIN, 314 + VERTGUIDE, 218 + VERTGUIDE, 282 + BOTTOMMARGIN, 292 + HORZGUIDE, 268 + END + + IDD_DEBUG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 296 + TOPMARGIN, 7 + BOTTOMMARGIN, 465 + END + + IDD_DSOUND, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 191 + TOPMARGIN, 3 + BOTTOMMARGIN, 214 + END + + IDD_WAVEOUT, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 165 + TOPMARGIN, 3 + BOTTOMMARGIN, 118 + END + + IDD_XAUDIO2, DIALOG + BEGIN + LEFTMARGIN, 4 + RIGHTMARGIN, 197 + TOPMARGIN, 3 + BOTTOMMARGIN, 112 + END + + IDD_CONFIG_SOUNDTOUCH, DIALOG + BEGIN + LEFTMARGIN, 5 + RIGHTMARGIN, 201 + TOPMARGIN, 5 + BOTTOMMARGIN, 218 + END + + IDD_CONFIG_DEBUG, DIALOG + BEGIN + LEFTMARGIN, 5 + RIGHTMARGIN, 287 + TOPMARGIN, 5 + BOTTOMMARGIN, 234 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_SPU2X BITMAP "..\\..\\spu2-x.bmp" +IDB_SPU2X_SMALL BITMAP "..\\..\\spu2-x-sm.bmp" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 2,0,0,4851 + PRODUCTVERSION 2,0,0,4851 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "SPU2 Plugin for PS2 Emulators" + VALUE "CompanyName", "PCSX2 Dev Team" + VALUE "FileDescription", "SPU2-X Plugin (git build)" + VALUE "FileVersion", "2.0.GIT" + VALUE "InternalName", "SPU2-X" + VALUE "LegalCopyright", "Copyright (C) 2011" + VALUE "OriginalFilename", "SPU2-X-2.0.dll" + VALUE "ProductName", "SPU2-X" + VALUE "ProductVersion", "2.0.GIT" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (United Kingdom) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_PORTAUDIO DIALOGEX 0, 0, 316, 166 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Portaudio Output Module Settings" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,205,145,50,14 + PUSHBUTTON "Cancel",IDCANCEL,259,145,50,14 + COMBOBOX IDC_PA_HOSTAPI,7,18,95,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Host Api",IDC_STATIC,7,7,28,8 + COMBOBOX IDC_PA_DEVICE,108,18,201,62,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Device Name",IDC_STATIC,107,7,42,8 + CONTROL "",IDC_LATENCY,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,96,93,155,10 + LTEXT "NOTE: Depending on the hardware and drivers, the suggested manual latency might not be used, and portaudio will choose the closest possible value.",IDC_STATIC,12,111,286,19 + CTEXT "20ms",IDC_LATENCY_LABEL,264,93,35,11 + GROUPBOX "Output Latency",IDC_STATIC,7,57,302,82 + CONTROL "Use smallest possible (may cause issues if the actual value is too small)",IDC_MINIMIZE, + "Button",BS_AUTORADIOBUTTON | WS_GROUP,12,75,258,10 + CONTROL "Use this latency:",IDC_MANUAL,"Button",BS_AUTORADIOBUTTON,12,93,69,10 + CONTROL "WASAPI Exclusive Mode",IDC_EXCLUSIVE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,39,93,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_PORTAUDIO, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 309 + TOPMARGIN, 7 + BOTTOMMARGIN, 159 + END +END +#endif // APSTUDIO_INVOKED + +#endif // English (United Kingdom) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Spain, International Sort) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""svnrev.h""\r\n" + "#include ""afxresmw.h""\0" +END + +3 TEXTINCLUDE +BEGIN + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Spain, International Sort) resources +///////////////////////////////////////////////////////////////////////////// + + diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.vcxproj pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.vcxproj --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.vcxproj 2014-08-13 08:54:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + DebugStrict @@ -29,6 +29,7 @@ false Static Unicode + $(DefaultPlatformToolset)_xp DynamicLibrary @@ -36,12 +37,14 @@ Static Unicode true + $(DefaultPlatformToolset)_xp DynamicLibrary false Static Unicode + $(DefaultPlatformToolset)_xp DynamicLibrary @@ -49,6 +52,7 @@ Static Unicode true + $(DefaultPlatformToolset)_xp @@ -113,12 +117,6 @@ false $(DXSDK_DIR)\include;$(IncludePath) $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\include;$(IncludePath) - $(DXSDK_DIR)\include;$(IncludePath) - $(DXSDK_DIR)\include;$(IncludePath) - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) @@ -131,7 +129,7 @@ - $(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) + $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) Async StreamingSIMDExtensions2 @@ -169,7 +167,7 @@ - $(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) + $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) FLOAT_SAMPLES;_USRDLL;%(PreprocessorDefinitions) Async Use @@ -202,7 +200,7 @@ - $(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) + $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) Async StreamingSIMDExtensions2 @@ -243,7 +241,7 @@ - $(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) + $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) wxUSE_GUI=0;FLOAT_SAMPLES;DEBUG_FAST;_USRDLL;%(PreprocessorDefinitions) Async Use @@ -284,7 +282,6 @@ - @@ -423,16 +420,6 @@ - - - - - - - - - - @@ -455,33 +442,16 @@ {0a18a071-125e-442f-aff7-a3f68abecf99} false - - {e9b51944-7e6d-4bcd-83f2-7bbd5a46182d} - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false - - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} + + {0fae817d-9a32-4830-857e-81da57246e16} false - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {c34487af-228a-4d11-8e50-27803df76873} + + {e9b51944-7e6d-4bcd-83f2-7bbd5a46182d} false - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false + + {3fcc50c2-81e9-5db2-b8d8-2129427568b1} {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} @@ -499,4 +469,4 @@ - + diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.vcxproj.filters pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X.vcxproj.filters 2013-11-27 16:44:32.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X.vcxproj.filters 2016-01-05 17:28:08.000000000 +0000 @@ -103,9 +103,6 @@ Source Files\GUI\Windows - - Source Files\GUI\Windows - Source Files\GUI\Windows @@ -204,9 +201,6 @@ Source Files\GUI\Windows - - Source Files\GUI\Windows - Source Files\GUI\Windows @@ -245,4 +239,4 @@ Resources - \ No newline at end of file + diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj 2014-08-13 08:54:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,500 +0,0 @@ - - - - - DebugStrict - Win32 - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - SPU2-X - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} - spu2x - - - - DynamicLibrary - false - Static - Unicode - v110_xp - - - DynamicLibrary - false - Static - Unicode - true - v110_xp - - - DynamicLibrary - false - Static - Unicode - v110_xp - - - DynamicLibrary - false - Static - Unicode - true - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - true - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(ProjectName)-dev - false - $(DXSDK_DIR)\include;$(IncludePath) - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) - Async - StreamingSIMDExtensions2 - Fast - Use - Global.h - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch-dev.lib;x86emitter-dev.lib;utilities-dev.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - false - MachineX86 - - - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;_USRDLL;%(PreprocessorDefinitions) - Async - Use - Global.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch.lib;x86emitter.lib;utilities.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - false - false - MachineX86 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) - Async - StreamingSIMDExtensions2 - Fast - Use - Global.h - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch.lib;x86emitter.lib;utilities.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - $(TargetDir)$(TargetName).pdb - - - false - MachineX86 - - - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - wxUSE_GUI=0;FLOAT_SAMPLES;DEBUG_FAST;_USRDLL;%(PreprocessorDefinitions) - Async - Use - Global.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c0a - %(AdditionalIncludeDirectories) - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch-dbg.lib;x86emitter-dbg.lib;utilities-dbg.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - .\Spu2-X.def - false - false - .\Debug/spu2-x.lib - MachineX86 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Global.h - Create - Global.h - Create - Global.h - - - - - true - - - true - - - true - Default - - - true - Default - - - - Default - Default - - - Default - Default - - - - - - - - - - - - - - - true - - - true - - - true - Default - - - true - Default - - - - - - - true - true - true - true - - - - - - true - - - true - - - AssemblyAndSourceCode - true - Default - - - true - Default - - - - - - - - - AssemblyAndSourceCode - true - - - true - - - true - Default - - - true - Default - - - - - - true - true - true - true - - - true - true - true - true - - - - - Default - Default - - - - - - - - - - - - - - - - - - - - - - - - - - - - %(AdditionalIncludeDirectories) - - - - - {0a18a071-125e-442f-aff7-a3f68abecf99} - false - - - {e9b51944-7e6d-4bcd-83f2-7bbd5a46182d} - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false - - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {c34487af-228a-4d11-8e50-27803df76873} - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - false - - - {a51123f5-9505-4eae-85e7-d320290a272c} - false - - - - - - diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ - - - - - {21596259-72f4-41c0-b499-40839e39f043} - h;hpp;cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {30e5b8dd-2015-4c3d-a663-992fb42627b5} - - - {ed4df93e-4e4b-4675-a181-c5084146df7c} - - - {1cb77247-dec9-4a0a-867f-7353b14decac} - - - {f87cf8e1-d654-4214-b7f4-6fb697f3941a} - - - {10ccccc1-642a-42ec-900c-801f707bd776} - - - {03be4765-f627-4c0a-9d40-f3c0f86f1e57} - - - {ea7e8889-2015-40b9-ac77-b4a3a58c41af} - - - {63ac2d88-b5c3-41a3-bd2c-a04c80acd35f} - - - {825046cd-874f-45f4-8622-14c146a97b46} - - - {3924e038-9ec9-4f1c-89b9-6d03c46566ac} - - - {efaf786c-f09d-49f7-b5f3-8bb7078e9c44} - - - {00c53f28-fde8-4f60-88d2-d223584f1db5} - - - {95111121-7e1f-4624-8765-a17e8f13827f} - - - {70e9653e-fba5-4c6e-ad9b-185006096d49} - - - {6fcf6c91-7afe-4ade-bb30-79d63901d590} - - - {381a6e5e-bdd5-48b0-81f8-e2775eff9585} - - - {d26e57df-a97e-4ba5-801a-c0c52b5d061f} - - - - - Source Files - - - Source Files - - - Source Files\debug - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output\Linux - - - Source Files\decoder - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2\Mixer - - - Source Files\Winamp DSP - - - Source Files\GUI\Linux\Include - - - Source Files\GUI\Linux\Include - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\PluginInterface - - - Resources - - - - - Source Files - - - Source Files\debug - - - Source Files\debug - - - Source Files\debug - - - Source Files\debug - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Linux - - - Source Files\Sound Output\Crossplatform - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\Winamp DSP - - - Source Files\GUI\Linux - - - Source Files\GUI\Linux - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\PluginInterface - - - Source Files\Sound Output - - - - - Documents - - - Documents - - - Documents - - - Resources - - - Resources - - - Resources - - - - - Resources - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj 2014-08-13 08:54:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,500 +0,0 @@ - - - - - DebugStrict - Win32 - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - SPU2-X - {5307BBB7-EBB9-4AA4-8CB6-A94EC473C8C4} - spu2x - - - - DynamicLibrary - false - Static - Unicode - v120_xp - - - DynamicLibrary - false - Static - Unicode - true - v120_xp - - - DynamicLibrary - false - Static - Unicode - v120_xp - - - DynamicLibrary - false - Static - Unicode - true - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - false - true - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(ProjectName)-dev - false - $(DXSDK_DIR)\include;$(IncludePath) - $(DXSDK_DIR)\Lib\x86;$(LibraryPath) - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Release/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) - Async - StreamingSIMDExtensions2 - Fast - Use - Global.h - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch-dev.lib;x86emitter-dev.lib;utilities-dev.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - false - MachineX86 - - - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;_USRDLL;%(PreprocessorDefinitions) - Async - Use - Global.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch.lib;x86emitter.lib;utilities.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - false - false - MachineX86 - - - true - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - FLOAT_SAMPLES;NDEBUG;_USRDLL;%(PreprocessorDefinitions) - Async - StreamingSIMDExtensions2 - Fast - Use - Global.h - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c0a - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch.lib;x86emitter.lib;utilities.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)3rdparty\portaudio;%(AdditionalLibraryDirectories) - .\Spu2-X.def - $(TargetDir)$(TargetName).pdb - - - false - MachineX86 - - - true - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - .\Debug/spu2-x.tlb - - - - - $(DXSDK_DIR)include;$(SolutionDir)3rdparty\portaudio\include\;%(AdditionalIncludeDirectories) - wxUSE_GUI=0;FLOAT_SAMPLES;DEBUG_FAST;_USRDLL;%(PreprocessorDefinitions) - Async - Use - Global.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c0a - %(AdditionalIncludeDirectories) - - - rpcrt4.lib;winmm.lib;dsound.lib;comctl32.lib;soundtouch-dbg.lib;x86emitter-dbg.lib;utilities-dbg.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - .\Spu2-X.def - false - false - .\Debug/spu2-x.lib - MachineX86 - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Global.h - Create - Global.h - Create - Global.h - - - - - true - - - true - - - true - Default - - - true - Default - - - - Default - Default - - - Default - Default - - - - - - - - - - - - - - - true - - - true - - - true - Default - - - true - Default - - - - - - - true - true - true - true - - - - - - true - - - true - - - AssemblyAndSourceCode - true - Default - - - true - Default - - - - - - - - - AssemblyAndSourceCode - true - - - true - - - true - Default - - - true - Default - - - - - - true - true - true - true - - - true - true - true - true - - - - - Default - Default - - - - - - - - - - - - - - - - - - - - - - - - - - - - %(AdditionalIncludeDirectories) - - - - - {0a18a071-125e-442f-aff7-a3f68abecf99} - false - - - {e9b51944-7e6d-4bcd-83f2-7bbd5a46182d} - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - false - - - {0e231fb1-f3c9-4724-accb-de8bcb3c089e} - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - false - - - {c34487af-228a-4d11-8e50-27803df76873} - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - false - - - {a51123f5-9505-4eae-85e7-d320290a272c} - false - - - - - - diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/Spu2-X_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,248 +0,0 @@ - - - - - {21596259-72f4-41c0-b499-40839e39f043} - h;hpp;cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {30e5b8dd-2015-4c3d-a663-992fb42627b5} - - - {ed4df93e-4e4b-4675-a181-c5084146df7c} - - - {1cb77247-dec9-4a0a-867f-7353b14decac} - - - {f87cf8e1-d654-4214-b7f4-6fb697f3941a} - - - {10ccccc1-642a-42ec-900c-801f707bd776} - - - {03be4765-f627-4c0a-9d40-f3c0f86f1e57} - - - {ea7e8889-2015-40b9-ac77-b4a3a58c41af} - - - {63ac2d88-b5c3-41a3-bd2c-a04c80acd35f} - - - {825046cd-874f-45f4-8622-14c146a97b46} - - - {3924e038-9ec9-4f1c-89b9-6d03c46566ac} - - - {efaf786c-f09d-49f7-b5f3-8bb7078e9c44} - - - {00c53f28-fde8-4f60-88d2-d223584f1db5} - - - {95111121-7e1f-4624-8765-a17e8f13827f} - - - {70e9653e-fba5-4c6e-ad9b-185006096d49} - - - {6fcf6c91-7afe-4ade-bb30-79d63901d590} - - - {381a6e5e-bdd5-48b0-81f8-e2775eff9585} - - - {d26e57df-a97e-4ba5-801a-c0c52b5d061f} - - - - - Source Files - - - Source Files - - - Source Files\debug - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output\Linux - - - Source Files\decoder - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2\Mixer - - - Source Files\Winamp DSP - - - Source Files\GUI\Linux\Include - - - Source Files\GUI\Linux\Include - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\PluginInterface - - - Resources - - - - - Source Files - - - Source Files\debug - - - Source Files\debug - - - Source Files\debug - - - Source Files\debug - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Windows - - - Source Files\Sound Output\Linux - - - Source Files\Sound Output\Crossplatform - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2 - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\SPU2\Mixer - - - Source Files\Winamp DSP - - - Source Files\GUI\Linux - - - Source Files\GUI\Linux - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\GUI\Windows - - - Source Files\PluginInterface - - - Source Files\Sound Output - - - - - Documents - - - Documents - - - Documents - - - Resources - - - Resources - - - Resources - - - - - Resources - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/UIHelpers.cpp pcsx2-1.4.0/plugins/spu2-x/src/Windows/UIHelpers.cpp --- pcsx2-1.3.1+dfsg/plugins/spu2-x/src/Windows/UIHelpers.cpp 2011-01-06 12:25:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/src/Windows/UIHelpers.cpp 2016-01-05 17:28:08.000000000 +0000 @@ -23,32 +23,43 @@ return SendMessage( GetDlgItem(hwnd,dlgId), code, wParam, lParam ); } -HRESULT GUIDFromString(const char *str, LPGUID guid) +HRESULT GUIDFromString(const wchar_t *str, LPGUID guid) { // "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" - struct T{ // this is a hack because for some reason sscanf writes too much :/ - GUID g; - int k; // << not used but still needed as of January 6th, 2011 - } t; - - int r = sscanf_s(str,"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", - &t.g.Data1, - &t.g.Data2, - &t.g.Data3, - &t.g.Data4[0], - &t.g.Data4[1], - &t.g.Data4[2], - &t.g.Data4[3], - &t.g.Data4[4], - &t.g.Data4[5], - &t.g.Data4[6], - &t.g.Data4[7] + // VS2015 supports the hh format specifier (finally). VS2013 doesn't though, + // so this will do for now. + u32 guid_u32; + u16 guid_u16[2]; + u16 guid_u8[8]; + + int r = swscanf_s(str,L"{%08x-%04hx-%04hx-%02hx%02hx-%02hx%02hx%02hx%02hx%02hx%02hx}", + &guid_u32, + &guid_u16[0], + &guid_u16[1], + &guid_u8[0], + &guid_u8[1], + &guid_u8[2], + &guid_u8[3], + &guid_u8[4], + &guid_u8[5], + &guid_u8[6], + &guid_u8[7] ); if(r!=11) return -1; - *guid = t.g; + guid->Data1 = guid_u32; + guid->Data2 = guid_u16[0]; + guid->Data3 = guid_u16[1]; + guid->Data4[0] = (u8)guid_u8[0]; + guid->Data4[1] = (u8)guid_u8[1]; + guid->Data4[2] = (u8)guid_u8[2]; + guid->Data4[3] = (u8)guid_u8[3]; + guid->Data4[4] = (u8)guid_u8[4]; + guid->Data4[5] = (u8)guid_u8[5]; + guid->Data4[6] = (u8)guid_u8[6]; + guid->Data4[7] = (u8)guid_u8[7]; return 0; } diff -Nru pcsx2-1.3.1+dfsg/plugins/spu2-x/Website.txt pcsx2-1.4.0/plugins/spu2-x/Website.txt --- pcsx2-1.3.1+dfsg/plugins/spu2-x/Website.txt 2009-02-15 05:15:39.000000000 +0000 +++ pcsx2-1.4.0/plugins/spu2-x/Website.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,18 +1,18 @@ - --- SPU2-X -- Website Links - -The official Svn for SPU2-X is hosted at GoogleCode, under the Pcsx2 project. -You can check it out directly or you can check out Pcsx2 as a whole (which -includes this plugin along with many others). The links are as follows: - -Homepage (website): - http://code.google.com/p/pcsx2/ - - You'll find information on how to check out from svn and how to compile - Pcsx2 and the plugins at the above link. - -SPU2-X (svn): - http://pcsx2.googlecode.com/svn/trunk/plugins/spu2-x - -Pcsx2 + All Plugins (svn): - http://pcsx2.googlecode.com/svn/trunk/ + +-- SPU2-X -- Website Links + +The official Svn for SPU2-X is hosted at GoogleCode, under the Pcsx2 project. +You can check it out directly or you can check out Pcsx2 as a whole (which +includes this plugin along with many others). The links are as follows: + +Homepage (website): + http://code.google.com/p/pcsx2/ + + You'll find information on how to check out from svn and how to compile + Pcsx2 and the plugins at the above link. + +SPU2-X (svn): + http://pcsx2.googlecode.com/svn/trunk/plugins/spu2-x + +Pcsx2 + All Plugins (svn): + http://pcsx2.googlecode.com/svn/trunk/ diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/CMakeLists.txt pcsx2-1.4.0/plugins/USBnull/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/USBnull/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/CMakeLists.txt 2016-01-05 17:28:08.000000000 +0000 @@ -8,21 +8,7 @@ # plugin name set(Output USBnull-0.7.0) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(USBnullFinalFlags "") - -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(USBnullFinalFlags ${OptimizationFlags}) - -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(USBnullFinalFlags ${OptimizationFlags}) - -endif() +set(USBnullFinalFlags "") # USBnull sources set(USBnullSources diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/ReadMe.txt pcsx2-1.4.0/plugins/USBnull/ReadMe.txt --- pcsx2-1.3.1+dfsg/plugins/USBnull/ReadMe.txt 2009-02-06 19:39:25.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/ReadMe.txt 2016-01-05 17:28:08.000000000 +0000 @@ -1,34 +1,34 @@ -USBnull v0.4 -------------- - - This is an extension to use with play station2 emulators - as PCSX2 (only one right now). - The plugin is free open source code. - -Usage: ------ - Place the file "usbnull.dll" (win32) or usbnull.dll (win64) - at the Plugin directory of the Emulator to use it. - -Changes: -------- - v0.4: -*project files for vs2005 beta1 .64bit dll should work okay (not tested!) - - v0.3: - *up to pcsx2 specs 0.5.5 - *added ini and option for logging - *small adds around.. - - v0.2: - * First Release - * Tested with Pcsx2 - -Authors: -------- - -shadow - - - - +USBnull v0.4 +------------- + + This is an extension to use with play station2 emulators + as PCSX2 (only one right now). + The plugin is free open source code. + +Usage: +----- + Place the file "usbnull.dll" (win32) or usbnull.dll (win64) + at the Plugin directory of the Emulator to use it. + +Changes: +------- + v0.4: +*project files for vs2005 beta1 .64bit dll should work okay (not tested!) + + v0.3: + *up to pcsx2 specs 0.5.5 + *added ini and option for logging + *small adds around.. + + v0.2: + * First Release + * Tested with Pcsx2 + +Authors: +------- + +shadow + + + + diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/resource.h pcsx2-1.4.0/plugins/USBnull/Windows/resource.h --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/resource.h 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/resource.h 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,21 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by USBnull.rc +// +#define IDD_CONFDLG 101 +#define IDD_CONFIG 101 +#define IDD_ABOUT 103 +#define IDC_NAME 1000 +#define IDC_CHECK1 1007 +#define IDC_LOGGING 1007 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 105 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1008 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.def pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.def --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.def 2010-05-18 02:59:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.def 2016-01-05 17:28:08.000000000 +0000 @@ -1,29 +1,29 @@ -; USBlinuz.def : Declares the module parameters for the DLL. - -;LIBRARY "USBnull" -;DESCRIPTION 'USBnull Driver' - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - USBinit @5 - USBshutdown @6 - USBopen @7 - USBclose @8 - USBread8 @9 - USBread16 @10 - USBread32 @11 - USBwrite8 @12 - USBwrite16 @13 - USBwrite32 @14 - USBirqCallback @15 - USBirqHandler @16 - USBsetRAM @17 - - USBconfigure @18 - USBtest @19 - USBabout @20 - - USBsetSettingsDir +; USBlinuz.def : Declares the module parameters for the DLL. + +;LIBRARY "USBnull" +;DESCRIPTION 'USBnull Driver' + +EXPORTS + ; Explicit exports can go here + PS2EgetLibType @2 + PS2EgetLibName @3 + PS2EgetLibVersion2 @4 + USBinit @5 + USBshutdown @6 + USBopen @7 + USBclose @8 + USBread8 @9 + USBread16 @10 + USBread32 @11 + USBwrite8 @12 + USBwrite16 @13 + USBwrite32 @14 + USBirqCallback @15 + USBirqHandler @16 + USBsetRAM @17 + + USBconfigure @18 + USBtest @19 + USBabout @20 + + USBsetSettingsDir diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.rc pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.rc --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.rc 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.rc 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,116 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxresmw.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Spanish (Argentina) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESS) +#ifdef _WIN32 +LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxresmw.h""\r\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_CONFIG DIALOGEX 0, 0, 212, 121 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "USBconfigure" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,100,50,14 + PUSHBUTTON "Cancel",IDCANCEL,113,100,50,14 + CONTROL "Enable logging(for develop use only)",IDC_LOGGING, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,159,15 +END + +IDD_ABOUT DIALOGEX 0, 0, 177, 106 +STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "USBabout" +FONT 8, "MS Sans Serif", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,65,85,50,14 + LTEXT "USBnull Driver",IDC_NAME,70,10,47,8 + GROUPBOX "",IDC_STATIC,5,35,170,40 + LTEXT "Author: shadow@pcsx2.net",IDC_STATIC,20,20,141,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_CONFIG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 205 + TOPMARGIN, 7 + BOTTOMMARGIN, 114 + END + + IDD_ABOUT, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 170 + TOPMARGIN, 7 + BOTTOMMARGIN, 99 + END +END +#endif // APSTUDIO_INVOKED + +#endif // Spanish (Argentina) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.vcxproj pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.vcxproj --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull.vcxproj 2010-04-30 19:46:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull.vcxproj 2016-01-05 17:28:08.000000000 +0000 @@ -1,5 +1,5 @@  - + Debug @@ -21,10 +21,12 @@ DynamicLibrary MultiByte true + $(DefaultPlatformToolset)_xp DynamicLibrary MultiByte + $(DefaultPlatformToolset)_xp diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2012.vcxproj pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - USBnull - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} - USBnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v110_xp - - - DynamicLibrary - MultiByte - v110_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName) - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - USBnull.def - false - MachineX86 - - - - - - - - - USBnull.def - false - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - - - - - {94a66e11-75eb-4a79-a044-b78e97a6ccc3} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {2790b344-7a1a-45ef-9a16-0dd847d6de56} - h;hpp;hxx;hm;inl;inc - - - {bf432076-1764-488d-84b7-82e00f408011} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2013.vcxproj pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - USBnull - {BF7B81A5-E348-4F7C-A69F-F74C8EEEAD70} - USBnull - Win32Proj - - - - DynamicLibrary - MultiByte - true - v120_xp - - - DynamicLibrary - MultiByte - v120_xp - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName) - - - - - - - - $(OutDir)$(TargetName)$(TargetExt) - USBnull.def - false - MachineX86 - - - - - - - - - USBnull.def - false - MachineX86 - - - - - - - - - - - - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/USBnull/Windows/USBnull_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/USBnull/Windows/USBnull_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ - - - - - {94a66e11-75eb-4a79-a044-b78e97a6ccc3} - cpp;c;cxx;def;odl;idl;hpj;bat;asm - - - {2790b344-7a1a-45ef-9a16-0dd847d6de56} - h;hpp;hxx;hm;inl;inc - - - {bf432076-1764-488d-84b7-82e00f408011} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - - - Resource Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/buildshaders.bat pcsx2-1.4.0/plugins/zzogl-pg/opengl/buildshaders.bat --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/buildshaders.bat 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/buildshaders.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -ZeroGSShaders.exe ps2hw.fx ps2hw.dat -del Win32\ps2hw.dat Win32\Release\*.res Win32\Debug\*.res -move /y ps2hw.dat Win32\ps2hw.dat \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/CMakeLists.txt pcsx2-1.4.0/plugins/zzogl-pg/opengl/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,238 +0,0 @@ -if (openSUSE) - # openSUSE don't install wx in a standard library system - # path. Let's bypass the dynamic linker and hardcode the path. - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON) -endif() - -# Check that people use the good file -if(NOT TOP_CMAKE_WAS_SOURCED) - message(FATAL_ERROR " - You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir. - It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt") -endif(NOT TOP_CMAKE_WAS_SOURCED) - -# Allow to build the shader files -if(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ZeroGSShaders" AND REBUILD_SHADER AND NOT GLSL_API) - add_subdirectory(ZeroGSShaders) -endif(EXISTS "${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ZeroGSShaders" AND REBUILD_SHADER AND NOT GLSL_API) - -# plugin name -set(Output zzogl-0.4.0) - -set(CommonFlags - -DZEROGS_SSE2 - -fno-strict-aliasing - -Wstrict-aliasing # Allow to track strict aliasing issue. - -Wunused-variable - ) - -set(OptimizationFlags - -O2 - ) - -#Clang doesn't support a few common flags that GCC does. -if(NOT USE_CLANG) - set(zzoglFinalFlags - ${zzoglFinalFlags} - ${CommonFlags} -fno-regmove - ) -endif(NOT USE_CLANG) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(zzoglFinalFlags - ${zzoglFinalFlags} - ${CommonFlags} -g -Wall -D_DEBUG - ) -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(zzoglFinalFlags - ${zzoglFinalFlags} - ${CommonFlags} ${OptimizationFlags} -g -W -DZEROGS_DEVBUILD - ) -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(zzoglFinalFlags - ${zzoglFinalFlags} - ${CommonFlags} ${OptimizationFlags} -W - ) -endif() - -# Select the shader API -if(GLSL_API) - set(zzoglFinalFlags - ${zzoglFinalFlags} - -DGLSL4_API -DOGL4_LOG - ) - #-DGLSL_API -else(GLSL_API) - set(zzoglFinalFlags - ${zzoglFinalFlags} - -DNVIDIA_CG_API - ) -endif(GLSL_API) - -# Select the EGL API -if(EGL_API AND EGL_FOUND) - if (EGL_GL_CONTEXT_SUPPORT) - set(zzoglFinalFlags - ${zzoglFinalFlags} - -DEGL_API - ) - else() - message(WARNING "Current EGL implementation doesn't support openGL context. Fallback to standard GLX.") - endif() -endif() - - -# zzogl sources -set(zzoglSources - GifTransfer.cpp - GLWin32.cpp - GLWinX11.cpp - GSDump.cpp - GSmain.cpp - HostMemory.cpp - Mem.cpp - Mem_Swizzle.cpp - Mem_Tables.cpp - Profile.cpp - rasterfont.cpp - Regs.cpp - targets.cpp - zerogs.cpp - zpipe.cpp - ZZDepthTargets.cpp - ZZMemoryTargets.cpp - ZZRenderTargets.cpp - ZZClut.cpp - ZZHacks.cpp - ZZKeyboard.cpp - ZZoglDrawing.cpp - ZZLog.cpp - ZZoglCreate.cpp - ZZoglCRTC.cpp - ZZoglFlush.cpp - ZZoglFlushHack.cpp - ZZoglMem.cpp - ZZoglSave.cpp - ZZoglShaders.cpp - ZZoglShadersGLSL.cpp - ZZoglShadersGLSL4.cpp - ZZoglShoots.cpp - ZZoglVB.cpp - ) - -# zzogl headers -set(zzoglHeaders - common.h - CRC.h - GifTransfer.h - # glprocs.h - GS.h - GSDump.h - HostMemory.h - ps2hw_gl4.h - Mem.h - Mem_Swizzle.h - Mem_Transmit.h - Profile.h - rasterfont.h - Regs.h - targets.h - Util.h - x86.h - zerogs.h - zpipe.h - ZZClut.h - ZZoglFlush.h - ZZGl.h - ZZHacks.h - ZZoglDrawing.h - ZZLog.h - ZZoglCRTC.h - ZZoglMath.h - ZZoglMem.h - ZZoglShaders.h - ZZoglShoots.h - ZZoglVB.h - ) - -# zzogl shader sources -set(zzoglShaderSources - ctx0/ps2hw_ctx.fx - ctx1/ps2hw_ctx.fx) - -# zzogl Linux sources -set(zzoglLinuxSources - Linux/Conf.cpp - Linux/Linux.cpp) - -# zzogl Linux headers -set(zzoglLinuxHeaders - Linux/Linux.h) - -set(zzoglFinalSources - ${zzoglSources} - ${zzoglHeaders} - ${zzoglShaderSources} - ${zzoglLinuxSources} - ${zzoglLinuxHeaders} -) - -set(zzoglFinalLibs - Utilities_NO_TLS - ${OPENGL_LIBRARIES} -) - -# add additional include directories -include_directories(Linux) - -# Generate Glsl header file. Protect with REBUILD_SHADER to avoid build-dependency on PERL -if (REBUILD_SHADER) - add_custom_command(OUTPUT ps2hw_gl4.h COMMAND perl ${CMAKE_SOURCE_DIR}/linux_various/glsl2h.pl) -endif() - -if(EGL_API AND EGL_FOUND AND EGL_GL_CONTEXT_SUPPORT) - set(zzoglFinalLibs - ${zzoglFinalLibs} - ${EGL_LIBRARIES} - ) -endif() - -if(NOT GLSL_API) - set(zzoglFinalLibs - ${zzoglFinalLibs} - ${CG_LIBRARIES} - ) -endif(NOT GLSL_API) - -set(zzoglFinalLibs - ${zzoglFinalLibs} - ${GLEW_LIBRARY} - ${X11_LIBRARIES} - ${JPEG_LIBRARIES} - ${GTK2_LIBRARIES} - ${ZLIB_LIBRARIES} - ${LIBC_LIBRARIES} -) - -add_pcsx2_plugin(${Output} "${zzoglFinalSources}" "${zzoglFinalLibs}" "${zzoglFinalFlags}") - -# Trick that allow to compile zzogl with GSOPEN2 and the replayer with GSOPEN -set_target_properties(${Output} PROPERTIES COMPILE_DEFINITIONS USE_GSOPEN2) - -if(NOT GLSL_API AND NOT REBUILD_SHADER) - if(PACKAGE_MODE) - install(FILES ${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ps2hw.dat DESTINATION ${PLUGIN_DIR}) - else() - install(FILES ${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl/ps2hw.dat DESTINATION ${CMAKE_SOURCE_DIR}/bin/plugins) - endif() -endif() - -################################### Replay Loader -if(BUILD_REPLAY_LOADERS) - set(Replay pcsx2_ZZReplayLoader) - set(zzoglReplayLoaderFinalSources - ${zzoglFinalSources} - linux_replay.cpp - ) - add_pcsx2_executable(${Replay} "${zzoglReplayLoaderFinalSources}" "${zzoglFinalLibs}" "${zzoglFinalFlags}") -endif(BUILD_REPLAY_LOADERS) diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/common.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/common.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/common.h 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/common.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,1164 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2005-2008 Zerofrog's ZeroGS KOSMOS - * - * Based on the ffmpeg program, (c)2006 Michael Niedermayer - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 - */ - -/** - * @file common.h - * common internal api header. - */ - -#ifndef COMMON_H -#define COMMON_H - -#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) -# define CONFIG_WIN32 -#endif - -//#define ALT_BITSTREAM_WRITER -//#define ALIGNED_BITSTREAM_WRITER - -#define ALT_BITSTREAM_READER -//#define LIBMPEG2_BITSTREAM_READER -//#define A32_BITSTREAM_READER -#define LIBMPEG2_BITSTREAM_READER_HACK //add BERO - -#ifdef HAVE_AV_CONFIG_H -/* only include the following when compiling package */ -# include "config.h" - -# include -# include -# include -# include -# ifndef __BEOS__ -# include -# else -# include "berrno.h" -# endif -# include - -# ifndef ENODATA -# define ENODATA 61 -# endif - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#include -#ifndef offsetof -# define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F)) -#endif - -#define AVOPTION_CODEC_BOOL(name, help, field) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_BOOL } -#define AVOPTION_CODEC_DOUBLE(name, help, field, minv, maxv, defval) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_DOUBLE, minv, maxv, defval } -#define AVOPTION_CODEC_FLAG(name, help, field, flag, defval) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_FLAG, flag, 0, defval } -#define AVOPTION_CODEC_INT(name, help, field, minv, maxv, defval) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_INT, minv, maxv, defval } -#define AVOPTION_CODEC_STRING(name, help, field, str, val) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_STRING, .defval = val, .defstr = str } -#define AVOPTION_CODEC_RCOVERRIDE(name, help, field) \ - { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_RCOVERRIDE, .defval = 0, .defstr = NULL } -#define AVOPTION_SUB(ptr) { .name = NULL, .help = (const char*)ptr } -#define AVOPTION_END() AVOPTION_SUB(NULL) - -struct AVOption; -#ifdef HAVE_MMX -extern const struct AVOption avoptions_common[3 + 5]; -#else -extern const struct AVOption avoptions_common[3]; -#endif -extern const struct AVOption avoptions_workaround_bug[11]; - -#endif /* HAVE_AV_CONFIG_H */ - -/* Suppress restrict if it was not defined in config.h. */ -#ifndef restrict -# define restrict -#endif - -#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) -# define always_inline __attribute__((always_inline)) inline -#else -# define always_inline inline -#endif - -#ifdef CONFIG_WIN32 - -/* windows */ - -typedef unsigned short uint16_t; -typedef signed short int16_t; -typedef unsigned char uint8_t; -typedef unsigned int uint32_t; -typedef unsigned __int64 uint64_t; -typedef signed char int8_t; -typedef signed int int32_t; -typedef signed __int64 int64_t; - -# ifndef __MINGW32__ -# define int64_t_C(c) (c ## i64) -# define uint64_t_C(c) (c ## i64) - -# define inline __inline - -# else -# define int64_t_C(c) (c ## LL) -# define uint64_t_C(c) (c ## ULL) -# endif /* __MINGW32__ */ - -# ifdef _DEBUG -# define DEBUG -# endif - -# define snprintf _snprintf -# define vsnprintf _vsnprintf - -/* CONFIG_WIN32 end */ -#elif defined (CONFIG_OS2) -/* OS/2 EMX */ - -#include - -#ifndef int64_t_C -#define int64_t_C(c) (c ## LL) -#define uint64_t_C(c) (c ## ULL) -#endif - -#ifdef HAVE_AV_CONFIG_H - -#ifdef USE_FASTMEMCPY -#include "fastmemcpy.h" -#endif - -#include - -#endif /* HAVE_AV_CONFIG_H */ - -/* CONFIG_OS2 end */ -#else - -/* unix */ - -#include - -#ifndef int64_t_C -#define int64_t_C(c) (c ## LL) -#define uint64_t_C(c) (c ## ULL) -#endif - -#ifdef HAVE_AV_CONFIG_H - -# ifdef USE_FASTMEMCPY -# include "fastmemcpy.h" -# endif -# endif /* HAVE_AV_CONFIG_H */ - -#endif /* !CONFIG_WIN32 && !CONFIG_OS2 */ - -#ifdef HAVE_AV_CONFIG_H - -# include "bswap.h" - -# if defined(__MINGW32__) || defined(__CYGWIN__) || \ - defined(__OS2__) || (defined (__OpenBSD__) && !defined(__ELF__)) -# define MANGLE(a) "_" #a -# else -# define MANGLE(a) #a -# endif - -/* debug stuff */ - -# ifndef DEBUG -# define NDEBUG -# endif -# include - -/* dprintf macros */ -# if defined(CONFIG_WIN32) && !defined(__MINGW32__) - -inline void dprintf(const char* fmt,...) {} - -# else - -# ifdef DEBUG -# define dprintf(fmt,args...) printf(fmt, ## args) -# else -# define dprintf(fmt,args...) -# endif - -# endif /* !CONFIG_WIN32 */ - -# define av_abort() do { fprintf(stderr, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0) - -//rounded divison & shift -#define RSHIFT(a,b) ((a) > 0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b)) -/* assume b>0 */ -#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) -#define ABS(a) ((a) >= 0 ? (a) : (-(a))) - -#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) -#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) - -extern const uint32_t inverse[256]; - -#ifdef ARCH_X86 -# define FASTDIV(a,b) \ - ({\ - int ret,dmy;\ - asm volatile(\ - "mull %3"\ - :"=d"(ret),"=a"(dmy)\ - :"1"(a),"g"(inverse[b])\ - );\ - ret;\ - }) -#elif defined(CONFIG_FASTDIV) -# define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*inverse[b])>>32)) -#else -# define FASTDIV(a,b) ((a)/(b)) -#endif - -#ifdef ARCH_X86 -// avoid +32 for shift optimization (gcc should do that ...) -static inline int32_t NEG_SSR32( int32_t a, int8_t s){ - asm ("sarl %1, %0\n\t" - : "+r" (a) - : "ic" ((uint8_t)(-s)) - ); - return a; -} -static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ - asm ("shrl %1, %0\n\t" - : "+r" (a) - : "ic" ((uint8_t)(-s)) - ); - return a; -} -#else -# define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s))) -# define NEG_USR32(a,s) (((uint32_t)(a))>>(32-(s))) -#endif - -/* bit output */ - -struct PutBitContext; - -typedef void (*WriteDataFunc)(void *, uint8_t *, int); - -typedef struct PutBitContext { -#ifdef ALT_BITSTREAM_WRITER - uint8_t *buf, *buf_end; - int index; -#else - uint32_t bit_buf; - int bit_left; - uint8_t *buf, *buf_ptr, *buf_end; -#endif - int64_t data_out_size; /* in bytes */ -} PutBitContext; - -void init_put_bits(PutBitContext *s, - uint8_t *buffer, int buffer_size, - void *opaque, - void (*write_data)(void *, uint8_t *, int)); - -int64_t get_bit_count(PutBitContext *s); /* XXX: change function name */ -void align_put_bits(PutBitContext *s); -void flush_put_bits(PutBitContext *s); -void put_string(PutBitContext * pbc, char *s); - -/* bit input */ - -typedef struct GetBitContext { - const uint8_t *buffer, *buffer_end; -#ifdef ALT_BITSTREAM_READER - int index; -#elif defined LIBMPEG2_BITSTREAM_READER - uint8_t *buffer_ptr; - uint32_t cache; - int bit_count; -#elif defined A32_BITSTREAM_READER - uint32_t *buffer_ptr; - uint32_t cache0; - uint32_t cache1; - int bit_count; -#endif - int size_in_bits; -} GetBitContext; - -static inline int get_bits_count(GetBitContext *s); - -#define VLC_TYPE int16_t - -typedef struct VLC { - int bits; - VLC_TYPE (*table)[2]; ///< code, bits - int table_size, table_allocated; -} VLC; - -typedef struct RL_VLC_ELEM { - int16_t level; - int8_t len; - uint8_t run; -} RL_VLC_ELEM; - -#ifdef ARCH_SPARC64 -#define UNALIGNED_STORES_ARE_BAD -#endif - -/* used to avoid missaligned exceptions on some archs (alpha, ...) */ -#ifdef ARCH_X86 -# define unaligned32(a) (*(uint32_t*)(a)) -#else -# ifdef __GNUC__ -static inline uint32_t unaligned32(const void *v) { - struct Unaligned { - uint32_t i; - } __attribute__((packed)); - - return ((const struct Unaligned *) v)->i; -} -# elif defined(__DECC) -static inline uint32_t unaligned32(const void *v) { - return *(const __unaligned uint32_t *) v; -} -# else -static inline uint32_t unaligned32(const void *v) { - return *(const uint32_t *) v; -} -# endif -#endif //!ARCH_X86 - -#ifndef ALT_BITSTREAM_WRITER -static inline void put_bits(PutBitContext *s, int n, unsigned int value) -{ - unsigned int bit_buf; - int bit_left; - -#ifdef STATS - st_out_bit_counts[st_current_index] += n; -#endif - // ZZLog::Debug_Log("put_bits=%d %x.", n, value); - assert(n == 32 || value < (1U << n)); - - bit_buf = s->bit_buf; - bit_left = s->bit_left; - - // ZZLog::Debug_Log("n=%d value=%x cnt=%d buf=%x.", n, value, bit_cnt, bit_buf); - /* XXX: optimize */ - if (n < bit_left) { - bit_buf = (bit_buf<> (n - bit_left); -#ifdef UNALIGNED_STORES_ARE_BAD - if (3 & (int) s->buf_ptr) { - s->buf_ptr[0] = bit_buf >> 24; - s->buf_ptr[1] = bit_buf >> 16; - s->buf_ptr[2] = bit_buf >> 8; - s->buf_ptr[3] = bit_buf ; - } else -#endif - *(uint32_t *)s->buf_ptr = be2me_32(bit_buf); - //ZZLog::Debug_Log("bitbuf = %08x.", bit_buf); - s->buf_ptr+=4; - bit_left+=32 - n; - bit_buf = value; - } - - s->bit_buf = bit_buf; - s->bit_left = bit_left; -} -#endif - - -#ifdef ALT_BITSTREAM_WRITER -static inline void put_bits(PutBitContext *s, int n, unsigned int value) -{ -# ifdef ALIGNED_BITSTREAM_WRITER -# ifdef ARCH_X86 - asm volatile( - "movl %0, %%ecx \n\t" - "xorl %%eax, %%eax \n\t" - "shrdl %%cl, %1, %%eax \n\t" - "shrl %%cl, %1 \n\t" - "movl %0, %%ecx \n\t" - "shrl $3, %%ecx \n\t" - "andl $0xFFFFFFFC, %%ecx \n\t" - "bswapl %1 \n\t" - "orl %1, (%2, %%ecx) \n\t" - "bswapl %%eax \n\t" - "addl %3, %0 \n\t" - "movl %%eax, 4(%2, %%ecx) \n\t" - : "=&r" (s->index), "=&r" (value) - : "r" (s->buf), "r" (n), "0" (s->index), "1" (value<<(-n)) - : "%eax", "%ecx" - ); -# else - int index= s->index; - uint32_t *ptr= ((uint32_t *)s->buf)+(index>>5); - - value<<= 32-n; - - ptr[0] |= be2me_32(value>>(index&31)); - ptr[1] = be2me_32(value<<(32-(index&31))); -// if (n > 24) ZZLog::Debug_Log("%d %d", n, value); - index+= n; - s->index= index; -# endif -# else //ALIGNED_BITSTREAM_WRITER -# ifdef ARCH_X86 - asm volatile( - "movl $7, %%ecx \n\t" - "andl %0, %%ecx \n\t" - "addl %3, %%ecx \n\t" - "negl %%ecx \n\t" - "shll %%cl, %1 \n\t" - "bswapl %1 \n\t" - "movl %0, %%ecx \n\t" - "shrl $3, %%ecx \n\t" - "orl %1, (%%ecx, %2) \n\t" - "addl %3, %0 \n\t" - "movl $0, 4(%%ecx, %2) \n\t" - : "=&r" (s->index), "=&r" (value) - : "r" (s->buf), "r" (n), "0" (s->index), "1" (value) - : "%ecx" - ); -# else - int index= s->index; - uint32_t *ptr= (uint32_t*)(((uint8_t *)s->buf)+(index>>3)); - - ptr[0] |= be2me_32(value<<(32-n-(index&7) )); - ptr[1] = 0; -// if (n > 24) ZZLog::Debug_Log("%d %d", n, value); - index+= n; - s->index= index; -# endif -# endif //!ALIGNED_BITSTREAM_WRITER -} -#endif - - -static inline uint8_t* pbBufPtr(PutBitContext *s) -{ -#ifdef ALT_BITSTREAM_WRITER - return s->buf + (s->index>>3); -#else - return s->buf_ptr; -#endif -} - -/* Bitstream reader API docs: -name - abritary name which is used as prefix for the internal variables - -gb - getbitcontext - -OPEN_READER(name, gb) - loads gb into local variables - -CLOSE_READER(name, gb) - stores local vars in gb - -UPDATE_CACHE(name, gb) - refills the internal cache from the bitstream - after this call at least MIN_CACHE_BITS will be available, - -GET_CACHE(name, gb) - will output the contents of the internal cache, next bit is MSB of 32 or 64 bit (FIXME 64bit) - -SHOW_UBITS(name, gb, num) - will return the nest num bits - -SHOW_SBITS(name, gb, num) - will return the nest num bits and do sign extension - -SKIP_BITS(name, gb, num) - will skip over the next num bits - note, this is equinvalent to SKIP_CACHE; SKIP_COUNTER - -SKIP_CACHE(name, gb, num) - will remove the next num bits from the cache (note SKIP_COUNTER MUST be called before UPDATE_CACHE / CLOSE_READER) - -SKIP_COUNTER(name, gb, num) - will increment the internal bit counter (see SKIP_CACHE & SKIP_BITS) - -LAST_SKIP_CACHE(name, gb, num) - will remove the next num bits from the cache if it is needed for UPDATE_CACHE otherwise it will do nothing - -LAST_SKIP_BITS(name, gb, num) - is equinvalent to SKIP_LAST_CACHE; SKIP_COUNTER - -for examples see get_bits, show_bits, skip_bits, get_vlc -*/ - -static inline int unaligned32_be(const void *v) -{ -#ifdef CONFIG_ALIGN - const uint8_t *p=v; - return (((p[0]<<8) | p[1])<<16) | (p[2]<<8) | (p[3]); -#else - return be2me_32( unaligned32(v)); //original -#endif -} - -#ifdef ALT_BITSTREAM_READER -# define MIN_CACHE_BITS 25 - -# define OPEN_READER(name, gb)\ - int name##_index= (gb)->index;\ - int name##_cache= 0;\ - -# define CLOSE_READER(name, gb)\ - (gb)->index= name##_index;\ - -# define UPDATE_CACHE(name, gb)\ - name##_cache= unaligned32_be( ((uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);\ - -# define SKIP_CACHE(name, gb, num)\ - name##_cache <<= (num);\ - -// FIXME name? -# define SKIP_COUNTER(name, gb, num)\ - name##_index += (num);\ - -# define SKIP_BITS(name, gb, num)\ - {\ - SKIP_CACHE(name, gb, num)\ - SKIP_COUNTER(name, gb, num)\ - }\ - -# define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) -# define LAST_SKIP_CACHE(name, gb, num) ; - -# define SHOW_UBITS(name, gb, num)\ - NEG_USR32(name##_cache, num) - -# define SHOW_SBITS(name, gb, num)\ - NEG_SSR32(name##_cache, num) - -# define GET_CACHE(name, gb)\ - ((uint32_t)name##_cache) - -static inline int get_bits_count(GetBitContext *s){ - return s->index; -} -#elif defined LIBMPEG2_BITSTREAM_READER -//libmpeg2 like reader - -# define MIN_CACHE_BITS 17 - -# define OPEN_READER(name, gb)\ - int name##_bit_count=(gb)->bit_count;\ - int name##_cache= (gb)->cache;\ - uint8_t * name##_buffer_ptr=(gb)->buffer_ptr;\ - -# define CLOSE_READER(name, gb)\ - (gb)->bit_count= name##_bit_count;\ - (gb)->cache= name##_cache;\ - (gb)->buffer_ptr= name##_buffer_ptr;\ - -#ifdef LIBMPEG2_BITSTREAM_READER_HACK - -# define UPDATE_CACHE(name, gb)\ - if(name##_bit_count >= 0){\ - name##_cache+= (int)be2me_16(*(uint16_t*)name##_buffer_ptr) << name##_bit_count;\ - ((uint16_t*)name##_buffer_ptr)++;\ - name##_bit_count-= 16;\ - }\ - -#else - -# define UPDATE_CACHE(name, gb)\ - if(name##_bit_count >= 0){\ - name##_cache+= ((name##_buffer_ptr[0]<<8) + name##_buffer_ptr[1]) << name##_bit_count;\ - name##_buffer_ptr+=2;\ - name##_bit_count-= 16;\ - }\ - -#endif - -# define SKIP_CACHE(name, gb, num)\ - name##_cache <<= (num);\ - -# define SKIP_COUNTER(name, gb, num)\ - name##_bit_count += (num);\ - -# define SKIP_BITS(name, gb, num)\ - {\ - SKIP_CACHE(name, gb, num)\ - SKIP_COUNTER(name, gb, num)\ - }\ - -# define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num) -# define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num) - -# define SHOW_UBITS(name, gb, num)\ - NEG_USR32(name##_cache, num) - -# define SHOW_SBITS(name, gb, num)\ - NEG_SSR32(name##_cache, num) - -# define GET_CACHE(name, gb)\ - ((uint32_t)name##_cache) - -static inline int get_bits_count(GetBitContext *s){ - return (s->buffer_ptr - s->buffer)*8 - 16 + s->bit_count; -} - -#elif defined A32_BITSTREAM_READER - -# define MIN_CACHE_BITS 32 - -# define OPEN_READER(name, gb)\ - int name##_bit_count=(gb)->bit_count;\ - uint32_t name##_cache0= (gb)->cache0;\ - uint32_t name##_cache1= (gb)->cache1;\ - uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;\ - -# define CLOSE_READER(name, gb)\ - (gb)->bit_count= name##_bit_count;\ - (gb)->cache0= name##_cache0;\ - (gb)->cache1= name##_cache1;\ - (gb)->buffer_ptr= name##_buffer_ptr;\ - -# define UPDATE_CACHE(name, gb)\ - if(name##_bit_count > 0){\ - const uint32_t next= be2me_32( *name##_buffer_ptr );\ - name##_cache0 |= NEG_USR32(next,name##_bit_count);\ - name##_cache1 |= next<buffer_ptr - s->buffer)*8 - 32 + s->bit_count; -} - -#endif - -/** - * read mpeg1 dc style vlc (sign bit + mantisse with no MSB). - * if MSB not set it is negative - * @param n length in bits - * @author BERO - */ -static inline int get_xbits(GetBitContext *s, int n){ - register int tmp; - register int32_t cache; - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - cache = GET_CACHE(re,s); - if ((int32_t)cache<0) { //MSB=1 - tmp = NEG_USR32(cache,n); - } else { - // tmp = (-1<index+=n for the ALT_READER :)) - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - LAST_SKIP_BITS(re, s, n) - CLOSE_READER(re, s) -} - -static inline unsigned int get_bits1(GetBitContext *s){ -#ifdef ALT_BITSTREAM_READER - int index= s->index; - uint8_t result= s->buffer[ index>>3 ]; - result<<= (index&0x07); - result>>= 8 - 1; - index++; - s->index= index; - - return result; -#else - return get_bits(s, 1); -#endif -} - -static inline unsigned int show_bits1(GetBitContext *s){ - return show_bits(s, 1); -} - -static inline void skip_bits1(GetBitContext *s){ - skip_bits(s, 1); -} - -void init_get_bits(GetBitContext *s, - const uint8_t *buffer, int buffer_size); - -int check_marker(GetBitContext *s, const char *msg); -void align_get_bits(GetBitContext *s); -int init_vlc(VLC *vlc, int nb_bits, int nb_codes, - const void *bits, int bits_wrap, int bits_size, - const void *codes, int codes_wrap, int codes_size); -void free_vlc(VLC *vlc); - -/** - * - * if the vlc code is invalid and max_depth=1 than no bits will be removed - * if the vlc code is invalid and max_depth>1 than the number of bits removed - * is undefined - */ -#define GET_VLC(code, name, gb, table, bits, max_depth)\ -{\ - int n, index, nb_bits;\ -\ - index= SHOW_UBITS(name, gb, bits);\ - code = table[index][0];\ - n = table[index][1];\ -\ - if(max_depth > 1 && n < 0){\ - LAST_SKIP_BITS(name, gb, bits)\ - UPDATE_CACHE(name, gb)\ -\ - nb_bits = -n;\ -\ - index= SHOW_UBITS(name, gb, nb_bits) + code;\ - code = table[index][0];\ - n = table[index][1];\ - if(max_depth > 2 && n < 0){\ - LAST_SKIP_BITS(name, gb, nb_bits)\ - UPDATE_CACHE(name, gb)\ -\ - nb_bits = -n;\ -\ - index= SHOW_UBITS(name, gb, nb_bits) + code;\ - code = table[index][0];\ - n = table[index][1];\ - }\ - }\ - SKIP_BITS(name, gb, n)\ -} - -#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth)\ -{\ - int n, index, nb_bits;\ -\ - index= SHOW_UBITS(name, gb, bits);\ - level = table[index].level;\ - n = table[index].len;\ -\ - if(max_depth > 1 && n < 0){\ - LAST_SKIP_BITS(name, gb, bits)\ - UPDATE_CACHE(name, gb)\ -\ - nb_bits = -n;\ -\ - index= SHOW_UBITS(name, gb, nb_bits) + level;\ - level = table[index].level;\ - n = table[index].len;\ - }\ - run= table[index].run;\ - SKIP_BITS(name, gb, n)\ -} - -// deprecated, dont use get_vlc for new code, use get_vlc2 instead or use GET_VLC directly -static inline int get_vlc(GetBitContext *s, VLC *vlc) -{ - int code; - VLC_TYPE (*table)[2]= vlc->table; - - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - - GET_VLC(code, re, s, table, vlc->bits, 3) - - CLOSE_READER(re, s) - return code; -} - -/** - * parses a vlc code, faster then get_vlc() - * @param bits is the number of bits which will be read at once, must be - * identical to nb_bits in init_vlc() - * @param max_depth is the number of times bits bits must be readed to completly - * read the longest vlc code - * = (max_vlc_length + bits - 1) / bits - */ -static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], - int bits, int max_depth) -{ - int code; - - OPEN_READER(re, s) - UPDATE_CACHE(re, s) - - GET_VLC(code, re, s, table, bits, max_depth) - - CLOSE_READER(re, s) - return code; -} - -//#define TRACE - -#ifdef TRACE - -static inline void print_bin(int bits, int n){ -#if _DEBUG - int i; - - for(i=n-1; i>=0; i--){ - ZZLog::Log("%d", (bits>>i)&1); - } - for(i=n; i<24; i++) - ZZLog::Log(" "); -#endif -} - -static inline int get_bits_trace(GetBitContext *s, int n, char *file, char *func, int line){ - int r= get_bits(s, n); - - print_bin(r, n); - ZZLog::Debug_Log("%5d %2d %3d bit @%5d in %s %s:%d", r, n, r, get_bits_count(s)-n, file, func, line); - return r; -} -static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, char *func, int line){ - int show= show_bits(s, 24); - int pos= get_bits_count(s); - int r= get_vlc2(s, table, bits, max_depth); - int len= get_bits_count(s) - pos; - int bits2= show>>(24-len); - - print_bin(bits2, len); - - ZZLog::Debug_Log("%5d %2d %3d vlc @%5d in %s %s:%d", bits2, len, r, pos, file, func, line); - return r; -} -static inline int get_xbits_trace(GetBitContext *s, int n, char *file, char *func, int line){ - int show= show_bits(s, n); - int r= get_xbits(s, n); - - print_bin(show, n); - ZZLog::Debug_Log("%5d %2d %3d xbt @%5d in %s %s:%d", show, n, r, get_bits_count(s)-n, file, func, line); - return r; -} - -#define get_bits(s, n) get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_bits1(s) get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_vlc(s, vlc) get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) - -#define tprintf printf - -#else //TRACE -#define tprintf(_arg...) {} -#endif - -/* define it to include statistics code (useful only for optimizing - codec efficiency */ -//#define STATS - -#ifdef STATS - -enum { - ST_UNKNOWN, - ST_DC, - ST_INTRA_AC, - ST_INTER_AC, - ST_INTRA_MB, - ST_INTER_MB, - ST_MV, - ST_NB, -}; - -extern int st_current_index; -extern unsigned int st_bit_counts[ST_NB]; -extern unsigned int st_out_bit_counts[ST_NB]; - -void print_stats(void); -#endif - -/* misc math functions */ -extern const uint8_t ff_log2_tab[256]; - -static inline int av_log2(unsigned int v) -{ - int n; - - n = 0; - if (v & 0xffff0000) { - v >>= 16; - n += 16; - } - if (v & 0xff00) { - v >>= 8; - n += 8; - } - n += ff_log2_tab[v]; - - return n; -} - -static inline int av_log2_16bit(unsigned int v) -{ - int n; - - n = 0; - if (v & 0xff00) { - v >>= 8; - n += 8; - } - n += ff_log2_tab[v]; - - return n; -} - - -/* median of 3 */ -static inline int mid_pred(int a, int b, int c) -{ - int vmin, vmax; - vmax = vmin = a; - if (b < vmin) - vmin = b; - else - vmax = b; - - if (c < vmin) - vmin = c; - else if (c > vmax) - vmax = c; - - return a + b + c - vmin - vmax; -} - -static inline int clip(int a, int amin, int amax) -{ - if (a < amin) - return amin; - else if (a > amax) - return amax; - else - return a; -} - -/* math */ -extern const uint8_t ff_sqrt_tab[128]; - -int64_t ff_gcd(int64_t a, int64_t b); - -static inline int ff_sqrt(int a) -{ - int ret=0; - int s; - int ret_sq=0; - - if(a<128) return ff_sqrt_tab[a]; - - for(s=15; s>=0; s--){ - int b= ret_sq + (1<<(s*2)) + (ret<>31;\ - level= (level^mask)-mask; -#endif - - -#if __CPU__ >= 686 && !defined(RUNTIME_CPUDETECT) -#define COPY3_IF_LT(x,y,a,b,c,d)\ -asm volatile (\ - "cmpl %0, %3 \n\t"\ - "cmovl %3, %0 \n\t"\ - "cmovl %4, %1 \n\t"\ - "cmovl %5, %2 \n\t"\ - : "+r" (x), "+r" (a), "+r" (c)\ - : "r" (y), "r" (b), "r" (d)\ -); -#else -#define COPY3_IF_LT(x,y,a,b,c,d)\ -if((y)<(x)){\ - (x)=(y);\ - (a)=(b);\ - (c)=(d);\ -} -#endif - -#ifdef ARCH_X86 -static inline long long rdtsc() -{ - long long l; - asm volatile( "rdtsc\n\t" - : "=A" (l) - ); - return l; -} - -#define START_TIMER \ -static uint64_t tsum=0;\ -static int tcount=0;\ -static int tskip_count=0;\ -uint64_t tend;\ -uint64_t tstart= rdtsc();\ - -#define STOP_TIMER(id) \ -tend= rdtsc();\ -if(tcount<2 || tend - tstart < 4*tsum/tcount){\ - tsum+= tend - tstart;\ - tcount++;\ -}else\ - tskip_count++;\ -if(256*256*256*64%(tcount+tskip_count)==0){\ - fprintf(stderr, "%Ld dezicycles in %s, %d runs, %d skips\n", tsum*10/tcount, id, tcount, tskip_count);\ -} -#endif - -#define CLAMP_TO_8BIT(d) ((d > 0xff) ? 0xff : (d < 0) ? 0 : d) - -/* avoid usage of various functions */ -#define malloc please_use_av_malloc -#define free please_use_av_free -#define realloc please_use_av_realloc - -#define CHECKED_ALLOCZ(p, size)\ -{\ - p= av_mallocz(size);\ - if(p==NULL && (size)!=0){\ - perror("malloc");\ - goto fail;\ - }\ -} - -#endif /* HAVE_AV_CONFIG_H */ - -#endif /* COMMON_H */ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/CRC.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/CRC.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/CRC.h 2010-11-07 04:45:10.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/CRC.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,408 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef CRC_H_INCLUDED -#define CRC_H_INCLUDED - -#include "ZZHacks.h" - -// CRC Information -enum Title_Info -{ - Unknown_Title, - MetalSlug6, - TomoyoAfter, - Clannad, - Lamune, - KyuuketsuKitanMoonties, - PiaCarroteYoukosoGPGakuenPrincess, - KazokuKeikakuKokoroNoKizuna, - DuelSaviorDestiny, - FFX, - FFX2, - FFXII, - ShadowHearts, - Okami, - MetalGearSolid3, - DBZBT2, - DBZBT3, - SFEX3, - Bully, - BullyCC, - SoTC, - OnePieceGrandAdventure, - OnePieceGrandBattle, - ICO, - GT4, - WildArms4, - WildArms5, - Manhunt2, - CrashBandicootWoC, - ResidentEvil4, - Spartan, - AceCombat4, - Drakengard2, - Tekken5, - IkkiTousen, - GodOfWar, - GodOfWar2, - JackieChanAdv, - HarvestMoon, - NamcoXCapcom, - GiTS, - Onimusha3, - MajokkoALaMode2, - TalesOfAbyss, - SonicUnleashed, - SimpsonsGame, - Genji, - StarOcean3, - ValkyrieProfile2, - RadiataStories, - SMTNocturne, - SMTDDS1, - SMTDDS2, - RozenMaidenGebetGarden, - Xenosaga, - Espgaluda, - OkageShadowKing, - ShadowTheHedgehog, - AtelierIris1, - AtelierIris2, - AtelierIris3, - AtelierJudie, - AtelierLilie, - AtelierViorate, - ArTonelico1, - ArTonelico2, - ManaKhemia1, - ManaKhemia2, - DarkCloud1, - DarkCloud2, - GhostInTheShell, - TitleCount, - Disgaea, - Disgaea2, - Gradius, - KingdomHearts, - KingdomHeartsFM, - KingdomHearts2, - KingdomHearts2FM, - KingdomHeartsCOM, - Tekken4, - Kaena, - Sims_The_Urbz, - MarvelxCapcom2, - NeoPets_Darkest_Faerie, - CrashnBurn, - Xenosaga2, - HauntingGround, - NightmareBeforeChristmas, - PowershotPinball, - BioHazard4, - NUMBER_OF_TITLES -}; - -enum Region_Info -{ - Unknown_Region, - US, - EU, - JP, - JPUNDUB, - RU, - FR, - DE, - IT, - ES, - ASIA, - RegionCount, -}; - -struct Game_Info -{ - u32 crc; - Title_Info title; - Region_Info region; - u32 flags; - s32 v_thresh, t_thresh; -}; - -static const Game_Info crc_game_list[] = -{ - // This section is straight from GSdx. Ones that also have ZZOgl hacks are commented out. - - {0x00000000, Unknown_Title, Unknown_Region, 0, -1, -1}, - {0x2113EA2E, MetalSlug6, Unknown_Region, 0, -1, -1}, - {0x42E05BAF, TomoyoAfter, JP, 0, -1, -1}, - {0x7800DC84, Clannad, JP, 0, -1, -1}, - {0xA6167B59, Lamune, JP, 0, -1, -1}, - {0xDDB59F46, KyuuketsuKitanMoonties, JP, 0, -1, -1}, - {0xC8EE2562, PiaCarroteYoukosoGPGakuenPrincess, JP, 0, -1, -1}, - {0x6CF94A43, KazokuKeikakuKokoroNoKizuna, JP, 0, -1, -1}, - {0xEDAF602D, DuelSaviorDestiny, JP, 0, -1, -1}, - {0xa39517ab, FFX, EU, 0, -1, -1}, - {0xa39517ae, FFX, FR, 0, -1, -1}, - {0x941bb7d9, FFX, DE, 0, -1, -1}, - {0xa39517a9, FFX, IT, 0, -1, -1}, - {0x941bb7de, FFX, ES, 0, -1, -1}, - {0xb4414ea1, FFX, RU, 0, -1, -1}, - {0xee97db5b, FFX, RU, 0, -1, -1}, - {0xaec495cc, FFX, RU, 0, -1, -1}, - {0xbb3d833a, FFX, US, 0, -1, -1}, - {0x6a4efe60, FFX, JP, 0, -1, -1}, - {0x3866ca7e, FFX, ASIA, 0, -1, -1}, // int. - {0x658597e2, FFX, JP, 0, -1, -1}, // int. - {0x9aac5309, FFX2, EU, 0, -1, -1}, - {0x9aac530c, FFX2, FR, 0, -1, -1}, - {0x9aac530a, FFX2, FR, 0, -1, -1}, // ? - {0x9aac530d, FFX2, DE, 0, -1, -1}, - {0x9aac530b, FFX2, IT, 0, -1, -1}, - {0x48fe0c71, FFX2, US, 0, -1, -1}, - {0xe1fd9a2d, FFX2, JP, 0, -1, -1}, // int. - {0x78da0252, FFXII, EU, 0, -1, -1}, - {0xc1274668, FFXII, EU, 0, -1, -1}, - {0xdc2a467e, FFXII, EU, 0, -1, -1}, - {0xca284668, FFXII, EU, 0, -1, -1}, - {0x280AD120, FFXII, JP, 0, -1, -1}, - {0x08C1ED4D, HauntingGround, Unknown_Region, 0, -1, -1}, - {0x2CD5794C, HauntingGround, EU, 0, -1, -1}, - {0x867BB945, HauntingGround, JP, 0, -1, -1}, - {0xE263BC4B, HauntingGround, JP, 0, -1, -1}, - {0x901AAC09, HauntingGround, US, 0, -1, -1}, - {0x8BE3D7B2, ShadowHearts, Unknown_Region, 0, -1, -1}, - {0xDEFA4763, ShadowHearts, US, 0, -1, -1}, - //{0x21068223, Okami, US, 0, -1, -1}, - //{0x891f223f, Okami, FR, 0, -1, -1}, - //{0xC5DEFEA0, Okami, JP, 0, -1, -1}, - {0x053D2239, MetalGearSolid3, US, 0, -1, -1}, - {0x086273D2, MetalGearSolid3, FR, 0, -1, -1}, - {0x26A6E286, MetalGearSolid3, EU, 0, -1, -1}, - {0xAA31B5BF, MetalGearSolid3, Unknown_Region, 0, -1, -1}, - {0x9F185CE1, MetalGearSolid3, Unknown_Region, 0, -1, -1}, - {0x98D4BC93, MetalGearSolid3, EU, 0, -1, -1}, - {0x86BC3040, MetalGearSolid3, US, 0, -1, -1}, //Subsistance disc 1 - {0x0481AD8A, MetalGearSolid3, JP, 0, -1, -1}, - {0x79ED26AD, MetalGearSolid3, EU, 0, -1, -1}, - {0x5E31EA42, MetalGearSolid3, EU, 0, -1, -1}, - {0xD7ED797D, MetalGearSolid3, EU, 0, -1, -1}, - {0x278722BF, DBZBT2, US, 0, -1, -1}, - {0xFE961D28, DBZBT2, US, 0, -1, -1}, - {0x0393B6BE, DBZBT2, EU, 0, -1, -1}, - {0xE2F289ED, DBZBT2, JP, 0, -1, -1}, // Sparking Neo! - {0x35AA84D1, DBZBT2, Unknown_Region, 0, -1, -1}, - {0x428113C2, DBZBT3, US, 0, -1, -1}, - {0xA422BB13, DBZBT3, EU, 0, -1, -1}, - {0x983C53D2, DBZBT3, Unknown_Region, 0, -1, -1}, - {0x983C53D3, DBZBT3, Unknown_Region, 0, -1, -1}, - {0x72B3802A, SFEX3, US, 0, -1, -1}, - {0x71521863, SFEX3, US, 0, -1, -1}, - {0x28703748, Bully, US, 0, -1, -1}, - {0xC78A495D, BullyCC, US, 0, -1, -1}, - {0xC19A374E, SoTC, US, 0, -1, -1}, - {0x7D8F539A, SoTC, EU, 0, -1, -1}, - {0x3122B508, OnePieceGrandAdventure, US, 0, -1, -1}, - {0x8DF14A24, OnePieceGrandAdventure, EU, 0, -1, -1}, - {0xB049DD5E, OnePieceGrandBattle, US, 0, -1, -1}, - {0x5D02CC5B, OnePieceGrandBattle, Unknown_Region, 0, -1, -1}, - {0x6F8545DB, ICO, US, 0, -1, -1}, - {0xB01A4C95, ICO, JP, 0, -1, -1}, - {0x5C991F4E, ICO, Unknown_Region, 0, -1, -1}, - // FIXME multiple CRC - {0x7ACF7E03, ICO, Unknown_Region, 0, -1, -1}, - {0xAEAD1CA3, GT4, JP, 0, -1, -1}, - {0x44A61C8F, GT4, Unknown_Region, 0, -1, -1}, - {0x0086E35B, GT4, Unknown_Region, 0, -1, -1}, - {0x77E61C8A, GT4, Unknown_Region, 0, -1, -1}, - {0xC164550A, WildArms5, JPUNDUB, 0, -1, -1}, - {0xC1640D2C, WildArms5, US, 0, -1, -1}, - {0x0FCF8FE4, WildArms5, EU, 0, -1, -1}, - {0x2294D322, WildArms5, JP, 0, -1, -1}, - {0x565B6170, WildArms5, JP, 0, -1, -1}, - {0xBBC3EFFA, WildArms4, US, 0, -1, -1}, - {0xBBC396EC, WildArms4, US, 0, -1, -1}, //hmm such a small diff in the CRC.. - {0x8B029334, Manhunt2, Unknown_Region, 0, -1, -1}, - {0x09F49E37, CrashBandicootWoC, Unknown_Region, 0, -1, -1}, - {0x013E349D, ResidentEvil4, US, 0, -1, -1}, - {0x6BA2F6B9, ResidentEvil4, Unknown_Region, 0, -1, -1}, - {0x60FA8C69, ResidentEvil4, JP, 0, -1, -1}, - {0x72E1E60E, Spartan, Unknown_Region, 0, -1, -1}, - {0x5ED8FB53, AceCombat4, JP, 0, -1, -1}, - {0x1B9B7563, AceCombat4, Unknown_Region, 0, -1, -1}, - {0xEC432B24, Drakengard2, Unknown_Region, 0, -1, -1}, - {0xFC46EA61, Tekken5, JP, 0, -1, -1}, - {0x1F88EE37, Tekken5, Unknown_Region, 0, -1, -1}, - {0x652050D2, Tekken5, Unknown_Region, 0, -1, -1}, - {0x9E98B8AE, IkkiTousen, JP, 0, -1, -1}, - //{0xD6385328, GodOfWar, US, 0, -1, -1}, - //{0xFB0E6D72, GodOfWar, EU, 0, -1, -1}, - //{0xEB001875, GodOfWar, EU, 0, -1, -1}, - //{0xA61A4C6D, GodOfWar, Unknown_Region, 0, -1, -1}, - //{0xE23D532B, GodOfWar, Unknown_Region, 0, -1, -1}, - //{0xDF1AF973, GodOfWar, Unknown_Region, 0, -1, -1}, - //{0xD6385328, GodOfWar, Unknown_Region, 0, -1, -1}, - {0x2F123FD8, GodOfWar2, RU, 0, -1, -1}, - {0x2F123FD8, GodOfWar2, US, 0, -1, -1}, - {0x44A8A22A, GodOfWar2, EU, 0, -1, -1}, - {0x4340C7C6, GodOfWar2, Unknown_Region, 0, -1, -1}, - {0xF8CD3DF6, GodOfWar2, Unknown_Region, 0, -1, -1}, - {0x0B82BFF7, GodOfWar2, Unknown_Region, 0, -1, -1}, - {0x5D482F18, JackieChanAdv, Unknown_Region, 0, -1, -1}, - //{0xf0a6d880, HarvestMoon, US, 0, -1, -1}, - {0x75c01a04, NamcoXCapcom, US, 0, -1, -1}, - {0xBF6F101F, GiTS, US, 0, -1, -1}, - {0xA5768F53, GiTS, JP, 0, -1, -1}, - {0x6BF11378, Onimusha3, US, 0, -1, -1}, - {0xF442260C, MajokkoALaMode2, JP, 0, -1, -1}, - {0x14FE77F7, TalesOfAbyss, US, 0, -1, -1}, - {0x045D77E9, TalesOfAbyss, JPUNDUB, 0, -1, -1}, - {0xAA5EC3A3, TalesOfAbyss, JP, 0, -1, -1}, - //{0xFB236A46, SonicUnleashed, US, 0, -1, -1}, - {0x4C7BB3C8, SimpsonsGame, Unknown_Region, 0, -1, -1}, - {0x4C94B32C, SimpsonsGame, Unknown_Region, 0, -1, -1}, - {0xD71B57F4, Genji, Unknown_Region, 0, -1, -1}, - {0x23A97857, StarOcean3, US, 0, -1, -1}, - {0xBEC32D49, StarOcean3, JP, 0, -1, -1}, - {0x8192A241, StarOcean3, JP, 0, -1, -1}, //NTSC JP special directors cut limited extra sugar on top edition (the special one :p) - {0x23A97857, StarOcean3, JPUNDUB, 0, -1, -1}, - {0xCC96CE93, ValkyrieProfile2, US, 0, -1, -1}, - {0x774DE8E2, ValkyrieProfile2, JP, 0, -1, -1}, - {0x04CCB600, ValkyrieProfile2, EU, 0, -1, -1}, - {0xB65E141B, ValkyrieProfile2, EU, 0, -1, -1}, // PAL German - {0x47B9B2FD, RadiataStories, US, 0, -1, -1}, - {0xE8FCF8EC, SMTNocturne, US, 0, -1, -1}, // GSdx saves/reloads z buffer around shadow drawing, same issue with all the SMT games following - {0xF0A31EE3, SMTNocturne, EU, 0, -1, -1}, // SMTNocturne (Lucifers Call in EU) - {0xAE0DE7B7, SMTNocturne, EU, 0, -1, -1}, // SMTNocturne (Lucifers Call in EU) - {0xD60DA6D4, SMTNocturne, JP, 0, -1, -1}, // SMTNocturne - {0x0e762e8d, SMTNocturne, JP, 0, -1, -1}, // SMTNocturne Maniacs - {0x47BA9034, SMTNocturne, JP, 0, -1, -1}, // SMTNocturne Maniacs Chronicle - {0xD7273511, SMTDDS1, US, 0, -1, -1}, // SMT Digital Devil Saga - {0x1683A6BE, SMTDDS1, EU, 0, -1, -1}, // SMT Digital Devil Saga - {0x44865CE1, SMTDDS1, JP, 0, -1, -1}, // SMT Digital Devil Saga - {0xD382C164, SMTDDS2, US, 0, -1, -1}, // SMT Digital Devil Saga 2 - {0xD568B684, SMTDDS2, EU, 0, -1, -1}, // SMT Digital Devil Saga 2 - {0xE47C1A9C, SMTDDS2, JP, 0, -1, -1}, // SMT Digital Devil Saga 2 - {0x0B8AB37B, RozenMaidenGebetGarden, JP, 0, -1, -1}, - - // And these are here for ZZogl hacks. - {0xA3D63039, Xenosaga, JP, GAME_DOPARALLELCTX, 64, 32}, - {0x0E7807B2, Xenosaga, US, GAME_DOPARALLELCTX, 64, 32}, - {0x7D2FE035, Espgaluda, JP, 0/*GAME_BIGVALIDATE*/, 24, -1}, - {0x21068223, Okami, US, GAME_XENOSPECHACK, -1, -1}, - {0x891f223f, Okami, FR, GAME_XENOSPECHACK, -1, -1}, - {0xC5DEFEA0, Okami, JP, GAME_XENOSPECHACK, -1, -1}, - {0xe0426fc6, OkageShadowKing, Unknown_Region, GAME_XENOSPECHACK, -1, -1}, - - {0xD6385328, GodOfWar, US, GAME_FULL16BITRES, -1, -1}, - {0xFB0E6D72, GodOfWar, EU, GAME_FULL16BITRES, -1, -1}, - {0xEB001875, GodOfWar, EU, GAME_FULL16BITRES, -1, -1}, - {0xA61A4C6D, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - {0xE23D532B, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - {0xDF1AF973, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - {0xD6385328, GodOfWar, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - - //{0x2F123FD8, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - //{0x44A8A22A, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - //{0x4340C7C6, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - //{0xF8CD3DF6, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - //{0x0B82BFF7, GodOfWar2, Unknown_Region, GAME_FULL16BITRES, -1, -1}, - - {0xF0A6D880, HarvestMoon, US, GAME_NOSTENCIL, -1, -1}, - //{0x304C115C, HarvestMoon, Unknown, GAME_NOSTENCIL, -1, -1}, - {0xFB236A46, SonicUnleashed, US, GAME_FASTUPDATE | GAME_NOALPHAFAIL, -1, -1}, - {0xa5d29941, ShadowTheHedgehog, US, GAME_FASTUPDATE | GAME_NOALPHAFAIL, -1, -1}, - - {0x7acf7e03, AtelierIris1, Unknown_Region, GAME_GUSTHACK, -1, -1}, - {0xF0457CEF, AtelierIris1, Unknown_Region, GAME_GUSTHACK, -1, -1}, - {0xE3981DBB, AtelierIris1, US, GAME_GUSTHACK, -1, -1}, - {0x9AC65D6A, AtelierIris2, US, GAME_GUSTHACK, -1, -1}, - {0x4CCC9212, AtelierIris3, US, GAME_GUSTHACK, -1, -1}, - {0xCA295E61, AtelierIris3, JP, GAME_GUSTHACK, -1, -1}, - //{0x4437F4B1, ArTonelico1, US, GAME_GUSTHACK, -1, -1}, - {0xF95F37EE, ArTonelico2, US, GAME_GUSTHACK, -1, -1}, - {0xF46142D3, ArTonelico2, JPUNDUB, GAME_GUSTHACK, -1, -1}, - - // According to Zeydlitz, Mana Khemia no longer needs the Gust Hack. - //{0x77b0236f, ManaKhemia1, US, GAME_GUSTHACK, -1, -1}, - //{0x433951e7, ManaKhemia2, US, GAME_GUSTHACK, -1, -1}, - //{0xda11c6d4, AtelierJudie, JP, GAME_GUSTHACK, -1, -1}, - //{0x3e72c085, AtelierLilie, JP, GAME_GUSTHACK, -1, -1}, - //{0x6eac076b, AtelierViorate, JP, GAME_GUSTHACK, -1, -1}, - - {0xbaa8dd8, DarkCloud1, US, GAME_NOTARGETRESOLVE, -1, -1}, - {0xA5C05C78, DarkCloud1, Unknown_Region, GAME_NOTARGETRESOLVE, -1, -1}, - //{0x1DF41F33, DarkCloud2, US, 0, -1, -1}, - {0x95cc86ef, GhostInTheShell, Unknown_Region, GAME_NOALPHAFAIL, -1, -1} - -// Game settings that used to be in the Patches folder. Commented out until I decide what to do with them. -// {0x951555A0, Disgaea2, US, GAME_NODEPTHRESOLVE, -1, -1}, -// {0x4334E17D, Disgaea2, JP, GAME_NODEPTHRESOLVE, -1, -1}, -// -// {0x5EB127E7, Gradius, JP, GAME_INTERLACE2X, -1, -1}, -// {0x6ADBC24B, Gradius, EU, GAME_INTERLACE2X, -1, -1}, -// {0xF22CDDAF, Gradius, US, GAME_INTERLACE2X, -1, -1}, -// -// {0xF52FB2BE, KingdomHearts, EU, GAME_QUICKRESOLVE1, -1, -1}, -// {0xAE3EAA05, KingdomHearts, DE, GAME_QUICKRESOLVE1, -1, -1}, -// {0xF6DC728D, KingdomHearts, FR, GAME_QUICKRESOLVE1, -1, -1}, -// {0x0F6B6315, KingdomHearts, US, GAME_QUICKRESOLVE1, -1, -1}, -// {0x3E68955A, KingdomHeartsFM, JP, GAME_QUICKRESOLVE1, -1, -1}, -// -// {0xC398F477, KingdomHearts2, EU, GAME_NODEPTHRESOLVE, -1, -1}, -// {0xDA0535FD, KingdomHearts2, US, GAME_NODEPTHRESOLVE, -1, -1}, -// {0x93F8A60B, KingdomHearts2, JP, GAME_NODEPTHRESOLVE, -1, -1}, -// {0xF266B00B, KingdomHearts2FM, JP, GAME_NODEPTHRESOLVE, -1, -1}, -// -// //The patch claimed to stop characters appearing as wigs on GeForce 8x00 series cards (Disable Alpha Testing) -// {0x2251E14D, Tekken4, EU, GAME_NOALPHATEST, -1, -1}, -// -// // This one is supposed to fix a refresh bug. -// {0x51F91783, Kaena, JP, GAME_NOTARGETRESOLVE, -1, -1}, -// -// {0xDEFA4763, ShadowHearts, EU, GAME_NODEPTHRESOLVE | GAME_NOQUICKRESOLVE | GAME_NOTARGETRESOLVE | GAME_AUTORESET, -1, -1}, -// {0x8BE3D7B2, ShadowHearts, US, GAME_NODEPTHUPDATE | GAME_AUTORESET | GAME_NOQUICKRESOLVE, -1, -1}, -// -// {0x015314A2, Sims_The_Urbz, US, GAME_NOQUICKRESOLVE, -1, -1}, -// -// // "Required fixes to visuals" -// {0x086273D2, MetalGearSolid3, US, GAME_FULL16BITRES | GAME_NODEPTHRESOLVE, -1, -1}, -// -// {0x4D228733, MarvelxCapcom2, US, GAME_QUICKRESOLVE1, -1, -1}, -// {0x934F9081, NeoPets_Darkest_Faerie, US, GAME_RESOLVEPROMOTED | GAME_FULL16BITRES | GAME_NODEPTHRESOLVE, -1, -1}, -// -// {0x21068223, Okami, US, GAME_FULL16BITRES|GAME_NODEPTHRESOLVE|GAME_FASTUPDATE, -1, -1}, -// {0xC5DEFEA0, Okami, JP, GAME_FULL16BITRES|GAME_NODEPTHRESOLVE|GAME_FASTUPDATE, -1, -1}, -// -// // Speed up -// {0x6BA2F6B9, ResidentEvil4, EU, GAME_NOTARGETRESOLVE | GAME_32BITTARGS, -1, -1}, -// {0x013E349D, ResidentEvil4, US, GAME_NOTARGETCLUT, -1, -1}, -// -// {0x2088950A, Xenosaga2, JP, GAME_FULL16BITRES | GAME_NODEPTHRESOLVE, -1, -1}, -// {0x901AAC09, HauntingGround, US, GAME_FULL16BITRES | GAME_NODEPTHRESOLVE, -1, -1}, -// {0x625AF967, NightmareBeforeChristmas, JP, GAME_TEXAHACK, -1, -1}, -// -// {0x3CFE3B37, PowershotPinball, EU, GAME_AUTORESET, -1, -1}, -// {0x60FA8C69, BioHazard4, JP, GAME_NOTARGETCLUT, -1, -1} -// End of game settings from the patch folder. -}; - -#define GAME_INFO_INDEX (sizeof(crc_game_list)/sizeof(Game_Info)) - - -#endif // CRC_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ctx0/ps2hw_ctx.fx pcsx2-1.4.0/plugins/zzogl-pg/opengl/ctx0/ps2hw_ctx.fx --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ctx0/ps2hw_ctx.fx 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ctx0/ps2hw_ctx.fx 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -// main ps2 memory, each pixel is stored in 32bit color -uniform samplerRECT g_sMemory : register(s0); - -// per context pixel shader constants -uniform half4 fTexAlpha2 : register(c2); - -uniform float4 g_fTexOffset : register(c4); // converts the page and block offsets into the mem addr/1024 -uniform float4 g_fTexDims : register(c6); // mult by tex dims when accessing the block texture -uniform float4 g_fTexBlock : register(c8); - -uniform float4 g_fClampExts : register(c10); // if clamping the texture, use (minu, minv, maxu, maxv) -uniform float4 TexWrapMode : register(c12); // 0 - repeat/clamp, 1 - region rep (use fRegRepMask) - -uniform float4 g_fRealTexDims : register(c14); // tex dims used for linear filtering (w,h,1/w,1/h) - -// (alpha0, alpha1, 1 if highlight2 and tcc is rgba, 1-y) -uniform half4 g_fTestBlack : register(c16); // used for aem bit - -uniform float4 g_fPageOffset : register(c18); - -uniform half4 fTexAlpha : register(c20); - -// vertex shader constants -uniform float4 g_fPosXY : register(c2); \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ctx1/ps2hw_ctx.fx pcsx2-1.4.0/plugins/zzogl-pg/opengl/ctx1/ps2hw_ctx.fx --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ctx1/ps2hw_ctx.fx 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ctx1/ps2hw_ctx.fx 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -uniform samplerRECT g_sMemory : register(s1); - -// per context pixel shader constants -uniform half4 fTexAlpha2 : register(c3); - -uniform float4 g_fTexOffset : register(c5); // converts the page and block offsets into the mem addr/1024 -uniform float4 g_fTexDims : register(c7); // mult by tex dims when accessing the block texture -uniform float4 g_fTexBlock : register(c9); - -uniform float4 g_fClampExts : register(c11); // if clamping the texture, use (minu, minv, maxu, maxv) -uniform float4 TexWrapMode : register(c13); // 0 - repeat/clamp, 1 - region rep (use fRegRepMask) - -uniform float4 g_fRealTexDims : register(c15); // tex dims used for linear filtering (w,h,1/w,1/h) - -// (alpha0, alpha1, 1 if highlight2 and tcc is rgba, 1-y) -uniform half4 g_fTestBlack : register(c17); // used for aem bit - -uniform float4 g_fPageOffset : register(c19); - -uniform half4 fTexAlpha : register(c21); - -// vertex shader constants -uniform float4 g_fPosXY : register(c3); \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GifTransfer.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/GifTransfer.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GifTransfer.cpp 2014-04-18 18:47:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GifTransfer.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,298 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "GifTransfer.h" - -#ifdef _DEBUG -static int path1_count = 0; -#endif - -static int nPath3Hack = 0; - -EXPORT_C_(void) GSgetLastTag(u64* ptag) -{ - FUNCLOG - - *(u32*)ptag = nPath3Hack; - nPath3Hack = 0; -} - -#ifdef _WIN32 -// for debug assertion checks (thread affinity checks) -extern HANDLE g_hCurrentThread; -#endif - -__forceinline void gifTransferLog(int index, const u32 *pMem, u32 size) -{ -#ifdef DEBUG_TRANSFER - - if (conf.log) - { - static int nSaveIndex = 0; - ZZLog::Debug_Log("%d: p:%d %x", nSaveIndex++, index + 1, size); - int vals[4] = {0}; - - for (u32 i = 0; i < size; i++) - { - for (u32 j = 0; j < 4; ++j) - vals[j] ^= pMem[4*i+j]; - } - - ZZLog::Debug_Log("%x %x %x %x", vals[0], vals[1], vals[2], vals[3]); - } - -#endif -} - -extern int g_GSMultiThreaded; - -template void _GSgifTransfer(const u32 *pMem, u32 size) -{ - FUNCLOG - - pathInfo *path = &gs.path[index]; - -#ifdef _WIN32 - assert(g_hCurrentThread == GetCurrentThread()); -#endif - -#ifdef _DEBUG - gifTransferLog(index, pMem, size); - const u32* start = pMem; - u32 size_arg = size; -#endif - - while (size > 0) - { - //LOG(_T("Transfer(%08x, %d) START\n"), pMem, size); - if (path->nloop == 0) - { - path->setTag(pMem); - pMem += 4; - size--; - - // eeuser 7.2.2. GIFtag: "... when NLOOP is 0, the GIF does not output anything, and - // values other than the EOP field are disregarded." - if (path->nloop > 0) - { - gs.q = 1.0f; - - if (path->tag.PRE && (path->tag.FLG == GIF_FLG_PACKED)) - { - u64 tagprim = path->tag.PRIM; - GIFRegHandlerPRIM((u32*)&tagprim); - } - } - } - else - { - switch (path->mode) - { - case GIF_FLG_PACKED: - { - // Needs to be looked at. - - // first try a shortcut for a very common case - - if (path->adonly && size >= path->nloop) - { - size -= path->nloop; - - do - { - GIFPackedRegHandlerA_D(pMem); - - pMem += 4; //sizeof(GIFPackedReg)/4; - } - while(--path->nloop > 0); - break; - } - - do - { - u32 reg = path->GetReg(); - g_GIFPackedRegHandlers[reg](pMem); - - pMem += 4; //sizeof(GIFPackedReg)/4; - size--; - } - while (path->StepReg() && (size > 0)); - - break; - } - - case GIF_FLG_REGLIST: - { - // Needs to be looked at. - //ZZLog::GS_Log("%8.8x%8.8x %d L", ((u32*)&gs.regs)[1], *(u32*)&gs.regs, path->tag.nreg/4); - - size *= 2; - - do - { - g_GIFRegHandlers[path->GetReg()](pMem); - - pMem += 2; - size--; - } - while (path->StepReg() && (size > 0)); - - if (size & 1) pMem += 2; - size /= 2; - break; - } - - case GIF_FLG_IMAGE: // FROM_VFRAM - case GIF_FLG_IMAGE2: // Used in the DirectX version, so we'll use it here too. - { - int len = min(size, path->nloop); - //ZZLog::Error_Log("GIF_FLG_IMAGE(%d)=%d", gs.imageTransfer, len); - - if (gs.transferring) - { - switch (gs.imageTransfer) - { - case XFER_HOST_TO_LOCAL: - TransferHostLocal(pMem, len * 4); - break; - - case XFER_LOCAL_TO_HOST: - // This can't happen; downloads can not be started or performed as part of - // a GIFtag operation. They're an entirely separate process that can only be - // done through the ReverseFIFO transfer (aka ReadFIFO). --air - assert(0); - //TransferLocalHost(pMem, len); - break; - - case XFER_LOCAL_TO_LOCAL: - //TransferLocalLocal(); - break; - - case XFER_DEACTIVATED: - //assert(0); - break; - - default: - //assert(0); - break; - } - - } - - pMem += len * 4; - - path->nloop -= len; - size -= len; - - break; - } - - default: // GIF_IMAGE - ZZLog::GS_Log("*** WARNING **** Unexpected GIFTag flag."); - assert(0); - path->nloop = 0; - break; - } - } - - if (index == 0) - { - if (path->tag.EOP && path->nloop == 0) - { - break; - } - } - } - -#ifdef _DEBUG - g_dump.Transfer(index, start, pMem - start + 4, size_arg); -#endif - - // This is the case when not all data was readed from one try: VU1 has too much data. - // So we should redo reading from the start. - if (index == 0) - { - if (size == 0 && path->nloop > 0) - { - if (g_GSMultiThreaded) - { - path->nloop = 0; - } - else - { - _GSgifTransfer<0>(pMem - 0x4000, 0x4000 / 16); - } - } - } -} - -// Used for replay -void GSgifTransfer0(u32 *pMem, u32 addr) -{ - _GSgifTransfer<0>(pMem, addr); -} - -EXPORT_C_(void) GSgifTransfer1(u32 *pMem, u32 addr) -{ - FUNCLOG - - //ZZLog::GS_Log("GSgifTransfer1 0x%x (mode %d).", addr, path->mode); - -#ifdef _DEBUG - ZZLog::Prim_Log("count: %d\n", path1_count); - path1_count++; -#endif - - _GSgifTransfer<0>((u32*)((u8*)pMem + addr), (0x4000 - addr) / 16); -} - -EXPORT_C_(void) GSgifTransfer2(u32 *pMem, u32 size) -{ - FUNCLOG - - //ZZLog::GS_Log("GSgifTransfer2 size = %lx (mode %d, gs.path2.tag.nloop = %d).", size, gs.path[1].mode, gs.path[1].tag.nloop); - - _GSgifTransfer<1>(const_cast(pMem), size); -} - -EXPORT_C_(void) GSgifTransfer3(u32 *pMem, u32 size) -{ - FUNCLOG - - //ZZLog::GS_Log("GSgifTransfer3 size = %lx (mode %d, gs.path3.tag.nloop = %d).", size, gs.path[2].mode, gs.path[2].tag.nloop); - - _GSgifTransfer<2>(const_cast(pMem), size); -} - -EXPORT_C_(void) GSgifTransfer(const u32 *pMem, u32 size) -{ - FUNCLOG - - //ZZLog::GS_Log("GSgifTransfer3 size = %lx (mode %d, gs.path3.tag.nloop = %d).", size, gs.path[2].mode, gs.path[2].tag.nloop); - - _GSgifTransfer<3>(pMem, size); -} - -void InitPath() -{ - gs.path[0].mode = gs.path[1].mode = gs.path[2].mode = gs.path[3].mode = 0; -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GifTransfer.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GifTransfer.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GifTransfer.h 2014-04-18 18:47:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GifTransfer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef GIFTRANSFER_H_INCLUDED -#define GIFTRANSFER_H_INCLUDED - -#include "Util.h" -#include "GS.h" -#include "Regs.h" - -enum GIF_FLG -{ - GIF_FLG_PACKED = 0, - GIF_FLG_REGLIST = 1, - GIF_FLG_IMAGE = 2, - GIF_FLG_IMAGE2 = 3 -}; - -// -// GIFTag -union GIFTag -{ - u64 ai64[2]; - u32 ai32[4]; - - struct - { - u32 NLOOP : 15; - u32 EOP : 1; - u32 _PAD1 : 16; - u32 _PAD2 : 14; - u32 PRE : 1; - u32 PRIM : 11; - u32 FLG : 2; // enum GIF_FLG - u32 NREG : 4; - u64 REGS : 64; - }; - - void set(const u32 *data) - { - for (int i = 0; i <= 3; i++) - { - ai32[i] = data[i]; - } - } - - GIFTag(u32 *data) - { - set(data); - } - - GIFTag(){ ai64[0] = 0; ai64[1] = 0; } -}; - -// EE part. Data transfer packet description - -typedef struct -{ - u32 mode; - int reg; - u64 regs; - u32 nloop; - int eop; - int nreg; - u32 adonly; - GIFTag tag; - - void setTag(const u32 *data) - { - tag.set(data); - - nloop = tag.NLOOP; - eop = tag.EOP; - mode = tag.FLG; - adonly = false; - - // Hmm.... - nreg = tag.NREG << 2; - if (nreg == 0) nreg = 64; - regs = tag.REGS; - reg = 0; - if ((nreg == 4) && (regs == GIF_REG_A_D)) adonly = true; - - // ZZLog::GS_Log("GIFtag: %8.8lx_%8.8lx_%8.8lx_%8.8lx: EOP=%d, NLOOP=%x, FLG=%x, NREG=%d, PRE=%d", - // data[3], data[2], data[1], data[0], - // path->eop, path->nloop, mode, path->nreg, tag.PRE); - } - - u32 GetReg() - { - return (regs >> reg) & 0xf; - } - - bool StepReg() - { - reg += 4; - - if (reg == nreg) - { - reg = 0; - nloop--; - - if (nloop == 0) return false; - } - - return true; - } - -} pathInfo; - -extern void _GSgifPacket(pathInfo *path, const u32 *pMem); -extern void _GSgifRegList(pathInfo *path, const u32 *pMem); -extern void GSgifTransfer0(u32* pMem, u32 addr); - -extern GIFRegHandler g_GIFPackedRegHandlers[]; -extern GIFRegHandler g_GIFRegHandlers[]; -extern void InitPath(); -#endif // GIFTRANSFER_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/glprocs.c pcsx2-1.4.0/plugins/zzogl-pg/opengl/glprocs.c --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/glprocs.c 2010-12-25 04:38:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/glprocs.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,17868 +0,0 @@ -/* -** GLprocs utility for getting function addresses for OpenGL(R) 1.2, -** OpenGL 1.3, OpenGL 1.4, OpenGL 1.5 and OpenGL extension functions. -** -** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) -** Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice including the dates of first publication and -** either this permission notice or a reference to -** http://oss.sgi.com/projects/FreeB/ -** shall be included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -** OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -** -** Except as contained in this notice, the name of Silicon Graphics, Inc. -** shall not be used in advertising or otherwise to promote the sale, use or -** other dealings in this Software without prior written authorization from -** Silicon Graphics, Inc. -** -** Additional Notice Provisions: This software was created using the -** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has -** not been independently verified as being compliant with the OpenGL(R) -** version 1.2.1 Specification. -** -** Initial version of glprocs.{c,h} contributed by Intel(R) Corporation. -*/ - -#include -#include - -#ifdef _WIN32 - #include "Utilities/RedtapeWindows.h" - #include //"gl.h" /* Include local "gl.h". Don't include vc32 . */ - #include "glprocs.h" -#else /* GLX */ - #include - #include - #include -#include "glprocs.h"// -// #define wglGetProcAddress glXGetProcAddress -inline void* wglGetProcAddress(const char* x) { - return (void*)glXGetProcAddress((const GLubyte*)x); -} - -#endif - -#define _ASSERT(a) assert(a) - -static void APIENTRY InitBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendColor"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendColor = extproc; - - glBlendColor(red, green, blue, alpha); -} - -static void APIENTRY InitBlendEquation (GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendEquation"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendEquation = extproc; - - glBlendEquation(mode); -} - -static void APIENTRY InitDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawRangeElements"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawRangeElements = extproc; - - glDrawRangeElements(mode, start, end, count, type, indices); -} - -static void APIENTRY InitColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTable"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTable = extproc; - - glColorTable(target, internalformat, width, format, type, table); -} - -static void APIENTRY InitColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableParameterfv = extproc; - - glColorTableParameterfv(target, pname, params); -} - -static void APIENTRY InitColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableParameteriv = extproc; - - glColorTableParameteriv(target, pname, params); -} - -static void APIENTRY InitCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyColorTable"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyColorTable = extproc; - - glCopyColorTable(target, internalformat, x, y, width); -} - -static void APIENTRY InitGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTable"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTable = extproc; - - glGetColorTable(target, format, type, table); -} - -static void APIENTRY InitGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameterfv = extproc; - - glGetColorTableParameterfv(target, pname, params); -} - -static void APIENTRY InitGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameteriv = extproc; - - glGetColorTableParameteriv(target, pname, params); -} - -static void APIENTRY InitColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorSubTable"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorSubTable = extproc; - - glColorSubTable(target, start, count, format, type, data); -} - -static void APIENTRY InitCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyColorSubTable"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyColorSubTable = extproc; - - glCopyColorSubTable(target, start, x, y, width); -} - -static void APIENTRY InitConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionFilter1D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionFilter1D = extproc; - - glConvolutionFilter1D(target, internalformat, width, format, type, image); -} - -static void APIENTRY InitConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionFilter2D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionFilter2D = extproc; - - glConvolutionFilter2D(target, internalformat, width, height, format, type, image); -} - -static void APIENTRY InitConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameterf"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameterf = extproc; - - glConvolutionParameterf(target, pname, params); -} - -static void APIENTRY InitConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameterfv = extproc; - - glConvolutionParameterfv(target, pname, params); -} - -static void APIENTRY InitConvolutionParameteri (GLenum target, GLenum pname, GLint params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameteri"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameteri = extproc; - - glConvolutionParameteri(target, pname, params); -} - -static void APIENTRY InitConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameteriv = extproc; - - glConvolutionParameteriv(target, pname, params); -} - -static void APIENTRY InitCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyConvolutionFilter1D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyConvolutionFilter1D = extproc; - - glCopyConvolutionFilter1D(target, internalformat, x, y, width); -} - -static void APIENTRY InitCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyConvolutionFilter2D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyConvolutionFilter2D = extproc; - - glCopyConvolutionFilter2D(target, internalformat, x, y, width, height); -} - -static void APIENTRY InitGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionFilter"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionFilter = extproc; - - glGetConvolutionFilter(target, format, type, image); -} - -static void APIENTRY InitGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionParameterfv = extproc; - - glGetConvolutionParameterfv(target, pname, params); -} - -static void APIENTRY InitGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionParameteriv = extproc; - - glGetConvolutionParameteriv(target, pname, params); -} - -static void APIENTRY InitGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetSeparableFilter"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetSeparableFilter = extproc; - - glGetSeparableFilter(target, format, type, row, column, span); -} - -static void APIENTRY InitSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSeparableFilter2D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSeparableFilter2D = extproc; - - glSeparableFilter2D(target, internalformat, width, height, format, type, row, column); -} - -static void APIENTRY InitGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogram"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogram = extproc; - - glGetHistogram(target, reset, format, type, values); -} - -static void APIENTRY InitGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogramParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogramParameterfv = extproc; - - glGetHistogramParameterfv(target, pname, params); -} - -static void APIENTRY InitGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogramParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogramParameteriv = extproc; - - glGetHistogramParameteriv(target, pname, params); -} - -static void APIENTRY InitGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmax"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmax = extproc; - - glGetMinmax(target, reset, format, type, values); -} - -static void APIENTRY InitGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmaxParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmaxParameterfv = extproc; - - glGetMinmaxParameterfv(target, pname, params); -} - -static void APIENTRY InitGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmaxParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmaxParameteriv = extproc; - - glGetMinmaxParameteriv(target, pname, params); -} - -static void APIENTRY InitHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glHistogram"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glHistogram = extproc; - - glHistogram(target, width, internalformat, sink); -} - -static void APIENTRY InitMinmax (GLenum target, GLenum internalformat, GLboolean sink) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMinmax"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMinmax = extproc; - - glMinmax(target, internalformat, sink); -} - -static void APIENTRY InitResetHistogram (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glResetHistogram"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glResetHistogram = extproc; - - glResetHistogram(target); -} - -static void APIENTRY InitResetMinmax (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glResetMinmax"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glResetMinmax = extproc; - - glResetMinmax(target); -} - -static void APIENTRY InitTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexImage3D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexImage3D = extproc; - - glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels); -} - -static void APIENTRY InitTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexSubImage3D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexSubImage3D = extproc; - - glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); -} - -static void APIENTRY InitCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexSubImage3D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexSubImage3D = extproc; - - glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -static void APIENTRY InitActiveTexture (GLenum texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glActiveTexture"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glActiveTexture = extproc; - - glActiveTexture(texture); -} - -static void APIENTRY InitClientActiveTexture (GLenum texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glClientActiveTexture"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glClientActiveTexture = extproc; - - glClientActiveTexture(texture); -} - -static void APIENTRY InitMultiTexCoord1d (GLenum target, GLdouble s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1d = extproc; - - glMultiTexCoord1d(target, s); -} - -static void APIENTRY InitMultiTexCoord1dv (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1dv = extproc; - - glMultiTexCoord1dv(target, v); -} - -static void APIENTRY InitMultiTexCoord1f (GLenum target, GLfloat s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1f = extproc; - - glMultiTexCoord1f(target, s); -} - -static void APIENTRY InitMultiTexCoord1fv (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1fv = extproc; - - glMultiTexCoord1fv(target, v); -} - -static void APIENTRY InitMultiTexCoord1i (GLenum target, GLint s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1i = extproc; - - glMultiTexCoord1i(target, s); -} - -static void APIENTRY InitMultiTexCoord1iv (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1iv = extproc; - - glMultiTexCoord1iv(target, v); -} - -static void APIENTRY InitMultiTexCoord1s (GLenum target, GLshort s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1s = extproc; - - glMultiTexCoord1s(target, s); -} - -static void APIENTRY InitMultiTexCoord1sv (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1sv = extproc; - - glMultiTexCoord1sv(target, v); -} - -static void APIENTRY InitMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2d = extproc; - - glMultiTexCoord2d(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2dv (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2dv = extproc; - - glMultiTexCoord2dv(target, v); -} - -static void APIENTRY InitMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2f = extproc; - - glMultiTexCoord2f(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2fv (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2fv = extproc; - - glMultiTexCoord2fv(target, v); -} - -static void APIENTRY InitMultiTexCoord2i (GLenum target, GLint s, GLint t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2i = extproc; - - glMultiTexCoord2i(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2iv (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2iv = extproc; - - glMultiTexCoord2iv(target, v); -} - -static void APIENTRY InitMultiTexCoord2s (GLenum target, GLshort s, GLshort t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2s = extproc; - - glMultiTexCoord2s(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2sv (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2sv = extproc; - - glMultiTexCoord2sv(target, v); -} - -static void APIENTRY InitMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3d = extproc; - - glMultiTexCoord3d(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3dv (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3dv = extproc; - - glMultiTexCoord3dv(target, v); -} - -static void APIENTRY InitMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3f = extproc; - - glMultiTexCoord3f(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3fv (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3fv = extproc; - - glMultiTexCoord3fv(target, v); -} - -static void APIENTRY InitMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3i = extproc; - - glMultiTexCoord3i(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3iv (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3iv = extproc; - - glMultiTexCoord3iv(target, v); -} - -static void APIENTRY InitMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3s = extproc; - - glMultiTexCoord3s(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3sv (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3sv = extproc; - - glMultiTexCoord3sv(target, v); -} - -static void APIENTRY InitMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4d = extproc; - - glMultiTexCoord4d(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4dv (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4dv = extproc; - - glMultiTexCoord4dv(target, v); -} - -static void APIENTRY InitMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4f = extproc; - - glMultiTexCoord4f(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4fv (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4fv = extproc; - - glMultiTexCoord4fv(target, v); -} - -static void APIENTRY InitMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4i = extproc; - - glMultiTexCoord4i(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4iv (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4iv = extproc; - - glMultiTexCoord4iv(target, v); -} - -static void APIENTRY InitMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4s = extproc; - - glMultiTexCoord4s(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4sv (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4sv = extproc; - - glMultiTexCoord4sv(target, v); -} - -static void APIENTRY InitLoadTransposeMatrixf (const GLfloat *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadTransposeMatrixf"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadTransposeMatrixf = extproc; - - glLoadTransposeMatrixf(m); -} - -static void APIENTRY InitLoadTransposeMatrixd (const GLdouble *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadTransposeMatrixd"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadTransposeMatrixd = extproc; - - glLoadTransposeMatrixd(m); -} - -static void APIENTRY InitMultTransposeMatrixf (const GLfloat *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultTransposeMatrixf"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultTransposeMatrixf = extproc; - - glMultTransposeMatrixf(m); -} - -static void APIENTRY InitMultTransposeMatrixd (const GLdouble *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultTransposeMatrixd"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultTransposeMatrixd = extproc; - - glMultTransposeMatrixd(m); -} - -static void APIENTRY InitSampleCoverage (GLclampf value, GLboolean invert) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSampleCoverage"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSampleCoverage = extproc; - - glSampleCoverage(value, invert); -} - -static void APIENTRY InitCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage3D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage3D = extproc; - - glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage2D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage2D = extproc; - - glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage1D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage1D = extproc; - - glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage3D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage3D = extproc; - - glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage2D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage2D = extproc; - - glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage1D"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage1D = extproc; - - glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data); -} - -static void APIENTRY InitGetCompressedTexImage (GLenum target, GLint level, GLvoid *img) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCompressedTexImage"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCompressedTexImage = extproc; - - glGetCompressedTexImage(target, level, img); -} - -static void APIENTRY InitBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendFuncSeparate"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendFuncSeparate = extproc; - - glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -static void APIENTRY InitFogCoordf (GLfloat coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordf"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordf = extproc; - - glFogCoordf(coord); -} - -static void APIENTRY InitFogCoordfv (const GLfloat *coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordfv = extproc; - - glFogCoordfv(coord); -} - -static void APIENTRY InitFogCoordd (GLdouble coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordd"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordd = extproc; - - glFogCoordd(coord); -} - -static void APIENTRY InitFogCoorddv (const GLdouble *coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoorddv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoorddv = extproc; - - glFogCoorddv(coord); -} - -static void APIENTRY InitFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordPointer"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordPointer = extproc; - - glFogCoordPointer(type, stride, pointer); -} - -static void APIENTRY InitMultiDrawArrays (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawArrays"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawArrays = extproc; - - glMultiDrawArrays(mode, first, count, primcount); -} - -static void APIENTRY InitMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawElements"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawElements = extproc; - - glMultiDrawElements(mode, count, type, indices, primcount); -} - -static void APIENTRY InitPointParameterf (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterf"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterf = extproc; - - glPointParameterf(pname, param); -} - -static void APIENTRY InitPointParameterfv (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfv = extproc; - - glPointParameterfv(pname, params); -} - -static void APIENTRY InitPointParameteri (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameteri"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameteri = extproc; - - glPointParameteri(pname, param); -} - -static void APIENTRY InitPointParameteriv (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameteriv = extproc; - - glPointParameteriv(pname, params); -} - -static void APIENTRY InitSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3b"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3b = extproc; - - glSecondaryColor3b(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3bv (const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3bv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3bv = extproc; - - glSecondaryColor3bv(v); -} - -static void APIENTRY InitSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3d = extproc; - - glSecondaryColor3d(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3dv (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3dv = extproc; - - glSecondaryColor3dv(v); -} - -static void APIENTRY InitSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3f = extproc; - - glSecondaryColor3f(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3fv (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3fv = extproc; - - glSecondaryColor3fv(v); -} - -static void APIENTRY InitSecondaryColor3i (GLint red, GLint green, GLint blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3i = extproc; - - glSecondaryColor3i(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3iv (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3iv = extproc; - - glSecondaryColor3iv(v); -} - -static void APIENTRY InitSecondaryColor3s (GLshort red, GLshort green, GLshort blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3s = extproc; - - glSecondaryColor3s(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3sv (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3sv = extproc; - - glSecondaryColor3sv(v); -} - -static void APIENTRY InitSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ub"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ub = extproc; - - glSecondaryColor3ub(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3ubv (const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ubv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ubv = extproc; - - glSecondaryColor3ubv(v); -} - -static void APIENTRY InitSecondaryColor3ui (GLuint red, GLuint green, GLuint blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ui"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ui = extproc; - - glSecondaryColor3ui(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3uiv (const GLuint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3uiv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3uiv = extproc; - - glSecondaryColor3uiv(v); -} - -static void APIENTRY InitSecondaryColor3us (GLushort red, GLushort green, GLushort blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3us"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3us = extproc; - - glSecondaryColor3us(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3usv (const GLushort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3usv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3usv = extproc; - - glSecondaryColor3usv(v); -} - -static void APIENTRY InitSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColorPointer"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColorPointer = extproc; - - glSecondaryColorPointer(size, type, stride, pointer); -} - -static void APIENTRY InitWindowPos2d (GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2d = extproc; - - glWindowPos2d(x, y); -} - -static void APIENTRY InitWindowPos2dv (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2dv = extproc; - - glWindowPos2dv(v); -} - -static void APIENTRY InitWindowPos2f (GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2f = extproc; - - glWindowPos2f(x, y); -} - -static void APIENTRY InitWindowPos2fv (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2fv = extproc; - - glWindowPos2fv(v); -} - -static void APIENTRY InitWindowPos2i (GLint x, GLint y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2i = extproc; - - glWindowPos2i(x, y); -} - -static void APIENTRY InitWindowPos2iv (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2iv = extproc; - - glWindowPos2iv(v); -} - -static void APIENTRY InitWindowPos2s (GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2s = extproc; - - glWindowPos2s(x, y); -} - -static void APIENTRY InitWindowPos2sv (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2sv = extproc; - - glWindowPos2sv(v); -} - -static void APIENTRY InitWindowPos3d (GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3d"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3d = extproc; - - glWindowPos3d(x, y, z); -} - -static void APIENTRY InitWindowPos3dv (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3dv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3dv = extproc; - - glWindowPos3dv(v); -} - -static void APIENTRY InitWindowPos3f (GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3f"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3f = extproc; - - glWindowPos3f(x, y, z); -} - -static void APIENTRY InitWindowPos3fv (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3fv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3fv = extproc; - - glWindowPos3fv(v); -} - -static void APIENTRY InitWindowPos3i (GLint x, GLint y, GLint z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3i"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3i = extproc; - - glWindowPos3i(x, y, z); -} - -static void APIENTRY InitWindowPos3iv (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3iv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3iv = extproc; - - glWindowPos3iv(v); -} - -static void APIENTRY InitWindowPos3s (GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3s"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3s = extproc; - - glWindowPos3s(x, y, z); -} - -static void APIENTRY InitWindowPos3sv (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3sv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3sv = extproc; - - glWindowPos3sv(v); -} - -static void APIENTRY InitGenQueries (GLsizei n, GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenQueries"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenQueries = extproc; - - glGenQueries(n, ids); -} - -static void APIENTRY InitDeleteQueries (GLsizei n, const GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteQueries"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteQueries = extproc; - - glDeleteQueries(n, ids); -} - -static GLboolean APIENTRY InitIsQuery (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsQuery"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsQuery = extproc; - - return glIsQuery(id); -} - -static void APIENTRY InitBeginQuery (GLenum target, GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBeginQuery"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBeginQuery = extproc; - - glBeginQuery(target, id); -} - -static void APIENTRY InitEndQuery (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEndQuery"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEndQuery = extproc; - - glEndQuery(target); -} - -static void APIENTRY InitGetQueryiv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryiv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryiv = extproc; - - glGetQueryiv(target, pname, params); -} - -static void APIENTRY InitGetQueryObjectiv (GLuint id, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryObjectiv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryObjectiv = extproc; - - glGetQueryObjectiv(id, pname, params); -} - -static void APIENTRY InitGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryObjectuiv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryObjectuiv = extproc; - - glGetQueryObjectuiv(id, pname, params); -} - -static void APIENTRY InitBindBuffer (GLenum target, GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindBuffer"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindBuffer = extproc; - - glBindBuffer(target, buffer); -} - -static void APIENTRY InitDeleteBuffers (GLsizei n, const GLuint *buffers) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteBuffers"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteBuffers = extproc; - - glDeleteBuffers(n, buffers); -} - -static void APIENTRY InitGenBuffers (GLsizei n, GLuint *buffers) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenBuffers"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenBuffers = extproc; - - glGenBuffers(n, buffers); -} - -static GLboolean APIENTRY InitIsBuffer (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsBuffer"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsBuffer = extproc; - - return glIsBuffer(buffer); -} - -static void APIENTRY InitBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBufferData"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBufferData = extproc; - - glBufferData(target, size, data, usage); -} - -static void APIENTRY InitBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBufferSubData"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBufferSubData = extproc; - - glBufferSubData(target, offset, size, data); -} - -static void APIENTRY InitGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferSubData"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferSubData = extproc; - - glGetBufferSubData(target, offset, size, data); -} - -static GLvoid* APIENTRY InitMapBuffer (GLenum target, GLenum access) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapBuffer"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glMapBuffer = extproc; - - return glMapBuffer(target, access); -} - -static GLboolean APIENTRY InitUnmapBuffer (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUnmapBuffer"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glUnmapBuffer = extproc; - - return glUnmapBuffer(target); -} - -static void APIENTRY InitGetBufferParameteriv (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferParameteriv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferParameteriv = extproc; - - glGetBufferParameteriv(target, pname, params); -} - -static void APIENTRY InitGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferPointerv"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferPointerv = extproc; - - glGetBufferPointerv(target, pname, params); -} - -static void APIENTRY InitActiveTextureARB (GLenum texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glActiveTextureARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glActiveTextureARB = extproc; - - glActiveTextureARB(texture); -} - -static void APIENTRY InitClientActiveTextureARB (GLenum texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glClientActiveTextureARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glClientActiveTextureARB = extproc; - - glClientActiveTextureARB(texture); -} - -static void APIENTRY InitMultiTexCoord1dARB (GLenum target, GLdouble s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1dARB = extproc; - - glMultiTexCoord1dARB(target, s); -} - -static void APIENTRY InitMultiTexCoord1dvARB (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1dvARB = extproc; - - glMultiTexCoord1dvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord1fARB (GLenum target, GLfloat s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1fARB = extproc; - - glMultiTexCoord1fARB(target, s); -} - -static void APIENTRY InitMultiTexCoord1fvARB (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1fvARB = extproc; - - glMultiTexCoord1fvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord1iARB (GLenum target, GLint s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1iARB = extproc; - - glMultiTexCoord1iARB(target, s); -} - -static void APIENTRY InitMultiTexCoord1ivARB (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1ivARB = extproc; - - glMultiTexCoord1ivARB(target, v); -} - -static void APIENTRY InitMultiTexCoord1sARB (GLenum target, GLshort s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1sARB = extproc; - - glMultiTexCoord1sARB(target, s); -} - -static void APIENTRY InitMultiTexCoord1svARB (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1svARB = extproc; - - glMultiTexCoord1svARB(target, v); -} - -static void APIENTRY InitMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2dARB = extproc; - - glMultiTexCoord2dARB(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2dvARB (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2dvARB = extproc; - - glMultiTexCoord2dvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2fARB = extproc; - - glMultiTexCoord2fARB(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2fvARB (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2fvARB = extproc; - - glMultiTexCoord2fvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord2iARB (GLenum target, GLint s, GLint t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2iARB = extproc; - - glMultiTexCoord2iARB(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2ivARB (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2ivARB = extproc; - - glMultiTexCoord2ivARB(target, v); -} - -static void APIENTRY InitMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2sARB = extproc; - - glMultiTexCoord2sARB(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2svARB (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2svARB = extproc; - - glMultiTexCoord2svARB(target, v); -} - -static void APIENTRY InitMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3dARB = extproc; - - glMultiTexCoord3dARB(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3dvARB (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3dvARB = extproc; - - glMultiTexCoord3dvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3fARB = extproc; - - glMultiTexCoord3fARB(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3fvARB (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3fvARB = extproc; - - glMultiTexCoord3fvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3iARB = extproc; - - glMultiTexCoord3iARB(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3ivARB (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3ivARB = extproc; - - glMultiTexCoord3ivARB(target, v); -} - -static void APIENTRY InitMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3sARB = extproc; - - glMultiTexCoord3sARB(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3svARB (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3svARB = extproc; - - glMultiTexCoord3svARB(target, v); -} - -static void APIENTRY InitMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4dARB = extproc; - - glMultiTexCoord4dARB(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4dvARB (GLenum target, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4dvARB = extproc; - - glMultiTexCoord4dvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4fARB = extproc; - - glMultiTexCoord4fARB(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4fvARB (GLenum target, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4fvARB = extproc; - - glMultiTexCoord4fvARB(target, v); -} - -static void APIENTRY InitMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4iARB = extproc; - - glMultiTexCoord4iARB(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4ivARB (GLenum target, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4ivARB = extproc; - - glMultiTexCoord4ivARB(target, v); -} - -static void APIENTRY InitMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4sARB = extproc; - - glMultiTexCoord4sARB(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4svARB (GLenum target, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4svARB = extproc; - - glMultiTexCoord4svARB(target, v); -} - -static void APIENTRY InitLoadTransposeMatrixfARB (const GLfloat *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadTransposeMatrixfARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadTransposeMatrixfARB = extproc; - - glLoadTransposeMatrixfARB(m); -} - -static void APIENTRY InitLoadTransposeMatrixdARB (const GLdouble *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadTransposeMatrixdARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadTransposeMatrixdARB = extproc; - - glLoadTransposeMatrixdARB(m); -} - -static void APIENTRY InitMultTransposeMatrixfARB (const GLfloat *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultTransposeMatrixfARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultTransposeMatrixfARB = extproc; - - glMultTransposeMatrixfARB(m); -} - -static void APIENTRY InitMultTransposeMatrixdARB (const GLdouble *m) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultTransposeMatrixdARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultTransposeMatrixdARB = extproc; - - glMultTransposeMatrixdARB(m); -} - -static void APIENTRY InitSampleCoverageARB (GLclampf value, GLboolean invert) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSampleCoverageARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSampleCoverageARB = extproc; - - glSampleCoverageARB(value, invert); -} - -static void APIENTRY InitCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage3DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage3DARB = extproc; - - glCompressedTexImage3DARB(target, level, internalformat, width, height, depth, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage2DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage2DARB = extproc; - - glCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexImage1DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexImage1DARB = extproc; - - glCompressedTexImage1DARB(target, level, internalformat, width, border, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage3DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage3DARB = extproc; - - glCompressedTexSubImage3DARB(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage2DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage2DARB = extproc; - - glCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data); -} - -static void APIENTRY InitCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompressedTexSubImage1DARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompressedTexSubImage1DARB = extproc; - - glCompressedTexSubImage1DARB(target, level, xoffset, width, format, imageSize, data); -} - -static void APIENTRY InitGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCompressedTexImageARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCompressedTexImageARB = extproc; - - glGetCompressedTexImageARB(target, level, img); -} - -static void APIENTRY InitPointParameterfARB (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfARB = extproc; - - glPointParameterfARB(pname, param); -} - -static void APIENTRY InitPointParameterfvARB (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfvARB = extproc; - - glPointParameterfvARB(pname, params); -} - -static void APIENTRY InitWeightbvARB (GLint size, const GLbyte *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightbvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightbvARB = extproc; - - glWeightbvARB(size, weights); -} - -static void APIENTRY InitWeightsvARB (GLint size, const GLshort *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightsvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightsvARB = extproc; - - glWeightsvARB(size, weights); -} - -static void APIENTRY InitWeightivARB (GLint size, const GLint *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightivARB = extproc; - - glWeightivARB(size, weights); -} - -static void APIENTRY InitWeightfvARB (GLint size, const GLfloat *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightfvARB = extproc; - - glWeightfvARB(size, weights); -} - -static void APIENTRY InitWeightdvARB (GLint size, const GLdouble *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightdvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightdvARB = extproc; - - glWeightdvARB(size, weights); -} - -static void APIENTRY InitWeightubvARB (GLint size, const GLubyte *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightubvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightubvARB = extproc; - - glWeightubvARB(size, weights); -} - -static void APIENTRY InitWeightusvARB (GLint size, const GLushort *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightusvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightusvARB = extproc; - - glWeightusvARB(size, weights); -} - -static void APIENTRY InitWeightuivARB (GLint size, const GLuint *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightuivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightuivARB = extproc; - - glWeightuivARB(size, weights); -} - -static void APIENTRY InitWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWeightPointerARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWeightPointerARB = extproc; - - glWeightPointerARB(size, type, stride, pointer); -} - -static void APIENTRY InitVertexBlendARB (GLint count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexBlendARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexBlendARB = extproc; - - glVertexBlendARB(count); -} - -static void APIENTRY InitCurrentPaletteMatrixARB (GLint index) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCurrentPaletteMatrixARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCurrentPaletteMatrixARB = extproc; - - glCurrentPaletteMatrixARB(index); -} - -static void APIENTRY InitMatrixIndexubvARB (GLint size, const GLubyte *indices) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMatrixIndexubvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMatrixIndexubvARB = extproc; - - glMatrixIndexubvARB(size, indices); -} - -static void APIENTRY InitMatrixIndexusvARB (GLint size, const GLushort *indices) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMatrixIndexusvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMatrixIndexusvARB = extproc; - - glMatrixIndexusvARB(size, indices); -} - -static void APIENTRY InitMatrixIndexuivARB (GLint size, const GLuint *indices) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMatrixIndexuivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMatrixIndexuivARB = extproc; - - glMatrixIndexuivARB(size, indices); -} - -static void APIENTRY InitMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMatrixIndexPointerARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMatrixIndexPointerARB = extproc; - - glMatrixIndexPointerARB(size, type, stride, pointer); -} - -static void APIENTRY InitWindowPos2dARB (GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2dARB = extproc; - - glWindowPos2dARB(x, y); -} - -static void APIENTRY InitWindowPos2dvARB (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2dvARB = extproc; - - glWindowPos2dvARB(v); -} - -static void APIENTRY InitWindowPos2fARB (GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2fARB = extproc; - - glWindowPos2fARB(x, y); -} - -static void APIENTRY InitWindowPos2fvARB (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2fvARB = extproc; - - glWindowPos2fvARB(v); -} - -static void APIENTRY InitWindowPos2iARB (GLint x, GLint y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2iARB = extproc; - - glWindowPos2iARB(x, y); -} - -static void APIENTRY InitWindowPos2ivARB (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2ivARB = extproc; - - glWindowPos2ivARB(v); -} - -static void APIENTRY InitWindowPos2sARB (GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2sARB = extproc; - - glWindowPos2sARB(x, y); -} - -static void APIENTRY InitWindowPos2svARB (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2svARB = extproc; - - glWindowPos2svARB(v); -} - -static void APIENTRY InitWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3dARB = extproc; - - glWindowPos3dARB(x, y, z); -} - -static void APIENTRY InitWindowPos3dvARB (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3dvARB = extproc; - - glWindowPos3dvARB(v); -} - -static void APIENTRY InitWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3fARB = extproc; - - glWindowPos3fARB(x, y, z); -} - -static void APIENTRY InitWindowPos3fvARB (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3fvARB = extproc; - - glWindowPos3fvARB(v); -} - -static void APIENTRY InitWindowPos3iARB (GLint x, GLint y, GLint z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3iARB = extproc; - - glWindowPos3iARB(x, y, z); -} - -static void APIENTRY InitWindowPos3ivARB (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3ivARB = extproc; - - glWindowPos3ivARB(v); -} - -static void APIENTRY InitWindowPos3sARB (GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3sARB = extproc; - - glWindowPos3sARB(x, y, z); -} - -static void APIENTRY InitWindowPos3svARB (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3svARB = extproc; - - glWindowPos3svARB(v); -} - -static void APIENTRY InitVertexAttrib1dARB (GLuint index, GLdouble x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1dARB = extproc; - - glVertexAttrib1dARB(index, x); -} - -static void APIENTRY InitVertexAttrib1dvARB (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1dvARB = extproc; - - glVertexAttrib1dvARB(index, v); -} - -static void APIENTRY InitVertexAttrib1fARB (GLuint index, GLfloat x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1fARB = extproc; - - glVertexAttrib1fARB(index, x); -} - -static void APIENTRY InitVertexAttrib1fvARB (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1fvARB = extproc; - - glVertexAttrib1fvARB(index, v); -} - -static void APIENTRY InitVertexAttrib1sARB (GLuint index, GLshort x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1sARB = extproc; - - glVertexAttrib1sARB(index, x); -} - -static void APIENTRY InitVertexAttrib1svARB (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1svARB = extproc; - - glVertexAttrib1svARB(index, v); -} - -static void APIENTRY InitVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2dARB = extproc; - - glVertexAttrib2dARB(index, x, y); -} - -static void APIENTRY InitVertexAttrib2dvARB (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2dvARB = extproc; - - glVertexAttrib2dvARB(index, v); -} - -static void APIENTRY InitVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2fARB = extproc; - - glVertexAttrib2fARB(index, x, y); -} - -static void APIENTRY InitVertexAttrib2fvARB (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2fvARB = extproc; - - glVertexAttrib2fvARB(index, v); -} - -static void APIENTRY InitVertexAttrib2sARB (GLuint index, GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2sARB = extproc; - - glVertexAttrib2sARB(index, x, y); -} - -static void APIENTRY InitVertexAttrib2svARB (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2svARB = extproc; - - glVertexAttrib2svARB(index, v); -} - -static void APIENTRY InitVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3dARB = extproc; - - glVertexAttrib3dARB(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3dvARB (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3dvARB = extproc; - - glVertexAttrib3dvARB(index, v); -} - -static void APIENTRY InitVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3fARB = extproc; - - glVertexAttrib3fARB(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3fvARB (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3fvARB = extproc; - - glVertexAttrib3fvARB(index, v); -} - -static void APIENTRY InitVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3sARB = extproc; - - glVertexAttrib3sARB(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3svARB (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3svARB = extproc; - - glVertexAttrib3svARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NbvARB (GLuint index, const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NbvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NbvARB = extproc; - - glVertexAttrib4NbvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NivARB (GLuint index, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NivARB = extproc; - - glVertexAttrib4NivARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NsvARB (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NsvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NsvARB = extproc; - - glVertexAttrib4NsvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NubARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NubARB = extproc; - - glVertexAttrib4NubARB(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4NubvARB (GLuint index, const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NubvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NubvARB = extproc; - - glVertexAttrib4NubvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NuivARB (GLuint index, const GLuint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NuivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NuivARB = extproc; - - glVertexAttrib4NuivARB(index, v); -} - -static void APIENTRY InitVertexAttrib4NusvARB (GLuint index, const GLushort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4NusvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4NusvARB = extproc; - - glVertexAttrib4NusvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4bvARB (GLuint index, const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4bvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4bvARB = extproc; - - glVertexAttrib4bvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4dARB = extproc; - - glVertexAttrib4dARB(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4dvARB (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4dvARB = extproc; - - glVertexAttrib4dvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4fARB = extproc; - - glVertexAttrib4fARB(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4fvARB (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4fvARB = extproc; - - glVertexAttrib4fvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4ivARB (GLuint index, const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4ivARB = extproc; - - glVertexAttrib4ivARB(index, v); -} - -static void APIENTRY InitVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4sARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4sARB = extproc; - - glVertexAttrib4sARB(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4svARB (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4svARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4svARB = extproc; - - glVertexAttrib4svARB(index, v); -} - -static void APIENTRY InitVertexAttrib4ubvARB (GLuint index, const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4ubvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4ubvARB = extproc; - - glVertexAttrib4ubvARB(index, v); -} - -static void APIENTRY InitVertexAttrib4uivARB (GLuint index, const GLuint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4uivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4uivARB = extproc; - - glVertexAttrib4uivARB(index, v); -} - -static void APIENTRY InitVertexAttrib4usvARB (GLuint index, const GLushort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4usvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4usvARB = extproc; - - glVertexAttrib4usvARB(index, v); -} - -static void APIENTRY InitVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribPointerARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribPointerARB = extproc; - - glVertexAttribPointerARB(index, size, type, normalized, stride, pointer); -} - -static void APIENTRY InitEnableVertexAttribArrayARB (GLuint index) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEnableVertexAttribArrayARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEnableVertexAttribArrayARB = extproc; - - glEnableVertexAttribArrayARB(index); -} - -static void APIENTRY InitDisableVertexAttribArrayARB (GLuint index) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDisableVertexAttribArrayARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDisableVertexAttribArrayARB = extproc; - - glDisableVertexAttribArrayARB(index); -} - -static void APIENTRY InitProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramStringARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramStringARB = extproc; - - glProgramStringARB(target, format, len, string); -} - -static void APIENTRY InitBindProgramARB (GLenum target, GLuint program) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindProgramARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindProgramARB = extproc; - - glBindProgramARB(target, program); -} - -static void APIENTRY InitDeleteProgramsARB (GLsizei n, const GLuint *programs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteProgramsARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteProgramsARB = extproc; - - glDeleteProgramsARB(n, programs); -} - -static void APIENTRY InitGenProgramsARB (GLsizei n, GLuint *programs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenProgramsARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenProgramsARB = extproc; - - glGenProgramsARB(n, programs); -} - -static void APIENTRY InitProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramEnvParameter4dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramEnvParameter4dARB = extproc; - - glProgramEnvParameter4dARB(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramEnvParameter4dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramEnvParameter4dvARB = extproc; - - glProgramEnvParameter4dvARB(target, index, params); -} - -static void APIENTRY InitProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramEnvParameter4fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramEnvParameter4fARB = extproc; - - glProgramEnvParameter4fARB(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramEnvParameter4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramEnvParameter4fvARB = extproc; - - glProgramEnvParameter4fvARB(target, index, params); -} - -static void APIENTRY InitProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramLocalParameter4dARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramLocalParameter4dARB = extproc; - - glProgramLocalParameter4dARB(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramLocalParameter4dvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramLocalParameter4dvARB = extproc; - - glProgramLocalParameter4dvARB(target, index, params); -} - -static void APIENTRY InitProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramLocalParameter4fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramLocalParameter4fARB = extproc; - - glProgramLocalParameter4fARB(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramLocalParameter4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramLocalParameter4fvARB = extproc; - - glProgramLocalParameter4fvARB(target, index, params); -} - -static void APIENTRY InitGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramEnvParameterdvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramEnvParameterdvARB = extproc; - - glGetProgramEnvParameterdvARB(target, index, params); -} - -static void APIENTRY InitGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramEnvParameterfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramEnvParameterfvARB = extproc; - - glGetProgramEnvParameterfvARB(target, index, params); -} - -static void APIENTRY InitGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramLocalParameterdvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramLocalParameterdvARB = extproc; - - glGetProgramLocalParameterdvARB(target, index, params); -} - -static void APIENTRY InitGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramLocalParameterfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramLocalParameterfvARB = extproc; - - glGetProgramLocalParameterfvARB(target, index, params); -} - -static void APIENTRY InitGetProgramivARB (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramivARB = extproc; - - glGetProgramivARB(target, pname, params); -} - -static void APIENTRY InitGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramStringARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramStringARB = extproc; - - glGetProgramStringARB(target, pname, string); -} - -static void APIENTRY InitGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribdvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribdvARB = extproc; - - glGetVertexAttribdvARB(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribfvARB = extproc; - - glGetVertexAttribfvARB(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribivARB = extproc; - - glGetVertexAttribivARB(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribPointervARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribPointervARB = extproc; - - glGetVertexAttribPointervARB(index, pname, pointer); -} - -static GLboolean APIENTRY InitIsProgramARB (GLuint program) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsProgramARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsProgramARB = extproc; - - return glIsProgramARB(program); -} - -static void APIENTRY InitBindBufferARB (GLenum target, GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindBufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindBufferARB = extproc; - - glBindBufferARB(target, buffer); -} - -static void APIENTRY InitDeleteBuffersARB (GLsizei n, const GLuint *buffers) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteBuffersARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteBuffersARB = extproc; - - glDeleteBuffersARB(n, buffers); -} - -static void APIENTRY InitGenBuffersARB (GLsizei n, GLuint *buffers) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenBuffersARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenBuffersARB = extproc; - - glGenBuffersARB(n, buffers); -} - -static GLboolean APIENTRY InitIsBufferARB (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsBufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsBufferARB = extproc; - - return glIsBufferARB(buffer); -} - -static void APIENTRY InitBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBufferDataARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBufferDataARB = extproc; - - glBufferDataARB(target, size, data, usage); -} - -static void APIENTRY InitBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBufferSubDataARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBufferSubDataARB = extproc; - - glBufferSubDataARB(target, offset, size, data); -} - -static void APIENTRY InitGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferSubDataARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferSubDataARB = extproc; - - glGetBufferSubDataARB(target, offset, size, data); -} - -static GLvoid* APIENTRY InitMapBufferARB (GLenum target, GLenum access) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapBufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glMapBufferARB = extproc; - - return glMapBufferARB(target, access); -} - -static GLboolean APIENTRY InitUnmapBufferARB (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUnmapBufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glUnmapBufferARB = extproc; - - return glUnmapBufferARB(target); -} - -static void APIENTRY InitGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferParameterivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferParameterivARB = extproc; - - glGetBufferParameterivARB(target, pname, params); -} - -static void APIENTRY InitGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetBufferPointervARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetBufferPointervARB = extproc; - - glGetBufferPointervARB(target, pname, params); -} - -static void APIENTRY InitGenQueriesARB (GLsizei n, GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenQueriesARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenQueriesARB = extproc; - - glGenQueriesARB(n, ids); -} - -static void APIENTRY InitDeleteQueriesARB (GLsizei n, const GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteQueriesARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteQueriesARB = extproc; - - glDeleteQueriesARB(n, ids); -} - -static GLboolean APIENTRY InitIsQueryARB (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsQueryARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsQueryARB = extproc; - - return glIsQueryARB(id); -} - -static void APIENTRY InitBeginQueryARB (GLenum target, GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBeginQueryARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBeginQueryARB = extproc; - - glBeginQueryARB(target, id); -} - -static void APIENTRY InitEndQueryARB (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEndQueryARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEndQueryARB = extproc; - - glEndQueryARB(target); -} - -static void APIENTRY InitGetQueryivARB (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryivARB = extproc; - - glGetQueryivARB(target, pname, params); -} - -static void APIENTRY InitGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryObjectivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryObjectivARB = extproc; - - glGetQueryObjectivARB(id, pname, params); -} - -static void APIENTRY InitGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetQueryObjectuivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetQueryObjectuivARB = extproc; - - glGetQueryObjectuivARB(id, pname, params); -} - -static void APIENTRY InitDeleteObjectARB (GLhandleARB obj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteObjectARB = extproc; - - glDeleteObjectARB(obj); -} - -static GLhandleARB APIENTRY InitGetHandleARB (GLenum pname) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHandleARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGetHandleARB = extproc; - - return glGetHandleARB(pname); -} - -static void APIENTRY InitDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDetachObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDetachObjectARB = extproc; - - glDetachObjectARB(containerObj, attachedObj); -} - -static GLhandleARB APIENTRY InitCreateShaderObjectARB (GLenum shaderType) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCreateShaderObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glCreateShaderObjectARB = extproc; - - return glCreateShaderObjectARB(shaderType); -} - -static void APIENTRY InitShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glShaderSourceARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glShaderSourceARB = extproc; - - glShaderSourceARB(shaderObj, count, string, length); -} - -static void APIENTRY InitCompileShaderARB (GLhandleARB shaderObj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCompileShaderARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCompileShaderARB = extproc; - - glCompileShaderARB(shaderObj); -} - -static GLhandleARB APIENTRY InitCreateProgramObjectARB (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCreateProgramObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glCreateProgramObjectARB = extproc; - - return glCreateProgramObjectARB(); -} - -static void APIENTRY InitAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAttachObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAttachObjectARB = extproc; - - glAttachObjectARB(containerObj, obj); -} - -static void APIENTRY InitLinkProgramARB (GLhandleARB programObj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLinkProgramARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLinkProgramARB = extproc; - - glLinkProgramARB(programObj); -} - -static void APIENTRY InitUseProgramObjectARB (GLhandleARB programObj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUseProgramObjectARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUseProgramObjectARB = extproc; - - glUseProgramObjectARB(programObj); -} - -static void APIENTRY InitValidateProgramARB (GLhandleARB programObj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glValidateProgramARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glValidateProgramARB = extproc; - - glValidateProgramARB(programObj); -} - -static void APIENTRY InitUniform1fARB (GLint location, GLfloat v0) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform1fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform1fARB = extproc; - - glUniform1fARB(location, v0); -} - -static void APIENTRY InitUniform2fARB (GLint location, GLfloat v0, GLfloat v1) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform2fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform2fARB = extproc; - - glUniform2fARB(location, v0, v1); -} - -static void APIENTRY InitUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform3fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform3fARB = extproc; - - glUniform3fARB(location, v0, v1, v2); -} - -static void APIENTRY InitUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform4fARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform4fARB = extproc; - - glUniform4fARB(location, v0, v1, v2, v3); -} - -static void APIENTRY InitUniform1iARB (GLint location, GLint v0) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform1iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform1iARB = extproc; - - glUniform1iARB(location, v0); -} - -static void APIENTRY InitUniform2iARB (GLint location, GLint v0, GLint v1) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform2iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform2iARB = extproc; - - glUniform2iARB(location, v0, v1); -} - -static void APIENTRY InitUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform3iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform3iARB = extproc; - - glUniform3iARB(location, v0, v1, v2); -} - -static void APIENTRY InitUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform4iARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform4iARB = extproc; - - glUniform4iARB(location, v0, v1, v2, v3); -} - -static void APIENTRY InitUniform1fvARB (GLint location, GLsizei count, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform1fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform1fvARB = extproc; - - glUniform1fvARB(location, count, value); -} - -static void APIENTRY InitUniform2fvARB (GLint location, GLsizei count, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform2fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform2fvARB = extproc; - - glUniform2fvARB(location, count, value); -} - -static void APIENTRY InitUniform3fvARB (GLint location, GLsizei count, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform3fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform3fvARB = extproc; - - glUniform3fvARB(location, count, value); -} - -static void APIENTRY InitUniform4fvARB (GLint location, GLsizei count, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform4fvARB = extproc; - - glUniform4fvARB(location, count, value); -} - -static void APIENTRY InitUniform1ivARB (GLint location, GLsizei count, const GLint *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform1ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform1ivARB = extproc; - - glUniform1ivARB(location, count, value); -} - -static void APIENTRY InitUniform2ivARB (GLint location, GLsizei count, const GLint *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform2ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform2ivARB = extproc; - - glUniform2ivARB(location, count, value); -} - -static void APIENTRY InitUniform3ivARB (GLint location, GLsizei count, const GLint *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform3ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform3ivARB = extproc; - - glUniform3ivARB(location, count, value); -} - -static void APIENTRY InitUniform4ivARB (GLint location, GLsizei count, const GLint *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniform4ivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniform4ivARB = extproc; - - glUniform4ivARB(location, count, value); -} - -static void APIENTRY InitUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniformMatrix2fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniformMatrix2fvARB = extproc; - - glUniformMatrix2fvARB(location, count, transpose, value); -} - -static void APIENTRY InitUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniformMatrix3fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniformMatrix3fvARB = extproc; - - glUniformMatrix3fvARB(location, count, transpose, value); -} - -static void APIENTRY InitUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUniformMatrix4fvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUniformMatrix4fvARB = extproc; - - glUniformMatrix4fvARB(location, count, transpose, value); -} - -static void APIENTRY InitGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetObjectParameterfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetObjectParameterfvARB = extproc; - - glGetObjectParameterfvARB(obj, pname, params); -} - -static void APIENTRY InitGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetObjectParameterivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetObjectParameterivARB = extproc; - - glGetObjectParameterivARB(obj, pname, params); -} - -static void APIENTRY InitGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetInfoLogARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetInfoLogARB = extproc; - - glGetInfoLogARB(obj, maxLength, length, infoLog); -} - -static void APIENTRY InitGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetAttachedObjectsARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetAttachedObjectsARB = extproc; - - glGetAttachedObjectsARB(containerObj, maxCount, count, obj); -} - -static GLint APIENTRY InitGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetUniformLocationARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGetUniformLocationARB = extproc; - - return glGetUniformLocationARB(programObj, name); -} - -static void APIENTRY InitGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetActiveUniformARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetActiveUniformARB = extproc; - - glGetActiveUniformARB(programObj, index, maxLength, length, size, type, name); -} - -static void APIENTRY InitGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetUniformfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetUniformfvARB = extproc; - - glGetUniformfvARB(programObj, location, params); -} - -static void APIENTRY InitGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetUniformivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetUniformivARB = extproc; - - glGetUniformivARB(programObj, location, params); -} - -static void APIENTRY InitGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetShaderSourceARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetShaderSourceARB = extproc; - - glGetShaderSourceARB(obj, maxLength, length, source); -} - -static void APIENTRY InitBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindAttribLocationARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindAttribLocationARB = extproc; - - glBindAttribLocationARB(programObj, index, name); -} - -static void APIENTRY InitGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetActiveAttribARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetActiveAttribARB = extproc; - - glGetActiveAttribARB(programObj, index, maxLength, length, size, type, name); -} - -static GLint APIENTRY InitGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetAttribLocationARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGetAttribLocationARB = extproc; - - return glGetAttribLocationARB(programObj, name); -} - -static void APIENTRY InitBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendColorEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendColorEXT = extproc; - - glBlendColorEXT(red, green, blue, alpha); -} - -static void APIENTRY InitPolygonOffsetEXT (GLfloat factor, GLfloat bias) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPolygonOffsetEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPolygonOffsetEXT = extproc; - - glPolygonOffsetEXT(factor, bias); -} - -static void APIENTRY InitTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexImage3DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexImage3DEXT = extproc; - - glTexImage3DEXT(target, level, internalformat, width, height, depth, border, format, type, pixels); -} - -static void APIENTRY InitTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexSubImage3DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexSubImage3DEXT = extproc; - - glTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); -} - -static void APIENTRY InitGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetTexFilterFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetTexFilterFuncSGIS = extproc; - - glGetTexFilterFuncSGIS(target, filter, weights); -} - -static void APIENTRY InitTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexFilterFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexFilterFuncSGIS = extproc; - - glTexFilterFuncSGIS(target, filter, n, weights); -} - -static void APIENTRY InitTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexSubImage1DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexSubImage1DEXT = extproc; - - glTexSubImage1DEXT(target, level, xoffset, width, format, type, pixels); -} - -static void APIENTRY InitTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexSubImage2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexSubImage2DEXT = extproc; - - glTexSubImage2DEXT(target, level, xoffset, yoffset, width, height, format, type, pixels); -} - -static void APIENTRY InitCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexImage1DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexImage1DEXT = extproc; - - glCopyTexImage1DEXT(target, level, internalformat, x, y, width, border); -} - -static void APIENTRY InitCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexImage2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexImage2DEXT = extproc; - - glCopyTexImage2DEXT(target, level, internalformat, x, y, width, height, border); -} - -static void APIENTRY InitCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexSubImage1DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexSubImage1DEXT = extproc; - - glCopyTexSubImage1DEXT(target, level, xoffset, x, y, width); -} - -static void APIENTRY InitCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexSubImage2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexSubImage2DEXT = extproc; - - glCopyTexSubImage2DEXT(target, level, xoffset, yoffset, x, y, width, height); -} - -static void APIENTRY InitCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyTexSubImage3DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyTexSubImage3DEXT = extproc; - - glCopyTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, x, y, width, height); -} - -static void APIENTRY InitGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogramEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogramEXT = extproc; - - glGetHistogramEXT(target, reset, format, type, values); -} - -static void APIENTRY InitGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogramParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogramParameterfvEXT = extproc; - - glGetHistogramParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetHistogramParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetHistogramParameterivEXT = extproc; - - glGetHistogramParameterivEXT(target, pname, params); -} - -static void APIENTRY InitGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmaxEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmaxEXT = extproc; - - glGetMinmaxEXT(target, reset, format, type, values); -} - -static void APIENTRY InitGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmaxParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmaxParameterfvEXT = extproc; - - glGetMinmaxParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMinmaxParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMinmaxParameterivEXT = extproc; - - glGetMinmaxParameterivEXT(target, pname, params); -} - -static void APIENTRY InitHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glHistogramEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glHistogramEXT = extproc; - - glHistogramEXT(target, width, internalformat, sink); -} - -static void APIENTRY InitMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMinmaxEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMinmaxEXT = extproc; - - glMinmaxEXT(target, internalformat, sink); -} - -static void APIENTRY InitResetHistogramEXT (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glResetHistogramEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glResetHistogramEXT = extproc; - - glResetHistogramEXT(target); -} - -static void APIENTRY InitResetMinmaxEXT (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glResetMinmaxEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glResetMinmaxEXT = extproc; - - glResetMinmaxEXT(target); -} - -static void APIENTRY InitConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionFilter1DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionFilter1DEXT = extproc; - - glConvolutionFilter1DEXT(target, internalformat, width, format, type, image); -} - -static void APIENTRY InitConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionFilter2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionFilter2DEXT = extproc; - - glConvolutionFilter2DEXT(target, internalformat, width, height, format, type, image); -} - -static void APIENTRY InitConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameterfEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameterfEXT = extproc; - - glConvolutionParameterfEXT(target, pname, params); -} - -static void APIENTRY InitConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameterfvEXT = extproc; - - glConvolutionParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameteriEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameteriEXT = extproc; - - glConvolutionParameteriEXT(target, pname, params); -} - -static void APIENTRY InitConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glConvolutionParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glConvolutionParameterivEXT = extproc; - - glConvolutionParameterivEXT(target, pname, params); -} - -static void APIENTRY InitCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyConvolutionFilter1DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyConvolutionFilter1DEXT = extproc; - - glCopyConvolutionFilter1DEXT(target, internalformat, x, y, width); -} - -static void APIENTRY InitCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyConvolutionFilter2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyConvolutionFilter2DEXT = extproc; - - glCopyConvolutionFilter2DEXT(target, internalformat, x, y, width, height); -} - -static void APIENTRY InitGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionFilterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionFilterEXT = extproc; - - glGetConvolutionFilterEXT(target, format, type, image); -} - -static void APIENTRY InitGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionParameterfvEXT = extproc; - - glGetConvolutionParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetConvolutionParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetConvolutionParameterivEXT = extproc; - - glGetConvolutionParameterivEXT(target, pname, params); -} - -static void APIENTRY InitGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetSeparableFilterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetSeparableFilterEXT = extproc; - - glGetSeparableFilterEXT(target, format, type, row, column, span); -} - -static void APIENTRY InitSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSeparableFilter2DEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSeparableFilter2DEXT = extproc; - - glSeparableFilter2DEXT(target, internalformat, width, height, format, type, row, column); -} - -static void APIENTRY InitColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableSGI = extproc; - - glColorTableSGI(target, internalformat, width, format, type, table); -} - -static void APIENTRY InitColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableParameterfvSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableParameterfvSGI = extproc; - - glColorTableParameterfvSGI(target, pname, params); -} - -static void APIENTRY InitColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableParameterivSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableParameterivSGI = extproc; - - glColorTableParameterivSGI(target, pname, params); -} - -static void APIENTRY InitCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyColorTableSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyColorTableSGI = extproc; - - glCopyColorTableSGI(target, internalformat, x, y, width); -} - -static void APIENTRY InitGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableSGI = extproc; - - glGetColorTableSGI(target, format, type, table); -} - -static void APIENTRY InitGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameterfvSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameterfvSGI = extproc; - - glGetColorTableParameterfvSGI(target, pname, params); -} - -static void APIENTRY InitGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameterivSGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameterivSGI = extproc; - - glGetColorTableParameterivSGI(target, pname, params); -} - -static void APIENTRY InitPixelTexGenSGIX (GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTexGenSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTexGenSGIX = extproc; - - glPixelTexGenSGIX(mode); -} - -static void APIENTRY InitPixelTexGenParameteriSGIS (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTexGenParameteriSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTexGenParameteriSGIS = extproc; - - glPixelTexGenParameteriSGIS(pname, param); -} - -static void APIENTRY InitPixelTexGenParameterivSGIS (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTexGenParameterivSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTexGenParameterivSGIS = extproc; - - glPixelTexGenParameterivSGIS(pname, params); -} - -static void APIENTRY InitPixelTexGenParameterfSGIS (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTexGenParameterfSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTexGenParameterfSGIS = extproc; - - glPixelTexGenParameterfSGIS(pname, param); -} - -static void APIENTRY InitPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTexGenParameterfvSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTexGenParameterfvSGIS = extproc; - - glPixelTexGenParameterfvSGIS(pname, params); -} - -static void APIENTRY InitGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetPixelTexGenParameterivSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetPixelTexGenParameterivSGIS = extproc; - - glGetPixelTexGenParameterivSGIS(pname, params); -} - -static void APIENTRY InitGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetPixelTexGenParameterfvSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetPixelTexGenParameterfvSGIS = extproc; - - glGetPixelTexGenParameterfvSGIS(pname, params); -} - -static void APIENTRY InitTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexImage4DSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexImage4DSGIS = extproc; - - glTexImage4DSGIS(target, level, internalformat, width, height, depth, size4d, border, format, type, pixels); -} - -static void APIENTRY InitTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexSubImage4DSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexSubImage4DSGIS = extproc; - - glTexSubImage4DSGIS(target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels); -} - -static GLboolean APIENTRY InitAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAreTexturesResidentEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glAreTexturesResidentEXT = extproc; - - return glAreTexturesResidentEXT(n, textures, residences); -} - -static void APIENTRY InitBindTextureEXT (GLenum target, GLuint texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindTextureEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindTextureEXT = extproc; - - glBindTextureEXT(target, texture); -} - -static void APIENTRY InitDeleteTexturesEXT (GLsizei n, const GLuint *textures) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteTexturesEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteTexturesEXT = extproc; - - glDeleteTexturesEXT(n, textures); -} - -static void APIENTRY InitGenTexturesEXT (GLsizei n, GLuint *textures) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenTexturesEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenTexturesEXT = extproc; - - glGenTexturesEXT(n, textures); -} - -static GLboolean APIENTRY InitIsTextureEXT (GLuint texture) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsTextureEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsTextureEXT = extproc; - - return glIsTextureEXT(texture); -} - -static void APIENTRY InitPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPrioritizeTexturesEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPrioritizeTexturesEXT = extproc; - - glPrioritizeTexturesEXT(n, textures, priorities); -} - -static void APIENTRY InitDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDetailTexFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDetailTexFuncSGIS = extproc; - - glDetailTexFuncSGIS(target, n, points); -} - -static void APIENTRY InitGetDetailTexFuncSGIS (GLenum target, GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetDetailTexFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetDetailTexFuncSGIS = extproc; - - glGetDetailTexFuncSGIS(target, points); -} - -static void APIENTRY InitSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSharpenTexFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSharpenTexFuncSGIS = extproc; - - glSharpenTexFuncSGIS(target, n, points); -} - -static void APIENTRY InitGetSharpenTexFuncSGIS (GLenum target, GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetSharpenTexFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetSharpenTexFuncSGIS = extproc; - - glGetSharpenTexFuncSGIS(target, points); -} - -static void APIENTRY InitSampleMaskSGIS (GLclampf value, GLboolean invert) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSampleMaskSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSampleMaskSGIS = extproc; - - glSampleMaskSGIS(value, invert); -} - -static void APIENTRY InitSamplePatternSGIS (GLenum pattern) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSamplePatternSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSamplePatternSGIS = extproc; - - glSamplePatternSGIS(pattern); -} - -static void APIENTRY InitArrayElementEXT (GLint i) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glArrayElementEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glArrayElementEXT = extproc; - - glArrayElementEXT(i); -} - -static void APIENTRY InitColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorPointerEXT = extproc; - - glColorPointerEXT(size, type, stride, count, pointer); -} - -static void APIENTRY InitDrawArraysEXT (GLenum mode, GLint first, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawArraysEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawArraysEXT = extproc; - - glDrawArraysEXT(mode, first, count); -} - -static void APIENTRY InitEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEdgeFlagPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEdgeFlagPointerEXT = extproc; - - glEdgeFlagPointerEXT(stride, count, pointer); -} - -static void APIENTRY InitGetPointervEXT (GLenum pname, GLvoid* *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetPointervEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetPointervEXT = extproc; - - glGetPointervEXT(pname, params); -} - -static void APIENTRY InitIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIndexPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glIndexPointerEXT = extproc; - - glIndexPointerEXT(type, stride, count, pointer); -} - -static void APIENTRY InitNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalPointerEXT = extproc; - - glNormalPointerEXT(type, stride, count, pointer); -} - -static void APIENTRY InitTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoordPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoordPointerEXT = extproc; - - glTexCoordPointerEXT(size, type, stride, count, pointer); -} - -static void APIENTRY InitVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexPointerEXT = extproc; - - glVertexPointerEXT(size, type, stride, count, pointer); -} - -static void APIENTRY InitBlendEquationEXT (GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendEquationEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendEquationEXT = extproc; - - glBlendEquationEXT(mode); -} - -static void APIENTRY InitSpriteParameterfSGIX (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSpriteParameterfSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSpriteParameterfSGIX = extproc; - - glSpriteParameterfSGIX(pname, param); -} - -static void APIENTRY InitSpriteParameterfvSGIX (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSpriteParameterfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSpriteParameterfvSGIX = extproc; - - glSpriteParameterfvSGIX(pname, params); -} - -static void APIENTRY InitSpriteParameteriSGIX (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSpriteParameteriSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSpriteParameteriSGIX = extproc; - - glSpriteParameteriSGIX(pname, param); -} - -static void APIENTRY InitSpriteParameterivSGIX (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSpriteParameterivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSpriteParameterivSGIX = extproc; - - glSpriteParameterivSGIX(pname, params); -} - -static void APIENTRY InitPointParameterfEXT (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfEXT = extproc; - - glPointParameterfEXT(pname, param); -} - -static void APIENTRY InitPointParameterfvEXT (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfvEXT = extproc; - - glPointParameterfvEXT(pname, params); -} - -static void APIENTRY InitPointParameterfSGIS (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfSGIS = extproc; - - glPointParameterfSGIS(pname, param); -} - -static void APIENTRY InitPointParameterfvSGIS (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterfvSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterfvSGIS = extproc; - - glPointParameterfvSGIS(pname, params); -} - -static GLint APIENTRY InitGetInstrumentsSGIX (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetInstrumentsSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGetInstrumentsSGIX = extproc; - - return glGetInstrumentsSGIX(); -} - -static void APIENTRY InitInstrumentsBufferSGIX (GLsizei size, GLint *buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glInstrumentsBufferSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glInstrumentsBufferSGIX = extproc; - - glInstrumentsBufferSGIX(size, buffer); -} - -static GLint APIENTRY InitPollInstrumentsSGIX (GLint *marker_p) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPollInstrumentsSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glPollInstrumentsSGIX = extproc; - - return glPollInstrumentsSGIX(marker_p); -} - -static void APIENTRY InitReadInstrumentsSGIX (GLint marker) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReadInstrumentsSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReadInstrumentsSGIX = extproc; - - glReadInstrumentsSGIX(marker); -} - -static void APIENTRY InitStartInstrumentsSGIX (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glStartInstrumentsSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glStartInstrumentsSGIX = extproc; - - glStartInstrumentsSGIX(); -} - -static void APIENTRY InitStopInstrumentsSGIX (GLint marker) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glStopInstrumentsSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glStopInstrumentsSGIX = extproc; - - glStopInstrumentsSGIX(marker); -} - -static void APIENTRY InitFrameZoomSGIX (GLint factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFrameZoomSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFrameZoomSGIX = extproc; - - glFrameZoomSGIX(factor); -} - -static void APIENTRY InitTagSampleBufferSGIX (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTagSampleBufferSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTagSampleBufferSGIX = extproc; - - glTagSampleBufferSGIX(); -} - -static void APIENTRY InitDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeformationMap3dSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeformationMap3dSGIX = extproc; - - glDeformationMap3dSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points); -} - -static void APIENTRY InitDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeformationMap3fSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeformationMap3fSGIX = extproc; - - glDeformationMap3fSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points); -} - -static void APIENTRY InitDeformSGIX (GLbitfield mask) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeformSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeformSGIX = extproc; - - glDeformSGIX(mask); -} - -static void APIENTRY InitLoadIdentityDeformationMapSGIX (GLbitfield mask) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadIdentityDeformationMapSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadIdentityDeformationMapSGIX = extproc; - - glLoadIdentityDeformationMapSGIX(mask); -} - -static void APIENTRY InitReferencePlaneSGIX (const GLdouble *equation) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReferencePlaneSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReferencePlaneSGIX = extproc; - - glReferencePlaneSGIX(equation); -} - -static void APIENTRY InitFlushRasterSGIX (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFlushRasterSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFlushRasterSGIX = extproc; - - glFlushRasterSGIX(); -} - -static void APIENTRY InitFogFuncSGIS (GLsizei n, const GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogFuncSGIS = extproc; - - glFogFuncSGIS(n, points); -} - -static void APIENTRY InitGetFogFuncSGIS (GLfloat *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFogFuncSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFogFuncSGIS = extproc; - - glGetFogFuncSGIS(points); -} - -static void APIENTRY InitImageTransformParameteriHP (GLenum target, GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glImageTransformParameteriHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glImageTransformParameteriHP = extproc; - - glImageTransformParameteriHP(target, pname, param); -} - -static void APIENTRY InitImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glImageTransformParameterfHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glImageTransformParameterfHP = extproc; - - glImageTransformParameterfHP(target, pname, param); -} - -static void APIENTRY InitImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glImageTransformParameterivHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glImageTransformParameterivHP = extproc; - - glImageTransformParameterivHP(target, pname, params); -} - -static void APIENTRY InitImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glImageTransformParameterfvHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glImageTransformParameterfvHP = extproc; - - glImageTransformParameterfvHP(target, pname, params); -} - -static void APIENTRY InitGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetImageTransformParameterivHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetImageTransformParameterivHP = extproc; - - glGetImageTransformParameterivHP(target, pname, params); -} - -static void APIENTRY InitGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetImageTransformParameterfvHP"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetImageTransformParameterfvHP = extproc; - - glGetImageTransformParameterfvHP(target, pname, params); -} - -static void APIENTRY InitColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorSubTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorSubTableEXT = extproc; - - glColorSubTableEXT(target, start, count, format, type, data); -} - -static void APIENTRY InitCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCopyColorSubTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCopyColorSubTableEXT = extproc; - - glCopyColorSubTableEXT(target, start, x, y, width); -} - -static void APIENTRY InitHintPGI (GLenum target, GLint mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glHintPGI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glHintPGI = extproc; - - glHintPGI(target, mode); -} - -static void APIENTRY InitColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorTableEXT = extproc; - - glColorTableEXT(target, internalFormat, width, format, type, table); -} - -static void APIENTRY InitGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableEXT = extproc; - - glGetColorTableEXT(target, format, type, data); -} - -static void APIENTRY InitGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameterivEXT = extproc; - - glGetColorTableParameterivEXT(target, pname, params); -} - -static void APIENTRY InitGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetColorTableParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetColorTableParameterfvEXT = extproc; - - glGetColorTableParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetListParameterfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetListParameterfvSGIX = extproc; - - glGetListParameterfvSGIX(list, pname, params); -} - -static void APIENTRY InitGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetListParameterivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetListParameterivSGIX = extproc; - - glGetListParameterivSGIX(list, pname, params); -} - -static void APIENTRY InitListParameterfSGIX (GLuint list, GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glListParameterfSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glListParameterfSGIX = extproc; - - glListParameterfSGIX(list, pname, param); -} - -static void APIENTRY InitListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glListParameterfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glListParameterfvSGIX = extproc; - - glListParameterfvSGIX(list, pname, params); -} - -static void APIENTRY InitListParameteriSGIX (GLuint list, GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glListParameteriSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glListParameteriSGIX = extproc; - - glListParameteriSGIX(list, pname, param); -} - -static void APIENTRY InitListParameterivSGIX (GLuint list, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glListParameterivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glListParameterivSGIX = extproc; - - glListParameterivSGIX(list, pname, params); -} - -static void APIENTRY InitIndexMaterialEXT (GLenum face, GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIndexMaterialEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glIndexMaterialEXT = extproc; - - glIndexMaterialEXT(face, mode); -} - -static void APIENTRY InitIndexFuncEXT (GLenum func, GLclampf ref) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIndexFuncEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glIndexFuncEXT = extproc; - - glIndexFuncEXT(func, ref); -} - -static void APIENTRY InitLockArraysEXT (GLint first, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLockArraysEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLockArraysEXT = extproc; - - glLockArraysEXT(first, count); -} - -static void APIENTRY InitUnlockArraysEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUnlockArraysEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUnlockArraysEXT = extproc; - - glUnlockArraysEXT(); -} - -static void APIENTRY InitCullParameterdvEXT (GLenum pname, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCullParameterdvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCullParameterdvEXT = extproc; - - glCullParameterdvEXT(pname, params); -} - -static void APIENTRY InitCullParameterfvEXT (GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCullParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCullParameterfvEXT = extproc; - - glCullParameterfvEXT(pname, params); -} - -static void APIENTRY InitFragmentColorMaterialSGIX (GLenum face, GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentColorMaterialSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentColorMaterialSGIX = extproc; - - glFragmentColorMaterialSGIX(face, mode); -} - -static void APIENTRY InitFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightfSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightfSGIX = extproc; - - glFragmentLightfSGIX(light, pname, param); -} - -static void APIENTRY InitFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightfvSGIX = extproc; - - glFragmentLightfvSGIX(light, pname, params); -} - -static void APIENTRY InitFragmentLightiSGIX (GLenum light, GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightiSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightiSGIX = extproc; - - glFragmentLightiSGIX(light, pname, param); -} - -static void APIENTRY InitFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightivSGIX = extproc; - - glFragmentLightivSGIX(light, pname, params); -} - -static void APIENTRY InitFragmentLightModelfSGIX (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightModelfSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightModelfSGIX = extproc; - - glFragmentLightModelfSGIX(pname, param); -} - -static void APIENTRY InitFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightModelfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightModelfvSGIX = extproc; - - glFragmentLightModelfvSGIX(pname, params); -} - -static void APIENTRY InitFragmentLightModeliSGIX (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightModeliSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightModeliSGIX = extproc; - - glFragmentLightModeliSGIX(pname, param); -} - -static void APIENTRY InitFragmentLightModelivSGIX (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentLightModelivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentLightModelivSGIX = extproc; - - glFragmentLightModelivSGIX(pname, params); -} - -static void APIENTRY InitFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentMaterialfSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentMaterialfSGIX = extproc; - - glFragmentMaterialfSGIX(face, pname, param); -} - -static void APIENTRY InitFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentMaterialfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentMaterialfvSGIX = extproc; - - glFragmentMaterialfvSGIX(face, pname, params); -} - -static void APIENTRY InitFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentMaterialiSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentMaterialiSGIX = extproc; - - glFragmentMaterialiSGIX(face, pname, param); -} - -static void APIENTRY InitFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFragmentMaterialivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFragmentMaterialivSGIX = extproc; - - glFragmentMaterialivSGIX(face, pname, params); -} - -static void APIENTRY InitGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFragmentLightfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFragmentLightfvSGIX = extproc; - - glGetFragmentLightfvSGIX(light, pname, params); -} - -static void APIENTRY InitGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFragmentLightivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFragmentLightivSGIX = extproc; - - glGetFragmentLightivSGIX(light, pname, params); -} - -static void APIENTRY InitGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFragmentMaterialfvSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFragmentMaterialfvSGIX = extproc; - - glGetFragmentMaterialfvSGIX(face, pname, params); -} - -static void APIENTRY InitGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFragmentMaterialivSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFragmentMaterialivSGIX = extproc; - - glGetFragmentMaterialivSGIX(face, pname, params); -} - -static void APIENTRY InitLightEnviSGIX (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLightEnviSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLightEnviSGIX = extproc; - - glLightEnviSGIX(pname, param); -} - -static void APIENTRY InitDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawRangeElementsEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawRangeElementsEXT = extproc; - - glDrawRangeElementsEXT(mode, start, end, count, type, indices); -} - -static void APIENTRY InitApplyTextureEXT (GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glApplyTextureEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glApplyTextureEXT = extproc; - - glApplyTextureEXT(mode); -} - -static void APIENTRY InitTextureLightEXT (GLenum pname) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTextureLightEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTextureLightEXT = extproc; - - glTextureLightEXT(pname); -} - -static void APIENTRY InitTextureMaterialEXT (GLenum face, GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTextureMaterialEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTextureMaterialEXT = extproc; - - glTextureMaterialEXT(face, mode); -} - -static void APIENTRY InitAsyncMarkerSGIX (GLuint marker) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAsyncMarkerSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAsyncMarkerSGIX = extproc; - - glAsyncMarkerSGIX(marker); -} - -static GLint APIENTRY InitFinishAsyncSGIX (GLuint *markerp) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinishAsyncSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glFinishAsyncSGIX = extproc; - - return glFinishAsyncSGIX(markerp); -} - -static GLint APIENTRY InitPollAsyncSGIX (GLuint *markerp) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPollAsyncSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glPollAsyncSGIX = extproc; - - return glPollAsyncSGIX(markerp); -} - -static GLuint APIENTRY InitGenAsyncMarkersSGIX (GLsizei range) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenAsyncMarkersSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGenAsyncMarkersSGIX = extproc; - - return glGenAsyncMarkersSGIX(range); -} - -static void APIENTRY InitDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteAsyncMarkersSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteAsyncMarkersSGIX = extproc; - - glDeleteAsyncMarkersSGIX(marker, range); -} - -static GLboolean APIENTRY InitIsAsyncMarkerSGIX (GLuint marker) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsAsyncMarkerSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsAsyncMarkerSGIX = extproc; - - return glIsAsyncMarkerSGIX(marker); -} - -static void APIENTRY InitVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexPointervINTEL"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexPointervINTEL = extproc; - - glVertexPointervINTEL(size, type, pointer); -} - -static void APIENTRY InitNormalPointervINTEL (GLenum type, const GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalPointervINTEL"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalPointervINTEL = extproc; - - glNormalPointervINTEL(type, pointer); -} - -static void APIENTRY InitColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorPointervINTEL"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorPointervINTEL = extproc; - - glColorPointervINTEL(size, type, pointer); -} - -static void APIENTRY InitTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoordPointervINTEL"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoordPointervINTEL = extproc; - - glTexCoordPointervINTEL(size, type, pointer); -} - -static void APIENTRY InitPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTransformParameteriEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTransformParameteriEXT = extproc; - - glPixelTransformParameteriEXT(target, pname, param); -} - -static void APIENTRY InitPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTransformParameterfEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTransformParameterfEXT = extproc; - - glPixelTransformParameterfEXT(target, pname, param); -} - -static void APIENTRY InitPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTransformParameterivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTransformParameterivEXT = extproc; - - glPixelTransformParameterivEXT(target, pname, params); -} - -static void APIENTRY InitPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelTransformParameterfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelTransformParameterfvEXT = extproc; - - glPixelTransformParameterfvEXT(target, pname, params); -} - -static void APIENTRY InitSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3bEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3bEXT = extproc; - - glSecondaryColor3bEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3bvEXT (const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3bvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3bvEXT = extproc; - - glSecondaryColor3bvEXT(v); -} - -static void APIENTRY InitSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3dEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3dEXT = extproc; - - glSecondaryColor3dEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3dvEXT (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3dvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3dvEXT = extproc; - - glSecondaryColor3dvEXT(v); -} - -static void APIENTRY InitSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3fEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3fEXT = extproc; - - glSecondaryColor3fEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3fvEXT (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3fvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3fvEXT = extproc; - - glSecondaryColor3fvEXT(v); -} - -static void APIENTRY InitSecondaryColor3iEXT (GLint red, GLint green, GLint blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3iEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3iEXT = extproc; - - glSecondaryColor3iEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3ivEXT (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ivEXT = extproc; - - glSecondaryColor3ivEXT(v); -} - -static void APIENTRY InitSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3sEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3sEXT = extproc; - - glSecondaryColor3sEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3svEXT (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3svEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3svEXT = extproc; - - glSecondaryColor3svEXT(v); -} - -static void APIENTRY InitSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ubEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ubEXT = extproc; - - glSecondaryColor3ubEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3ubvEXT (const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3ubvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3ubvEXT = extproc; - - glSecondaryColor3ubvEXT(v); -} - -static void APIENTRY InitSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3uiEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3uiEXT = extproc; - - glSecondaryColor3uiEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3uivEXT (const GLuint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3uivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3uivEXT = extproc; - - glSecondaryColor3uivEXT(v); -} - -static void APIENTRY InitSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3usEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3usEXT = extproc; - - glSecondaryColor3usEXT(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3usvEXT (const GLushort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3usvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3usvEXT = extproc; - - glSecondaryColor3usvEXT(v); -} - -static void APIENTRY InitSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColorPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColorPointerEXT = extproc; - - glSecondaryColorPointerEXT(size, type, stride, pointer); -} - -static void APIENTRY InitTextureNormalEXT (GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTextureNormalEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTextureNormalEXT = extproc; - - glTextureNormalEXT(mode); -} - -static void APIENTRY InitMultiDrawArraysEXT (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawArraysEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawArraysEXT = extproc; - - glMultiDrawArraysEXT(mode, first, count, primcount); -} - -static void APIENTRY InitMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawElementsEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawElementsEXT = extproc; - - glMultiDrawElementsEXT(mode, count, type, indices, primcount); -} - -static void APIENTRY InitFogCoordfEXT (GLfloat coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordfEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordfEXT = extproc; - - glFogCoordfEXT(coord); -} - -static void APIENTRY InitFogCoordfvEXT (const GLfloat *coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordfvEXT = extproc; - - glFogCoordfvEXT(coord); -} - -static void APIENTRY InitFogCoorddEXT (GLdouble coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoorddEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoorddEXT = extproc; - - glFogCoorddEXT(coord); -} - -static void APIENTRY InitFogCoorddvEXT (const GLdouble *coord) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoorddvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoorddvEXT = extproc; - - glFogCoorddvEXT(coord); -} - -static void APIENTRY InitFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordPointerEXT = extproc; - - glFogCoordPointerEXT(type, stride, pointer); -} - -static void APIENTRY InitTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3bEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3bEXT = extproc; - - glTangent3bEXT(tx, ty, tz); -} - -static void APIENTRY InitTangent3bvEXT (const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3bvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3bvEXT = extproc; - - glTangent3bvEXT(v); -} - -static void APIENTRY InitTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3dEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3dEXT = extproc; - - glTangent3dEXT(tx, ty, tz); -} - -static void APIENTRY InitTangent3dvEXT (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3dvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3dvEXT = extproc; - - glTangent3dvEXT(v); -} - -static void APIENTRY InitTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3fEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3fEXT = extproc; - - glTangent3fEXT(tx, ty, tz); -} - -static void APIENTRY InitTangent3fvEXT (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3fvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3fvEXT = extproc; - - glTangent3fvEXT(v); -} - -static void APIENTRY InitTangent3iEXT (GLint tx, GLint ty, GLint tz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3iEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3iEXT = extproc; - - glTangent3iEXT(tx, ty, tz); -} - -static void APIENTRY InitTangent3ivEXT (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3ivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3ivEXT = extproc; - - glTangent3ivEXT(v); -} - -static void APIENTRY InitTangent3sEXT (GLshort tx, GLshort ty, GLshort tz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3sEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3sEXT = extproc; - - glTangent3sEXT(tx, ty, tz); -} - -static void APIENTRY InitTangent3svEXT (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangent3svEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangent3svEXT = extproc; - - glTangent3svEXT(v); -} - -static void APIENTRY InitBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3bEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3bEXT = extproc; - - glBinormal3bEXT(bx, by, bz); -} - -static void APIENTRY InitBinormal3bvEXT (const GLbyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3bvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3bvEXT = extproc; - - glBinormal3bvEXT(v); -} - -static void APIENTRY InitBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3dEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3dEXT = extproc; - - glBinormal3dEXT(bx, by, bz); -} - -static void APIENTRY InitBinormal3dvEXT (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3dvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3dvEXT = extproc; - - glBinormal3dvEXT(v); -} - -static void APIENTRY InitBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3fEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3fEXT = extproc; - - glBinormal3fEXT(bx, by, bz); -} - -static void APIENTRY InitBinormal3fvEXT (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3fvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3fvEXT = extproc; - - glBinormal3fvEXT(v); -} - -static void APIENTRY InitBinormal3iEXT (GLint bx, GLint by, GLint bz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3iEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3iEXT = extproc; - - glBinormal3iEXT(bx, by, bz); -} - -static void APIENTRY InitBinormal3ivEXT (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3ivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3ivEXT = extproc; - - glBinormal3ivEXT(v); -} - -static void APIENTRY InitBinormal3sEXT (GLshort bx, GLshort by, GLshort bz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3sEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3sEXT = extproc; - - glBinormal3sEXT(bx, by, bz); -} - -static void APIENTRY InitBinormal3svEXT (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormal3svEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormal3svEXT = extproc; - - glBinormal3svEXT(v); -} - -static void APIENTRY InitTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTangentPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTangentPointerEXT = extproc; - - glTangentPointerEXT(type, stride, pointer); -} - -static void APIENTRY InitBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBinormalPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBinormalPointerEXT = extproc; - - glBinormalPointerEXT(type, stride, pointer); -} - -static void APIENTRY InitFinishTextureSUNX (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinishTextureSUNX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFinishTextureSUNX = extproc; - - glFinishTextureSUNX(); -} - -static void APIENTRY InitGlobalAlphaFactorbSUN (GLbyte factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactorbSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactorbSUN = extproc; - - glGlobalAlphaFactorbSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactorsSUN (GLshort factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactorsSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactorsSUN = extproc; - - glGlobalAlphaFactorsSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactoriSUN (GLint factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactoriSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactoriSUN = extproc; - - glGlobalAlphaFactoriSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactorfSUN (GLfloat factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactorfSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactorfSUN = extproc; - - glGlobalAlphaFactorfSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactordSUN (GLdouble factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactordSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactordSUN = extproc; - - glGlobalAlphaFactordSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactorubSUN (GLubyte factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactorubSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactorubSUN = extproc; - - glGlobalAlphaFactorubSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactorusSUN (GLushort factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactorusSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactorusSUN = extproc; - - glGlobalAlphaFactorusSUN(factor); -} - -static void APIENTRY InitGlobalAlphaFactoruiSUN (GLuint factor) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGlobalAlphaFactoruiSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGlobalAlphaFactoruiSUN = extproc; - - glGlobalAlphaFactoruiSUN(factor); -} - -static void APIENTRY InitReplacementCodeuiSUN (GLuint code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiSUN = extproc; - - glReplacementCodeuiSUN(code); -} - -static void APIENTRY InitReplacementCodeusSUN (GLushort code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeusSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeusSUN = extproc; - - glReplacementCodeusSUN(code); -} - -static void APIENTRY InitReplacementCodeubSUN (GLubyte code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeubSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeubSUN = extproc; - - glReplacementCodeubSUN(code); -} - -static void APIENTRY InitReplacementCodeuivSUN (const GLuint *code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuivSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuivSUN = extproc; - - glReplacementCodeuivSUN(code); -} - -static void APIENTRY InitReplacementCodeusvSUN (const GLushort *code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeusvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeusvSUN = extproc; - - glReplacementCodeusvSUN(code); -} - -static void APIENTRY InitReplacementCodeubvSUN (const GLubyte *code) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeubvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeubvSUN = extproc; - - glReplacementCodeubvSUN(code); -} - -static void APIENTRY InitReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodePointerSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodePointerSUN = extproc; - - glReplacementCodePointerSUN(type, stride, pointer); -} - -static void APIENTRY InitColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4ubVertex2fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4ubVertex2fSUN = extproc; - - glColor4ubVertex2fSUN(r, g, b, a, x, y); -} - -static void APIENTRY InitColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4ubVertex2fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4ubVertex2fvSUN = extproc; - - glColor4ubVertex2fvSUN(c, v); -} - -static void APIENTRY InitColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4ubVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4ubVertex3fSUN = extproc; - - glColor4ubVertex3fSUN(r, g, b, a, x, y, z); -} - -static void APIENTRY InitColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4ubVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4ubVertex3fvSUN = extproc; - - glColor4ubVertex3fvSUN(c, v); -} - -static void APIENTRY InitColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor3fVertex3fSUN = extproc; - - glColor3fVertex3fSUN(r, g, b, x, y, z); -} - -static void APIENTRY InitColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor3fVertex3fvSUN = extproc; - - glColor3fVertex3fvSUN(c, v); -} - -static void APIENTRY InitNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormal3fVertex3fSUN = extproc; - - glNormal3fVertex3fSUN(nx, ny, nz, x, y, z); -} - -static void APIENTRY InitNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormal3fVertex3fvSUN = extproc; - - glNormal3fVertex3fvSUN(n, v); -} - -static void APIENTRY InitColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4fNormal3fVertex3fSUN = extproc; - - glColor4fNormal3fVertex3fSUN(r, g, b, a, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4fNormal3fVertex3fvSUN = extproc; - - glColor4fNormal3fVertex3fvSUN(c, n, v); -} - -static void APIENTRY InitTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fVertex3fSUN = extproc; - - glTexCoord2fVertex3fSUN(s, t, x, y, z); -} - -static void APIENTRY InitTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fVertex3fvSUN = extproc; - - glTexCoord2fVertex3fvSUN(tc, v); -} - -static void APIENTRY InitTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4fVertex4fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4fVertex4fSUN = extproc; - - glTexCoord4fVertex4fSUN(s, t, p, q, x, y, z, w); -} - -static void APIENTRY InitTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4fVertex4fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4fVertex4fvSUN = extproc; - - glTexCoord4fVertex4fvSUN(tc, v); -} - -static void APIENTRY InitTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor4ubVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor4ubVertex3fSUN = extproc; - - glTexCoord2fColor4ubVertex3fSUN(s, t, r, g, b, a, x, y, z); -} - -static void APIENTRY InitTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor4ubVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor4ubVertex3fvSUN = extproc; - - glTexCoord2fColor4ubVertex3fvSUN(tc, c, v); -} - -static void APIENTRY InitTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor3fVertex3fSUN = extproc; - - glTexCoord2fColor3fVertex3fSUN(s, t, r, g, b, x, y, z); -} - -static void APIENTRY InitTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor3fVertex3fvSUN = extproc; - - glTexCoord2fColor3fVertex3fvSUN(tc, c, v); -} - -static void APIENTRY InitTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fNormal3fVertex3fSUN = extproc; - - glTexCoord2fNormal3fVertex3fSUN(s, t, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fNormal3fVertex3fvSUN = extproc; - - glTexCoord2fNormal3fVertex3fvSUN(tc, n, v); -} - -static void APIENTRY InitTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor4fNormal3fVertex3fSUN = extproc; - - glTexCoord2fColor4fNormal3fVertex3fSUN(s, t, r, g, b, a, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2fColor4fNormal3fVertex3fvSUN = extproc; - - glTexCoord2fColor4fNormal3fVertex3fvSUN(tc, c, n, v); -} - -static void APIENTRY InitTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4fColor4fNormal3fVertex4fSUN = extproc; - - glTexCoord4fColor4fNormal3fVertex4fSUN(s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w); -} - -static void APIENTRY InitTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4fColor4fNormal3fVertex4fvSUN = extproc; - - glTexCoord4fColor4fNormal3fVertex4fvSUN(tc, c, n, v); -} - -static void APIENTRY InitReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiVertex3fSUN = extproc; - - glReplacementCodeuiVertex3fSUN(rc, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiVertex3fvSUN = extproc; - - glReplacementCodeuiVertex3fvSUN(rc, v); -} - -static void APIENTRY InitReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor4ubVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor4ubVertex3fSUN = extproc; - - glReplacementCodeuiColor4ubVertex3fSUN(rc, r, g, b, a, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor4ubVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor4ubVertex3fvSUN = extproc; - - glReplacementCodeuiColor4ubVertex3fvSUN(rc, c, v); -} - -static void APIENTRY InitReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor3fVertex3fSUN = extproc; - - glReplacementCodeuiColor3fVertex3fSUN(rc, r, g, b, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor3fVertex3fvSUN = extproc; - - glReplacementCodeuiColor3fVertex3fvSUN(rc, c, v); -} - -static void APIENTRY InitReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiNormal3fVertex3fSUN = extproc; - - glReplacementCodeuiNormal3fVertex3fSUN(rc, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiNormal3fVertex3fvSUN = extproc; - - glReplacementCodeuiNormal3fVertex3fvSUN(rc, n, v); -} - -static void APIENTRY InitReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor4fNormal3fVertex3fSUN = extproc; - - glReplacementCodeuiColor4fNormal3fVertex3fSUN(rc, r, g, b, a, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiColor4fNormal3fVertex3fvSUN = extproc; - - glReplacementCodeuiColor4fNormal3fVertex3fvSUN(rc, c, n, v); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fVertex3fSUN = extproc; - - glReplacementCodeuiTexCoord2fVertex3fSUN(rc, s, t, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fVertex3fvSUN = extproc; - - glReplacementCodeuiTexCoord2fVertex3fvSUN(rc, tc, v); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = extproc; - - glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN(rc, s, t, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = extproc; - - glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN(rc, tc, n, v); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = extproc; - - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(rc, s, t, r, g, b, a, nx, ny, nz, x, y, z); -} - -static void APIENTRY InitReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = extproc; - - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(rc, tc, c, n, v); -} - -static void APIENTRY InitBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendFuncSeparateEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendFuncSeparateEXT = extproc; - - glBlendFuncSeparateEXT(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -static void APIENTRY InitBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendFuncSeparateINGR"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendFuncSeparateINGR = extproc; - - glBlendFuncSeparateINGR(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); -} - -static void APIENTRY InitVertexWeightfEXT (GLfloat weight) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexWeightfEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexWeightfEXT = extproc; - - glVertexWeightfEXT(weight); -} - -static void APIENTRY InitVertexWeightfvEXT (const GLfloat *weight) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexWeightfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexWeightfvEXT = extproc; - - glVertexWeightfvEXT(weight); -} - -static void APIENTRY InitVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexWeightPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexWeightPointerEXT = extproc; - - glVertexWeightPointerEXT(size, type, stride, pointer); -} - -static void APIENTRY InitFlushVertexArrayRangeNV (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFlushVertexArrayRangeNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFlushVertexArrayRangeNV = extproc; - - glFlushVertexArrayRangeNV(); -} - -static void APIENTRY InitVertexArrayRangeNV (GLsizei length, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexArrayRangeNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexArrayRangeNV = extproc; - - glVertexArrayRangeNV(length, pointer); -} - -static void APIENTRY InitCombinerParameterfvNV (GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerParameterfvNV = extproc; - - glCombinerParameterfvNV(pname, params); -} - -static void APIENTRY InitCombinerParameterfNV (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerParameterfNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerParameterfNV = extproc; - - glCombinerParameterfNV(pname, param); -} - -static void APIENTRY InitCombinerParameterivNV (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerParameterivNV = extproc; - - glCombinerParameterivNV(pname, params); -} - -static void APIENTRY InitCombinerParameteriNV (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerParameteriNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerParameteriNV = extproc; - - glCombinerParameteriNV(pname, param); -} - -static void APIENTRY InitCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerInputNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerInputNV = extproc; - - glCombinerInputNV(stage, portion, variable, input, mapping, componentUsage); -} - -static void APIENTRY InitCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerOutputNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerOutputNV = extproc; - - glCombinerOutputNV(stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum); -} - -static void APIENTRY InitFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinalCombinerInputNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFinalCombinerInputNV = extproc; - - glFinalCombinerInputNV(variable, input, mapping, componentUsage); -} - -static void APIENTRY InitGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCombinerInputParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCombinerInputParameterfvNV = extproc; - - glGetCombinerInputParameterfvNV(stage, portion, variable, pname, params); -} - -static void APIENTRY InitGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCombinerInputParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCombinerInputParameterivNV = extproc; - - glGetCombinerInputParameterivNV(stage, portion, variable, pname, params); -} - -static void APIENTRY InitGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCombinerOutputParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCombinerOutputParameterfvNV = extproc; - - glGetCombinerOutputParameterfvNV(stage, portion, pname, params); -} - -static void APIENTRY InitGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCombinerOutputParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCombinerOutputParameterivNV = extproc; - - glGetCombinerOutputParameterivNV(stage, portion, pname, params); -} - -static void APIENTRY InitGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFinalCombinerInputParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFinalCombinerInputParameterfvNV = extproc; - - glGetFinalCombinerInputParameterfvNV(variable, pname, params); -} - -static void APIENTRY InitGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFinalCombinerInputParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFinalCombinerInputParameterivNV = extproc; - - glGetFinalCombinerInputParameterivNV(variable, pname, params); -} - -static void APIENTRY InitResizeBuffersMESA (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glResizeBuffersMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glResizeBuffersMESA = extproc; - - glResizeBuffersMESA(); -} - -static void APIENTRY InitWindowPos2dMESA (GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2dMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2dMESA = extproc; - - glWindowPos2dMESA(x, y); -} - -static void APIENTRY InitWindowPos2dvMESA (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2dvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2dvMESA = extproc; - - glWindowPos2dvMESA(v); -} - -static void APIENTRY InitWindowPos2fMESA (GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2fMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2fMESA = extproc; - - glWindowPos2fMESA(x, y); -} - -static void APIENTRY InitWindowPos2fvMESA (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2fvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2fvMESA = extproc; - - glWindowPos2fvMESA(v); -} - -static void APIENTRY InitWindowPos2iMESA (GLint x, GLint y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2iMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2iMESA = extproc; - - glWindowPos2iMESA(x, y); -} - -static void APIENTRY InitWindowPos2ivMESA (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2ivMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2ivMESA = extproc; - - glWindowPos2ivMESA(v); -} - -static void APIENTRY InitWindowPos2sMESA (GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2sMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2sMESA = extproc; - - glWindowPos2sMESA(x, y); -} - -static void APIENTRY InitWindowPos2svMESA (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos2svMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos2svMESA = extproc; - - glWindowPos2svMESA(v); -} - -static void APIENTRY InitWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3dMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3dMESA = extproc; - - glWindowPos3dMESA(x, y, z); -} - -static void APIENTRY InitWindowPos3dvMESA (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3dvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3dvMESA = extproc; - - glWindowPos3dvMESA(v); -} - -static void APIENTRY InitWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3fMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3fMESA = extproc; - - glWindowPos3fMESA(x, y, z); -} - -static void APIENTRY InitWindowPos3fvMESA (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3fvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3fvMESA = extproc; - - glWindowPos3fvMESA(v); -} - -static void APIENTRY InitWindowPos3iMESA (GLint x, GLint y, GLint z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3iMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3iMESA = extproc; - - glWindowPos3iMESA(x, y, z); -} - -static void APIENTRY InitWindowPos3ivMESA (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3ivMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3ivMESA = extproc; - - glWindowPos3ivMESA(v); -} - -static void APIENTRY InitWindowPos3sMESA (GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3sMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3sMESA = extproc; - - glWindowPos3sMESA(x, y, z); -} - -static void APIENTRY InitWindowPos3svMESA (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos3svMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos3svMESA = extproc; - - glWindowPos3svMESA(v); -} - -static void APIENTRY InitWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4dMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4dMESA = extproc; - - glWindowPos4dMESA(x, y, z, w); -} - -static void APIENTRY InitWindowPos4dvMESA (const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4dvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4dvMESA = extproc; - - glWindowPos4dvMESA(v); -} - -static void APIENTRY InitWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4fMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4fMESA = extproc; - - glWindowPos4fMESA(x, y, z, w); -} - -static void APIENTRY InitWindowPos4fvMESA (const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4fvMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4fvMESA = extproc; - - glWindowPos4fvMESA(v); -} - -static void APIENTRY InitWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4iMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4iMESA = extproc; - - glWindowPos4iMESA(x, y, z, w); -} - -static void APIENTRY InitWindowPos4ivMESA (const GLint *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4ivMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4ivMESA = extproc; - - glWindowPos4ivMESA(v); -} - -static void APIENTRY InitWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4sMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4sMESA = extproc; - - glWindowPos4sMESA(x, y, z, w); -} - -static void APIENTRY InitWindowPos4svMESA (const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWindowPos4svMESA"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWindowPos4svMESA = extproc; - - glWindowPos4svMESA(v); -} - -static void APIENTRY InitMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiModeDrawArraysIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiModeDrawArraysIBM = extproc; - - glMultiModeDrawArraysIBM(mode, first, count, primcount, modestride); -} - -static void APIENTRY InitMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiModeDrawElementsIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiModeDrawElementsIBM = extproc; - - glMultiModeDrawElementsIBM(mode, count, type, indices, primcount, modestride); -} - -static void APIENTRY InitColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorPointerListIBM = extproc; - - glColorPointerListIBM(size, type, stride, pointer, ptrstride); -} - -static void APIENTRY InitSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColorPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColorPointerListIBM = extproc; - - glSecondaryColorPointerListIBM(size, type, stride, pointer, ptrstride); -} - -static void APIENTRY InitEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEdgeFlagPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEdgeFlagPointerListIBM = extproc; - - glEdgeFlagPointerListIBM(stride, pointer, ptrstride); -} - -static void APIENTRY InitFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordPointerListIBM = extproc; - - glFogCoordPointerListIBM(type, stride, pointer, ptrstride); -} - -static void APIENTRY InitIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIndexPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glIndexPointerListIBM = extproc; - - glIndexPointerListIBM(type, stride, pointer, ptrstride); -} - -static void APIENTRY InitNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalPointerListIBM = extproc; - - glNormalPointerListIBM(type, stride, pointer, ptrstride); -} - -static void APIENTRY InitTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoordPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoordPointerListIBM = extproc; - - glTexCoordPointerListIBM(size, type, stride, pointer, ptrstride); -} - -static void APIENTRY InitVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexPointerListIBM"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexPointerListIBM = extproc; - - glVertexPointerListIBM(size, type, stride, pointer, ptrstride); -} - -static void APIENTRY InitTbufferMask3DFX (GLuint mask) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTbufferMask3DFX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTbufferMask3DFX = extproc; - - glTbufferMask3DFX(mask); -} - -static void APIENTRY InitSampleMaskEXT (GLclampf value, GLboolean invert) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSampleMaskEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSampleMaskEXT = extproc; - - glSampleMaskEXT(value, invert); -} - -static void APIENTRY InitSamplePatternEXT (GLenum pattern) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSamplePatternEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSamplePatternEXT = extproc; - - glSamplePatternEXT(pattern); -} - -static void APIENTRY InitTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTextureColorMaskSGIS"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTextureColorMaskSGIS = extproc; - - glTextureColorMaskSGIS(red, green, blue, alpha); -} - -static void APIENTRY InitIglooInterfaceSGIX (GLenum pname, const GLvoid *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIglooInterfaceSGIX"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glIglooInterfaceSGIX = extproc; - - glIglooInterfaceSGIX(pname, params); -} - -static void APIENTRY InitDeleteFencesNV (GLsizei n, const GLuint *fences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteFencesNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteFencesNV = extproc; - - glDeleteFencesNV(n, fences); -} - -static void APIENTRY InitGenFencesNV (GLsizei n, GLuint *fences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenFencesNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenFencesNV = extproc; - - glGenFencesNV(n, fences); -} - -static GLboolean APIENTRY InitIsFenceNV (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsFenceNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsFenceNV = extproc; - - return glIsFenceNV(fence); -} - -static GLboolean APIENTRY InitTestFenceNV (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTestFenceNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glTestFenceNV = extproc; - - return glTestFenceNV(fence); -} - -static void APIENTRY InitGetFenceivNV (GLuint fence, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetFenceivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetFenceivNV = extproc; - - glGetFenceivNV(fence, pname, params); -} - -static void APIENTRY InitFinishFenceNV (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinishFenceNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFinishFenceNV = extproc; - - glFinishFenceNV(fence); -} - -static void APIENTRY InitSetFenceNV (GLuint fence, GLenum condition) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSetFenceNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSetFenceNV = extproc; - - glSetFenceNV(fence, condition); -} - -static void APIENTRY InitMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapControlPointsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMapControlPointsNV = extproc; - - glMapControlPointsNV(target, index, type, ustride, vstride, uorder, vorder, packed, points); -} - -static void APIENTRY InitMapParameterivNV (GLenum target, GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMapParameterivNV = extproc; - - glMapParameterivNV(target, pname, params); -} - -static void APIENTRY InitMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMapParameterfvNV = extproc; - - glMapParameterfvNV(target, pname, params); -} - -static void APIENTRY InitGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMapControlPointsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMapControlPointsNV = extproc; - - glGetMapControlPointsNV(target, index, type, ustride, vstride, packed, points); -} - -static void APIENTRY InitGetMapParameterivNV (GLenum target, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMapParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMapParameterivNV = extproc; - - glGetMapParameterivNV(target, pname, params); -} - -static void APIENTRY InitGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMapParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMapParameterfvNV = extproc; - - glGetMapParameterfvNV(target, pname, params); -} - -static void APIENTRY InitGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMapAttribParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMapAttribParameterivNV = extproc; - - glGetMapAttribParameterivNV(target, index, pname, params); -} - -static void APIENTRY InitGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetMapAttribParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetMapAttribParameterfvNV = extproc; - - glGetMapAttribParameterfvNV(target, index, pname, params); -} - -static void APIENTRY InitEvalMapsNV (GLenum target, GLenum mode) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEvalMapsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEvalMapsNV = extproc; - - glEvalMapsNV(target, mode); -} - -static void APIENTRY InitCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glCombinerStageParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glCombinerStageParameterfvNV = extproc; - - glCombinerStageParameterfvNV(stage, pname, params); -} - -static void APIENTRY InitGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetCombinerStageParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetCombinerStageParameterfvNV = extproc; - - glGetCombinerStageParameterfvNV(stage, pname, params); -} - -static GLboolean APIENTRY InitAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAreProgramsResidentNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glAreProgramsResidentNV = extproc; - - return glAreProgramsResidentNV(n, programs, residences); -} - -static void APIENTRY InitBindProgramNV (GLenum target, GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindProgramNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindProgramNV = extproc; - - glBindProgramNV(target, id); -} - -static void APIENTRY InitDeleteProgramsNV (GLsizei n, const GLuint *programs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteProgramsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteProgramsNV = extproc; - - glDeleteProgramsNV(n, programs); -} - -static void APIENTRY InitExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glExecuteProgramNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glExecuteProgramNV = extproc; - - glExecuteProgramNV(target, id, params); -} - -static void APIENTRY InitGenProgramsNV (GLsizei n, GLuint *programs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenProgramsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenProgramsNV = extproc; - - glGenProgramsNV(n, programs); -} - -static void APIENTRY InitGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramParameterdvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramParameterdvNV = extproc; - - glGetProgramParameterdvNV(target, index, pname, params); -} - -static void APIENTRY InitGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramParameterfvNV = extproc; - - glGetProgramParameterfvNV(target, index, pname, params); -} - -static void APIENTRY InitGetProgramivNV (GLuint id, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramivNV = extproc; - - glGetProgramivNV(id, pname, params); -} - -static void APIENTRY InitGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramStringNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramStringNV = extproc; - - glGetProgramStringNV(id, pname, program); -} - -static void APIENTRY InitGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetTrackMatrixivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetTrackMatrixivNV = extproc; - - glGetTrackMatrixivNV(target, address, pname, params); -} - -static void APIENTRY InitGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribdvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribdvNV = extproc; - - glGetVertexAttribdvNV(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribfvNV = extproc; - - glGetVertexAttribfvNV(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribivNV = extproc; - - glGetVertexAttribivNV(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribPointervNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribPointervNV = extproc; - - glGetVertexAttribPointervNV(index, pname, pointer); -} - -static GLboolean APIENTRY InitIsProgramNV (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsProgramNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsProgramNV = extproc; - - return glIsProgramNV(id); -} - -static void APIENTRY InitLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glLoadProgramNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glLoadProgramNV = extproc; - - glLoadProgramNV(target, id, len, program); -} - -static void APIENTRY InitProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameter4dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameter4dNV = extproc; - - glProgramParameter4dNV(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameter4dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameter4dvNV = extproc; - - glProgramParameter4dvNV(target, index, v); -} - -static void APIENTRY InitProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameter4fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameter4fNV = extproc; - - glProgramParameter4fNV(target, index, x, y, z, w); -} - -static void APIENTRY InitProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameter4fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameter4fvNV = extproc; - - glProgramParameter4fvNV(target, index, v); -} - -static void APIENTRY InitProgramParameters4dvNV (GLenum target, GLuint index, GLuint count, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameters4dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameters4dvNV = extproc; - - glProgramParameters4dvNV(target, index, count, v); -} - -static void APIENTRY InitProgramParameters4fvNV (GLenum target, GLuint index, GLuint count, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramParameters4fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramParameters4fvNV = extproc; - - glProgramParameters4fvNV(target, index, count, v); -} - -static void APIENTRY InitRequestResidentProgramsNV (GLsizei n, const GLuint *programs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glRequestResidentProgramsNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glRequestResidentProgramsNV = extproc; - - glRequestResidentProgramsNV(n, programs); -} - -static void APIENTRY InitTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTrackMatrixNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTrackMatrixNV = extproc; - - glTrackMatrixNV(target, address, matrix, transform); -} - -static void APIENTRY InitVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribPointerNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribPointerNV = extproc; - - glVertexAttribPointerNV(index, fsize, type, stride, pointer); -} - -static void APIENTRY InitVertexAttrib1dNV (GLuint index, GLdouble x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1dNV = extproc; - - glVertexAttrib1dNV(index, x); -} - -static void APIENTRY InitVertexAttrib1dvNV (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1dvNV = extproc; - - glVertexAttrib1dvNV(index, v); -} - -static void APIENTRY InitVertexAttrib1fNV (GLuint index, GLfloat x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1fNV = extproc; - - glVertexAttrib1fNV(index, x); -} - -static void APIENTRY InitVertexAttrib1fvNV (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1fvNV = extproc; - - glVertexAttrib1fvNV(index, v); -} - -static void APIENTRY InitVertexAttrib1sNV (GLuint index, GLshort x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1sNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1sNV = extproc; - - glVertexAttrib1sNV(index, x); -} - -static void APIENTRY InitVertexAttrib1svNV (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1svNV = extproc; - - glVertexAttrib1svNV(index, v); -} - -static void APIENTRY InitVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2dNV = extproc; - - glVertexAttrib2dNV(index, x, y); -} - -static void APIENTRY InitVertexAttrib2dvNV (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2dvNV = extproc; - - glVertexAttrib2dvNV(index, v); -} - -static void APIENTRY InitVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2fNV = extproc; - - glVertexAttrib2fNV(index, x, y); -} - -static void APIENTRY InitVertexAttrib2fvNV (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2fvNV = extproc; - - glVertexAttrib2fvNV(index, v); -} - -static void APIENTRY InitVertexAttrib2sNV (GLuint index, GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2sNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2sNV = extproc; - - glVertexAttrib2sNV(index, x, y); -} - -static void APIENTRY InitVertexAttrib2svNV (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2svNV = extproc; - - glVertexAttrib2svNV(index, v); -} - -static void APIENTRY InitVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3dNV = extproc; - - glVertexAttrib3dNV(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3dvNV (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3dvNV = extproc; - - glVertexAttrib3dvNV(index, v); -} - -static void APIENTRY InitVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3fNV = extproc; - - glVertexAttrib3fNV(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3fvNV (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3fvNV = extproc; - - glVertexAttrib3fvNV(index, v); -} - -static void APIENTRY InitVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3sNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3sNV = extproc; - - glVertexAttrib3sNV(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3svNV (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3svNV = extproc; - - glVertexAttrib3svNV(index, v); -} - -static void APIENTRY InitVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4dNV = extproc; - - glVertexAttrib4dNV(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4dvNV (GLuint index, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4dvNV = extproc; - - glVertexAttrib4dvNV(index, v); -} - -static void APIENTRY InitVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4fNV = extproc; - - glVertexAttrib4fNV(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4fvNV (GLuint index, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4fvNV = extproc; - - glVertexAttrib4fvNV(index, v); -} - -static void APIENTRY InitVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4sNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4sNV = extproc; - - glVertexAttrib4sNV(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4svNV (GLuint index, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4svNV = extproc; - - glVertexAttrib4svNV(index, v); -} - -static void APIENTRY InitVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4ubNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4ubNV = extproc; - - glVertexAttrib4ubNV(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4ubvNV (GLuint index, const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4ubvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4ubvNV = extproc; - - glVertexAttrib4ubvNV(index, v); -} - -static void APIENTRY InitVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs1dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs1dvNV = extproc; - - glVertexAttribs1dvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs1fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs1fvNV = extproc; - - glVertexAttribs1fvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs1svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs1svNV = extproc; - - glVertexAttribs1svNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs2dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs2dvNV = extproc; - - glVertexAttribs2dvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs2fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs2fvNV = extproc; - - glVertexAttribs2fvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs2svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs2svNV = extproc; - - glVertexAttribs2svNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs3dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs3dvNV = extproc; - - glVertexAttribs3dvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs3fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs3fvNV = extproc; - - glVertexAttribs3fvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs3svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs3svNV = extproc; - - glVertexAttribs3svNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs4dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs4dvNV = extproc; - - glVertexAttribs4dvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs4fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs4fvNV = extproc; - - glVertexAttribs4fvNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs4svNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs4svNV = extproc; - - glVertexAttribs4svNV(index, count, v); -} - -static void APIENTRY InitVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs4ubvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs4ubvNV = extproc; - - glVertexAttribs4ubvNV(index, count, v); -} - -static void APIENTRY InitTexBumpParameterivATI (GLenum pname, const GLint *param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexBumpParameterivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexBumpParameterivATI = extproc; - - glTexBumpParameterivATI(pname, param); -} - -static void APIENTRY InitTexBumpParameterfvATI (GLenum pname, const GLfloat *param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexBumpParameterfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexBumpParameterfvATI = extproc; - - glTexBumpParameterfvATI(pname, param); -} - -static void APIENTRY InitGetTexBumpParameterivATI (GLenum pname, GLint *param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetTexBumpParameterivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetTexBumpParameterivATI = extproc; - - glGetTexBumpParameterivATI(pname, param); -} - -static void APIENTRY InitGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetTexBumpParameterfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetTexBumpParameterfvATI = extproc; - - glGetTexBumpParameterfvATI(pname, param); -} - -static GLuint APIENTRY InitGenFragmentShadersATI (GLuint range) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenFragmentShadersATI"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGenFragmentShadersATI = extproc; - - return glGenFragmentShadersATI(range); -} - -static void APIENTRY InitBindFragmentShaderATI (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindFragmentShaderATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindFragmentShaderATI = extproc; - - glBindFragmentShaderATI(id); -} - -static void APIENTRY InitDeleteFragmentShaderATI (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteFragmentShaderATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteFragmentShaderATI = extproc; - - glDeleteFragmentShaderATI(id); -} - -static void APIENTRY InitBeginFragmentShaderATI (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBeginFragmentShaderATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBeginFragmentShaderATI = extproc; - - glBeginFragmentShaderATI(); -} - -static void APIENTRY InitEndFragmentShaderATI (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEndFragmentShaderATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEndFragmentShaderATI = extproc; - - glEndFragmentShaderATI(); -} - -static void APIENTRY InitPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPassTexCoordATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPassTexCoordATI = extproc; - - glPassTexCoordATI(dst, coord, swizzle); -} - -static void APIENTRY InitSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSampleMapATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSampleMapATI = extproc; - - glSampleMapATI(dst, interp, swizzle); -} - -static void APIENTRY InitColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorFragmentOp1ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorFragmentOp1ATI = extproc; - - glColorFragmentOp1ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod); -} - -static void APIENTRY InitColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorFragmentOp2ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorFragmentOp2ATI = extproc; - - glColorFragmentOp2ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod); -} - -static void APIENTRY InitColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColorFragmentOp3ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColorFragmentOp3ATI = extproc; - - glColorFragmentOp3ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod); -} - -static void APIENTRY InitAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAlphaFragmentOp1ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAlphaFragmentOp1ATI = extproc; - - glAlphaFragmentOp1ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod); -} - -static void APIENTRY InitAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAlphaFragmentOp2ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAlphaFragmentOp2ATI = extproc; - - glAlphaFragmentOp2ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod); -} - -static void APIENTRY InitAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAlphaFragmentOp3ATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAlphaFragmentOp3ATI = extproc; - - glAlphaFragmentOp3ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod); -} - -static void APIENTRY InitSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSetFragmentShaderConstantATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSetFragmentShaderConstantATI = extproc; - - glSetFragmentShaderConstantATI(dst, value); -} - -static void APIENTRY InitPNTrianglesiATI (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPNTrianglesiATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPNTrianglesiATI = extproc; - - glPNTrianglesiATI(pname, param); -} - -static void APIENTRY InitPNTrianglesfATI (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPNTrianglesfATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPNTrianglesfATI = extproc; - - glPNTrianglesfATI(pname, param); -} - -static GLuint APIENTRY InitNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNewObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glNewObjectBufferATI = extproc; - - return glNewObjectBufferATI(size, pointer, usage); -} - -static GLboolean APIENTRY InitIsObjectBufferATI (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsObjectBufferATI = extproc; - - return glIsObjectBufferATI(buffer); -} - -static void APIENTRY InitUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUpdateObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUpdateObjectBufferATI = extproc; - - glUpdateObjectBufferATI(buffer, offset, size, pointer, preserve); -} - -static void APIENTRY InitGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetObjectBufferfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetObjectBufferfvATI = extproc; - - glGetObjectBufferfvATI(buffer, pname, params); -} - -static void APIENTRY InitGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetObjectBufferivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetObjectBufferivATI = extproc; - - glGetObjectBufferivATI(buffer, pname, params); -} - -static void APIENTRY InitFreeObjectBufferATI (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFreeObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFreeObjectBufferATI = extproc; - - glFreeObjectBufferATI(buffer); -} - -static void APIENTRY InitArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glArrayObjectATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glArrayObjectATI = extproc; - - glArrayObjectATI(array, size, type, stride, buffer, offset); -} - -static void APIENTRY InitGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetArrayObjectfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetArrayObjectfvATI = extproc; - - glGetArrayObjectfvATI(array, pname, params); -} - -static void APIENTRY InitGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetArrayObjectivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetArrayObjectivATI = extproc; - - glGetArrayObjectivATI(array, pname, params); -} - -static void APIENTRY InitVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantArrayObjectATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantArrayObjectATI = extproc; - - glVariantArrayObjectATI(id, type, stride, buffer, offset); -} - -static void APIENTRY InitGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantArrayObjectfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantArrayObjectfvATI = extproc; - - glGetVariantArrayObjectfvATI(id, pname, params); -} - -static void APIENTRY InitGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantArrayObjectivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantArrayObjectivATI = extproc; - - glGetVariantArrayObjectivATI(id, pname, params); -} - -static void APIENTRY InitBeginVertexShaderEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBeginVertexShaderEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBeginVertexShaderEXT = extproc; - - glBeginVertexShaderEXT(); -} - -static void APIENTRY InitEndVertexShaderEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEndVertexShaderEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEndVertexShaderEXT = extproc; - - glEndVertexShaderEXT(); -} - -static void APIENTRY InitBindVertexShaderEXT (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindVertexShaderEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindVertexShaderEXT = extproc; - - glBindVertexShaderEXT(id); -} - -static GLuint APIENTRY InitGenVertexShadersEXT (GLuint range) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenVertexShadersEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGenVertexShadersEXT = extproc; - - return glGenVertexShadersEXT(range); -} - -static void APIENTRY InitDeleteVertexShaderEXT (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteVertexShaderEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteVertexShaderEXT = extproc; - - glDeleteVertexShaderEXT(id); -} - -static void APIENTRY InitShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glShaderOp1EXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glShaderOp1EXT = extproc; - - glShaderOp1EXT(op, res, arg1); -} - -static void APIENTRY InitShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glShaderOp2EXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glShaderOp2EXT = extproc; - - glShaderOp2EXT(op, res, arg1, arg2); -} - -static void APIENTRY InitShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glShaderOp3EXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glShaderOp3EXT = extproc; - - glShaderOp3EXT(op, res, arg1, arg2, arg3); -} - -static void APIENTRY InitSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSwizzleEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSwizzleEXT = extproc; - - glSwizzleEXT(res, in, outX, outY, outZ, outW); -} - -static void APIENTRY InitWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glWriteMaskEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glWriteMaskEXT = extproc; - - glWriteMaskEXT(res, in, outX, outY, outZ, outW); -} - -static void APIENTRY InitInsertComponentEXT (GLuint res, GLuint src, GLuint num) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glInsertComponentEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glInsertComponentEXT = extproc; - - glInsertComponentEXT(res, src, num); -} - -static void APIENTRY InitExtractComponentEXT (GLuint res, GLuint src, GLuint num) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glExtractComponentEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glExtractComponentEXT = extproc; - - glExtractComponentEXT(res, src, num); -} - -static GLuint APIENTRY InitGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenSymbolsEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glGenSymbolsEXT = extproc; - - return glGenSymbolsEXT(datatype, storagetype, range, components); -} - -static void APIENTRY InitSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSetInvariantEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSetInvariantEXT = extproc; - - glSetInvariantEXT(id, type, addr); -} - -static void APIENTRY InitSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSetLocalConstantEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSetLocalConstantEXT = extproc; - - glSetLocalConstantEXT(id, type, addr); -} - -static void APIENTRY InitVariantbvEXT (GLuint id, const GLbyte *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantbvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantbvEXT = extproc; - - glVariantbvEXT(id, addr); -} - -static void APIENTRY InitVariantsvEXT (GLuint id, const GLshort *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantsvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantsvEXT = extproc; - - glVariantsvEXT(id, addr); -} - -static void APIENTRY InitVariantivEXT (GLuint id, const GLint *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantivEXT = extproc; - - glVariantivEXT(id, addr); -} - -static void APIENTRY InitVariantfvEXT (GLuint id, const GLfloat *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantfvEXT = extproc; - - glVariantfvEXT(id, addr); -} - -static void APIENTRY InitVariantdvEXT (GLuint id, const GLdouble *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantdvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantdvEXT = extproc; - - glVariantdvEXT(id, addr); -} - -static void APIENTRY InitVariantubvEXT (GLuint id, const GLubyte *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantubvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantubvEXT = extproc; - - glVariantubvEXT(id, addr); -} - -static void APIENTRY InitVariantusvEXT (GLuint id, const GLushort *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantusvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantusvEXT = extproc; - - glVariantusvEXT(id, addr); -} - -static void APIENTRY InitVariantuivEXT (GLuint id, const GLuint *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantuivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantuivEXT = extproc; - - glVariantuivEXT(id, addr); -} - -static void APIENTRY InitVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVariantPointerEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVariantPointerEXT = extproc; - - glVariantPointerEXT(id, type, stride, addr); -} - -static void APIENTRY InitEnableVariantClientStateEXT (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEnableVariantClientStateEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEnableVariantClientStateEXT = extproc; - - glEnableVariantClientStateEXT(id); -} - -static void APIENTRY InitDisableVariantClientStateEXT (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDisableVariantClientStateEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDisableVariantClientStateEXT = extproc; - - glDisableVariantClientStateEXT(id); -} - -static GLuint APIENTRY InitBindLightParameterEXT (GLenum light, GLenum value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindLightParameterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glBindLightParameterEXT = extproc; - - return glBindLightParameterEXT(light, value); -} - -static GLuint APIENTRY InitBindMaterialParameterEXT (GLenum face, GLenum value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindMaterialParameterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glBindMaterialParameterEXT = extproc; - - return glBindMaterialParameterEXT(face, value); -} - -static GLuint APIENTRY InitBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindTexGenParameterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glBindTexGenParameterEXT = extproc; - - return glBindTexGenParameterEXT(unit, coord, value); -} - -static GLuint APIENTRY InitBindTextureUnitParameterEXT (GLenum unit, GLenum value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindTextureUnitParameterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glBindTextureUnitParameterEXT = extproc; - - return glBindTextureUnitParameterEXT(unit, value); -} - -static GLuint APIENTRY InitBindParameterEXT (GLenum value) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindParameterEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glBindParameterEXT = extproc; - - return glBindParameterEXT(value); -} - -static GLboolean APIENTRY InitIsVariantEnabledEXT (GLuint id, GLenum cap) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsVariantEnabledEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsVariantEnabledEXT = extproc; - - return glIsVariantEnabledEXT(id, cap); -} - -static void APIENTRY InitGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantBooleanvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantBooleanvEXT = extproc; - - glGetVariantBooleanvEXT(id, value, data); -} - -static void APIENTRY InitGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantIntegervEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantIntegervEXT = extproc; - - glGetVariantIntegervEXT(id, value, data); -} - -static void APIENTRY InitGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantFloatvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantFloatvEXT = extproc; - - glGetVariantFloatvEXT(id, value, data); -} - -static void APIENTRY InitGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVariantPointervEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVariantPointervEXT = extproc; - - glGetVariantPointervEXT(id, value, data); -} - -static void APIENTRY InitGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetInvariantBooleanvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetInvariantBooleanvEXT = extproc; - - glGetInvariantBooleanvEXT(id, value, data); -} - -static void APIENTRY InitGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetInvariantIntegervEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetInvariantIntegervEXT = extproc; - - glGetInvariantIntegervEXT(id, value, data); -} - -static void APIENTRY InitGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetInvariantFloatvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetInvariantFloatvEXT = extproc; - - glGetInvariantFloatvEXT(id, value, data); -} - -static void APIENTRY InitGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetLocalConstantBooleanvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetLocalConstantBooleanvEXT = extproc; - - glGetLocalConstantBooleanvEXT(id, value, data); -} - -static void APIENTRY InitGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetLocalConstantIntegervEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetLocalConstantIntegervEXT = extproc; - - glGetLocalConstantIntegervEXT(id, value, data); -} - -static void APIENTRY InitGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetLocalConstantFloatvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetLocalConstantFloatvEXT = extproc; - - glGetLocalConstantFloatvEXT(id, value, data); -} - -static void APIENTRY InitVertexStream1sATI (GLenum stream, GLshort x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1sATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1sATI = extproc; - - glVertexStream1sATI(stream, x); -} - -static void APIENTRY InitVertexStream1svATI (GLenum stream, const GLshort *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1svATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1svATI = extproc; - - glVertexStream1svATI(stream, coords); -} - -static void APIENTRY InitVertexStream1iATI (GLenum stream, GLint x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1iATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1iATI = extproc; - - glVertexStream1iATI(stream, x); -} - -static void APIENTRY InitVertexStream1ivATI (GLenum stream, const GLint *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1ivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1ivATI = extproc; - - glVertexStream1ivATI(stream, coords); -} - -static void APIENTRY InitVertexStream1fATI (GLenum stream, GLfloat x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1fATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1fATI = extproc; - - glVertexStream1fATI(stream, x); -} - -static void APIENTRY InitVertexStream1fvATI (GLenum stream, const GLfloat *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1fvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1fvATI = extproc; - - glVertexStream1fvATI(stream, coords); -} - -static void APIENTRY InitVertexStream1dATI (GLenum stream, GLdouble x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1dATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1dATI = extproc; - - glVertexStream1dATI(stream, x); -} - -static void APIENTRY InitVertexStream1dvATI (GLenum stream, const GLdouble *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream1dvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream1dvATI = extproc; - - glVertexStream1dvATI(stream, coords); -} - -static void APIENTRY InitVertexStream2sATI (GLenum stream, GLshort x, GLshort y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2sATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2sATI = extproc; - - glVertexStream2sATI(stream, x, y); -} - -static void APIENTRY InitVertexStream2svATI (GLenum stream, const GLshort *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2svATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2svATI = extproc; - - glVertexStream2svATI(stream, coords); -} - -static void APIENTRY InitVertexStream2iATI (GLenum stream, GLint x, GLint y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2iATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2iATI = extproc; - - glVertexStream2iATI(stream, x, y); -} - -static void APIENTRY InitVertexStream2ivATI (GLenum stream, const GLint *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2ivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2ivATI = extproc; - - glVertexStream2ivATI(stream, coords); -} - -static void APIENTRY InitVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2fATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2fATI = extproc; - - glVertexStream2fATI(stream, x, y); -} - -static void APIENTRY InitVertexStream2fvATI (GLenum stream, const GLfloat *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2fvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2fvATI = extproc; - - glVertexStream2fvATI(stream, coords); -} - -static void APIENTRY InitVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2dATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2dATI = extproc; - - glVertexStream2dATI(stream, x, y); -} - -static void APIENTRY InitVertexStream2dvATI (GLenum stream, const GLdouble *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream2dvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream2dvATI = extproc; - - glVertexStream2dvATI(stream, coords); -} - -static void APIENTRY InitVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3sATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3sATI = extproc; - - glVertexStream3sATI(stream, x, y, z); -} - -static void APIENTRY InitVertexStream3svATI (GLenum stream, const GLshort *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3svATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3svATI = extproc; - - glVertexStream3svATI(stream, coords); -} - -static void APIENTRY InitVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3iATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3iATI = extproc; - - glVertexStream3iATI(stream, x, y, z); -} - -static void APIENTRY InitVertexStream3ivATI (GLenum stream, const GLint *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3ivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3ivATI = extproc; - - glVertexStream3ivATI(stream, coords); -} - -static void APIENTRY InitVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3fATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3fATI = extproc; - - glVertexStream3fATI(stream, x, y, z); -} - -static void APIENTRY InitVertexStream3fvATI (GLenum stream, const GLfloat *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3fvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3fvATI = extproc; - - glVertexStream3fvATI(stream, coords); -} - -static void APIENTRY InitVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3dATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3dATI = extproc; - - glVertexStream3dATI(stream, x, y, z); -} - -static void APIENTRY InitVertexStream3dvATI (GLenum stream, const GLdouble *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream3dvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream3dvATI = extproc; - - glVertexStream3dvATI(stream, coords); -} - -static void APIENTRY InitVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4sATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4sATI = extproc; - - glVertexStream4sATI(stream, x, y, z, w); -} - -static void APIENTRY InitVertexStream4svATI (GLenum stream, const GLshort *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4svATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4svATI = extproc; - - glVertexStream4svATI(stream, coords); -} - -static void APIENTRY InitVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4iATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4iATI = extproc; - - glVertexStream4iATI(stream, x, y, z, w); -} - -static void APIENTRY InitVertexStream4ivATI (GLenum stream, const GLint *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4ivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4ivATI = extproc; - - glVertexStream4ivATI(stream, coords); -} - -static void APIENTRY InitVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4fATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4fATI = extproc; - - glVertexStream4fATI(stream, x, y, z, w); -} - -static void APIENTRY InitVertexStream4fvATI (GLenum stream, const GLfloat *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4fvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4fvATI = extproc; - - glVertexStream4fvATI(stream, coords); -} - -static void APIENTRY InitVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4dATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4dATI = extproc; - - glVertexStream4dATI(stream, x, y, z, w); -} - -static void APIENTRY InitVertexStream4dvATI (GLenum stream, const GLdouble *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexStream4dvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexStream4dvATI = extproc; - - glVertexStream4dvATI(stream, coords); -} - -static void APIENTRY InitNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3bATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3bATI = extproc; - - glNormalStream3bATI(stream, nx, ny, nz); -} - -static void APIENTRY InitNormalStream3bvATI (GLenum stream, const GLbyte *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3bvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3bvATI = extproc; - - glNormalStream3bvATI(stream, coords); -} - -static void APIENTRY InitNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3sATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3sATI = extproc; - - glNormalStream3sATI(stream, nx, ny, nz); -} - -static void APIENTRY InitNormalStream3svATI (GLenum stream, const GLshort *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3svATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3svATI = extproc; - - glNormalStream3svATI(stream, coords); -} - -static void APIENTRY InitNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3iATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3iATI = extproc; - - glNormalStream3iATI(stream, nx, ny, nz); -} - -static void APIENTRY InitNormalStream3ivATI (GLenum stream, const GLint *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3ivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3ivATI = extproc; - - glNormalStream3ivATI(stream, coords); -} - -static void APIENTRY InitNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3fATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3fATI = extproc; - - glNormalStream3fATI(stream, nx, ny, nz); -} - -static void APIENTRY InitNormalStream3fvATI (GLenum stream, const GLfloat *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3fvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3fvATI = extproc; - - glNormalStream3fvATI(stream, coords); -} - -static void APIENTRY InitNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3dATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3dATI = extproc; - - glNormalStream3dATI(stream, nx, ny, nz); -} - -static void APIENTRY InitNormalStream3dvATI (GLenum stream, const GLdouble *coords) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormalStream3dvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormalStream3dvATI = extproc; - - glNormalStream3dvATI(stream, coords); -} - -static void APIENTRY InitClientActiveVertexStreamATI (GLenum stream) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glClientActiveVertexStreamATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glClientActiveVertexStreamATI = extproc; - - glClientActiveVertexStreamATI(stream); -} - -static void APIENTRY InitVertexBlendEnviATI (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexBlendEnviATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexBlendEnviATI = extproc; - - glVertexBlendEnviATI(pname, param); -} - -static void APIENTRY InitVertexBlendEnvfATI (GLenum pname, GLfloat param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexBlendEnvfATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexBlendEnvfATI = extproc; - - glVertexBlendEnvfATI(pname, param); -} - -static void APIENTRY InitElementPointerATI (GLenum type, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glElementPointerATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glElementPointerATI = extproc; - - glElementPointerATI(type, pointer); -} - -static void APIENTRY InitDrawElementArrayATI (GLenum mode, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawElementArrayATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawElementArrayATI = extproc; - - glDrawElementArrayATI(mode, count); -} - -static void APIENTRY InitDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawRangeElementArrayATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawRangeElementArrayATI = extproc; - - glDrawRangeElementArrayATI(mode, start, end, count); -} - -static void APIENTRY InitDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawMeshArraysSUN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawMeshArraysSUN = extproc; - - glDrawMeshArraysSUN(mode, first, count, width); -} - -static void APIENTRY InitGenOcclusionQueriesNV (GLsizei n, GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenOcclusionQueriesNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenOcclusionQueriesNV = extproc; - - glGenOcclusionQueriesNV(n, ids); -} - -static void APIENTRY InitDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteOcclusionQueriesNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteOcclusionQueriesNV = extproc; - - glDeleteOcclusionQueriesNV(n, ids); -} - -static GLboolean APIENTRY InitIsOcclusionQueryNV (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsOcclusionQueryNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsOcclusionQueryNV = extproc; - - return glIsOcclusionQueryNV(id); -} - -static void APIENTRY InitBeginOcclusionQueryNV (GLuint id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBeginOcclusionQueryNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBeginOcclusionQueryNV = extproc; - - glBeginOcclusionQueryNV(id); -} - -static void APIENTRY InitEndOcclusionQueryNV (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glEndOcclusionQueryNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glEndOcclusionQueryNV = extproc; - - glEndOcclusionQueryNV(); -} - -static void APIENTRY InitGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetOcclusionQueryivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetOcclusionQueryivNV = extproc; - - glGetOcclusionQueryivNV(id, pname, params); -} - -static void APIENTRY InitGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetOcclusionQueryuivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetOcclusionQueryuivNV = extproc; - - glGetOcclusionQueryuivNV(id, pname, params); -} - -static void APIENTRY InitPointParameteriNV (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameteriNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameteriNV = extproc; - - glPointParameteriNV(pname, param); -} - -static void APIENTRY InitPointParameterivNV (GLenum pname, const GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPointParameterivNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPointParameterivNV = extproc; - - glPointParameterivNV(pname, params); -} - -static void APIENTRY InitActiveStencilFaceEXT (GLenum face) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glActiveStencilFaceEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glActiveStencilFaceEXT = extproc; - - glActiveStencilFaceEXT(face); -} - -static void APIENTRY InitElementPointerAPPLE (GLenum type, const GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glElementPointerAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glElementPointerAPPLE = extproc; - - glElementPointerAPPLE(type, pointer); -} - -static void APIENTRY InitDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawElementArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawElementArrayAPPLE = extproc; - - glDrawElementArrayAPPLE(mode, first, count); -} - -static void APIENTRY InitDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawRangeElementArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawRangeElementArrayAPPLE = extproc; - - glDrawRangeElementArrayAPPLE(mode, start, end, first, count); -} - -static void APIENTRY InitMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawElementArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawElementArrayAPPLE = extproc; - - glMultiDrawElementArrayAPPLE(mode, first, count, primcount); -} - -static void APIENTRY InitMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiDrawRangeElementArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiDrawRangeElementArrayAPPLE = extproc; - - glMultiDrawRangeElementArrayAPPLE(mode, start, end, first, count, primcount); -} - -static void APIENTRY InitGenFencesAPPLE (GLsizei n, GLuint *fences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenFencesAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenFencesAPPLE = extproc; - - glGenFencesAPPLE(n, fences); -} - -static void APIENTRY InitDeleteFencesAPPLE (GLsizei n, const GLuint *fences) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteFencesAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteFencesAPPLE = extproc; - - glDeleteFencesAPPLE(n, fences); -} - -static void APIENTRY InitSetFenceAPPLE (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSetFenceAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSetFenceAPPLE = extproc; - - glSetFenceAPPLE(fence); -} - -static GLboolean APIENTRY InitIsFenceAPPLE (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsFenceAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsFenceAPPLE = extproc; - - return glIsFenceAPPLE(fence); -} - -static GLboolean APIENTRY InitTestFenceAPPLE (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTestFenceAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glTestFenceAPPLE = extproc; - - return glTestFenceAPPLE(fence); -} - -static void APIENTRY InitFinishFenceAPPLE (GLuint fence) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinishFenceAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFinishFenceAPPLE = extproc; - - glFinishFenceAPPLE(fence); -} - -static GLboolean APIENTRY InitTestObjectAPPLE (GLenum object, GLuint name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTestObjectAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glTestObjectAPPLE = extproc; - - return glTestObjectAPPLE(object, name); -} - -static void APIENTRY InitFinishObjectAPPLE (GLenum object, GLint name) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFinishObjectAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFinishObjectAPPLE = extproc; - - glFinishObjectAPPLE(object, name); -} - -static void APIENTRY InitBindVertexArrayAPPLE (GLuint array) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBindVertexArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBindVertexArrayAPPLE = extproc; - - glBindVertexArrayAPPLE(array); -} - -static void APIENTRY InitDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDeleteVertexArraysAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDeleteVertexArraysAPPLE = extproc; - - glDeleteVertexArraysAPPLE(n, arrays); -} - -static void APIENTRY InitGenVertexArraysAPPLE (GLsizei n, const GLuint *arrays) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGenVertexArraysAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGenVertexArraysAPPLE = extproc; - - glGenVertexArraysAPPLE(n, arrays); -} - -static GLboolean APIENTRY InitIsVertexArrayAPPLE (GLuint array) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glIsVertexArrayAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glIsVertexArrayAPPLE = extproc; - - return glIsVertexArrayAPPLE(array); -} - -static void APIENTRY InitVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexArrayRangeAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexArrayRangeAPPLE = extproc; - - glVertexArrayRangeAPPLE(length, pointer); -} - -static void APIENTRY InitFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFlushVertexArrayRangeAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFlushVertexArrayRangeAPPLE = extproc; - - glFlushVertexArrayRangeAPPLE(length, pointer); -} - -static void APIENTRY InitVertexArrayParameteriAPPLE (GLenum pname, GLint param) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexArrayParameteriAPPLE"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexArrayParameteriAPPLE = extproc; - - glVertexArrayParameteriAPPLE(pname, param); -} - -static void APIENTRY InitDrawBuffersATI (GLsizei n, const GLenum *bufs) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDrawBuffersATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDrawBuffersATI = extproc; - - glDrawBuffersATI(n, bufs); -} - -static void APIENTRY InitProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramNamedParameter4fNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramNamedParameter4fNV = extproc; - - glProgramNamedParameter4fNV(id, len, name, x, y, z, w); -} - -static void APIENTRY InitProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramNamedParameter4dNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramNamedParameter4dNV = extproc; - - glProgramNamedParameter4dNV(id, len, name, x, y, z, w); -} - -static void APIENTRY InitProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramNamedParameter4fvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramNamedParameter4fvNV = extproc; - - glProgramNamedParameter4fvNV(id, len, name, v); -} - -static void APIENTRY InitProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glProgramNamedParameter4dvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glProgramNamedParameter4dvNV = extproc; - - glProgramNamedParameter4dvNV(id, len, name, v); -} - -static void APIENTRY InitGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramNamedParameterfvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramNamedParameterfvNV = extproc; - - glGetProgramNamedParameterfvNV(id, len, name, params); -} - -static void APIENTRY InitGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetProgramNamedParameterdvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetProgramNamedParameterdvNV = extproc; - - glGetProgramNamedParameterdvNV(id, len, name, params); -} - -static void APIENTRY InitVertex2hNV (GLhalfNV x, GLhalfNV y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex2hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex2hNV = extproc; - - glVertex2hNV(x, y); -} - -static void APIENTRY InitVertex2hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex2hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex2hvNV = extproc; - - glVertex2hvNV(v); -} - -static void APIENTRY InitVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex3hNV = extproc; - - glVertex3hNV(x, y, z); -} - -static void APIENTRY InitVertex3hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex3hvNV = extproc; - - glVertex3hvNV(v); -} - -static void APIENTRY InitVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex4hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex4hNV = extproc; - - glVertex4hNV(x, y, z, w); -} - -static void APIENTRY InitVertex4hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertex4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertex4hvNV = extproc; - - glVertex4hvNV(v); -} - -static void APIENTRY InitNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormal3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormal3hNV = extproc; - - glNormal3hNV(nx, ny, nz); -} - -static void APIENTRY InitNormal3hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glNormal3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glNormal3hvNV = extproc; - - glNormal3hvNV(v); -} - -static void APIENTRY InitColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor3hNV = extproc; - - glColor3hNV(red, green, blue); -} - -static void APIENTRY InitColor3hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor3hvNV = extproc; - - glColor3hvNV(v); -} - -static void APIENTRY InitColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4hNV = extproc; - - glColor4hNV(red, green, blue, alpha); -} - -static void APIENTRY InitColor4hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glColor4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glColor4hvNV = extproc; - - glColor4hvNV(v); -} - -static void APIENTRY InitTexCoord1hNV (GLhalfNV s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord1hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord1hNV = extproc; - - glTexCoord1hNV(s); -} - -static void APIENTRY InitTexCoord1hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord1hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord1hvNV = extproc; - - glTexCoord1hvNV(v); -} - -static void APIENTRY InitTexCoord2hNV (GLhalfNV s, GLhalfNV t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2hNV = extproc; - - glTexCoord2hNV(s, t); -} - -static void APIENTRY InitTexCoord2hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord2hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord2hvNV = extproc; - - glTexCoord2hvNV(v); -} - -static void APIENTRY InitTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord3hNV = extproc; - - glTexCoord3hNV(s, t, r); -} - -static void APIENTRY InitTexCoord3hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord3hvNV = extproc; - - glTexCoord3hvNV(v); -} - -static void APIENTRY InitTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4hNV = extproc; - - glTexCoord4hNV(s, t, r, q); -} - -static void APIENTRY InitTexCoord4hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glTexCoord4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glTexCoord4hvNV = extproc; - - glTexCoord4hvNV(v); -} - -static void APIENTRY InitMultiTexCoord1hNV (GLenum target, GLhalfNV s) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1hNV = extproc; - - glMultiTexCoord1hNV(target, s); -} - -static void APIENTRY InitMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord1hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord1hvNV = extproc; - - glMultiTexCoord1hvNV(target, v); -} - -static void APIENTRY InitMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2hNV = extproc; - - glMultiTexCoord2hNV(target, s, t); -} - -static void APIENTRY InitMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord2hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord2hvNV = extproc; - - glMultiTexCoord2hvNV(target, v); -} - -static void APIENTRY InitMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3hNV = extproc; - - glMultiTexCoord3hNV(target, s, t, r); -} - -static void APIENTRY InitMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord3hvNV = extproc; - - glMultiTexCoord3hvNV(target, v); -} - -static void APIENTRY InitMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4hNV = extproc; - - glMultiTexCoord4hNV(target, s, t, r, q); -} - -static void APIENTRY InitMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMultiTexCoord4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glMultiTexCoord4hvNV = extproc; - - glMultiTexCoord4hvNV(target, v); -} - -static void APIENTRY InitFogCoordhNV (GLhalfNV fog) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordhNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordhNV = extproc; - - glFogCoordhNV(fog); -} - -static void APIENTRY InitFogCoordhvNV (const GLhalfNV *fog) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFogCoordhvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFogCoordhvNV = extproc; - - glFogCoordhvNV(fog); -} - -static void APIENTRY InitSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3hNV = extproc; - - glSecondaryColor3hNV(red, green, blue); -} - -static void APIENTRY InitSecondaryColor3hvNV (const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glSecondaryColor3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glSecondaryColor3hvNV = extproc; - - glSecondaryColor3hvNV(v); -} - -static void APIENTRY InitVertexWeighthNV (GLhalfNV weight) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexWeighthNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexWeighthNV = extproc; - - glVertexWeighthNV(weight); -} - -static void APIENTRY InitVertexWeighthvNV (const GLhalfNV *weight) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexWeighthvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexWeighthvNV = extproc; - - glVertexWeighthvNV(weight); -} - -static void APIENTRY InitVertexAttrib1hNV (GLuint index, GLhalfNV x) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1hNV = extproc; - - glVertexAttrib1hNV(index, x); -} - -static void APIENTRY InitVertexAttrib1hvNV (GLuint index, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib1hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib1hvNV = extproc; - - glVertexAttrib1hvNV(index, v); -} - -static void APIENTRY InitVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2hNV = extproc; - - glVertexAttrib2hNV(index, x, y); -} - -static void APIENTRY InitVertexAttrib2hvNV (GLuint index, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib2hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib2hvNV = extproc; - - glVertexAttrib2hvNV(index, v); -} - -static void APIENTRY InitVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3hNV = extproc; - - glVertexAttrib3hNV(index, x, y, z); -} - -static void APIENTRY InitVertexAttrib3hvNV (GLuint index, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib3hvNV = extproc; - - glVertexAttrib3hvNV(index, v); -} - -static void APIENTRY InitVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4hNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4hNV = extproc; - - glVertexAttrib4hNV(index, x, y, z, w); -} - -static void APIENTRY InitVertexAttrib4hvNV (GLuint index, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttrib4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttrib4hvNV = extproc; - - glVertexAttrib4hvNV(index, v); -} - -static void APIENTRY InitVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs1hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs1hvNV = extproc; - - glVertexAttribs1hvNV(index, n, v); -} - -static void APIENTRY InitVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs2hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs2hvNV = extproc; - - glVertexAttribs2hvNV(index, n, v); -} - -static void APIENTRY InitVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs3hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs3hvNV = extproc; - - glVertexAttribs3hvNV(index, n, v); -} - -static void APIENTRY InitVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribs4hvNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribs4hvNV = extproc; - - glVertexAttribs4hvNV(index, n, v); -} - -static void APIENTRY InitPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPixelDataRangeNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPixelDataRangeNV = extproc; - - glPixelDataRangeNV(target, length, pointer); -} - -static void APIENTRY InitFlushPixelDataRangeNV (GLenum target) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glFlushPixelDataRangeNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glFlushPixelDataRangeNV = extproc; - - glFlushPixelDataRangeNV(target); -} - -static void APIENTRY InitPrimitiveRestartNV (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPrimitiveRestartNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPrimitiveRestartNV = extproc; - - glPrimitiveRestartNV(); -} - -static void APIENTRY InitPrimitiveRestartIndexNV (GLuint index) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glPrimitiveRestartIndexNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glPrimitiveRestartIndexNV = extproc; - - glPrimitiveRestartIndexNV(index); -} - -static GLvoid* APIENTRY InitMapObjectBufferATI (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glMapObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - glMapObjectBufferATI = extproc; - - return glMapObjectBufferATI(buffer); -} - -static void APIENTRY InitUnmapObjectBufferATI (GLuint buffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glUnmapObjectBufferATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glUnmapObjectBufferATI = extproc; - - glUnmapObjectBufferATI(buffer); -} - -static void APIENTRY InitStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glStencilOpSeparateATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glStencilOpSeparateATI = extproc; - - glStencilOpSeparateATI(face, sfail, dpfail, dppass); -} - -static void APIENTRY InitStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glStencilFuncSeparateATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glStencilFuncSeparateATI = extproc; - - glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask); -} - -static void APIENTRY InitVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glVertexAttribArrayObjectATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glVertexAttribArrayObjectATI = extproc; - - glVertexAttribArrayObjectATI(index, size, type, normalized, stride, buffer, offset); -} - -static void APIENTRY InitGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribArrayObjectfvATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribArrayObjectfvATI = extproc; - - glGetVertexAttribArrayObjectfvATI(index, pname, params); -} - -static void APIENTRY InitGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glGetVertexAttribArrayObjectivATI"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glGetVertexAttribArrayObjectivATI = extproc; - - glGetVertexAttribArrayObjectivATI(index, pname, params); -} - -static void APIENTRY InitDepthBoundsEXT (GLclampd zmin, GLclampd zmax) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glDepthBoundsEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glDepthBoundsEXT = extproc; - - glDepthBoundsEXT(zmin, zmax); -} - -static void APIENTRY InitBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glBlendEquationSeparateEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glBlendEquationSeparateEXT = extproc; - - glBlendEquationSeparateEXT(modeRGB, modeAlpha); -} - -static void APIENTRY InitAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("glAddSwapHintRectWIN"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - glAddSwapHintRectWIN = extproc; - - glAddSwapHintRectWIN(x, y, width, height); -} - -#ifdef _WIN32 - -static HANDLE WINAPI InitCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglCreateBufferRegionARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglCreateBufferRegionARB = extproc; - - return wglCreateBufferRegionARB(hDC, iLayerPlane, uType); -} - -static VOID WINAPI InitDeleteBufferRegionARB (HANDLE hRegion) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDeleteBufferRegionARB"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - wglDeleteBufferRegionARB = extproc; - - wglDeleteBufferRegionARB(hRegion); -} - -static BOOL WINAPI InitSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSaveBufferRegionARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSaveBufferRegionARB = extproc; - - return wglSaveBufferRegionARB(hRegion, x, y, width, height); -} - -static BOOL WINAPI InitRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglRestoreBufferRegionARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglRestoreBufferRegionARB = extproc; - - return wglRestoreBufferRegionARB(hRegion, x, y, width, height, xSrc, ySrc); -} - -static const WINAPI InitGetExtensionsStringARB (HDC hdc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetExtensionsStringARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetExtensionsStringARB = extproc; - - return wglGetExtensionsStringARB(hdc); -} - -static BOOL WINAPI InitGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPixelFormatAttribivARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPixelFormatAttribivARB = extproc; - - return wglGetPixelFormatAttribivARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); -} - -static BOOL WINAPI InitGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPixelFormatAttribfvARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPixelFormatAttribfvARB = extproc; - - return wglGetPixelFormatAttribfvARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); -} - -static BOOL WINAPI InitChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglChoosePixelFormatARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglChoosePixelFormatARB = extproc; - - return wglChoosePixelFormatARB(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); -} - -static BOOL WINAPI InitMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglMakeContextCurrentARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglMakeContextCurrentARB = extproc; - - return wglMakeContextCurrentARB(hDrawDC, hReadDC, hglrc); -} - -static HDC WINAPI InitGetCurrentReadDCARB (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetCurrentReadDCARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetCurrentReadDCARB = extproc; - - return wglGetCurrentReadDCARB(); -} - -static HPBUFFERARB WINAPI InitCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglCreatePbufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglCreatePbufferARB = extproc; - - return wglCreatePbufferARB(hDC, iPixelFormat, iWidth, iHeight, piAttribList); -} - -static HDC WINAPI InitGetPbufferDCARB (HPBUFFERARB hPbuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPbufferDCARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPbufferDCARB = extproc; - - return wglGetPbufferDCARB(hPbuffer); -} - -static int WINAPI InitReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglReleasePbufferDCARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglReleasePbufferDCARB = extproc; - - return wglReleasePbufferDCARB(hPbuffer, hDC); -} - -static BOOL WINAPI InitDestroyPbufferARB (HPBUFFERARB hPbuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDestroyPbufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglDestroyPbufferARB = extproc; - - return wglDestroyPbufferARB(hPbuffer); -} - -static BOOL WINAPI InitQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglQueryPbufferARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglQueryPbufferARB = extproc; - - return wglQueryPbufferARB(hPbuffer, iAttribute, piValue); -} - -static BOOL WINAPI InitBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglBindTexImageARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglBindTexImageARB = extproc; - - return wglBindTexImageARB(hPbuffer, iBuffer); -} - -static BOOL WINAPI InitReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglReleaseTexImageARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglReleaseTexImageARB = extproc; - - return wglReleaseTexImageARB(hPbuffer, iBuffer); -} - -static BOOL WINAPI InitSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSetPbufferAttribARB"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSetPbufferAttribARB = extproc; - - return wglSetPbufferAttribARB(hPbuffer, piAttribList); -} - -static GLboolean WINAPI InitCreateDisplayColorTableEXT (GLushort id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglCreateDisplayColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglCreateDisplayColorTableEXT = extproc; - - return wglCreateDisplayColorTableEXT(id); -} - -static GLboolean WINAPI InitLoadDisplayColorTableEXT (const GLushort *table, GLuint length) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglLoadDisplayColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglLoadDisplayColorTableEXT = extproc; - - return wglLoadDisplayColorTableEXT(table, length); -} - -static GLboolean WINAPI InitBindDisplayColorTableEXT (GLushort id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglBindDisplayColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglBindDisplayColorTableEXT = extproc; - - return wglBindDisplayColorTableEXT(id); -} - -static VOID WINAPI InitDestroyDisplayColorTableEXT (GLushort id) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDestroyDisplayColorTableEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - wglDestroyDisplayColorTableEXT = extproc; - - wglDestroyDisplayColorTableEXT(id); -} - -static const WINAPI InitGetExtensionsStringEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetExtensionsStringEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetExtensionsStringEXT = extproc; - - return wglGetExtensionsStringEXT(); -} - -static BOOL WINAPI InitMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglMakeContextCurrentEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglMakeContextCurrentEXT = extproc; - - return wglMakeContextCurrentEXT(hDrawDC, hReadDC, hglrc); -} - -static HDC WINAPI InitGetCurrentReadDCEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetCurrentReadDCEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetCurrentReadDCEXT = extproc; - - return wglGetCurrentReadDCEXT(); -} - -static HPBUFFEREXT WINAPI InitCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglCreatePbufferEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglCreatePbufferEXT = extproc; - - return wglCreatePbufferEXT(hDC, iPixelFormat, iWidth, iHeight, piAttribList); -} - -static HDC WINAPI InitGetPbufferDCEXT (HPBUFFEREXT hPbuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPbufferDCEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPbufferDCEXT = extproc; - - return wglGetPbufferDCEXT(hPbuffer); -} - -static int WINAPI InitReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglReleasePbufferDCEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglReleasePbufferDCEXT = extproc; - - return wglReleasePbufferDCEXT(hPbuffer, hDC); -} - -static BOOL WINAPI InitDestroyPbufferEXT (HPBUFFEREXT hPbuffer) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDestroyPbufferEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglDestroyPbufferEXT = extproc; - - return wglDestroyPbufferEXT(hPbuffer); -} - -static BOOL WINAPI InitQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglQueryPbufferEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglQueryPbufferEXT = extproc; - - return wglQueryPbufferEXT(hPbuffer, iAttribute, piValue); -} - -static BOOL WINAPI InitGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPixelFormatAttribivEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPixelFormatAttribivEXT = extproc; - - return wglGetPixelFormatAttribivEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); -} - -static BOOL WINAPI InitGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetPixelFormatAttribfvEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetPixelFormatAttribfvEXT = extproc; - - return wglGetPixelFormatAttribfvEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); -} - -static BOOL WINAPI InitChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglChoosePixelFormatEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglChoosePixelFormatEXT = extproc; - - return wglChoosePixelFormatEXT(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); -} - -static BOOL WINAPI InitSwapIntervalEXT (int interval) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSwapIntervalEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSwapIntervalEXT = extproc; - - return wglSwapIntervalEXT(interval); -} - -static int WINAPI InitGetSwapIntervalEXT (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetSwapIntervalEXT"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetSwapIntervalEXT = extproc; - - return wglGetSwapIntervalEXT(); -} - -static void* WINAPI InitAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglAllocateMemoryNV"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglAllocateMemoryNV = extproc; - - return wglAllocateMemoryNV(size, readfreq, writefreq, priority); -} - -static void WINAPI InitFreeMemoryNV (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglFreeMemoryNV"); - - if (extproc == NULL) { - _ASSERT(0); - return; - } - - wglFreeMemoryNV = extproc; - - wglFreeMemoryNV(); -} - -static BOOL WINAPI InitGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetSyncValuesOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetSyncValuesOML = extproc; - - return wglGetSyncValuesOML(hdc, ust, msc, sbc); -} - -static BOOL WINAPI InitGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetMscRateOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetMscRateOML = extproc; - - return wglGetMscRateOML(hdc, numerator, denominator); -} - -static INT64 WINAPI InitSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSwapBuffersMscOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSwapBuffersMscOML = extproc; - - return wglSwapBuffersMscOML(hdc, target_msc, divisor, remainder); -} - -static INT64 WINAPI InitSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSwapLayerBuffersMscOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSwapLayerBuffersMscOML = extproc; - - return wglSwapLayerBuffersMscOML(hdc, fuPlanes, target_msc, divisor, remainder); -} - -static BOOL WINAPI InitWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglWaitForMscOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglWaitForMscOML = extproc; - - return wglWaitForMscOML(hdc, target_msc, divisor, remainder, ust, msc, sbc); -} - -static BOOL WINAPI InitWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglWaitForSbcOML"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglWaitForSbcOML = extproc; - - return wglWaitForSbcOML(hdc, target_sbc, ust, msc, sbc); -} - -static BOOL WINAPI InitGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetDigitalVideoParametersI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetDigitalVideoParametersI3D = extproc; - - return wglGetDigitalVideoParametersI3D(hDC, iAttribute, piValue); -} - -static BOOL WINAPI InitSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSetDigitalVideoParametersI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSetDigitalVideoParametersI3D = extproc; - - return wglSetDigitalVideoParametersI3D(hDC, iAttribute, piValue); -} - -static BOOL WINAPI InitGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGammaTableParametersI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGammaTableParametersI3D = extproc; - - return wglGetGammaTableParametersI3D(hDC, iAttribute, piValue); -} - -static BOOL WINAPI InitSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSetGammaTableParametersI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSetGammaTableParametersI3D = extproc; - - return wglSetGammaTableParametersI3D(hDC, iAttribute, piValue); -} - -static BOOL WINAPI InitGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGammaTableI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGammaTableI3D = extproc; - - return wglGetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); -} - -static BOOL WINAPI InitSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglSetGammaTableI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglSetGammaTableI3D = extproc; - - return wglSetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); -} - -static BOOL WINAPI InitEnableGenlockI3D (HDC hDC) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglEnableGenlockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglEnableGenlockI3D = extproc; - - return wglEnableGenlockI3D(hDC); -} - -static BOOL WINAPI InitDisableGenlockI3D (HDC hDC) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDisableGenlockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglDisableGenlockI3D = extproc; - - return wglDisableGenlockI3D(hDC); -} - -static BOOL WINAPI InitIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglIsEnabledGenlockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglIsEnabledGenlockI3D = extproc; - - return wglIsEnabledGenlockI3D(hDC, pFlag); -} - -static BOOL WINAPI InitGenlockSourceI3D (HDC hDC, UINT uSource) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGenlockSourceI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGenlockSourceI3D = extproc; - - return wglGenlockSourceI3D(hDC, uSource); -} - -static BOOL WINAPI InitGetGenlockSourceI3D (HDC hDC, UINT *uSource) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGenlockSourceI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGenlockSourceI3D = extproc; - - return wglGetGenlockSourceI3D(hDC, uSource); -} - -static BOOL WINAPI InitGenlockSourceEdgeI3D (HDC hDC, UINT uEdge) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGenlockSourceEdgeI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGenlockSourceEdgeI3D = extproc; - - return wglGenlockSourceEdgeI3D(hDC, uEdge); -} - -static BOOL WINAPI InitGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGenlockSourceEdgeI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGenlockSourceEdgeI3D = extproc; - - return wglGetGenlockSourceEdgeI3D(hDC, uEdge); -} - -static BOOL WINAPI InitGenlockSampleRateI3D (HDC hDC, UINT uRate) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGenlockSampleRateI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGenlockSampleRateI3D = extproc; - - return wglGenlockSampleRateI3D(hDC, uRate); -} - -static BOOL WINAPI InitGetGenlockSampleRateI3D (HDC hDC, UINT *uRate) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGenlockSampleRateI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGenlockSampleRateI3D = extproc; - - return wglGetGenlockSampleRateI3D(hDC, uRate); -} - -static BOOL WINAPI InitGenlockSourceDelayI3D (HDC hDC, UINT uDelay) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGenlockSourceDelayI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGenlockSourceDelayI3D = extproc; - - return wglGenlockSourceDelayI3D(hDC, uDelay); -} - -static BOOL WINAPI InitGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetGenlockSourceDelayI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetGenlockSourceDelayI3D = extproc; - - return wglGetGenlockSourceDelayI3D(hDC, uDelay); -} - -static BOOL WINAPI InitQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglQueryGenlockMaxSourceDelayI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglQueryGenlockMaxSourceDelayI3D = extproc; - - return wglQueryGenlockMaxSourceDelayI3D(hDC, uMaxLineDelay, uMaxPixelDelay); -} - -static LPVOID WINAPI InitCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglCreateImageBufferI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglCreateImageBufferI3D = extproc; - - return wglCreateImageBufferI3D(hDC, dwSize, uFlags); -} - -static BOOL WINAPI InitDestroyImageBufferI3D (HDC hDC, LPVOID pAddress) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDestroyImageBufferI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglDestroyImageBufferI3D = extproc; - - return wglDestroyImageBufferI3D(hDC, pAddress); -} - -static BOOL WINAPI InitAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglAssociateImageBufferEventsI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglAssociateImageBufferEventsI3D = extproc; - - return wglAssociateImageBufferEventsI3D(hDC, pEvent, pAddress, pSize, count); -} - -static BOOL WINAPI InitReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglReleaseImageBufferEventsI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglReleaseImageBufferEventsI3D = extproc; - - return wglReleaseImageBufferEventsI3D(hDC, pAddress, count); -} - -static BOOL WINAPI InitEnableFrameLockI3D (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglEnableFrameLockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglEnableFrameLockI3D = extproc; - - return wglEnableFrameLockI3D(); -} - -static BOOL WINAPI InitDisableFrameLockI3D (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglDisableFrameLockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglDisableFrameLockI3D = extproc; - - return wglDisableFrameLockI3D(); -} - -static BOOL WINAPI InitIsEnabledFrameLockI3D (BOOL *pFlag) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglIsEnabledFrameLockI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglIsEnabledFrameLockI3D = extproc; - - return wglIsEnabledFrameLockI3D(pFlag); -} - -static BOOL WINAPI InitQueryFrameLockMasterI3D (BOOL *pFlag) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglQueryFrameLockMasterI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglQueryFrameLockMasterI3D = extproc; - - return wglQueryFrameLockMasterI3D(pFlag); -} - -static BOOL WINAPI InitGetFrameUsageI3D (float *pUsage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglGetFrameUsageI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglGetFrameUsageI3D = extproc; - - return wglGetFrameUsageI3D(pUsage); -} - -static BOOL WINAPI InitBeginFrameTrackingI3D (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglBeginFrameTrackingI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglBeginFrameTrackingI3D = extproc; - - return wglBeginFrameTrackingI3D(); -} - -static BOOL WINAPI InitEndFrameTrackingI3D (void) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglEndFrameTrackingI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglEndFrameTrackingI3D = extproc; - - return wglEndFrameTrackingI3D(); -} - -static BOOL WINAPI InitQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage) -{ - void *extproc; - - extproc = (void *) wglGetProcAddress("wglQueryFrameTrackingI3D"); - - if (extproc == NULL) { - _ASSERT(0); - return 0; - } - - wglQueryFrameTrackingI3D = extproc; - - return wglQueryFrameTrackingI3D(pFrameCount, pMissedFrames, pLastMissedUsage); -} - -#endif /* _WIN32 */ - -_GLextensionProcs _extensionProcs = { - InitBlendColor, - InitBlendEquation, - InitDrawRangeElements, - InitColorTable, - InitColorTableParameterfv, - InitColorTableParameteriv, - InitCopyColorTable, - InitGetColorTable, - InitGetColorTableParameterfv, - InitGetColorTableParameteriv, - InitColorSubTable, - InitCopyColorSubTable, - InitConvolutionFilter1D, - InitConvolutionFilter2D, - InitConvolutionParameterf, - InitConvolutionParameterfv, - InitConvolutionParameteri, - InitConvolutionParameteriv, - InitCopyConvolutionFilter1D, - InitCopyConvolutionFilter2D, - InitGetConvolutionFilter, - InitGetConvolutionParameterfv, - InitGetConvolutionParameteriv, - InitGetSeparableFilter, - InitSeparableFilter2D, - InitGetHistogram, - InitGetHistogramParameterfv, - InitGetHistogramParameteriv, - InitGetMinmax, - InitGetMinmaxParameterfv, - InitGetMinmaxParameteriv, - InitHistogram, - InitMinmax, - InitResetHistogram, - InitResetMinmax, - InitTexImage3D, - InitTexSubImage3D, - InitCopyTexSubImage3D, - InitActiveTexture, - InitClientActiveTexture, - InitMultiTexCoord1d, - InitMultiTexCoord1dv, - InitMultiTexCoord1f, - InitMultiTexCoord1fv, - InitMultiTexCoord1i, - InitMultiTexCoord1iv, - InitMultiTexCoord1s, - InitMultiTexCoord1sv, - InitMultiTexCoord2d, - InitMultiTexCoord2dv, - InitMultiTexCoord2f, - InitMultiTexCoord2fv, - InitMultiTexCoord2i, - InitMultiTexCoord2iv, - InitMultiTexCoord2s, - InitMultiTexCoord2sv, - InitMultiTexCoord3d, - InitMultiTexCoord3dv, - InitMultiTexCoord3f, - InitMultiTexCoord3fv, - InitMultiTexCoord3i, - InitMultiTexCoord3iv, - InitMultiTexCoord3s, - InitMultiTexCoord3sv, - InitMultiTexCoord4d, - InitMultiTexCoord4dv, - InitMultiTexCoord4f, - InitMultiTexCoord4fv, - InitMultiTexCoord4i, - InitMultiTexCoord4iv, - InitMultiTexCoord4s, - InitMultiTexCoord4sv, - InitLoadTransposeMatrixf, - InitLoadTransposeMatrixd, - InitMultTransposeMatrixf, - InitMultTransposeMatrixd, - InitSampleCoverage, - InitCompressedTexImage3D, - InitCompressedTexImage2D, - InitCompressedTexImage1D, - InitCompressedTexSubImage3D, - InitCompressedTexSubImage2D, - InitCompressedTexSubImage1D, - InitGetCompressedTexImage, - InitBlendFuncSeparate, - InitFogCoordf, - InitFogCoordfv, - InitFogCoordd, - InitFogCoorddv, - InitFogCoordPointer, - InitMultiDrawArrays, - InitMultiDrawElements, - InitPointParameterf, - InitPointParameterfv, - InitPointParameteri, - InitPointParameteriv, - InitSecondaryColor3b, - InitSecondaryColor3bv, - InitSecondaryColor3d, - InitSecondaryColor3dv, - InitSecondaryColor3f, - InitSecondaryColor3fv, - InitSecondaryColor3i, - InitSecondaryColor3iv, - InitSecondaryColor3s, - InitSecondaryColor3sv, - InitSecondaryColor3ub, - InitSecondaryColor3ubv, - InitSecondaryColor3ui, - InitSecondaryColor3uiv, - InitSecondaryColor3us, - InitSecondaryColor3usv, - InitSecondaryColorPointer, - InitWindowPos2d, - InitWindowPos2dv, - InitWindowPos2f, - InitWindowPos2fv, - InitWindowPos2i, - InitWindowPos2iv, - InitWindowPos2s, - InitWindowPos2sv, - InitWindowPos3d, - InitWindowPos3dv, - InitWindowPos3f, - InitWindowPos3fv, - InitWindowPos3i, - InitWindowPos3iv, - InitWindowPos3s, - InitWindowPos3sv, - InitGenQueries, - InitDeleteQueries, - InitIsQuery, - InitBeginQuery, - InitEndQuery, - InitGetQueryiv, - InitGetQueryObjectiv, - InitGetQueryObjectuiv, - InitBindBuffer, - InitDeleteBuffers, - InitGenBuffers, - InitIsBuffer, - InitBufferData, - InitBufferSubData, - InitGetBufferSubData, - InitMapBuffer, - InitUnmapBuffer, - InitGetBufferParameteriv, - InitGetBufferPointerv, - InitActiveTextureARB, - InitClientActiveTextureARB, - InitMultiTexCoord1dARB, - InitMultiTexCoord1dvARB, - InitMultiTexCoord1fARB, - InitMultiTexCoord1fvARB, - InitMultiTexCoord1iARB, - InitMultiTexCoord1ivARB, - InitMultiTexCoord1sARB, - InitMultiTexCoord1svARB, - InitMultiTexCoord2dARB, - InitMultiTexCoord2dvARB, - InitMultiTexCoord2fARB, - InitMultiTexCoord2fvARB, - InitMultiTexCoord2iARB, - InitMultiTexCoord2ivARB, - InitMultiTexCoord2sARB, - InitMultiTexCoord2svARB, - InitMultiTexCoord3dARB, - InitMultiTexCoord3dvARB, - InitMultiTexCoord3fARB, - InitMultiTexCoord3fvARB, - InitMultiTexCoord3iARB, - InitMultiTexCoord3ivARB, - InitMultiTexCoord3sARB, - InitMultiTexCoord3svARB, - InitMultiTexCoord4dARB, - InitMultiTexCoord4dvARB, - InitMultiTexCoord4fARB, - InitMultiTexCoord4fvARB, - InitMultiTexCoord4iARB, - InitMultiTexCoord4ivARB, - InitMultiTexCoord4sARB, - InitMultiTexCoord4svARB, - InitLoadTransposeMatrixfARB, - InitLoadTransposeMatrixdARB, - InitMultTransposeMatrixfARB, - InitMultTransposeMatrixdARB, - InitSampleCoverageARB, - InitCompressedTexImage3DARB, - InitCompressedTexImage2DARB, - InitCompressedTexImage1DARB, - InitCompressedTexSubImage3DARB, - InitCompressedTexSubImage2DARB, - InitCompressedTexSubImage1DARB, - InitGetCompressedTexImageARB, - InitPointParameterfARB, - InitPointParameterfvARB, - InitWeightbvARB, - InitWeightsvARB, - InitWeightivARB, - InitWeightfvARB, - InitWeightdvARB, - InitWeightubvARB, - InitWeightusvARB, - InitWeightuivARB, - InitWeightPointerARB, - InitVertexBlendARB, - InitCurrentPaletteMatrixARB, - InitMatrixIndexubvARB, - InitMatrixIndexusvARB, - InitMatrixIndexuivARB, - InitMatrixIndexPointerARB, - InitWindowPos2dARB, - InitWindowPos2dvARB, - InitWindowPos2fARB, - InitWindowPos2fvARB, - InitWindowPos2iARB, - InitWindowPos2ivARB, - InitWindowPos2sARB, - InitWindowPos2svARB, - InitWindowPos3dARB, - InitWindowPos3dvARB, - InitWindowPos3fARB, - InitWindowPos3fvARB, - InitWindowPos3iARB, - InitWindowPos3ivARB, - InitWindowPos3sARB, - InitWindowPos3svARB, - InitVertexAttrib1dARB, - InitVertexAttrib1dvARB, - InitVertexAttrib1fARB, - InitVertexAttrib1fvARB, - InitVertexAttrib1sARB, - InitVertexAttrib1svARB, - InitVertexAttrib2dARB, - InitVertexAttrib2dvARB, - InitVertexAttrib2fARB, - InitVertexAttrib2fvARB, - InitVertexAttrib2sARB, - InitVertexAttrib2svARB, - InitVertexAttrib3dARB, - InitVertexAttrib3dvARB, - InitVertexAttrib3fARB, - InitVertexAttrib3fvARB, - InitVertexAttrib3sARB, - InitVertexAttrib3svARB, - InitVertexAttrib4NbvARB, - InitVertexAttrib4NivARB, - InitVertexAttrib4NsvARB, - InitVertexAttrib4NubARB, - InitVertexAttrib4NubvARB, - InitVertexAttrib4NuivARB, - InitVertexAttrib4NusvARB, - InitVertexAttrib4bvARB, - InitVertexAttrib4dARB, - InitVertexAttrib4dvARB, - InitVertexAttrib4fARB, - InitVertexAttrib4fvARB, - InitVertexAttrib4ivARB, - InitVertexAttrib4sARB, - InitVertexAttrib4svARB, - InitVertexAttrib4ubvARB, - InitVertexAttrib4uivARB, - InitVertexAttrib4usvARB, - InitVertexAttribPointerARB, - InitEnableVertexAttribArrayARB, - InitDisableVertexAttribArrayARB, - InitProgramStringARB, - InitBindProgramARB, - InitDeleteProgramsARB, - InitGenProgramsARB, - InitProgramEnvParameter4dARB, - InitProgramEnvParameter4dvARB, - InitProgramEnvParameter4fARB, - InitProgramEnvParameter4fvARB, - InitProgramLocalParameter4dARB, - InitProgramLocalParameter4dvARB, - InitProgramLocalParameter4fARB, - InitProgramLocalParameter4fvARB, - InitGetProgramEnvParameterdvARB, - InitGetProgramEnvParameterfvARB, - InitGetProgramLocalParameterdvARB, - InitGetProgramLocalParameterfvARB, - InitGetProgramivARB, - InitGetProgramStringARB, - InitGetVertexAttribdvARB, - InitGetVertexAttribfvARB, - InitGetVertexAttribivARB, - InitGetVertexAttribPointervARB, - InitIsProgramARB, - InitBindBufferARB, - InitDeleteBuffersARB, - InitGenBuffersARB, - InitIsBufferARB, - InitBufferDataARB, - InitBufferSubDataARB, - InitGetBufferSubDataARB, - InitMapBufferARB, - InitUnmapBufferARB, - InitGetBufferParameterivARB, - InitGetBufferPointervARB, - InitGenQueriesARB, - InitDeleteQueriesARB, - InitIsQueryARB, - InitBeginQueryARB, - InitEndQueryARB, - InitGetQueryivARB, - InitGetQueryObjectivARB, - InitGetQueryObjectuivARB, - InitDeleteObjectARB, - InitGetHandleARB, - InitDetachObjectARB, - InitCreateShaderObjectARB, - InitShaderSourceARB, - InitCompileShaderARB, - InitCreateProgramObjectARB, - InitAttachObjectARB, - InitLinkProgramARB, - InitUseProgramObjectARB, - InitValidateProgramARB, - InitUniform1fARB, - InitUniform2fARB, - InitUniform3fARB, - InitUniform4fARB, - InitUniform1iARB, - InitUniform2iARB, - InitUniform3iARB, - InitUniform4iARB, - InitUniform1fvARB, - InitUniform2fvARB, - InitUniform3fvARB, - InitUniform4fvARB, - InitUniform1ivARB, - InitUniform2ivARB, - InitUniform3ivARB, - InitUniform4ivARB, - InitUniformMatrix2fvARB, - InitUniformMatrix3fvARB, - InitUniformMatrix4fvARB, - InitGetObjectParameterfvARB, - InitGetObjectParameterivARB, - InitGetInfoLogARB, - InitGetAttachedObjectsARB, - InitGetUniformLocationARB, - InitGetActiveUniformARB, - InitGetUniformfvARB, - InitGetUniformivARB, - InitGetShaderSourceARB, - InitBindAttribLocationARB, - InitGetActiveAttribARB, - InitGetAttribLocationARB, - InitBlendColorEXT, - InitPolygonOffsetEXT, - InitTexImage3DEXT, - InitTexSubImage3DEXT, - InitGetTexFilterFuncSGIS, - InitTexFilterFuncSGIS, - InitTexSubImage1DEXT, - InitTexSubImage2DEXT, - InitCopyTexImage1DEXT, - InitCopyTexImage2DEXT, - InitCopyTexSubImage1DEXT, - InitCopyTexSubImage2DEXT, - InitCopyTexSubImage3DEXT, - InitGetHistogramEXT, - InitGetHistogramParameterfvEXT, - InitGetHistogramParameterivEXT, - InitGetMinmaxEXT, - InitGetMinmaxParameterfvEXT, - InitGetMinmaxParameterivEXT, - InitHistogramEXT, - InitMinmaxEXT, - InitResetHistogramEXT, - InitResetMinmaxEXT, - InitConvolutionFilter1DEXT, - InitConvolutionFilter2DEXT, - InitConvolutionParameterfEXT, - InitConvolutionParameterfvEXT, - InitConvolutionParameteriEXT, - InitConvolutionParameterivEXT, - InitCopyConvolutionFilter1DEXT, - InitCopyConvolutionFilter2DEXT, - InitGetConvolutionFilterEXT, - InitGetConvolutionParameterfvEXT, - InitGetConvolutionParameterivEXT, - InitGetSeparableFilterEXT, - InitSeparableFilter2DEXT, - InitColorTableSGI, - InitColorTableParameterfvSGI, - InitColorTableParameterivSGI, - InitCopyColorTableSGI, - InitGetColorTableSGI, - InitGetColorTableParameterfvSGI, - InitGetColorTableParameterivSGI, - InitPixelTexGenSGIX, - InitPixelTexGenParameteriSGIS, - InitPixelTexGenParameterivSGIS, - InitPixelTexGenParameterfSGIS, - InitPixelTexGenParameterfvSGIS, - InitGetPixelTexGenParameterivSGIS, - InitGetPixelTexGenParameterfvSGIS, - InitTexImage4DSGIS, - InitTexSubImage4DSGIS, - InitAreTexturesResidentEXT, - InitBindTextureEXT, - InitDeleteTexturesEXT, - InitGenTexturesEXT, - InitIsTextureEXT, - InitPrioritizeTexturesEXT, - InitDetailTexFuncSGIS, - InitGetDetailTexFuncSGIS, - InitSharpenTexFuncSGIS, - InitGetSharpenTexFuncSGIS, - InitSampleMaskSGIS, - InitSamplePatternSGIS, - InitArrayElementEXT, - InitColorPointerEXT, - InitDrawArraysEXT, - InitEdgeFlagPointerEXT, - InitGetPointervEXT, - InitIndexPointerEXT, - InitNormalPointerEXT, - InitTexCoordPointerEXT, - InitVertexPointerEXT, - InitBlendEquationEXT, - InitSpriteParameterfSGIX, - InitSpriteParameterfvSGIX, - InitSpriteParameteriSGIX, - InitSpriteParameterivSGIX, - InitPointParameterfEXT, - InitPointParameterfvEXT, - InitPointParameterfSGIS, - InitPointParameterfvSGIS, - InitGetInstrumentsSGIX, - InitInstrumentsBufferSGIX, - InitPollInstrumentsSGIX, - InitReadInstrumentsSGIX, - InitStartInstrumentsSGIX, - InitStopInstrumentsSGIX, - InitFrameZoomSGIX, - InitTagSampleBufferSGIX, - InitDeformationMap3dSGIX, - InitDeformationMap3fSGIX, - InitDeformSGIX, - InitLoadIdentityDeformationMapSGIX, - InitReferencePlaneSGIX, - InitFlushRasterSGIX, - InitFogFuncSGIS, - InitGetFogFuncSGIS, - InitImageTransformParameteriHP, - InitImageTransformParameterfHP, - InitImageTransformParameterivHP, - InitImageTransformParameterfvHP, - InitGetImageTransformParameterivHP, - InitGetImageTransformParameterfvHP, - InitColorSubTableEXT, - InitCopyColorSubTableEXT, - InitHintPGI, - InitColorTableEXT, - InitGetColorTableEXT, - InitGetColorTableParameterivEXT, - InitGetColorTableParameterfvEXT, - InitGetListParameterfvSGIX, - InitGetListParameterivSGIX, - InitListParameterfSGIX, - InitListParameterfvSGIX, - InitListParameteriSGIX, - InitListParameterivSGIX, - InitIndexMaterialEXT, - InitIndexFuncEXT, - InitLockArraysEXT, - InitUnlockArraysEXT, - InitCullParameterdvEXT, - InitCullParameterfvEXT, - InitFragmentColorMaterialSGIX, - InitFragmentLightfSGIX, - InitFragmentLightfvSGIX, - InitFragmentLightiSGIX, - InitFragmentLightivSGIX, - InitFragmentLightModelfSGIX, - InitFragmentLightModelfvSGIX, - InitFragmentLightModeliSGIX, - InitFragmentLightModelivSGIX, - InitFragmentMaterialfSGIX, - InitFragmentMaterialfvSGIX, - InitFragmentMaterialiSGIX, - InitFragmentMaterialivSGIX, - InitGetFragmentLightfvSGIX, - InitGetFragmentLightivSGIX, - InitGetFragmentMaterialfvSGIX, - InitGetFragmentMaterialivSGIX, - InitLightEnviSGIX, - InitDrawRangeElementsEXT, - InitApplyTextureEXT, - InitTextureLightEXT, - InitTextureMaterialEXT, - InitAsyncMarkerSGIX, - InitFinishAsyncSGIX, - InitPollAsyncSGIX, - InitGenAsyncMarkersSGIX, - InitDeleteAsyncMarkersSGIX, - InitIsAsyncMarkerSGIX, - InitVertexPointervINTEL, - InitNormalPointervINTEL, - InitColorPointervINTEL, - InitTexCoordPointervINTEL, - InitPixelTransformParameteriEXT, - InitPixelTransformParameterfEXT, - InitPixelTransformParameterivEXT, - InitPixelTransformParameterfvEXT, - InitSecondaryColor3bEXT, - InitSecondaryColor3bvEXT, - InitSecondaryColor3dEXT, - InitSecondaryColor3dvEXT, - InitSecondaryColor3fEXT, - InitSecondaryColor3fvEXT, - InitSecondaryColor3iEXT, - InitSecondaryColor3ivEXT, - InitSecondaryColor3sEXT, - InitSecondaryColor3svEXT, - InitSecondaryColor3ubEXT, - InitSecondaryColor3ubvEXT, - InitSecondaryColor3uiEXT, - InitSecondaryColor3uivEXT, - InitSecondaryColor3usEXT, - InitSecondaryColor3usvEXT, - InitSecondaryColorPointerEXT, - InitTextureNormalEXT, - InitMultiDrawArraysEXT, - InitMultiDrawElementsEXT, - InitFogCoordfEXT, - InitFogCoordfvEXT, - InitFogCoorddEXT, - InitFogCoorddvEXT, - InitFogCoordPointerEXT, - InitTangent3bEXT, - InitTangent3bvEXT, - InitTangent3dEXT, - InitTangent3dvEXT, - InitTangent3fEXT, - InitTangent3fvEXT, - InitTangent3iEXT, - InitTangent3ivEXT, - InitTangent3sEXT, - InitTangent3svEXT, - InitBinormal3bEXT, - InitBinormal3bvEXT, - InitBinormal3dEXT, - InitBinormal3dvEXT, - InitBinormal3fEXT, - InitBinormal3fvEXT, - InitBinormal3iEXT, - InitBinormal3ivEXT, - InitBinormal3sEXT, - InitBinormal3svEXT, - InitTangentPointerEXT, - InitBinormalPointerEXT, - InitFinishTextureSUNX, - InitGlobalAlphaFactorbSUN, - InitGlobalAlphaFactorsSUN, - InitGlobalAlphaFactoriSUN, - InitGlobalAlphaFactorfSUN, - InitGlobalAlphaFactordSUN, - InitGlobalAlphaFactorubSUN, - InitGlobalAlphaFactorusSUN, - InitGlobalAlphaFactoruiSUN, - InitReplacementCodeuiSUN, - InitReplacementCodeusSUN, - InitReplacementCodeubSUN, - InitReplacementCodeuivSUN, - InitReplacementCodeusvSUN, - InitReplacementCodeubvSUN, - InitReplacementCodePointerSUN, - InitColor4ubVertex2fSUN, - InitColor4ubVertex2fvSUN, - InitColor4ubVertex3fSUN, - InitColor4ubVertex3fvSUN, - InitColor3fVertex3fSUN, - InitColor3fVertex3fvSUN, - InitNormal3fVertex3fSUN, - InitNormal3fVertex3fvSUN, - InitColor4fNormal3fVertex3fSUN, - InitColor4fNormal3fVertex3fvSUN, - InitTexCoord2fVertex3fSUN, - InitTexCoord2fVertex3fvSUN, - InitTexCoord4fVertex4fSUN, - InitTexCoord4fVertex4fvSUN, - InitTexCoord2fColor4ubVertex3fSUN, - InitTexCoord2fColor4ubVertex3fvSUN, - InitTexCoord2fColor3fVertex3fSUN, - InitTexCoord2fColor3fVertex3fvSUN, - InitTexCoord2fNormal3fVertex3fSUN, - InitTexCoord2fNormal3fVertex3fvSUN, - InitTexCoord2fColor4fNormal3fVertex3fSUN, - InitTexCoord2fColor4fNormal3fVertex3fvSUN, - InitTexCoord4fColor4fNormal3fVertex4fSUN, - InitTexCoord4fColor4fNormal3fVertex4fvSUN, - InitReplacementCodeuiVertex3fSUN, - InitReplacementCodeuiVertex3fvSUN, - InitReplacementCodeuiColor4ubVertex3fSUN, - InitReplacementCodeuiColor4ubVertex3fvSUN, - InitReplacementCodeuiColor3fVertex3fSUN, - InitReplacementCodeuiColor3fVertex3fvSUN, - InitReplacementCodeuiNormal3fVertex3fSUN, - InitReplacementCodeuiNormal3fVertex3fvSUN, - InitReplacementCodeuiColor4fNormal3fVertex3fSUN, - InitReplacementCodeuiColor4fNormal3fVertex3fvSUN, - InitReplacementCodeuiTexCoord2fVertex3fSUN, - InitReplacementCodeuiTexCoord2fVertex3fvSUN, - InitReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, - InitReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, - InitReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, - InitReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, - InitBlendFuncSeparateEXT, - InitBlendFuncSeparateINGR, - InitVertexWeightfEXT, - InitVertexWeightfvEXT, - InitVertexWeightPointerEXT, - InitFlushVertexArrayRangeNV, - InitVertexArrayRangeNV, - InitCombinerParameterfvNV, - InitCombinerParameterfNV, - InitCombinerParameterivNV, - InitCombinerParameteriNV, - InitCombinerInputNV, - InitCombinerOutputNV, - InitFinalCombinerInputNV, - InitGetCombinerInputParameterfvNV, - InitGetCombinerInputParameterivNV, - InitGetCombinerOutputParameterfvNV, - InitGetCombinerOutputParameterivNV, - InitGetFinalCombinerInputParameterfvNV, - InitGetFinalCombinerInputParameterivNV, - InitResizeBuffersMESA, - InitWindowPos2dMESA, - InitWindowPos2dvMESA, - InitWindowPos2fMESA, - InitWindowPos2fvMESA, - InitWindowPos2iMESA, - InitWindowPos2ivMESA, - InitWindowPos2sMESA, - InitWindowPos2svMESA, - InitWindowPos3dMESA, - InitWindowPos3dvMESA, - InitWindowPos3fMESA, - InitWindowPos3fvMESA, - InitWindowPos3iMESA, - InitWindowPos3ivMESA, - InitWindowPos3sMESA, - InitWindowPos3svMESA, - InitWindowPos4dMESA, - InitWindowPos4dvMESA, - InitWindowPos4fMESA, - InitWindowPos4fvMESA, - InitWindowPos4iMESA, - InitWindowPos4ivMESA, - InitWindowPos4sMESA, - InitWindowPos4svMESA, - InitMultiModeDrawArraysIBM, - InitMultiModeDrawElementsIBM, - InitColorPointerListIBM, - InitSecondaryColorPointerListIBM, - InitEdgeFlagPointerListIBM, - InitFogCoordPointerListIBM, - InitIndexPointerListIBM, - InitNormalPointerListIBM, - InitTexCoordPointerListIBM, - InitVertexPointerListIBM, - InitTbufferMask3DFX, - InitSampleMaskEXT, - InitSamplePatternEXT, - InitTextureColorMaskSGIS, - InitIglooInterfaceSGIX, - InitDeleteFencesNV, - InitGenFencesNV, - InitIsFenceNV, - InitTestFenceNV, - InitGetFenceivNV, - InitFinishFenceNV, - InitSetFenceNV, - InitMapControlPointsNV, - InitMapParameterivNV, - InitMapParameterfvNV, - InitGetMapControlPointsNV, - InitGetMapParameterivNV, - InitGetMapParameterfvNV, - InitGetMapAttribParameterivNV, - InitGetMapAttribParameterfvNV, - InitEvalMapsNV, - InitCombinerStageParameterfvNV, - InitGetCombinerStageParameterfvNV, - InitAreProgramsResidentNV, - InitBindProgramNV, - InitDeleteProgramsNV, - InitExecuteProgramNV, - InitGenProgramsNV, - InitGetProgramParameterdvNV, - InitGetProgramParameterfvNV, - InitGetProgramivNV, - InitGetProgramStringNV, - InitGetTrackMatrixivNV, - InitGetVertexAttribdvNV, - InitGetVertexAttribfvNV, - InitGetVertexAttribivNV, - InitGetVertexAttribPointervNV, - InitIsProgramNV, - InitLoadProgramNV, - InitProgramParameter4dNV, - InitProgramParameter4dvNV, - InitProgramParameter4fNV, - InitProgramParameter4fvNV, - InitProgramParameters4dvNV, - InitProgramParameters4fvNV, - InitRequestResidentProgramsNV, - InitTrackMatrixNV, - InitVertexAttribPointerNV, - InitVertexAttrib1dNV, - InitVertexAttrib1dvNV, - InitVertexAttrib1fNV, - InitVertexAttrib1fvNV, - InitVertexAttrib1sNV, - InitVertexAttrib1svNV, - InitVertexAttrib2dNV, - InitVertexAttrib2dvNV, - InitVertexAttrib2fNV, - InitVertexAttrib2fvNV, - InitVertexAttrib2sNV, - InitVertexAttrib2svNV, - InitVertexAttrib3dNV, - InitVertexAttrib3dvNV, - InitVertexAttrib3fNV, - InitVertexAttrib3fvNV, - InitVertexAttrib3sNV, - InitVertexAttrib3svNV, - InitVertexAttrib4dNV, - InitVertexAttrib4dvNV, - InitVertexAttrib4fNV, - InitVertexAttrib4fvNV, - InitVertexAttrib4sNV, - InitVertexAttrib4svNV, - InitVertexAttrib4ubNV, - InitVertexAttrib4ubvNV, - InitVertexAttribs1dvNV, - InitVertexAttribs1fvNV, - InitVertexAttribs1svNV, - InitVertexAttribs2dvNV, - InitVertexAttribs2fvNV, - InitVertexAttribs2svNV, - InitVertexAttribs3dvNV, - InitVertexAttribs3fvNV, - InitVertexAttribs3svNV, - InitVertexAttribs4dvNV, - InitVertexAttribs4fvNV, - InitVertexAttribs4svNV, - InitVertexAttribs4ubvNV, - InitTexBumpParameterivATI, - InitTexBumpParameterfvATI, - InitGetTexBumpParameterivATI, - InitGetTexBumpParameterfvATI, - InitGenFragmentShadersATI, - InitBindFragmentShaderATI, - InitDeleteFragmentShaderATI, - InitBeginFragmentShaderATI, - InitEndFragmentShaderATI, - InitPassTexCoordATI, - InitSampleMapATI, - InitColorFragmentOp1ATI, - InitColorFragmentOp2ATI, - InitColorFragmentOp3ATI, - InitAlphaFragmentOp1ATI, - InitAlphaFragmentOp2ATI, - InitAlphaFragmentOp3ATI, - InitSetFragmentShaderConstantATI, - InitPNTrianglesiATI, - InitPNTrianglesfATI, - InitNewObjectBufferATI, - InitIsObjectBufferATI, - InitUpdateObjectBufferATI, - InitGetObjectBufferfvATI, - InitGetObjectBufferivATI, - InitFreeObjectBufferATI, - InitArrayObjectATI, - InitGetArrayObjectfvATI, - InitGetArrayObjectivATI, - InitVariantArrayObjectATI, - InitGetVariantArrayObjectfvATI, - InitGetVariantArrayObjectivATI, - InitBeginVertexShaderEXT, - InitEndVertexShaderEXT, - InitBindVertexShaderEXT, - InitGenVertexShadersEXT, - InitDeleteVertexShaderEXT, - InitShaderOp1EXT, - InitShaderOp2EXT, - InitShaderOp3EXT, - InitSwizzleEXT, - InitWriteMaskEXT, - InitInsertComponentEXT, - InitExtractComponentEXT, - InitGenSymbolsEXT, - InitSetInvariantEXT, - InitSetLocalConstantEXT, - InitVariantbvEXT, - InitVariantsvEXT, - InitVariantivEXT, - InitVariantfvEXT, - InitVariantdvEXT, - InitVariantubvEXT, - InitVariantusvEXT, - InitVariantuivEXT, - InitVariantPointerEXT, - InitEnableVariantClientStateEXT, - InitDisableVariantClientStateEXT, - InitBindLightParameterEXT, - InitBindMaterialParameterEXT, - InitBindTexGenParameterEXT, - InitBindTextureUnitParameterEXT, - InitBindParameterEXT, - InitIsVariantEnabledEXT, - InitGetVariantBooleanvEXT, - InitGetVariantIntegervEXT, - InitGetVariantFloatvEXT, - InitGetVariantPointervEXT, - InitGetInvariantBooleanvEXT, - InitGetInvariantIntegervEXT, - InitGetInvariantFloatvEXT, - InitGetLocalConstantBooleanvEXT, - InitGetLocalConstantIntegervEXT, - InitGetLocalConstantFloatvEXT, - InitVertexStream1sATI, - InitVertexStream1svATI, - InitVertexStream1iATI, - InitVertexStream1ivATI, - InitVertexStream1fATI, - InitVertexStream1fvATI, - InitVertexStream1dATI, - InitVertexStream1dvATI, - InitVertexStream2sATI, - InitVertexStream2svATI, - InitVertexStream2iATI, - InitVertexStream2ivATI, - InitVertexStream2fATI, - InitVertexStream2fvATI, - InitVertexStream2dATI, - InitVertexStream2dvATI, - InitVertexStream3sATI, - InitVertexStream3svATI, - InitVertexStream3iATI, - InitVertexStream3ivATI, - InitVertexStream3fATI, - InitVertexStream3fvATI, - InitVertexStream3dATI, - InitVertexStream3dvATI, - InitVertexStream4sATI, - InitVertexStream4svATI, - InitVertexStream4iATI, - InitVertexStream4ivATI, - InitVertexStream4fATI, - InitVertexStream4fvATI, - InitVertexStream4dATI, - InitVertexStream4dvATI, - InitNormalStream3bATI, - InitNormalStream3bvATI, - InitNormalStream3sATI, - InitNormalStream3svATI, - InitNormalStream3iATI, - InitNormalStream3ivATI, - InitNormalStream3fATI, - InitNormalStream3fvATI, - InitNormalStream3dATI, - InitNormalStream3dvATI, - InitClientActiveVertexStreamATI, - InitVertexBlendEnviATI, - InitVertexBlendEnvfATI, - InitElementPointerATI, - InitDrawElementArrayATI, - InitDrawRangeElementArrayATI, - InitDrawMeshArraysSUN, - InitGenOcclusionQueriesNV, - InitDeleteOcclusionQueriesNV, - InitIsOcclusionQueryNV, - InitBeginOcclusionQueryNV, - InitEndOcclusionQueryNV, - InitGetOcclusionQueryivNV, - InitGetOcclusionQueryuivNV, - InitPointParameteriNV, - InitPointParameterivNV, - InitActiveStencilFaceEXT, - InitElementPointerAPPLE, - InitDrawElementArrayAPPLE, - InitDrawRangeElementArrayAPPLE, - InitMultiDrawElementArrayAPPLE, - InitMultiDrawRangeElementArrayAPPLE, - InitGenFencesAPPLE, - InitDeleteFencesAPPLE, - InitSetFenceAPPLE, - InitIsFenceAPPLE, - InitTestFenceAPPLE, - InitFinishFenceAPPLE, - InitTestObjectAPPLE, - InitFinishObjectAPPLE, - InitBindVertexArrayAPPLE, - InitDeleteVertexArraysAPPLE, - InitGenVertexArraysAPPLE, - InitIsVertexArrayAPPLE, - InitVertexArrayRangeAPPLE, - InitFlushVertexArrayRangeAPPLE, - InitVertexArrayParameteriAPPLE, - InitDrawBuffersATI, - InitProgramNamedParameter4fNV, - InitProgramNamedParameter4dNV, - InitProgramNamedParameter4fvNV, - InitProgramNamedParameter4dvNV, - InitGetProgramNamedParameterfvNV, - InitGetProgramNamedParameterdvNV, - InitVertex2hNV, - InitVertex2hvNV, - InitVertex3hNV, - InitVertex3hvNV, - InitVertex4hNV, - InitVertex4hvNV, - InitNormal3hNV, - InitNormal3hvNV, - InitColor3hNV, - InitColor3hvNV, - InitColor4hNV, - InitColor4hvNV, - InitTexCoord1hNV, - InitTexCoord1hvNV, - InitTexCoord2hNV, - InitTexCoord2hvNV, - InitTexCoord3hNV, - InitTexCoord3hvNV, - InitTexCoord4hNV, - InitTexCoord4hvNV, - InitMultiTexCoord1hNV, - InitMultiTexCoord1hvNV, - InitMultiTexCoord2hNV, - InitMultiTexCoord2hvNV, - InitMultiTexCoord3hNV, - InitMultiTexCoord3hvNV, - InitMultiTexCoord4hNV, - InitMultiTexCoord4hvNV, - InitFogCoordhNV, - InitFogCoordhvNV, - InitSecondaryColor3hNV, - InitSecondaryColor3hvNV, - InitVertexWeighthNV, - InitVertexWeighthvNV, - InitVertexAttrib1hNV, - InitVertexAttrib1hvNV, - InitVertexAttrib2hNV, - InitVertexAttrib2hvNV, - InitVertexAttrib3hNV, - InitVertexAttrib3hvNV, - InitVertexAttrib4hNV, - InitVertexAttrib4hvNV, - InitVertexAttribs1hvNV, - InitVertexAttribs2hvNV, - InitVertexAttribs3hvNV, - InitVertexAttribs4hvNV, - InitPixelDataRangeNV, - InitFlushPixelDataRangeNV, - InitPrimitiveRestartNV, - InitPrimitiveRestartIndexNV, - InitMapObjectBufferATI, - InitUnmapObjectBufferATI, - InitStencilOpSeparateATI, - InitStencilFuncSeparateATI, - InitVertexAttribArrayObjectATI, - InitGetVertexAttribArrayObjectfvATI, - InitGetVertexAttribArrayObjectivATI, - InitDepthBoundsEXT, - InitBlendEquationSeparateEXT, - InitAddSwapHintRectWIN, -#ifdef _WIN32 - InitCreateBufferRegionARB, - InitDeleteBufferRegionARB, - InitSaveBufferRegionARB, - InitRestoreBufferRegionARB, - InitGetExtensionsStringARB, - InitGetPixelFormatAttribivARB, - InitGetPixelFormatAttribfvARB, - InitChoosePixelFormatARB, - InitMakeContextCurrentARB, - InitGetCurrentReadDCARB, - InitCreatePbufferARB, - InitGetPbufferDCARB, - InitReleasePbufferDCARB, - InitDestroyPbufferARB, - InitQueryPbufferARB, - InitBindTexImageARB, - InitReleaseTexImageARB, - InitSetPbufferAttribARB, - InitCreateDisplayColorTableEXT, - InitLoadDisplayColorTableEXT, - InitBindDisplayColorTableEXT, - InitDestroyDisplayColorTableEXT, - InitGetExtensionsStringEXT, - InitMakeContextCurrentEXT, - InitGetCurrentReadDCEXT, - InitCreatePbufferEXT, - InitGetPbufferDCEXT, - InitReleasePbufferDCEXT, - InitDestroyPbufferEXT, - InitQueryPbufferEXT, - InitGetPixelFormatAttribivEXT, - InitGetPixelFormatAttribfvEXT, - InitChoosePixelFormatEXT, - InitSwapIntervalEXT, - InitGetSwapIntervalEXT, - InitAllocateMemoryNV, - InitFreeMemoryNV, - InitGetSyncValuesOML, - InitGetMscRateOML, - InitSwapBuffersMscOML, - InitSwapLayerBuffersMscOML, - InitWaitForMscOML, - InitWaitForSbcOML, - InitGetDigitalVideoParametersI3D, - InitSetDigitalVideoParametersI3D, - InitGetGammaTableParametersI3D, - InitSetGammaTableParametersI3D, - InitGetGammaTableI3D, - InitSetGammaTableI3D, - InitEnableGenlockI3D, - InitDisableGenlockI3D, - InitIsEnabledGenlockI3D, - InitGenlockSourceI3D, - InitGetGenlockSourceI3D, - InitGenlockSourceEdgeI3D, - InitGetGenlockSourceEdgeI3D, - InitGenlockSampleRateI3D, - InitGetGenlockSampleRateI3D, - InitGenlockSourceDelayI3D, - InitGetGenlockSourceDelayI3D, - InitQueryGenlockMaxSourceDelayI3D, - InitCreateImageBufferI3D, - InitDestroyImageBufferI3D, - InitAssociateImageBufferEventsI3D, - InitReleaseImageBufferEventsI3D, - InitEnableFrameLockI3D, - InitDisableFrameLockI3D, - InitIsEnabledFrameLockI3D, - InitQueryFrameLockMasterI3D, - InitGetFrameUsageI3D, - InitBeginFrameTrackingI3D, - InitEndFrameTrackingI3D, - InitQueryFrameTrackingI3D, -#endif /* _WIN32 */ -}; diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/glprocs.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/glprocs.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/glprocs.h 2010-07-08 18:59:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/glprocs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,2217 +0,0 @@ -#ifndef _GLPROCS_H_ -#define _GLPROCS_H_ - -/* -** GLprocs utility for getting function addresses for OpenGL(R) 1.2, -** OpenGL 1.3, OpenGL 1.4, OpenGL 1.5 and OpenGL extension functions. -** -** SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) -** Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and associated documentation files (the "Software"), -** to deal in the Software without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Software, and to permit persons to whom the -** Software is furnished to do so, subject to the following conditions: -** -** The above copyright notice including the dates of first publication and -** either this permission notice or a reference to -** http://oss.sgi.com/projects/FreeB/ -** shall be included in all copies or substantial portions of the Software. -** -** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -** WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -** OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -** SOFTWARE. -** -** Except as contained in this notice, the name of Silicon Graphics, Inc. -** shall not be used in advertising or otherwise to promote the sale, use or -** other dealings in this Software without prior written authorization from -** Silicon Graphics, Inc. -** -** Additional Notice Provisions: This software was created using the -** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has -** not been independently verified as being compliant with the OpenGL(R) -** version 1.2.1 Specification. -** -** Initial version of glprocs.{c,h} contributed by Intel(R) Corporation. -*/ - -#ifdef _WIN32 - #include - #include -#else - #include -#endif - -#ifndef _WIN32 /* non-Windows environment */ - #ifndef APIENTRY - #define APIENTRY - #endif - #ifdef __GNUC__ - #define _inline __inline__ - #else - #define _inline - #endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Structure of all OpenGL {1.2, 1.3, 1.4, 1.5}, GL extension procs.*/ - -typedef struct { - void (APIENTRY *BlendColor) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - void (APIENTRY *BlendEquation) (GLenum mode); - void (APIENTRY *DrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - void (APIENTRY *ColorTable) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); - void (APIENTRY *ColorTableParameterfv) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *ColorTableParameteriv) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *CopyColorTable) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void (APIENTRY *GetColorTable) (GLenum target, GLenum format, GLenum type, GLvoid *table); - void (APIENTRY *GetColorTableParameterfv) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetColorTableParameteriv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *ColorSubTable) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); - void (APIENTRY *CopyColorSubTable) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - void (APIENTRY *ConvolutionFilter1D) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); - void (APIENTRY *ConvolutionFilter2D) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); - void (APIENTRY *ConvolutionParameterf) (GLenum target, GLenum pname, GLfloat params); - void (APIENTRY *ConvolutionParameterfv) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *ConvolutionParameteri) (GLenum target, GLenum pname, GLint params); - void (APIENTRY *ConvolutionParameteriv) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *CopyConvolutionFilter1D) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void (APIENTRY *CopyConvolutionFilter2D) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); - void (APIENTRY *GetConvolutionFilter) (GLenum target, GLenum format, GLenum type, GLvoid *image); - void (APIENTRY *GetConvolutionParameterfv) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetConvolutionParameteriv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetSeparableFilter) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); - void (APIENTRY *SeparableFilter2D) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - void (APIENTRY *GetHistogram) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); - void (APIENTRY *GetHistogramParameterfv) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetHistogramParameteriv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetMinmax) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); - void (APIENTRY *GetMinmaxParameterfv) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetMinmaxParameteriv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *Histogram) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); - void (APIENTRY *Minmax) (GLenum target, GLenum internalformat, GLboolean sink); - void (APIENTRY *ResetHistogram) (GLenum target); - void (APIENTRY *ResetMinmax) (GLenum target); - void (APIENTRY *TexImage3D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *TexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *CopyTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void (APIENTRY *ActiveTexture) (GLenum texture); - void (APIENTRY *ClientActiveTexture) (GLenum texture); - void (APIENTRY *MultiTexCoord1d) (GLenum target, GLdouble s); - void (APIENTRY *MultiTexCoord1dv) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord1f) (GLenum target, GLfloat s); - void (APIENTRY *MultiTexCoord1fv) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord1i) (GLenum target, GLint s); - void (APIENTRY *MultiTexCoord1iv) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord1s) (GLenum target, GLshort s); - void (APIENTRY *MultiTexCoord1sv) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord2d) (GLenum target, GLdouble s, GLdouble t); - void (APIENTRY *MultiTexCoord2dv) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord2f) (GLenum target, GLfloat s, GLfloat t); - void (APIENTRY *MultiTexCoord2fv) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord2i) (GLenum target, GLint s, GLint t); - void (APIENTRY *MultiTexCoord2iv) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord2s) (GLenum target, GLshort s, GLshort t); - void (APIENTRY *MultiTexCoord2sv) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord3d) (GLenum target, GLdouble s, GLdouble t, GLdouble r); - void (APIENTRY *MultiTexCoord3dv) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord3f) (GLenum target, GLfloat s, GLfloat t, GLfloat r); - void (APIENTRY *MultiTexCoord3fv) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord3i) (GLenum target, GLint s, GLint t, GLint r); - void (APIENTRY *MultiTexCoord3iv) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord3s) (GLenum target, GLshort s, GLshort t, GLshort r); - void (APIENTRY *MultiTexCoord3sv) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord4d) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void (APIENTRY *MultiTexCoord4dv) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord4f) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void (APIENTRY *MultiTexCoord4fv) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord4i) (GLenum target, GLint s, GLint t, GLint r, GLint q); - void (APIENTRY *MultiTexCoord4iv) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord4s) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); - void (APIENTRY *MultiTexCoord4sv) (GLenum target, const GLshort *v); - void (APIENTRY *LoadTransposeMatrixf) (const GLfloat *m); - void (APIENTRY *LoadTransposeMatrixd) (const GLdouble *m); - void (APIENTRY *MultTransposeMatrixf) (const GLfloat *m); - void (APIENTRY *MultTransposeMatrixd) (const GLdouble *m); - void (APIENTRY *SampleCoverage) (GLclampf value, GLboolean invert); - void (APIENTRY *CompressedTexImage3D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexImage1D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage1D) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *GetCompressedTexImage) (GLenum target, GLint level, GLvoid *img); - void (APIENTRY *BlendFuncSeparate) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void (APIENTRY *FogCoordf) (GLfloat coord); - void (APIENTRY *FogCoordfv) (const GLfloat *coord); - void (APIENTRY *FogCoordd) (GLdouble coord); - void (APIENTRY *FogCoorddv) (const GLdouble *coord); - void (APIENTRY *FogCoordPointer) (GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *MultiDrawArrays) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); - void (APIENTRY *MultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); - void (APIENTRY *PointParameterf) (GLenum pname, GLfloat param); - void (APIENTRY *PointParameterfv) (GLenum pname, const GLfloat *params); - void (APIENTRY *PointParameteri) (GLenum pname, GLint param); - void (APIENTRY *PointParameteriv) (GLenum pname, const GLint *params); - void (APIENTRY *SecondaryColor3b) (GLbyte red, GLbyte green, GLbyte blue); - void (APIENTRY *SecondaryColor3bv) (const GLbyte *v); - void (APIENTRY *SecondaryColor3d) (GLdouble red, GLdouble green, GLdouble blue); - void (APIENTRY *SecondaryColor3dv) (const GLdouble *v); - void (APIENTRY *SecondaryColor3f) (GLfloat red, GLfloat green, GLfloat blue); - void (APIENTRY *SecondaryColor3fv) (const GLfloat *v); - void (APIENTRY *SecondaryColor3i) (GLint red, GLint green, GLint blue); - void (APIENTRY *SecondaryColor3iv) (const GLint *v); - void (APIENTRY *SecondaryColor3s) (GLshort red, GLshort green, GLshort blue); - void (APIENTRY *SecondaryColor3sv) (const GLshort *v); - void (APIENTRY *SecondaryColor3ub) (GLubyte red, GLubyte green, GLubyte blue); - void (APIENTRY *SecondaryColor3ubv) (const GLubyte *v); - void (APIENTRY *SecondaryColor3ui) (GLuint red, GLuint green, GLuint blue); - void (APIENTRY *SecondaryColor3uiv) (const GLuint *v); - void (APIENTRY *SecondaryColor3us) (GLushort red, GLushort green, GLushort blue); - void (APIENTRY *SecondaryColor3usv) (const GLushort *v); - void (APIENTRY *SecondaryColorPointer) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *WindowPos2d) (GLdouble x, GLdouble y); - void (APIENTRY *WindowPos2dv) (const GLdouble *v); - void (APIENTRY *WindowPos2f) (GLfloat x, GLfloat y); - void (APIENTRY *WindowPos2fv) (const GLfloat *v); - void (APIENTRY *WindowPos2i) (GLint x, GLint y); - void (APIENTRY *WindowPos2iv) (const GLint *v); - void (APIENTRY *WindowPos2s) (GLshort x, GLshort y); - void (APIENTRY *WindowPos2sv) (const GLshort *v); - void (APIENTRY *WindowPos3d) (GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *WindowPos3dv) (const GLdouble *v); - void (APIENTRY *WindowPos3f) (GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *WindowPos3fv) (const GLfloat *v); - void (APIENTRY *WindowPos3i) (GLint x, GLint y, GLint z); - void (APIENTRY *WindowPos3iv) (const GLint *v); - void (APIENTRY *WindowPos3s) (GLshort x, GLshort y, GLshort z); - void (APIENTRY *WindowPos3sv) (const GLshort *v); - void (APIENTRY *GenQueries) (GLsizei n, GLuint *ids); - void (APIENTRY *DeleteQueries) (GLsizei n, const GLuint *ids); - GLboolean (APIENTRY *IsQuery) (GLuint id); - void (APIENTRY *BeginQuery) (GLenum target, GLuint id); - void (APIENTRY *EndQuery) (GLenum target); - void (APIENTRY *GetQueryiv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetQueryObjectiv) (GLuint id, GLenum pname, GLint *params); - void (APIENTRY *GetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params); - void (APIENTRY *BindBuffer) (GLenum target, GLuint buffer); - void (APIENTRY *DeleteBuffers) (GLsizei n, const GLuint *buffers); - void (APIENTRY *GenBuffers) (GLsizei n, GLuint *buffers); - GLboolean (APIENTRY *IsBuffer) (GLuint buffer); - void (APIENTRY *BufferData) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); - void (APIENTRY *BufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); - void (APIENTRY *GetBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); - GLvoid* (APIENTRY *MapBuffer) (GLenum target, GLenum access); - GLboolean (APIENTRY *UnmapBuffer) (GLenum target); - void (APIENTRY *GetBufferParameteriv) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetBufferPointerv) (GLenum target, GLenum pname, GLvoid* *params); - void (APIENTRY *ActiveTextureARB) (GLenum texture); - void (APIENTRY *ClientActiveTextureARB) (GLenum texture); - void (APIENTRY *MultiTexCoord1dARB) (GLenum target, GLdouble s); - void (APIENTRY *MultiTexCoord1dvARB) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord1fARB) (GLenum target, GLfloat s); - void (APIENTRY *MultiTexCoord1fvARB) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord1iARB) (GLenum target, GLint s); - void (APIENTRY *MultiTexCoord1ivARB) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord1sARB) (GLenum target, GLshort s); - void (APIENTRY *MultiTexCoord1svARB) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord2dARB) (GLenum target, GLdouble s, GLdouble t); - void (APIENTRY *MultiTexCoord2dvARB) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord2fARB) (GLenum target, GLfloat s, GLfloat t); - void (APIENTRY *MultiTexCoord2fvARB) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord2iARB) (GLenum target, GLint s, GLint t); - void (APIENTRY *MultiTexCoord2ivARB) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord2sARB) (GLenum target, GLshort s, GLshort t); - void (APIENTRY *MultiTexCoord2svARB) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord3dARB) (GLenum target, GLdouble s, GLdouble t, GLdouble r); - void (APIENTRY *MultiTexCoord3dvARB) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord3fARB) (GLenum target, GLfloat s, GLfloat t, GLfloat r); - void (APIENTRY *MultiTexCoord3fvARB) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord3iARB) (GLenum target, GLint s, GLint t, GLint r); - void (APIENTRY *MultiTexCoord3ivARB) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord3sARB) (GLenum target, GLshort s, GLshort t, GLshort r); - void (APIENTRY *MultiTexCoord3svARB) (GLenum target, const GLshort *v); - void (APIENTRY *MultiTexCoord4dARB) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); - void (APIENTRY *MultiTexCoord4dvARB) (GLenum target, const GLdouble *v); - void (APIENTRY *MultiTexCoord4fARB) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); - void (APIENTRY *MultiTexCoord4fvARB) (GLenum target, const GLfloat *v); - void (APIENTRY *MultiTexCoord4iARB) (GLenum target, GLint s, GLint t, GLint r, GLint q); - void (APIENTRY *MultiTexCoord4ivARB) (GLenum target, const GLint *v); - void (APIENTRY *MultiTexCoord4sARB) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); - void (APIENTRY *MultiTexCoord4svARB) (GLenum target, const GLshort *v); - void (APIENTRY *LoadTransposeMatrixfARB) (const GLfloat *m); - void (APIENTRY *LoadTransposeMatrixdARB) (const GLdouble *m); - void (APIENTRY *MultTransposeMatrixfARB) (const GLfloat *m); - void (APIENTRY *MultTransposeMatrixdARB) (const GLdouble *m); - void (APIENTRY *SampleCoverageARB) (GLclampf value, GLboolean invert); - void (APIENTRY *CompressedTexImage3DARB) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexImage2DARB) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexImage1DARB) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage3DARB) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage2DARB) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *CompressedTexSubImage1DARB) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); - void (APIENTRY *GetCompressedTexImageARB) (GLenum target, GLint level, GLvoid *img); - void (APIENTRY *PointParameterfARB) (GLenum pname, GLfloat param); - void (APIENTRY *PointParameterfvARB) (GLenum pname, const GLfloat *params); - void (APIENTRY *WeightbvARB) (GLint size, const GLbyte *weights); - void (APIENTRY *WeightsvARB) (GLint size, const GLshort *weights); - void (APIENTRY *WeightivARB) (GLint size, const GLint *weights); - void (APIENTRY *WeightfvARB) (GLint size, const GLfloat *weights); - void (APIENTRY *WeightdvARB) (GLint size, const GLdouble *weights); - void (APIENTRY *WeightubvARB) (GLint size, const GLubyte *weights); - void (APIENTRY *WeightusvARB) (GLint size, const GLushort *weights); - void (APIENTRY *WeightuivARB) (GLint size, const GLuint *weights); - void (APIENTRY *WeightPointerARB) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *VertexBlendARB) (GLint count); - void (APIENTRY *CurrentPaletteMatrixARB) (GLint index); - void (APIENTRY *MatrixIndexubvARB) (GLint size, const GLubyte *indices); - void (APIENTRY *MatrixIndexusvARB) (GLint size, const GLushort *indices); - void (APIENTRY *MatrixIndexuivARB) (GLint size, const GLuint *indices); - void (APIENTRY *MatrixIndexPointerARB) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *WindowPos2dARB) (GLdouble x, GLdouble y); - void (APIENTRY *WindowPos2dvARB) (const GLdouble *v); - void (APIENTRY *WindowPos2fARB) (GLfloat x, GLfloat y); - void (APIENTRY *WindowPos2fvARB) (const GLfloat *v); - void (APIENTRY *WindowPos2iARB) (GLint x, GLint y); - void (APIENTRY *WindowPos2ivARB) (const GLint *v); - void (APIENTRY *WindowPos2sARB) (GLshort x, GLshort y); - void (APIENTRY *WindowPos2svARB) (const GLshort *v); - void (APIENTRY *WindowPos3dARB) (GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *WindowPos3dvARB) (const GLdouble *v); - void (APIENTRY *WindowPos3fARB) (GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *WindowPos3fvARB) (const GLfloat *v); - void (APIENTRY *WindowPos3iARB) (GLint x, GLint y, GLint z); - void (APIENTRY *WindowPos3ivARB) (const GLint *v); - void (APIENTRY *WindowPos3sARB) (GLshort x, GLshort y, GLshort z); - void (APIENTRY *WindowPos3svARB) (const GLshort *v); - void (APIENTRY *VertexAttrib1dARB) (GLuint index, GLdouble x); - void (APIENTRY *VertexAttrib1dvARB) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib1fARB) (GLuint index, GLfloat x); - void (APIENTRY *VertexAttrib1fvARB) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib1sARB) (GLuint index, GLshort x); - void (APIENTRY *VertexAttrib1svARB) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib2dARB) (GLuint index, GLdouble x, GLdouble y); - void (APIENTRY *VertexAttrib2dvARB) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib2fARB) (GLuint index, GLfloat x, GLfloat y); - void (APIENTRY *VertexAttrib2fvARB) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib2sARB) (GLuint index, GLshort x, GLshort y); - void (APIENTRY *VertexAttrib2svARB) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib3dARB) (GLuint index, GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *VertexAttrib3dvARB) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib3fARB) (GLuint index, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *VertexAttrib3fvARB) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib3sARB) (GLuint index, GLshort x, GLshort y, GLshort z); - void (APIENTRY *VertexAttrib3svARB) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib4NbvARB) (GLuint index, const GLbyte *v); - void (APIENTRY *VertexAttrib4NivARB) (GLuint index, const GLint *v); - void (APIENTRY *VertexAttrib4NsvARB) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib4NubARB) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); - void (APIENTRY *VertexAttrib4NubvARB) (GLuint index, const GLubyte *v); - void (APIENTRY *VertexAttrib4NuivARB) (GLuint index, const GLuint *v); - void (APIENTRY *VertexAttrib4NusvARB) (GLuint index, const GLushort *v); - void (APIENTRY *VertexAttrib4bvARB) (GLuint index, const GLbyte *v); - void (APIENTRY *VertexAttrib4dARB) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *VertexAttrib4dvARB) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib4fARB) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *VertexAttrib4fvARB) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib4ivARB) (GLuint index, const GLint *v); - void (APIENTRY *VertexAttrib4sARB) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); - void (APIENTRY *VertexAttrib4svARB) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib4ubvARB) (GLuint index, const GLubyte *v); - void (APIENTRY *VertexAttrib4uivARB) (GLuint index, const GLuint *v); - void (APIENTRY *VertexAttrib4usvARB) (GLuint index, const GLushort *v); - void (APIENTRY *VertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *EnableVertexAttribArrayARB) (GLuint index); - void (APIENTRY *DisableVertexAttribArrayARB) (GLuint index); - void (APIENTRY *ProgramStringARB) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); - void (APIENTRY *BindProgramARB) (GLenum target, GLuint program); - void (APIENTRY *DeleteProgramsARB) (GLsizei n, const GLuint *programs); - void (APIENTRY *GenProgramsARB) (GLsizei n, GLuint *programs); - void (APIENTRY *ProgramEnvParameter4dARB) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *ProgramEnvParameter4dvARB) (GLenum target, GLuint index, const GLdouble *params); - void (APIENTRY *ProgramEnvParameter4fARB) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *ProgramEnvParameter4fvARB) (GLenum target, GLuint index, const GLfloat *params); - void (APIENTRY *ProgramLocalParameter4dARB) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *ProgramLocalParameter4dvARB) (GLenum target, GLuint index, const GLdouble *params); - void (APIENTRY *ProgramLocalParameter4fARB) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *ProgramLocalParameter4fvARB) (GLenum target, GLuint index, const GLfloat *params); - void (APIENTRY *GetProgramEnvParameterdvARB) (GLenum target, GLuint index, GLdouble *params); - void (APIENTRY *GetProgramEnvParameterfvARB) (GLenum target, GLuint index, GLfloat *params); - void (APIENTRY *GetProgramLocalParameterdvARB) (GLenum target, GLuint index, GLdouble *params); - void (APIENTRY *GetProgramLocalParameterfvARB) (GLenum target, GLuint index, GLfloat *params); - void (APIENTRY *GetProgramivARB) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetProgramStringARB) (GLenum target, GLenum pname, GLvoid *string); - void (APIENTRY *GetVertexAttribdvARB) (GLuint index, GLenum pname, GLdouble *params); - void (APIENTRY *GetVertexAttribfvARB) (GLuint index, GLenum pname, GLfloat *params); - void (APIENTRY *GetVertexAttribivARB) (GLuint index, GLenum pname, GLint *params); - void (APIENTRY *GetVertexAttribPointervARB) (GLuint index, GLenum pname, GLvoid* *pointer); - GLboolean (APIENTRY *IsProgramARB) (GLuint program); - void (APIENTRY *BindBufferARB) (GLenum target, GLuint buffer); - void (APIENTRY *DeleteBuffersARB) (GLsizei n, const GLuint *buffers); - void (APIENTRY *GenBuffersARB) (GLsizei n, GLuint *buffers); - GLboolean (APIENTRY *IsBufferARB) (GLuint buffer); - void (APIENTRY *BufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); - void (APIENTRY *BufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); - void (APIENTRY *GetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); - GLvoid* (APIENTRY *MapBufferARB) (GLenum target, GLenum access); - GLboolean (APIENTRY *UnmapBufferARB) (GLenum target); - void (APIENTRY *GetBufferParameterivARB) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetBufferPointervARB) (GLenum target, GLenum pname, GLvoid* *params); - void (APIENTRY *GenQueriesARB) (GLsizei n, GLuint *ids); - void (APIENTRY *DeleteQueriesARB) (GLsizei n, const GLuint *ids); - GLboolean (APIENTRY *IsQueryARB) (GLuint id); - void (APIENTRY *BeginQueryARB) (GLenum target, GLuint id); - void (APIENTRY *EndQueryARB) (GLenum target); - void (APIENTRY *GetQueryivARB) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetQueryObjectivARB) (GLuint id, GLenum pname, GLint *params); - void (APIENTRY *GetQueryObjectuivARB) (GLuint id, GLenum pname, GLuint *params); - void (APIENTRY *DeleteObjectARB) (GLhandleARB obj); - GLhandleARB (APIENTRY *GetHandleARB) (GLenum pname); - void (APIENTRY *DetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj); - GLhandleARB (APIENTRY *CreateShaderObjectARB) (GLenum shaderType); - void (APIENTRY *ShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); - void (APIENTRY *CompileShaderARB) (GLhandleARB shaderObj); - GLhandleARB (APIENTRY *CreateProgramObjectARB) (void); - void (APIENTRY *AttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj); - void (APIENTRY *LinkProgramARB) (GLhandleARB programObj); - void (APIENTRY *UseProgramObjectARB) (GLhandleARB programObj); - void (APIENTRY *ValidateProgramARB) (GLhandleARB programObj); - void (APIENTRY *Uniform1fARB) (GLint location, GLfloat v0); - void (APIENTRY *Uniform2fARB) (GLint location, GLfloat v0, GLfloat v1); - void (APIENTRY *Uniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); - void (APIENTRY *Uniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); - void (APIENTRY *Uniform1iARB) (GLint location, GLint v0); - void (APIENTRY *Uniform2iARB) (GLint location, GLint v0, GLint v1); - void (APIENTRY *Uniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2); - void (APIENTRY *Uniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); - void (APIENTRY *Uniform1fvARB) (GLint location, GLsizei count, const GLfloat *value); - void (APIENTRY *Uniform2fvARB) (GLint location, GLsizei count, const GLfloat *value); - void (APIENTRY *Uniform3fvARB) (GLint location, GLsizei count, const GLfloat *value); - void (APIENTRY *Uniform4fvARB) (GLint location, GLsizei count, const GLfloat *value); - void (APIENTRY *Uniform1ivARB) (GLint location, GLsizei count, const GLint *value); - void (APIENTRY *Uniform2ivARB) (GLint location, GLsizei count, const GLint *value); - void (APIENTRY *Uniform3ivARB) (GLint location, GLsizei count, const GLint *value); - void (APIENTRY *Uniform4ivARB) (GLint location, GLsizei count, const GLint *value); - void (APIENTRY *UniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - void (APIENTRY *UniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - void (APIENTRY *UniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - void (APIENTRY *GetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat *params); - void (APIENTRY *GetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint *params); - void (APIENTRY *GetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); - void (APIENTRY *GetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); - GLint (APIENTRY *GetUniformLocationARB) (GLhandleARB programObj, const GLcharARB *name); - void (APIENTRY *GetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); - void (APIENTRY *GetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat *params); - void (APIENTRY *GetUniformivARB) (GLhandleARB programObj, GLint location, GLint *params); - void (APIENTRY *GetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); - void (APIENTRY *BindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB *name); - void (APIENTRY *GetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); - GLint (APIENTRY *GetAttribLocationARB) (GLhandleARB programObj, const GLcharARB *name); - void (APIENTRY *BlendColorEXT) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - void (APIENTRY *PolygonOffsetEXT) (GLfloat factor, GLfloat bias); - void (APIENTRY *TexImage3DEXT) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *TexSubImage3DEXT) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *GetTexFilterFuncSGIS) (GLenum target, GLenum filter, GLfloat *weights); - void (APIENTRY *TexFilterFuncSGIS) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); - void (APIENTRY *TexSubImage1DEXT) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *TexSubImage2DEXT) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *CopyTexImage1DEXT) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); - void (APIENTRY *CopyTexImage2DEXT) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); - void (APIENTRY *CopyTexSubImage1DEXT) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); - void (APIENTRY *CopyTexSubImage2DEXT) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void (APIENTRY *CopyTexSubImage3DEXT) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - void (APIENTRY *GetHistogramEXT) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); - void (APIENTRY *GetHistogramParameterfvEXT) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetHistogramParameterivEXT) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetMinmaxEXT) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); - void (APIENTRY *GetMinmaxParameterfvEXT) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetMinmaxParameterivEXT) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *HistogramEXT) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); - void (APIENTRY *MinmaxEXT) (GLenum target, GLenum internalformat, GLboolean sink); - void (APIENTRY *ResetHistogramEXT) (GLenum target); - void (APIENTRY *ResetMinmaxEXT) (GLenum target); - void (APIENTRY *ConvolutionFilter1DEXT) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); - void (APIENTRY *ConvolutionFilter2DEXT) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); - void (APIENTRY *ConvolutionParameterfEXT) (GLenum target, GLenum pname, GLfloat params); - void (APIENTRY *ConvolutionParameterfvEXT) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *ConvolutionParameteriEXT) (GLenum target, GLenum pname, GLint params); - void (APIENTRY *ConvolutionParameterivEXT) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *CopyConvolutionFilter1DEXT) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void (APIENTRY *CopyConvolutionFilter2DEXT) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); - void (APIENTRY *GetConvolutionFilterEXT) (GLenum target, GLenum format, GLenum type, GLvoid *image); - void (APIENTRY *GetConvolutionParameterfvEXT) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetConvolutionParameterivEXT) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetSeparableFilterEXT) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); - void (APIENTRY *SeparableFilter2DEXT) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - void (APIENTRY *ColorTableSGI) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); - void (APIENTRY *ColorTableParameterfvSGI) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *ColorTableParameterivSGI) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *CopyColorTableSGI) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); - void (APIENTRY *GetColorTableSGI) (GLenum target, GLenum format, GLenum type, GLvoid *table); - void (APIENTRY *GetColorTableParameterfvSGI) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetColorTableParameterivSGI) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *PixelTexGenSGIX) (GLenum mode); - void (APIENTRY *PixelTexGenParameteriSGIS) (GLenum pname, GLint param); - void (APIENTRY *PixelTexGenParameterivSGIS) (GLenum pname, const GLint *params); - void (APIENTRY *PixelTexGenParameterfSGIS) (GLenum pname, GLfloat param); - void (APIENTRY *PixelTexGenParameterfvSGIS) (GLenum pname, const GLfloat *params); - void (APIENTRY *GetPixelTexGenParameterivSGIS) (GLenum pname, GLint *params); - void (APIENTRY *GetPixelTexGenParameterfvSGIS) (GLenum pname, GLfloat *params); - void (APIENTRY *TexImage4DSGIS) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - void (APIENTRY *TexSubImage4DSGIS) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); - GLboolean (APIENTRY *AreTexturesResidentEXT) (GLsizei n, const GLuint *textures, GLboolean *residences); - void (APIENTRY *BindTextureEXT) (GLenum target, GLuint texture); - void (APIENTRY *DeleteTexturesEXT) (GLsizei n, const GLuint *textures); - void (APIENTRY *GenTexturesEXT) (GLsizei n, GLuint *textures); - GLboolean (APIENTRY *IsTextureEXT) (GLuint texture); - void (APIENTRY *PrioritizeTexturesEXT) (GLsizei n, const GLuint *textures, const GLclampf *priorities); - void (APIENTRY *DetailTexFuncSGIS) (GLenum target, GLsizei n, const GLfloat *points); - void (APIENTRY *GetDetailTexFuncSGIS) (GLenum target, GLfloat *points); - void (APIENTRY *SharpenTexFuncSGIS) (GLenum target, GLsizei n, const GLfloat *points); - void (APIENTRY *GetSharpenTexFuncSGIS) (GLenum target, GLfloat *points); - void (APIENTRY *SampleMaskSGIS) (GLclampf value, GLboolean invert); - void (APIENTRY *SamplePatternSGIS) (GLenum pattern); - void (APIENTRY *ArrayElementEXT) (GLint i); - void (APIENTRY *ColorPointerEXT) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - void (APIENTRY *DrawArraysEXT) (GLenum mode, GLint first, GLsizei count); - void (APIENTRY *EdgeFlagPointerEXT) (GLsizei stride, GLsizei count, const GLboolean *pointer); - void (APIENTRY *GetPointervEXT) (GLenum pname, GLvoid* *params); - void (APIENTRY *IndexPointerEXT) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - void (APIENTRY *NormalPointerEXT) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - void (APIENTRY *TexCoordPointerEXT) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - void (APIENTRY *VertexPointerEXT) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - void (APIENTRY *BlendEquationEXT) (GLenum mode); - void (APIENTRY *SpriteParameterfSGIX) (GLenum pname, GLfloat param); - void (APIENTRY *SpriteParameterfvSGIX) (GLenum pname, const GLfloat *params); - void (APIENTRY *SpriteParameteriSGIX) (GLenum pname, GLint param); - void (APIENTRY *SpriteParameterivSGIX) (GLenum pname, const GLint *params); - void (APIENTRY *PointParameterfEXT) (GLenum pname, GLfloat param); - void (APIENTRY *PointParameterfvEXT) (GLenum pname, const GLfloat *params); - void (APIENTRY *PointParameterfSGIS) (GLenum pname, GLfloat param); - void (APIENTRY *PointParameterfvSGIS) (GLenum pname, const GLfloat *params); - GLint (APIENTRY *GetInstrumentsSGIX) (void); - void (APIENTRY *InstrumentsBufferSGIX) (GLsizei size, GLint *buffer); - GLint (APIENTRY *PollInstrumentsSGIX) (GLint *marker_p); - void (APIENTRY *ReadInstrumentsSGIX) (GLint marker); - void (APIENTRY *StartInstrumentsSGIX) (void); - void (APIENTRY *StopInstrumentsSGIX) (GLint marker); - void (APIENTRY *FrameZoomSGIX) (GLint factor); - void (APIENTRY *TagSampleBufferSGIX) (void); - void (APIENTRY *DeformationMap3dSGIX) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); - void (APIENTRY *DeformationMap3fSGIX) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); - void (APIENTRY *DeformSGIX) (GLbitfield mask); - void (APIENTRY *LoadIdentityDeformationMapSGIX) (GLbitfield mask); - void (APIENTRY *ReferencePlaneSGIX) (const GLdouble *equation); - void (APIENTRY *FlushRasterSGIX) (void); - void (APIENTRY *FogFuncSGIS) (GLsizei n, const GLfloat *points); - void (APIENTRY *GetFogFuncSGIS) (GLfloat *points); - void (APIENTRY *ImageTransformParameteriHP) (GLenum target, GLenum pname, GLint param); - void (APIENTRY *ImageTransformParameterfHP) (GLenum target, GLenum pname, GLfloat param); - void (APIENTRY *ImageTransformParameterivHP) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *ImageTransformParameterfvHP) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *GetImageTransformParameterivHP) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetImageTransformParameterfvHP) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *ColorSubTableEXT) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); - void (APIENTRY *CopyColorSubTableEXT) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - void (APIENTRY *HintPGI) (GLenum target, GLint mode); - void (APIENTRY *ColorTableEXT) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); - void (APIENTRY *GetColorTableEXT) (GLenum target, GLenum format, GLenum type, GLvoid *data); - void (APIENTRY *GetColorTableParameterivEXT) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetColorTableParameterfvEXT) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetListParameterfvSGIX) (GLuint list, GLenum pname, GLfloat *params); - void (APIENTRY *GetListParameterivSGIX) (GLuint list, GLenum pname, GLint *params); - void (APIENTRY *ListParameterfSGIX) (GLuint list, GLenum pname, GLfloat param); - void (APIENTRY *ListParameterfvSGIX) (GLuint list, GLenum pname, const GLfloat *params); - void (APIENTRY *ListParameteriSGIX) (GLuint list, GLenum pname, GLint param); - void (APIENTRY *ListParameterivSGIX) (GLuint list, GLenum pname, const GLint *params); - void (APIENTRY *IndexMaterialEXT) (GLenum face, GLenum mode); - void (APIENTRY *IndexFuncEXT) (GLenum func, GLclampf ref); - void (APIENTRY *LockArraysEXT) (GLint first, GLsizei count); - void (APIENTRY *UnlockArraysEXT) (void); - void (APIENTRY *CullParameterdvEXT) (GLenum pname, GLdouble *params); - void (APIENTRY *CullParameterfvEXT) (GLenum pname, GLfloat *params); - void (APIENTRY *FragmentColorMaterialSGIX) (GLenum face, GLenum mode); - void (APIENTRY *FragmentLightfSGIX) (GLenum light, GLenum pname, GLfloat param); - void (APIENTRY *FragmentLightfvSGIX) (GLenum light, GLenum pname, const GLfloat *params); - void (APIENTRY *FragmentLightiSGIX) (GLenum light, GLenum pname, GLint param); - void (APIENTRY *FragmentLightivSGIX) (GLenum light, GLenum pname, const GLint *params); - void (APIENTRY *FragmentLightModelfSGIX) (GLenum pname, GLfloat param); - void (APIENTRY *FragmentLightModelfvSGIX) (GLenum pname, const GLfloat *params); - void (APIENTRY *FragmentLightModeliSGIX) (GLenum pname, GLint param); - void (APIENTRY *FragmentLightModelivSGIX) (GLenum pname, const GLint *params); - void (APIENTRY *FragmentMaterialfSGIX) (GLenum face, GLenum pname, GLfloat param); - void (APIENTRY *FragmentMaterialfvSGIX) (GLenum face, GLenum pname, const GLfloat *params); - void (APIENTRY *FragmentMaterialiSGIX) (GLenum face, GLenum pname, GLint param); - void (APIENTRY *FragmentMaterialivSGIX) (GLenum face, GLenum pname, const GLint *params); - void (APIENTRY *GetFragmentLightfvSGIX) (GLenum light, GLenum pname, GLfloat *params); - void (APIENTRY *GetFragmentLightivSGIX) (GLenum light, GLenum pname, GLint *params); - void (APIENTRY *GetFragmentMaterialfvSGIX) (GLenum face, GLenum pname, GLfloat *params); - void (APIENTRY *GetFragmentMaterialivSGIX) (GLenum face, GLenum pname, GLint *params); - void (APIENTRY *LightEnviSGIX) (GLenum pname, GLint param); - void (APIENTRY *DrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - void (APIENTRY *ApplyTextureEXT) (GLenum mode); - void (APIENTRY *TextureLightEXT) (GLenum pname); - void (APIENTRY *TextureMaterialEXT) (GLenum face, GLenum mode); - void (APIENTRY *AsyncMarkerSGIX) (GLuint marker); - GLint (APIENTRY *FinishAsyncSGIX) (GLuint *markerp); - GLint (APIENTRY *PollAsyncSGIX) (GLuint *markerp); - GLuint (APIENTRY *GenAsyncMarkersSGIX) (GLsizei range); - void (APIENTRY *DeleteAsyncMarkersSGIX) (GLuint marker, GLsizei range); - GLboolean (APIENTRY *IsAsyncMarkerSGIX) (GLuint marker); - void (APIENTRY *VertexPointervINTEL) (GLint size, GLenum type, const GLvoid* *pointer); - void (APIENTRY *NormalPointervINTEL) (GLenum type, const GLvoid* *pointer); - void (APIENTRY *ColorPointervINTEL) (GLint size, GLenum type, const GLvoid* *pointer); - void (APIENTRY *TexCoordPointervINTEL) (GLint size, GLenum type, const GLvoid* *pointer); - void (APIENTRY *PixelTransformParameteriEXT) (GLenum target, GLenum pname, GLint param); - void (APIENTRY *PixelTransformParameterfEXT) (GLenum target, GLenum pname, GLfloat param); - void (APIENTRY *PixelTransformParameterivEXT) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *PixelTransformParameterfvEXT) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *SecondaryColor3bEXT) (GLbyte red, GLbyte green, GLbyte blue); - void (APIENTRY *SecondaryColor3bvEXT) (const GLbyte *v); - void (APIENTRY *SecondaryColor3dEXT) (GLdouble red, GLdouble green, GLdouble blue); - void (APIENTRY *SecondaryColor3dvEXT) (const GLdouble *v); - void (APIENTRY *SecondaryColor3fEXT) (GLfloat red, GLfloat green, GLfloat blue); - void (APIENTRY *SecondaryColor3fvEXT) (const GLfloat *v); - void (APIENTRY *SecondaryColor3iEXT) (GLint red, GLint green, GLint blue); - void (APIENTRY *SecondaryColor3ivEXT) (const GLint *v); - void (APIENTRY *SecondaryColor3sEXT) (GLshort red, GLshort green, GLshort blue); - void (APIENTRY *SecondaryColor3svEXT) (const GLshort *v); - void (APIENTRY *SecondaryColor3ubEXT) (GLubyte red, GLubyte green, GLubyte blue); - void (APIENTRY *SecondaryColor3ubvEXT) (const GLubyte *v); - void (APIENTRY *SecondaryColor3uiEXT) (GLuint red, GLuint green, GLuint blue); - void (APIENTRY *SecondaryColor3uivEXT) (const GLuint *v); - void (APIENTRY *SecondaryColor3usEXT) (GLushort red, GLushort green, GLushort blue); - void (APIENTRY *SecondaryColor3usvEXT) (const GLushort *v); - void (APIENTRY *SecondaryColorPointerEXT) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *TextureNormalEXT) (GLenum mode); - void (APIENTRY *MultiDrawArraysEXT) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); - void (APIENTRY *MultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); - void (APIENTRY *FogCoordfEXT) (GLfloat coord); - void (APIENTRY *FogCoordfvEXT) (const GLfloat *coord); - void (APIENTRY *FogCoorddEXT) (GLdouble coord); - void (APIENTRY *FogCoorddvEXT) (const GLdouble *coord); - void (APIENTRY *FogCoordPointerEXT) (GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *Tangent3bEXT) (GLbyte tx, GLbyte ty, GLbyte tz); - void (APIENTRY *Tangent3bvEXT) (const GLbyte *v); - void (APIENTRY *Tangent3dEXT) (GLdouble tx, GLdouble ty, GLdouble tz); - void (APIENTRY *Tangent3dvEXT) (const GLdouble *v); - void (APIENTRY *Tangent3fEXT) (GLfloat tx, GLfloat ty, GLfloat tz); - void (APIENTRY *Tangent3fvEXT) (const GLfloat *v); - void (APIENTRY *Tangent3iEXT) (GLint tx, GLint ty, GLint tz); - void (APIENTRY *Tangent3ivEXT) (const GLint *v); - void (APIENTRY *Tangent3sEXT) (GLshort tx, GLshort ty, GLshort tz); - void (APIENTRY *Tangent3svEXT) (const GLshort *v); - void (APIENTRY *Binormal3bEXT) (GLbyte bx, GLbyte by, GLbyte bz); - void (APIENTRY *Binormal3bvEXT) (const GLbyte *v); - void (APIENTRY *Binormal3dEXT) (GLdouble bx, GLdouble by, GLdouble bz); - void (APIENTRY *Binormal3dvEXT) (const GLdouble *v); - void (APIENTRY *Binormal3fEXT) (GLfloat bx, GLfloat by, GLfloat bz); - void (APIENTRY *Binormal3fvEXT) (const GLfloat *v); - void (APIENTRY *Binormal3iEXT) (GLint bx, GLint by, GLint bz); - void (APIENTRY *Binormal3ivEXT) (const GLint *v); - void (APIENTRY *Binormal3sEXT) (GLshort bx, GLshort by, GLshort bz); - void (APIENTRY *Binormal3svEXT) (const GLshort *v); - void (APIENTRY *TangentPointerEXT) (GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *BinormalPointerEXT) (GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *FinishTextureSUNX) (void); - void (APIENTRY *GlobalAlphaFactorbSUN) (GLbyte factor); - void (APIENTRY *GlobalAlphaFactorsSUN) (GLshort factor); - void (APIENTRY *GlobalAlphaFactoriSUN) (GLint factor); - void (APIENTRY *GlobalAlphaFactorfSUN) (GLfloat factor); - void (APIENTRY *GlobalAlphaFactordSUN) (GLdouble factor); - void (APIENTRY *GlobalAlphaFactorubSUN) (GLubyte factor); - void (APIENTRY *GlobalAlphaFactorusSUN) (GLushort factor); - void (APIENTRY *GlobalAlphaFactoruiSUN) (GLuint factor); - void (APIENTRY *ReplacementCodeuiSUN) (GLuint code); - void (APIENTRY *ReplacementCodeusSUN) (GLushort code); - void (APIENTRY *ReplacementCodeubSUN) (GLubyte code); - void (APIENTRY *ReplacementCodeuivSUN) (const GLuint *code); - void (APIENTRY *ReplacementCodeusvSUN) (const GLushort *code); - void (APIENTRY *ReplacementCodeubvSUN) (const GLubyte *code); - void (APIENTRY *ReplacementCodePointerSUN) (GLenum type, GLsizei stride, const GLvoid* *pointer); - void (APIENTRY *Color4ubVertex2fSUN) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); - void (APIENTRY *Color4ubVertex2fvSUN) (const GLubyte *c, const GLfloat *v); - void (APIENTRY *Color4ubVertex3fSUN) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *Color4ubVertex3fvSUN) (const GLubyte *c, const GLfloat *v); - void (APIENTRY *Color3fVertex3fSUN) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *Color3fVertex3fvSUN) (const GLfloat *c, const GLfloat *v); - void (APIENTRY *Normal3fVertex3fSUN) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *Normal3fVertex3fvSUN) (const GLfloat *n, const GLfloat *v); - void (APIENTRY *Color4fNormal3fVertex3fSUN) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *Color4fNormal3fVertex3fvSUN) (const GLfloat *c, const GLfloat *n, const GLfloat *v); - void (APIENTRY *TexCoord2fVertex3fSUN) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *TexCoord2fVertex3fvSUN) (const GLfloat *tc, const GLfloat *v); - void (APIENTRY *TexCoord4fVertex4fSUN) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *TexCoord4fVertex4fvSUN) (const GLfloat *tc, const GLfloat *v); - void (APIENTRY *TexCoord2fColor4ubVertex3fSUN) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *TexCoord2fColor4ubVertex3fvSUN) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); - void (APIENTRY *TexCoord2fColor3fVertex3fSUN) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *TexCoord2fColor3fVertex3fvSUN) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); - void (APIENTRY *TexCoord2fNormal3fVertex3fSUN) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *TexCoord2fNormal3fVertex3fvSUN) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); - void (APIENTRY *TexCoord2fColor4fNormal3fVertex3fSUN) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *TexCoord2fColor4fNormal3fVertex3fvSUN) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); - void (APIENTRY *TexCoord4fColor4fNormal3fVertex4fSUN) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *TexCoord4fColor4fNormal3fVertex4fvSUN) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiVertex3fSUN) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiVertex3fvSUN) (const GLuint *rc, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiColor4ubVertex3fSUN) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiColor4ubVertex3fvSUN) (const GLuint *rc, const GLubyte *c, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiColor3fVertex3fSUN) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiColor3fVertex3fvSUN) (const GLuint *rc, const GLfloat *c, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiNormal3fVertex3fSUN) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiNormal3fVertex3fvSUN) (const GLuint *rc, const GLfloat *n, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiColor4fNormal3fVertex3fSUN) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiColor4fNormal3fVertex3fvSUN) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiTexCoord2fVertex3fSUN) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiTexCoord2fVertex3fvSUN) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); - void (APIENTRY *ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); - void (APIENTRY *BlendFuncSeparateEXT) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void (APIENTRY *BlendFuncSeparateINGR) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - void (APIENTRY *VertexWeightfEXT) (GLfloat weight); - void (APIENTRY *VertexWeightfvEXT) (const GLfloat *weight); - void (APIENTRY *VertexWeightPointerEXT) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *FlushVertexArrayRangeNV) (void); - void (APIENTRY *VertexArrayRangeNV) (GLsizei length, const GLvoid *pointer); - void (APIENTRY *CombinerParameterfvNV) (GLenum pname, const GLfloat *params); - void (APIENTRY *CombinerParameterfNV) (GLenum pname, GLfloat param); - void (APIENTRY *CombinerParameterivNV) (GLenum pname, const GLint *params); - void (APIENTRY *CombinerParameteriNV) (GLenum pname, GLint param); - void (APIENTRY *CombinerInputNV) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); - void (APIENTRY *CombinerOutputNV) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); - void (APIENTRY *FinalCombinerInputNV) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); - void (APIENTRY *GetCombinerInputParameterfvNV) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); - void (APIENTRY *GetCombinerInputParameterivNV) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); - void (APIENTRY *GetCombinerOutputParameterfvNV) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); - void (APIENTRY *GetCombinerOutputParameterivNV) (GLenum stage, GLenum portion, GLenum pname, GLint *params); - void (APIENTRY *GetFinalCombinerInputParameterfvNV) (GLenum variable, GLenum pname, GLfloat *params); - void (APIENTRY *GetFinalCombinerInputParameterivNV) (GLenum variable, GLenum pname, GLint *params); - void (APIENTRY *ResizeBuffersMESA) (void); - void (APIENTRY *WindowPos2dMESA) (GLdouble x, GLdouble y); - void (APIENTRY *WindowPos2dvMESA) (const GLdouble *v); - void (APIENTRY *WindowPos2fMESA) (GLfloat x, GLfloat y); - void (APIENTRY *WindowPos2fvMESA) (const GLfloat *v); - void (APIENTRY *WindowPos2iMESA) (GLint x, GLint y); - void (APIENTRY *WindowPos2ivMESA) (const GLint *v); - void (APIENTRY *WindowPos2sMESA) (GLshort x, GLshort y); - void (APIENTRY *WindowPos2svMESA) (const GLshort *v); - void (APIENTRY *WindowPos3dMESA) (GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *WindowPos3dvMESA) (const GLdouble *v); - void (APIENTRY *WindowPos3fMESA) (GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *WindowPos3fvMESA) (const GLfloat *v); - void (APIENTRY *WindowPos3iMESA) (GLint x, GLint y, GLint z); - void (APIENTRY *WindowPos3ivMESA) (const GLint *v); - void (APIENTRY *WindowPos3sMESA) (GLshort x, GLshort y, GLshort z); - void (APIENTRY *WindowPos3svMESA) (const GLshort *v); - void (APIENTRY *WindowPos4dMESA) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *WindowPos4dvMESA) (const GLdouble *v); - void (APIENTRY *WindowPos4fMESA) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *WindowPos4fvMESA) (const GLfloat *v); - void (APIENTRY *WindowPos4iMESA) (GLint x, GLint y, GLint z, GLint w); - void (APIENTRY *WindowPos4ivMESA) (const GLint *v); - void (APIENTRY *WindowPos4sMESA) (GLshort x, GLshort y, GLshort z, GLshort w); - void (APIENTRY *WindowPos4svMESA) (const GLshort *v); - void (APIENTRY *MultiModeDrawArraysIBM) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); - void (APIENTRY *MultiModeDrawElementsIBM) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); - void (APIENTRY *ColorPointerListIBM) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *SecondaryColorPointerListIBM) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *EdgeFlagPointerListIBM) (GLint stride, const GLboolean* *pointer, GLint ptrstride); - void (APIENTRY *FogCoordPointerListIBM) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *IndexPointerListIBM) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *NormalPointerListIBM) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *TexCoordPointerListIBM) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *VertexPointerListIBM) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); - void (APIENTRY *TbufferMask3DFX) (GLuint mask); - void (APIENTRY *SampleMaskEXT) (GLclampf value, GLboolean invert); - void (APIENTRY *SamplePatternEXT) (GLenum pattern); - void (APIENTRY *TextureColorMaskSGIS) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); - void (APIENTRY *IglooInterfaceSGIX) (GLenum pname, const GLvoid *params); - void (APIENTRY *DeleteFencesNV) (GLsizei n, const GLuint *fences); - void (APIENTRY *GenFencesNV) (GLsizei n, GLuint *fences); - GLboolean (APIENTRY *IsFenceNV) (GLuint fence); - GLboolean (APIENTRY *TestFenceNV) (GLuint fence); - void (APIENTRY *GetFenceivNV) (GLuint fence, GLenum pname, GLint *params); - void (APIENTRY *FinishFenceNV) (GLuint fence); - void (APIENTRY *SetFenceNV) (GLuint fence, GLenum condition); - void (APIENTRY *MapControlPointsNV) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); - void (APIENTRY *MapParameterivNV) (GLenum target, GLenum pname, const GLint *params); - void (APIENTRY *MapParameterfvNV) (GLenum target, GLenum pname, const GLfloat *params); - void (APIENTRY *GetMapControlPointsNV) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); - void (APIENTRY *GetMapParameterivNV) (GLenum target, GLenum pname, GLint *params); - void (APIENTRY *GetMapParameterfvNV) (GLenum target, GLenum pname, GLfloat *params); - void (APIENTRY *GetMapAttribParameterivNV) (GLenum target, GLuint index, GLenum pname, GLint *params); - void (APIENTRY *GetMapAttribParameterfvNV) (GLenum target, GLuint index, GLenum pname, GLfloat *params); - void (APIENTRY *EvalMapsNV) (GLenum target, GLenum mode); - void (APIENTRY *CombinerStageParameterfvNV) (GLenum stage, GLenum pname, const GLfloat *params); - void (APIENTRY *GetCombinerStageParameterfvNV) (GLenum stage, GLenum pname, GLfloat *params); - GLboolean (APIENTRY *AreProgramsResidentNV) (GLsizei n, const GLuint *programs, GLboolean *residences); - void (APIENTRY *BindProgramNV) (GLenum target, GLuint id); - void (APIENTRY *DeleteProgramsNV) (GLsizei n, const GLuint *programs); - void (APIENTRY *ExecuteProgramNV) (GLenum target, GLuint id, const GLfloat *params); - void (APIENTRY *GenProgramsNV) (GLsizei n, GLuint *programs); - void (APIENTRY *GetProgramParameterdvNV) (GLenum target, GLuint index, GLenum pname, GLdouble *params); - void (APIENTRY *GetProgramParameterfvNV) (GLenum target, GLuint index, GLenum pname, GLfloat *params); - void (APIENTRY *GetProgramivNV) (GLuint id, GLenum pname, GLint *params); - void (APIENTRY *GetProgramStringNV) (GLuint id, GLenum pname, GLubyte *program); - void (APIENTRY *GetTrackMatrixivNV) (GLenum target, GLuint address, GLenum pname, GLint *params); - void (APIENTRY *GetVertexAttribdvNV) (GLuint index, GLenum pname, GLdouble *params); - void (APIENTRY *GetVertexAttribfvNV) (GLuint index, GLenum pname, GLfloat *params); - void (APIENTRY *GetVertexAttribivNV) (GLuint index, GLenum pname, GLint *params); - void (APIENTRY *GetVertexAttribPointervNV) (GLuint index, GLenum pname, GLvoid* *pointer); - GLboolean (APIENTRY *IsProgramNV) (GLuint id); - void (APIENTRY *LoadProgramNV) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); - void (APIENTRY *ProgramParameter4dNV) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *ProgramParameter4dvNV) (GLenum target, GLuint index, const GLdouble *v); - void (APIENTRY *ProgramParameter4fNV) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *ProgramParameter4fvNV) (GLenum target, GLuint index, const GLfloat *v); - void (APIENTRY *ProgramParameters4dvNV) (GLenum target, GLuint index, GLuint count, const GLdouble *v); - void (APIENTRY *ProgramParameters4fvNV) (GLenum target, GLuint index, GLuint count, const GLfloat *v); - void (APIENTRY *RequestResidentProgramsNV) (GLsizei n, const GLuint *programs); - void (APIENTRY *TrackMatrixNV) (GLenum target, GLuint address, GLenum matrix, GLenum transform); - void (APIENTRY *VertexAttribPointerNV) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); - void (APIENTRY *VertexAttrib1dNV) (GLuint index, GLdouble x); - void (APIENTRY *VertexAttrib1dvNV) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib1fNV) (GLuint index, GLfloat x); - void (APIENTRY *VertexAttrib1fvNV) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib1sNV) (GLuint index, GLshort x); - void (APIENTRY *VertexAttrib1svNV) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib2dNV) (GLuint index, GLdouble x, GLdouble y); - void (APIENTRY *VertexAttrib2dvNV) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib2fNV) (GLuint index, GLfloat x, GLfloat y); - void (APIENTRY *VertexAttrib2fvNV) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib2sNV) (GLuint index, GLshort x, GLshort y); - void (APIENTRY *VertexAttrib2svNV) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib3dNV) (GLuint index, GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *VertexAttrib3dvNV) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib3fNV) (GLuint index, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *VertexAttrib3fvNV) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib3sNV) (GLuint index, GLshort x, GLshort y, GLshort z); - void (APIENTRY *VertexAttrib3svNV) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib4dNV) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *VertexAttrib4dvNV) (GLuint index, const GLdouble *v); - void (APIENTRY *VertexAttrib4fNV) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *VertexAttrib4fvNV) (GLuint index, const GLfloat *v); - void (APIENTRY *VertexAttrib4sNV) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); - void (APIENTRY *VertexAttrib4svNV) (GLuint index, const GLshort *v); - void (APIENTRY *VertexAttrib4ubNV) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); - void (APIENTRY *VertexAttrib4ubvNV) (GLuint index, const GLubyte *v); - void (APIENTRY *VertexAttribs1dvNV) (GLuint index, GLsizei count, const GLdouble *v); - void (APIENTRY *VertexAttribs1fvNV) (GLuint index, GLsizei count, const GLfloat *v); - void (APIENTRY *VertexAttribs1svNV) (GLuint index, GLsizei count, const GLshort *v); - void (APIENTRY *VertexAttribs2dvNV) (GLuint index, GLsizei count, const GLdouble *v); - void (APIENTRY *VertexAttribs2fvNV) (GLuint index, GLsizei count, const GLfloat *v); - void (APIENTRY *VertexAttribs2svNV) (GLuint index, GLsizei count, const GLshort *v); - void (APIENTRY *VertexAttribs3dvNV) (GLuint index, GLsizei count, const GLdouble *v); - void (APIENTRY *VertexAttribs3fvNV) (GLuint index, GLsizei count, const GLfloat *v); - void (APIENTRY *VertexAttribs3svNV) (GLuint index, GLsizei count, const GLshort *v); - void (APIENTRY *VertexAttribs4dvNV) (GLuint index, GLsizei count, const GLdouble *v); - void (APIENTRY *VertexAttribs4fvNV) (GLuint index, GLsizei count, const GLfloat *v); - void (APIENTRY *VertexAttribs4svNV) (GLuint index, GLsizei count, const GLshort *v); - void (APIENTRY *VertexAttribs4ubvNV) (GLuint index, GLsizei count, const GLubyte *v); - void (APIENTRY *TexBumpParameterivATI) (GLenum pname, const GLint *param); - void (APIENTRY *TexBumpParameterfvATI) (GLenum pname, const GLfloat *param); - void (APIENTRY *GetTexBumpParameterivATI) (GLenum pname, GLint *param); - void (APIENTRY *GetTexBumpParameterfvATI) (GLenum pname, GLfloat *param); - GLuint (APIENTRY *GenFragmentShadersATI) (GLuint range); - void (APIENTRY *BindFragmentShaderATI) (GLuint id); - void (APIENTRY *DeleteFragmentShaderATI) (GLuint id); - void (APIENTRY *BeginFragmentShaderATI) (void); - void (APIENTRY *EndFragmentShaderATI) (void); - void (APIENTRY *PassTexCoordATI) (GLuint dst, GLuint coord, GLenum swizzle); - void (APIENTRY *SampleMapATI) (GLuint dst, GLuint interp, GLenum swizzle); - void (APIENTRY *ColorFragmentOp1ATI) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); - void (APIENTRY *ColorFragmentOp2ATI) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); - void (APIENTRY *ColorFragmentOp3ATI) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); - void (APIENTRY *AlphaFragmentOp1ATI) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); - void (APIENTRY *AlphaFragmentOp2ATI) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); - void (APIENTRY *AlphaFragmentOp3ATI) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); - void (APIENTRY *SetFragmentShaderConstantATI) (GLuint dst, const GLfloat *value); - void (APIENTRY *PNTrianglesiATI) (GLenum pname, GLint param); - void (APIENTRY *PNTrianglesfATI) (GLenum pname, GLfloat param); - GLuint (APIENTRY *NewObjectBufferATI) (GLsizei size, const GLvoid *pointer, GLenum usage); - GLboolean (APIENTRY *IsObjectBufferATI) (GLuint buffer); - void (APIENTRY *UpdateObjectBufferATI) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); - void (APIENTRY *GetObjectBufferfvATI) (GLuint buffer, GLenum pname, GLfloat *params); - void (APIENTRY *GetObjectBufferivATI) (GLuint buffer, GLenum pname, GLint *params); - void (APIENTRY *FreeObjectBufferATI) (GLuint buffer); - void (APIENTRY *ArrayObjectATI) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); - void (APIENTRY *GetArrayObjectfvATI) (GLenum array, GLenum pname, GLfloat *params); - void (APIENTRY *GetArrayObjectivATI) (GLenum array, GLenum pname, GLint *params); - void (APIENTRY *VariantArrayObjectATI) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); - void (APIENTRY *GetVariantArrayObjectfvATI) (GLuint id, GLenum pname, GLfloat *params); - void (APIENTRY *GetVariantArrayObjectivATI) (GLuint id, GLenum pname, GLint *params); - void (APIENTRY *BeginVertexShaderEXT) (void); - void (APIENTRY *EndVertexShaderEXT) (void); - void (APIENTRY *BindVertexShaderEXT) (GLuint id); - GLuint (APIENTRY *GenVertexShadersEXT) (GLuint range); - void (APIENTRY *DeleteVertexShaderEXT) (GLuint id); - void (APIENTRY *ShaderOp1EXT) (GLenum op, GLuint res, GLuint arg1); - void (APIENTRY *ShaderOp2EXT) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); - void (APIENTRY *ShaderOp3EXT) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); - void (APIENTRY *SwizzleEXT) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); - void (APIENTRY *WriteMaskEXT) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); - void (APIENTRY *InsertComponentEXT) (GLuint res, GLuint src, GLuint num); - void (APIENTRY *ExtractComponentEXT) (GLuint res, GLuint src, GLuint num); - GLuint (APIENTRY *GenSymbolsEXT) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); - void (APIENTRY *SetInvariantEXT) (GLuint id, GLenum type, const GLvoid *addr); - void (APIENTRY *SetLocalConstantEXT) (GLuint id, GLenum type, const GLvoid *addr); - void (APIENTRY *VariantbvEXT) (GLuint id, const GLbyte *addr); - void (APIENTRY *VariantsvEXT) (GLuint id, const GLshort *addr); - void (APIENTRY *VariantivEXT) (GLuint id, const GLint *addr); - void (APIENTRY *VariantfvEXT) (GLuint id, const GLfloat *addr); - void (APIENTRY *VariantdvEXT) (GLuint id, const GLdouble *addr); - void (APIENTRY *VariantubvEXT) (GLuint id, const GLubyte *addr); - void (APIENTRY *VariantusvEXT) (GLuint id, const GLushort *addr); - void (APIENTRY *VariantuivEXT) (GLuint id, const GLuint *addr); - void (APIENTRY *VariantPointerEXT) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); - void (APIENTRY *EnableVariantClientStateEXT) (GLuint id); - void (APIENTRY *DisableVariantClientStateEXT) (GLuint id); - GLuint (APIENTRY *BindLightParameterEXT) (GLenum light, GLenum value); - GLuint (APIENTRY *BindMaterialParameterEXT) (GLenum face, GLenum value); - GLuint (APIENTRY *BindTexGenParameterEXT) (GLenum unit, GLenum coord, GLenum value); - GLuint (APIENTRY *BindTextureUnitParameterEXT) (GLenum unit, GLenum value); - GLuint (APIENTRY *BindParameterEXT) (GLenum value); - GLboolean (APIENTRY *IsVariantEnabledEXT) (GLuint id, GLenum cap); - void (APIENTRY *GetVariantBooleanvEXT) (GLuint id, GLenum value, GLboolean *data); - void (APIENTRY *GetVariantIntegervEXT) (GLuint id, GLenum value, GLint *data); - void (APIENTRY *GetVariantFloatvEXT) (GLuint id, GLenum value, GLfloat *data); - void (APIENTRY *GetVariantPointervEXT) (GLuint id, GLenum value, GLvoid* *data); - void (APIENTRY *GetInvariantBooleanvEXT) (GLuint id, GLenum value, GLboolean *data); - void (APIENTRY *GetInvariantIntegervEXT) (GLuint id, GLenum value, GLint *data); - void (APIENTRY *GetInvariantFloatvEXT) (GLuint id, GLenum value, GLfloat *data); - void (APIENTRY *GetLocalConstantBooleanvEXT) (GLuint id, GLenum value, GLboolean *data); - void (APIENTRY *GetLocalConstantIntegervEXT) (GLuint id, GLenum value, GLint *data); - void (APIENTRY *GetLocalConstantFloatvEXT) (GLuint id, GLenum value, GLfloat *data); - void (APIENTRY *VertexStream1sATI) (GLenum stream, GLshort x); - void (APIENTRY *VertexStream1svATI) (GLenum stream, const GLshort *coords); - void (APIENTRY *VertexStream1iATI) (GLenum stream, GLint x); - void (APIENTRY *VertexStream1ivATI) (GLenum stream, const GLint *coords); - void (APIENTRY *VertexStream1fATI) (GLenum stream, GLfloat x); - void (APIENTRY *VertexStream1fvATI) (GLenum stream, const GLfloat *coords); - void (APIENTRY *VertexStream1dATI) (GLenum stream, GLdouble x); - void (APIENTRY *VertexStream1dvATI) (GLenum stream, const GLdouble *coords); - void (APIENTRY *VertexStream2sATI) (GLenum stream, GLshort x, GLshort y); - void (APIENTRY *VertexStream2svATI) (GLenum stream, const GLshort *coords); - void (APIENTRY *VertexStream2iATI) (GLenum stream, GLint x, GLint y); - void (APIENTRY *VertexStream2ivATI) (GLenum stream, const GLint *coords); - void (APIENTRY *VertexStream2fATI) (GLenum stream, GLfloat x, GLfloat y); - void (APIENTRY *VertexStream2fvATI) (GLenum stream, const GLfloat *coords); - void (APIENTRY *VertexStream2dATI) (GLenum stream, GLdouble x, GLdouble y); - void (APIENTRY *VertexStream2dvATI) (GLenum stream, const GLdouble *coords); - void (APIENTRY *VertexStream3sATI) (GLenum stream, GLshort x, GLshort y, GLshort z); - void (APIENTRY *VertexStream3svATI) (GLenum stream, const GLshort *coords); - void (APIENTRY *VertexStream3iATI) (GLenum stream, GLint x, GLint y, GLint z); - void (APIENTRY *VertexStream3ivATI) (GLenum stream, const GLint *coords); - void (APIENTRY *VertexStream3fATI) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); - void (APIENTRY *VertexStream3fvATI) (GLenum stream, const GLfloat *coords); - void (APIENTRY *VertexStream3dATI) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); - void (APIENTRY *VertexStream3dvATI) (GLenum stream, const GLdouble *coords); - void (APIENTRY *VertexStream4sATI) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); - void (APIENTRY *VertexStream4svATI) (GLenum stream, const GLshort *coords); - void (APIENTRY *VertexStream4iATI) (GLenum stream, GLint x, GLint y, GLint z, GLint w); - void (APIENTRY *VertexStream4ivATI) (GLenum stream, const GLint *coords); - void (APIENTRY *VertexStream4fATI) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *VertexStream4fvATI) (GLenum stream, const GLfloat *coords); - void (APIENTRY *VertexStream4dATI) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *VertexStream4dvATI) (GLenum stream, const GLdouble *coords); - void (APIENTRY *NormalStream3bATI) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); - void (APIENTRY *NormalStream3bvATI) (GLenum stream, const GLbyte *coords); - void (APIENTRY *NormalStream3sATI) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); - void (APIENTRY *NormalStream3svATI) (GLenum stream, const GLshort *coords); - void (APIENTRY *NormalStream3iATI) (GLenum stream, GLint nx, GLint ny, GLint nz); - void (APIENTRY *NormalStream3ivATI) (GLenum stream, const GLint *coords); - void (APIENTRY *NormalStream3fATI) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); - void (APIENTRY *NormalStream3fvATI) (GLenum stream, const GLfloat *coords); - void (APIENTRY *NormalStream3dATI) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); - void (APIENTRY *NormalStream3dvATI) (GLenum stream, const GLdouble *coords); - void (APIENTRY *ClientActiveVertexStreamATI) (GLenum stream); - void (APIENTRY *VertexBlendEnviATI) (GLenum pname, GLint param); - void (APIENTRY *VertexBlendEnvfATI) (GLenum pname, GLfloat param); - void (APIENTRY *ElementPointerATI) (GLenum type, const GLvoid *pointer); - void (APIENTRY *DrawElementArrayATI) (GLenum mode, GLsizei count); - void (APIENTRY *DrawRangeElementArrayATI) (GLenum mode, GLuint start, GLuint end, GLsizei count); - void (APIENTRY *DrawMeshArraysSUN) (GLenum mode, GLint first, GLsizei count, GLsizei width); - void (APIENTRY *GenOcclusionQueriesNV) (GLsizei n, GLuint *ids); - void (APIENTRY *DeleteOcclusionQueriesNV) (GLsizei n, const GLuint *ids); - GLboolean (APIENTRY *IsOcclusionQueryNV) (GLuint id); - void (APIENTRY *BeginOcclusionQueryNV) (GLuint id); - void (APIENTRY *EndOcclusionQueryNV) (void); - void (APIENTRY *GetOcclusionQueryivNV) (GLuint id, GLenum pname, GLint *params); - void (APIENTRY *GetOcclusionQueryuivNV) (GLuint id, GLenum pname, GLuint *params); - void (APIENTRY *PointParameteriNV) (GLenum pname, GLint param); - void (APIENTRY *PointParameterivNV) (GLenum pname, const GLint *params); - void (APIENTRY *ActiveStencilFaceEXT) (GLenum face); - void (APIENTRY *ElementPointerAPPLE) (GLenum type, const GLvoid *pointer); - void (APIENTRY *DrawElementArrayAPPLE) (GLenum mode, GLint first, GLsizei count); - void (APIENTRY *DrawRangeElementArrayAPPLE) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); - void (APIENTRY *MultiDrawElementArrayAPPLE) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); - void (APIENTRY *MultiDrawRangeElementArrayAPPLE) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); - void (APIENTRY *GenFencesAPPLE) (GLsizei n, GLuint *fences); - void (APIENTRY *DeleteFencesAPPLE) (GLsizei n, const GLuint *fences); - void (APIENTRY *SetFenceAPPLE) (GLuint fence); - GLboolean (APIENTRY *IsFenceAPPLE) (GLuint fence); - GLboolean (APIENTRY *TestFenceAPPLE) (GLuint fence); - void (APIENTRY *FinishFenceAPPLE) (GLuint fence); - GLboolean (APIENTRY *TestObjectAPPLE) (GLenum object, GLuint name); - void (APIENTRY *FinishObjectAPPLE) (GLenum object, GLint name); - void (APIENTRY *BindVertexArrayAPPLE) (GLuint array); - void (APIENTRY *DeleteVertexArraysAPPLE) (GLsizei n, const GLuint *arrays); - void (APIENTRY *GenVertexArraysAPPLE) (GLsizei n, const GLuint *arrays); - GLboolean (APIENTRY *IsVertexArrayAPPLE) (GLuint array); - void (APIENTRY *VertexArrayRangeAPPLE) (GLsizei length, GLvoid *pointer); - void (APIENTRY *FlushVertexArrayRangeAPPLE) (GLsizei length, GLvoid *pointer); - void (APIENTRY *VertexArrayParameteriAPPLE) (GLenum pname, GLint param); - void (APIENTRY *DrawBuffersATI) (GLsizei n, const GLenum *bufs); - void (APIENTRY *ProgramNamedParameter4fNV) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); - void (APIENTRY *ProgramNamedParameter4dNV) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); - void (APIENTRY *ProgramNamedParameter4fvNV) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); - void (APIENTRY *ProgramNamedParameter4dvNV) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); - void (APIENTRY *GetProgramNamedParameterfvNV) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); - void (APIENTRY *GetProgramNamedParameterdvNV) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); - void (APIENTRY *Vertex2hNV) (GLhalfNV x, GLhalfNV y); - void (APIENTRY *Vertex2hvNV) (const GLhalfNV *v); - void (APIENTRY *Vertex3hNV) (GLhalfNV x, GLhalfNV y, GLhalfNV z); - void (APIENTRY *Vertex3hvNV) (const GLhalfNV *v); - void (APIENTRY *Vertex4hNV) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); - void (APIENTRY *Vertex4hvNV) (const GLhalfNV *v); - void (APIENTRY *Normal3hNV) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); - void (APIENTRY *Normal3hvNV) (const GLhalfNV *v); - void (APIENTRY *Color3hNV) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); - void (APIENTRY *Color3hvNV) (const GLhalfNV *v); - void (APIENTRY *Color4hNV) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); - void (APIENTRY *Color4hvNV) (const GLhalfNV *v); - void (APIENTRY *TexCoord1hNV) (GLhalfNV s); - void (APIENTRY *TexCoord1hvNV) (const GLhalfNV *v); - void (APIENTRY *TexCoord2hNV) (GLhalfNV s, GLhalfNV t); - void (APIENTRY *TexCoord2hvNV) (const GLhalfNV *v); - void (APIENTRY *TexCoord3hNV) (GLhalfNV s, GLhalfNV t, GLhalfNV r); - void (APIENTRY *TexCoord3hvNV) (const GLhalfNV *v); - void (APIENTRY *TexCoord4hNV) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); - void (APIENTRY *TexCoord4hvNV) (const GLhalfNV *v); - void (APIENTRY *MultiTexCoord1hNV) (GLenum target, GLhalfNV s); - void (APIENTRY *MultiTexCoord1hvNV) (GLenum target, const GLhalfNV *v); - void (APIENTRY *MultiTexCoord2hNV) (GLenum target, GLhalfNV s, GLhalfNV t); - void (APIENTRY *MultiTexCoord2hvNV) (GLenum target, const GLhalfNV *v); - void (APIENTRY *MultiTexCoord3hNV) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); - void (APIENTRY *MultiTexCoord3hvNV) (GLenum target, const GLhalfNV *v); - void (APIENTRY *MultiTexCoord4hNV) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); - void (APIENTRY *MultiTexCoord4hvNV) (GLenum target, const GLhalfNV *v); - void (APIENTRY *FogCoordhNV) (GLhalfNV fog); - void (APIENTRY *FogCoordhvNV) (const GLhalfNV *fog); - void (APIENTRY *SecondaryColor3hNV) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); - void (APIENTRY *SecondaryColor3hvNV) (const GLhalfNV *v); - void (APIENTRY *VertexWeighthNV) (GLhalfNV weight); - void (APIENTRY *VertexWeighthvNV) (const GLhalfNV *weight); - void (APIENTRY *VertexAttrib1hNV) (GLuint index, GLhalfNV x); - void (APIENTRY *VertexAttrib1hvNV) (GLuint index, const GLhalfNV *v); - void (APIENTRY *VertexAttrib2hNV) (GLuint index, GLhalfNV x, GLhalfNV y); - void (APIENTRY *VertexAttrib2hvNV) (GLuint index, const GLhalfNV *v); - void (APIENTRY *VertexAttrib3hNV) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); - void (APIENTRY *VertexAttrib3hvNV) (GLuint index, const GLhalfNV *v); - void (APIENTRY *VertexAttrib4hNV) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); - void (APIENTRY *VertexAttrib4hvNV) (GLuint index, const GLhalfNV *v); - void (APIENTRY *VertexAttribs1hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); - void (APIENTRY *VertexAttribs2hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); - void (APIENTRY *VertexAttribs3hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); - void (APIENTRY *VertexAttribs4hvNV) (GLuint index, GLsizei n, const GLhalfNV *v); - void (APIENTRY *PixelDataRangeNV) (GLenum target, GLsizei length, GLvoid *pointer); - void (APIENTRY *FlushPixelDataRangeNV) (GLenum target); - void (APIENTRY *PrimitiveRestartNV) (void); - void (APIENTRY *PrimitiveRestartIndexNV) (GLuint index); - GLvoid* (APIENTRY *MapObjectBufferATI) (GLuint buffer); - void (APIENTRY *UnmapObjectBufferATI) (GLuint buffer); - void (APIENTRY *StencilOpSeparateATI) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - void (APIENTRY *StencilFuncSeparateATI) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); - void (APIENTRY *VertexAttribArrayObjectATI) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); - void (APIENTRY *GetVertexAttribArrayObjectfvATI) (GLuint index, GLenum pname, GLfloat *params); - void (APIENTRY *GetVertexAttribArrayObjectivATI) (GLuint index, GLenum pname, GLint *params); - void (APIENTRY *DepthBoundsEXT) (GLclampd zmin, GLclampd zmax); - void (APIENTRY *BlendEquationSeparateEXT) (GLenum modeRGB, GLenum modeAlpha); - void (APIENTRY *AddSwapHintRectWIN) (GLint x, GLint y, GLsizei width, GLsizei height); -#ifdef _WIN32 - HANDLE (WINAPI *CreateBufferRegionARB) (HDC hDC, int iLayerPlane, UINT uType); - VOID (WINAPI *DeleteBufferRegionARB) (HANDLE hRegion); - BOOL (WINAPI *SaveBufferRegionARB) (HANDLE hRegion, int x, int y, int width, int height); - BOOL (WINAPI *RestoreBufferRegionARB) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); - const int (WINAPI *GetExtensionsStringARB) (HDC hdc); - BOOL (WINAPI *GetPixelFormatAttribivARB) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); - BOOL (WINAPI *GetPixelFormatAttribfvARB) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); - BOOL (WINAPI *ChoosePixelFormatARB) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); - BOOL (WINAPI *MakeContextCurrentARB) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - HDC (WINAPI *GetCurrentReadDCARB) (void); - HPBUFFERARB (WINAPI *CreatePbufferARB) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); - HDC (WINAPI *GetPbufferDCARB) (HPBUFFERARB hPbuffer); - int (WINAPI *ReleasePbufferDCARB) (HPBUFFERARB hPbuffer, HDC hDC); - BOOL (WINAPI *DestroyPbufferARB) (HPBUFFERARB hPbuffer); - BOOL (WINAPI *QueryPbufferARB) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); - BOOL (WINAPI *BindTexImageARB) (HPBUFFERARB hPbuffer, int iBuffer); - BOOL (WINAPI *ReleaseTexImageARB) (HPBUFFERARB hPbuffer, int iBuffer); - BOOL (WINAPI *SetPbufferAttribARB) (HPBUFFERARB hPbuffer, const int *piAttribList); - GLboolean (WINAPI *CreateDisplayColorTableEXT) (GLushort id); - GLboolean (WINAPI *LoadDisplayColorTableEXT) (const GLushort *table, GLuint length); - GLboolean (WINAPI *BindDisplayColorTableEXT) (GLushort id); - VOID (WINAPI *DestroyDisplayColorTableEXT) (GLushort id); - const int (WINAPI *GetExtensionsStringEXT) (void); - BOOL (WINAPI *MakeContextCurrentEXT) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - HDC (WINAPI *GetCurrentReadDCEXT) (void); - HPBUFFEREXT (WINAPI *CreatePbufferEXT) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); - HDC (WINAPI *GetPbufferDCEXT) (HPBUFFEREXT hPbuffer); - int (WINAPI *ReleasePbufferDCEXT) (HPBUFFEREXT hPbuffer, HDC hDC); - BOOL (WINAPI *DestroyPbufferEXT) (HPBUFFEREXT hPbuffer); - BOOL (WINAPI *QueryPbufferEXT) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); - BOOL (WINAPI *GetPixelFormatAttribivEXT) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); - BOOL (WINAPI *GetPixelFormatAttribfvEXT) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); - BOOL (WINAPI *ChoosePixelFormatEXT) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); - BOOL (WINAPI *SwapIntervalEXT) (int interval); - int (WINAPI *GetSwapIntervalEXT) (void); - void* (WINAPI *AllocateMemoryNV) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); - void (WINAPI *FreeMemoryNV) (void); - BOOL (WINAPI *GetSyncValuesOML) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); - BOOL (WINAPI *GetMscRateOML) (HDC hdc, INT32 *numerator, INT32 *denominator); - INT64 (WINAPI *SwapBuffersMscOML) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); - INT64 (WINAPI *SwapLayerBuffersMscOML) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); - BOOL (WINAPI *WaitForMscOML) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); - BOOL (WINAPI *WaitForSbcOML) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); - BOOL (WINAPI *GetDigitalVideoParametersI3D) (HDC hDC, int iAttribute, int *piValue); - BOOL (WINAPI *SetDigitalVideoParametersI3D) (HDC hDC, int iAttribute, const int *piValue); - BOOL (WINAPI *GetGammaTableParametersI3D) (HDC hDC, int iAttribute, int *piValue); - BOOL (WINAPI *SetGammaTableParametersI3D) (HDC hDC, int iAttribute, const int *piValue); - BOOL (WINAPI *GetGammaTableI3D) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); - BOOL (WINAPI *SetGammaTableI3D) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); - BOOL (WINAPI *EnableGenlockI3D) (HDC hDC); - BOOL (WINAPI *DisableGenlockI3D) (HDC hDC); - BOOL (WINAPI *IsEnabledGenlockI3D) (HDC hDC, BOOL *pFlag); - BOOL (WINAPI *GenlockSourceI3D) (HDC hDC, UINT uSource); - BOOL (WINAPI *GetGenlockSourceI3D) (HDC hDC, UINT *uSource); - BOOL (WINAPI *GenlockSourceEdgeI3D) (HDC hDC, UINT uEdge); - BOOL (WINAPI *GetGenlockSourceEdgeI3D) (HDC hDC, UINT *uEdge); - BOOL (WINAPI *GenlockSampleRateI3D) (HDC hDC, UINT uRate); - BOOL (WINAPI *GetGenlockSampleRateI3D) (HDC hDC, UINT *uRate); - BOOL (WINAPI *GenlockSourceDelayI3D) (HDC hDC, UINT uDelay); - BOOL (WINAPI *GetGenlockSourceDelayI3D) (HDC hDC, UINT *uDelay); - BOOL (WINAPI *QueryGenlockMaxSourceDelayI3D) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); - LPVOID (WINAPI *CreateImageBufferI3D) (HDC hDC, DWORD dwSize, UINT uFlags); - BOOL (WINAPI *DestroyImageBufferI3D) (HDC hDC, LPVOID pAddress); - BOOL (WINAPI *AssociateImageBufferEventsI3D) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); - BOOL (WINAPI *ReleaseImageBufferEventsI3D) (HDC hDC, const LPVOID *pAddress, UINT count); - BOOL (WINAPI *EnableFrameLockI3D) (void); - BOOL (WINAPI *DisableFrameLockI3D) (void); - BOOL (WINAPI *IsEnabledFrameLockI3D) (BOOL *pFlag); - BOOL (WINAPI *QueryFrameLockMasterI3D) (BOOL *pFlag); - BOOL (WINAPI *GetFrameUsageI3D) (float *pUsage); - BOOL (WINAPI *BeginFrameTrackingI3D) (void); - BOOL (WINAPI *EndFrameTrackingI3D) (void); - BOOL (WINAPI *QueryFrameTrackingI3D) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); -#endif /* _WIN32 */ -} _GLextensionProcs; - -#define glBlendColor (_GET_TLS_PROCTABLE()->BlendColor) -#define glBlendEquation (_GET_TLS_PROCTABLE()->BlendEquation) -#define glDrawRangeElements (_GET_TLS_PROCTABLE()->DrawRangeElements) -#define glColorTable (_GET_TLS_PROCTABLE()->ColorTable) -#define glColorTableParameterfv (_GET_TLS_PROCTABLE()->ColorTableParameterfv) -#define glColorTableParameteriv (_GET_TLS_PROCTABLE()->ColorTableParameteriv) -#define glCopyColorTable (_GET_TLS_PROCTABLE()->CopyColorTable) -#define glGetColorTable (_GET_TLS_PROCTABLE()->GetColorTable) -#define glGetColorTableParameterfv (_GET_TLS_PROCTABLE()->GetColorTableParameterfv) -#define glGetColorTableParameteriv (_GET_TLS_PROCTABLE()->GetColorTableParameteriv) -#define glColorSubTable (_GET_TLS_PROCTABLE()->ColorSubTable) -#define glCopyColorSubTable (_GET_TLS_PROCTABLE()->CopyColorSubTable) -#define glConvolutionFilter1D (_GET_TLS_PROCTABLE()->ConvolutionFilter1D) -#define glConvolutionFilter2D (_GET_TLS_PROCTABLE()->ConvolutionFilter2D) -#define glConvolutionParameterf (_GET_TLS_PROCTABLE()->ConvolutionParameterf) -#define glConvolutionParameterfv (_GET_TLS_PROCTABLE()->ConvolutionParameterfv) -#define glConvolutionParameteri (_GET_TLS_PROCTABLE()->ConvolutionParameteri) -#define glConvolutionParameteriv (_GET_TLS_PROCTABLE()->ConvolutionParameteriv) -#define glCopyConvolutionFilter1D (_GET_TLS_PROCTABLE()->CopyConvolutionFilter1D) -#define glCopyConvolutionFilter2D (_GET_TLS_PROCTABLE()->CopyConvolutionFilter2D) -#define glGetConvolutionFilter (_GET_TLS_PROCTABLE()->GetConvolutionFilter) -#define glGetConvolutionParameterfv (_GET_TLS_PROCTABLE()->GetConvolutionParameterfv) -#define glGetConvolutionParameteriv (_GET_TLS_PROCTABLE()->GetConvolutionParameteriv) -#define glGetSeparableFilter (_GET_TLS_PROCTABLE()->GetSeparableFilter) -#define glSeparableFilter2D (_GET_TLS_PROCTABLE()->SeparableFilter2D) -#define glGetHistogram (_GET_TLS_PROCTABLE()->GetHistogram) -#define glGetHistogramParameterfv (_GET_TLS_PROCTABLE()->GetHistogramParameterfv) -#define glGetHistogramParameteriv (_GET_TLS_PROCTABLE()->GetHistogramParameteriv) -#define glGetMinmax (_GET_TLS_PROCTABLE()->GetMinmax) -#define glGetMinmaxParameterfv (_GET_TLS_PROCTABLE()->GetMinmaxParameterfv) -#define glGetMinmaxParameteriv (_GET_TLS_PROCTABLE()->GetMinmaxParameteriv) -#define glHistogram (_GET_TLS_PROCTABLE()->Histogram) -#define glMinmax (_GET_TLS_PROCTABLE()->Minmax) -#define glResetHistogram (_GET_TLS_PROCTABLE()->ResetHistogram) -#define glResetMinmax (_GET_TLS_PROCTABLE()->ResetMinmax) -#define glTexImage3D (_GET_TLS_PROCTABLE()->TexImage3D) -#define glTexSubImage3D (_GET_TLS_PROCTABLE()->TexSubImage3D) -#define glCopyTexSubImage3D (_GET_TLS_PROCTABLE()->CopyTexSubImage3D) -#define glActiveTexture (_GET_TLS_PROCTABLE()->ActiveTexture) -#define glClientActiveTexture (_GET_TLS_PROCTABLE()->ClientActiveTexture) -#define glMultiTexCoord1d (_GET_TLS_PROCTABLE()->MultiTexCoord1d) -#define glMultiTexCoord1dv (_GET_TLS_PROCTABLE()->MultiTexCoord1dv) -#define glMultiTexCoord1f (_GET_TLS_PROCTABLE()->MultiTexCoord1f) -#define glMultiTexCoord1fv (_GET_TLS_PROCTABLE()->MultiTexCoord1fv) -#define glMultiTexCoord1i (_GET_TLS_PROCTABLE()->MultiTexCoord1i) -#define glMultiTexCoord1iv (_GET_TLS_PROCTABLE()->MultiTexCoord1iv) -#define glMultiTexCoord1s (_GET_TLS_PROCTABLE()->MultiTexCoord1s) -#define glMultiTexCoord1sv (_GET_TLS_PROCTABLE()->MultiTexCoord1sv) -#define glMultiTexCoord2d (_GET_TLS_PROCTABLE()->MultiTexCoord2d) -#define glMultiTexCoord2dv (_GET_TLS_PROCTABLE()->MultiTexCoord2dv) -#define glMultiTexCoord2f (_GET_TLS_PROCTABLE()->MultiTexCoord2f) -#define glMultiTexCoord2fv (_GET_TLS_PROCTABLE()->MultiTexCoord2fv) -#define glMultiTexCoord2i (_GET_TLS_PROCTABLE()->MultiTexCoord2i) -#define glMultiTexCoord2iv (_GET_TLS_PROCTABLE()->MultiTexCoord2iv) -#define glMultiTexCoord2s (_GET_TLS_PROCTABLE()->MultiTexCoord2s) -#define glMultiTexCoord2sv (_GET_TLS_PROCTABLE()->MultiTexCoord2sv) -#define glMultiTexCoord3d (_GET_TLS_PROCTABLE()->MultiTexCoord3d) -#define glMultiTexCoord3dv (_GET_TLS_PROCTABLE()->MultiTexCoord3dv) -#define glMultiTexCoord3f (_GET_TLS_PROCTABLE()->MultiTexCoord3f) -#define glMultiTexCoord3fv (_GET_TLS_PROCTABLE()->MultiTexCoord3fv) -#define glMultiTexCoord3i (_GET_TLS_PROCTABLE()->MultiTexCoord3i) -#define glMultiTexCoord3iv (_GET_TLS_PROCTABLE()->MultiTexCoord3iv) -#define glMultiTexCoord3s (_GET_TLS_PROCTABLE()->MultiTexCoord3s) -#define glMultiTexCoord3sv (_GET_TLS_PROCTABLE()->MultiTexCoord3sv) -#define glMultiTexCoord4d (_GET_TLS_PROCTABLE()->MultiTexCoord4d) -#define glMultiTexCoord4dv (_GET_TLS_PROCTABLE()->MultiTexCoord4dv) -#define glMultiTexCoord4f (_GET_TLS_PROCTABLE()->MultiTexCoord4f) -#define glMultiTexCoord4fv (_GET_TLS_PROCTABLE()->MultiTexCoord4fv) -#define glMultiTexCoord4i (_GET_TLS_PROCTABLE()->MultiTexCoord4i) -#define glMultiTexCoord4iv (_GET_TLS_PROCTABLE()->MultiTexCoord4iv) -#define glMultiTexCoord4s (_GET_TLS_PROCTABLE()->MultiTexCoord4s) -#define glMultiTexCoord4sv (_GET_TLS_PROCTABLE()->MultiTexCoord4sv) -#define glLoadTransposeMatrixf (_GET_TLS_PROCTABLE()->LoadTransposeMatrixf) -#define glLoadTransposeMatrixd (_GET_TLS_PROCTABLE()->LoadTransposeMatrixd) -#define glMultTransposeMatrixf (_GET_TLS_PROCTABLE()->MultTransposeMatrixf) -#define glMultTransposeMatrixd (_GET_TLS_PROCTABLE()->MultTransposeMatrixd) -#define glSampleCoverage (_GET_TLS_PROCTABLE()->SampleCoverage) -#define glCompressedTexImage3D (_GET_TLS_PROCTABLE()->CompressedTexImage3D) -#define glCompressedTexImage2D (_GET_TLS_PROCTABLE()->CompressedTexImage2D) -#define glCompressedTexImage1D (_GET_TLS_PROCTABLE()->CompressedTexImage1D) -#define glCompressedTexSubImage3D (_GET_TLS_PROCTABLE()->CompressedTexSubImage3D) -#define glCompressedTexSubImage2D (_GET_TLS_PROCTABLE()->CompressedTexSubImage2D) -#define glCompressedTexSubImage1D (_GET_TLS_PROCTABLE()->CompressedTexSubImage1D) -#define glGetCompressedTexImage (_GET_TLS_PROCTABLE()->GetCompressedTexImage) -#define glBlendFuncSeparate (_GET_TLS_PROCTABLE()->BlendFuncSeparate) -#define glFogCoordf (_GET_TLS_PROCTABLE()->FogCoordf) -#define glFogCoordfv (_GET_TLS_PROCTABLE()->FogCoordfv) -#define glFogCoordd (_GET_TLS_PROCTABLE()->FogCoordd) -#define glFogCoorddv (_GET_TLS_PROCTABLE()->FogCoorddv) -#define glFogCoordPointer (_GET_TLS_PROCTABLE()->FogCoordPointer) -#define glMultiDrawArrays (_GET_TLS_PROCTABLE()->MultiDrawArrays) -#define glMultiDrawElements (_GET_TLS_PROCTABLE()->MultiDrawElements) -#define glPointParameterf (_GET_TLS_PROCTABLE()->PointParameterf) -#define glPointParameterfv (_GET_TLS_PROCTABLE()->PointParameterfv) -#define glPointParameteri (_GET_TLS_PROCTABLE()->PointParameteri) -#define glPointParameteriv (_GET_TLS_PROCTABLE()->PointParameteriv) -#define glSecondaryColor3b (_GET_TLS_PROCTABLE()->SecondaryColor3b) -#define glSecondaryColor3bv (_GET_TLS_PROCTABLE()->SecondaryColor3bv) -#define glSecondaryColor3d (_GET_TLS_PROCTABLE()->SecondaryColor3d) -#define glSecondaryColor3dv (_GET_TLS_PROCTABLE()->SecondaryColor3dv) -#define glSecondaryColor3f (_GET_TLS_PROCTABLE()->SecondaryColor3f) -#define glSecondaryColor3fv (_GET_TLS_PROCTABLE()->SecondaryColor3fv) -#define glSecondaryColor3i (_GET_TLS_PROCTABLE()->SecondaryColor3i) -#define glSecondaryColor3iv (_GET_TLS_PROCTABLE()->SecondaryColor3iv) -#define glSecondaryColor3s (_GET_TLS_PROCTABLE()->SecondaryColor3s) -#define glSecondaryColor3sv (_GET_TLS_PROCTABLE()->SecondaryColor3sv) -#define glSecondaryColor3ub (_GET_TLS_PROCTABLE()->SecondaryColor3ub) -#define glSecondaryColor3ubv (_GET_TLS_PROCTABLE()->SecondaryColor3ubv) -#define glSecondaryColor3ui (_GET_TLS_PROCTABLE()->SecondaryColor3ui) -#define glSecondaryColor3uiv (_GET_TLS_PROCTABLE()->SecondaryColor3uiv) -#define glSecondaryColor3us (_GET_TLS_PROCTABLE()->SecondaryColor3us) -#define glSecondaryColor3usv (_GET_TLS_PROCTABLE()->SecondaryColor3usv) -#define glSecondaryColorPointer (_GET_TLS_PROCTABLE()->SecondaryColorPointer) -#define glWindowPos2d (_GET_TLS_PROCTABLE()->WindowPos2d) -#define glWindowPos2dv (_GET_TLS_PROCTABLE()->WindowPos2dv) -#define glWindowPos2f (_GET_TLS_PROCTABLE()->WindowPos2f) -#define glWindowPos2fv (_GET_TLS_PROCTABLE()->WindowPos2fv) -#define glWindowPos2i (_GET_TLS_PROCTABLE()->WindowPos2i) -#define glWindowPos2iv (_GET_TLS_PROCTABLE()->WindowPos2iv) -#define glWindowPos2s (_GET_TLS_PROCTABLE()->WindowPos2s) -#define glWindowPos2sv (_GET_TLS_PROCTABLE()->WindowPos2sv) -#define glWindowPos3d (_GET_TLS_PROCTABLE()->WindowPos3d) -#define glWindowPos3dv (_GET_TLS_PROCTABLE()->WindowPos3dv) -#define glWindowPos3f (_GET_TLS_PROCTABLE()->WindowPos3f) -#define glWindowPos3fv (_GET_TLS_PROCTABLE()->WindowPos3fv) -#define glWindowPos3i (_GET_TLS_PROCTABLE()->WindowPos3i) -#define glWindowPos3iv (_GET_TLS_PROCTABLE()->WindowPos3iv) -#define glWindowPos3s (_GET_TLS_PROCTABLE()->WindowPos3s) -#define glWindowPos3sv (_GET_TLS_PROCTABLE()->WindowPos3sv) -#define glGenQueries (_GET_TLS_PROCTABLE()->GenQueries) -#define glDeleteQueries (_GET_TLS_PROCTABLE()->DeleteQueries) -#define glIsQuery (_GET_TLS_PROCTABLE()->IsQuery) -#define glBeginQuery (_GET_TLS_PROCTABLE()->BeginQuery) -#define glEndQuery (_GET_TLS_PROCTABLE()->EndQuery) -#define glGetQueryiv (_GET_TLS_PROCTABLE()->GetQueryiv) -#define glGetQueryObjectiv (_GET_TLS_PROCTABLE()->GetQueryObjectiv) -#define glGetQueryObjectuiv (_GET_TLS_PROCTABLE()->GetQueryObjectuiv) -#define glBindBuffer (_GET_TLS_PROCTABLE()->BindBuffer) -#define glDeleteBuffers (_GET_TLS_PROCTABLE()->DeleteBuffers) -#define glGenBuffers (_GET_TLS_PROCTABLE()->GenBuffers) -#define glIsBuffer (_GET_TLS_PROCTABLE()->IsBuffer) -#define glBufferData (_GET_TLS_PROCTABLE()->BufferData) -#define glBufferSubData (_GET_TLS_PROCTABLE()->BufferSubData) -#define glGetBufferSubData (_GET_TLS_PROCTABLE()->GetBufferSubData) -#define glMapBuffer (_GET_TLS_PROCTABLE()->MapBuffer) -#define glUnmapBuffer (_GET_TLS_PROCTABLE()->UnmapBuffer) -#define glGetBufferParameteriv (_GET_TLS_PROCTABLE()->GetBufferParameteriv) -#define glGetBufferPointerv (_GET_TLS_PROCTABLE()->GetBufferPointerv) -#define glActiveTextureARB (_GET_TLS_PROCTABLE()->ActiveTextureARB) -#define glClientActiveTextureARB (_GET_TLS_PROCTABLE()->ClientActiveTextureARB) -#define glMultiTexCoord1dARB (_GET_TLS_PROCTABLE()->MultiTexCoord1dARB) -#define glMultiTexCoord1dvARB (_GET_TLS_PROCTABLE()->MultiTexCoord1dvARB) -#define glMultiTexCoord1fARB (_GET_TLS_PROCTABLE()->MultiTexCoord1fARB) -#define glMultiTexCoord1fvARB (_GET_TLS_PROCTABLE()->MultiTexCoord1fvARB) -#define glMultiTexCoord1iARB (_GET_TLS_PROCTABLE()->MultiTexCoord1iARB) -#define glMultiTexCoord1ivARB (_GET_TLS_PROCTABLE()->MultiTexCoord1ivARB) -#define glMultiTexCoord1sARB (_GET_TLS_PROCTABLE()->MultiTexCoord1sARB) -#define glMultiTexCoord1svARB (_GET_TLS_PROCTABLE()->MultiTexCoord1svARB) -#define glMultiTexCoord2dARB (_GET_TLS_PROCTABLE()->MultiTexCoord2dARB) -#define glMultiTexCoord2dvARB (_GET_TLS_PROCTABLE()->MultiTexCoord2dvARB) -#define glMultiTexCoord2fARB (_GET_TLS_PROCTABLE()->MultiTexCoord2fARB) -#define glMultiTexCoord2fvARB (_GET_TLS_PROCTABLE()->MultiTexCoord2fvARB) -#define glMultiTexCoord2iARB (_GET_TLS_PROCTABLE()->MultiTexCoord2iARB) -#define glMultiTexCoord2ivARB (_GET_TLS_PROCTABLE()->MultiTexCoord2ivARB) -#define glMultiTexCoord2sARB (_GET_TLS_PROCTABLE()->MultiTexCoord2sARB) -#define glMultiTexCoord2svARB (_GET_TLS_PROCTABLE()->MultiTexCoord2svARB) -#define glMultiTexCoord3dARB (_GET_TLS_PROCTABLE()->MultiTexCoord3dARB) -#define glMultiTexCoord3dvARB (_GET_TLS_PROCTABLE()->MultiTexCoord3dvARB) -#define glMultiTexCoord3fARB (_GET_TLS_PROCTABLE()->MultiTexCoord3fARB) -#define glMultiTexCoord3fvARB (_GET_TLS_PROCTABLE()->MultiTexCoord3fvARB) -#define glMultiTexCoord3iARB (_GET_TLS_PROCTABLE()->MultiTexCoord3iARB) -#define glMultiTexCoord3ivARB (_GET_TLS_PROCTABLE()->MultiTexCoord3ivARB) -#define glMultiTexCoord3sARB (_GET_TLS_PROCTABLE()->MultiTexCoord3sARB) -#define glMultiTexCoord3svARB (_GET_TLS_PROCTABLE()->MultiTexCoord3svARB) -#define glMultiTexCoord4dARB (_GET_TLS_PROCTABLE()->MultiTexCoord4dARB) -#define glMultiTexCoord4dvARB (_GET_TLS_PROCTABLE()->MultiTexCoord4dvARB) -#define glMultiTexCoord4fARB (_GET_TLS_PROCTABLE()->MultiTexCoord4fARB) -#define glMultiTexCoord4fvARB (_GET_TLS_PROCTABLE()->MultiTexCoord4fvARB) -#define glMultiTexCoord4iARB (_GET_TLS_PROCTABLE()->MultiTexCoord4iARB) -#define glMultiTexCoord4ivARB (_GET_TLS_PROCTABLE()->MultiTexCoord4ivARB) -#define glMultiTexCoord4sARB (_GET_TLS_PROCTABLE()->MultiTexCoord4sARB) -#define glMultiTexCoord4svARB (_GET_TLS_PROCTABLE()->MultiTexCoord4svARB) -#define glLoadTransposeMatrixfARB (_GET_TLS_PROCTABLE()->LoadTransposeMatrixfARB) -#define glLoadTransposeMatrixdARB (_GET_TLS_PROCTABLE()->LoadTransposeMatrixdARB) -#define glMultTransposeMatrixfARB (_GET_TLS_PROCTABLE()->MultTransposeMatrixfARB) -#define glMultTransposeMatrixdARB (_GET_TLS_PROCTABLE()->MultTransposeMatrixdARB) -#define glSampleCoverageARB (_GET_TLS_PROCTABLE()->SampleCoverageARB) -#define glCompressedTexImage3DARB (_GET_TLS_PROCTABLE()->CompressedTexImage3DARB) -#define glCompressedTexImage2DARB (_GET_TLS_PROCTABLE()->CompressedTexImage2DARB) -#define glCompressedTexImage1DARB (_GET_TLS_PROCTABLE()->CompressedTexImage1DARB) -#define glCompressedTexSubImage3DARB (_GET_TLS_PROCTABLE()->CompressedTexSubImage3DARB) -#define glCompressedTexSubImage2DARB (_GET_TLS_PROCTABLE()->CompressedTexSubImage2DARB) -#define glCompressedTexSubImage1DARB (_GET_TLS_PROCTABLE()->CompressedTexSubImage1DARB) -#define glGetCompressedTexImageARB (_GET_TLS_PROCTABLE()->GetCompressedTexImageARB) -#define glPointParameterfARB (_GET_TLS_PROCTABLE()->PointParameterfARB) -#define glPointParameterfvARB (_GET_TLS_PROCTABLE()->PointParameterfvARB) -#define glWeightbvARB (_GET_TLS_PROCTABLE()->WeightbvARB) -#define glWeightsvARB (_GET_TLS_PROCTABLE()->WeightsvARB) -#define glWeightivARB (_GET_TLS_PROCTABLE()->WeightivARB) -#define glWeightfvARB (_GET_TLS_PROCTABLE()->WeightfvARB) -#define glWeightdvARB (_GET_TLS_PROCTABLE()->WeightdvARB) -#define glWeightubvARB (_GET_TLS_PROCTABLE()->WeightubvARB) -#define glWeightusvARB (_GET_TLS_PROCTABLE()->WeightusvARB) -#define glWeightuivARB (_GET_TLS_PROCTABLE()->WeightuivARB) -#define glWeightPointerARB (_GET_TLS_PROCTABLE()->WeightPointerARB) -#define glVertexBlendARB (_GET_TLS_PROCTABLE()->VertexBlendARB) -#define glCurrentPaletteMatrixARB (_GET_TLS_PROCTABLE()->CurrentPaletteMatrixARB) -#define glMatrixIndexubvARB (_GET_TLS_PROCTABLE()->MatrixIndexubvARB) -#define glMatrixIndexusvARB (_GET_TLS_PROCTABLE()->MatrixIndexusvARB) -#define glMatrixIndexuivARB (_GET_TLS_PROCTABLE()->MatrixIndexuivARB) -#define glMatrixIndexPointerARB (_GET_TLS_PROCTABLE()->MatrixIndexPointerARB) -#define glWindowPos2dARB (_GET_TLS_PROCTABLE()->WindowPos2dARB) -#define glWindowPos2dvARB (_GET_TLS_PROCTABLE()->WindowPos2dvARB) -#define glWindowPos2fARB (_GET_TLS_PROCTABLE()->WindowPos2fARB) -#define glWindowPos2fvARB (_GET_TLS_PROCTABLE()->WindowPos2fvARB) -#define glWindowPos2iARB (_GET_TLS_PROCTABLE()->WindowPos2iARB) -#define glWindowPos2ivARB (_GET_TLS_PROCTABLE()->WindowPos2ivARB) -#define glWindowPos2sARB (_GET_TLS_PROCTABLE()->WindowPos2sARB) -#define glWindowPos2svARB (_GET_TLS_PROCTABLE()->WindowPos2svARB) -#define glWindowPos3dARB (_GET_TLS_PROCTABLE()->WindowPos3dARB) -#define glWindowPos3dvARB (_GET_TLS_PROCTABLE()->WindowPos3dvARB) -#define glWindowPos3fARB (_GET_TLS_PROCTABLE()->WindowPos3fARB) -#define glWindowPos3fvARB (_GET_TLS_PROCTABLE()->WindowPos3fvARB) -#define glWindowPos3iARB (_GET_TLS_PROCTABLE()->WindowPos3iARB) -#define glWindowPos3ivARB (_GET_TLS_PROCTABLE()->WindowPos3ivARB) -#define glWindowPos3sARB (_GET_TLS_PROCTABLE()->WindowPos3sARB) -#define glWindowPos3svARB (_GET_TLS_PROCTABLE()->WindowPos3svARB) -#define glVertexAttrib1dARB (_GET_TLS_PROCTABLE()->VertexAttrib1dARB) -#define glVertexAttrib1dvARB (_GET_TLS_PROCTABLE()->VertexAttrib1dvARB) -#define glVertexAttrib1fARB (_GET_TLS_PROCTABLE()->VertexAttrib1fARB) -#define glVertexAttrib1fvARB (_GET_TLS_PROCTABLE()->VertexAttrib1fvARB) -#define glVertexAttrib1sARB (_GET_TLS_PROCTABLE()->VertexAttrib1sARB) -#define glVertexAttrib1svARB (_GET_TLS_PROCTABLE()->VertexAttrib1svARB) -#define glVertexAttrib2dARB (_GET_TLS_PROCTABLE()->VertexAttrib2dARB) -#define glVertexAttrib2dvARB (_GET_TLS_PROCTABLE()->VertexAttrib2dvARB) -#define glVertexAttrib2fARB (_GET_TLS_PROCTABLE()->VertexAttrib2fARB) -#define glVertexAttrib2fvARB (_GET_TLS_PROCTABLE()->VertexAttrib2fvARB) -#define glVertexAttrib2sARB (_GET_TLS_PROCTABLE()->VertexAttrib2sARB) -#define glVertexAttrib2svARB (_GET_TLS_PROCTABLE()->VertexAttrib2svARB) -#define glVertexAttrib3dARB (_GET_TLS_PROCTABLE()->VertexAttrib3dARB) -#define glVertexAttrib3dvARB (_GET_TLS_PROCTABLE()->VertexAttrib3dvARB) -#define glVertexAttrib3fARB (_GET_TLS_PROCTABLE()->VertexAttrib3fARB) -#define glVertexAttrib3fvARB (_GET_TLS_PROCTABLE()->VertexAttrib3fvARB) -#define glVertexAttrib3sARB (_GET_TLS_PROCTABLE()->VertexAttrib3sARB) -#define glVertexAttrib3svARB (_GET_TLS_PROCTABLE()->VertexAttrib3svARB) -#define glVertexAttrib4NbvARB (_GET_TLS_PROCTABLE()->VertexAttrib4NbvARB) -#define glVertexAttrib4NivARB (_GET_TLS_PROCTABLE()->VertexAttrib4NivARB) -#define glVertexAttrib4NsvARB (_GET_TLS_PROCTABLE()->VertexAttrib4NsvARB) -#define glVertexAttrib4NubARB (_GET_TLS_PROCTABLE()->VertexAttrib4NubARB) -#define glVertexAttrib4NubvARB (_GET_TLS_PROCTABLE()->VertexAttrib4NubvARB) -#define glVertexAttrib4NuivARB (_GET_TLS_PROCTABLE()->VertexAttrib4NuivARB) -#define glVertexAttrib4NusvARB (_GET_TLS_PROCTABLE()->VertexAttrib4NusvARB) -#define glVertexAttrib4bvARB (_GET_TLS_PROCTABLE()->VertexAttrib4bvARB) -#define glVertexAttrib4dARB (_GET_TLS_PROCTABLE()->VertexAttrib4dARB) -#define glVertexAttrib4dvARB (_GET_TLS_PROCTABLE()->VertexAttrib4dvARB) -#define glVertexAttrib4fARB (_GET_TLS_PROCTABLE()->VertexAttrib4fARB) -#define glVertexAttrib4fvARB (_GET_TLS_PROCTABLE()->VertexAttrib4fvARB) -#define glVertexAttrib4ivARB (_GET_TLS_PROCTABLE()->VertexAttrib4ivARB) -#define glVertexAttrib4sARB (_GET_TLS_PROCTABLE()->VertexAttrib4sARB) -#define glVertexAttrib4svARB (_GET_TLS_PROCTABLE()->VertexAttrib4svARB) -#define glVertexAttrib4ubvARB (_GET_TLS_PROCTABLE()->VertexAttrib4ubvARB) -#define glVertexAttrib4uivARB (_GET_TLS_PROCTABLE()->VertexAttrib4uivARB) -#define glVertexAttrib4usvARB (_GET_TLS_PROCTABLE()->VertexAttrib4usvARB) -#define glVertexAttribPointerARB (_GET_TLS_PROCTABLE()->VertexAttribPointerARB) -#define glEnableVertexAttribArrayARB (_GET_TLS_PROCTABLE()->EnableVertexAttribArrayARB) -#define glDisableVertexAttribArrayARB (_GET_TLS_PROCTABLE()->DisableVertexAttribArrayARB) -#define glProgramStringARB (_GET_TLS_PROCTABLE()->ProgramStringARB) -#define glBindProgramARB (_GET_TLS_PROCTABLE()->BindProgramARB) -#define glDeleteProgramsARB (_GET_TLS_PROCTABLE()->DeleteProgramsARB) -#define glGenProgramsARB (_GET_TLS_PROCTABLE()->GenProgramsARB) -#define glProgramEnvParameter4dARB (_GET_TLS_PROCTABLE()->ProgramEnvParameter4dARB) -#define glProgramEnvParameter4dvARB (_GET_TLS_PROCTABLE()->ProgramEnvParameter4dvARB) -#define glProgramEnvParameter4fARB (_GET_TLS_PROCTABLE()->ProgramEnvParameter4fARB) -#define glProgramEnvParameter4fvARB (_GET_TLS_PROCTABLE()->ProgramEnvParameter4fvARB) -#define glProgramLocalParameter4dARB (_GET_TLS_PROCTABLE()->ProgramLocalParameter4dARB) -#define glProgramLocalParameter4dvARB (_GET_TLS_PROCTABLE()->ProgramLocalParameter4dvARB) -#define glProgramLocalParameter4fARB (_GET_TLS_PROCTABLE()->ProgramLocalParameter4fARB) -#define glProgramLocalParameter4fvARB (_GET_TLS_PROCTABLE()->ProgramLocalParameter4fvARB) -#define glGetProgramEnvParameterdvARB (_GET_TLS_PROCTABLE()->GetProgramEnvParameterdvARB) -#define glGetProgramEnvParameterfvARB (_GET_TLS_PROCTABLE()->GetProgramEnvParameterfvARB) -#define glGetProgramLocalParameterdvARB (_GET_TLS_PROCTABLE()->GetProgramLocalParameterdvARB) -#define glGetProgramLocalParameterfvARB (_GET_TLS_PROCTABLE()->GetProgramLocalParameterfvARB) -#define glGetProgramivARB (_GET_TLS_PROCTABLE()->GetProgramivARB) -#define glGetProgramStringARB (_GET_TLS_PROCTABLE()->GetProgramStringARB) -#define glGetVertexAttribdvARB (_GET_TLS_PROCTABLE()->GetVertexAttribdvARB) -#define glGetVertexAttribfvARB (_GET_TLS_PROCTABLE()->GetVertexAttribfvARB) -#define glGetVertexAttribivARB (_GET_TLS_PROCTABLE()->GetVertexAttribivARB) -#define glGetVertexAttribPointervARB (_GET_TLS_PROCTABLE()->GetVertexAttribPointervARB) -#define glIsProgramARB (_GET_TLS_PROCTABLE()->IsProgramARB) -#define glBindBufferARB (_GET_TLS_PROCTABLE()->BindBufferARB) -#define glDeleteBuffersARB (_GET_TLS_PROCTABLE()->DeleteBuffersARB) -#define glGenBuffersARB (_GET_TLS_PROCTABLE()->GenBuffersARB) -#define glIsBufferARB (_GET_TLS_PROCTABLE()->IsBufferARB) -#define glBufferDataARB (_GET_TLS_PROCTABLE()->BufferDataARB) -#define glBufferSubDataARB (_GET_TLS_PROCTABLE()->BufferSubDataARB) -#define glGetBufferSubDataARB (_GET_TLS_PROCTABLE()->GetBufferSubDataARB) -#define glMapBufferARB (_GET_TLS_PROCTABLE()->MapBufferARB) -#define glUnmapBufferARB (_GET_TLS_PROCTABLE()->UnmapBufferARB) -#define glGetBufferParameterivARB (_GET_TLS_PROCTABLE()->GetBufferParameterivARB) -#define glGetBufferPointervARB (_GET_TLS_PROCTABLE()->GetBufferPointervARB) -#define glGenQueriesARB (_GET_TLS_PROCTABLE()->GenQueriesARB) -#define glDeleteQueriesARB (_GET_TLS_PROCTABLE()->DeleteQueriesARB) -#define glIsQueryARB (_GET_TLS_PROCTABLE()->IsQueryARB) -#define glBeginQueryARB (_GET_TLS_PROCTABLE()->BeginQueryARB) -#define glEndQueryARB (_GET_TLS_PROCTABLE()->EndQueryARB) -#define glGetQueryivARB (_GET_TLS_PROCTABLE()->GetQueryivARB) -#define glGetQueryObjectivARB (_GET_TLS_PROCTABLE()->GetQueryObjectivARB) -#define glGetQueryObjectuivARB (_GET_TLS_PROCTABLE()->GetQueryObjectuivARB) -#define glDeleteObjectARB (_GET_TLS_PROCTABLE()->DeleteObjectARB) -#define glGetHandleARB (_GET_TLS_PROCTABLE()->GetHandleARB) -#define glDetachObjectARB (_GET_TLS_PROCTABLE()->DetachObjectARB) -#define glCreateShaderObjectARB (_GET_TLS_PROCTABLE()->CreateShaderObjectARB) -#define glShaderSourceARB (_GET_TLS_PROCTABLE()->ShaderSourceARB) -#define glCompileShaderARB (_GET_TLS_PROCTABLE()->CompileShaderARB) -#define glCreateProgramObjectARB (_GET_TLS_PROCTABLE()->CreateProgramObjectARB) -#define glAttachObjectARB (_GET_TLS_PROCTABLE()->AttachObjectARB) -#define glLinkProgramARB (_GET_TLS_PROCTABLE()->LinkProgramARB) -#define glUseProgramObjectARB (_GET_TLS_PROCTABLE()->UseProgramObjectARB) -#define glValidateProgramARB (_GET_TLS_PROCTABLE()->ValidateProgramARB) -#define glUniform1fARB (_GET_TLS_PROCTABLE()->Uniform1fARB) -#define glUniform2fARB (_GET_TLS_PROCTABLE()->Uniform2fARB) -#define glUniform3fARB (_GET_TLS_PROCTABLE()->Uniform3fARB) -#define glUniform4fARB (_GET_TLS_PROCTABLE()->Uniform4fARB) -#define glUniform1iARB (_GET_TLS_PROCTABLE()->Uniform1iARB) -#define glUniform2iARB (_GET_TLS_PROCTABLE()->Uniform2iARB) -#define glUniform3iARB (_GET_TLS_PROCTABLE()->Uniform3iARB) -#define glUniform4iARB (_GET_TLS_PROCTABLE()->Uniform4iARB) -#define glUniform1fvARB (_GET_TLS_PROCTABLE()->Uniform1fvARB) -#define glUniform2fvARB (_GET_TLS_PROCTABLE()->Uniform2fvARB) -#define glUniform3fvARB (_GET_TLS_PROCTABLE()->Uniform3fvARB) -#define glUniform4fvARB (_GET_TLS_PROCTABLE()->Uniform4fvARB) -#define glUniform1ivARB (_GET_TLS_PROCTABLE()->Uniform1ivARB) -#define glUniform2ivARB (_GET_TLS_PROCTABLE()->Uniform2ivARB) -#define glUniform3ivARB (_GET_TLS_PROCTABLE()->Uniform3ivARB) -#define glUniform4ivARB (_GET_TLS_PROCTABLE()->Uniform4ivARB) -#define glUniformMatrix2fvARB (_GET_TLS_PROCTABLE()->UniformMatrix2fvARB) -#define glUniformMatrix3fvARB (_GET_TLS_PROCTABLE()->UniformMatrix3fvARB) -#define glUniformMatrix4fvARB (_GET_TLS_PROCTABLE()->UniformMatrix4fvARB) -#define glGetObjectParameterfvARB (_GET_TLS_PROCTABLE()->GetObjectParameterfvARB) -#define glGetObjectParameterivARB (_GET_TLS_PROCTABLE()->GetObjectParameterivARB) -#define glGetInfoLogARB (_GET_TLS_PROCTABLE()->GetInfoLogARB) -#define glGetAttachedObjectsARB (_GET_TLS_PROCTABLE()->GetAttachedObjectsARB) -#define glGetUniformLocationARB (_GET_TLS_PROCTABLE()->GetUniformLocationARB) -#define glGetActiveUniformARB (_GET_TLS_PROCTABLE()->GetActiveUniformARB) -#define glGetUniformfvARB (_GET_TLS_PROCTABLE()->GetUniformfvARB) -#define glGetUniformivARB (_GET_TLS_PROCTABLE()->GetUniformivARB) -#define glGetShaderSourceARB (_GET_TLS_PROCTABLE()->GetShaderSourceARB) -#define glBindAttribLocationARB (_GET_TLS_PROCTABLE()->BindAttribLocationARB) -#define glGetActiveAttribARB (_GET_TLS_PROCTABLE()->GetActiveAttribARB) -#define glGetAttribLocationARB (_GET_TLS_PROCTABLE()->GetAttribLocationARB) -#define glBlendColorEXT (_GET_TLS_PROCTABLE()->BlendColorEXT) -#define glPolygonOffsetEXT (_GET_TLS_PROCTABLE()->PolygonOffsetEXT) -#define glTexImage3DEXT (_GET_TLS_PROCTABLE()->TexImage3DEXT) -#define glTexSubImage3DEXT (_GET_TLS_PROCTABLE()->TexSubImage3DEXT) -#define glGetTexFilterFuncSGIS (_GET_TLS_PROCTABLE()->GetTexFilterFuncSGIS) -#define glTexFilterFuncSGIS (_GET_TLS_PROCTABLE()->TexFilterFuncSGIS) -#define glTexSubImage1DEXT (_GET_TLS_PROCTABLE()->TexSubImage1DEXT) -#define glTexSubImage2DEXT (_GET_TLS_PROCTABLE()->TexSubImage2DEXT) -#define glCopyTexImage1DEXT (_GET_TLS_PROCTABLE()->CopyTexImage1DEXT) -#define glCopyTexImage2DEXT (_GET_TLS_PROCTABLE()->CopyTexImage2DEXT) -#define glCopyTexSubImage1DEXT (_GET_TLS_PROCTABLE()->CopyTexSubImage1DEXT) -#define glCopyTexSubImage2DEXT (_GET_TLS_PROCTABLE()->CopyTexSubImage2DEXT) -#define glCopyTexSubImage3DEXT (_GET_TLS_PROCTABLE()->CopyTexSubImage3DEXT) -#define glGetHistogramEXT (_GET_TLS_PROCTABLE()->GetHistogramEXT) -#define glGetHistogramParameterfvEXT (_GET_TLS_PROCTABLE()->GetHistogramParameterfvEXT) -#define glGetHistogramParameterivEXT (_GET_TLS_PROCTABLE()->GetHistogramParameterivEXT) -#define glGetMinmaxEXT (_GET_TLS_PROCTABLE()->GetMinmaxEXT) -#define glGetMinmaxParameterfvEXT (_GET_TLS_PROCTABLE()->GetMinmaxParameterfvEXT) -#define glGetMinmaxParameterivEXT (_GET_TLS_PROCTABLE()->GetMinmaxParameterivEXT) -#define glHistogramEXT (_GET_TLS_PROCTABLE()->HistogramEXT) -#define glMinmaxEXT (_GET_TLS_PROCTABLE()->MinmaxEXT) -#define glResetHistogramEXT (_GET_TLS_PROCTABLE()->ResetHistogramEXT) -#define glResetMinmaxEXT (_GET_TLS_PROCTABLE()->ResetMinmaxEXT) -#define glConvolutionFilter1DEXT (_GET_TLS_PROCTABLE()->ConvolutionFilter1DEXT) -#define glConvolutionFilter2DEXT (_GET_TLS_PROCTABLE()->ConvolutionFilter2DEXT) -#define glConvolutionParameterfEXT (_GET_TLS_PROCTABLE()->ConvolutionParameterfEXT) -#define glConvolutionParameterfvEXT (_GET_TLS_PROCTABLE()->ConvolutionParameterfvEXT) -#define glConvolutionParameteriEXT (_GET_TLS_PROCTABLE()->ConvolutionParameteriEXT) -#define glConvolutionParameterivEXT (_GET_TLS_PROCTABLE()->ConvolutionParameterivEXT) -#define glCopyConvolutionFilter1DEXT (_GET_TLS_PROCTABLE()->CopyConvolutionFilter1DEXT) -#define glCopyConvolutionFilter2DEXT (_GET_TLS_PROCTABLE()->CopyConvolutionFilter2DEXT) -#define glGetConvolutionFilterEXT (_GET_TLS_PROCTABLE()->GetConvolutionFilterEXT) -#define glGetConvolutionParameterfvEXT (_GET_TLS_PROCTABLE()->GetConvolutionParameterfvEXT) -#define glGetConvolutionParameterivEXT (_GET_TLS_PROCTABLE()->GetConvolutionParameterivEXT) -#define glGetSeparableFilterEXT (_GET_TLS_PROCTABLE()->GetSeparableFilterEXT) -#define glSeparableFilter2DEXT (_GET_TLS_PROCTABLE()->SeparableFilter2DEXT) -#define glColorTableSGI (_GET_TLS_PROCTABLE()->ColorTableSGI) -#define glColorTableParameterfvSGI (_GET_TLS_PROCTABLE()->ColorTableParameterfvSGI) -#define glColorTableParameterivSGI (_GET_TLS_PROCTABLE()->ColorTableParameterivSGI) -#define glCopyColorTableSGI (_GET_TLS_PROCTABLE()->CopyColorTableSGI) -#define glGetColorTableSGI (_GET_TLS_PROCTABLE()->GetColorTableSGI) -#define glGetColorTableParameterfvSGI (_GET_TLS_PROCTABLE()->GetColorTableParameterfvSGI) -#define glGetColorTableParameterivSGI (_GET_TLS_PROCTABLE()->GetColorTableParameterivSGI) -#define glPixelTexGenSGIX (_GET_TLS_PROCTABLE()->PixelTexGenSGIX) -#define glPixelTexGenParameteriSGIS (_GET_TLS_PROCTABLE()->PixelTexGenParameteriSGIS) -#define glPixelTexGenParameterivSGIS (_GET_TLS_PROCTABLE()->PixelTexGenParameterivSGIS) -#define glPixelTexGenParameterfSGIS (_GET_TLS_PROCTABLE()->PixelTexGenParameterfSGIS) -#define glPixelTexGenParameterfvSGIS (_GET_TLS_PROCTABLE()->PixelTexGenParameterfvSGIS) -#define glGetPixelTexGenParameterivSGIS (_GET_TLS_PROCTABLE()->GetPixelTexGenParameterivSGIS) -#define glGetPixelTexGenParameterfvSGIS (_GET_TLS_PROCTABLE()->GetPixelTexGenParameterfvSGIS) -#define glTexImage4DSGIS (_GET_TLS_PROCTABLE()->TexImage4DSGIS) -#define glTexSubImage4DSGIS (_GET_TLS_PROCTABLE()->TexSubImage4DSGIS) -#define glAreTexturesResidentEXT (_GET_TLS_PROCTABLE()->AreTexturesResidentEXT) -#define glBindTextureEXT (_GET_TLS_PROCTABLE()->BindTextureEXT) -#define glDeleteTexturesEXT (_GET_TLS_PROCTABLE()->DeleteTexturesEXT) -#define glGenTexturesEXT (_GET_TLS_PROCTABLE()->GenTexturesEXT) -#define glIsTextureEXT (_GET_TLS_PROCTABLE()->IsTextureEXT) -#define glPrioritizeTexturesEXT (_GET_TLS_PROCTABLE()->PrioritizeTexturesEXT) -#define glDetailTexFuncSGIS (_GET_TLS_PROCTABLE()->DetailTexFuncSGIS) -#define glGetDetailTexFuncSGIS (_GET_TLS_PROCTABLE()->GetDetailTexFuncSGIS) -#define glSharpenTexFuncSGIS (_GET_TLS_PROCTABLE()->SharpenTexFuncSGIS) -#define glGetSharpenTexFuncSGIS (_GET_TLS_PROCTABLE()->GetSharpenTexFuncSGIS) -#define glSampleMaskSGIS (_GET_TLS_PROCTABLE()->SampleMaskSGIS) -#define glSamplePatternSGIS (_GET_TLS_PROCTABLE()->SamplePatternSGIS) -#define glArrayElementEXT (_GET_TLS_PROCTABLE()->ArrayElementEXT) -#define glColorPointerEXT (_GET_TLS_PROCTABLE()->ColorPointerEXT) -#define glDrawArraysEXT (_GET_TLS_PROCTABLE()->DrawArraysEXT) -#define glEdgeFlagPointerEXT (_GET_TLS_PROCTABLE()->EdgeFlagPointerEXT) -#define glGetPointervEXT (_GET_TLS_PROCTABLE()->GetPointervEXT) -#define glIndexPointerEXT (_GET_TLS_PROCTABLE()->IndexPointerEXT) -#define glNormalPointerEXT (_GET_TLS_PROCTABLE()->NormalPointerEXT) -#define glTexCoordPointerEXT (_GET_TLS_PROCTABLE()->TexCoordPointerEXT) -#define glVertexPointerEXT (_GET_TLS_PROCTABLE()->VertexPointerEXT) -#define glBlendEquationEXT (_GET_TLS_PROCTABLE()->BlendEquationEXT) -#define glSpriteParameterfSGIX (_GET_TLS_PROCTABLE()->SpriteParameterfSGIX) -#define glSpriteParameterfvSGIX (_GET_TLS_PROCTABLE()->SpriteParameterfvSGIX) -#define glSpriteParameteriSGIX (_GET_TLS_PROCTABLE()->SpriteParameteriSGIX) -#define glSpriteParameterivSGIX (_GET_TLS_PROCTABLE()->SpriteParameterivSGIX) -#define glPointParameterfEXT (_GET_TLS_PROCTABLE()->PointParameterfEXT) -#define glPointParameterfvEXT (_GET_TLS_PROCTABLE()->PointParameterfvEXT) -#define glPointParameterfSGIS (_GET_TLS_PROCTABLE()->PointParameterfSGIS) -#define glPointParameterfvSGIS (_GET_TLS_PROCTABLE()->PointParameterfvSGIS) -#define glGetInstrumentsSGIX (_GET_TLS_PROCTABLE()->GetInstrumentsSGIX) -#define glInstrumentsBufferSGIX (_GET_TLS_PROCTABLE()->InstrumentsBufferSGIX) -#define glPollInstrumentsSGIX (_GET_TLS_PROCTABLE()->PollInstrumentsSGIX) -#define glReadInstrumentsSGIX (_GET_TLS_PROCTABLE()->ReadInstrumentsSGIX) -#define glStartInstrumentsSGIX (_GET_TLS_PROCTABLE()->StartInstrumentsSGIX) -#define glStopInstrumentsSGIX (_GET_TLS_PROCTABLE()->StopInstrumentsSGIX) -#define glFrameZoomSGIX (_GET_TLS_PROCTABLE()->FrameZoomSGIX) -#define glTagSampleBufferSGIX (_GET_TLS_PROCTABLE()->TagSampleBufferSGIX) -#define glDeformationMap3dSGIX (_GET_TLS_PROCTABLE()->DeformationMap3dSGIX) -#define glDeformationMap3fSGIX (_GET_TLS_PROCTABLE()->DeformationMap3fSGIX) -#define glDeformSGIX (_GET_TLS_PROCTABLE()->DeformSGIX) -#define glLoadIdentityDeformationMapSGIX (_GET_TLS_PROCTABLE()->LoadIdentityDeformationMapSGIX) -#define glReferencePlaneSGIX (_GET_TLS_PROCTABLE()->ReferencePlaneSGIX) -#define glFlushRasterSGIX (_GET_TLS_PROCTABLE()->FlushRasterSGIX) -#define glFogFuncSGIS (_GET_TLS_PROCTABLE()->FogFuncSGIS) -#define glGetFogFuncSGIS (_GET_TLS_PROCTABLE()->GetFogFuncSGIS) -#define glImageTransformParameteriHP (_GET_TLS_PROCTABLE()->ImageTransformParameteriHP) -#define glImageTransformParameterfHP (_GET_TLS_PROCTABLE()->ImageTransformParameterfHP) -#define glImageTransformParameterivHP (_GET_TLS_PROCTABLE()->ImageTransformParameterivHP) -#define glImageTransformParameterfvHP (_GET_TLS_PROCTABLE()->ImageTransformParameterfvHP) -#define glGetImageTransformParameterivHP (_GET_TLS_PROCTABLE()->GetImageTransformParameterivHP) -#define glGetImageTransformParameterfvHP (_GET_TLS_PROCTABLE()->GetImageTransformParameterfvHP) -#define glColorSubTableEXT (_GET_TLS_PROCTABLE()->ColorSubTableEXT) -#define glCopyColorSubTableEXT (_GET_TLS_PROCTABLE()->CopyColorSubTableEXT) -#define glHintPGI (_GET_TLS_PROCTABLE()->HintPGI) -#define glColorTableEXT (_GET_TLS_PROCTABLE()->ColorTableEXT) -#define glGetColorTableEXT (_GET_TLS_PROCTABLE()->GetColorTableEXT) -#define glGetColorTableParameterivEXT (_GET_TLS_PROCTABLE()->GetColorTableParameterivEXT) -#define glGetColorTableParameterfvEXT (_GET_TLS_PROCTABLE()->GetColorTableParameterfvEXT) -#define glGetListParameterfvSGIX (_GET_TLS_PROCTABLE()->GetListParameterfvSGIX) -#define glGetListParameterivSGIX (_GET_TLS_PROCTABLE()->GetListParameterivSGIX) -#define glListParameterfSGIX (_GET_TLS_PROCTABLE()->ListParameterfSGIX) -#define glListParameterfvSGIX (_GET_TLS_PROCTABLE()->ListParameterfvSGIX) -#define glListParameteriSGIX (_GET_TLS_PROCTABLE()->ListParameteriSGIX) -#define glListParameterivSGIX (_GET_TLS_PROCTABLE()->ListParameterivSGIX) -#define glIndexMaterialEXT (_GET_TLS_PROCTABLE()->IndexMaterialEXT) -#define glIndexFuncEXT (_GET_TLS_PROCTABLE()->IndexFuncEXT) -#define glLockArraysEXT (_GET_TLS_PROCTABLE()->LockArraysEXT) -#define glUnlockArraysEXT (_GET_TLS_PROCTABLE()->UnlockArraysEXT) -#define glCullParameterdvEXT (_GET_TLS_PROCTABLE()->CullParameterdvEXT) -#define glCullParameterfvEXT (_GET_TLS_PROCTABLE()->CullParameterfvEXT) -#define glFragmentColorMaterialSGIX (_GET_TLS_PROCTABLE()->FragmentColorMaterialSGIX) -#define glFragmentLightfSGIX (_GET_TLS_PROCTABLE()->FragmentLightfSGIX) -#define glFragmentLightfvSGIX (_GET_TLS_PROCTABLE()->FragmentLightfvSGIX) -#define glFragmentLightiSGIX (_GET_TLS_PROCTABLE()->FragmentLightiSGIX) -#define glFragmentLightivSGIX (_GET_TLS_PROCTABLE()->FragmentLightivSGIX) -#define glFragmentLightModelfSGIX (_GET_TLS_PROCTABLE()->FragmentLightModelfSGIX) -#define glFragmentLightModelfvSGIX (_GET_TLS_PROCTABLE()->FragmentLightModelfvSGIX) -#define glFragmentLightModeliSGIX (_GET_TLS_PROCTABLE()->FragmentLightModeliSGIX) -#define glFragmentLightModelivSGIX (_GET_TLS_PROCTABLE()->FragmentLightModelivSGIX) -#define glFragmentMaterialfSGIX (_GET_TLS_PROCTABLE()->FragmentMaterialfSGIX) -#define glFragmentMaterialfvSGIX (_GET_TLS_PROCTABLE()->FragmentMaterialfvSGIX) -#define glFragmentMaterialiSGIX (_GET_TLS_PROCTABLE()->FragmentMaterialiSGIX) -#define glFragmentMaterialivSGIX (_GET_TLS_PROCTABLE()->FragmentMaterialivSGIX) -#define glGetFragmentLightfvSGIX (_GET_TLS_PROCTABLE()->GetFragmentLightfvSGIX) -#define glGetFragmentLightivSGIX (_GET_TLS_PROCTABLE()->GetFragmentLightivSGIX) -#define glGetFragmentMaterialfvSGIX (_GET_TLS_PROCTABLE()->GetFragmentMaterialfvSGIX) -#define glGetFragmentMaterialivSGIX (_GET_TLS_PROCTABLE()->GetFragmentMaterialivSGIX) -#define glLightEnviSGIX (_GET_TLS_PROCTABLE()->LightEnviSGIX) -#define glDrawRangeElementsEXT (_GET_TLS_PROCTABLE()->DrawRangeElementsEXT) -#define glApplyTextureEXT (_GET_TLS_PROCTABLE()->ApplyTextureEXT) -#define glTextureLightEXT (_GET_TLS_PROCTABLE()->TextureLightEXT) -#define glTextureMaterialEXT (_GET_TLS_PROCTABLE()->TextureMaterialEXT) -#define glAsyncMarkerSGIX (_GET_TLS_PROCTABLE()->AsyncMarkerSGIX) -#define glFinishAsyncSGIX (_GET_TLS_PROCTABLE()->FinishAsyncSGIX) -#define glPollAsyncSGIX (_GET_TLS_PROCTABLE()->PollAsyncSGIX) -#define glGenAsyncMarkersSGIX (_GET_TLS_PROCTABLE()->GenAsyncMarkersSGIX) -#define glDeleteAsyncMarkersSGIX (_GET_TLS_PROCTABLE()->DeleteAsyncMarkersSGIX) -#define glIsAsyncMarkerSGIX (_GET_TLS_PROCTABLE()->IsAsyncMarkerSGIX) -#define glVertexPointervINTEL (_GET_TLS_PROCTABLE()->VertexPointervINTEL) -#define glNormalPointervINTEL (_GET_TLS_PROCTABLE()->NormalPointervINTEL) -#define glColorPointervINTEL (_GET_TLS_PROCTABLE()->ColorPointervINTEL) -#define glTexCoordPointervINTEL (_GET_TLS_PROCTABLE()->TexCoordPointervINTEL) -#define glPixelTransformParameteriEXT (_GET_TLS_PROCTABLE()->PixelTransformParameteriEXT) -#define glPixelTransformParameterfEXT (_GET_TLS_PROCTABLE()->PixelTransformParameterfEXT) -#define glPixelTransformParameterivEXT (_GET_TLS_PROCTABLE()->PixelTransformParameterivEXT) -#define glPixelTransformParameterfvEXT (_GET_TLS_PROCTABLE()->PixelTransformParameterfvEXT) -#define glSecondaryColor3bEXT (_GET_TLS_PROCTABLE()->SecondaryColor3bEXT) -#define glSecondaryColor3bvEXT (_GET_TLS_PROCTABLE()->SecondaryColor3bvEXT) -#define glSecondaryColor3dEXT (_GET_TLS_PROCTABLE()->SecondaryColor3dEXT) -#define glSecondaryColor3dvEXT (_GET_TLS_PROCTABLE()->SecondaryColor3dvEXT) -#define glSecondaryColor3fEXT (_GET_TLS_PROCTABLE()->SecondaryColor3fEXT) -#define glSecondaryColor3fvEXT (_GET_TLS_PROCTABLE()->SecondaryColor3fvEXT) -#define glSecondaryColor3iEXT (_GET_TLS_PROCTABLE()->SecondaryColor3iEXT) -#define glSecondaryColor3ivEXT (_GET_TLS_PROCTABLE()->SecondaryColor3ivEXT) -#define glSecondaryColor3sEXT (_GET_TLS_PROCTABLE()->SecondaryColor3sEXT) -#define glSecondaryColor3svEXT (_GET_TLS_PROCTABLE()->SecondaryColor3svEXT) -#define glSecondaryColor3ubEXT (_GET_TLS_PROCTABLE()->SecondaryColor3ubEXT) -#define glSecondaryColor3ubvEXT (_GET_TLS_PROCTABLE()->SecondaryColor3ubvEXT) -#define glSecondaryColor3uiEXT (_GET_TLS_PROCTABLE()->SecondaryColor3uiEXT) -#define glSecondaryColor3uivEXT (_GET_TLS_PROCTABLE()->SecondaryColor3uivEXT) -#define glSecondaryColor3usEXT (_GET_TLS_PROCTABLE()->SecondaryColor3usEXT) -#define glSecondaryColor3usvEXT (_GET_TLS_PROCTABLE()->SecondaryColor3usvEXT) -#define glSecondaryColorPointerEXT (_GET_TLS_PROCTABLE()->SecondaryColorPointerEXT) -#define glTextureNormalEXT (_GET_TLS_PROCTABLE()->TextureNormalEXT) -#define glMultiDrawArraysEXT (_GET_TLS_PROCTABLE()->MultiDrawArraysEXT) -#define glMultiDrawElementsEXT (_GET_TLS_PROCTABLE()->MultiDrawElementsEXT) -#define glFogCoordfEXT (_GET_TLS_PROCTABLE()->FogCoordfEXT) -#define glFogCoordfvEXT (_GET_TLS_PROCTABLE()->FogCoordfvEXT) -#define glFogCoorddEXT (_GET_TLS_PROCTABLE()->FogCoorddEXT) -#define glFogCoorddvEXT (_GET_TLS_PROCTABLE()->FogCoorddvEXT) -#define glFogCoordPointerEXT (_GET_TLS_PROCTABLE()->FogCoordPointerEXT) -#define glTangent3bEXT (_GET_TLS_PROCTABLE()->Tangent3bEXT) -#define glTangent3bvEXT (_GET_TLS_PROCTABLE()->Tangent3bvEXT) -#define glTangent3dEXT (_GET_TLS_PROCTABLE()->Tangent3dEXT) -#define glTangent3dvEXT (_GET_TLS_PROCTABLE()->Tangent3dvEXT) -#define glTangent3fEXT (_GET_TLS_PROCTABLE()->Tangent3fEXT) -#define glTangent3fvEXT (_GET_TLS_PROCTABLE()->Tangent3fvEXT) -#define glTangent3iEXT (_GET_TLS_PROCTABLE()->Tangent3iEXT) -#define glTangent3ivEXT (_GET_TLS_PROCTABLE()->Tangent3ivEXT) -#define glTangent3sEXT (_GET_TLS_PROCTABLE()->Tangent3sEXT) -#define glTangent3svEXT (_GET_TLS_PROCTABLE()->Tangent3svEXT) -#define glBinormal3bEXT (_GET_TLS_PROCTABLE()->Binormal3bEXT) -#define glBinormal3bvEXT (_GET_TLS_PROCTABLE()->Binormal3bvEXT) -#define glBinormal3dEXT (_GET_TLS_PROCTABLE()->Binormal3dEXT) -#define glBinormal3dvEXT (_GET_TLS_PROCTABLE()->Binormal3dvEXT) -#define glBinormal3fEXT (_GET_TLS_PROCTABLE()->Binormal3fEXT) -#define glBinormal3fvEXT (_GET_TLS_PROCTABLE()->Binormal3fvEXT) -#define glBinormal3iEXT (_GET_TLS_PROCTABLE()->Binormal3iEXT) -#define glBinormal3ivEXT (_GET_TLS_PROCTABLE()->Binormal3ivEXT) -#define glBinormal3sEXT (_GET_TLS_PROCTABLE()->Binormal3sEXT) -#define glBinormal3svEXT (_GET_TLS_PROCTABLE()->Binormal3svEXT) -#define glTangentPointerEXT (_GET_TLS_PROCTABLE()->TangentPointerEXT) -#define glBinormalPointerEXT (_GET_TLS_PROCTABLE()->BinormalPointerEXT) -#define glFinishTextureSUNX (_GET_TLS_PROCTABLE()->FinishTextureSUNX) -#define glGlobalAlphaFactorbSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactorbSUN) -#define glGlobalAlphaFactorsSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactorsSUN) -#define glGlobalAlphaFactoriSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactoriSUN) -#define glGlobalAlphaFactorfSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactorfSUN) -#define glGlobalAlphaFactordSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactordSUN) -#define glGlobalAlphaFactorubSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactorubSUN) -#define glGlobalAlphaFactorusSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactorusSUN) -#define glGlobalAlphaFactoruiSUN (_GET_TLS_PROCTABLE()->GlobalAlphaFactoruiSUN) -#define glReplacementCodeuiSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiSUN) -#define glReplacementCodeusSUN (_GET_TLS_PROCTABLE()->ReplacementCodeusSUN) -#define glReplacementCodeubSUN (_GET_TLS_PROCTABLE()->ReplacementCodeubSUN) -#define glReplacementCodeuivSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuivSUN) -#define glReplacementCodeusvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeusvSUN) -#define glReplacementCodeubvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeubvSUN) -#define glReplacementCodePointerSUN (_GET_TLS_PROCTABLE()->ReplacementCodePointerSUN) -#define glColor4ubVertex2fSUN (_GET_TLS_PROCTABLE()->Color4ubVertex2fSUN) -#define glColor4ubVertex2fvSUN (_GET_TLS_PROCTABLE()->Color4ubVertex2fvSUN) -#define glColor4ubVertex3fSUN (_GET_TLS_PROCTABLE()->Color4ubVertex3fSUN) -#define glColor4ubVertex3fvSUN (_GET_TLS_PROCTABLE()->Color4ubVertex3fvSUN) -#define glColor3fVertex3fSUN (_GET_TLS_PROCTABLE()->Color3fVertex3fSUN) -#define glColor3fVertex3fvSUN (_GET_TLS_PROCTABLE()->Color3fVertex3fvSUN) -#define glNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->Normal3fVertex3fSUN) -#define glNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->Normal3fVertex3fvSUN) -#define glColor4fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->Color4fNormal3fVertex3fSUN) -#define glColor4fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->Color4fNormal3fVertex3fvSUN) -#define glTexCoord2fVertex3fSUN (_GET_TLS_PROCTABLE()->TexCoord2fVertex3fSUN) -#define glTexCoord2fVertex3fvSUN (_GET_TLS_PROCTABLE()->TexCoord2fVertex3fvSUN) -#define glTexCoord4fVertex4fSUN (_GET_TLS_PROCTABLE()->TexCoord4fVertex4fSUN) -#define glTexCoord4fVertex4fvSUN (_GET_TLS_PROCTABLE()->TexCoord4fVertex4fvSUN) -#define glTexCoord2fColor4ubVertex3fSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor4ubVertex3fSUN) -#define glTexCoord2fColor4ubVertex3fvSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor4ubVertex3fvSUN) -#define glTexCoord2fColor3fVertex3fSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor3fVertex3fSUN) -#define glTexCoord2fColor3fVertex3fvSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor3fVertex3fvSUN) -#define glTexCoord2fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->TexCoord2fNormal3fVertex3fSUN) -#define glTexCoord2fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->TexCoord2fNormal3fVertex3fvSUN) -#define glTexCoord2fColor4fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor4fNormal3fVertex3fSUN) -#define glTexCoord2fColor4fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->TexCoord2fColor4fNormal3fVertex3fvSUN) -#define glTexCoord4fColor4fNormal3fVertex4fSUN (_GET_TLS_PROCTABLE()->TexCoord4fColor4fNormal3fVertex4fSUN) -#define glTexCoord4fColor4fNormal3fVertex4fvSUN (_GET_TLS_PROCTABLE()->TexCoord4fColor4fNormal3fVertex4fvSUN) -#define glReplacementCodeuiVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiVertex3fSUN) -#define glReplacementCodeuiVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiVertex3fvSUN) -#define glReplacementCodeuiColor4ubVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor4ubVertex3fSUN) -#define glReplacementCodeuiColor4ubVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor4ubVertex3fvSUN) -#define glReplacementCodeuiColor3fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor3fVertex3fSUN) -#define glReplacementCodeuiColor3fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor3fVertex3fvSUN) -#define glReplacementCodeuiNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiNormal3fVertex3fSUN) -#define glReplacementCodeuiNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiNormal3fVertex3fvSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiColor4fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (_GET_TLS_PROCTABLE()->ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) -#define glBlendFuncSeparateEXT (_GET_TLS_PROCTABLE()->BlendFuncSeparateEXT) -#define glBlendFuncSeparateINGR (_GET_TLS_PROCTABLE()->BlendFuncSeparateINGR) -#define glVertexWeightfEXT (_GET_TLS_PROCTABLE()->VertexWeightfEXT) -#define glVertexWeightfvEXT (_GET_TLS_PROCTABLE()->VertexWeightfvEXT) -#define glVertexWeightPointerEXT (_GET_TLS_PROCTABLE()->VertexWeightPointerEXT) -#define glFlushVertexArrayRangeNV (_GET_TLS_PROCTABLE()->FlushVertexArrayRangeNV) -#define glVertexArrayRangeNV (_GET_TLS_PROCTABLE()->VertexArrayRangeNV) -#define glCombinerParameterfvNV (_GET_TLS_PROCTABLE()->CombinerParameterfvNV) -#define glCombinerParameterfNV (_GET_TLS_PROCTABLE()->CombinerParameterfNV) -#define glCombinerParameterivNV (_GET_TLS_PROCTABLE()->CombinerParameterivNV) -#define glCombinerParameteriNV (_GET_TLS_PROCTABLE()->CombinerParameteriNV) -#define glCombinerInputNV (_GET_TLS_PROCTABLE()->CombinerInputNV) -#define glCombinerOutputNV (_GET_TLS_PROCTABLE()->CombinerOutputNV) -#define glFinalCombinerInputNV (_GET_TLS_PROCTABLE()->FinalCombinerInputNV) -#define glGetCombinerInputParameterfvNV (_GET_TLS_PROCTABLE()->GetCombinerInputParameterfvNV) -#define glGetCombinerInputParameterivNV (_GET_TLS_PROCTABLE()->GetCombinerInputParameterivNV) -#define glGetCombinerOutputParameterfvNV (_GET_TLS_PROCTABLE()->GetCombinerOutputParameterfvNV) -#define glGetCombinerOutputParameterivNV (_GET_TLS_PROCTABLE()->GetCombinerOutputParameterivNV) -#define glGetFinalCombinerInputParameterfvNV (_GET_TLS_PROCTABLE()->GetFinalCombinerInputParameterfvNV) -#define glGetFinalCombinerInputParameterivNV (_GET_TLS_PROCTABLE()->GetFinalCombinerInputParameterivNV) -#define glResizeBuffersMESA (_GET_TLS_PROCTABLE()->ResizeBuffersMESA) -#define glWindowPos2dMESA (_GET_TLS_PROCTABLE()->WindowPos2dMESA) -#define glWindowPos2dvMESA (_GET_TLS_PROCTABLE()->WindowPos2dvMESA) -#define glWindowPos2fMESA (_GET_TLS_PROCTABLE()->WindowPos2fMESA) -#define glWindowPos2fvMESA (_GET_TLS_PROCTABLE()->WindowPos2fvMESA) -#define glWindowPos2iMESA (_GET_TLS_PROCTABLE()->WindowPos2iMESA) -#define glWindowPos2ivMESA (_GET_TLS_PROCTABLE()->WindowPos2ivMESA) -#define glWindowPos2sMESA (_GET_TLS_PROCTABLE()->WindowPos2sMESA) -#define glWindowPos2svMESA (_GET_TLS_PROCTABLE()->WindowPos2svMESA) -#define glWindowPos3dMESA (_GET_TLS_PROCTABLE()->WindowPos3dMESA) -#define glWindowPos3dvMESA (_GET_TLS_PROCTABLE()->WindowPos3dvMESA) -#define glWindowPos3fMESA (_GET_TLS_PROCTABLE()->WindowPos3fMESA) -#define glWindowPos3fvMESA (_GET_TLS_PROCTABLE()->WindowPos3fvMESA) -#define glWindowPos3iMESA (_GET_TLS_PROCTABLE()->WindowPos3iMESA) -#define glWindowPos3ivMESA (_GET_TLS_PROCTABLE()->WindowPos3ivMESA) -#define glWindowPos3sMESA (_GET_TLS_PROCTABLE()->WindowPos3sMESA) -#define glWindowPos3svMESA (_GET_TLS_PROCTABLE()->WindowPos3svMESA) -#define glWindowPos4dMESA (_GET_TLS_PROCTABLE()->WindowPos4dMESA) -#define glWindowPos4dvMESA (_GET_TLS_PROCTABLE()->WindowPos4dvMESA) -#define glWindowPos4fMESA (_GET_TLS_PROCTABLE()->WindowPos4fMESA) -#define glWindowPos4fvMESA (_GET_TLS_PROCTABLE()->WindowPos4fvMESA) -#define glWindowPos4iMESA (_GET_TLS_PROCTABLE()->WindowPos4iMESA) -#define glWindowPos4ivMESA (_GET_TLS_PROCTABLE()->WindowPos4ivMESA) -#define glWindowPos4sMESA (_GET_TLS_PROCTABLE()->WindowPos4sMESA) -#define glWindowPos4svMESA (_GET_TLS_PROCTABLE()->WindowPos4svMESA) -#define glMultiModeDrawArraysIBM (_GET_TLS_PROCTABLE()->MultiModeDrawArraysIBM) -#define glMultiModeDrawElementsIBM (_GET_TLS_PROCTABLE()->MultiModeDrawElementsIBM) -#define glColorPointerListIBM (_GET_TLS_PROCTABLE()->ColorPointerListIBM) -#define glSecondaryColorPointerListIBM (_GET_TLS_PROCTABLE()->SecondaryColorPointerListIBM) -#define glEdgeFlagPointerListIBM (_GET_TLS_PROCTABLE()->EdgeFlagPointerListIBM) -#define glFogCoordPointerListIBM (_GET_TLS_PROCTABLE()->FogCoordPointerListIBM) -#define glIndexPointerListIBM (_GET_TLS_PROCTABLE()->IndexPointerListIBM) -#define glNormalPointerListIBM (_GET_TLS_PROCTABLE()->NormalPointerListIBM) -#define glTexCoordPointerListIBM (_GET_TLS_PROCTABLE()->TexCoordPointerListIBM) -#define glVertexPointerListIBM (_GET_TLS_PROCTABLE()->VertexPointerListIBM) -#define glTbufferMask3DFX (_GET_TLS_PROCTABLE()->TbufferMask3DFX) -#define glSampleMaskEXT (_GET_TLS_PROCTABLE()->SampleMaskEXT) -#define glSamplePatternEXT (_GET_TLS_PROCTABLE()->SamplePatternEXT) -#define glTextureColorMaskSGIS (_GET_TLS_PROCTABLE()->TextureColorMaskSGIS) -#define glIglooInterfaceSGIX (_GET_TLS_PROCTABLE()->IglooInterfaceSGIX) -#define glDeleteFencesNV (_GET_TLS_PROCTABLE()->DeleteFencesNV) -#define glGenFencesNV (_GET_TLS_PROCTABLE()->GenFencesNV) -#define glIsFenceNV (_GET_TLS_PROCTABLE()->IsFenceNV) -#define glTestFenceNV (_GET_TLS_PROCTABLE()->TestFenceNV) -#define glGetFenceivNV (_GET_TLS_PROCTABLE()->GetFenceivNV) -#define glFinishFenceNV (_GET_TLS_PROCTABLE()->FinishFenceNV) -#define glSetFenceNV (_GET_TLS_PROCTABLE()->SetFenceNV) -#define glMapControlPointsNV (_GET_TLS_PROCTABLE()->MapControlPointsNV) -#define glMapParameterivNV (_GET_TLS_PROCTABLE()->MapParameterivNV) -#define glMapParameterfvNV (_GET_TLS_PROCTABLE()->MapParameterfvNV) -#define glGetMapControlPointsNV (_GET_TLS_PROCTABLE()->GetMapControlPointsNV) -#define glGetMapParameterivNV (_GET_TLS_PROCTABLE()->GetMapParameterivNV) -#define glGetMapParameterfvNV (_GET_TLS_PROCTABLE()->GetMapParameterfvNV) -#define glGetMapAttribParameterivNV (_GET_TLS_PROCTABLE()->GetMapAttribParameterivNV) -#define glGetMapAttribParameterfvNV (_GET_TLS_PROCTABLE()->GetMapAttribParameterfvNV) -#define glEvalMapsNV (_GET_TLS_PROCTABLE()->EvalMapsNV) -#define glCombinerStageParameterfvNV (_GET_TLS_PROCTABLE()->CombinerStageParameterfvNV) -#define glGetCombinerStageParameterfvNV (_GET_TLS_PROCTABLE()->GetCombinerStageParameterfvNV) -#define glAreProgramsResidentNV (_GET_TLS_PROCTABLE()->AreProgramsResidentNV) -#define glBindProgramNV (_GET_TLS_PROCTABLE()->BindProgramNV) -#define glDeleteProgramsNV (_GET_TLS_PROCTABLE()->DeleteProgramsNV) -#define glExecuteProgramNV (_GET_TLS_PROCTABLE()->ExecuteProgramNV) -#define glGenProgramsNV (_GET_TLS_PROCTABLE()->GenProgramsNV) -#define glGetProgramParameterdvNV (_GET_TLS_PROCTABLE()->GetProgramParameterdvNV) -#define glGetProgramParameterfvNV (_GET_TLS_PROCTABLE()->GetProgramParameterfvNV) -#define glGetProgramivNV (_GET_TLS_PROCTABLE()->GetProgramivNV) -#define glGetProgramStringNV (_GET_TLS_PROCTABLE()->GetProgramStringNV) -#define glGetTrackMatrixivNV (_GET_TLS_PROCTABLE()->GetTrackMatrixivNV) -#define glGetVertexAttribdvNV (_GET_TLS_PROCTABLE()->GetVertexAttribdvNV) -#define glGetVertexAttribfvNV (_GET_TLS_PROCTABLE()->GetVertexAttribfvNV) -#define glGetVertexAttribivNV (_GET_TLS_PROCTABLE()->GetVertexAttribivNV) -#define glGetVertexAttribPointervNV (_GET_TLS_PROCTABLE()->GetVertexAttribPointervNV) -#define glIsProgramNV (_GET_TLS_PROCTABLE()->IsProgramNV) -#define glLoadProgramNV (_GET_TLS_PROCTABLE()->LoadProgramNV) -#define glProgramParameter4dNV (_GET_TLS_PROCTABLE()->ProgramParameter4dNV) -#define glProgramParameter4dvNV (_GET_TLS_PROCTABLE()->ProgramParameter4dvNV) -#define glProgramParameter4fNV (_GET_TLS_PROCTABLE()->ProgramParameter4fNV) -#define glProgramParameter4fvNV (_GET_TLS_PROCTABLE()->ProgramParameter4fvNV) -#define glProgramParameters4dvNV (_GET_TLS_PROCTABLE()->ProgramParameters4dvNV) -#define glProgramParameters4fvNV (_GET_TLS_PROCTABLE()->ProgramParameters4fvNV) -#define glRequestResidentProgramsNV (_GET_TLS_PROCTABLE()->RequestResidentProgramsNV) -#define glTrackMatrixNV (_GET_TLS_PROCTABLE()->TrackMatrixNV) -#define glVertexAttribPointerNV (_GET_TLS_PROCTABLE()->VertexAttribPointerNV) -#define glVertexAttrib1dNV (_GET_TLS_PROCTABLE()->VertexAttrib1dNV) -#define glVertexAttrib1dvNV (_GET_TLS_PROCTABLE()->VertexAttrib1dvNV) -#define glVertexAttrib1fNV (_GET_TLS_PROCTABLE()->VertexAttrib1fNV) -#define glVertexAttrib1fvNV (_GET_TLS_PROCTABLE()->VertexAttrib1fvNV) -#define glVertexAttrib1sNV (_GET_TLS_PROCTABLE()->VertexAttrib1sNV) -#define glVertexAttrib1svNV (_GET_TLS_PROCTABLE()->VertexAttrib1svNV) -#define glVertexAttrib2dNV (_GET_TLS_PROCTABLE()->VertexAttrib2dNV) -#define glVertexAttrib2dvNV (_GET_TLS_PROCTABLE()->VertexAttrib2dvNV) -#define glVertexAttrib2fNV (_GET_TLS_PROCTABLE()->VertexAttrib2fNV) -#define glVertexAttrib2fvNV (_GET_TLS_PROCTABLE()->VertexAttrib2fvNV) -#define glVertexAttrib2sNV (_GET_TLS_PROCTABLE()->VertexAttrib2sNV) -#define glVertexAttrib2svNV (_GET_TLS_PROCTABLE()->VertexAttrib2svNV) -#define glVertexAttrib3dNV (_GET_TLS_PROCTABLE()->VertexAttrib3dNV) -#define glVertexAttrib3dvNV (_GET_TLS_PROCTABLE()->VertexAttrib3dvNV) -#define glVertexAttrib3fNV (_GET_TLS_PROCTABLE()->VertexAttrib3fNV) -#define glVertexAttrib3fvNV (_GET_TLS_PROCTABLE()->VertexAttrib3fvNV) -#define glVertexAttrib3sNV (_GET_TLS_PROCTABLE()->VertexAttrib3sNV) -#define glVertexAttrib3svNV (_GET_TLS_PROCTABLE()->VertexAttrib3svNV) -#define glVertexAttrib4dNV (_GET_TLS_PROCTABLE()->VertexAttrib4dNV) -#define glVertexAttrib4dvNV (_GET_TLS_PROCTABLE()->VertexAttrib4dvNV) -#define glVertexAttrib4fNV (_GET_TLS_PROCTABLE()->VertexAttrib4fNV) -#define glVertexAttrib4fvNV (_GET_TLS_PROCTABLE()->VertexAttrib4fvNV) -#define glVertexAttrib4sNV (_GET_TLS_PROCTABLE()->VertexAttrib4sNV) -#define glVertexAttrib4svNV (_GET_TLS_PROCTABLE()->VertexAttrib4svNV) -#define glVertexAttrib4ubNV (_GET_TLS_PROCTABLE()->VertexAttrib4ubNV) -#define glVertexAttrib4ubvNV (_GET_TLS_PROCTABLE()->VertexAttrib4ubvNV) -#define glVertexAttribs1dvNV (_GET_TLS_PROCTABLE()->VertexAttribs1dvNV) -#define glVertexAttribs1fvNV (_GET_TLS_PROCTABLE()->VertexAttribs1fvNV) -#define glVertexAttribs1svNV (_GET_TLS_PROCTABLE()->VertexAttribs1svNV) -#define glVertexAttribs2dvNV (_GET_TLS_PROCTABLE()->VertexAttribs2dvNV) -#define glVertexAttribs2fvNV (_GET_TLS_PROCTABLE()->VertexAttribs2fvNV) -#define glVertexAttribs2svNV (_GET_TLS_PROCTABLE()->VertexAttribs2svNV) -#define glVertexAttribs3dvNV (_GET_TLS_PROCTABLE()->VertexAttribs3dvNV) -#define glVertexAttribs3fvNV (_GET_TLS_PROCTABLE()->VertexAttribs3fvNV) -#define glVertexAttribs3svNV (_GET_TLS_PROCTABLE()->VertexAttribs3svNV) -#define glVertexAttribs4dvNV (_GET_TLS_PROCTABLE()->VertexAttribs4dvNV) -#define glVertexAttribs4fvNV (_GET_TLS_PROCTABLE()->VertexAttribs4fvNV) -#define glVertexAttribs4svNV (_GET_TLS_PROCTABLE()->VertexAttribs4svNV) -#define glVertexAttribs4ubvNV (_GET_TLS_PROCTABLE()->VertexAttribs4ubvNV) -#define glTexBumpParameterivATI (_GET_TLS_PROCTABLE()->TexBumpParameterivATI) -#define glTexBumpParameterfvATI (_GET_TLS_PROCTABLE()->TexBumpParameterfvATI) -#define glGetTexBumpParameterivATI (_GET_TLS_PROCTABLE()->GetTexBumpParameterivATI) -#define glGetTexBumpParameterfvATI (_GET_TLS_PROCTABLE()->GetTexBumpParameterfvATI) -#define glGenFragmentShadersATI (_GET_TLS_PROCTABLE()->GenFragmentShadersATI) -#define glBindFragmentShaderATI (_GET_TLS_PROCTABLE()->BindFragmentShaderATI) -#define glDeleteFragmentShaderATI (_GET_TLS_PROCTABLE()->DeleteFragmentShaderATI) -#define glBeginFragmentShaderATI (_GET_TLS_PROCTABLE()->BeginFragmentShaderATI) -#define glEndFragmentShaderATI (_GET_TLS_PROCTABLE()->EndFragmentShaderATI) -#define glPassTexCoordATI (_GET_TLS_PROCTABLE()->PassTexCoordATI) -#define glSampleMapATI (_GET_TLS_PROCTABLE()->SampleMapATI) -#define glColorFragmentOp1ATI (_GET_TLS_PROCTABLE()->ColorFragmentOp1ATI) -#define glColorFragmentOp2ATI (_GET_TLS_PROCTABLE()->ColorFragmentOp2ATI) -#define glColorFragmentOp3ATI (_GET_TLS_PROCTABLE()->ColorFragmentOp3ATI) -#define glAlphaFragmentOp1ATI (_GET_TLS_PROCTABLE()->AlphaFragmentOp1ATI) -#define glAlphaFragmentOp2ATI (_GET_TLS_PROCTABLE()->AlphaFragmentOp2ATI) -#define glAlphaFragmentOp3ATI (_GET_TLS_PROCTABLE()->AlphaFragmentOp3ATI) -#define glSetFragmentShaderConstantATI (_GET_TLS_PROCTABLE()->SetFragmentShaderConstantATI) -#define glPNTrianglesiATI (_GET_TLS_PROCTABLE()->PNTrianglesiATI) -#define glPNTrianglesfATI (_GET_TLS_PROCTABLE()->PNTrianglesfATI) -#define glNewObjectBufferATI (_GET_TLS_PROCTABLE()->NewObjectBufferATI) -#define glIsObjectBufferATI (_GET_TLS_PROCTABLE()->IsObjectBufferATI) -#define glUpdateObjectBufferATI (_GET_TLS_PROCTABLE()->UpdateObjectBufferATI) -#define glGetObjectBufferfvATI (_GET_TLS_PROCTABLE()->GetObjectBufferfvATI) -#define glGetObjectBufferivATI (_GET_TLS_PROCTABLE()->GetObjectBufferivATI) -#define glFreeObjectBufferATI (_GET_TLS_PROCTABLE()->FreeObjectBufferATI) -#define glArrayObjectATI (_GET_TLS_PROCTABLE()->ArrayObjectATI) -#define glGetArrayObjectfvATI (_GET_TLS_PROCTABLE()->GetArrayObjectfvATI) -#define glGetArrayObjectivATI (_GET_TLS_PROCTABLE()->GetArrayObjectivATI) -#define glVariantArrayObjectATI (_GET_TLS_PROCTABLE()->VariantArrayObjectATI) -#define glGetVariantArrayObjectfvATI (_GET_TLS_PROCTABLE()->GetVariantArrayObjectfvATI) -#define glGetVariantArrayObjectivATI (_GET_TLS_PROCTABLE()->GetVariantArrayObjectivATI) -#define glBeginVertexShaderEXT (_GET_TLS_PROCTABLE()->BeginVertexShaderEXT) -#define glEndVertexShaderEXT (_GET_TLS_PROCTABLE()->EndVertexShaderEXT) -#define glBindVertexShaderEXT (_GET_TLS_PROCTABLE()->BindVertexShaderEXT) -#define glGenVertexShadersEXT (_GET_TLS_PROCTABLE()->GenVertexShadersEXT) -#define glDeleteVertexShaderEXT (_GET_TLS_PROCTABLE()->DeleteVertexShaderEXT) -#define glShaderOp1EXT (_GET_TLS_PROCTABLE()->ShaderOp1EXT) -#define glShaderOp2EXT (_GET_TLS_PROCTABLE()->ShaderOp2EXT) -#define glShaderOp3EXT (_GET_TLS_PROCTABLE()->ShaderOp3EXT) -#define glSwizzleEXT (_GET_TLS_PROCTABLE()->SwizzleEXT) -#define glWriteMaskEXT (_GET_TLS_PROCTABLE()->WriteMaskEXT) -#define glInsertComponentEXT (_GET_TLS_PROCTABLE()->InsertComponentEXT) -#define glExtractComponentEXT (_GET_TLS_PROCTABLE()->ExtractComponentEXT) -#define glGenSymbolsEXT (_GET_TLS_PROCTABLE()->GenSymbolsEXT) -#define glSetInvariantEXT (_GET_TLS_PROCTABLE()->SetInvariantEXT) -#define glSetLocalConstantEXT (_GET_TLS_PROCTABLE()->SetLocalConstantEXT) -#define glVariantbvEXT (_GET_TLS_PROCTABLE()->VariantbvEXT) -#define glVariantsvEXT (_GET_TLS_PROCTABLE()->VariantsvEXT) -#define glVariantivEXT (_GET_TLS_PROCTABLE()->VariantivEXT) -#define glVariantfvEXT (_GET_TLS_PROCTABLE()->VariantfvEXT) -#define glVariantdvEXT (_GET_TLS_PROCTABLE()->VariantdvEXT) -#define glVariantubvEXT (_GET_TLS_PROCTABLE()->VariantubvEXT) -#define glVariantusvEXT (_GET_TLS_PROCTABLE()->VariantusvEXT) -#define glVariantuivEXT (_GET_TLS_PROCTABLE()->VariantuivEXT) -#define glVariantPointerEXT (_GET_TLS_PROCTABLE()->VariantPointerEXT) -#define glEnableVariantClientStateEXT (_GET_TLS_PROCTABLE()->EnableVariantClientStateEXT) -#define glDisableVariantClientStateEXT (_GET_TLS_PROCTABLE()->DisableVariantClientStateEXT) -#define glBindLightParameterEXT (_GET_TLS_PROCTABLE()->BindLightParameterEXT) -#define glBindMaterialParameterEXT (_GET_TLS_PROCTABLE()->BindMaterialParameterEXT) -#define glBindTexGenParameterEXT (_GET_TLS_PROCTABLE()->BindTexGenParameterEXT) -#define glBindTextureUnitParameterEXT (_GET_TLS_PROCTABLE()->BindTextureUnitParameterEXT) -#define glBindParameterEXT (_GET_TLS_PROCTABLE()->BindParameterEXT) -#define glIsVariantEnabledEXT (_GET_TLS_PROCTABLE()->IsVariantEnabledEXT) -#define glGetVariantBooleanvEXT (_GET_TLS_PROCTABLE()->GetVariantBooleanvEXT) -#define glGetVariantIntegervEXT (_GET_TLS_PROCTABLE()->GetVariantIntegervEXT) -#define glGetVariantFloatvEXT (_GET_TLS_PROCTABLE()->GetVariantFloatvEXT) -#define glGetVariantPointervEXT (_GET_TLS_PROCTABLE()->GetVariantPointervEXT) -#define glGetInvariantBooleanvEXT (_GET_TLS_PROCTABLE()->GetInvariantBooleanvEXT) -#define glGetInvariantIntegervEXT (_GET_TLS_PROCTABLE()->GetInvariantIntegervEXT) -#define glGetInvariantFloatvEXT (_GET_TLS_PROCTABLE()->GetInvariantFloatvEXT) -#define glGetLocalConstantBooleanvEXT (_GET_TLS_PROCTABLE()->GetLocalConstantBooleanvEXT) -#define glGetLocalConstantIntegervEXT (_GET_TLS_PROCTABLE()->GetLocalConstantIntegervEXT) -#define glGetLocalConstantFloatvEXT (_GET_TLS_PROCTABLE()->GetLocalConstantFloatvEXT) -#define glVertexStream1sATI (_GET_TLS_PROCTABLE()->VertexStream1sATI) -#define glVertexStream1svATI (_GET_TLS_PROCTABLE()->VertexStream1svATI) -#define glVertexStream1iATI (_GET_TLS_PROCTABLE()->VertexStream1iATI) -#define glVertexStream1ivATI (_GET_TLS_PROCTABLE()->VertexStream1ivATI) -#define glVertexStream1fATI (_GET_TLS_PROCTABLE()->VertexStream1fATI) -#define glVertexStream1fvATI (_GET_TLS_PROCTABLE()->VertexStream1fvATI) -#define glVertexStream1dATI (_GET_TLS_PROCTABLE()->VertexStream1dATI) -#define glVertexStream1dvATI (_GET_TLS_PROCTABLE()->VertexStream1dvATI) -#define glVertexStream2sATI (_GET_TLS_PROCTABLE()->VertexStream2sATI) -#define glVertexStream2svATI (_GET_TLS_PROCTABLE()->VertexStream2svATI) -#define glVertexStream2iATI (_GET_TLS_PROCTABLE()->VertexStream2iATI) -#define glVertexStream2ivATI (_GET_TLS_PROCTABLE()->VertexStream2ivATI) -#define glVertexStream2fATI (_GET_TLS_PROCTABLE()->VertexStream2fATI) -#define glVertexStream2fvATI (_GET_TLS_PROCTABLE()->VertexStream2fvATI) -#define glVertexStream2dATI (_GET_TLS_PROCTABLE()->VertexStream2dATI) -#define glVertexStream2dvATI (_GET_TLS_PROCTABLE()->VertexStream2dvATI) -#define glVertexStream3sATI (_GET_TLS_PROCTABLE()->VertexStream3sATI) -#define glVertexStream3svATI (_GET_TLS_PROCTABLE()->VertexStream3svATI) -#define glVertexStream3iATI (_GET_TLS_PROCTABLE()->VertexStream3iATI) -#define glVertexStream3ivATI (_GET_TLS_PROCTABLE()->VertexStream3ivATI) -#define glVertexStream3fATI (_GET_TLS_PROCTABLE()->VertexStream3fATI) -#define glVertexStream3fvATI (_GET_TLS_PROCTABLE()->VertexStream3fvATI) -#define glVertexStream3dATI (_GET_TLS_PROCTABLE()->VertexStream3dATI) -#define glVertexStream3dvATI (_GET_TLS_PROCTABLE()->VertexStream3dvATI) -#define glVertexStream4sATI (_GET_TLS_PROCTABLE()->VertexStream4sATI) -#define glVertexStream4svATI (_GET_TLS_PROCTABLE()->VertexStream4svATI) -#define glVertexStream4iATI (_GET_TLS_PROCTABLE()->VertexStream4iATI) -#define glVertexStream4ivATI (_GET_TLS_PROCTABLE()->VertexStream4ivATI) -#define glVertexStream4fATI (_GET_TLS_PROCTABLE()->VertexStream4fATI) -#define glVertexStream4fvATI (_GET_TLS_PROCTABLE()->VertexStream4fvATI) -#define glVertexStream4dATI (_GET_TLS_PROCTABLE()->VertexStream4dATI) -#define glVertexStream4dvATI (_GET_TLS_PROCTABLE()->VertexStream4dvATI) -#define glNormalStream3bATI (_GET_TLS_PROCTABLE()->NormalStream3bATI) -#define glNormalStream3bvATI (_GET_TLS_PROCTABLE()->NormalStream3bvATI) -#define glNormalStream3sATI (_GET_TLS_PROCTABLE()->NormalStream3sATI) -#define glNormalStream3svATI (_GET_TLS_PROCTABLE()->NormalStream3svATI) -#define glNormalStream3iATI (_GET_TLS_PROCTABLE()->NormalStream3iATI) -#define glNormalStream3ivATI (_GET_TLS_PROCTABLE()->NormalStream3ivATI) -#define glNormalStream3fATI (_GET_TLS_PROCTABLE()->NormalStream3fATI) -#define glNormalStream3fvATI (_GET_TLS_PROCTABLE()->NormalStream3fvATI) -#define glNormalStream3dATI (_GET_TLS_PROCTABLE()->NormalStream3dATI) -#define glNormalStream3dvATI (_GET_TLS_PROCTABLE()->NormalStream3dvATI) -#define glClientActiveVertexStreamATI (_GET_TLS_PROCTABLE()->ClientActiveVertexStreamATI) -#define glVertexBlendEnviATI (_GET_TLS_PROCTABLE()->VertexBlendEnviATI) -#define glVertexBlendEnvfATI (_GET_TLS_PROCTABLE()->VertexBlendEnvfATI) -#define glElementPointerATI (_GET_TLS_PROCTABLE()->ElementPointerATI) -#define glDrawElementArrayATI (_GET_TLS_PROCTABLE()->DrawElementArrayATI) -#define glDrawRangeElementArrayATI (_GET_TLS_PROCTABLE()->DrawRangeElementArrayATI) -#define glDrawMeshArraysSUN (_GET_TLS_PROCTABLE()->DrawMeshArraysSUN) -#define glGenOcclusionQueriesNV (_GET_TLS_PROCTABLE()->GenOcclusionQueriesNV) -#define glDeleteOcclusionQueriesNV (_GET_TLS_PROCTABLE()->DeleteOcclusionQueriesNV) -#define glIsOcclusionQueryNV (_GET_TLS_PROCTABLE()->IsOcclusionQueryNV) -#define glBeginOcclusionQueryNV (_GET_TLS_PROCTABLE()->BeginOcclusionQueryNV) -#define glEndOcclusionQueryNV (_GET_TLS_PROCTABLE()->EndOcclusionQueryNV) -#define glGetOcclusionQueryivNV (_GET_TLS_PROCTABLE()->GetOcclusionQueryivNV) -#define glGetOcclusionQueryuivNV (_GET_TLS_PROCTABLE()->GetOcclusionQueryuivNV) -#define glPointParameteriNV (_GET_TLS_PROCTABLE()->PointParameteriNV) -#define glPointParameterivNV (_GET_TLS_PROCTABLE()->PointParameterivNV) -#define glActiveStencilFaceEXT (_GET_TLS_PROCTABLE()->ActiveStencilFaceEXT) -#define glElementPointerAPPLE (_GET_TLS_PROCTABLE()->ElementPointerAPPLE) -#define glDrawElementArrayAPPLE (_GET_TLS_PROCTABLE()->DrawElementArrayAPPLE) -#define glDrawRangeElementArrayAPPLE (_GET_TLS_PROCTABLE()->DrawRangeElementArrayAPPLE) -#define glMultiDrawElementArrayAPPLE (_GET_TLS_PROCTABLE()->MultiDrawElementArrayAPPLE) -#define glMultiDrawRangeElementArrayAPPLE (_GET_TLS_PROCTABLE()->MultiDrawRangeElementArrayAPPLE) -#define glGenFencesAPPLE (_GET_TLS_PROCTABLE()->GenFencesAPPLE) -#define glDeleteFencesAPPLE (_GET_TLS_PROCTABLE()->DeleteFencesAPPLE) -#define glSetFenceAPPLE (_GET_TLS_PROCTABLE()->SetFenceAPPLE) -#define glIsFenceAPPLE (_GET_TLS_PROCTABLE()->IsFenceAPPLE) -#define glTestFenceAPPLE (_GET_TLS_PROCTABLE()->TestFenceAPPLE) -#define glFinishFenceAPPLE (_GET_TLS_PROCTABLE()->FinishFenceAPPLE) -#define glTestObjectAPPLE (_GET_TLS_PROCTABLE()->TestObjectAPPLE) -#define glFinishObjectAPPLE (_GET_TLS_PROCTABLE()->FinishObjectAPPLE) -#define glBindVertexArrayAPPLE (_GET_TLS_PROCTABLE()->BindVertexArrayAPPLE) -#define glDeleteVertexArraysAPPLE (_GET_TLS_PROCTABLE()->DeleteVertexArraysAPPLE) -#define glGenVertexArraysAPPLE (_GET_TLS_PROCTABLE()->GenVertexArraysAPPLE) -#define glIsVertexArrayAPPLE (_GET_TLS_PROCTABLE()->IsVertexArrayAPPLE) -#define glVertexArrayRangeAPPLE (_GET_TLS_PROCTABLE()->VertexArrayRangeAPPLE) -#define glFlushVertexArrayRangeAPPLE (_GET_TLS_PROCTABLE()->FlushVertexArrayRangeAPPLE) -#define glVertexArrayParameteriAPPLE (_GET_TLS_PROCTABLE()->VertexArrayParameteriAPPLE) -#define glDrawBuffersATI (_GET_TLS_PROCTABLE()->DrawBuffersATI) -#define glProgramNamedParameter4fNV (_GET_TLS_PROCTABLE()->ProgramNamedParameter4fNV) -#define glProgramNamedParameter4dNV (_GET_TLS_PROCTABLE()->ProgramNamedParameter4dNV) -#define glProgramNamedParameter4fvNV (_GET_TLS_PROCTABLE()->ProgramNamedParameter4fvNV) -#define glProgramNamedParameter4dvNV (_GET_TLS_PROCTABLE()->ProgramNamedParameter4dvNV) -#define glGetProgramNamedParameterfvNV (_GET_TLS_PROCTABLE()->GetProgramNamedParameterfvNV) -#define glGetProgramNamedParameterdvNV (_GET_TLS_PROCTABLE()->GetProgramNamedParameterdvNV) -#define glVertex2hNV (_GET_TLS_PROCTABLE()->Vertex2hNV) -#define glVertex2hvNV (_GET_TLS_PROCTABLE()->Vertex2hvNV) -#define glVertex3hNV (_GET_TLS_PROCTABLE()->Vertex3hNV) -#define glVertex3hvNV (_GET_TLS_PROCTABLE()->Vertex3hvNV) -#define glVertex4hNV (_GET_TLS_PROCTABLE()->Vertex4hNV) -#define glVertex4hvNV (_GET_TLS_PROCTABLE()->Vertex4hvNV) -#define glNormal3hNV (_GET_TLS_PROCTABLE()->Normal3hNV) -#define glNormal3hvNV (_GET_TLS_PROCTABLE()->Normal3hvNV) -#define glColor3hNV (_GET_TLS_PROCTABLE()->Color3hNV) -#define glColor3hvNV (_GET_TLS_PROCTABLE()->Color3hvNV) -#define glColor4hNV (_GET_TLS_PROCTABLE()->Color4hNV) -#define glColor4hvNV (_GET_TLS_PROCTABLE()->Color4hvNV) -#define glTexCoord1hNV (_GET_TLS_PROCTABLE()->TexCoord1hNV) -#define glTexCoord1hvNV (_GET_TLS_PROCTABLE()->TexCoord1hvNV) -#define glTexCoord2hNV (_GET_TLS_PROCTABLE()->TexCoord2hNV) -#define glTexCoord2hvNV (_GET_TLS_PROCTABLE()->TexCoord2hvNV) -#define glTexCoord3hNV (_GET_TLS_PROCTABLE()->TexCoord3hNV) -#define glTexCoord3hvNV (_GET_TLS_PROCTABLE()->TexCoord3hvNV) -#define glTexCoord4hNV (_GET_TLS_PROCTABLE()->TexCoord4hNV) -#define glTexCoord4hvNV (_GET_TLS_PROCTABLE()->TexCoord4hvNV) -#define glMultiTexCoord1hNV (_GET_TLS_PROCTABLE()->MultiTexCoord1hNV) -#define glMultiTexCoord1hvNV (_GET_TLS_PROCTABLE()->MultiTexCoord1hvNV) -#define glMultiTexCoord2hNV (_GET_TLS_PROCTABLE()->MultiTexCoord2hNV) -#define glMultiTexCoord2hvNV (_GET_TLS_PROCTABLE()->MultiTexCoord2hvNV) -#define glMultiTexCoord3hNV (_GET_TLS_PROCTABLE()->MultiTexCoord3hNV) -#define glMultiTexCoord3hvNV (_GET_TLS_PROCTABLE()->MultiTexCoord3hvNV) -#define glMultiTexCoord4hNV (_GET_TLS_PROCTABLE()->MultiTexCoord4hNV) -#define glMultiTexCoord4hvNV (_GET_TLS_PROCTABLE()->MultiTexCoord4hvNV) -#define glFogCoordhNV (_GET_TLS_PROCTABLE()->FogCoordhNV) -#define glFogCoordhvNV (_GET_TLS_PROCTABLE()->FogCoordhvNV) -#define glSecondaryColor3hNV (_GET_TLS_PROCTABLE()->SecondaryColor3hNV) -#define glSecondaryColor3hvNV (_GET_TLS_PROCTABLE()->SecondaryColor3hvNV) -#define glVertexWeighthNV (_GET_TLS_PROCTABLE()->VertexWeighthNV) -#define glVertexWeighthvNV (_GET_TLS_PROCTABLE()->VertexWeighthvNV) -#define glVertexAttrib1hNV (_GET_TLS_PROCTABLE()->VertexAttrib1hNV) -#define glVertexAttrib1hvNV (_GET_TLS_PROCTABLE()->VertexAttrib1hvNV) -#define glVertexAttrib2hNV (_GET_TLS_PROCTABLE()->VertexAttrib2hNV) -#define glVertexAttrib2hvNV (_GET_TLS_PROCTABLE()->VertexAttrib2hvNV) -#define glVertexAttrib3hNV (_GET_TLS_PROCTABLE()->VertexAttrib3hNV) -#define glVertexAttrib3hvNV (_GET_TLS_PROCTABLE()->VertexAttrib3hvNV) -#define glVertexAttrib4hNV (_GET_TLS_PROCTABLE()->VertexAttrib4hNV) -#define glVertexAttrib4hvNV (_GET_TLS_PROCTABLE()->VertexAttrib4hvNV) -#define glVertexAttribs1hvNV (_GET_TLS_PROCTABLE()->VertexAttribs1hvNV) -#define glVertexAttribs2hvNV (_GET_TLS_PROCTABLE()->VertexAttribs2hvNV) -#define glVertexAttribs3hvNV (_GET_TLS_PROCTABLE()->VertexAttribs3hvNV) -#define glVertexAttribs4hvNV (_GET_TLS_PROCTABLE()->VertexAttribs4hvNV) -#define glPixelDataRangeNV (_GET_TLS_PROCTABLE()->PixelDataRangeNV) -#define glFlushPixelDataRangeNV (_GET_TLS_PROCTABLE()->FlushPixelDataRangeNV) -#define glPrimitiveRestartNV (_GET_TLS_PROCTABLE()->PrimitiveRestartNV) -#define glPrimitiveRestartIndexNV (_GET_TLS_PROCTABLE()->PrimitiveRestartIndexNV) -#define glMapObjectBufferATI (_GET_TLS_PROCTABLE()->MapObjectBufferATI) -#define glUnmapObjectBufferATI (_GET_TLS_PROCTABLE()->UnmapObjectBufferATI) -#define glStencilOpSeparateATI (_GET_TLS_PROCTABLE()->StencilOpSeparateATI) -#define glStencilFuncSeparateATI (_GET_TLS_PROCTABLE()->StencilFuncSeparateATI) -#define glVertexAttribArrayObjectATI (_GET_TLS_PROCTABLE()->VertexAttribArrayObjectATI) -#define glGetVertexAttribArrayObjectfvATI (_GET_TLS_PROCTABLE()->GetVertexAttribArrayObjectfvATI) -#define glGetVertexAttribArrayObjectivATI (_GET_TLS_PROCTABLE()->GetVertexAttribArrayObjectivATI) -#define glDepthBoundsEXT (_GET_TLS_PROCTABLE()->DepthBoundsEXT) -#define glBlendEquationSeparateEXT (_GET_TLS_PROCTABLE()->BlendEquationSeparateEXT) -#define glAddSwapHintRectWIN (_GET_TLS_PROCTABLE()->AddSwapHintRectWIN) -#ifdef _WIN32 -#define wglCreateBufferRegionARB (_GET_TLS_PROCTABLE()->CreateBufferRegionARB) -#define wglDeleteBufferRegionARB (_GET_TLS_PROCTABLE()->DeleteBufferRegionARB) -#define wglSaveBufferRegionARB (_GET_TLS_PROCTABLE()->SaveBufferRegionARB) -#define wglRestoreBufferRegionARB (_GET_TLS_PROCTABLE()->RestoreBufferRegionARB) -#define wglGetExtensionsStringARB (_GET_TLS_PROCTABLE()->GetExtensionsStringARB) -#define wglGetPixelFormatAttribivARB (_GET_TLS_PROCTABLE()->GetPixelFormatAttribivARB) -#define wglGetPixelFormatAttribfvARB (_GET_TLS_PROCTABLE()->GetPixelFormatAttribfvARB) -#define wglChoosePixelFormatARB (_GET_TLS_PROCTABLE()->ChoosePixelFormatARB) -#define wglMakeContextCurrentARB (_GET_TLS_PROCTABLE()->MakeContextCurrentARB) -#define wglGetCurrentReadDCARB (_GET_TLS_PROCTABLE()->GetCurrentReadDCARB) -#define wglCreatePbufferARB (_GET_TLS_PROCTABLE()->CreatePbufferARB) -#define wglGetPbufferDCARB (_GET_TLS_PROCTABLE()->GetPbufferDCARB) -#define wglReleasePbufferDCARB (_GET_TLS_PROCTABLE()->ReleasePbufferDCARB) -#define wglDestroyPbufferARB (_GET_TLS_PROCTABLE()->DestroyPbufferARB) -#define wglQueryPbufferARB (_GET_TLS_PROCTABLE()->QueryPbufferARB) -#define wglBindTexImageARB (_GET_TLS_PROCTABLE()->BindTexImageARB) -#define wglReleaseTexImageARB (_GET_TLS_PROCTABLE()->ReleaseTexImageARB) -#define wglSetPbufferAttribARB (_GET_TLS_PROCTABLE()->SetPbufferAttribARB) -#define wglCreateDisplayColorTableEXT (_GET_TLS_PROCTABLE()->CreateDisplayColorTableEXT) -#define wglLoadDisplayColorTableEXT (_GET_TLS_PROCTABLE()->LoadDisplayColorTableEXT) -#define wglBindDisplayColorTableEXT (_GET_TLS_PROCTABLE()->BindDisplayColorTableEXT) -#define wglDestroyDisplayColorTableEXT (_GET_TLS_PROCTABLE()->DestroyDisplayColorTableEXT) -#define wglGetExtensionsStringEXT (_GET_TLS_PROCTABLE()->GetExtensionsStringEXT) -#define wglMakeContextCurrentEXT (_GET_TLS_PROCTABLE()->MakeContextCurrentEXT) -#define wglGetCurrentReadDCEXT (_GET_TLS_PROCTABLE()->GetCurrentReadDCEXT) -#define wglCreatePbufferEXT (_GET_TLS_PROCTABLE()->CreatePbufferEXT) -#define wglGetPbufferDCEXT (_GET_TLS_PROCTABLE()->GetPbufferDCEXT) -#define wglReleasePbufferDCEXT (_GET_TLS_PROCTABLE()->ReleasePbufferDCEXT) -#define wglDestroyPbufferEXT (_GET_TLS_PROCTABLE()->DestroyPbufferEXT) -#define wglQueryPbufferEXT (_GET_TLS_PROCTABLE()->QueryPbufferEXT) -#define wglGetPixelFormatAttribivEXT (_GET_TLS_PROCTABLE()->GetPixelFormatAttribivEXT) -#define wglGetPixelFormatAttribfvEXT (_GET_TLS_PROCTABLE()->GetPixelFormatAttribfvEXT) -#define wglChoosePixelFormatEXT (_GET_TLS_PROCTABLE()->ChoosePixelFormatEXT) -#define wglSwapIntervalEXT (_GET_TLS_PROCTABLE()->SwapIntervalEXT) -#define wglGetSwapIntervalEXT (_GET_TLS_PROCTABLE()->GetSwapIntervalEXT) -#define wglAllocateMemoryNV (_GET_TLS_PROCTABLE()->AllocateMemoryNV) -#define wglFreeMemoryNV (_GET_TLS_PROCTABLE()->FreeMemoryNV) -#define wglGetSyncValuesOML (_GET_TLS_PROCTABLE()->GetSyncValuesOML) -#define wglGetMscRateOML (_GET_TLS_PROCTABLE()->GetMscRateOML) -#define wglSwapBuffersMscOML (_GET_TLS_PROCTABLE()->SwapBuffersMscOML) -#define wglSwapLayerBuffersMscOML (_GET_TLS_PROCTABLE()->SwapLayerBuffersMscOML) -#define wglWaitForMscOML (_GET_TLS_PROCTABLE()->WaitForMscOML) -#define wglWaitForSbcOML (_GET_TLS_PROCTABLE()->WaitForSbcOML) -#define wglGetDigitalVideoParametersI3D (_GET_TLS_PROCTABLE()->GetDigitalVideoParametersI3D) -#define wglSetDigitalVideoParametersI3D (_GET_TLS_PROCTABLE()->SetDigitalVideoParametersI3D) -#define wglGetGammaTableParametersI3D (_GET_TLS_PROCTABLE()->GetGammaTableParametersI3D) -#define wglSetGammaTableParametersI3D (_GET_TLS_PROCTABLE()->SetGammaTableParametersI3D) -#define wglGetGammaTableI3D (_GET_TLS_PROCTABLE()->GetGammaTableI3D) -#define wglSetGammaTableI3D (_GET_TLS_PROCTABLE()->SetGammaTableI3D) -#define wglEnableGenlockI3D (_GET_TLS_PROCTABLE()->EnableGenlockI3D) -#define wglDisableGenlockI3D (_GET_TLS_PROCTABLE()->DisableGenlockI3D) -#define wglIsEnabledGenlockI3D (_GET_TLS_PROCTABLE()->IsEnabledGenlockI3D) -#define wglGenlockSourceI3D (_GET_TLS_PROCTABLE()->GenlockSourceI3D) -#define wglGetGenlockSourceI3D (_GET_TLS_PROCTABLE()->GetGenlockSourceI3D) -#define wglGenlockSourceEdgeI3D (_GET_TLS_PROCTABLE()->GenlockSourceEdgeI3D) -#define wglGetGenlockSourceEdgeI3D (_GET_TLS_PROCTABLE()->GetGenlockSourceEdgeI3D) -#define wglGenlockSampleRateI3D (_GET_TLS_PROCTABLE()->GenlockSampleRateI3D) -#define wglGetGenlockSampleRateI3D (_GET_TLS_PROCTABLE()->GetGenlockSampleRateI3D) -#define wglGenlockSourceDelayI3D (_GET_TLS_PROCTABLE()->GenlockSourceDelayI3D) -#define wglGetGenlockSourceDelayI3D (_GET_TLS_PROCTABLE()->GetGenlockSourceDelayI3D) -#define wglQueryGenlockMaxSourceDelayI3D (_GET_TLS_PROCTABLE()->QueryGenlockMaxSourceDelayI3D) -#define wglCreateImageBufferI3D (_GET_TLS_PROCTABLE()->CreateImageBufferI3D) -#define wglDestroyImageBufferI3D (_GET_TLS_PROCTABLE()->DestroyImageBufferI3D) -#define wglAssociateImageBufferEventsI3D (_GET_TLS_PROCTABLE()->AssociateImageBufferEventsI3D) -#define wglReleaseImageBufferEventsI3D (_GET_TLS_PROCTABLE()->ReleaseImageBufferEventsI3D) -#define wglEnableFrameLockI3D (_GET_TLS_PROCTABLE()->EnableFrameLockI3D) -#define wglDisableFrameLockI3D (_GET_TLS_PROCTABLE()->DisableFrameLockI3D) -#define wglIsEnabledFrameLockI3D (_GET_TLS_PROCTABLE()->IsEnabledFrameLockI3D) -#define wglQueryFrameLockMasterI3D (_GET_TLS_PROCTABLE()->QueryFrameLockMasterI3D) -#define wglGetFrameUsageI3D (_GET_TLS_PROCTABLE()->GetFrameUsageI3D) -#define wglBeginFrameTrackingI3D (_GET_TLS_PROCTABLE()->BeginFrameTrackingI3D) -#define wglEndFrameTrackingI3D (_GET_TLS_PROCTABLE()->EndFrameTrackingI3D) -#define wglQueryFrameTrackingI3D (_GET_TLS_PROCTABLE()->QueryFrameTrackingI3D) -#endif /* _WIN32 */ - -#ifndef _APP_PROCTABLE - -/* - * Applications can replace the following function with its own function - * for accessing thread local proc/context dependent proc table. - * The following default function works for most applications which - * are using the same device for all their contexts - even if - * the contexts are on different threads. - */ - -static _inline _GLextensionProcs *_GET_TLS_PROCTABLE(void) - -{ - extern _GLextensionProcs _extensionProcs; - - return (&_extensionProcs); -} - -#else - -/* - * Application should replace this compiled function with - * an inlined function for maximum performance. - */ - -extern _GLextensionProcs *_GET_TLS_PROCTABLE(void); - -#endif - -/* - * Provide an initialization function for the application - * to initialize its own proc tables in case the application - * needs to use multiple proc tables. - */ - -static _inline void _InitExtensionProcs(_GLextensionProcs *appProcs) -{ - extern _GLextensionProcs _extensionProcs; - - *appProcs = _extensionProcs; -} - -#ifdef __cplusplus -} -#endif - - -#endif /* _GLPROCS_H_ */ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWin32.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWin32.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWin32.cpp 2012-10-21 18:10:13.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWin32.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,435 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "GLWin.h" - -#ifdef GL_WIN32_WINDOW - -LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static int nWindowWidth = 0, nWindowHeight = 0; - - switch (msg) - { - case WM_DESTROY: - PostQuitMessage(0); - return 0; - - case WM_KEYDOWN: -// switch(wParam) { -// case VK_ESCAPE: -// SendMessage(hWnd, WM_DESTROY, 0L, 0L); -// break; -// } - break; - - case WM_SIZE: - nWindowWidth = lParam & 0xffff; - nWindowHeight = lParam >> 16; - GLWin.UpdateWindowSize(nWindowWidth, nWindowHeight); - break; - - case WM_SIZING: - // if button is 0, then just released so can resize - if (GetSystemMetrics(SM_SWAPBUTTON) ? !GetAsyncKeyState(VK_RBUTTON) : !GetAsyncKeyState(VK_LBUTTON)) - { - SetDeviceSize(nWindowWidth, nWindowHeight); - } - break; - - case WM_SETCURSOR: - SetCursor(NULL); - break; - } - - return DefWindowProc(hWnd, msg, wParam, lParam); -} - -bool GLWindow::CreateWindow(void *pDisplay) -{ - RECT rc, rcdesktop; - rc.left = 0; - rc.top = 0; - rc.right = conf.width; - rc.bottom = conf.height; - - WNDCLASSEX wc; - HINSTANCE hInstance = GetModuleHandle(NULL); // Grab An Instance For Our Window - DWORD dwExStyle, dwStyle; - - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; // Redraw On Move, And Own DC For Window - wc.lpfnWndProc = (WNDPROC) MsgProc; // MsgProc Handles Messages - wc.cbClsExtra = 0; // No Extra Window Data - wc.cbWndExtra = 0; // No Extra Window Data - wc.hInstance = hInstance; // Set The Instance - wc.hIcon = NULL; - wc.hIconSm = NULL; // Load The Default Icon - wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Load The Arrow Pointer - wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // No Background Required For GL - wc.lpszMenuName = NULL; // We Don't Want A Menu - wc.lpszClassName = L"PS2EMU_ZEROGS"; // Set The Class Name - - RegisterClassEx(&wc); - - if (conf.fullscreen()) - { - dwExStyle = WS_EX_APPWINDOW; - dwStyle = WS_POPUP; - } - else - { - dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; - dwStyle = WS_OVERLAPPEDWINDOW | WS_BORDER; - } - - dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; - AdjustWindowRectEx(&rc, dwStyle, false, dwExStyle); - - GetWindowRect(GetDesktopWindow(), &rcdesktop); - - NativeWindow = CreateWindowEx( dwExStyle, // Extended Style For The Window - L"PS2EMU_ZEROGS", // Class Name - L"ZZOgl", // Window Title - dwStyle, // Selected Window Style - (rcdesktop.right - (rc.right - rc.left)) / 2, // Window Position - (rcdesktop.bottom - (rc.bottom - rc.top)) / 2, // Window Position - rc.right - rc.left, // Calculate Adjusted Window Width - rc.bottom - rc.top, // Calculate Adjusted Window Height - NULL, // No Parent Window - NULL, // No Menu - hInstance, // Instance - NULL); // Don't Pass Anything To WM_CREATE - - if (NativeWindow == NULL) - { - ZZLog::Error_Log("Failed to create window. Exiting..."); - return false; - } - - if (pDisplay != NULL) *(HWND*)pDisplay = NativeWindow; - - // set just in case - SetWindowLongPtr(NativeWindow, GWLP_WNDPROC, (LPARAM)(WNDPROC)MsgProc); - - ShowWindow(NativeWindow, SW_SHOWDEFAULT); - - UpdateWindow(NativeWindow); - - SetFocus(NativeWindow); - - if (pDisplay == NULL) ZZLog::Error_Log("Failed to create window. Exiting..."); - return (pDisplay != NULL); -} - -bool GLWindow::ReleaseContext() -{ - if (wglContext) // Do We Have A Rendering Context? - { - if (!wglMakeCurrent(NULL, NULL)) // Are We Able To Release The DC And RC Contexts? - { - MessageBox(NULL, L"Release Of DC And RC Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); - } - - if (!wglDeleteContext(wglContext)) // Are We Able To Delete The RC? - { - MessageBox(NULL, L"Release Rendering Context Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); - } - - wglContext = NULL; // Set RC To NULL - } - - CloseWGLDisplay(); - - return true; -} - -void GLWindow::CloseWindow() -{ - if (NativeWindow != NULL) - { - DestroyWindow(NativeWindow); - NativeWindow = NULL; - } -} - -bool GLWindow::DisplayWindow(int _width, int _height) -{ - DWORD dwExStyle; // Window Extended Style - DWORD dwStyle; // Window Style - - RECT rcdesktop; - GetWindowRect(GetDesktopWindow(), &rcdesktop); - - if (conf.fullscreen()) - { - backbuffer.w = rcdesktop.right - rcdesktop.left; - backbuffer.h = rcdesktop.bottom - rcdesktop.top; - - dwExStyle = WS_EX_APPWINDOW; - dwStyle = WS_POPUP; - ShowCursor(false); - } - else - { - dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; - dwStyle = WS_OVERLAPPEDWINDOW; - backbuffer.w = _width; - backbuffer.h = _height; - } - dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; - - RECT rc; - - rc.left = 0; - rc.top = 0; - rc.right = backbuffer.w; - rc.bottom = backbuffer.h; - AdjustWindowRectEx(&rc, dwStyle, false, dwExStyle); - int X = (rcdesktop.right - rcdesktop.left) / 2 - (rc.right - rc.left) / 2; - int Y = (rcdesktop.bottom - rcdesktop.top) / 2 - (rc.bottom - rc.top) / 2; - - SetWindowLong(NativeWindow, GWL_STYLE, dwStyle); - SetWindowLong(NativeWindow, GWL_EXSTYLE, dwExStyle); - - SetWindowPos(NativeWindow, HWND_TOP, X, Y, rc.right - rc.left, rc.bottom - rc.top, SWP_SHOWWINDOW); - - if (conf.fullscreen()) - { - DEVMODE dmScreenSettings; - memset(&dmScreenSettings, 0, sizeof(dmScreenSettings)); - dmScreenSettings.dmSize = sizeof(dmScreenSettings); - dmScreenSettings.dmPelsWidth = backbuffer.w; - dmScreenSettings.dmPelsHeight = backbuffer.h; - dmScreenSettings.dmBitsPerPel = 32; - dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; - - // Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar. - - if (ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - { - if (MessageBox(NULL, - L"The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?", - L"NeHe GL", - MB_YESNO | MB_ICONEXCLAMATION) == IDYES) - conf.setFullscreen(false); - else - return false; - } - } - else - { - // change to default resolution - ChangeDisplaySettings(NULL, 0); - } - - if (!OpenWGLDisplay()) return false; - - if (!CreateContextGL()) return false; - - UpdateWindow(NativeWindow); - - return true; -} - -bool GLWindow::OpenWGLDisplay() -{ - GLuint PixelFormat; // Holds The Results After Searching For A Match - PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be - - { - sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor - 1, // Version Number - PFD_DRAW_TO_WINDOW | // Format Must Support Window - PFD_SUPPORT_OPENGL | // Format Must Support OpenGL - PFD_DOUBLEBUFFER, // Must Support Double Buffering - PFD_TYPE_RGBA, // Request An RGBA Format - 32, // Select Our Color Depth - 0, 0, 0, 0, 0, 0, // Color Bits Ignored - 0, // 8bit Alpha Buffer - 0, // Shift Bit Ignored - 0, // No Accumulation Buffer - 0, 0, 0, 0, // Accumulation Bits Ignored - 24, // 24Bit Z-Buffer (Depth Buffer) - 8, // 8bit Stencil Buffer - 0, // No Auxiliary Buffer - PFD_MAIN_PLANE, // Main Drawing Layer - 0, // Reserved - 0, 0, 0 // Layer Masks Ignored - }; - - if (!(NativeDisplay = GetDC(NativeWindow))) - { - MessageBox(NULL, L"(1) Can't Create A GL Device Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); - return false; - } - - if (!(PixelFormat = ChoosePixelFormat(NativeDisplay, &pfd))) - { - MessageBox(NULL, L"(2) Can't Find A Suitable PixelFormat.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); - return false; - } - - if (!SetPixelFormat(NativeDisplay, PixelFormat, &pfd)) - { - MessageBox(NULL, L"(3) Can't Set The PixelFormat.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); - return false; - } - - return true; -} - -void GLWindow::CloseWGLDisplay() -{ - if (NativeDisplay && !ReleaseDC(NativeWindow, NativeDisplay)) // Are We Able To Release The DC - { - MessageBox(NULL, L"Release Device Context Failed.", L"SHUTDOWN ERROR", MB_OK | MB_ICONINFORMATION); - NativeDisplay = NULL; // Set DC To NULL - } -} - -bool GLWindow::CreateContextGL() -{ - return CreateContextGL(2, 0); -} - -bool GLWindow::CreateContextGL(int major, int minor) -{ - if (major <= 2) { - if (!(wglContext = wglCreateContext(NativeDisplay))) - { - MessageBox(NULL, L"(4) Can't Create A GL Rendering Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); - return false; - } - - if (!wglMakeCurrent(NativeDisplay, wglContext)) - { - MessageBox(NULL, L"(5) Can't Activate The GL Rendering Context.", L"ERROR", MB_OK | MB_ICONEXCLAMATION); - return false; - } - } else { - // todo - return false; - } - - return true; -} - -void GLWindow::SwapGLBuffers() -{ - static u32 lastswaptime = 0; - - if (glGetError() != GL_NO_ERROR) ZZLog::Debug_Log("glError before swap!"); - - SwapBuffers(NativeDisplay); - lastswaptime = timeGetTime(); -} - -void GLWindow::SetTitle(char *strtitle) -{ - if (!conf.fullscreen()) SetWindowText(NativeWindow, wxString::FromUTF8(strtitle)); -} - -extern void ChangeDeviceSize(int nNewWidth, int nNewHeight); - -void GLWindow::ProcessEvents() -{ - MSG msg; - - ZeroMemory(&msg, sizeof(msg)); - - while (1) - { - if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - switch (msg.message) - { - case WM_KEYDOWN : - int my_KeyEvent = msg.wParam; - bool my_bShift = !!(GetKeyState(VK_SHIFT) & 0x8000); - - switch (msg.wParam) - { - case VK_F5: - case VK_F6: - case VK_F7: - case VK_F9: - OnFKey(msg.wParam - VK_F1 + 1, my_bShift); - break; - - case VK_ESCAPE: - - if (conf.fullscreen()) - { - // destroy that msg - conf.setFullscreen(false); - ChangeDeviceSize(conf.width, conf.height); - UpdateWindow(NativeWindow); - continue; // so that msg doesn't get sent - } - else - { - SendMessage(NativeWindow, WM_DESTROY, 0, 0); - return; - } - - break; - } - - break; - } - - TranslateMessage(&msg); - DispatchMessage(&msg); - } - else - { - break; - } - } - - if ((GetKeyState(VK_MENU) & 0x8000) && (GetKeyState(VK_RETURN) & 0x8000)) - { - conf.zz_options.fullscreen = !conf.zz_options.fullscreen; - - SetDeviceSize( - (conf.fullscreen()) ? 1280 : conf.width, - (conf.fullscreen()) ? 960 : conf.height); - } -} - -void* GLWindow::GetProcAddress(const char* function) -{ - return (void*)wglGetProcAddress(function); -} - -void GLWindow::InitVsync(bool extension) -{ - vsync_supported = extension; -} - -void GLWindow::SetVsync(bool enable) -{ - if (vsync_supported) { - wglSwapIntervalEXT(0); - } -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWin.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWin.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWin.h 2013-12-23 13:35:48.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWin.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,151 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef GLWIN_H_INCLUDED -#define GLWIN_H_INCLUDED - -#ifdef _WIN32 -#define GL_WIN32_WINDOW -#define WGL_API - -#else - -#define GL_X11_WINDOW -#include -#include - -#ifdef EGL_API -#include -#include - -#else -#define GLX_API -#include - -#endif - -#endif - -// FIX compilation issue with Mesa 10 -// Note it might be possible to do better with the right include -// in the rigth order but I don't have time -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#undef CreateWindow // Undo Windows.h global namespace pollution - -#ifdef GLX_API -typedef void (APIENTRYP _PFNSWAPINTERVAL)(int); -#endif - - -extern void SetDeviceSize(int nNewWidth, int nNewHeight); -extern void OnFKey(int key, int shift); - -class GLWindow -{ - private: -#if defined(GL_X11_WINDOW) - void GetWindowSize(); - void PrintProtocolVersion(); -#endif - bool CreateContextGL(int, int); - bool CreateContextGL(); - -#ifdef GLX_API - Display *NativeDisplay; - Window NativeWindow; - - GLXContext glxContext; - - _PFNSWAPINTERVAL swapinterval; -#endif - -#ifdef EGL_API - EGLNativeWindowType NativeWindow; - EGLNativeDisplayType NativeDisplay; - - EGLDisplay eglDisplay; - EGLSurface eglSurface; - EGLContext eglContext; - - - EGLBoolean OpenEGLDisplay(); - void CloseEGLDisplay(); -#endif - -#ifdef WGL_API - HWND NativeWindow; - HDC NativeDisplay; // hDC // Private GDI Device Context - HGLRC wglContext; // hRC // Permanent Rendering Context - - bool OpenWGLDisplay(); - void CloseWGLDisplay(); -#endif - - bool vsync_supported; - - - public: - char title[256]; - Size backbuffer; - - void SwapGLBuffers(); - bool ReleaseContext(); - - bool CreateWindow(void *pDisplay); - void CloseWindow(); - bool DisplayWindow(int _width, int _height); - void SetTitle(char *strtitle); - void ProcessEvents(); - - void* GetProcAddress(const char* function); - - void SetVsync(bool enable); - void InitVsync(bool extension); // dummy in EGL - - void UpdateWindowSize(int nNewWidth, int nNewHeight) - { - FUNCLOG - backbuffer.w = std::max(nNewWidth, 16); - backbuffer.h = std::max(nNewHeight, 16); - - if (!(conf.fullscreen())) - { - conf.width = nNewWidth; - conf.height = nNewHeight; - } - } - - GLWindow() { -#ifdef WGL_API - NativeWindow = NULL; - NativeDisplay = NULL; - wglContext = NULL; -#endif - } -}; - -extern GLWindow GLWin; - -#endif // GLWIN_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWinX11.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWinX11.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GLWinX11.cpp 2014-07-19 15:15:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GLWinX11.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,508 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "Util.h" -#include "GLWin.h" - -#if defined(GL_X11_WINDOW) - -#ifdef EGL_API -// Need at least MESA 9.0 (plan for october/november 2012) -// So force the destiny to at least check the compilation -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#endif -#endif - -#ifdef USE_GSOPEN2 -bool GLWindow::CreateWindow(void *pDisplay) -{ - bool ret = true; - - NativeWindow = (Window)*((u32*)(pDisplay)+1); - // Do not take the display which come from pcsx2 neither change it. - // You need a new one to do the operation in the GS thread - NativeDisplay = XOpenDisplay(NULL); - if (!NativeDisplay) ret = false; - -#ifdef EGL_API - if (!OpenEGLDisplay()) ret = false; -#endif - - return ret; -} -#else -bool GLWindow::CreateWindow(void *pDisplay) -{ - bool ret = true; - - // init support of multi thread - if (!XInitThreads()) - ZZLog::Error_Log("Failed to init the xlib concurent threads"); - - NativeDisplay = XOpenDisplay(NULL); - if (!NativeDisplay) ret = false; - - if (pDisplay == NULL) - { - ZZLog::Error_Log("Failed to create window. Exiting..."); - return false; - } - - // Allow pad to use the display - *(Display**)pDisplay = NativeDisplay; - // Pad can use the window to grab the input. For the moment just set to 0 to avoid - // to grab an unknow window... Anyway GSopen1 might be dropped in the future - *((u32*)(pDisplay)+1) = 0; - -#ifdef EGL_API - if (!OpenEGLDisplay()) ret = false; -#endif - - return ret; -} -#endif - -#ifdef EGL_API -EGLBoolean GLWindow::OpenEGLDisplay() -{ - // Create an EGL display from the native display - eglDisplay = eglGetDisplay((EGLNativeDisplayType)NativeDisplay); - if ( eglDisplay == EGL_NO_DISPLAY ) return EGL_FALSE; - - if ( !eglInitialize(eglDisplay, NULL, NULL) ) return EGL_FALSE; - - return EGL_TRUE; -} -#endif - -#ifdef EGL_API -void GLWindow::CloseEGLDisplay() -{ - eglTerminate(eglDisplay); -} -#endif - -bool GLWindow::ReleaseContext() -{ - bool status = true; -#ifdef GLX_API - if (!NativeDisplay) return status; - - // free the context - if (glxContext) - { - if (!glXMakeCurrent(NativeDisplay, None, NULL)) { - ZZLog::Error_Log("GLX: Could not release drawing context."); - status = false; - } - - glXDestroyContext(NativeDisplay, glxContext); - glxContext = NULL; - } -#endif -#ifdef EGL_API - eglReleaseThread(); -#endif - - return status; -} - -void GLWindow::CloseWindow() -{ - SaveConfig(); - if (!NativeDisplay) return; - -#ifdef EGL_API - CloseEGLDisplay(); -#endif - - XCloseDisplay(NativeDisplay); - NativeDisplay = NULL; -} - -void GLWindow::GetWindowSize() -{ - if (!NativeDisplay or !NativeWindow) return; - - u32 depth = 0; -#ifdef GLX_API - unsigned int borderDummy; - Window winDummy; - s32 xDummy; - s32 yDummy; - u32 width; - u32 height; - - XLockDisplay(NativeDisplay); - XGetGeometry(NativeDisplay, NativeWindow, &winDummy, &xDummy, &yDummy, &width, &height, &borderDummy, &depth); - XUnlockDisplay(NativeDisplay); -#endif - - // FIXME: Not sure it works but that could remove latest X11 bits. -#ifdef EGL_API - int width; - int height; - eglQuerySurface(eglDisplay, eglSurface, EGL_WIDTH, &width); - eglQuerySurface(eglDisplay, eglSurface, EGL_HEIGHT, &height); -#endif - - // update the gl buffer size - UpdateWindowSize(width, height); - -#ifndef USE_GSOPEN2 - // too verbose! - ZZLog::Dev_Log("Resolution %dx%d. Depth %d bpp. Position (%d,%d)", width, height, depth, conf.x, conf.y); -#endif -} - -void GLWindow::PrintProtocolVersion() -{ -#ifdef GLX_API - int glxMajorVersion, glxMinorVersion; - - glXQueryVersion(NativeDisplay, &glxMajorVersion, &glxMinorVersion); - - if (glXIsDirect(NativeDisplay, glxContext)) - ZZLog::Error_Log("glX-Version %d.%d with Direct Rendering", glxMajorVersion, glxMinorVersion); - else - ZZLog::Error_Log("glX-Version %d.%d with Indirect Rendering !!! It will be slow", glxMajorVersion, glxMinorVersion); -#endif -#ifdef EGL_API - ZZLog::Error_Log("EGL: %s : %s", eglQueryString(eglDisplay, EGL_VENDOR) , eglQueryString(eglDisplay, EGL_VERSION) ); - ZZLog::Error_Log("EGL: extensions supported: %s", eglQueryString(eglDisplay, EGL_EXTENSIONS)); -#endif -} - -#ifdef GLX_API -bool GLWindow::CreateContextGL(int major, int minor) -{ - if (!NativeDisplay) return false; - - // Get visual information - int attrListDbl[] = - { - // GLX_X_RENDERABLE: If True is specified, then only frame buffer configurations that have associated X - // visuals (and can be used to render to Windows and/or GLX pixmaps) will be considered. The default value is GLX_DONT_CARE. - GLX_X_RENDERABLE , True, - GLX_RED_SIZE , 8, - GLX_GREEN_SIZE , 8, - GLX_BLUE_SIZE , 8, - GLX_DEPTH_SIZE , 24, - GLX_DOUBLEBUFFER , True, - None - }; - - // Attribute are very sensible to the various implementation (intel, nvidia, amd) - // Nvidia and Intel doesn't support previous attributes for opengl2.0 - int attrListDbl_2_0[] = - { - GLX_RGBA, - GLX_DOUBLEBUFFER, - GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, - GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, - None - }; - - // Only keep for older card but NVIDIA and AMD both drop the support of those cards - if (major <= 2) { - XVisualInfo *vi = glXChooseVisual(NativeDisplay, DefaultScreen(NativeDisplay), attrListDbl_2_0); - if (vi == NULL) return false; - - glxContext = glXCreateContext(NativeDisplay, vi, NULL, GL_TRUE); - XFree(vi); - - if (!glxContext) return false; - - glXMakeCurrent(NativeDisplay, NativeWindow, glxContext); - return true; - } - - PFNGLXCHOOSEFBCONFIGPROC glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)GetProcAddress("glXChooseFBConfig"); - int fbcount = 0; - GLXFBConfig *fbc = glXChooseFBConfig(NativeDisplay, DefaultScreen(NativeDisplay), attrListDbl, &fbcount); - if (!fbc || fbcount < 1) { - ZZLog::Error_Log("GLX: failed to find a framebuffer"); - return false; - } - - PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)GetProcAddress("glXCreateContextAttribsARB"); - if (!glXCreateContextAttribsARB) return false; - - // Create a context - int context_attribs[] = - { - GLX_CONTEXT_MAJOR_VERSION_ARB, major, - GLX_CONTEXT_MINOR_VERSION_ARB, minor, - // Keep compatibility for old cruft - GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, - //GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB | GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, - // FIXME : Request a debug context to ease opengl development -#if (defined(ZEROGS_DEVBUILD) || defined(_DEBUG)) && defined(OGL4_LOG) - GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB, -#endif - None - }; - - glxContext = glXCreateContextAttribsARB(NativeDisplay, fbc[0], 0, true, context_attribs); - if (!glxContext) { - ZZLog::Error_Log("GLX: failed to create an opengl context"); - return false; - } - - XSync( NativeDisplay, false); - - if (!glXMakeCurrent(NativeDisplay, NativeWindow, glxContext)) { - ZZLog::Error_Log("GLX: failed to attach the opengl context"); - return false; - } - - return true; -} -#endif - -bool GLWindow::CreateContextGL() -{ - bool ret; -#if defined(OGL4_LOG) || defined(GLSL4_API) - // We need to define a debug context. So we need at a 3.0 context (if not 3.2 actually) - ret = CreateContextGL(3, 3); -#else - // FIXME there was some issue with previous context creation on Geforce7. Code was rewritten - // for GSdx unfortunately it was not tested on Geforce7 so keep the 2.0 context for now. - // Note: Geforce 6&7 was dropped from nvidia driver (2012) -#if 0 - ret = CreateContextGL(3, 0) - if (! ret ) - ret = CreateContextGL(2, 0); -#else - ret = CreateContextGL(2, 0); -#endif - -#endif - return ret; -} - -#ifdef EGL_API -bool GLWindow::CreateContextGL(int major, int minor) -{ - EGLConfig eglConfig; - EGLint numConfigs; - EGLint contextAttribs[] = - { - EGL_CONTEXT_MAJOR_VERSION_KHR, major, - EGL_CONTEXT_MINOR_VERSION_KHR, minor, - // Keep compatibility for old cruft - EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR, EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR, - //EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR | EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR, - // FIXME : Request a debug context to ease opengl development -#if defined(ZEROGS_DEVBUILD) || defined(_DEBUG) - EGL_CONTEXT_FLAGS_KHR, EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR, -#endif - EGL_NONE - }; - EGLint attrList[] = { - EGL_RED_SIZE, 8, - EGL_GREEN_SIZE, 8, - EGL_BLUE_SIZE, 8, - EGL_DEPTH_SIZE, 24, - EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, - EGL_NONE - }; - - eglBindAPI(EGL_OPENGL_API); - - if ( !eglChooseConfig(eglDisplay, attrList, &eglConfig, 1, &numConfigs) ) - { - ZZLog::Error_Log("EGL: Failed to get a frame buffer config!"); - return EGL_FALSE; - } - - eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, NativeWindow, NULL); - if ( eglSurface == EGL_NO_SURFACE ) - { - ZZLog::Error_Log("EGL: Failed to get a window surface"); - return EGL_FALSE; - } - - eglContext = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, contextAttribs ); - if ( eglContext == EGL_NO_CONTEXT ) - { - ZZLog::Error_Log("EGL: Failed to create the context"); - ZZLog::Error_Log("EGL STATUS: %x", eglGetError()); - return EGL_FALSE; - } - - if ( !eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext) ) - { - return EGL_FALSE; - } - - return EGL_TRUE; -} -#endif - - -#ifdef USE_GSOPEN2 -bool GLWindow::DisplayWindow(int _width, int _height) -{ - GetWindowSize(); - - if ( !CreateContextGL() ) return false; - - PrintProtocolVersion(); - - return true; -} -#else -bool GLWindow::DisplayWindow(int _width, int _height) -{ - backbuffer.w = _width; - backbuffer.h = _height; - - NativeWindow = XCreateSimpleWindow(NativeDisplay, DefaultRootWindow(NativeDisplay), conf.x, conf.y, backbuffer.w, backbuffer.h, 0, 0, 0); - - // Draw the window - XMapRaised(NativeDisplay, NativeWindow); - XSync(NativeDisplay, false); - - if ( !CreateContextGL() ) return false; - - PrintProtocolVersion(); - - GetWindowSize(); - - return true; -} -#endif - -void* GLWindow::GetProcAddress(const char *function) -{ -#ifdef EGL_API - return (void*)eglGetProcAddress(function); -#endif -#ifdef GLX_API - return (void*)glXGetProcAddress((const GLubyte*)function); -#endif -} - -void GLWindow::SwapGLBuffers() -{ - if (glGetError() != GL_NO_ERROR) ZZLog::Debug_Log("glError before swap!"); - ZZLog::Check_GL_Error(); - -#ifdef GLX_API - glXSwapBuffers(NativeDisplay, NativeWindow); -#endif -#ifdef EGL_API - eglSwapBuffers(eglDisplay, eglSurface); -#endif - // glClear(GL_COLOR_BUFFER_BIT); -} - -void GLWindow::InitVsync(bool extension) -{ -#ifdef GLX_API - vsync_supported = false; - if (extension) { - swapinterval = (_PFNSWAPINTERVAL)GetProcAddress("glXSwapInterval"); - - if (!swapinterval) - swapinterval = (_PFNSWAPINTERVAL)GetProcAddress("glXSwapIntervalSGI"); - - if (!swapinterval) - swapinterval = (_PFNSWAPINTERVAL)GetProcAddress("glXSwapIntervalEXT"); - - if (swapinterval) { - swapinterval(0); - vsync_supported = true; - } else { - ZZLog::Error_Log("GLX: No support for SwapInterval (framerate clamped to monitor refresh rate),"); - } - } - -#endif -} - -void GLWindow::SetVsync(bool enable) -{ - fprintf(stderr, "change vsync %d\n", enable); -#ifdef EGL_API - eglSwapInterval(eglDisplay, enable); -#endif -#ifdef GLX_API - if (vsync_supported && swapinterval) { - swapinterval(enable); - } -#endif -} - -u32 THR_KeyEvent = 0; // Value for key event processing between threads -bool THR_bShift = false; -bool THR_bCtrl = false; - -void GLWindow::ProcessEvents() -{ - FUNCLOG - -#ifdef USE_GSOPEN2 - GetWindowSize(); -#endif - - if (THR_KeyEvent) // This value was passed from GSKeyEvents which could be in another thread - { - int my_KeyEvent = THR_KeyEvent; - bool my_bShift = THR_bShift; - bool my_bCtrl = THR_bCtrl; - THR_KeyEvent = 0; - - switch (my_KeyEvent) - { - case XK_F5: - case XK_F6: - case XK_F7: - case XK_F9: - // Note: to avoid some clash with PCSX2 shortcut in GSOpen2. - // GS shortcut will only be activated when ctrl is press - if (my_bCtrl) - OnFKey(my_KeyEvent - XK_F1 + 1, my_bShift); - break; - } - } -} - - -// ************************** Function that are useless in GSopen2 (GSopen 1 is only used with the debug replayer) -void GLWindow::SetTitle(char *strtitle) { } - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSDump.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSDump.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSDump.cpp 2012-10-19 20:27:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSDump.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "GSDump.h" - -GSDump::GSDump() - : m_gs(NULL) - , m_frames(0) -{ -} - -GSDump::~GSDump() -{ - Close(); -} - -void GSDump::Open(const string& fn, u32 crc, const freezeData& fd, u8* regs) -{ - if (m_gs) return; - - m_gs = fopen(fn.c_str(), "wb"); - - m_frames = 0; - - if(m_gs) - { - fwrite(&crc, 4, 1, m_gs); - fwrite(&fd.size, 4, 1, m_gs); - fwrite(fd.data, fd.size, 1, m_gs); - fwrite(regs, 0x2000, 1, m_gs); - } -} - -void GSDump::Close() -{ - if(m_gs) { - fclose(m_gs); - m_gs = NULL; - fprintf(stderr, "Closing GS dump"); - } -} - -void GSDump::Transfer(int index, const u32* mem, size_t size, u32 real_size) -{ - if(m_gs && size > 0) - { - fputc(0, m_gs); - fputc(index, m_gs); - fwrite(&size, 4, 1, m_gs); - fwrite(&real_size, 4, 1, m_gs); - fwrite(mem, size, 1, m_gs); - } -} - -void GSDump::ReadFIFO(u32 size) -{ - if(m_gs && size > 0) - { - fputc(2, m_gs); - fwrite(&size, 4, 1, m_gs); - } -} - -void GSDump::VSync(int field, bool last, u8* regs) -{ - if(m_gs) - { - fputc(3, m_gs); - fwrite(regs, 0x2000, 1, m_gs); - - fputc(1, m_gs); - fwrite(&field, 4, 1, m_gs); - - if((++m_frames & 1) == 0 && last) - { - Close(); - } - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSDump.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSDump.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSDump.h 2012-10-19 20:27:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSDump.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2007-2009 Gabest - * http://www.gabest.org - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#pragma once - -#include "Util.h" - -using namespace std; - -/* - -Dump file format: -- [crc/4] [state size/4] [state data/size] [PMODE/0x2000] [id/1] [data/?] .. [id/1] [data/?] - -Transfer data (id == 0) -- [0/1] [path index/1] [size/4] [data/size] - -VSync data (id == 1) -- [1/1] [field/1] - -ReadFIFO2 data (id == 2) -- [2/1] [size/?] - -Regs data (id == 3) -- [PMODE/0x2000] - -*/ - -class GSDump -{ - FILE* m_gs; - int m_frames; - -public: - GSDump(); - virtual ~GSDump(); - - void Open(const string& fn, u32 crc, const freezeData& fd, u8* regs); - void Close(); - void ReadFIFO(u32 size); - void Transfer(int index, const u32* mem, size_t size, u32 real_size); - void VSync(int field, bool last, u8* regs); - operator bool() {return m_gs != NULL;} -}; - -extern GSDump g_dump; - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GS.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GS.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GS.h 2014-06-13 20:38:04.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GS.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,1136 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __GS_H__ -#define __GS_H__ - - -#define ZZNORMAL_MEMORY - -#include "Util.h" -#include "GifTransfer.h" -#include "HostMemory.h" -#include "ZZoglShoots.h" - -using namespace std; - -extern float fFPS; - -#ifdef _MSC_VER -#define EXPORT_C_(type) extern "C" type CALLBACK -#else -#define EXPORT_C_(type) extern "C" __attribute__((externally_visible,visibility("default"))) type -#endif - -extern int g_LastCRC; - -#define VB_NUMBUFFERS 128 // number of vbo buffer allocated - -struct Vector_16F -{ - u16 x, y, z, w; -}; - -// PS2 vertex - -// Almost same as VertexGPU, controlled by prim.fst flags - -struct Vertex -{ - u16 x, y, f, resv0; // note: xy is 12d3 - u32 rgba; - u32 z; - float s, t, q; - // Texel coordinate of vertex. Used if prim.fst == 1 - // Bits 0-14 and 16-30 of UV - u16 u, v; -}; - -struct VertexGPU -{ - // gained from XYZ2, XYZ3, XYZF2, XYZF3, - // X -- bits 0-15, Y-16-31. Z - 32-63 if no F used, 32-55 otherwise, F (fog) - 56-63 - // X, Y stored in 12d3 format, - s16 x, y; - s16 f, resv0; - - // Vertex color settings. RGB -- luminance of red/green/blue, A -- alpha. 1.0 == 0x80. - // Goes grom RGBAQ register, bits 0-7, 8-15, 16-23 and 24-31 accordingly - u32 rgba; - u32 z; - // Texture coordinates. S & T going from ST register (bits 0-31, and 32-63). - // Q goes from RGBAQ register, bits 32-63 - float s, t, q; - - void move_x(Vertex v, int offset) - { - x = ((((int)v.x - offset) >> 1) & 0xffff); - } - - void move_y(Vertex v, int offset) - { - y = ((((int)v.y - offset) >> 1) & 0xffff); - } - - void move_z(Vertex v, int mask) - { - z = (mask == 0xffff) ? min((u32)0xffff, v.z) : v.z; - } - - void move_fog(Vertex v) - { - f = ((s16)(v).f << 7) | 0x7f; - } - - void set_xy(s16 x1, s16 y1) - { - x = x1; - y = y1; - } - void set_xyz(s16 x1, s16 y1, u32 z1) - { - x = x1; - y = y1; - z = z1; - } - - void set_st(float s1, float t1) - { - s = s1; - t = t1; - } - - void set_stq(float s1, float t1, float q1) - { - s = s1; - t = t1; - q = q1; - } - - void set_xyzst(s16 x1, s16 y1, u32 z1, float s1, float t1) - { - set_xyz(x1, y1, z1); - set_st(s1, t1); - } - -}; - -extern GSconf conf; - -// PSM values -// PSM types == Texture Storage Format -enum PSM_value{ - PSMCT32 = 0, // 000000 - PSMCT24 = 1, // 000001 - PSMCT16 = 2, // 000010 - PSMCT16S = 10, // 001010 - PSMT8 = 19, // 010011 - PSMT4 = 20, // 010100 - PSMT8H = 27, // 011011 - PSMT4HL = 36, // 100100 - PSMT4HH = 44, // 101100 - PSMT32Z = 48, // 110000 - PSMT24Z = 49, // 110001 - PSMT16Z = 50, // 110010 - PSMT16SZ = 58, // 111010 - - PSMT_BAD_PSM = 63 // for every unknown psm. -}; - -// Check target bit mode. PSMCT32 and 32Z return 0, 24 and 24Z - 1 -// 16, 16S, 16Z, 16SZ -- 2, PSMT8 and 8H - 3, PSMT4, 4HL, 4HH -- 4. -// This code returns the same value on Z-textures, so texel storage mode is (BITMODE and !ISZTEX). -inline int PSMT_BITMODE(int psm) {return (psm & 0x7);} - -template -inline int PSM_BITMODE() {return (psm & 0x7);} - -inline int PSMT_BITS_NUM(int psm) -{ - // Treat these as 32 bit. - if ((psm == PSMT8H) || (psm == PSMT4HL) || (psm == PSMT4HH)) - { - return 4; - } - - switch (PSMT_BITMODE(psm)) - { - case 4: - return 0; - - case 3: - return 1; - - case 2: - return 2; - - default: - return 4; - } -} - -// CLUT = Color look up table. Set proper color to table according CLUT table. -// Used for PSMT8, PSMT8H, PSMT4, PSMT4HH, PSMT4HL textures -inline bool PSMT_ISCLUT(int psm) { return (PSMT_BITMODE(psm) > 2);} - -// Check to see if it is 32 bits. According to code comments, anyways. -// I'll have to look closer at it, because it'd seem like it'd return true for 24 bits. -// Note: the function only works for clut format. Clut PSM is 4 bits only. The possible value are PSMCT32, PSMCT16, PSMCT16S -inline bool PSMT_IS32BIT(int psm) {return !!(psm <= 1);} - -// PSMCT16, PSMCT16S, PSMT16Z, PSMT16SZ is 16-bit targets and usually there is -// two of them in each 32-bit word. -inline bool PSMT_IS16BIT(int psm) { return (PSMT_BITMODE(psm) == 2);} - -template -inline bool PSM_IS16BIT() { return ((psm & 0x7) == 2);} - -// PSM16Z and PSMT16SZ use -1 offset to z-buff. Need to check this thesis. -inline bool PSMT_IS16Z(int psm) {return ((psm & 0x32) == 0x32);} - -// PSMT32Z, PSMT24Z, PSMT16Z, PSMT16SZ is Z-buffer textures -inline bool PSMT_ISZTEX(int psm) {return ((psm & 0x30) == 0x30);} - -// PSMCT16, PSMCT16S, PSMT8, PSMT8H, PSMT16Z and PSMT16SZ use only half 16 bit per pixel. -inline bool PSMT_ISHALF(int psm) {return ((psm & 2) == 2);} - -template -inline bool PSM_ISHALF() {return (psm & 2);} - -// PSMT8 and PSMT8H use IDTEX8 CLUT, PSMT4H, PSMT4HL, PSMT4HH -- IDTEX4. -// Don't use it on non clut entries, please! -inline bool PSMT_IS8CLUT(int psm) {return ((psm & 3) == 3);} - -// When color format is RGB24 (PSMCT24) or RGBA16 (PSMCT16 & 16S) alpha value expanded, based on -// TEXA register and AEM status. -inline int PSMT_ALPHAEXP(int psm) {return (psm == PSMCT24 || psm == PSMCT16 || psm == PSMCT16S);} - -// Check, how many pixels would be stored in side. So 32 and 24 is 32-bit's (1 pixel), -// 16, 16S -- 16 bit's (2 pixels), 8 and 8H -- 4 pixels, and 4 -- 8 pixels. -inline int PSMT_BITCOUNT(int psm) {return (PSMT_BITMODE(psm) == 0) ? 1 : 1 << (PSMT_BITMODE(psm) - 1); } - -template -inline int PSM_BITCOUNT() {return (PSM_BITMODE() == 0) ? 1 : 1 << (PSM_BITMODE() - 1); } - -// This function updates the 6th and 5th bit of psm -// 00 or 11 -> 00 ; 01 -> 10 ; 10 -> 01 -inline int Switch_Top_Bytes (int X) -{ - if ( ( X & 0x30 ) == 0 ) - return X; - else - return (X ^ 0x30); -} - -// How many pixel stored in 1 word. -// PSMT8 has 4 pixels per 32bit, PSMT4 has 8. All 16-bit textures are 2 pixel per bit. And all others are 1 pixel in texture. -inline int PIXELS_PER_WORD(int psm) -{ - if (psm == PSMT8) - return 4; - if (psm == PSMT4) - return 8; - if (PSMT_IS16BIT(psm)) - return 2; - return 1; -} - -template -inline int PSM_PIXELS_PER_WORD() -{ - if (psm == PSMT8) - return 4; - if (psm == PSMT4) - return 8; - if (PSM_IS16BIT()) - return 2; - return 1; -} - -// Some psm does not have all pixels in memory. -template -inline bool PSM_NON_FULL_WORD() -{ - return ((psm == PSMCT24) || (psm == PSMT24Z) || (psm == PSMT8H) || (psm == PSMT4HL) || (psm == PSMT4HH)); -} - -inline bool PSM_NON_FULL_WORD(int psm) -{ - return ((psm == PSMCT24) || (psm == PSMT24Z) || (psm == PSMT8H) || (psm == PSMT4HL) || (psm == PSMT4HH)); -} - -template -inline int PSM_PIXEL_SHIFT() -{ - if (!PSM_NON_FULL_WORD()) - return 0; - switch (psm) { - case PSMCT24: - case PSMT24Z: - return 0; - case PSMT8H: - case PSMT4HL: - return 24; - case PSMT4HH: - return 28; - default: return 0; - } -} - -template -inline int PSM_BITS_PER_PIXEL() -{ - switch (psm & 0x7) { - case 0: return 32; - case 1: return 24; - case 2: return 16; - case 3: return 8; - case 4: return 4; - default: return 0; - } -} - -// Some storage formats could share the same memory block (2 textures in 1 format). This include following combinations: -// PSMT24(24Z) with either 8H, 4HL, 4HH and PSMT4HL with PSMT4HH. -// We use slightly different versions of this function on comparison with GSDX, Storage format XOR 0x30 made Z-textures -// similar to normal ones and change higher bits on short (8 and 4 bits) textures. -inline bool PSMT_HAS_SHARED_BITS (int fpsm, int tpsm) { - int SUM = Switch_Top_Bytes(fpsm) + Switch_Top_Bytes(tpsm) ; - return (SUM == 0x15 || SUM == 0x1D || SUM == 0x2C || SUM == 0x30); -} - -// If a clut is in 32-bit color, its size is 4 bytes, and 16-bit clut has a 2 byte size. -inline int CLUT_PIXEL_SIZE(int cpsm) {return ((cpsm <= 1) ? 4 : 2); } - -inline void PSMT_SET_BLOCK_SIZE (int psm, int& W, int&H, int& ppw) { - switch (PIXELS_PER_WORD(psm)) { - case 8: - W = 128; H = 128; ppw = 8; - case 4: - W = 128; H = 64; ppw = 4; - case 2: - W = 64; H = 64; ppw = 2; - default: - W = 32; H = 64; ppw = 1; - } -} - -template -inline int PSM_PIXELS_STORED_PER_WORD() -{ - return 32 / PSM_BITS_PER_PIXEL(); -} - -template -inline int PSM_BYTS_LOAD_PER_WRITE() -{ - if (psm == PSMCT24 || psm == PSMT24Z) return 3; - return 4; -} - - -//----------------------- Data from registers ----------------------- - -typedef union -{ - s64 SD; - u64 UD; - s32 SL[2]; - u32 UL[2]; - s16 SS[4]; - u16 US[4]; - s8 SC[8]; - u8 UC[8]; -} reg64; - -/* general purpose regs structs */ - -typedef struct -{ - int fbp; - int fbw; - int fbh; - int psm; - u32 fbm; -} frameInfo; - -// Create frame structure from known data -inline frameInfo CreateFrame(int fbp, int fbw, int fbh, int psm, u32 fbm) -{ - frameInfo frame; - frame.fbp = fbp; - frame.fbw = fbw; - frame.fbh = fbh; - frame.psm = psm; - frame.fbm = fbm; - return frame; -} - -typedef struct -{ - u16 prim; - - union - { - struct - { - u16 iip : 1; - u16 tme : 1; - u16 fge : 1; - u16 abe : 1; - u16 aa1 : 1; - u16 fst : 1; - u16 ctxt : 1; - u16 fix : 1; - u16 resv : 8; - }; - u16 _val; - }; -} primInfo; - -extern primInfo *prim; - -typedef union -{ - struct - { - u32 ate : 1; - u32 atst : 3; - u32 aref : 8; - u32 afail : 2; - u32 date : 1; - u32 datm : 1; - u32 zte : 1; - u32 ztst : 2; - u32 resv : 13; - }; - u32 _val; -} pixTest; - -typedef struct -{ - int bp; - int bw; - int psm; -} bufInfo; - -typedef struct -{ - int tbp0; - int tbw; - int cbp; - u16 tw, th; - u8 psm; - u8 tcc; - u8 tfx; - u8 cpsm; - u8 csm; - u8 csa; - u8 cld; -} tex0Info; - -union tex_0_info -{ - struct - { - u64 tbp0 : 14; - u64 tbw : 6; - u64 psm : 6; - u64 tw : 4; - u64 th : 4; - u64 tcc : 1; - u64 tfx : 2; - u64 cbp : 14; - u64 cpsm : 4; - u64 csm : 1; - u64 csa : 5; - u64 cld : 3; - }; - - u64 _u64; - u32 _u32[2]; - u16 _u16[4]; - u8 _u8[8]; - - tex_0_info(u64 data) { _u64 = data; } - tex_0_info(u32 data) { _u32[0] = data; _u32[1] = 0; } - tex_0_info(u32 data0, u32 data1) { _u32[0] = data0; _u32[1] = data1; } - - u32 tbw_mult() - { - if (tbw == 0) - return 64; - else - return ((u32)tbw << 6); - } - - u32 psm_fix() - { - // ZZLog::Debug_Log("psm %d\n", psm); - if (psm == 9) return 1; - - return psm; - } - - u32 tw_exp() - { - if (tw > 10) return (1 << 10); - - return (1 << tw); - } - - u32 th_exp() - { - if (th > 10) return (1 << 10); - - return (1 << th); - } - - u32 cpsm_fix() - { - return cpsm & 0xe; - } - - u32 csa_fix() - { - if (cpsm < 2) - return (csa & 0xf); - else - return (csa & 0x1f); - } -}; - -#define TEX_MODULATE 0 -#define TEX_DECAL 1 -#define TEX_HIGHLIGHT 2 -#define TEX_HIGHLIGHT2 3 - -//bool SaveTexture(const char* filename, u32 textarget, u32 tex, int width, int height, int ext_format = 0); -extern void SaveTex(tex0Info* ptex, int usevid); -extern char* NamedSaveTex(tex0Info* ptex, int usevid); - -typedef struct -{ - u32 lcm; - u32 mxl; - u32 mmag; - u32 mmin; - u32 mtba; - u32 l; - u32 k; -} tex1Info; - -typedef struct -{ - u32 wms; - u32 wmt; - u32 minu; - u32 maxu; - u32 minv; - u32 maxv; -} clampInfo; - -typedef struct -{ - int cbw; - int cou; - int cov; -} clutInfo; - -typedef struct -{ - int tbp[3]; - int tbw[3]; -} miptbpInfo; - -typedef struct -{ - u16 aem; - u8 ta[2]; -} texaInfo; - -typedef struct -{ - int sx; - int sy; - int dx; - int dy; - int diry; - int dirx; -} trxposInfo; - -typedef struct -{ - union - { - struct - { - u8 a : 2; - u8 b : 2; - u8 c : 2; - u8 d : 2; - }; - u8 abcd; - }; - - u8 fix : 8; -} alphaInfo; - -typedef struct -{ - u16 zbp; // u16 address / 64 - u8 psm; - u8 zmsk; -} zbufInfo; - -typedef struct -{ - int fba; -} fbaInfo; - -enum transfer_types -{ - XFER_HOST_TO_LOCAL = 0, - XFER_LOCAL_TO_HOST = 1, - XFER_LOCAL_TO_LOCAL = 2, - XFER_DEACTIVATED = 3 -}; - -typedef struct -{ - Vertex gsvertex[4]; // circular buffer that contains the vertex - Vertex gsTriFanVertex; // Base of triangle fan primitive vertex - u32 rgba; // global color for flat shading texture - float q; - Vertex vertexregs; // accumulation buffer that collect current vertex data - - int primC; // number of verts current storing - int primIndex; // current prim index - int nTriFanVert; // remember the index of the base of triangle fan - int new_tri_fan; // 1 if we process a new triangle fan primitive. 0 otherwise - - int prac; - int dthe; - int colclamp; - int fogcol; - int smask; - int pabe; - u64 buff[2]; - int buffsize; - int cbp[2]; // internal cbp registers - - u32 CSRw; - - primInfo _prim[2]; - bufInfo srcbuf, srcbufnew; - bufInfo dstbuf, dstbufnew; - - clutInfo clut; - - texaInfo texa; - trxposInfo trxpos, trxposnew; - - int imageTransfer; - bool transferring; - - Point image, imageEnd; - Size imageNew, imageTemp; - - pathInfo path[4]; - GIFRegDIMX dimx; - GSMemory mem; - GSClut clut_buffer; - - // Subject to change. - int vsync, interlace; - - int primNext(int inc = 1) - { - // Note: ArraySize(gsvertex) == 2^n => modulo is replaced by an and instruction - return ((primIndex + inc) % ArraySize(gsvertex)); - } - - int primPrev(int dec = 1) - { - // Note: assert( dec <= ArraySize(gsvertex) ); - // Note: ArraySize(gsvertex) == 2^n => modulo is replaced by an and instruction - return ((primIndex + (ArraySize(gsvertex) - dec)) % ArraySize(gsvertex)); - } - - void setRGBA(u32 r, u32 g, u32 b, u32 a) - { - rgba = (r & 0xff) | - ((g & 0xff) << 8) | - ((b & 0xff) << 16) | - ((a & 0xff) << 24); - } - - inline void add_vertex(u16 x, u16 y, u32 z, u16 f) - { - vertexregs.x = x; - vertexregs.y = y; - vertexregs.z = z; - vertexregs.f = f; - if (likely(!new_tri_fan)) { - gsvertex[primIndex] = vertexregs; - } else { - gsTriFanVertex = vertexregs; - new_tri_fan = false; - } - } - - inline void add_vertex(u16 x, u16 y, u32 z) - { - vertexregs.x = x; - vertexregs.y = y; - vertexregs.z = z; - if (likely(!new_tri_fan)) { - gsvertex[primIndex] = vertexregs; - } else { - gsTriFanVertex = vertexregs; - new_tri_fan = false; - } - } -} GSinternal; - -extern GSinternal gs; - -// Note the function is used in a template parameter so it must be declared extern -// Note2: In this case extern is not compatible with __forceinline so just inline it... -extern inline u16 RGBA32to16(u32 c) -{ - return (u16)((((c) & 0x000000f8) >> 3) | - (((c) & 0x0000f800) >> 6) | - (((c) & 0x00f80000) >> 9) | - (((c) & 0x80000000) >> 16)); -} - -static __forceinline u32 RGBA16to32(u16 c) -{ - return (((c) & 0x001f) << 3) | - (((c) & 0x03e0) << 6) | - (((c) & 0x7c00) << 9) | - (((c) & 0x8000) ? 0xff000000 : 0); -} - -#ifndef ZZNORMAL_MEMORY -// converts float16 [0,1] to BYTE [0,255] (assumes value is in range, otherwise will take lower 8bits) -// f is a u16 -static __forceinline u16 Float16ToBYTE(u16 f) -{ - //assert( !(f & 0x8000) ); - if (f & 0x8000) return 0; - - u16 d = ((((f & 0x3ff) | 0x400) * 255) >> (10 - ((f >> 10) & 0x1f) + 15)); - - return d > 255 ? 255 : d; -} - -static __forceinline u16 Float16ToALPHA(u16 f) -{ - //assert( !(f & 0x8000) ); - if (f & 0x8000) return 0; - - // round up instead of down (crash and burn), too much and charlie breaks - u16 d = (((((f & 0x3ff) | 0x400)) * 255) >> (10 - ((f >> 10) & 0x1f) + 15)); - - d = (d) >> 1; - - return d > 255 ? 255 : d; -} - -#ifndef COLOR_ARGB -#define COLOR_ARGB(a,r,g,b) \ - ((u32)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) -#endif - -// assumes that positive in [1,2] (then extracts fraction by just looking at the specified bits) -#define Float16ToBYTE_2(f) ((u8)(*(u16*)&f>>2)) -#define Float16To5BIT(f) (Float16ToBYTE(f)>>3) - -#define Float16Alpha(f) (((*(u16*)&f&0x7c00)>=0x3900)?0x8000:0) // alpha is >= 1 - -// converts an array of 4 u16s to a u32 color -// f is a pointer to a u16 -#define Float16ToARGB(f) COLOR_ARGB(Float16ToALPHA(f.w), Float16ToBYTE(f.x), Float16ToBYTE(f.y), Float16ToBYTE(f.z)); - -#define Float16ToARGB16(f) (Float16Alpha(f.w)|(Float16To5BIT(f.x)<<10)|(Float16To5BIT(f.y)<<5)|Float16To5BIT(f.z)) - -// used for Z values -#define Float16ToARGB_Z(f) COLOR_ARGB((u32)Float16ToBYTE_2(f.w), Float16ToBYTE_2(f.x), Float16ToBYTE_2(f.y), Float16ToBYTE_2(f.z)) -#define Float16ToARGB16_Z(f) ((Float16ToBYTE_2(f.y)<<8)|Float16ToBYTE_2(f.z)) -#endif - - -inline float Clamp(float fx, float fmin, float fmax) -{ - if (fx < fmin) return fmin; - - return fx > fmax ? fmax : fx; -} - -// Get pixel storage format from tex0. Clutted textures store pixels in cpsm format. -inline int PIXEL_STORAGE_FORMAT(const tex0Info& tex) { - if (PSMT_ISCLUT(tex.psm)) - return tex.cpsm; - else - return tex.psm; - } - -// If pixel storage format not PSMCT24 ot PSMCT32, then it is 16-bit. -// Z-textures have 0x30 upper bits, so we eliminate them by &&(~0x30) -inline bool PSMT_ISHALF_STORAGE(const tex0Info& tex0) { return ((PIXEL_STORAGE_FORMAT(tex0) & (~0x30)) > 1); } - -//--------------------------- Inlines for bitwise ops -//--------------------------- textures -// Tex0Info (TEXD_x registers) bits, lower word -// The register is really 64-bit, but we use 2 32bit ones to represent it -// Obtain tbp0 -- Texture Buffer Base Pointer (Word Address/64) -- from data. Bits 0-13. -static __forceinline int ZZOglGet_tbp0_TexBits(u32 data) -{ - //return tex_0_info(data).tbp0; - return (data) & 0x3fff; -} - -// Obtain tbw -- Texture Buffer Width (Texels/64) -- from data, do not multiply to 64. Bits 14-19 -// ( data & 0xfc000 ) >> 14 -static __forceinline int ZZOglGet_tbw_TexBits(u32 data) -{ - //return tex_0_info(data).tbw; - return (data >> 14) & 0x3f; -} - -// Obtain tbw -- Texture Buffer Width (Texels) -- from data, do multiply to 64, never return 0. -static __forceinline int ZZOglGet_tbw_TexBitsMult(u32 data) -{ - //return text_0_info(data).tbw_mult(); - int result = ZZOglGet_tbw_TexBits(data); - - if (result == 0) - return 64; - else - return (result << 6); -} - -// Obtain psm -- Pixel Storage Format -- from data. Bits 20-25. -// (data & 0x3f00000) >> 20 -static __forceinline int ZZOglGet_psm_TexBits(u32 data) -{ - //return tex_0_info(data).psm; - return ((data >> 20) & 0x3f); -} - -// Obtain psm -- Pixel Storage Format -- from data. Bits 20-25. Fix incorrect psm == 9 -static __forceinline int ZZOglGet_psm_TexBitsFix(u32 data) -{ - //return tex_0_info(data).psm_fix(); - int result = ZZOglGet_psm_TexBits(data) ; -// ZZLog::Debug_Log("result %d", result); - - if (result == 9) result = 1; - - return result; -} - -// Obtain tw -- Texture Width (Width = 2^TW) -- from data. Bits 26-29 -// (data & 0x3c000000)>>26 -static __forceinline u16 ZZOglGet_tw_TexBits(u32 data) -{ - //return tex_0_info(data).tw; - return ((data >> 26) & 0xf); -} - -// Obtain tw -- Texture Width (Width = TW) -- from data. Width could newer be more than 1024. -static __forceinline u16 ZZOglGet_tw_TexBitsExp(u32 data) -{ - //return tex_0_info(data).tw_exp(); - u16 result = ZZOglGet_tw_TexBits(data); - - if (result > 10) result = 10; - - return (1 << result); -} - -// TH set at the border of upper and higher words. -// Obtain th -- Texture Height (Height = 2^TH) -- from data. Bits 30-31 lower, 0-1 higher -// (dataLO & 0xc0000000) >> 30 + (dataHI & 0x3) * 0x4 -static __forceinline u16 ZZOglGet_th_TexBits(u32 dataLO, u32 dataHI) -{ - //return tex_0_info(dataLO, dataHI).th; - return (((dataLO >> 30) & 0x3) | ((dataHI & 0x3) << 2)); -} - -// Obtain th --Texture Height (Height = 2^TH) -- from data. Height could newer be more than 1024. -static __forceinline u16 ZZOglGet_th_TexBitsExp(u32 dataLO, u32 dataHI) -{ - //return tex_0_info(dataLO, dataHI).th_exp(); - u16 result = ZZOglGet_th_TexBits(dataLO, dataHI); - - if (result > 10) result = 10; - - return (1 << result); -} - -// Tex0Info bits, higher word. -// Obtain tcc -- Texture Color Component 0=RGB, 1=RGBA + use Alpha from TEXA reg when not in PSM -- from data. Bit 3 -// (data & 0x4)>>2 -static __forceinline u8 ZZOglGet_tcc_TexBits(u32 data) -{ - //return tex_0_info(0, data).tcc; - return ((data >> 2) & 0x1); -} - -// Obtain tfx -- Texture Function (0=modulate, 1=decal, 2=hilight, 3=hilight2) -- from data. Bit 4-5 -// (data & 0x18)>>3 -static __forceinline u8 ZZOglGet_tfx_TexBits(u32 data) -{ - //return tex_0_info(0, data).tfx; - return ((data >> 3) & 0x3); -} - -// Obtain cbp from data -- Clut Buffer Base Pointer (Address/256) -- Bits 5-18 -// (data & 0x7ffe0)>>5 -static __forceinline int ZZOglGet_cbp_TexBits(u32 data) -{ - //return tex_0_info(0, data).cbp; - return ((data >> 5) & 0x3fff); -} - -// Obtain cpsm from data -- Clut pixel Storage Format -- Bits 19-22. 22nd is at no use. -// (data & 0x700000)>>19 -// 0000 - psmct32; 0010 - psmct16; 1010 - psmct16s. -static __forceinline u8 ZZOglGet_cpsm_TexBits(u32 data) -{ - //return (tex_0_info(0, data).cpsm & 0xe); - return ((data >> 19) & 0xe); -} - -// Obtain csm -- I don't know what is it -- from data. Bit 23 -// (data & 0x800000)>>23 -// csm is the clut storage mode. 0 for CSM1, 1 for CSM2. -static __forceinline u8 ZZOglGet_csm_TexBits(u32 data) -{ - //return tex_0_info(0, data).csm; - return ((data >> 23) & 0x1); -} - -// Obtain csa -- -- from data. Bits 24-28 -// (data & 0x1f000000)>>24 -static __forceinline u8 ZZOglGet_csa_TexBits(u32 data) -{ - //return tex_0_info(0, data).csa_fix(); - - if ((data & 0x700000) == 0) // it is cpsm < 2 check - return ((data >> 24) & 0xf); - else - return ((data >> 24) & 0x1f); -} - -// Obtain cld -- -- from data. Bits 29-31 -// (data & 0xe0000000)>>29 -static __forceinline u8 ZZOglGet_cld_TexBits(u32 data) -{ - //return tex_0_info(0, data).cld; - return ((data >> 29) & 0x7); -} - -//-------------------------- frames -// FrameInfo bits. -// Obtain fbp -- frame Buffer Base Pointer (Word Address/2048) -- from data. Bits 0-15 -inline int ZZOglGet_fbp_FrameBits(u32 data) -{ - return ((data) & 0x1ff); -} - -// So we got address / 64, henceby frame fbp and tex tbp have the same dimension -- "real address" is x64. -inline int ZZOglGet_fbp_FrameBitsMult(u32 data) -{ - return (ZZOglGet_fbp_FrameBits(data) << 5); -} - -// Obtain fbw -- width (Texels/64) -- from data. Bits 16-23 -inline int ZZOglGet_fbw_FrameBits(u32 data) -{ - return ((data >> 16) & 0x3f); -} - -inline int ZZOglGet_fbw_FrameBitsMult(u32 data) -{ - return (ZZOglGet_fbw_FrameBits(data) << 6); -} - - -// Obtain psm -- Pixel Storage Format -- from data. Bits 24-29. -// (data & 0x3f000000) >> 24 -inline int ZZOglGet_psm_FrameBits(u32 data) -{ - return ((data >> 24) & 0x3f); -} - -// Function for calculating overal height from frame data. -inline int ZZOgl_fbh_Calc(int fbp, int fbw, int psm) -{ - int fbh = (1024 * 1024 - 64 * fbp) / fbw; - fbh &= ~0x1f; - - if (PSMT_ISHALF(psm)) fbh *= 2; - if (fbh > 1024) fbh = 1024; - - //ZZLog::Debug_Log("ZZOgl_fbh_Calc: 0x%x", fbh); - return fbh; -} - -inline int ZZOgl_fbh_Calc(frameInfo frame) -{ - return ZZOgl_fbh_Calc(frame.fbp, frame.fbw, frame.psm); -} - -// Calculate fbh from data, It does not set in register -inline int ZZOglGet_fbh_FrameBitsCalc(u32 data) -{ - int fbh = 0; - int fbp = ZZOglGet_fbp_FrameBits(data); - int fbw = ZZOglGet_fbw_FrameBits(data); - int psm = ZZOglGet_psm_FrameBits(data); - - if (fbw > 0) fbh = ZZOgl_fbh_Calc(fbp, fbw, psm) ; - - return fbh ; -} - -// Obtain fbm -- frame mask -- from data. All higher word. -inline u32 ZZOglGet_fbm_FrameBits(u32 data) -{ - return (data); -} - -// Obtain fbm -- frame mask -- from data. All higher word. Fixed from psm == PCMT24 (without alpha) -inline u32 ZZOglGet_fbm_FrameBitsFix(u32 dataLO, u32 dataHI) -{ - if (PSMT_BITMODE(ZZOglGet_psm_FrameBits(dataLO)) == 1) - return (dataHI | 0xff000000); - else - return dataHI; -} - -// obtain colormask RED -inline u32 ZZOglGet_fbmRed_FrameBits(u32 data) -{ - return (data & 0xff); -} - -// obtain colormask Green -inline u32 ZZOglGet_fbmGreen_FrameBits(u32 data) -{ - return ((data >> 8) & 0xff); -} - -// obtain colormask Blue -inline u32 ZZOglGet_fbmBlue_FrameBits(u32 data) -{ - return ((data >> 16) & 0xff); -} - -// obtain colormask Alpha -inline u32 ZZOglGet_fbmAlpha_FrameBits(u32 data) -{ - return ((data >> 24) & 0xff); -} - -// obtain colormask Alpha -inline u32 ZZOglGet_fbmHighByte(u32 data) -{ - return (!!(data & 0x80000000)); -} - -//-------------------------- tex0 comparison -// Check if old and new tex0 registers have only clut difference -inline bool ZZOglAllExceptClutIsSame(const u32* oldtex, const u32* newtex) -{ - return ((oldtex[0] == newtex[0]) && ((oldtex[1] & 0x1f) == (newtex[1] & 0x1f))); -} - -// Check if the CLUT registers are same, except CLD -inline bool ZZOglClutMinusCLDunchanged(const u32* oldtex, const u32* newtex) -{ - return ((oldtex[1] & 0x1fffffe0) == (newtex[1] & 0x1fffffe0)); -} - -// Check if CLUT storage mode is not changed (CSA, CSM and CSPM) -inline bool ZZOglClutStorageUnchanged(const u32* oldtex, const u32* newtex) -{ - return ((oldtex[1] & 0x1ff10000) == (newtex[1] & 0x1ff10000)); -} - -// call to load CLUT data (depending on CLD) -void texClutWrite(int ctx); - -// Perform clutting for flushed texture. Better check if it needs a prior call. -inline void CluttingForFlushedTex(tex0Info* tex0, u32 Data, int ictx) -{ - tex0->cbp = ZZOglGet_cbp_TexBits(Data); - tex0->cpsm = ZZOglGet_cpsm_TexBits(Data); - tex0->csm = ZZOglGet_csm_TexBits(Data); - tex0->csa = ZZOglGet_csa_TexBits(Data); - tex0->cld = ZZOglGet_cld_TexBits(Data); - - texClutWrite(ictx); - }; - -// CSA and CPSM bitmask 0001 1111 0111 1000 ... -// 60 56 52 -#define CPSM_CSA_BITMASK 0x1f780000 -#define CPSM_CSA_NOTMASK 0xe0870000 - -// I'll find a good place for these later. - -extern PSM_value PSM_value_Table[64]; -extern bool allowed_psm[256]; // in ZZoglMem.cpp.cpp -inline void FillAlowedPsnTable() { - - allowed_psm[PSMCT32] = true; - allowed_psm[PSMCT24] = true; - allowed_psm[PSMCT16] = true; - allowed_psm[PSMCT16S] = true; - allowed_psm[PSMT8] = true; - allowed_psm[PSMT4] = true; - allowed_psm[PSMT8H] = true; - allowed_psm[PSMT4HH] = true; - allowed_psm[PSMT4HL] = true; - allowed_psm[PSMT32Z] = true; - allowed_psm[PSMT24Z] = true; - allowed_psm[PSMT16Z] = true; - allowed_psm[PSMT16SZ] = true; - - PSM_value_Table[PSMCT32] = PSMCT32; - PSM_value_Table[PSMCT24] = PSMCT24; - PSM_value_Table[PSMCT16] = PSMCT16; - PSM_value_Table[PSMCT16S] = PSMCT16S; - PSM_value_Table[PSMT8] = PSMT8; - PSM_value_Table[PSMT4] = PSMT4; - PSM_value_Table[PSMT8H] = PSMT8H; - PSM_value_Table[PSMT4HH] = PSMT4HH; - PSM_value_Table[PSMT4HL] = PSMT4HL; - PSM_value_Table[PSMT32Z] = PSMT32Z; - PSM_value_Table[PSMT24Z] = PSMT24Z; - PSM_value_Table[PSMT16Z] = PSMT16Z; - PSM_value_Table[PSMT16SZ] = PSMT16SZ; -}; - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSmain.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSmain.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSmain.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSmain.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,837 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "Util.h" -#include "GS.h" -#include "Profile.h" -#include "GLWin.h" -#include "ZZoglFlushHack.h" -#include "ZZoglShaders.h" - - -using namespace std; - -extern void SaveSnapshot(const char* filename); - -#ifdef _MSC_VER -#pragma warning(disable:4244) -#endif - -GLWindow GLWin; -GSinternal gs; -GSconf conf; -GSDump g_dump; - -int ppf, g_GSMultiThreaded, CurrentSavestate = 0; -int g_LastCRC = 0, g_TransferredToGPU = 0, s_frameskipping = 0; -int g_SkipFlushFrame = 0; -GetSkipCount GetSkipCount_Handler = 0; - -int UPDATE_FRAMES = 16, g_nFrame = 0, g_nRealFrame = 0; -float fFPS = 0; - -void (*GSirq)(); -u8* g_pBasePS2Mem = NULL; -wxString s_strIniPath(L"inis"); // Air's new ini path (r2361) - -bool SaveStateExists = true; // We could not know save slot status before first change occured -const char* SaveStateFile = NULL; // Name of SaveFile for access check. - -extern const char* s_aa[5]; -extern const char* pbilinear[]; -// statistics -u32 g_nGenVars = 0, g_nTexVars = 0, g_nAlphaVars = 0, g_nResolve = 0; - -#define VER 4 -const unsigned char zgsversion = PS2E_GS_VERSION; -unsigned char zgsrevision = 0; // revision and build gives plugin version -unsigned char zgsbuild = VER; -unsigned char zgsminor = 0; - -#ifdef _DEBUG -const char *libraryName = "ZZ Ogl PG (Debug) "; -#elif defined(ZEROGS_DEVBUILD) -const char *libraryName = "ZZ Ogl PG (Dev)"; -#else -const char *libraryName = "ZZ Ogl PG "; -#endif - -extern int g_nPixelShaderVer, g_nFrameRender, g_nFramesSkipped; - -extern void WriteAA(); -extern void WriteBilinear(); -extern void ZZDestroy(); -extern bool ZZCreate(int width, int height); -extern void ZZGSStateReset(); -extern int ZZSave(s8* pbydata); -extern bool ZZLoad(s8* pbydata); - -// switches the render target to the real target, flushes the current render targets and renders the real image -extern void RenderCRTC(); - -#if defined(_WIN32) && defined(_DEBUG) -HANDLE g_hCurrentThread = NULL; -#endif - -extern int VALIDATE_THRESH; -extern u32 TEXDESTROY_THRESH; - -EXPORT_C_(u32) PS2EgetLibType() -{ - return PS2E_LT_GS; -} - -EXPORT_C_(char*) PS2EgetLibName() -{ - return (char*) libraryName; -} - -EXPORT_C_(u32) PS2EgetLibVersion2(u32 type) -{ - return (zgsversion << 16) | (zgsrevision << 8) | zgsbuild | (zgsminor << 24); -} - -EXPORT_C_(void) GSsetBaseMem(void* pmem) -{ - g_pBasePS2Mem = (u8*)pmem; -} - -EXPORT_C_(void) GSsetSettingsDir(const char* dir) -{ - s_strIniPath = (dir == NULL) ? wxString(L"inis") : wxString(dir, wxConvFile); -} - -EXPORT_C_(void) GSsetLogDir(const char* dir) -{ - ZZLog::SetDir(dir); -} - -EXPORT_C_(void) GSsetGameCRC(int crc, int options) -{ - // build a list of function pointer for GetSkipCount (SkipDraw) - static GetSkipCount GSC_list[NUMBER_OF_TITLES]; - static bool inited = false; - - if (!inited) - { - inited = true; - - memset(GSC_list, 0, sizeof(GSC_list)); - - GSC_list[Okami] = GSC_Okami; - GSC_list[MetalGearSolid3] = GSC_MetalGearSolid3; - GSC_list[DBZBT2] = GSC_DBZBT2; - GSC_list[DBZBT3] = GSC_DBZBT3; - GSC_list[SFEX3] = GSC_SFEX3; - GSC_list[Bully] = GSC_Bully; - GSC_list[BullyCC] = GSC_BullyCC; - GSC_list[SoTC] = GSC_SoTC; - GSC_list[OnePieceGrandAdventure] = GSC_OnePieceGrandAdventure; - GSC_list[OnePieceGrandBattle] = GSC_OnePieceGrandBattle; - GSC_list[ICO] = GSC_ICO; - GSC_list[GT4] = GSC_GT4; - GSC_list[WildArms4] = GSC_WildArms4; - GSC_list[WildArms5] = GSC_WildArms5; - GSC_list[Manhunt2] = GSC_Manhunt2; - GSC_list[CrashBandicootWoC] = GSC_CrashBandicootWoC; - GSC_list[ResidentEvil4] = GSC_ResidentEvil4; - GSC_list[Spartan] = GSC_Spartan; - GSC_list[AceCombat4] = GSC_AceCombat4; - GSC_list[Drakengard2] = GSC_Drakengard2; - GSC_list[Tekken5] = GSC_Tekken5; - GSC_list[IkkiTousen] = GSC_IkkiTousen; - GSC_list[GodOfWar] = GSC_GodOfWar; - GSC_list[GodOfWar2] = GSC_GodOfWar2; - GSC_list[GiTS] = GSC_GiTS; - GSC_list[Onimusha3] = GSC_Onimusha3; - GSC_list[TalesOfAbyss] = GSC_TalesOfAbyss; - GSC_list[SonicUnleashed] = GSC_SonicUnleashed; - GSC_list[Genji] = GSC_Genji; - GSC_list[StarOcean3] = GSC_StarOcean3; - GSC_list[ValkyrieProfile2] = GSC_ValkyrieProfile2; - GSC_list[RadiataStories] = GSC_RadiataStories; - } - - // TEXDESTROY_THRESH starts out at 16. - VALIDATE_THRESH = 8; - conf.mrtdepth = (conf.settings().disable_mrt_depth != 0); - - if (!conf.mrtdepth) - ZZLog::WriteLn("Disabling MRT depth writing."); - else - ZZLog::WriteLn("Enabling MRT depth writing."); - - bool CRCValueChanged = (g_LastCRC != crc); - - g_LastCRC = crc; - - if (crc != 0) ZZLog::WriteLn("Current game CRC is %x.", crc); - - if (CRCValueChanged && (crc != 0)) - { - for (u32 i = 0; i < GAME_INFO_INDEX; i++) - { - if (crc_game_list[i].crc == (u32)crc) - { - ZZLog::WriteLn("Found CRC[%x] in crc game list.", crc); - - if (crc_game_list[i].v_thresh > 0) - { - VALIDATE_THRESH = crc_game_list[i].v_thresh; - ZZLog::WriteLn("Setting VALIDATE_THRESH to %d", VALIDATE_THRESH); - } - - if (crc_game_list[i].t_thresh > 0) - { - TEXDESTROY_THRESH = crc_game_list[i].t_thresh; - ZZLog::WriteLn("Setting TEXDESTROY_THRESH to %d", TEXDESTROY_THRESH); - } - - // FIXME need to check SkipDraw is positive (enabled by users) - GetSkipCount_Handler = GSC_list[crc_game_list[i].title]; - - if (!conf.disableHacks) - { - conf.def_hacks._u32 |= crc_game_list[i].flags; - ListHacks(); - } - return; - } - } - } - ListHacks(); -} - -EXPORT_C_(void) GSsetFrameSkip(int frameskip) -{ - FUNCLOG - s_frameskipping |= frameskip; - - if (frameskip && g_nFrameRender > 1) - { - SetFrameSkip(true); - } - else if (!frameskip && g_nFrameRender <= 0) - { - SetFrameSkip(false); - } -} - -EXPORT_C_(void) GSreset() -{ - FUNCLOG - - memset(&gs, 0, sizeof(gs)); - - ZZGSStateReset(); - - gs.prac = 1; - prim = &gs._prim[0]; - gs.transferring = false; - gs.q = 1; -} - -EXPORT_C_(void) GSgifSoftReset(u32 mask) -{ - FUNCLOG - - if (mask & 1) memset(&gs.path[0], 0, sizeof(gs.path[0])); - if (mask & 2) memset(&gs.path[1], 0, sizeof(gs.path[1])); - if (mask & 4) memset(&gs.path[2], 0, sizeof(gs.path[2])); - - gs.transferring = false; - gs.q = 1; -} - -EXPORT_C_(s32) GSinit() -{ - FUNCLOG - - ZZLog::Open(); - ZZLog::WriteLn("Calling GSinit."); - - WriteTempRegs(); - GSreset(); - - ZZLog::WriteLn("GSinit finished."); - return 0; -} - -__forceinline void InitMisc() -{ - WriteBilinear(); - WriteAA(); - InitProfile(); - InitPath(); - ResetRegs(); -} - -EXPORT_C_(s32) GSopen(void *pDsp, char *Title, int multithread) -{ - FUNCLOG - - g_GSMultiThreaded = multithread; - - ZZLog::WriteLn("Calling GSopen."); - -#if defined(_WIN32) && defined(_DEBUG) - g_hCurrentThread = GetCurrentThread(); -#endif - - LoadConfig(); - strcpy(GLWin.title, Title); - - ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor); - - ZZLog::WriteLn("Creating ZZOgl window."); - if ((!GLWin.CreateWindow(pDsp)) || (!ZZCreate(conf.width, conf.height))) return -1; - - ZZLog::WriteLn("Initialization successful."); - - InitMisc(); - ZZLog::GS_Log("GSopen finished."); - return 0; -} - -#ifdef USE_GSOPEN2 -EXPORT_C_(s32) GSopen2( void* pDsp, u32 flags ) -{ - FUNCLOG - - g_GSMultiThreaded = true; - - ZZLog::WriteLn("Calling GSopen2."); - -#if defined(_WIN32) && defined(_DEBUG) - g_hCurrentThread = GetCurrentThread(); -#endif - - LoadConfig(); - - ZZLog::GS_Log("Using %s:%d.%d.%d.", libraryName, zgsrevision, zgsbuild, zgsminor); - - ZZLog::WriteLn("Capturing ZZOgl window."); - if ((!GLWin.CreateWindow(pDsp)) || (!ZZCreate(conf.width, conf.height))) return -1; - - ZZLog::WriteLn("Initialization successful."); - - InitMisc(); - ZZLog::GS_Log("GSopen2 finished."); - ZZLog::Check_GL_Error(); - return 0; - -} -#endif - -EXPORT_C_(void) GSshutdown() -{ - FUNCLOG - - ZZLog::Close(); -} - -EXPORT_C_(void) GSclose() -{ - FUNCLOG - - // Clean shader. Must be done before the context is delete - ZZshExitCleaning(); - ZZDestroy(); - - GLWin.CloseWindow(); - - // Free alocated memory. We could close plugin without closing pcsx2, so we SHOULD free all allocated resources - SaveStateFile = NULL; - SaveStateExists = true; // default value - g_LastCRC = 0; -} - -EXPORT_C_(void) GSirqCallback(void (*callback)()) -{ - FUNCLOG - - GSirq = callback; -} - -EXPORT_C_(void) GSwriteCSR(u32 write) -{ - FUNCLOG - - gs.CSRw = write; -} - -#ifdef _WIN32 -#define access _access -#endif - -EXPORT_C_(void) GSchangeSaveState(int newstate, const char* filename) -{ - FUNCLOG - - char str[255]; - sprintf(str, "save state %d", newstate); - ZZAddMessage(str); - CurrentSavestate = newstate; - - SaveStateFile = filename; - SaveStateExists = (access(SaveStateFile, 0) == 0); -} - -static bool get_snapshot_filename(char *filename, const char* path, const char* extension) -{ - FUNCLOG - - FILE *bmpfile; - u32 snapshotnr = 0; - - // increment snapshot value & try to get filename - - for (;;) - { - snapshotnr++; - - sprintf(filename, "%s/snap%03d.%s", path, snapshotnr, extension); - - bmpfile = fopen(filename, "rb"); - - if (bmpfile == NULL) break; - - fclose(bmpfile); - } - - // try opening new snapshot file - if ((bmpfile = fopen(filename, "wb")) == NULL) - { - char strdir[255]; - sprintf(strdir, "%s", path); - -#ifdef _WIN32 - CreateDirectory(wxString::FromUTF8(strdir), NULL); -#else - mkdir(path, 0777); -#endif - - if ((bmpfile = fopen(filename, "wb")) == NULL) return false; - } - - fclose(bmpfile); - - return true; -} - -EXPORT_C_(void) GSmakeSnapshot(char *path) -{ - FUNCLOG - - char filename[256]; - if (get_snapshot_filename(filename, (const char*)path, (conf.zz_options.tga_snap) ? "bmp" : "jpg")) - SaveSnapshot(filename); -} - -// I'll probably move this somewhere else later, but it's got a ton of dependencies. -static __forceinline void SetGSTitle() -{ - char strtitle[256]; - -#if !defined(ZEROGS_DEVBUILD) - const char* g_pShaders[4] = { "full", "reduced", "accurate", "accurate-reduced" }; - const char* g_pInterlace[3] = { "interlace 0 |", "interlace 1 |", "" }; - const char* g_pBilinear[3] = { "", "bilinear |", "forced bilinear |" }; - - if (SaveStateFile != NULL && !SaveStateExists) - SaveStateExists = (access(SaveStateFile, 0) == 0); - else - SaveStateExists = true; - - sprintf(strtitle, "ZZ Open GL 0.%d.%d | %.1f fps | %s%s%s savestate %d%s | shaders %s | (%.1f)", zgsbuild, zgsminor, fFPS, - g_pInterlace[conf.interlace], g_pBilinear[conf.bilinear], (conf.aa ? s_aa[conf.aa] : ""), - CurrentSavestate, (SaveStateExists ? "" : "*"), - g_pShaders[g_nPixelShaderVer], (ppf&0xfffff) / (float)UPDATE_FRAMES); - -#else - sprintf(strtitle, "%d | %.1f fps (sk:%d%%) | g: %.1f, t: %.1f, a: %.1f, r: %.1f | p: %.1f | tex: %d %d (%d kbpf)", g_nFrame, fFPS, - 100*g_nFramesSkipped / g_nFrame, - g_nGenVars / (float)UPDATE_FRAMES, g_nTexVars / (float)UPDATE_FRAMES, g_nAlphaVars / (float)UPDATE_FRAMES, - g_nResolve / (float)UPDATE_FRAMES, (ppf&0xfffff) / (float)UPDATE_FRAMES, - g_MemTargs.listTargets.size(), g_MemTargs.listClearedTargets.size(), g_TransferredToGPU >> 10); - - //_snprintf(strtitle, 512, "%x %x", *(int*)(g_pbyGSMemory + 256 * 0x3e0c + 4), *(int*)(g_pbyGSMemory + 256 * 0x3e04 + 4)); -#endif - -// if( g_nFrame > 100 && fFPS > 60.0f ) { -// ZZLog::Debug_Log("Set profile."); -// g_bWriteProfile = 1; -// } - GLWin.SetTitle(strtitle); -} - -// This isn't implemented for some reason? Adding a field for it for the moment, till I get a chance to look closer. -EXPORT_C_(void) GSsetVsync(int enabled) -{ - FUNCLOG - - ZZLog::Debug_Log("Setting VSync to 0x%x.", enabled); - gs.vsync = enabled; - GLWin.SetVsync(enabled); -} - -EXPORT_C_(void) GSvsync(int current_interlace) -{ - FUNCLOG - - //ZZLog::GS_Log("Calling GSvsync."); - - static u32 dwTime = timeGetTime(); - static int nToNextUpdate = 1; -#ifdef _DEBUG - if (conf.dump & 0x1) { - freezeData fd; - fd.size = ZZSave(NULL); - s8* payload = (s8*)malloc(fd.size); - fd.data = payload; - - ZZSave(fd.data); - - char filename[256]; - // FIXME, there is probably a better solution than /tmp ... - // A possibility will be to save the path from GSmakeSnapshot but you still need to call - // GSmakeSnapshot first. - if (get_snapshot_filename(filename, "/tmp", "gs")) - g_dump.Open(filename, g_LastCRC, fd, g_pBasePS2Mem); - conf.dump--; - - free(payload); - } - g_dump.VSync(current_interlace, (conf.dump == 0), g_pBasePS2Mem); -#endif - - GL_REPORT_ERRORD(); - - g_nRealFrame++; - - // The value passed seems to either be 0 or 0x2000, and we want 0 or 1. Perhaps !! would be better... - gs.interlace = !current_interlace; - RenderCRTC(); - - GLWin.ProcessEvents(); - - if (--nToNextUpdate <= 0) - { - u32 d = timeGetTime(); - fFPS = UPDATE_FRAMES * 1000.0f / (float)max(d - dwTime, (u32)1); - dwTime = d; - g_nFrame += UPDATE_FRAMES; -#ifndef USE_GSOPEN2 - // let PCSX2 manage the title - SetGSTitle(); -#endif - -// if( g_nFrame > 100 && fFPS > 60.0f ) { -// ZZLog::Debug_Log("Set profile."); -// g_bWriteProfile = 1; -// } - - if (fFPS < 16) - UPDATE_FRAMES = 4; - else if (fFPS < 32) - UPDATE_FRAMES = 8; - else - UPDATE_FRAMES = 16; - - nToNextUpdate = UPDATE_FRAMES; - - ppf = 0; - g_TransferredToGPU = 0; - g_nGenVars = 0; - g_nTexVars = 0; - g_nAlphaVars = 0; - g_nResolve = 0; - g_nFramesSkipped = 0; - g_SkipFlushFrame = 0; - } - -#if defined(ZEROGS_DEVBUILD) - if (g_bWriteProfile) - { - //g_bWriteProfile = 0; - DVProfWrite("prof.txt", UPDATE_FRAMES); - DVProfClear(); - } - -#endif - GL_REPORT_ERRORD(); - -} - -EXPORT_C_(void) GSreadFIFO(u64 *pMem) -{ - FUNCLOG - - //ZZLog::GS_Log("Calling GSreadFIFO."); -#ifdef _DEBUG - g_dump.ReadFIFO(1); -#endif - - TransferLocalHost((u32*)pMem, 1); -} - -EXPORT_C_(void) GSreadFIFO2(u64 *pMem, int qwc) -{ - FUNCLOG - - //ZZLog::GS_Log("Calling GSreadFIFO2."); -#ifdef _DEBUG - g_dump.ReadFIFO(qwc); -#endif - - TransferLocalHost((u32*)pMem, qwc); -} - -EXPORT_C_(int) GSsetupRecording(int start, void* pData) -{ - FUNCLOG - - if (start) - StartCapture(); - else - StopCapture(); - - return 1; -} - -EXPORT_C_(s32) GSfreeze(int mode, freezeData *data) -{ - FUNCLOG - - switch (mode) - { - case FREEZE_LOAD: - if (!ZZLoad(data->data)) ZZLog::Error_Log("GS: Bad load format!"); - g_nRealFrame += 100; - break; - - case FREEZE_SAVE: - ZZSave(data->data); - break; - - case FREEZE_SIZE: - data->size = ZZSave(NULL); - break; - - default: - break; - } - - return 0; -} - -#ifdef __linux__ -void _fread(void *ptr, size_t size, size_t nmemb, FILE *stream) -{ - static uint32 read_cnt = 0; - read_cnt++; - - size_t result = fread(ptr, size, nmemb, stream); - if (result != nmemb) { - fprintf(stderr, "Read error\n"); - exit(read_cnt); - } -} - -struct Packet -{ - u8 type, param; - u32 size, addr; - u32 real_size; - vector buff; -}; - -EXPORT_C_(void) GSReplay(char* lpszCmdLine) -{ - if(FILE* fp = fopen(lpszCmdLine, "rb")) - { - GSinit(); - - u8 regs[0x2000]; - GSsetBaseMem(regs); - - //s_vsync = !!theApp.GetConfig("vsync", 0); - - void* hWnd = NULL; - - const char* title = "replayer"; - GSopen((void**)&hWnd, (char*)title, 0); - - u32 crc; - _fread(&crc, 4, 1, fp); - GSsetGameCRC(crc, 0); - - freezeData fd; - _fread(&fd.size, 4, 1, fp); - fd.data = new s8[fd.size]; - _fread(fd.data, fd.size, 1, fp); - GSfreeze(FREEZE_LOAD, &fd); - delete [] fd.data; - - _fread(regs, 0x2000, 1, fp); - - GSvsync(1); - - list packets; - vector buff; - int type; - - while((type = fgetc(fp)) != EOF) - { - Packet* p = new Packet(); - - p->type = (u8)type; - - switch(type) - { - case 0: - - p->param = (u8)fgetc(fp); - - _fread(&p->size, 4, 1, fp); - _fread(&p->real_size, 4, 1, fp); - - switch(p->param) - { - case 0: - p->buff.resize(0x4000); - //p->addr = 0x4000 - p->size; - //fread(&p->buff[p->addr], p->size, 1, fp); - _fread(&p->buff[0], p->size, 1, fp); - break; - case 1: - case 2: - case 3: - p->buff.resize(p->size); - _fread(&p->buff[0], p->size, 1, fp); - break; - } - - break; - - case 1: - - _fread(&p->param, 4, 1, fp); - //p->param = (u8)fgetc(fp); - - break; - - case 2: - - _fread(&p->size, 4, 1, fp); - - break; - - case 3: - - p->buff.resize(0x2000); - - _fread(&p->buff[0], 0x2000, 1, fp); - - break; - - default: assert(0); - } - - packets.push_back(p); - } - - sleep(1); - - //while(IsWindowVisible(hWnd)) - //FIXME map? - int finished = 2; - while(finished > 0) - { - unsigned long start = timeGetTime(); - unsigned long frame_number = 0; - for(list::iterator i = packets.begin(); i != packets.end(); i++) - { - Packet* p = *i; - - switch(p->type) - { - case 0: - - //fprintf(stderr, "TRANSFER %d size %d\n", p->param, p->real_size); - switch(p->param) - { - //case 0: GSgifTransfer1((u32*)&p->buff[0], p->addr); break; - case 0: GSgifTransfer0((u32*)&p->buff[0], p->real_size); break; - case 1: GSgifTransfer2((u32*)&p->buff[0], p->real_size); break; - case 2: GSgifTransfer3((u32*)&p->buff[0], p->real_size); break; - case 3: GSgifTransfer((u32*)&p->buff[0], p->real_size); break; - } - - break; - - case 1: - - GSvsync(p->param); - frame_number++; - - break; - - case 2: - - if(buff.size() < p->size) buff.resize(p->size); - - // FIXME - // GSreadFIFO2(&buff[0], p->size / 16); - fprintf(stderr, "GSreadFIFO2 not yet implemented"); - - break; - - case 3: - - memcpy(regs, &p->buff[0], 0x2000); - - break; - } - } - unsigned long end = timeGetTime(); - fprintf(stderr, "The %ld frames of the scene was render on %ldms\n", frame_number, end - start); - fprintf(stderr, "A means of %fms by frame (limit 16ms/f)\n", (float)(end - start)/(float)frame_number); - - sleep(1); - finished--; - } - - - for(list::iterator i = packets.begin(); i != packets.end(); i++) - { - delete *i; - } - - packets.clear(); - - sleep(1); - - GSclose(); - GSshutdown(); - - fclose(fp); - } -} -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSUniformBufferOGL.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSUniformBufferOGL.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSUniformBufferOGL.h 2013-07-06 09:42:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSUniformBufferOGL.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2011-2011 Gregory hainaut - * Copyright (C) 2007-2009 Gabest - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -// Note: it is same code that was developed for GSdx plugin - -#pragma once - -#ifdef GLSL4_API -class GSUniformBufferOGL { - GLuint buffer; // data object - GLuint index; // GLSL slot - uint size; // size of the data - const GLenum target; - -public: - GSUniformBufferOGL(GLuint index, uint size) : index(index) - , size(size) - ,target(GL_UNIFORM_BUFFER) - { - glGenBuffers(1, &buffer); - bind(); - allocate(); - attach(); - } - - void bind() - { - glBindBuffer(target, buffer); - } - - void allocate() - { - glBufferData(target, size, NULL, GL_STREAM_DRAW); - } - - void attach() - { - glBindBufferBase(target, index, buffer); - } - - void upload(const void* src) - { - // uint32 flags = GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT; - // uint8* dst = (uint8*) glMapBufferRange(target, 0, size, flags); - // memcpy(dst, src, size); - // glUnmapBuffer(target); - // glMapBufferRange allow to set various parameter but the call is - // synchronous whereas glBufferSubData could be asynchronous. - // TODO: investigate the extension ARB_invalidate_subdata - glBufferSubData(target, 0, size, src); - } - - ~GSUniformBufferOGL() { - glDeleteBuffers(1, &buffer); - } -}; -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSVertexArrayOGL.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSVertexArrayOGL.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/GSVertexArrayOGL.h 2013-07-06 09:42:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/GSVertexArrayOGL.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,287 +0,0 @@ -/* - * Copyright (C) 2011-2011 Gregory hainaut - * Copyright (C) 2007-2009 Gabest - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -// Note: it is same code that was developed for GSdx plugin - -#pragma once - -#ifdef GLSL4_API -struct GSInputLayoutOGL { - GLuint index; - GLint size; - GLenum type; - GLboolean normalize; - GLsizei stride; - const GLvoid* offset; -}; - -class GSBufferOGL { - const size_t m_stride; - size_t m_start; - size_t m_count; - size_t m_limit; - const GLenum m_target; - GLuint m_buffer; - - public: - GSBufferOGL(GLenum target, size_t stride) : - m_stride(stride) - , m_start(0) - , m_count(0) - , m_limit(0) - , m_target(target) - { - glGenBuffers(1, &m_buffer); - // Opengl works best with 1-4MB buffer. - m_limit = 2 * 1024 * 1024 / m_stride; - } - - ~GSBufferOGL() { glDeleteBuffers(1, &m_buffer); } - - void allocate() { allocate(m_limit); } - - void allocate(size_t new_limit) - { - m_start = 0; - m_limit = new_limit; - glBufferData(m_target, m_limit * m_stride, NULL, GL_STREAM_DRAW); - } - - void bind() - { - glBindBuffer(m_target, m_buffer); - } - - void upload(const void* src, uint32 count) - { -#if 0 - // Upload the data to the buffer - void* dst; - if (Map(&dst, count)) { - // FIXME which one to use - // GSVector4i::storent(dst, src, m_count * m_stride); - memcpy(dst, src, m_stride*m_count); - Unmap(); - } -#else - m_count = count; - - // Current GPU buffer is really too small need to allocate a new one - if (m_count > m_limit) { - allocate(std::max(m_count * 3 / 2, m_limit)); - - } else if (m_count > (m_limit - m_start) ) { - // Not enough left free room. Just go back at the beginning - m_start = 0; - // Orphan the buffer to avoid synchronization - allocate(m_limit); - } - - glBufferSubData(m_target, m_stride * m_start, m_stride * m_count, src); -#endif - } - - bool Map(void** pointer, uint32 count ) { - - m_count = count; - - // Note: For an explanation of the map flag - // see http://www.opengl.org/wiki/Buffer_Object_Streaming - uint32 map_flags = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT; - - // Current GPU buffer is really too small need to allocate a new one - if (m_count > m_limit) { - allocate(std::max(m_count * 3 / 2, m_limit)); - - } else if (m_count > (m_limit - m_start) ) { - // Not enough left free room. Just go back at the beginning - m_start = 0; - - // Tell the driver that it can orphan previous buffer and restart from a scratch buffer. - // Technically the buffer will not be accessible by the application anymore but the - // GL will effectively remove it when draws call are finised. - map_flags |= GL_MAP_INVALIDATE_BUFFER_BIT; - } else { - // Tell the driver that it doesn't need to contain any valid buffer data, and that you promise to write the entire range you map - map_flags |= GL_MAP_INVALIDATE_RANGE_BIT; - } - - // Upload the data to the buffer - *pointer = (uint8*) glMapBufferRange(m_target, m_stride*m_start, m_stride*m_count, map_flags); - - return true; - } - - void Unmap() { glUnmapBuffer(m_target); } - - void EndScene() - { - m_start += m_count; - m_count = 0; - } - - void Draw(GLenum mode) - { - glDrawArrays(mode, m_start, m_count); - } - - void Draw(GLenum mode, GLint basevertex) - { - glDrawElementsBaseVertex(mode, m_count, GL_UNSIGNED_INT, (void*)(m_start * m_stride), basevertex); - } - - void Draw(GLenum mode, GLint basevertex, int offset, int count) - { - glDrawElementsBaseVertex(mode, count, GL_UNSIGNED_INT, (void*)((m_start + offset) * m_stride), basevertex); - } - - size_t GetStart() { return m_start; } - - void debug() - { - fprintf(stderr, "data buffer: start %d, count %d\n", m_start, m_count); - } - -}; - -class GSVertexBufferStateOGL { - GSBufferOGL *m_vb; - GSBufferOGL *m_ib; - - GLuint m_va; - GLenum m_topology; - - // DEBUG - vector layout_store; - -public: - GSVertexBufferStateOGL(size_t stride, GSInputLayoutOGL* layout, uint32 layout_nbr) - { - glGenVertexArrays(1, &m_va); - layout_store.clear(); - - m_vb = new GSBufferOGL(GL_ARRAY_BUFFER, stride); - m_ib = new GSBufferOGL(GL_ELEMENT_ARRAY_BUFFER, sizeof(uint32)); - - bind(); - // Note: index array are part of the VA state so it need to be bind only once. - m_ib->bind(); - - m_vb->allocate(); - m_ib->allocate(); - set_internal_format(layout, layout_nbr); - } - - void bind() - { - glBindVertexArray(m_va); - m_vb->bind(); - } - - void set_internal_format() - { - for (vector::iterator it = layout_store.begin(); it != layout_store.end(); it++) - set_internal_format(*it); - } - - void set_internal_format(GSInputLayoutOGL& layout) { - // Note this function need both a vertex array object and a GL_ARRAY_BUFFER buffer - glEnableVertexAttribArray(layout.index); - switch (layout.type) { - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_INT: - case GL_SHORT: - case GL_INT: - // Rule: when shader use integral (not normalized) you must use glVertexAttribIPointer (note the extra I) - if (layout.normalize == false) - glVertexAttribIPointer(layout.index, layout.size, layout.type, layout.stride, layout.offset); - else - glVertexAttribPointer(layout.index, layout.size, layout.type, layout.normalize, layout.stride, layout.offset); - break; - default: - glVertexAttribPointer(layout.index, layout.size, layout.type, layout.normalize, layout.stride, layout.offset); - break; - } - } - - void set_internal_format(GSInputLayoutOGL* layout, uint32 layout_nbr) - { - for (uint i = 0; i < layout_nbr; i++) { - // DEBUG - layout_store.push_back(layout[i]); - - set_internal_format(layout[i]); - } - } - - void EndScene() - { - m_vb->EndScene(); - m_ib->EndScene(); - } - - void DrawPrimitive() { m_vb->Draw(m_topology); } - - void DrawIndexedPrimitive() { m_ib->Draw(m_topology, m_vb->GetStart() ); } - - void DrawIndexedPrimitive(int offset, int count) { m_ib->Draw(m_topology, m_vb->GetStart(), offset, count ); } - - void SetTopology(GLenum topology) { m_topology = topology; } - - void UploadVB(const void* vertices, size_t count) { m_vb->upload(vertices, count); } - - void UploadIB(const void* index, size_t count) { m_ib->upload(index, count); } - - bool MapVB(void **pointer, size_t count) { return m_vb->Map(pointer, count); } - - void UnmapVB() { m_vb->Unmap(); } - - ~GSVertexBufferStateOGL() - { - glDeleteVertexArrays(1, &m_va); - delete m_vb; - delete m_ib; - } - - void debug() - { - string topo; - switch (m_topology) { - case GL_POINTS: - topo = "point"; - break; - case GL_LINES: - topo = "line"; - break; - case GL_TRIANGLES: - topo = "triangle"; - break; - case GL_TRIANGLE_STRIP: - topo = "triangle strip"; - break; - } - m_vb->debug(); - m_ib->debug(); - fprintf(stderr, "primitives of %s\n", topo.c_str()); - - } -}; -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/HostMemory.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/HostMemory.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/HostMemory.cpp 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/HostMemory.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,620 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" - -#include -#include "Mem.h" -#include "x86.h" -#include "targets.h" -#include "ZZoglVB.h" - -// flush current vertices, call before setting new registers (the main render method) -extern void Flush(int context); - -u8* g_pbyGSMemory = NULL; // 4Mb GS system mem - -void GSMemory::init() -{ - const u32 mem_size = MEMORY_END + 0x10000; // leave some room for out of range accesses (saves on the checks) - - // clear - g_pbyGSMemory = (u8*)_aligned_malloc(mem_size, 1024); - memset(g_pbyGSMemory, 0, mem_size); -} - -void GSMemory::destroy() -{ - _aligned_free(g_pbyGSMemory); - g_pbyGSMemory = NULL; -} - -u8* GSMemory::get() -{ - return g_pbyGSMemory; -} - -u8* GSMemory::get(u32 addr) -{ - return &g_pbyGSMemory[addr*8]; -} -u8* GSMemory::get_raw(u32 addr) -{ - return &g_pbyGSMemory[addr]; -} - -u8* g_pbyGSClut = NULL; // ZZ - -void GSClut::init() -{ - g_pbyGSClut = (u8*)_aligned_malloc(256 * 8, 1024); // need 512 alignment! - memset(g_pbyGSClut, 0, 256*8); -} - -void GSClut::destroy() -{ - _aligned_free(g_pbyGSClut); - g_pbyGSClut = NULL; -} - -u8* GSClut::get() -{ - return g_pbyGSClut; -} - -u8* GSClut::get(u32 addr) -{ - return &g_pbyGSClut[addr*8]; -} -u8* GSClut::get_raw(u32 addr) -{ - return &g_pbyGSClut[addr]; -} - -extern _getPixelAddress getPixelFun[64]; - -extern CRangeManager s_RangeMngr; // manages overwritten memory -extern void ResolveInRange(int start, int end); - -static vector s_vTempBuffer, s_vTransferCache; -static int gs_imageEnd = 0; - -// From the start of monster labs. In all 3 cases, psm == 0. -// ZZogl-PG: GetRectMemAddress(0x3f4000, 0x404000, 0x0, 0x0, 0x0, 0x100, 0x40, 0x3f40, 0x100); -// ZZogl-PG: GetRectMemAddress(0x3f8000, 0x408000, 0x0, 0x0, 0x0, 0x100, 0x40, 0x3f80, 0x100); -// ZZogl-PG: GetRectMemAddress(0x3fc000, 0x40c000, 0x0, 0x0, 0x0, 0x100, 0x40, 0x3fc0, 0x100); - -void GetRectMemAddress(int& start, int& end, int psm, int x, int y, int w, int h, int bp, int bw) -{ - FUNCLOG - u32 bits = 0; - - if (m_Blocks[psm].bpp == 0) - { - ZZLog::Error_Log("ZeroGS: Bad psm 0x%x.", psm); - start = 0; - end = MEMORY_END; - return; - } - - if (PSMT_ISZTEX(psm)) - { - // This still needs an eye kept on it. - const BLOCK& b = m_Blocks[psm]; - const int x2 = x + w + b.width - 1; - const int y2 = y + h - 1; - bw = bw / b.width; - - start = (bp + ((y / b.height) * bw + (x / b.width)) * 0x20) * 0x100; - end = (bp + ((y2 / b.height) * bw + (x2 / b.width)) * 0x20) * 0x100; - return; - } - - bits = PSMT_BITS_NUM(psm); - start = getPixelFun[psm](x, y, bp, bw); - end = getPixelFun[psm](x + w - 1, y + h - 1, bp, bw) + 1; - - if (bits > 0) - { - start *= bits; - end *= bits; - } - else - { - start /= 2; - end /= 2; - } -} - -// Same as GetRectMemAddress, except that we know x & y are zero, so it's simplified a bit. -void GetRectMemAddressZero(int& start, int& end, int psm, int w, int h, int bp, int bw) -{ - FUNCLOG - u32 bits = 0; - - if (m_Blocks[psm].bpp == 0) - { - ZZLog::Error_Log("ZeroGS: Bad psm 0x%x.", psm); - start = 0; - end = MEMORY_END; - return; - } - - if (PSMT_ISZTEX(psm)) - { - // This still needs an eye kept on it. - const BLOCK& b = m_Blocks[psm]; - const int x2 = w + b.width - 1; - const int y2 = h - 1; - bw = bw / b.width; - - start = bp * 0x100; - end = (bp + ((y2 / b.height) * bw + (x2 / b.width)) * 0x20) * 0x100; - return; - } - - bits = PSMT_BITS_NUM(psm); - start = getPixelFun[psm](0, 0, bp, bw); - end = getPixelFun[psm](w - 1, h - 1, bp, bw) + 1; - - if (bits > 0) - { - start *= bits; - end *= bits; - } - else - { - start /= 2; - end /= 2; - } -} - - -void GetRectMemAddress(int& start, int& end, int psm, Point p, Size s, int bp, int bw) -{ - GetRectMemAddress(start, end, psm, p.x, p.y, s.w, s.h, bp, bw); -} - -void GetRectMemAddress(int& start, int& end, int psm, int x, int y, Size s, int bp, int bw) -{ - GetRectMemAddress(start, end, psm, x, y, s.w, s.h, bp, bw); -} - -void GetRectMemAddressZero(int& start, int& end, int psm, Size s, int bp, int bw) -{ - GetRectMemAddressZero(start, end, psm, s.w, s.h, bp, bw); -} - -void InitTransferHostLocal() -{ - FUNCLOG - -#if defined(_DEBUG) - // Xenosaga 1. - if (gs.trxpos.dx + gs.imageNew.w > gs.dstbuf.bw) - ZZLog::Debug_Log("Transfer error, width exceeded. (0x%x > 0X%x)", gs.trxpos.dx + gs.imageNew.w, gs.dstbuf.bw); -#endif - - //bool bHasFlushed = false; - - gs.image.x = gs.trxpos.dx; - gs.image.y = gs.trxpos.dy; - - gs.imageEnd.x = gs.image.x + gs.imageNew.w; - gs.imageEnd.y = gs.image.y + gs.imageNew.h; - - assert(gs.imageEnd.x < 2048 && gs.imageEnd.y < 2048); - - // This needs to be looked in to, since psm should *not* be 63. - // hack! viewful joe - if (gs.dstbuf.psm == 63) - { - ZZLog::WriteLn("gs.dstbuf.psm set to 0!"); - gs.dstbuf.psm = 0; - } - - int start, end; - - GetRectMemAddress(start, end, gs.dstbuf.psm, gs.trxpos.dx, gs.trxpos.dy, gs.imageNew, gs.dstbuf.bp, gs.dstbuf.bw); - - if (end > MEMORY_END) - { - // Monster Lab - the screwed up title screen - // Init host local out of bounds! (end == 0x404000) - // Init host local out of bounds! (end == 0x408000) - // Init host local out of bounds! (end == 0x40c000) - // MEMORY_END is 0x400000... - - ZZLog::Warn_Log("Init host local out of bounds! (end == 0x%x)", end); - //gs.transferring = false; - end = MEMORY_END; - } - - gs_imageEnd = end; - - if (vb[0].nCount > 0) Flush(0); - if (vb[1].nCount > 0) Flush(1); - - //ZZLog::Prim_Log("trans: bp:%x x:%x y:%x w:%x h:%x\n", gs.dstbuf.bp, gs.trxpos.dx, gs.trxpos.dy, gs.imageNew.w, gs.imageNew.h); -} - -void TransferHostLocal(const void* pbyMem, u32 nQWordSize) -{ - FUNCLOG - - int start = -1, end = -1; - - GetRectMemAddress(start, end, gs.dstbuf.psm, gs.image, gs.imageNew, gs.dstbuf.bp, gs.dstbuf.bw); - - if ((start == -1) || (end == -1)) ZZLog::WriteLn("start == %d, end == %d", start, end); - assert(start < gs_imageEnd); - end = gs_imageEnd; - - // sometimes games can decompress to alpha channel of render target only, in this case - // do a resolve right away. wolverine x2 - if (((gs.dstbuf.psm == PSMT8H) || (gs.dstbuf.psm == PSMT4HL) || (gs.dstbuf.psm == PSMT4HH)) && !(conf.settings().gust)) - { - list listTransmissionUpdateTargs; - s_RTs.GetTargs(start, end, listTransmissionUpdateTargs); - - for (list::iterator it = listTransmissionUpdateTargs.begin(); it != listTransmissionUpdateTargs.end(); ++it) - { - CRenderTarget* ptarg = *it; - - if ((ptarg->status & CRenderTarget::TS_Virtual)) continue; - - //ZZLog::Error_Log("Resolving to alpha channel."); - ptarg->Resolve(); - } - } - - s_RangeMngr.Insert(start, min(end, start + (int)nQWordSize*16)); - - const u8* porgend = (const u8*)pbyMem + 4 * nQWordSize; - - if (s_vTransferCache.size() > 0) - { - - int imagecache = s_vTransferCache.size(); - s_vTempBuffer.resize(imagecache + nQWordSize*4); - memcpy(&s_vTempBuffer[0], &s_vTransferCache[0], imagecache); - memcpy(&s_vTempBuffer[imagecache], pbyMem, nQWordSize*4); - - pbyMem = (const void*) & s_vTempBuffer[0]; - porgend = &s_vTempBuffer[0] + s_vTempBuffer.size(); - - int wordinc = imagecache / 4; - - if ((nQWordSize * 4 + imagecache) / 3 == ((nQWordSize + wordinc) * 4) / 3) - { - // can use the data - nQWordSize += wordinc; - } - } - - int leftover = m_Blocks[gs.dstbuf.psm].TransferHostLocal(pbyMem, nQWordSize); - - if (leftover > 0) - { - // copy the last gs.image24bitOffset to the cache - s_vTransferCache.resize(leftover); - memcpy(&s_vTransferCache[0], porgend - leftover, leftover); - } - else - { - s_vTransferCache.resize(0); - } - -#if defined(_DEBUG) - if (g_bSaveTrans) - { - tex0Info t; - t.tbp0 = gs.dstbuf.bp; - t.tw = gs.imageNew.w; - t.th = gs.imageNew.h; - t.tbw = gs.dstbuf.bw; - t.psm = gs.dstbuf.psm; - SaveTex(&t, 0); - } - -#endif -} - -void InitTransferLocalHost() -{ - FUNCLOG - assert(gs.trxpos.sx + gs.imageNew.w <= 2048 && gs.trxpos.sy + gs.imageNew.h <= 2048); - -#if defined(_DEBUG) - if (gs.trxpos.sx + gs.imageNew.w > gs.srcbuf.bw) - ZZLog::Debug_Log("Transfer error, width exceeded. (0x%x > 0x%x)", gs.trxpos.sx + gs.imageNew.w, gs.srcbuf.bw); -#endif - - gs.image.x = gs.trxpos.sx; - gs.image.y = gs.trxpos.sy; - - gs.imageEnd.x = gs.image.x + gs.imageNew.w; - gs.imageEnd.y = gs.image.y + gs.imageNew.h; - - s_vTransferCache.resize(0); - - int start, end; - - GetRectMemAddress(start, end, gs.srcbuf.psm, gs.trxpos.sx, gs.trxpos.sy, gs.imageNew, gs.srcbuf.bp, gs.srcbuf.bw); - - ResolveInRange(start, end); -} - -template -void TransferLocalHost(void* pbyMem, u32 nQWordSize, int& x, int& y, u8 *pstart) -{ - _readPixel_0 rp = readPixelFun_0[gs.srcbuf.psm]; - - int i = x, j = y; - T* pbuf = (T*)pbyMem; - u32 nSize = nQWordSize * 16 / sizeof(T); - - for (; i < gs.imageEnd.y; ++i) - { - for (; j < gs.imageEnd.x && nSize > 0; ++j, --nSize) - { - *pbuf++ = rp(pstart, j % 2048, i % 2048, gs.srcbuf.bw); - } - - if (j >= gs.imageEnd.x) - { - assert(j == gs.imageEnd.x); - j = gs.trxpos.sx; - } - else - { - assert(nSize == 0); - break; - } - } -} - -void TransferLocalHost_24(void* pbyMem, u32 nQWordSize, int& x, int& y, u8 *pstart) -{ - _readPixel_0 rp = readPixelFun_0[gs.srcbuf.psm]; - - int i = x, j = y; - u8* pbuf = (u8*)pbyMem; - u32 nSize = nQWordSize * 16 / 3; - - for (; i < gs.imageEnd.y; ++i) - { - for (; j < gs.imageEnd.x && nSize > 0; ++j, --nSize) - { - u32 p = rp(pstart, j % 2048, i % 2048, gs.srcbuf.bw); - pbuf[0] = (u8)p; - pbuf[1] = (u8)(p >> 8); - pbuf[2] = (u8)(p >> 16); - pbuf += 3; - } - - if (j >= gs.imageEnd.x) - { - assert(j == gs.imageEnd.x); - j = gs.trxpos.sx; - } - else - { - assert(nSize == 0); - break; - } - } -} - -// left/right, top/down -void TransferLocalHost(void* pbyMem, u32 nQWordSize) -{ - FUNCLOG - assert(gs.imageTransfer == XFER_LOCAL_TO_HOST); - - u8* pstart = g_pbyGSMemory + 256 * gs.srcbuf.bp; - - switch(PSMT_BITMODE(gs.srcbuf.psm)) - { - case 0: - TransferLocalHost(pbyMem, nQWordSize, gs.image.y, gs.image.x, pstart); - break; - case 1: - TransferLocalHost_24(pbyMem, nQWordSize, gs.image.y, gs.image.x, pstart); - break; - case 2: - TransferLocalHost(pbyMem, nQWordSize, gs.image.y, gs.image.x, pstart); - break; - case 3: - TransferLocalHost(pbyMem, nQWordSize, gs.image.y, gs.image.x, pstart); - break; - default: - assert(0); - break; - } - - if (gs.image.y >= gs.imageEnd.y) - { - ZZLog::Error_Log("gs.image.y >= gs.imageEnd.y!"); - assert(gs.image.y == gs.imageEnd.y); - gs.transferring = false; - } -} - -__forceinline void _TransferLocalLocal() -{ - //ZZLog::Error_Log("TransferLocalLocal(0x%x, 0x%x)", gs.srcbuf.psm, gs.dstbuf.psm); - _writePixel_0 wp = writePixelFun_0[gs.srcbuf.psm]; - _readPixel_0 rp = readPixelFun_0[gs.dstbuf.psm]; - u8* pSrcBuf = g_pbyGSMemory + gs.srcbuf.bp * 256; - u8* pDstBuf = g_pbyGSMemory + gs.dstbuf.bp * 256; - u32 widthlimit = 4; - u32 maxX = gs.trxpos.sx + gs.imageNew.w; - u32 maxY = gs.trxpos.sy + gs.imageNew.h; - - if (PSMT_BITMODE(gs.srcbuf.psm) == 0) widthlimit = 2; - if ((gs.imageNew.w & widthlimit) != 0) return; - - for(u32 i = gs.trxpos.sy, i2 = gs.trxpos.dy; i < maxY; i++, i2++) - { - for(u32 j = gs.trxpos.sx, j2 = gs.trxpos.dx; j < maxX; j += widthlimit, j2 += widthlimit) - { - wp(pDstBuf, j2%2048, i2%2048, - rp(pSrcBuf, j%2048, i%2048, gs.srcbuf.bw), gs.dstbuf.bw); - - wp(pDstBuf, (j2+1)%2048, i2%2048, - rp(pSrcBuf, (j+1)%2048, i%2048, gs.srcbuf.bw), gs.dstbuf.bw); - - if (widthlimit > 2) - { - // Then widthlimit == 4. - wp(pDstBuf, (j2+2)%2048, i2%2048, - rp(pSrcBuf, (j+2)%2048, i%2048, gs.srcbuf.bw), gs.dstbuf.bw); - - wp(pDstBuf, (j2+3)%2048, i2%2048, - rp(pSrcBuf, (j+3)%2048, i%2048, gs.srcbuf.bw), gs.dstbuf.bw); - } - } - } -} - -__forceinline void _TransferLocalLocal_4() -{ - //ZZLog::Error_Log("TransferLocalLocal_4(0x%x, 0x%x)", gs.srcbuf.psm, gs.dstbuf.psm); - _getPixelAddress_0 gsp = getPixelFun_0[gs.srcbuf.psm]; - _getPixelAddress_0 gdp = getPixelFun_0[gs.dstbuf.psm]; - u8* pSrcBuf = g_pbyGSMemory + gs.srcbuf.bp * 256; - u8* pDstBuf = g_pbyGSMemory + gs.dstbuf.bp * 256; - u32 maxX = gs.trxpos.sx + gs.imageNew.w; - u32 maxY = gs.trxpos.sy + gs.imageNew.h; - - assert((gs.imageNew.w % 8) == 0); - - for(u32 i = gs.trxpos.sy, i2 = gs.trxpos.dy; i < maxY; ++i, ++i2) - { - for(u32 j = gs.trxpos.sx, j2 = gs.trxpos.dx; j < maxX; j += 8, j2 += 8) - { - /* NOTE: the 2 conseq 4bit values are in NOT in the same byte */ - u32 read = gsp(j%2048, i%2048, gs.srcbuf.bw); - u32 write = gdp(j2%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0xf0)|(pSrcBuf[read]&0x0f); - - read = gsp((j+1)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+1)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0x0f)|(pSrcBuf[read]&0xf0); - - read = gsp((j+2)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+2)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0xf0)|(pSrcBuf[read]&0x0f); - - read = gsp((j+3)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+3)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0x0f)|(pSrcBuf[read]&0xf0); - - read = gsp((j+4)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+4)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0xf0)|(pSrcBuf[read]&0x0f); - - read = gsp((j+5)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+5)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0x0f)|(pSrcBuf[read]&0xf0); - - read = gsp((j+6)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+6)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0xf0)|(pSrcBuf[read]&0x0f); - - read = gsp((j+7)%2048, i%2048, gs.srcbuf.bw); - write = gdp((j2+7)%2048, i2%2048, gs.dstbuf.bw); - pDstBuf[write] = (pDstBuf[write]&0x0f)|(pSrcBuf[read]&0xf0); - } - } -} - -// dir depends on trxpos.dirx & trxpos.diry -void TransferLocalLocal() -{ - FUNCLOG - - //ZZLog::Error_Log("I'z in your code, transferring your memory..."); - assert(gs.imageTransfer == XFER_LOCAL_TO_LOCAL); - assert(gs.trxpos.sx + gs.imageNew.w < 2048 && gs.trxpos.sy + gs.imageNew.h < 2048); - assert(gs.trxpos.dx + gs.imageNew.w < 2048 && gs.trxpos.dy + gs.imageNew.h < 2048); - assert((gs.srcbuf.psm&0x7) == (gs.dstbuf.psm&0x7)); - - if (gs.trxpos.sx + gs.imageNew.w > gs.srcbuf.bw) - ZZLog::Debug_Log("Transfer error, src width exceeded.(0x%x > 0x%x)", gs.trxpos.sx + gs.imageNew.w, gs.srcbuf.bw); - - if (gs.trxpos.dx + gs.imageNew.w > gs.dstbuf.bw) - ZZLog::Debug_Log("Transfer error, dst width exceeded.(0x%x > 0x%x)", gs.trxpos.dx + gs.imageNew.w, gs.dstbuf.bw); - - int srcstart, srcend, dststart, dstend; - - GetRectMemAddress(srcstart, srcend, gs.srcbuf.psm, gs.trxpos.sx, gs.trxpos.sy, gs.imageNew, gs.srcbuf.bp, gs.srcbuf.bw); - GetRectMemAddress(dststart, dstend, gs.dstbuf.psm, gs.trxpos.dx, gs.trxpos.dy, gs.imageNew, gs.dstbuf.bp, gs.dstbuf.bw); - - // resolve the targs - ResolveInRange(srcstart, srcend); - - list listTargs; - - s_RTs.GetTargs(dststart, dstend, listTargs); - - for (list::iterator it = listTargs.begin(); it != listTargs.end(); ++it) - { - if (!((*it)->status & CRenderTarget::TS_Virtual)) - { - (*it)->Resolve(); - //(*it)->status |= CRenderTarget::TS_NeedUpdate; - } - } - - if (PSMT_BITMODE(gs.srcbuf.psm) != 4) - { - _TransferLocalLocal(); - } - else - { - _TransferLocalLocal_4(); - } - - g_MemTargs.ClearRange(dststart, dstend); - -#ifdef ZEROGS_DEVBUILD - - if (g_bSaveTrans) - { - tex0Info t; - t.tbp0 = gs.dstbuf.bp; - t.tw = gs.imageNew.w; - t.th = gs.imageNew.h; - t.tbw = gs.dstbuf.bw; - t.psm = gs.dstbuf.psm; - SaveTex(&t, 0); - - t.tbp0 = gs.srcbuf.bp; - t.tw = gs.imageNew.w; - t.th = gs.imageNew.h; - t.tbw = gs.srcbuf.bw; - t.psm = gs.srcbuf.psm; - SaveTex(&t, 0); - } - -#endif -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/HostMemory.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/HostMemory.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/HostMemory.h 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/HostMemory.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef HOSTMEMORY_H_INCLUDED -#define HOSTMEMORY_H_INCLUDED - -#include "GLWin.h" - -#define MEMORY_END 0x00400000 - -extern int GPU_TEXWIDTH; - -extern u8* g_pBasePS2Mem; -extern u8* g_pbyGSMemory; - -class GSMemory -{ - public: - void init(); - void destroy(); - u8* get(); - u8* get(u32 addr); - u8* get_raw(u32 addr); -}; - -extern u8* g_pbyGSClut; // the temporary clut buffer - -class GSClut -{ - public: - void init(); - void destroy(); - u8* get(); - u8* get(u32 addr); - u8* get_raw(u32 addr); -}; - -class ZeroGSInit -{ - - public: - ZeroGSInit() - { - const u32 mem_size = MEMORY_END + 0x10000; // leave some room for out of range accesses (saves on the checks) - // clear - g_pbyGSMemory = (u8*)_aligned_malloc(mem_size, 1024); - memset(g_pbyGSMemory, 0, mem_size); - - g_pbyGSClut = (u8*)_aligned_malloc(256 * 8, 1024); // need 512 alignment! - memset(g_pbyGSClut, 0, 256*8); - memset(&GLWin, 0, sizeof(GLWin)); - } - - ~ZeroGSInit() - { - _aligned_free(g_pbyGSMemory); - g_pbyGSMemory = NULL; - - _aligned_free(g_pbyGSClut); - g_pbyGSClut = NULL; - } -}; - -// The size in bytes of x strings (of texture). -inline int MemorySize(int x) -{ - return 4 * GPU_TEXWIDTH * x; -} - -// Return the address in memory of data block for string x. -inline u8* MemoryAddress(int x) -{ - return g_pbyGSMemory + MemorySize(x); -} - -template -inline u8* _MemoryAddress(int x) -{ - return g_pbyGSMemory + mult * x; -} - -extern void GetRectMemAddress(int& start, int& end, int psm, int x, int y, int w, int h, int bp, int bw); -extern void GetRectMemAddress(int& start, int& end, int psm, Point p, Size s, int bp, int bw); -extern void GetRectMemAddress(int& start, int& end, int psm, int x, int y, Size s, int bp, int bw); -extern void GetRectMemAddressZero(int& start, int& end, int psm, int w, int h, int bp, int bw); -extern void GetRectMemAddressZero(int& start, int& end, int psm, Size s, int bp, int bw); - -// called when trxdir is accessed. If host is involved, transfers memory to temp buffer byTransferBuf. -// Otherwise performs the transfer. TODO: Perhaps divide the transfers into chunks? -extern void InitTransferHostLocal(); -extern void TransferHostLocal(const void* pbyMem, u32 nQWordSize); - -extern void InitTransferLocalHost(); -extern void TransferLocalHost(void* pbyMem, u32 nQWordSize); - -extern void TransferLocalLocal(); - -#endif // HOSTMEMORY_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Conf.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Conf.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Conf.cpp 2014-04-18 21:39:12.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Conf.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -/* GSsoft - * Copyright (C) 2002-2004 GSsoft Team - * - * 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 - */ - -#include -#include -#include -#include -#include -#include -#include "GS.h" -#include "Utilities/Path.h" - -void SaveConfig() -{ - const wxString iniFile_s(Path::Combine(s_strIniPath, L"zzogl-pg.ini")); - std::string iniFile = std::string(iniFile_s.mb_str()); - - FILE* f = fopen(iniFile.c_str(), "w"); - - if (f == NULL) - { - ZZLog::Error_Log("Failed to open '%s'", iniFile.c_str()); - return; - } - - fprintf(f, "interlace = %hhx\n", conf.interlace); - - fprintf(f, "mrtdepth = %hhx\n", conf.mrtdepth); - fprintf(f, "zzoptions = %x\n", conf.zz_options._u32); - fprintf(f, "options = %x\n", conf.hacks._u32); - fprintf(f, "bilinear = %hhx\n", conf.bilinear); - fprintf(f, "aliasing = %hhx\n", conf.aa); - fprintf(f, "width = %x\n", conf.width); - fprintf(f, "height = %x\n", conf.height); - fprintf(f, "x = %x\n", conf.x); - fprintf(f, "y = %x\n", conf.y); - fprintf(f, "log = %x\n", conf.log); - fprintf(f, "skipdraw = %x\n", conf.SkipDraw); - fprintf(f, "disablehacks = %x\n", conf.disableHacks); - fclose(f); -} - -void LoadConfig() -{ - int err = 0; - memset(&conf, 0, sizeof(conf)); - conf.interlace = 0; // on, mode 1 - conf.mrtdepth = 1; - conf.bilinear = 1; - conf.log = 1; - conf.SkipDraw = 0; - conf.width = 800; - conf.height = 600; - conf.disableHacks = 0; - - const wxString iniFile_s(Path::Combine(s_strIniPath, L"zzogl-pg.ini")); - std::string iniFile = std::string(iniFile_s.mb_str()); - - FILE* f = fopen(iniFile.c_str(), "r"); - - if (f == NULL) - { - ZZLog::Error_Log("Failed to open '%s'", iniFile.c_str()); - SaveConfig();//save and return - return; - } - - err = fscanf(f, "interlace = %hhx\n", &conf.interlace); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "mrtdepth = %hhx\n", &conf.mrtdepth); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "zzoptions = %x\n", &conf.zz_options._u32); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "options = %x\n", &conf.hacks._u32); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "bilinear = %hhx\n", &conf.bilinear); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "aliasing = %hhx\n", &conf.aa); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "width = %x\n", &conf.width); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "height = %x\n", &conf.height); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "x = %x\n", &conf.x); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "y = %x\n", &conf.y); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "log = %x\n", &conf.log); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "skipdraw = %x\n", &conf.SkipDraw); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - err = fscanf(f, "disablehacks = %x\n", &conf.disableHacks); - if (err != 1) ZZLog::Error_Log("Failed to read zzogl option"); - fclose(f); - - // turn off all hacks by default - conf.setWireframe(false); - conf.setCaptureAvi(false); - conf.setLoaded(true); - - conf.isWideScreen = conf.widescreen(); - - // filter bad files - if (conf.interlace > 2) conf.interlace = 0; - if (conf.aa > 4) conf.aa = 0; - if (conf.width <= 0 || conf.height <= 0) - { - conf.width = 800; - conf.height = 600; - } - - if (conf.x < 0 || conf.y < 0) - { - conf.x = 0; - conf.y = 0; - } -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Linux.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Linux.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Linux.cpp 2014-12-07 22:04:33.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Linux.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,504 +0,0 @@ -/* ZeroGS - * Copyright (C) 2002-2004 GSsoft Team - * - * 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 - */ - -#include -#include -#include -#include -#include - -#include "GS.h" -#include "Linux.h" -#include "GLWin.h" - -#include - -extern u32 THR_KeyEvent; // value for passing out key events beetwen threads -extern bool THR_bShift; -extern bool THR_bCtrl; - -static map mapConfOpts; -static gameHacks tempHacks; - -EXPORT_C_(void) GSkeyEvent(keyEvent *ev) -{ - switch (ev->evt) - { - case KEYPRESS: - switch (ev->key) - { - case XK_F5: - case XK_F6: - case XK_F7: - case XK_F9: - THR_KeyEvent = ev->key; - break; - - case XK_Shift_L: - case XK_Shift_R: - THR_bShift = true; - break; - - case XK_Control_L: - case XK_Control_R: - THR_bCtrl = true; - break; - - } - break; - - case KEYRELEASE: - switch (ev->key) - { - case XK_Shift_L: - case XK_Shift_R: - THR_bShift = false; - break; - - case XK_Control_L: - case XK_Control_R: - THR_bCtrl = false; - break; - - } - } -} - -void add_map_entry(u32 option, const char *key, const char *desc) -{ - confOpts.value = option; - confOpts.desc = desc; - mapConfOpts[key] = confOpts; -} - -void CreateGameHackTable(GtkWidget *treeview, gameHacks hacks) -{ - char descbuf[255]; - bool itval; - GtkCellRenderer *treerend; - GtkListStore *treestore;//Gets typecast as GtkTreeModel as needed. - GtkTreeIter treeiter; - GtkTreeViewColumn *treecol; - - //--------- Let's build a treeview for our advanced options! --------// - treestore = gtk_list_store_new(2, G_TYPE_BOOLEAN, G_TYPE_STRING); - - //setup columns in treeview - //COLUMN 0 is the checkboxes - treecol = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(treecol, "Select"); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treecol); - treerend = gtk_cell_renderer_toggle_new(); - gtk_tree_view_column_pack_start(treecol, treerend, true); - gtk_tree_view_column_add_attribute(treecol, treerend, "active", 0);//link 'active' attrib to first column of model - g_object_set(treerend, "activatable", true, NULL);//set 'activatable' attrib true by default for all rows regardless of model. - g_signal_connect(treerend, "toggled", (GCallback) OnToggle_advopts, treestore);//set a global callback, we also pass a reference to our treestore. - - //COLUMN 1 is the text descriptions - treecol = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(treecol, "Description"); - gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), treecol); - treerend = gtk_cell_renderer_text_new(); - gtk_tree_view_column_pack_start(treecol, treerend, true); - gtk_tree_view_column_add_attribute(treecol, treerend, "text", 1);//link 'text' attrib to second column of model - - //setup the model with all our rows of option data - mapConfOpts.clear(); - - add_map_entry(GAME_TEXTURETARGS, "00000001", "Tex Target checking - 00000001\nLego Racers"); - add_map_entry(GAME_AUTORESET, "00000002", "Auto reset targs - 00000002\nUse when game is slow and toggling AA fixes it. Samurai Warriors. (Automatically on for Shadow Hearts)"); - add_map_entry(GAME_INTERLACE2X, "00000004", "Interlace 2X - 00000004\nFixes 2x bigger screen. Gradius 3."); - //GAME_TEXAHACK (still implemented) - add_map_entry(GAME_NOTARGETRESOLVE, "00000010", "No target resolves - 00000010\nStops all resolving of targets. Try this first for really slow games. (Automatically on for Dark Cloud 1.)"); - add_map_entry(GAME_EXACTCOLOR, "00000020", "Exact color testing - 00000020\nFixes overbright or shadow/black artifacts. Crash 'n Burn."); - //add_map_entry(GAME_NOCOLORCLAMP, "00000040", "No color clamping - 00000040\nSpeeds up games, but might be too bright or too dim."); - //GAME_FFXHACK - add_map_entry(GAME_NOALPHAFAIL, "00000100", "Alpha Fail hack - 00000100\nRemove vertical stripes or other coloring artifacts. Breaks Persona 4 and MGS3. (Automatically on for Sonic Unleashed, Shadow the Hedgehog, & Ghost in the Shell.)"); - add_map_entry(GAME_NODEPTHUPDATE, "00000200", "Disable depth updates - 00000200"); - add_map_entry(GAME_QUICKRESOLVE1, "00000400", "Resolve Hack #1 - 00000400\n Speeds some games. Kingdom Hearts."); - add_map_entry(GAME_NOQUICKRESOLVE, "00000800", "Resolve Hack #2 - 00000800\nShadow Hearts, Urbz. Destroys FFX."); - add_map_entry(GAME_NOTARGETCLUT, "00001000", "No target CLUT - 00001000\nResident Evil 4, or foggy scenes."); - add_map_entry(GAME_NOSTENCIL, "00002000", "Disable stencil buffer - 00002000\nUsually safe to do for simple scenes. Harvest Moon."); - //GAME_VSSHACKOFF (still implemented) - add_map_entry(GAME_NODEPTHRESOLVE, "00008000", "No depth resolve - 00008000\nMight give z buffer artifacts."); - add_map_entry(GAME_FULL16BITRES, "00010000", "Full 16 bit resolution - 00010000\nUse when half the screen is missing."); - add_map_entry(GAME_RESOLVEPROMOTED, "00020000", "Resolve Hack #3 - 00020000\nNeopets"); - add_map_entry(GAME_FASTUPDATE, "00040000", "Fast Update - 00040000\n Speeds some games. Needed for Sonic Unleashed. Okami."); - add_map_entry(GAME_NOALPHATEST, "00080000", "Disable alpha testing - 00080000"); - add_map_entry(GAME_DISABLEMRTDEPTH, "00100000", "Enable Multiple RTs - 00100000"); - //GAME_32BITTARGS - //GAME_PATH3HACK - //GAME_DOPARALLELCTX - add_map_entry(GAME_XENOSPECHACK, "01000000", "Specular Highlights - 01000000\nMakes graphics faster by removing highlights. (Automatically on for Xenosaga, Okami, & Okage.)"); - //add_map_entry(GAME_PARTIALPOINTERS, "02000000", "Partial targets - 02000000"); - add_map_entry(GAME_PARTIALDEPTH, "04000000", "Partial depth - 04000000"); - //GAME_REGETHACK (commented out in code) - add_map_entry(GAME_GUSTHACK, "10000000", "Gust fix - 10000000. Makes gust games cleaner and faster. (Automatically on for most Gust games)"); - add_map_entry(GAME_NOLOGZ, "20000000", "No logarithmic Z - 20000000. Could decrease number of Z-artifacts."); - add_map_entry(GAME_AUTOSKIPDRAW, "40000000", "Remove blur effect on some games\nSlow games."); - - for (map::iterator it = mapConfOpts.begin(); it != mapConfOpts.end(); ++it) - { - gtk_list_store_append(treestore, &treeiter);//new row - itval = (hacks._u32 & it->second.value) ? true : false; - - if (conf.def_hacks._u32 & it->second.value) - { - snprintf(descbuf, 254, "*%s", it->second.desc); - } - else - { - snprintf(descbuf, 254, "%s", it->second.desc); - } - - gtk_list_store_set(treestore, &treeiter, 0, itval, 1, descbuf, -1); - } - - gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(treestore));//NB: store is cast as tree model. - - g_object_unref(treestore);//allow model to be destroyed when the tree is destroyed. - - //don't select/highlight rows - gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), GTK_SELECTION_NONE); - //------treeview done -------// -} - -void SaveGameHackTable(GtkWidget *treeview, gameHacks& hacks) -{ - GtkTreeModel *treemodel; - GtkTreeIter treeiter; - gboolean treeoptval; - - //------- get advanced options from the treeview model -------// - treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)); - gtk_tree_model_get_iter_first(treemodel, &treeiter); - - hacks._u32 = 0; - - for (map::iterator it = mapConfOpts.begin(); it != mapConfOpts.end(); ++it) - { - treeoptval = false; - gtk_tree_model_get(treemodel, &treeiter, 0, &treeoptval, -1); - - if (treeoptval) hacks._u32 |= it->second.value; - - gtk_tree_model_iter_next(treemodel, &treeiter); - } - - //---------- done getting advanced options ---------// -} - -void OnToggle_advopts(GtkCellRendererToggle *cell, gchar *path, gpointer user_data) -{ - GtkTreeIter treeiter; - gboolean val; - - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(user_data), &treeiter, path); - gtk_tree_model_get(GTK_TREE_MODEL(user_data), &treeiter, 0, &val, -1); - val = !val; - gtk_list_store_set(GTK_LIST_STORE(user_data), &treeiter, 0, val, -1); -} - -void DisplayAdvancedDialog() -{ - GtkWidget *dialog; - - GtkWidget *advanced_frame, *advanced_box; - GtkWidget *advanced_scroll; - GtkWidget *tree; - - dialog = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(dialog), "ZZOgl PG Advanced Config"); - // A good value for the heigh will be 1000 instead of 800 but I'm afraid that some people still uses small screen... - gtk_window_set_default_size(GTK_WINDOW(dialog), 600, 800); - gtk_window_set_modal(GTK_WINDOW(dialog), true); - - advanced_box = gtk_vbox_new(false, 5); - advanced_frame = gtk_frame_new("Advanced Settings:"); - gtk_container_add(GTK_CONTAINER(advanced_frame), advanced_box); - - tree = gtk_tree_view_new(); - - CreateGameHackTable(tree, tempHacks); - - advanced_scroll = gtk_scrolled_window_new(NULL, NULL); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(advanced_scroll), tree); - - gtk_box_pack_start(GTK_BOX(advanced_box), advanced_scroll, true, true, 2); - - gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), advanced_frame); - - gtk_widget_show_all(dialog); - - gtk_dialog_run(GTK_DIALOG(dialog)); - SaveGameHackTable(tree, tempHacks); - gtk_widget_destroy(dialog); -} - -void DisplayDialog() -{ - int return_value; - - GtkWidget *dialog; - GtkWidget *main_frame, *main_box; - - GtkWidget *option_frame, *option_box; - GtkWidget *log_check, *dis_hacks_check; - GtkWidget *int_label, *int_box, *int_holder; - GtkWidget *bilinear_label, *bilinear_box, *bilinear_holder; - GtkWidget *aa_label, *aa_box, *aa_holder; - GtkWidget *snap_label, *snap_box, *snap_holder; - GtkWidget *fullscreen_label, *widescreen_check; - - - GtkWidget *advanced_button; - GtkWidget *separator; - GtkWidget *skipdraw_label, *skipdraw_text, *skipdraw_holder, *warning_label; - - if (!(conf.loaded())) LoadConfig(); - - /* Create the widgets */ - dialog = gtk_dialog_new_with_buttons( - "ZZOgl PG Config", - NULL, /* parent window*/ - (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), - GTK_STOCK_CANCEL, - GTK_RESPONSE_REJECT, - GTK_STOCK_OK, - GTK_RESPONSE_ACCEPT, - NULL); - - log_check = gtk_check_button_new_with_label("Logging"); - gtk_widget_set_tooltip_text(log_check, "Used for Debugging."); - - int_label = gtk_label_new("Interlacing:"); - int_box = gtk_combo_box_text_new(); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(int_box), "No Interlacing"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(int_box), "Interlace 0"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(int_box), "Interlace 1"); - gtk_combo_box_set_active(GTK_COMBO_BOX(int_box), conf.interlace); - gtk_widget_set_tooltip_text(int_box, "Toggled by pressing F5 when running."); - int_holder = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(int_holder), int_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(int_holder), int_box, false, false, 2); - - bilinear_label = gtk_label_new("Bilinear Filtering:"); - bilinear_box = gtk_combo_box_text_new(); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bilinear_box), "Off"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bilinear_box), "Normal"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(bilinear_box), "Forced"); - gtk_combo_box_set_active(GTK_COMBO_BOX(bilinear_box), conf.bilinear); - gtk_widget_set_tooltip_text(bilinear_box, "Best quality is off. Turn on for speed. Toggled by pressing Shift + F5 when running."); - bilinear_holder = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(bilinear_holder), bilinear_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(bilinear_holder), bilinear_box, false, false, 2); - - aa_label = gtk_label_new("Anti-Aliasing:"); - aa_box = gtk_combo_box_text_new(); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(aa_box), "1X (None)"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(aa_box), "2X"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(aa_box), "4X"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(aa_box), "8X"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(aa_box), "16X"); - gtk_combo_box_set_active(GTK_COMBO_BOX(aa_box), conf.aa); - gtk_widget_set_tooltip_text(aa_box, "Toggled by pressing F6 when running."); - aa_holder = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(aa_holder), aa_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(aa_holder), aa_box, false, false, 2); - - snap_label = gtk_label_new("Snapshot format:"); - snap_box = gtk_combo_box_text_new(); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(snap_box), "JPEG"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(snap_box), "TIFF"); - gtk_combo_box_set_active(GTK_COMBO_BOX(snap_box), conf.zz_options.tga_snap); - snap_holder = gtk_hbox_new(false, 5); - gtk_box_pack_start(GTK_BOX(snap_holder), snap_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(snap_holder), snap_box, false, false, 2); - - widescreen_check = gtk_check_button_new_with_label("Widescreen"); - gtk_widget_set_tooltip_text(widescreen_check, "Force a 4:3 ration when disabled"); - fullscreen_label = gtk_label_new("Press Alt-Enter for Fullscreen."); - gtk_label_set_single_line_mode(GTK_LABEL(fullscreen_label), false); - - advanced_button = gtk_button_new_with_label("Advanced..."); - - dis_hacks_check = gtk_check_button_new_with_label("Disable Automatic Hacks"); - gtk_widget_set_tooltip_text(dis_hacks_check, "Used for testing how useful hacks that are on automatically are."); - -#ifdef ZEROGS_DEVBUILD - separator = gtk_hseparator_new(); - skipdraw_label = gtk_label_new("Skipdraw:"); - skipdraw_text = gtk_entry_new(); - warning_label = gtk_label_new("Experimental!!"); - char buf[5]; - sprintf(buf, "%d", conf.SkipDraw); - gtk_entry_set_text(GTK_ENTRY(skipdraw_text), buf); - skipdraw_holder = gtk_hbox_new(false, 5); - - gtk_box_pack_start(GTK_BOX(skipdraw_holder), skipdraw_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(skipdraw_holder), skipdraw_text, false, false, 2); -#endif - - main_box = gtk_hbox_new(false, 5); - main_frame = gtk_frame_new("ZZOgl PG Config"); - - gtk_container_add(GTK_CONTAINER(main_frame), main_box); - - option_box = gtk_vbox_new(false, 5); - option_frame = gtk_frame_new(""); - gtk_container_add(GTK_CONTAINER(option_frame), option_box); - gtk_frame_set_shadow_type(GTK_FRAME(option_frame), GTK_SHADOW_NONE); - - gtk_box_pack_start(GTK_BOX(option_box), log_check, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), bilinear_holder, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), int_holder, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), aa_holder, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), snap_holder, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), widescreen_check, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), advanced_button, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), dis_hacks_check, false, false, 2); - -#ifdef ZEROGS_DEVBUILD - gtk_box_pack_start(GTK_BOX(option_box), separator, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), warning_label, false, false, 2); - gtk_box_pack_start(GTK_BOX(option_box), skipdraw_holder, false, false, 2); -#endif - - gtk_box_pack_start(GTK_BOX(option_box), fullscreen_label, false, false, 2); - - gtk_box_pack_start(GTK_BOX(main_box), option_frame, false, false, 2); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(log_check), conf.log); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widescreen_check), (conf.widescreen())); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dis_hacks_check), (conf.disableHacks)); - - gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), main_frame); - g_signal_connect_swapped(advanced_button, "clicked", G_CALLBACK(DisplayAdvancedDialog), advanced_button); - tempHacks = conf.hacks; - gtk_widget_show_all(dialog); - - return_value = gtk_dialog_run(GTK_DIALOG(dialog)); - - if (return_value == GTK_RESPONSE_ACCEPT) - { - ZZOptions fake_options; - - if (gtk_combo_box_get_active(GTK_COMBO_BOX(int_box)) != -1) - conf.interlace = gtk_combo_box_get_active(GTK_COMBO_BOX(int_box)); - - if (gtk_combo_box_get_active(GTK_COMBO_BOX(aa_box)) != -1) - conf.aa = gtk_combo_box_get_active(GTK_COMBO_BOX(aa_box)); - - if (gtk_combo_box_get_active(GTK_COMBO_BOX(bilinear_box)) != -1) - conf.bilinear = gtk_combo_box_get_active(GTK_COMBO_BOX(bilinear_box)); - - conf.log = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(log_check)); - fake_options.widescreen = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widescreen_check)); - fake_options.tga_snap = gtk_combo_box_get_active(GTK_COMBO_BOX(snap_box)); - -#ifdef ZEROGS_DEVBUILD - conf.SkipDraw = atoi((char*)gtk_entry_get_text(GTK_ENTRY(skipdraw_text))); -#endif - - conf.zz_options = fake_options; - conf.hacks = tempHacks; - - conf.disableHacks = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dis_hacks_check)); - - GSsetGameCRC(g_LastCRC, conf.hacks._u32); - - SaveConfig(); - } - - gtk_widget_destroy(dialog); -} - -EXPORT_C_(void) GSconfigure() -{ - char strcurdir[256]; - if (getcwd(strcurdir, 256) == NULL) { - fprintf(stderr, "Failed to get current working directory\n"); - return; - } - - if (!(conf.loaded())) LoadConfig(); - - DisplayDialog(); -} - -void SysMessage(const char *fmt, ...) -{ - va_list list; - char msg[512]; - - va_start(list, fmt); - vsprintf(msg, fmt, list); - va_end(list); - - if (msg[strlen(msg)-1] == '\n') msg[strlen(msg)-1] = 0; - - GtkWidget *dialog; - - dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, - GTK_BUTTONS_OK, - "%s", msg); - - gtk_dialog_run(GTK_DIALOG(dialog)); - - gtk_widget_destroy(dialog); -} - -EXPORT_C_(void) GSabout() -{ - SysMessage("ZZOgl PG: by Zeydlitz (PG version worked on by arcum42, gregory, and the pcsx2 development team). Based off of ZeroGS, by zerofrog."); -} - -EXPORT_C_(s32) GStest() -{ - return 0; -} - -void *SysLoadLibrary(char *lib) -{ - return dlopen(lib, RTLD_NOW | RTLD_GLOBAL); -} - -void *SysLoadSym(void *lib, char *sym) -{ - void *ret = dlsym(lib, sym); - - if (ret == NULL) ZZLog::Debug_Log("null: %s", sym); - - return dlsym(lib, sym); -} - -char *SysLibError() -{ - return dlerror(); -} - -void SysCloseLibrary(void *lib) -{ - dlclose(lib); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Linux.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Linux.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Linux/Linux.h 2010-07-04 22:49:00.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Linux/Linux.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2002-2004 GSsoft Team - * - * 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 - */ - -#ifndef __LINUX_H__ -#define __LINUX_H__ - -struct confOptsStruct -{ - int value; - const char *desc; -} confOpts; - - -void OnToggle_advopts(GtkCellRendererToggle *cell, gchar *path, gpointer user_data); - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/linux_replay.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/linux_replay.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/linux_replay.cpp 2012-10-28 10:14:42.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/linux_replay.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2011-2012 Hainaut gregory - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#include "GS.h" - -EXPORT_C_(void) GSsetLogDir(const char* dir); -EXPORT_C_(void) GSsetSettingsDir(const char* dir); -EXPORT_C_(void) GSReplay(char* lpszCmdLine); - - -void help() -{ - fprintf(stderr, "Loader gs file\n"); - fprintf(stderr, "ARG1 Ini directory\n"); - fprintf(stderr, "ARG2 .gs file\n"); - exit(1); -} - -int main ( int argc, char *argv[] ) -{ - GSsetLogDir("/tmp"); - if ( argc == 3) { - GSsetSettingsDir(argv[1]); - GSReplay(argv[2]); - } else if ( argc == 2) { -#ifdef XDG_STD - std::string home("HOME"); - char * val = getenv( home.c_str() ); - if (val == NULL) { - fprintf(stderr, "Failed to get the home dir\n"); - help(); - } - - std::string ini_dir(val); - ini_dir += "/.config/pcsx2/inis"; - - GSsetSettingsDir(ini_dir.c_str()); - GSReplay(argv[1]); -#else - fprintf(stderr, "default ini dir only supported on XDG\n"); - help(); -#endif - } else - help(); - -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem.cpp 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,373 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "targets.h" -#include "x86.h" -#include "Util.h" - -#include "Mem_Transmit.h" -#include "Mem_Swizzle.h" - -#ifdef ZZNORMAL_MEMORY - -BLOCK m_Blocks[0x40]; // do so blocks are indexable - -PCSX2_ALIGNED16(u32 tempblock[64]); - -// Add a bunch of local variables that used to be in the TransferHostLocal -// functions, in order to de-macro the TransmitHostLocal macros. -// May be in a class or namespace eventually. -int tempX, tempY; -int pitch, area, fracX; -int nSize; -u8* pstart; - -// ------------------------ -// | Y | -// ------------------------ -// | block | | -// | aligned area | X | -// | | | -// ------------------------ -// | Y | -// ------------------------ - -template -static __forceinline const T* AlignOnBlockBoundry(TransferData data, TransferFuncts fun, Point alignedPt, int& endY, const T* pbuf) -{ - bool bCanAlign = ((MOD_POW2(gs.trxpos.dx, data.blockwidth) == 0) && (gs.image.x == gs.trxpos.dx) && - (alignedPt.y > endY) && (alignedPt.x > gs.trxpos.dx)); - - if ((gs.imageEnd.x - gs.trxpos.dx) % data.widthlimit) - { - /* hack */ - int testwidth = (int)nSize - - (gs.imageEnd.y - gs.image.y) * (gs.imageEnd.x - gs.trxpos.dx) - + (gs.image.x - gs.trxpos.dx); - - if ((testwidth <= data.widthlimit) && (testwidth >= -data.widthlimit)) - { - /* don't transfer */ - /*ZZLog::Debug_Log("Bad texture %s: %d %d %d", #psm, gs.trxpos.dx, gs.imageEnd.x, nQWordSize);*/ - //ZZLog::Error_Log("Bad texture: testwidth = %d; data.widthlimit = %d", testwidth, data.widthlimit); - gs.transferring = false; - } - - bCanAlign = false; - } - - /* first align on block boundary */ - if (MOD_POW2(gs.image.y, data.blockheight) || !bCanAlign) - { - u32 transwidth; - - if (!bCanAlign) - endY = gs.imageEnd.y; /* transfer the whole image */ - else - assert(endY < gs.imageEnd.y); /* part of alignment condition */ - - if (((gs.imageEnd.x - gs.trxpos.dx) % data.widthlimit) || ((gs.imageEnd.x - gs.image.x) % data.widthlimit)) - { - /* transmit with a width of 1 */ - transwidth = (1 + (gs.dstbuf.psm == PSMT4)); - } - else - { - transwidth = data.widthlimit; - } - - pbuf = TransmitHostLocalY(data.psm, fun.wp, transwidth, endY, pbuf); - - if (pbuf == NULL) return NULL; - - if (nSize == 0 || tempY == gs.imageEnd.y) return NULL; - } - - return pbuf; -} - -template -static __forceinline const T* TransferAligningToBlocks(TransferData data, TransferFuncts fun, Point alignedPt, const T* pbuf) -{ - bool bAligned; - const u32 TSize = sizeof(T); - _SwizzleBlock swizzle; - - /* can align! */ - pitch = gs.imageEnd.x - gs.trxpos.dx; - area = pitch * data.blockheight; - fracX = gs.imageEnd.x - alignedPt.x; - - /* on top of checking whether pbuf is aligned, make sure that the width is at least aligned to its limits (due to bugs in pcsx2) */ - bAligned = !((uptr)pbuf & 0xf) && (TransPitch(pitch, data.transfersize) & 0xf) == 0; - - if (bAligned || ((gs.dstbuf.psm == PSMCT24) || (gs.dstbuf.psm == PSMT8H) || (gs.dstbuf.psm == PSMT4HH) || (gs.dstbuf.psm == PSMT4HL))) - swizzle = (fun.Swizzle); - else - swizzle = (fun.Swizzle_u); - - //Transfer aligning to blocks. - for (; tempY < alignedPt.y && nSize >= area; tempY += data.blockheight, nSize -= area) - { - for (int tempj = gs.trxpos.dx; tempj < alignedPt.x; tempj += data.blockwidth, pbuf += TransPitch(data.blockwidth, data.transfersize) / TSize) - { - u8 *temp = pstart + fun.gp(tempj, tempY, gs.dstbuf.bw) * data.blockbits / 8; - swizzle(temp, (u8*)pbuf, TransPitch(pitch, data.transfersize)); - } -#ifdef ZEROGS_SSE2 - // Note: swizzle function uses some non temporal move (mm_stream) instruction. - // store fence insures that previous store are finish before execute new one. - _mm_sfence(); - -#endif - - /* transfer the rest */ - if (alignedPt.x < gs.imageEnd.x) - { - pbuf = TransmitHostLocalX(data.psm, fun.wp, data.widthlimit, data.blockheight, alignedPt.x, pbuf); - - if (pbuf == NULL) return NULL; - - pbuf -= TransPitch((alignedPt.x - gs.trxpos.dx), data.transfersize) / TSize; - } - else - { - pbuf += (data.blockheight - 1) * TransPitch(pitch, data.transfersize) / TSize; - } - - tempX = gs.trxpos.dx; - } - - return pbuf; -} - -static __forceinline int FinishTransfer(TransferData data, int nLeftOver) -{ - if (tempY >= gs.imageEnd.y) - { - assert( gs.transferring == false || tempY == gs.imageEnd.y); - gs.transferring = false; - /*int start, end; - GetRectMemAddress(start, end, gs.dstbuf.psm, gs.trxpos.dx, gs.trxpos.dy, gs.imageNew, gs.dstbuf.bp, gs.dstbuf.bw); - g_MemTargs.ClearRange(start, end);*/ - } - else - { - /* update new params */ - gs.image.y = tempY; - gs.image.x = tempX; - } - - return (nSize * TransPitch(2, data.transfersize) + nLeftOver) / 2; -} - -template -static __forceinline int RealTransfer(u32 psm, const void* pbyMem, u32 nQWordSize) -{ - assert(gs.imageTransfer == XFER_HOST_TO_LOCAL); - TransferData data = tData[psm]; - TransferFuncts fun(psm); - pstart = g_pbyGSMemory + gs.dstbuf.bp * 256; - const T* pbuf = (const T*)pbyMem; - const int tp2 = TransPitch(2, data.transfersize); - int nLeftOver = (nQWordSize * 4 * 2) % tp2; - tempY = gs.image.y; - tempX = gs.image.x; - Point alignedPt; - - nSize = (nQWordSize * 4 * 2) / tp2; - nSize = min(nSize, gs.imageNew.w * gs.imageNew.h); - - int endY = ROUND_UPPOW2(gs.image.y, data.blockheight); - alignedPt.y = ROUND_DOWNPOW2(gs.imageEnd.y, data.blockheight); - alignedPt.x = ROUND_DOWNPOW2(gs.imageEnd.x, data.blockwidth); - - pbuf = AlignOnBlockBoundry(data, fun, alignedPt, endY, pbuf); - - if (pbuf == NULL) return FinishTransfer(data, nLeftOver); - - pbuf = TransferAligningToBlocks(data, fun, alignedPt, pbuf); - - if (pbuf == NULL) return FinishTransfer(data, nLeftOver); - - if (TransPitch(nSize, data.transfersize) / 4 > 0) - { - pbuf = TransmitHostLocalY(psm, fun.wp, data.widthlimit, gs.imageEnd.y, pbuf); - - if (pbuf == NULL) return FinishTransfer(data, nLeftOver); - - /* sometimes wrong sizes are sent (tekken tag) */ - assert(gs.transferring == false || TransPitch(nSize, data.transfersize) / 4 <= 2); - } - - return FinishTransfer(data, nLeftOver); -} - -int TransferHostLocal32(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMCT32, pbyMem, nQWordSize); } -int TransferHostLocal32Z(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT32Z, pbyMem, nQWordSize); } -int TransferHostLocal24(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMCT24, pbyMem, nQWordSize); } -int TransferHostLocal24Z(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT24Z, pbyMem, nQWordSize); } -int TransferHostLocal16(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMCT16, pbyMem, nQWordSize); } -int TransferHostLocal16S(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMCT16S, pbyMem, nQWordSize); } -int TransferHostLocal16Z(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT16Z, pbyMem, nQWordSize); } -int TransferHostLocal16SZ(const void* pbyMem, u32 nQWordSize){ return RealTransfer(PSMT16SZ, pbyMem, nQWordSize); } -int TransferHostLocal8(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT8, pbyMem, nQWordSize); } -int TransferHostLocal4(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT4, pbyMem, nQWordSize); } -int TransferHostLocal8H(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT8H, pbyMem, nQWordSize); } -int TransferHostLocal4HL(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT4HL, pbyMem, nQWordSize); } -int TransferHostLocal4HH(const void* pbyMem, u32 nQWordSize) { return RealTransfer(PSMT4HH, pbyMem, nQWordSize); } - -void TransferLocalHost32(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost24(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost16(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost16S(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost8(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost4(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost8H(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost4HL(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost4HH(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost32Z(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost24Z(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost16Z(void* pbyMem, u32 nQWordSize) {FUNCLOG} -void TransferLocalHost16SZ(void* pbyMem, u32 nQWordSize) {FUNCLOG} - -void fill_block(BLOCK b, vector& vBlockData, vector& vBilinearData) -{ - float* psrcf = (float*)&vBlockData[0] + b.ox + b.oy * BLOCK_TEXWIDTH; - - for(int i = 0; i < b.height; ++i) - { - u32 i_width = i*BLOCK_TEXWIDTH; - for(int j = 0; j < b.width; ++j) - { - /* fill the table */ - u32 bt = b.blockTable[(i / b.colheight)*(b.width/b.colwidth) + (j / b.colwidth)]; - u32 ct = b.columnTable[(i%b.colheight)*b.colwidth + (j%b.colwidth)]; - u32 u = bt * 64 * b.mult + ct; - b.pageTable[i * b.width + j] = u; - psrcf[i_width + j] = (float)(u) / (float)(GPU_TEXWIDTH * b.mult); - } - } - - float4* psrcv = (float4*)&vBilinearData[0] + b.ox + b.oy * BLOCK_TEXWIDTH; - - for(int i = 0; i < b.height; ++i) - { - u32 i_width = i*BLOCK_TEXWIDTH; - u32 i_width2 = ((i+1)%b.height)*BLOCK_TEXWIDTH; - for(int j = 0; j < b.width; ++j) - { - u32 temp = ((j + 1) % b.width); - float4* pv = &psrcv[i_width + j]; - pv->x = psrcf[i_width + j]; - pv->y = psrcf[i_width + temp]; - pv->z = psrcf[i_width2 + j]; - pv->w = psrcf[i_width2 + temp]; - } - } -} - -void BLOCK::FillBlocks(vector& vBlockData, vector& vBilinearData) -{ - FUNCLOG - vBlockData.resize(BLOCK_TEXWIDTH * BLOCK_TEXHEIGHT * 4); - vBilinearData.resize(BLOCK_TEXWIDTH * BLOCK_TEXHEIGHT * sizeof(float4)); - - BLOCK b; - - memset(m_Blocks, 0, sizeof(m_Blocks)); - - // 32 - b.SetDim(64, 32, 0, 0, 1); - b.SetTable(PSMCT32); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMCT32] = b; - m_Blocks[PSMCT32].SetFun(PSMCT32); - - // 24 (same as 32 except write/readPixel are different) - m_Blocks[PSMCT24] = b; - m_Blocks[PSMCT24].SetFun(PSMCT24); - - // 8H (same as 32 except write/readPixel are different) - m_Blocks[PSMT8H] = b; - m_Blocks[PSMT8H].SetFun(PSMT8H); - - m_Blocks[PSMT4HL] = b; - m_Blocks[PSMT4HL].SetFun(PSMT4HL); - - m_Blocks[PSMT4HH] = b; - m_Blocks[PSMT4HH].SetFun(PSMT4HH); - - // 32z - b.SetDim(64, 32, 64, 0, 1); - b.SetTable(PSMT32Z); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMT32Z] = b; - m_Blocks[PSMT32Z].SetFun(PSMT32Z); - - // 24Z (same as 32Z except write/readPixel are different) - m_Blocks[PSMT24Z] = b; - m_Blocks[PSMT24Z].SetFun(PSMT24Z); - - // 16 - b.SetDim(64, 64, 0, 32, 2); - b.SetTable(PSMCT16); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMCT16] = b; - m_Blocks[PSMCT16].SetFun(PSMCT16); - - // 16s - b.SetDim(64, 64, 64, 32, 2); - b.SetTable(PSMCT16S); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMCT16S] = b; - m_Blocks[PSMCT16S].SetFun(PSMCT16S); - - // 16z - b.SetDim(64, 64, 0, 96, 2); - b.SetTable(PSMT16Z); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMT16Z] = b; - m_Blocks[PSMT16Z].SetFun(PSMT16Z); - - // 16sz - b.SetDim(64, 64, 64, 96, 2); - b.SetTable(PSMT16SZ); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMT16SZ] = b; - m_Blocks[PSMT16SZ].SetFun(PSMT16SZ); - - // 8 - b.SetDim(128, 64, 0, 160, 4); - b.SetTable(PSMT8); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMT8] = b; - m_Blocks[PSMT8].SetFun(PSMT8); - - // 4 - b.SetDim(128, 128, 0, 224, 8); - b.SetTable(PSMT4); - fill_block(b, vBlockData, vBilinearData); - m_Blocks[PSMT4] = b; - m_Blocks[PSMT4].SetFun(PSMT4); -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem.h 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,543 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __MEM_H__ -#define __MEM_H__ - -#include -#include - -// works only when base is a power of 2 -static __forceinline int ROUND_UPPOW2(int val, int base) { return (((val) + (base - 1))&~(base - 1)); } -static __forceinline int ROUND_DOWNPOW2(int val, int base) { return ((val)&~(base - 1)); } -static __forceinline int MOD_POW2(int val, int base) { return ((val)&(base - 1)); } - -// d3d texture dims -const int BLOCK_TEXWIDTH = 128; -const int BLOCK_TEXHEIGHT = 512; - -// PSM is u6 value, so we MUST guarantee, that we don't crush on incorrect psm. -#define MAX_PSM 64 -#define TABLE_WIDTH 8 - -#ifndef ZZNORMAL_MEMORY -#include "ZZoglMem.h" -#endif - -typedef u32(*_getPixelAddress)(int x, int y, u32 bp, u32 bw); -typedef u32(*_getPixelAddress_0)(int x, int y, u32 bw); -typedef void (*_writePixel)(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw); -typedef void (*_writePixel_0)(void* pmem, int x, int y, u32 pixel, u32 bw); -typedef u32(*_readPixel)(const void* pmem, int x, int y, u32 bp, u32 bw); -typedef u32(*_readPixel_0)(const void* pmem, int x, int y, u32 bw); -typedef int (*_TransferHostLocal)(const void* pbyMem, u32 nQWordSize); -typedef void (*_TransferLocalHost)(void* pbyMem, u32 nQWordSize); -typedef void (*_SwizzleBlock)(u8 *dst, u8 *src, int pitch); - -extern _getPixelAddress_0 getPixelFun_0[64]; -extern _writePixel_0 writePixelFun_0[64]; -extern _readPixel_0 readPixelFun_0[64]; -extern _writePixel writePixelFun[64]; -extern _readPixel readPixelFun[64]; -extern _SwizzleBlock swizzleBlockFun[64]; -extern _SwizzleBlock swizzleBlockUnFun[64]; -extern _TransferHostLocal TransferHostLocalFun[64]; -extern _TransferLocalHost TransferLocalHostFun[64]; - - -// Both of the following structs should probably be local class variables or in a namespace, -// but this works for the moment. - -struct TransferData -{ - // Signed because Visual C++ is weird. - s32 widthlimit; - u32 blockbits; - u32 blockwidth; - u32 blockheight; - u32 transfersize; - u32 psm; -}; - -#ifdef ZZNORMAL_MEMORY -extern PCSX2_ALIGNED16(u32 tempblock[64]); - -struct TransferFuncts -{ - _writePixel_0 wp; - _getPixelAddress_0 gp; - _SwizzleBlock Swizzle, Swizzle_u; - __forceinline TransferFuncts(_writePixel_0 writePix, _getPixelAddress_0 readPix, _SwizzleBlock s, _SwizzleBlock su) - { - wp = writePix; - gp = readPix; - Swizzle = s; - Swizzle_u = su; - } - __forceinline TransferFuncts(u32 psm) - { - wp = writePixelFun_0[psm]; - gp = getPixelFun_0[psm]; - Swizzle = swizzleBlockFun[psm]; - Swizzle_u = swizzleBlockUnFun[psm]; - } -}; - -extern TransferData tData[64]; -// rest not visible externally - -extern u32 g_blockTable32[4][8]; -extern u32 g_blockTable32Z[4][8]; -extern u32 g_blockTable16[8][4]; -extern u32 g_blockTable16S[8][4]; -extern u32 g_blockTable16Z[8][4]; -extern u32 g_blockTable16SZ[8][4]; -extern u32 g_blockTable8[4][8]; -extern u32 g_blockTable4[8][4]; - -extern u32 g_columnTable32[8][8]; -extern u32 g_columnTable16[8][16]; -extern u32 g_columnTable8[16][16]; -extern u32 g_columnTable4[16][32]; - -extern u32 g_pageTable32[32][64]; -extern u32 g_pageTable32Z[32][64]; -extern u32 g_pageTable16[64][64]; -extern u32 g_pageTable16S[64][64]; -extern u32 g_pageTable16Z[64][64]; -extern u32 g_pageTable16SZ[64][64]; -extern u32 g_pageTable8[64][128]; -extern u32 g_pageTable4[128][128]; - -struct BLOCK -{ - BLOCK() { memset(this, 0, sizeof(BLOCK)); } - - // shader constants for this block - float4 vTexBlock; - float4 vTexDims; - int width, height; // dims of one page in pixels - int ox, oy, mult; - int bpp; - int colwidth, colheight; - u32* pageTable; // offset inside each page - u32* blockTable; - u32* columnTable; - - _getPixelAddress getPixelAddress; - _getPixelAddress_0 getPixelAddress_0; - _writePixel writePixel; - _writePixel_0 writePixel_0; - _readPixel readPixel; - _readPixel_0 readPixel_0; - _TransferHostLocal TransferHostLocal; - _TransferLocalHost TransferLocalHost; - - // texture must be of dims BLOCK_TEXWIDTH and BLOCK_TEXHEIGHT - static void FillBlocks(std::vector& vBlockData, std::vector& vBilinearData); - - void SetDim(u32 bw, u32 bh, u32 ox2, u32 oy2, u32 mult2) - { - ox = ox2; - oy = oy2; - mult = mult2; - vTexDims = float4(BLOCK_TEXWIDTH/(float)(bw), BLOCK_TEXHEIGHT/(float)bh, 0, 0); - vTexBlock = float4((float)bw/BLOCK_TEXWIDTH, (float)bh/BLOCK_TEXHEIGHT, ((float)ox+0.2f)/BLOCK_TEXWIDTH, ((float)oy+0.05f)/BLOCK_TEXHEIGHT); - width = bw; - height = bh; - colwidth = bh / 4; - colheight = bw / 8; - bpp = 32/mult; - } - - void SetFun(u32 psm) - { - writePixel = writePixelFun[psm]; - writePixel_0 = writePixelFun_0[psm]; - readPixel = readPixelFun[psm]; - readPixel_0 = readPixelFun_0[psm]; - TransferHostLocal = TransferHostLocalFun[psm]; - TransferLocalHost = TransferLocalHostFun[psm]; - } - - void SetTable(u32 psm) - { - switch (psm) { - case PSMCT32: - assert( sizeof(g_pageTable32) == width * height * sizeof(g_pageTable32[0][0]) ); - pageTable = &g_pageTable32[0][0]; - blockTable = &g_blockTable32[0][0]; - columnTable = &g_columnTable32[0][0]; - break; - case PSMT32Z: - assert( sizeof(g_pageTable32Z) == width * height * sizeof(g_pageTable32Z[0][0]) ); - pageTable = &g_pageTable32Z[0][0]; - blockTable = &g_blockTable32Z[0][0]; - columnTable = &g_columnTable32[0][0]; - break; - case PSMCT16: - assert( sizeof(g_pageTable16) == width * height * sizeof(g_pageTable16[0][0]) ); - pageTable = &g_pageTable16[0][0]; - blockTable = &g_blockTable16[0][0]; - columnTable = &g_columnTable16[0][0]; - break; - case PSMCT16S: - assert( sizeof(g_pageTable16S) == width * height * sizeof(g_pageTable16S[0][0]) ); - pageTable = &g_pageTable16S[0][0]; - blockTable = &g_blockTable16S[0][0]; - columnTable = &g_columnTable16[0][0]; - break; - case PSMT16Z: - assert( sizeof(g_pageTable16Z) == width * height * sizeof(g_pageTable16Z[0][0]) ); - pageTable = &g_pageTable16Z[0][0]; - blockTable = &g_blockTable16Z[0][0]; - columnTable = &g_columnTable16[0][0]; - break; - case PSMT16SZ: - assert( sizeof(g_pageTable16SZ) == width * height * sizeof(g_pageTable16SZ[0][0]) ); - pageTable = &g_pageTable16SZ[0][0]; - blockTable = &g_blockTable16SZ[0][0]; - columnTable = &g_columnTable16[0][0]; - break; - case PSMT8: - assert( sizeof(g_pageTable8) == width * height * sizeof(g_pageTable8[0][0]) ); - pageTable = &g_pageTable8[0][0]; - blockTable = &g_blockTable8[0][0]; - columnTable = &g_columnTable8[0][0]; - break; - case PSMT4: - assert( sizeof(g_pageTable4) == width * height * sizeof(g_pageTable4[0][0]) ); - pageTable = &g_pageTable4[0][0]; - blockTable = &g_blockTable4[0][0]; - columnTable = &g_columnTable4[0][0]; - break; - default: - pageTable = NULL; - blockTable = NULL; - columnTable = NULL; - break; - } - } -}; - -extern BLOCK m_Blocks[]; - -#define getPixelAddress24 getPixelAddress32 -#define getPixelAddress24_0 getPixelAddress32_0 -#define getPixelAddress8H getPixelAddress32 -#define getPixelAddress8H_0 getPixelAddress32_0 -#define getPixelAddress4HL getPixelAddress32 -#define getPixelAddress4HL_0 getPixelAddress32_0 -#define getPixelAddress4HH getPixelAddress32 -#define getPixelAddress4HH_0 getPixelAddress32_0 -#define getPixelAddress24Z getPixelAddress32Z -#define getPixelAddress24Z_0 getPixelAddress32Z_0 - -static __forceinline u32 getPixelAddress32(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 5) * (bw >> 6)) + (x >> 6); - u32 word = bp * 64 + basepage * 2048 + g_pageTable32[y&31][x&63]; - return word; -} - -static __forceinline u32 getPixelAddress16(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 6) * (bw >> 6)) + (x >> 6); - u32 word = bp * 128 + basepage * 4096 + g_pageTable16[y&63][x&63]; - return word; -} - -static __forceinline u32 getPixelAddress16S(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 6) * (bw >> 6)) + (x >> 6); - u32 word = bp * 128 + basepage * 4096 + g_pageTable16S[y&63][x&63]; - return word; -} - -static __forceinline u32 getPixelAddress8(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 6) * ((bw + 127) >> 7)) + (x >> 7); - u32 word = bp * 256 + basepage * 8192 + g_pageTable8[y&63][x&127]; - return word; -} - -static __forceinline u32 getPixelAddress4(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 7) * ((bw + 127) >> 7)) + (x >> 7); - u32 word = bp * 512 + basepage * 16384 + g_pageTable4[y&127][x&127]; - return word; -} - -static __forceinline u32 getPixelAddress32Z(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 5) * (bw >> 6)) + (x >> 6); - u32 word = bp * 64 + basepage * 2048 + g_pageTable32Z[y&31][x&63]; - return word; -} - -static __forceinline u32 getPixelAddress16Z(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 6) * (bw >> 6)) + (x >> 6); - u32 word = bp * 128 + basepage * 4096 + g_pageTable16Z[y&63][x&63]; - return word; -} - -static __forceinline u32 getPixelAddress16SZ(int x, int y, u32 bp, u32 bw) -{ - u32 basepage = ((y >> 6) * (bw >> 6)) + (x >> 6); - u32 word = bp * 128 + basepage * 4096 + g_pageTable16SZ[y&63][x&63]; - return word; -} - -/////////////// - -static __forceinline void writePixel32(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u32*)pmem)[getPixelAddress32(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel24(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - u8 *buf = (u8*) & ((u32*)pmem)[getPixelAddress32(x, y, bp, bw)]; - u8 *pix = (u8*) & pixel; - buf[0] = pix[0]; - buf[1] = pix[1]; - buf[2] = pix[2]; -} - -static __forceinline void writePixel16(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u16*)pmem)[getPixelAddress16(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel16S(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u16*)pmem)[getPixelAddress16S(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel8(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u8*)pmem)[getPixelAddress8(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel8H(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u8*)pmem)[4*getPixelAddress32(x, y, bp, bw)+3] = pixel; -} - -static __forceinline void writePixel4(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - u32 addr = getPixelAddress4(x, y, bp, bw); - u8 pix = ((u8*)pmem)[addr/2]; - - if (addr & 0x1)((u8*)pmem)[addr/2] = (pix & 0x0f) | (pixel << 4); - else ((u8*)pmem)[addr/2] = (pix & 0xf0) | (pixel); -} - -static __forceinline void writePixel4HL(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - u8 *p = (u8*)pmem + 4 * getPixelAddress4HL(x, y, bp, bw) + 3; - *p = (*p & 0xf0) | pixel; -} - -static __forceinline void writePixel4HH(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - u8 *p = (u8*)pmem + 4 * getPixelAddress4HH(x, y, bp, bw) + 3; - *p = (*p & 0x0f) | (pixel << 4); -} - -static __forceinline void writePixel32Z(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u32*)pmem)[getPixelAddress32Z(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel24Z(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - u8 *buf = (u8*)pmem + 4 * getPixelAddress32Z(x, y, bp, bw); - u8 *pix = (u8*) & pixel; - buf[0] = pix[0]; - buf[1] = pix[1]; - buf[2] = pix[2]; -} - -static __forceinline void writePixel16Z(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u16*)pmem)[getPixelAddress16Z(x, y, bp, bw)] = pixel; -} - -static __forceinline void writePixel16SZ(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) -{ - ((u16*)pmem)[getPixelAddress16SZ(x, y, bp, bw)] = pixel; -} - -/////////////// - -static __forceinline u32 readPixel32(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u32*)pmem)[getPixelAddress32(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel24(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u32*)pmem)[getPixelAddress32(x, y, bp, bw)] & 0xffffff; -} - -static __forceinline u32 readPixel16(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u16*)pmem)[getPixelAddress16(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel16S(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u16*)pmem)[getPixelAddress16S(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel8(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u8*)pmem)[getPixelAddress8(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel8H(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u8*)pmem)[4*getPixelAddress32(x, y, bp, bw) + 3]; -} - -static __forceinline u32 readPixel4(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - u32 addr = getPixelAddress4(x, y, bp, bw); - u8 pix = ((const u8*)pmem)[addr/2]; - - if (addr & 0x1) - return pix >> 4; - else - return pix & 0xf; -} - -static __forceinline u32 readPixel4HL(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - const u8 *p = (const u8*)pmem + 4 * getPixelAddress4HL(x, y, bp, bw) + 3; - return *p & 0x0f; -} - -static __forceinline u32 readPixel4HH(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - const u8 *p = (const u8*)pmem + 4 * getPixelAddress4HH(x, y, bp, bw) + 3; - return *p >> 4; -} - -/////////////// - -static __forceinline u32 readPixel32Z(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u32*)pmem)[getPixelAddress32Z(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel24Z(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u32*)pmem)[getPixelAddress32Z(x, y, bp, bw)] & 0xffffff; -} - -static __forceinline u32 readPixel16Z(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u16*)pmem)[getPixelAddress16Z(x, y, bp, bw)]; -} - -static __forceinline u32 readPixel16SZ(const void* pmem, int x, int y, u32 bp, u32 bw) -{ - return ((const u16*)pmem)[getPixelAddress16SZ(x, y, bp, bw)]; -} - -/////////////////////////////// -// Functions that take 0 bps // -/////////////////////////////// - -static __forceinline u32 getPixelAddress32_0(int x, int y, u32 bw) { return getPixelAddress32(x, y, 0, bw); } -static __forceinline u32 getPixelAddress16_0(int x, int y, u32 bw) { return getPixelAddress16(x, y, 0, bw); } -static __forceinline u32 getPixelAddress16S_0(int x, int y, u32 bw) { return getPixelAddress16S(x, y, 0, bw); } -static __forceinline u32 getPixelAddress8_0(int x, int y, u32 bw) { return getPixelAddress8(x, y, 0, bw); } -static __forceinline u32 getPixelAddress4_0(int x, int y, u32 bw) { return getPixelAddress4(x, y, 0, bw); } -static __forceinline u32 getPixelAddress32Z_0(int x, int y, u32 bw) { return getPixelAddress32Z(x, y, 0, bw); } -static __forceinline u32 getPixelAddress16Z_0(int x, int y, u32 bw) { return getPixelAddress16Z(x, y, 0, bw); } -static __forceinline u32 getPixelAddress16SZ_0(int x, int y, u32 bw) { return getPixelAddress16SZ(x, y, 0, bw); } - -/////////////// - -static __forceinline void writePixel32_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel32(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel24_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel24(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel16_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel16(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel16S_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel16S(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel8_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel8(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel8H_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel8H(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel4_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel4(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel4HL_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel4HL(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel4HH_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel4HH(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel32Z_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel32Z(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel24Z_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel24Z(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel16Z_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel16Z(pmem, x, y, pixel, 0, bw); } -static __forceinline void writePixel16SZ_0(void* pmem, int x, int y, u32 pixel, u32 bw) { writePixel16SZ(pmem, x, y, pixel, 0, bw); } - -/////////////// - -static __forceinline u32 readPixel32_0(const void* pmem, int x, int y, u32 bw) { return readPixel32(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel24_0(const void* pmem, int x, int y, u32 bw) { return readPixel24(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel16_0(const void* pmem, int x, int y, u32 bw) { return readPixel16(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel16S_0(const void* pmem, int x, int y, u32 bw) { return readPixel16S(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel8_0(const void* pmem, int x, int y, u32 bw) { return readPixel8(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel8H_0(const void* pmem, int x, int y, u32 bw) { return readPixel8H(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel4_0(const void* pmem, int x, int y, u32 bw) { return readPixel4(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel4HL_0(const void* pmem, int x, int y, u32 bw) { return readPixel4HL(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel4HH_0(const void* pmem, int x, int y, u32 bw) { return readPixel4HH(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel32Z_0(const void* pmem, int x, int y, u32 bw) { return readPixel32Z(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel24Z_0(const void* pmem, int x, int y, u32 bw) { return readPixel24Z(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel16Z_0(const void* pmem, int x, int y, u32 bw) { return readPixel16Z(pmem, x, y, 0, bw); } -static __forceinline u32 readPixel16SZ_0(const void* pmem, int x, int y, u32 bw) { return readPixel16SZ(pmem, x, y, 0, bw); } - -/////////////// - -#endif - -extern int TransferHostLocal32(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal32Z(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal24(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal24Z(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal16(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal16S(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal16Z(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal16SZ(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal8(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal4(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal8H(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal4HL(const void* pbyMem, u32 nQWordSize); -extern int TransferHostLocal4HH(const void* pbyMem, u32 nQWordSize); - -extern void TransferLocalHost32(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost24(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost16(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost16S(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost8(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost4(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost8H(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost4HL(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost4HH(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost32Z(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost24Z(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost16Z(void* pbyMem, u32 nQWordSize); -extern void TransferLocalHost16SZ(void* pbyMem, u32 nQWordSize); - -#endif /* __MEM_H__ */ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Swizzle.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Swizzle.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Swizzle.cpp 2012-04-21 16:13:45.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Swizzle.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,726 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "Mem_Swizzle.h" -#include "Util.h" - -// WARNING a sfence instruction must be call after SwizzleBlock sse2 function - -#ifdef ZEROGS_SSE2 -static const __aligned16 u32 mask_24b_H[4] = {0xFF000000, 0x0000FFFF, 0xFF000000, 0x0000FFFF}; -static const __aligned16 u32 mask_24b_L[4] = {0x00FFFFFF, 0x00000000, 0x00FFFFFF, 0x00000000}; - -template -__forceinline void SwizzleBlock32_sse2_I(u8 *dst, u8 *src, int pitch) -{ - __m128i src_0; - __m128i src_1; - __m128i src_2; - __m128i src_3; - - for (int i=3 ; i >= 0 ; --i) { - // load - if (aligned) { - src_0 = _mm_load_si128((__m128i*)src); // 5 4 1 0 - src_1 = _mm_load_si128((__m128i*)(src+16)); // 13 12 9 8 - src_2 = _mm_load_si128((__m128i*)(src+pitch)); // 7 6 3 2 - src_3 = _mm_load_si128((__m128i*)(src+16+pitch)); // 15 14 11 10 - } else { - src_0 = _mm_loadu_si128((__m128i*)src); // 5 4 1 0 - src_1 = _mm_loadu_si128((__m128i*)(src+16)); // 13 12 9 8 - src_2 = _mm_loadu_si128((__m128i*)(src+pitch)); // 7 6 3 2 - src_3 = _mm_loadu_si128((__m128i*)(src+16+pitch)); // 15 14 11 10 - } - - // Reorder - __m128i dst_0 = _mm_unpacklo_epi64(src_0, src_2); // 3 2 1 0 - __m128i dst_1 = _mm_unpackhi_epi64(src_0, src_2); // 7 6 5 4 - __m128i dst_2 = _mm_unpacklo_epi64(src_1, src_3); // 11 10 9 8 - __m128i dst_3 = _mm_unpackhi_epi64(src_1, src_3); // 15 14 13 12 - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); - - // update the pointer - dst += 64; - src += 2*pitch; - } -} - -template -__forceinline void SwizzleBlock16_sse2_I(u8 *dst, u8 *src, int pitch) -{ - __m128i src_0_L; - __m128i src_0_H; - __m128i src_2_L; - __m128i src_2_H; - - for (int i=3 ; i >= 0 ; --i) { - // load - if (aligned) { - src_0_L = _mm_load_si128((__m128i*)src); // 13L 12L 9L 8L 5L 4L 1L 0L - src_0_H = _mm_load_si128((__m128i*)(src+16)); // 13H 12H 9H 8H 5H 4H 1H 0H - src_2_L = _mm_load_si128((__m128i*)(src+pitch)); // 15L 14L 11L 10L 7L 6L 3L 2L - src_2_H = _mm_load_si128((__m128i*)(src+16+pitch)); // 15H 14H 11H 10H 7H 6H 3H 2H - } else { - src_0_L = _mm_loadu_si128((__m128i*)src); // 13L 12L 9L 8L 5L 4L 1L 0L - src_0_H = _mm_loadu_si128((__m128i*)(src+16)); // 13H 12H 9H 8H 5H 4H 1H 0H - src_2_L = _mm_loadu_si128((__m128i*)(src+pitch)); // 15L 14L 11L 10L 7L 6L 3L 2L - src_2_H = _mm_loadu_si128((__m128i*)(src+16+pitch)); // 15H 14H 11H 10H 7H 6H 3H 2H - } - - // Interleave L and H to obtains 32 bits packets - __m128i dst_0_tmp = _mm_unpacklo_epi16(src_0_L, src_0_H); // 5H 5L 4H 4L 1H 1L 0H 0L - __m128i dst_1_tmp = _mm_unpacklo_epi16(src_2_L, src_2_H); // 7H 7L 6H 6L 3H 3L 2H 2L - __m128i dst_2_tmp = _mm_unpackhi_epi16(src_0_L, src_0_H); // 13H 13L 12H 12L 9H 9L 8H 8L - __m128i dst_3_tmp = _mm_unpackhi_epi16(src_2_L, src_2_H); // 15H 15L 14H 14L 11H 11L 10H 10L - - // Reorder - __m128i dst_0 = _mm_unpacklo_epi64(dst_0_tmp, dst_1_tmp); // 3 2 1 0 - __m128i dst_1 = _mm_unpackhi_epi64(dst_0_tmp, dst_1_tmp); // 7 6 5 4 - __m128i dst_2 = _mm_unpacklo_epi64(dst_2_tmp, dst_3_tmp); // 11 10 9 8 - __m128i dst_3 = _mm_unpackhi_epi64(dst_2_tmp, dst_3_tmp); // 15 14 13 12 - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); - - // update the pointer - dst += 64; - src += 2*pitch; - } -} - -// Template the code to improve reuse of code -template -__forceinline void SwizzleColumn8_sse2_I(u8 *dst, u8 *src, int pitch) -{ - __m128i src_0; - __m128i src_1; - __m128i src_2; - __m128i src_3; - - // load 4 line of 16*8 bits packets - if (aligned) { - src_0 = _mm_load_si128((__m128i*)src); - src_2 = _mm_load_si128((__m128i*)(src+pitch)); - src_1 = _mm_load_si128((__m128i*)(src+2*pitch)); - src_3 = _mm_load_si128((__m128i*)(src+3*pitch)); - } else { - src_0 = _mm_loadu_si128((__m128i*)src); - src_2 = _mm_loadu_si128((__m128i*)(src+pitch)); - src_1 = _mm_loadu_si128((__m128i*)(src+2*pitch)); - src_3 = _mm_loadu_si128((__m128i*)(src+3*pitch)); - } - - // shuffle 2 lines to align pixels - if (INDEX == 0 || INDEX == 2) { - src_1 = _mm_shuffle_epi32(src_1, 0xB1); // 13 12 9 8 5 4 1 0 ... (byte 3 & 1) - src_3 = _mm_shuffle_epi32(src_3, 0xB1); // 15 14 11 10 7 6 3 2 ... (byte 3 & 1) - } else if (INDEX == 1 || INDEX == 3) { - src_0 = _mm_shuffle_epi32(src_0, 0xB1); // 13 12 9 8 5 4 1 0 ... (byte 2 & 0) - src_2 = _mm_shuffle_epi32(src_2, 0xB1); // 15 14 11 10 7 6 3 2 ... (byte 2 & 0) - } else { - assert(0); - } - // src_0 = 13 12 9 8 5 4 1 0 ... (byte 2 & 0) - // src_1 = 13 12 9 8 5 4 1 0 ... (byte 3 & 1) - // src_2 = 15 14 11 10 7 6 3 2 ... (byte 2 & 0) - // src_3 = 15 14 11 10 7 6 3 2 ... (byte 3 & 1) - - // Interleave byte 1 & 0 to obtain 16 bits packets - __m128i src_0_L = _mm_unpacklo_epi8(src_0, src_1); // 13L 12L 9L 8L 5L 4L 1L 0L - __m128i src_1_L = _mm_unpacklo_epi8(src_2, src_3); // 15L 14L 11L 10L 7L 6L 3L 2L - // Interleave byte 3 & 2 to obtain 16 bits packets - __m128i src_0_H = _mm_unpackhi_epi8(src_0, src_1); // 13H 12H 9H 8H 5H 4H 1H 0H - __m128i src_1_H = _mm_unpackhi_epi8(src_2, src_3); // 15H 14H 11H 10H 7H 6H 3H 2H - - // Interleave H and L to obtain 32 bits packets - __m128i dst_0_tmp = _mm_unpacklo_epi16(src_0_L, src_0_H); // 5 4 1 0 - __m128i dst_1_tmp = _mm_unpacklo_epi16(src_1_L, src_1_H); // 7 6 3 2 - __m128i dst_2_tmp = _mm_unpackhi_epi16(src_0_L, src_0_H); // 13 12 9 8 - __m128i dst_3_tmp = _mm_unpackhi_epi16(src_1_L, src_1_H); // 15 14 11 10 - - // Reorder the 32 bits packets - __m128i dst_0 = _mm_unpacklo_epi64(dst_0_tmp, dst_1_tmp); // 3 2 1 0 - __m128i dst_1 = _mm_unpackhi_epi64(dst_0_tmp, dst_1_tmp); // 7 6 5 4 - __m128i dst_2 = _mm_unpacklo_epi64(dst_2_tmp, dst_3_tmp); // 11 10 9 8 - __m128i dst_3 = _mm_unpackhi_epi64(dst_2_tmp, dst_3_tmp); // 15 14 13 12 - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); -} - -template -__forceinline void SwizzleBlock8_sse2_I(u8 *dst, u8 *src, int pitch) -{ - SwizzleColumn8_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn8_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn8_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn8_sse2_I(dst, src, pitch); -} - -// Template the code to improve reuse of code -template -__forceinline void SwizzleColumn4_sse2_I(u8 *dst, u8 *src, int pitch) -{ - __m128i src_0; - __m128i src_1; - __m128i src_2; - __m128i src_3; - - // Build a mask (tranform a u32 to a 4 packets u32) - const u32 mask_template = 0x0f0f0f0f; - __m128i mask = _mm_cvtsi32_si128(mask_template); - mask = _mm_shuffle_epi32(mask, 0); - - // load 4 line of 32*4 bits packets - if (aligned) { - src_0 = _mm_load_si128((__m128i*)src); - src_2 = _mm_load_si128((__m128i*)(src+pitch)); - src_1 = _mm_load_si128((__m128i*)(src+2*pitch)); - src_3 = _mm_load_si128((__m128i*)(src+3*pitch)); - } else { - src_0 = _mm_loadu_si128((__m128i*)src); - src_2 = _mm_loadu_si128((__m128i*)(src+pitch)); - src_1 = _mm_loadu_si128((__m128i*)(src+2*pitch)); - src_3 = _mm_loadu_si128((__m128i*)(src+3*pitch)); - } - - // shuffle 2 lines to align pixels - if (INDEX == 0 || INDEX == 2) { - src_1 = _mm_shufflelo_epi16(src_1, 0xB1); - src_1 = _mm_shufflehi_epi16(src_1, 0xB1); // 13 12 9 8 5 4 1 0 ... (Half-byte 7 & 5 & 3 & 1) - src_3 = _mm_shufflelo_epi16(src_3, 0xB1); - src_3 = _mm_shufflehi_epi16(src_3, 0xB1); // 15 14 11 10 7 6 3 2 ... (Half-byte 7 & 5 & 3 & 1) - } else if (INDEX == 1 || INDEX == 3) { - src_0 = _mm_shufflelo_epi16(src_0, 0xB1); - src_0 = _mm_shufflehi_epi16(src_0, 0xB1); // 13 12 9 8 5 4 1 0 ... (Half-byte 6 & 4 & 2 & 0) - src_2 = _mm_shufflelo_epi16(src_2, 0xB1); - src_2 = _mm_shufflehi_epi16(src_2, 0xB1); // 15 14 11 10 7 6 3 2 ... (Half-byte 6 & 4 & 2 & 0) - } else { - assert(0); - } - // src_0 = 13 12 9 8 5 4 1 0 ... (Half-byte 6 & 4 & 2 & 0) - // src_1 = 13 12 9 8 5 4 1 0 ... (Half-byte 7 & 5 & 3 & 1) - // src_2 = 15 14 11 10 7 6 3 2 ... (Half-byte 6 & 4 & 2 & 0) - // src_3 = 15 14 11 10 7 6 3 2 ... (Half-byte 7 & 5 & 3 & 1) - - // ** Interleave Half-byte to obtain 8 bits packets - // Shift value to ease 4 bits filter. - // Note use a packet shift to allow a 4bits shifts - __m128i src_0_shift = _mm_srli_epi64(src_0, 4); // ? 13 12 9 8 5 4 1 ... (Half-byte 6 & 4 & 2 & 0) - __m128i src_1_shift = _mm_slli_epi64(src_1, 4); // 12 9 8 5 4 1 0 ? ... (Half-byte 7 & 5 & 3 & 1) - __m128i src_2_shift = _mm_srli_epi64(src_2, 4); // ? 15 14 11 10 7 6 3 ... (Half-byte 6 & 4 & 2 & 0) - __m128i src_3_shift = _mm_slli_epi64(src_3, 4); // 14 11 10 7 6 3 2 ? ... (Half-byte 7 & 5 & 3 & 1) - - // 12 - 8 - 4 - 0 - (HB odd) || - 12 - 8 - 4 - 0 (HB even) => 12 8 4 0 (byte 3 & 2 & 1 & 0) - src_0 = _mm_or_si128(_mm_andnot_si128(mask, src_1_shift), _mm_and_si128(mask, src_0)); - // - 13 - 9 - 5 - 1 (HB even) || 13 - 9 - 5 - 1 - (HB odd) => 13 9 5 1 (byte 3 & 2 & 1 & 0) - src_1 = _mm_or_si128(_mm_and_si128(mask, src_0_shift), _mm_andnot_si128(mask, src_1)); - - // 14 - 10 - 6 - 2 - (HB odd) || - 14 - 10 - 6 - 2 (HB even) => 14 10 6 2 (byte 3 & 2 & 1 & 0) - src_2 = _mm_or_si128(_mm_andnot_si128(mask, src_3_shift), _mm_and_si128(mask, src_2)); - // - 15 - 11 - 7 - 3 (HB even) || 15 - 11 - 7 - 3 - (HB odd) => 15 11 7 3 (byte 3 & 2 & 1 & 0) - src_3 = _mm_or_si128(_mm_and_si128(mask, src_2_shift), _mm_andnot_si128(mask, src_3)); - - - // reorder the 8 bits packets - __m128i src_0_tmp = _mm_unpacklo_epi8(src_0, src_1); // 13 12 9 8 5 4 1 0 (byte 1 & 0) - __m128i src_1_tmp = _mm_unpackhi_epi8(src_0, src_1); // 13 12 9 8 5 4 1 0 (byte 3 & 2) - __m128i src_2_tmp = _mm_unpacklo_epi8(src_2, src_3); // 15 14 11 10 7 6 3 2 (byte 1 & 0) - __m128i src_3_tmp = _mm_unpackhi_epi8(src_2, src_3); // 15 14 11 10 7 6 3 2 (byte 3 & 2) - - // interleave byte to obtain 32 bits packets - __m128i src_0_L = _mm_unpacklo_epi8(src_0_tmp, src_1_tmp); // 2.13 0.13 2.12 0.12 2.9 0.9 2.8 0.8 2.5 0.5 2.4 0.4 2.1 0.1 2.0 0.0 - __m128i src_0_H = _mm_unpackhi_epi8(src_0_tmp, src_1_tmp); // 3.13 1.13 3.12 1.12 3.9 1.9 3.8 1.8 3.5 1.5 3.4 1.4 3.1 1.1 3.0 1.0 - __m128i src_1_L = _mm_unpacklo_epi8(src_2_tmp, src_3_tmp); // 2.15 0.15 2.14 0.14 2.11 0.11 2.10 0.10 2.7 0.7 2.6 0.6 2.3 0.3 2.2 0.2 - __m128i src_1_H = _mm_unpackhi_epi8(src_2_tmp, src_3_tmp); // 3.15 1.15 3.14 1.14 3.11 1.11 3.10 1.10 3.7 1.7 3.6 1.6 3.3 1.3 3.2 1.2 - - __m128i dst_0_tmp = _mm_unpacklo_epi8(src_0_L, src_0_H); // 5 4 1 0 - __m128i dst_1_tmp = _mm_unpacklo_epi8(src_1_L, src_1_H); // 7 6 3 2 - __m128i dst_2_tmp = _mm_unpackhi_epi8(src_0_L, src_0_H); // 13 12 9 8 - __m128i dst_3_tmp = _mm_unpackhi_epi8(src_1_L, src_1_H); // 15 14 11 10 - - // Reorder the 32 bits packets - __m128i dst_0 = _mm_unpacklo_epi64(dst_0_tmp, dst_1_tmp); // 3 2 1 0 - __m128i dst_1 = _mm_unpackhi_epi64(dst_0_tmp, dst_1_tmp); // 7 6 5 4 - __m128i dst_2 = _mm_unpacklo_epi64(dst_2_tmp, dst_3_tmp); // 11 10 9 8 - __m128i dst_3 = _mm_unpackhi_epi64(dst_2_tmp, dst_3_tmp); // 15 14 13 12 - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); -} - -template -__forceinline void SwizzleBlock4_sse2_I(u8 *dst, u8 *src, int pitch) -{ - SwizzleColumn4_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn4_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn4_sse2_I(dst, src, pitch); - - dst += 64; - src += 4*pitch; - SwizzleColumn4_sse2_I(dst, src, pitch); -} - -template -__forceinline void SwizzleBlock8H_4H(u8 *dst, u8 *src, int pitch) -{ - __m128i zero_128 = _mm_setzero_si128(); - __m128i src_0; - __m128i src_1; - __m128i src_2; - __m128i src_3; - __m128i src_0_init_H; - __m128i src_0_init_L; - __m128i src_2_init_H; - __m128i src_2_init_L; - __m128i src_0_init; - __m128i src_2_init; - - __m128i upper_mask = _mm_cvtsi32_si128(0xF0F0F0F0); - // Build the write_mask (tranform a u32 to a 4 packets u32) - __m128i write_mask; - if (FOUR_BIT) { - if (UPPER) write_mask = _mm_cvtsi32_si128(0xF0000000); - else write_mask = _mm_cvtsi32_si128(0x0F000000); - } else { - write_mask = _mm_cvtsi32_si128(0xFF000000); - } - write_mask = _mm_shuffle_epi32(write_mask, 0); - - for (int i=3 ; i >= 0 ; --i) { - if (FOUR_BIT) { - src_0_init = _mm_cvtsi32_si128(*(u32*)src); - src_2_init = _mm_cvtsi32_si128(*(u32*)(src + pitch)); - } else { - src_0_init = _mm_loadl_epi64((__m128i*)src); - src_2_init = _mm_loadl_epi64((__m128i*)(src + pitch)); - } - - // Convert to 8 bits - if (FOUR_BIT) { - src_0_init_H = _mm_and_si128(upper_mask, src_0_init); - src_0_init_L = _mm_andnot_si128(upper_mask, src_0_init); - src_2_init_H = _mm_and_si128(upper_mask, src_2_init); - src_2_init_L = _mm_andnot_si128(upper_mask, src_2_init); - - if (UPPER) { - src_0_init_L = _mm_slli_epi32(src_0_init_L, 4); - src_2_init_L = _mm_slli_epi32(src_2_init_L, 4); - } else { - src_0_init_H = _mm_srli_epi32(src_0_init_H, 4); - src_2_init_H = _mm_srli_epi32(src_2_init_H, 4); - } - - // Repack the src to keep HByte order - src_0_init = _mm_unpacklo_epi8(src_0_init_L, src_0_init_H); - src_2_init = _mm_unpacklo_epi8(src_2_init_L, src_2_init_H); - } - - // transform to 16 bits (add 0 in low bits) - src_0_init = _mm_unpacklo_epi8(zero_128, src_0_init); - src_2_init = _mm_unpacklo_epi8(zero_128, src_2_init); - - // transform to 32 bits (add 0 in low bits) - src_0 = _mm_unpacklo_epi16(zero_128, src_0_init); - src_1 = _mm_unpackhi_epi16(zero_128, src_0_init); - src_2 = _mm_unpacklo_epi16(zero_128, src_2_init); - src_3 = _mm_unpackhi_epi16(zero_128, src_2_init); - - // Reorder the data (same as 32 bits format) - __m128i dst_0 = _mm_unpacklo_epi64(src_0, src_2); - __m128i dst_1 = _mm_unpackhi_epi64(src_0, src_2); - __m128i dst_2 = _mm_unpacklo_epi64(src_1, src_3); - __m128i dst_3 = _mm_unpackhi_epi64(src_1, src_3); - - // Load previous value and apply the ~write_mask - __m128i old_dst_0 = _mm_andnot_si128(write_mask, _mm_load_si128((__m128i*)dst)); - dst_0 = _mm_or_si128(dst_0, old_dst_0); - - __m128i old_dst_1 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+1)); - dst_1 = _mm_or_si128(dst_1, old_dst_1); - - __m128i old_dst_2 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+2)); - dst_2 = _mm_or_si128(dst_2, old_dst_2); - - __m128i old_dst_3 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+3)); - dst_3 = _mm_or_si128(dst_3, old_dst_3); - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); - - // update the pointer - dst += 64; - src += 2*pitch; - } -} - -// special swizzle macros - which I converted to functions. - -__forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock32_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock24(u8 *dst, u8 *src, int pitch) -{ - __m128i mask_H = _mm_load_si128((__m128i*)mask_24b_H); - __m128i mask_L = _mm_load_si128((__m128i*)mask_24b_L); - // Build the write_mask (tranform a u32 to a 4 packets u32) - __m128i write_mask = _mm_cvtsi32_si128(0x00FFFFFF); - write_mask = _mm_shuffle_epi32(write_mask, 0); - - for (int i=3 ; i >= 0 ; --i) { - // Note src can be out of bound of GS memory (but there is some spare allocation - // to avoid a tricky corner case) - __m128i src_0 = _mm_loadu_si128((__m128i*)src); - __m128i src_1 = _mm_loadu_si128((__m128i*)(src+12)); - __m128i src_2 = _mm_loadu_si128((__m128i*)(src+pitch)); - __m128i src_3 = _mm_loadu_si128((__m128i*)(src+pitch+12)); - - // transform 24 bits value to 32 bits one - // 1/ Align a little the data - src_0 = _mm_slli_si128(src_0, 2); - src_0 = _mm_shufflelo_epi16(src_0, 0x39); - - src_1 = _mm_slli_si128(src_1, 2); - src_1 = _mm_shufflelo_epi16(src_1, 0x39); - - src_2 = _mm_slli_si128(src_2, 2); - src_2 = _mm_shufflelo_epi16(src_2, 0x39); - - src_3 = _mm_slli_si128(src_3, 2); - src_3 = _mm_shufflelo_epi16(src_3, 0x39); - - // 2/ Filter the 24 bits pixels & do the conversion - __m128i src_0_H = _mm_and_si128(src_0, mask_H); - __m128i src_0_L = _mm_and_si128(src_0, mask_L); - src_0_H = _mm_slli_si128(src_0_H, 1); - src_0 = _mm_or_si128(src_0_H, src_0_L); - - __m128i src_1_H = _mm_and_si128(src_1, mask_H); - __m128i src_1_L = _mm_and_si128(src_1, mask_L); - src_1_H = _mm_slli_si128(src_1_H, 1); - src_1 = _mm_or_si128(src_1_H, src_1_L); - - __m128i src_2_H = _mm_and_si128(src_2, mask_H); - __m128i src_2_L = _mm_and_si128(src_2, mask_L); - src_2_H = _mm_slli_si128(src_2_H, 1); - src_2 = _mm_or_si128(src_2_H, src_2_L); - - __m128i src_3_H = _mm_and_si128(src_3, mask_H); - __m128i src_3_L = _mm_and_si128(src_3, mask_L); - src_3_H = _mm_slli_si128(src_3_H, 1); - src_3 = _mm_or_si128(src_3_H, src_3_L); - - // Reorder the data (same as 32 bits format) - __m128i dst_0 = _mm_unpacklo_epi64(src_0, src_2); - __m128i dst_1 = _mm_unpackhi_epi64(src_0, src_2); - __m128i dst_2 = _mm_unpacklo_epi64(src_1, src_3); - __m128i dst_3 = _mm_unpackhi_epi64(src_1, src_3); - - // Load previous value and apply the ~write_mask - __m128i old_dst_0 = _mm_andnot_si128(write_mask, _mm_load_si128((__m128i*)dst)); - dst_0 = _mm_or_si128(dst_0, old_dst_0); - - __m128i old_dst_1 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+1)); - dst_1 = _mm_or_si128(dst_1, old_dst_1); - - __m128i old_dst_2 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+2)); - dst_2 = _mm_or_si128(dst_2, old_dst_2); - - __m128i old_dst_3 = _mm_andnot_si128(write_mask, _mm_load_si128(((__m128i*)dst)+3)); - dst_3 = _mm_or_si128(dst_3, old_dst_3); - - // store - _mm_stream_si128((__m128i*)dst, dst_0); - _mm_stream_si128(((__m128i*)dst)+1, dst_1); - _mm_stream_si128(((__m128i*)dst)+2, dst_2); - _mm_stream_si128(((__m128i*)dst)+3, dst_3); - - // update the pointer - dst += 64; - src += 2*pitch; - } -} - -__forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock16_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock4_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock32_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock16_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock4_sse2_I(dst, src, pitch); -} - -__forceinline void SwizzleBlock8H(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8H_4H(dst, src, pitch); -} - -__forceinline void SwizzleBlock4HH(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8H_4H(dst, src, pitch); -} - -__forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8H_4H(dst, src, pitch); -} - -#else - -__forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock32_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock16_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock4_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock32_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock16_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock8_c(dst, src, pitch); -} - -__forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch) -{ - SwizzleBlock4_c(dst, src, pitch); -} - -__forceinline void __fastcall SwizzleBlock32_mask(u8* dst, u8* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if (WriteMask == 0xffffffff) - { - for (int j = 0; j < 8; j++, d += 8, src += srcpitch) - for (int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = ((u32*)src)[i]; - } - else - { - for (int j = 0; j < 8; j++, d += 8, src += srcpitch) - for (int i = 0; i < 8; i++) - ((u32*)dst)[d[i]] = (((u32*)dst)[d[i]] & ~WriteMask) | (((u32*)src)[i] & WriteMask); - } -} - -__forceinline void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch) -{ - SwizzleBlock32_mask(dst, src, srcpitch, 0xffffffff); -} - -__forceinline void __fastcall SwizzleBlock16_c(u8* dst, u8* src, int srcpitch) -{ - u32* d = &g_columnTable16[0][0]; - - for (int j = 0; j < 8; j++, d += 16, src += srcpitch) - for (int i = 0; i < 16; i++) - ((u16*)dst)[d[i]] = ((u16*)src)[i]; -} - -__forceinline void __fastcall SwizzleBlock8_c(u8* dst, u8* src, int srcpitch) -{ - u32* d = &g_columnTable8[0][0]; - - for (int j = 0; j < 16; j++, d += 16, src += srcpitch) - for (int i = 0; i < 16; i++) - dst[d[i]] = src[i]; -} - -__forceinline void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch) -{ - u32* d = &g_columnTable4[0][0]; - - for (int j = 0; j < 16; j++, d += 32, src += srcpitch) - { - for (int i = 0; i < 32; i++) - { - u32 addr = d[i]; - u8 c = (src[i>>1] >> ((i & 1) << 2)) & 0x0f; - u32 shift = (addr & 1) << 2; - dst[addr >> 1] = (dst[addr >> 1] & (0xf0 >> shift)) | (c << shift); - } - } -} - -__forceinline void SwizzleBlock24(u8 *dst, u8 *src, int pitch) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - // Note src can be out of bound of GS memory (but there is some spare allocation - // to avoid a tricky corner case) - for (int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch - 24) - { - for (int bx = 0; bx < 8; ++bx, pnewsrc += 3) - { - pblock[bx] = *(u32*)pnewsrc; - } - } - - SwizzleBlock32_mask((u8*)dst, (u8*)tempblock, 32, 0x00ffffff); -} - -__forceinline void SwizzleBlock8H(u8 *dst, u8 *src, int pitch) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for (int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u << 24; - pblock[1] = u << 16; - pblock[2] = u << 8; - pblock[3] = u; - u = *(u32*)(pnewsrc + 4); - pblock[4] = u << 24; - pblock[5] = u << 16; - pblock[6] = u << 8; - pblock[7] = u; - } - - SwizzleBlock32_mask((u8*)dst, (u8*)tempblock, 32, 0xff000000); -} - -__forceinline void SwizzleBlock4HH(u8 *dst, u8 *src, int pitch) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for (int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u << 28; - pblock[1] = u << 24; - pblock[2] = u << 20; - pblock[3] = u << 16; - pblock[4] = u << 12; - pblock[5] = u << 8; - pblock[6] = u << 4; - pblock[7] = u; - } - - SwizzleBlock32_mask((u8*)dst, (u8*)tempblock, 32, 0xf0000000); -} - -__forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch) -{ - u8* pnewsrc = src; - u32* pblock = tempblock; - - for (int by = 0; by < 8; ++by, pblock += 8, pnewsrc += pitch) - { - u32 u = *(u32*)pnewsrc; - pblock[0] = u << 24; - pblock[1] = u << 20; - pblock[2] = u << 16; - pblock[3] = u << 12; - pblock[4] = u << 8; - pblock[5] = u << 4; - pblock[6] = u; - pblock[7] = u >> 4; - } - - SwizzleBlock32_mask((u8*)dst, (u8*)tempblock, 32, 0x0f000000); -} -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Swizzle.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Swizzle.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Swizzle.h 2010-11-07 10:27:27.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Swizzle.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef MEM_SWIZZLE_H_INCLUDED -#define MEM_SWIZZLE_H_INCLUDED - -#include "GS.h" -#include "Mem.h" -#include "x86.h" - -extern __forceinline void SwizzleBlock32(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock16(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock8(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock4(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock32u(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock16u(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock8u(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock4u(u8 *dst, u8 *src, int pitch); - -extern __forceinline void __fastcall SwizzleBlock32_c(u8* dst, u8* src, int srcpitch); -extern __forceinline void __fastcall SwizzleBlock16_c(u8* dst, u8* src, int srcpitch); -extern __forceinline void __fastcall SwizzleBlock8_c(u8* dst, u8* src, int srcpitch); -extern __forceinline void __fastcall SwizzleBlock4_c(u8* dst, u8* src, int srcpitch); - -// special swizzle macros - which I converted to functions. -extern __forceinline void SwizzleBlock24(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock8H(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock4HH(u8 *dst, u8 *src, int pitch); -extern __forceinline void SwizzleBlock4HL(u8 *dst, u8 *src, int pitch); -#define SwizzleBlock24u SwizzleBlock24 -#define SwizzleBlock8Hu SwizzleBlock8H -#define SwizzleBlock4HHu SwizzleBlock4HH -#define SwizzleBlock4HLu SwizzleBlock4HL - -#define SwizzleBlock16S SwizzleBlock16 -#define SwizzleBlock32Z SwizzleBlock32 -#define SwizzleBlock24Z SwizzleBlock24 -#define SwizzleBlock16Z SwizzleBlock16 -#define SwizzleBlock16SZ SwizzleBlock16 - -#define SwizzleBlock16Su SwizzleBlock16u -#define SwizzleBlock32Zu SwizzleBlock32u -#define SwizzleBlock24Zu SwizzleBlock24u -#define SwizzleBlock16Zu SwizzleBlock16u -#define SwizzleBlock16SZu SwizzleBlock16u - -#endif // MEM_SWIZZLE_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Tables.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Tables.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Tables.cpp 2014-04-18 21:20:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Tables.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,506 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "Mem_Swizzle.h" - -u32 g_blockTable32[4][8] = -{ - { 0, 1, 4, 5, 16, 17, 20, 21}, - { 2, 3, 6, 7, 18, 19, 22, 23}, - { 8, 9, 12, 13, 24, 25, 28, 29}, - { 10, 11, 14, 15, 26, 27, 30, 31} -}; - -u32 g_blockTable32Z[4][8] = -{ - { 24, 25, 28, 29, 8, 9, 12, 13}, - { 26, 27, 30, 31, 10, 11, 14, 15}, - { 16, 17, 20, 21, 0, 1, 4, 5}, - { 18, 19, 22, 23, 2, 3, 6, 7} -}; - -u32 g_blockTable16[8][4] = -{ - { 0, 2, 8, 10 }, - { 1, 3, 9, 11 }, - { 4, 6, 12, 14 }, - { 5, 7, 13, 15 }, - { 16, 18, 24, 26 }, - { 17, 19, 25, 27 }, - { 20, 22, 28, 30 }, - { 21, 23, 29, 31 } -}; - -u32 g_blockTable16S[8][4] = -{ - { 0, 2, 16, 18 }, - { 1, 3, 17, 19 }, - { 8, 10, 24, 26 }, - { 9, 11, 25, 27 }, - { 4, 6, 20, 22 }, - { 5, 7, 21, 23 }, - { 12, 14, 28, 30 }, - { 13, 15, 29, 31 } -}; - -u32 g_blockTable16Z[8][4] = -{ - { 24, 26, 16, 18 }, - { 25, 27, 17, 19 }, - { 28, 30, 20, 22 }, - { 29, 31, 21, 23 }, - { 8, 10, 0, 2 }, - { 9, 11, 1, 3 }, - { 12, 14, 4, 6 }, - { 13, 15, 5, 7 } -}; - -u32 g_blockTable16SZ[8][4] = -{ - { 24, 26, 8, 10 }, - { 25, 27, 9, 11 }, - { 16, 18, 0, 2 }, - { 17, 19, 1, 3 }, - { 28, 30, 12, 14 }, - { 29, 31, 13, 15 }, - { 20, 22, 4, 6 }, - { 21, 23, 5, 7 } -}; - -u32 g_blockTable8[4][8] = -{ - { 0, 1, 4, 5, 16, 17, 20, 21}, - { 2, 3, 6, 7, 18, 19, 22, 23}, - { 8, 9, 12, 13, 24, 25, 28, 29}, - { 10, 11, 14, 15, 26, 27, 30, 31} -}; - -u32 g_blockTable4[8][4] = -{ - { 0, 2, 8, 10 }, - { 1, 3, 9, 11 }, - { 4, 6, 12, 14 }, - { 5, 7, 13, 15 }, - { 16, 18, 24, 26 }, - { 17, 19, 25, 27 }, - { 20, 22, 28, 30 }, - { 21, 23, 29, 31 } -}; - -u32 g_columnTable32[8][8] = -{ - { 0, 1, 4, 5, 8, 9, 12, 13 }, - { 2, 3, 6, 7, 10, 11, 14, 15 }, - { 16, 17, 20, 21, 24, 25, 28, 29 }, - { 18, 19, 22, 23, 26, 27, 30, 31 }, - { 32, 33, 36, 37, 40, 41, 44, 45 }, - { 34, 35, 38, 39, 42, 43, 46, 47 }, - { 48, 49, 52, 53, 56, 57, 60, 61 }, - { 50, 51, 54, 55, 58, 59, 62, 63 }, -}; - -u32 g_columnTable16[8][16] = -{ - { 0, 2, 8, 10, 16, 18, 24, 26, - 1, 3, 9, 11, 17, 19, 25, 27 }, - { 4, 6, 12, 14, 20, 22, 28, 30, - 5, 7, 13, 15, 21, 23, 29, 31 }, - { 32, 34, 40, 42, 48, 50, 56, 58, - 33, 35, 41, 43, 49, 51, 57, 59 }, - { 36, 38, 44, 46, 52, 54, 60, 62, - 37, 39, 45, 47, 53, 55, 61, 63 }, - { 64, 66, 72, 74, 80, 82, 88, 90, - 65, 67, 73, 75, 81, 83, 89, 91 }, - { 68, 70, 76, 78, 84, 86, 92, 94, - 69, 71, 77, 79, 85, 87, 93, 95 }, - { 96, 98, 104, 106, 112, 114, 120, 122, - 97, 99, 105, 107, 113, 115, 121, 123 }, - { 100, 102, 108, 110, 116, 118, 124, 126, - 101, 103, 109, 111, 117, 119, 125, 127 }, -}; - -u32 g_columnTable8[16][16] = -{ - { 0, 4, 16, 20, 32, 36, 48, 52, // column 0 - 2, 6, 18, 22, 34, 38, 50, 54 }, - { 8, 12, 24, 28, 40, 44, 56, 60, - 10, 14, 26, 30, 42, 46, 58, 62 }, - { 33, 37, 49, 53, 1, 5, 17, 21, - 35, 39, 51, 55, 3, 7, 19, 23 }, - { 41, 45, 57, 61, 9, 13, 25, 29, - 43, 47, 59, 63, 11, 15, 27, 31 }, - { 96, 100, 112, 116, 64, 68, 80, 84, // column 1 - 98, 102, 114, 118, 66, 70, 82, 86 }, - { 104, 108, 120, 124, 72, 76, 88, 92, - 106, 110, 122, 126, 74, 78, 90, 94 }, - { 65, 69, 81, 85, 97, 101, 113, 117, - 67, 71, 83, 87, 99, 103, 115, 119 }, - { 73, 77, 89, 93, 105, 109, 121, 125, - 75, 79, 91, 95, 107, 111, 123, 127 }, - { 128, 132, 144, 148, 160, 164, 176, 180, // column 2 - 130, 134, 146, 150, 162, 166, 178, 182 }, - { 136, 140, 152, 156, 168, 172, 184, 188, - 138, 142, 154, 158, 170, 174, 186, 190 }, - { 161, 165, 177, 181, 129, 133, 145, 149, - 163, 167, 179, 183, 131, 135, 147, 151 }, - { 169, 173, 185, 189, 137, 141, 153, 157, - 171, 175, 187, 191, 139, 143, 155, 159 }, - { 224, 228, 240, 244, 192, 196, 208, 212, // column 3 - 226, 230, 242, 246, 194, 198, 210, 214 }, - { 232, 236, 248, 252, 200, 204, 216, 220, - 234, 238, 250, 254, 202, 206, 218, 222 }, - { 193, 197, 209, 213, 225, 229, 241, 245, - 195, 199, 211, 215, 227, 231, 243, 247 }, - { 201, 205, 217, 221, 233, 237, 249, 253, - 203, 207, 219, 223, 235, 239, 251, 255 }, -}; - -u32 g_columnTable4[16][32] = -{ - { 0, 8, 32, 40, 64, 72, 96, 104, // column 0 - 2, 10, 34, 42, 66, 74, 98, 106, - 4, 12, 36, 44, 68, 76, 100, 108, - 6, 14, 38, 46, 70, 78, 102, 110 }, - { 16, 24, 48, 56, 80, 88, 112, 120, - 18, 26, 50, 58, 82, 90, 114, 122, - 20, 28, 52, 60, 84, 92, 116, 124, - 22, 30, 54, 62, 86, 94, 118, 126 }, - { 65, 73, 97, 105, 1, 9, 33, 41, - 67, 75, 99, 107, 3, 11, 35, 43, - 69, 77, 101, 109, 5, 13, 37, 45, - 71, 79, 103, 111, 7, 15, 39, 47 }, - { 81, 89, 113, 121, 17, 25, 49, 57, - 83, 91, 115, 123, 19, 27, 51, 59, - 85, 93, 117, 125, 21, 29, 53, 61, - 87, 95, 119, 127, 23, 31, 55, 63 }, - { 192, 200, 224, 232, 128, 136, 160, 168, // column 1 - 194, 202, 226, 234, 130, 138, 162, 170, - 196, 204, 228, 236, 132, 140, 164, 172, - 198, 206, 230, 238, 134, 142, 166, 174 }, - { 208, 216, 240, 248, 144, 152, 176, 184, - 210, 218, 242, 250, 146, 154, 178, 186, - 212, 220, 244, 252, 148, 156, 180, 188, - 214, 222, 246, 254, 150, 158, 182, 190 }, - { 129, 137, 161, 169, 193, 201, 225, 233, - 131, 139, 163, 171, 195, 203, 227, 235, - 133, 141, 165, 173, 197, 205, 229, 237, - 135, 143, 167, 175, 199, 207, 231, 239 }, - { 145, 153, 177, 185, 209, 217, 241, 249, - 147, 155, 179, 187, 211, 219, 243, 251, - 149, 157, 181, 189, 213, 221, 245, 253, - 151, 159, 183, 191, 215, 223, 247, 255 }, - { 256, 264, 288, 296, 320, 328, 352, 360, // column 2 - 258, 266, 290, 298, 322, 330, 354, 362, - 260, 268, 292, 300, 324, 332, 356, 364, - 262, 270, 294, 302, 326, 334, 358, 366 }, - { 272, 280, 304, 312, 336, 344, 368, 376, - 274, 282, 306, 314, 338, 346, 370, 378, - 276, 284, 308, 316, 340, 348, 372, 380, - 278, 286, 310, 318, 342, 350, 374, 382 }, - { 321, 329, 353, 361, 257, 265, 289, 297, - 323, 331, 355, 363, 259, 267, 291, 299, - 325, 333, 357, 365, 261, 269, 293, 301, - 327, 335, 359, 367, 263, 271, 295, 303 }, - { 337, 345, 369, 377, 273, 281, 305, 313, - 339, 347, 371, 379, 275, 283, 307, 315, - 341, 349, 373, 381, 277, 285, 309, 317, - 343, 351, 375, 383, 279, 287, 311, 319 }, - { 448, 456, 480, 488, 384, 392, 416, 424, // column 3 - 450, 458, 482, 490, 386, 394, 418, 426, - 452, 460, 484, 492, 388, 396, 420, 428, - 454, 462, 486, 494, 390, 398, 422, 430 }, - { 464, 472, 496, 504, 400, 408, 432, 440, - 466, 474, 498, 506, 402, 410, 434, 442, - 468, 476, 500, 508, 404, 412, 436, 444, - 470, 478, 502, 510, 406, 414, 438, 446 }, - { 385, 393, 417, 425, 449, 457, 481, 489, - 387, 395, 419, 427, 451, 459, 483, 491, - 389, 397, 421, 429, 453, 461, 485, 493, - 391, 399, 423, 431, 455, 463, 487, 495 }, - { 401, 409, 433, 441, 465, 473, 497, 505, - 403, 411, 435, 443, 467, 475, 499, 507, - 405, 413, 437, 445, 469, 477, 501, 509, - 407, 415, 439, 447, 471, 479, 503, 511 }, -}; - -u32 g_pageTable32[32][64]; -u32 g_pageTable32Z[32][64]; -u32 g_pageTable16[64][64]; -u32 g_pageTable16S[64][64]; -u32 g_pageTable16Z[64][64]; -u32 g_pageTable16SZ[64][64]; -u32 g_pageTable8[64][128]; -u32 g_pageTable4[128][128]; - - -//maximum PSM is 58, so our arrays have 58 + 1 = 59 elements - -// This table is used for fasr access to memory storage data. Field meaning is following: -// 0 -- the number (1 << [psm][0]) is number of pixels per storage format. It's 0 if stored 1 pixel, 1 for 2 pixels (16-bit), 2 for 4 pixels (PSMT8) and 3 for 8 (PSMT4) -// 5 -- is 3 - [psm][0]. Just for speed -// 3, 4 -- size-1 of pageTable for psm. It used to clump x, y otside boundaries. -// 1, 2 -- the number (1 << [psm][1]) and (1 << [psm[2]]) is also size of pageTable. So [psm][3] = (1 << [psm][1]) - 1 -// Also note, that [psm][1] = 5 + ([psm][0] + 1) / 2, and [psm][2] = 6 + [psm][0] / 2. -// 6 -- pixel mask, (1 << [psm][5]) - 1, if be used to word, it leave only bytes for pixel formay -// 7 -- starting position of data in word, PSMT8H, 4HL, 4HH are stored data not from the begining. -u32 ZZ_DT[MAX_PSM][TABLE_WIDTH] = { - {0, 5, 6, 31, 63, 3, 0xffffffff, 0}, // 0 PSMCT32 - {0, 5, 6, 31, 63, 3, 0x00ffffff, 0}, // 1 PSMCT24 - {1, 6, 6, 63, 63, 2, 0x0000ffff, 0}, // 2 PSMCT16 - {0, }, // 3 - {0, }, // 4 - {0, }, // 5 - {0, }, // 6 - {0, }, // 7 - {0, }, // 8 - {0, }, // 9 - {1, 6, 6, 63, 63, 2, 0x0000ffff, 0}, // 10 PSMCT16S - {0, }, // 11 - {0, }, // 12 - {0, }, // 13 - {0, }, // 14 - {0, }, // 15 - {0, }, // 16 - {0, }, // 17 - {0, }, // 18 - {2, 6, 7, 63, 127, 1, 0x000000ff, 0}, // 19 PSMT8 - {3, 7, 7, 127, 127, 0, 0x0000000f, 0}, // 20 PSMT4 - {0, }, // 21 - {0, }, // 22 - {0, }, // 23 - {0, }, // 24 - {0, }, // 25 - {0, }, // 26 - {0, 5, 6, 31, 63, 3, 0x000000ff, 24}, // 27 PSMT8H - {0, }, // 28 - {0, }, // 29 - {0, }, // 30 - {0, }, // 31 - {0, }, // 32 - {0, }, // 33 - {0, }, // 34 - {0, }, // 35 - {0, 5, 6, 31, 63, 3, 0x0000000f, 24}, // 36 PSMT4HL - {0, }, // 37 - {0, }, // 38 - {0, }, // 39 - {0, }, // 40 - {0, }, // 41 - {0, }, // 42 - {0, }, // 43 - {0, 5, 6, 31, 63, 3, 0x0000000f, 28}, // 44 PSMT4HH - {0, }, // 45 - {0, }, // 46 - {0, }, // 47 - {0, 5, 6, 31, 63, 3, 0xffffffff, 0}, // 48 PSMCT32Z - {0, 5, 6, 31, 63, 3, 0x00ffffff, 0}, // 49 PSMCT24Z - {1, 6, 6, 63, 63, 2, 0x0000ffff, 0}, // 50 PSMCT16Z - {0, }, // 51 - {0, }, // 52 - {0, }, // 53 - {0, }, // 54 - {0, }, // 55 - {0, }, // 56 - {0, }, // 57 - {1, 6, 6, 63, 63, 2, 0x0000ffff, 0}, // 58 PSMCT16SZ - {0, }, // 59 - {0, }, // 60 - {0, }, // 61 - {0, }, // 62 - {0, }, // 63 -}; - - -//maxium PSM is 58, so our arrays have 58 + 1 = 59 elements -u32** g_pageTable[MAX_PSM] = {NULL,}; -u32** g_blockTable[MAX_PSM] = {NULL, }; -u32** g_columnTable[MAX_PSM] = {NULL, }; -u32 g_pageTable2[MAX_PSM][127][127] = {0, }; -u32** g_pageTableNew[MAX_PSM] = {NULL,}; - -/* PSM reference array -{ 32, 24, 16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, 16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, 8, 4, NULL, NULL, NULL, - NULL, NULL, NULL, 8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, 4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, 4HH, NULL, NULL, NULL, - 32Z, 24Z, 16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, 16SZ, NULL, NULL, NULL, NULL, NULL }; -*/ -const char* psm_name[64] = -{ "PSMCT32", "PSMCT24", "PSMCT16", NULL, NULL, NULL, NULL, NULL, - NULL, NULL, "PSMCT16S", NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, "PSMT8", "PSMT4", NULL, NULL, NULL, - NULL, NULL, NULL, "PSMT8H", NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "PSMT4HL", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, "PSMT4HH", NULL, NULL, NULL, - "PSMT32Z", "PSMT24Z", "PSMT16Z", NULL, NULL, NULL, NULL, NULL, - NULL, NULL, "PSMT16SZ", NULL, NULL, NULL, NULL, NULL }; - -_SwizzleBlock swizzleBlockFun[64] = -{ SwizzleBlock32, SwizzleBlock24, SwizzleBlock16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, SwizzleBlock16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, SwizzleBlock8, SwizzleBlock4, NULL, NULL, NULL, - NULL, NULL, NULL, SwizzleBlock8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, SwizzleBlock4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, SwizzleBlock4HH, NULL, NULL, NULL, - SwizzleBlock32Z, SwizzleBlock24Z, SwizzleBlock16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, SwizzleBlock16SZ, NULL, NULL, NULL, NULL, NULL }; - -_SwizzleBlock swizzleBlockUnFun[64] = -{ SwizzleBlock32u, SwizzleBlock24u, SwizzleBlock16u, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, SwizzleBlock16Su, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, SwizzleBlock8u, SwizzleBlock4u, NULL, NULL, NULL, - NULL, NULL, NULL, SwizzleBlock8Hu, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, SwizzleBlock4HLu, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, SwizzleBlock4HHu, NULL, NULL, NULL, - SwizzleBlock32Zu, SwizzleBlock24Zu, SwizzleBlock16Zu, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, SwizzleBlock16SZu, NULL, NULL, NULL, NULL, NULL }; - -_getPixelAddress_0 getPixelFun_0[64] = -{ - getPixelAddress32_0, getPixelAddress24_0, getPixelAddress16_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, getPixelAddress16S_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, getPixelAddress8_0, getPixelAddress4_0, NULL, NULL, NULL, - NULL, NULL, NULL, getPixelAddress8H_0, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, getPixelAddress4HL_0, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, getPixelAddress4HH_0, NULL, NULL, NULL, - getPixelAddress32Z_0, getPixelAddress24Z_0, getPixelAddress16Z_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, getPixelAddress16SZ_0, NULL, NULL, NULL, NULL, NULL -}; - -_writePixel_0 writePixelFun_0[64] = -{ - writePixel32_0, writePixel24_0, writePixel16_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, writePixel16S_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, writePixel8_0, writePixel4_0, NULL, NULL, NULL, - NULL, NULL, NULL, writePixel8H_0, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, writePixel4HL_0, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, writePixel4HH_0, NULL, NULL, NULL, - writePixel32Z_0, writePixel24Z_0, writePixel16Z_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, writePixel16SZ_0, NULL, NULL, NULL, NULL, NULL -}; - -_readPixel_0 readPixelFun_0[64] = -{ - readPixel32_0, readPixel24_0, readPixel16_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, readPixel16S_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, readPixel8_0, readPixel4_0, NULL, NULL, NULL, - NULL, NULL, NULL, readPixel8H_0, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, readPixel4HL_0, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, readPixel4HH_0, NULL, NULL, NULL, - readPixel32Z_0, readPixel24Z_0, readPixel16Z_0, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, readPixel16SZ_0, NULL, NULL, NULL, NULL, NULL -}; - -_getPixelAddress getPixelFun[64] = -{ - getPixelAddress32, getPixelAddress24, getPixelAddress16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, getPixelAddress16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, getPixelAddress8, getPixelAddress4, NULL, NULL, NULL, - NULL, NULL, NULL, getPixelAddress8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, getPixelAddress4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, getPixelAddress4HH, NULL, NULL, NULL, - getPixelAddress32Z, getPixelAddress24Z, getPixelAddress16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, getPixelAddress16SZ, NULL, NULL, NULL, NULL, NULL -}; - -_writePixel writePixelFun[64] = -{ - writePixel32, writePixel24, writePixel16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, writePixel16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, writePixel8, writePixel4, NULL, NULL, NULL, - NULL, NULL, NULL, writePixel8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, writePixel4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, writePixel4HH, NULL, NULL, NULL, - writePixel32Z, writePixel24Z, writePixel16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, writePixel16SZ, NULL, NULL, NULL, NULL, NULL -}; - -_readPixel readPixelFun[64] = -{ - readPixel32, readPixel24, readPixel16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, readPixel16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, readPixel8, readPixel4, NULL, NULL, NULL, - NULL, NULL, NULL, readPixel8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, readPixel4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, readPixel4HH, NULL, NULL, NULL, - readPixel32Z, readPixel24Z, readPixel16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, readPixel16SZ, NULL, NULL, NULL, NULL, NULL -}; - -_TransferHostLocal TransferHostLocalFun[64] = -{ - TransferHostLocal32, TransferHostLocal24, TransferHostLocal16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, TransferHostLocal16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, TransferHostLocal8, TransferHostLocal4, NULL, NULL, NULL, - NULL, NULL, NULL, TransferHostLocal8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, TransferHostLocal4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, TransferHostLocal4HH, NULL, NULL, NULL, - TransferHostLocal32Z, TransferHostLocal24Z, TransferHostLocal16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, TransferHostLocal16SZ, NULL, NULL, NULL, NULL, NULL -}; - -_TransferLocalHost TransferLocalHostFun[64] = -{ - TransferLocalHost32, TransferLocalHost24, TransferLocalHost16, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, TransferLocalHost16S, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, TransferLocalHost8, TransferLocalHost4, NULL, NULL, NULL, - NULL, NULL, NULL, TransferLocalHost8H, NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, TransferLocalHost4HL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, TransferLocalHost4HH, NULL, NULL, NULL, - TransferLocalHost32Z, TransferLocalHost24Z, TransferLocalHost16Z, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, TransferLocalHost16SZ, NULL, NULL, NULL, NULL, NULL -}; - -#define TD_NULL {0,0,0,0,0,0} -TransferData tData[64] = -{ - {2,32,8,8,32,PSMCT32}, - {8,32,8,8,24,PSMCT24}, - {4,16,16,8,16,PSMCT16}, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, - {4,16,16,8,16,PSMCT16S}, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, TD_NULL, - {4,8,16,16,8,PSMT8}, - {8,4,32,16,4,PSMT4}, - TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, TD_NULL, - {4,32,8,8,8,PSMT8H}, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, - {8,32,8,8,4,PSMT4HL}, - TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, - {8,32,8,8,4,PSMT4HH}, - TD_NULL, TD_NULL, TD_NULL, - {2,32,8,8,32,PSMT32Z}, - {8,32,8,8,24,PSMT24Z}, - {4,16,16,8,16,PSMT16Z}, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, TD_NULL, - TD_NULL, TD_NULL, - {4,16,16,8,16,PSMT16SZ}, - TD_NULL, TD_NULL, TD_NULL, TD_NULL, TD_NULL -}; - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Transmit.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Transmit.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Mem_Transmit.h 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Mem_Transmit.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,318 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef MEM_TRANSMIT_H_INCLUDED -#define MEM_TRANSMIT_H_INCLUDED - -#include "GS.h" -#include "Mem.h" - -extern int tempX, tempY; -extern int pitch, area, fracX; -extern int nSize; -extern u8* pstart; - -extern char* psm_name[64]; - -// transfers whole rows -template -static __forceinline const T *TransmitHostLocalY_(_writePixel_0 wp, s32 widthlimit, int endY, const T *buf) -{ - assert((nSize % widthlimit) == 0 && widthlimit <= 4); - - if ((gs.imageEnd.x - gs.trxpos.dx) % widthlimit) - { - // ZZLog::GS_Log("Bad Transmission! %d %d, psm: %d", gs.trxpos.dx, gs.imageEnd.x, gs.dstbuf.psm); - - for (; tempY < endY; ++tempY) - { - for (; tempX < gs.imageEnd.x && nSize > 0; tempX += 1, nSize -= 1, buf += 1) - { - /* write as many pixel at one time as possible */ - wp(pstart, tempX % 2048, tempY % 2048, buf[0], gs.dstbuf.bw); - } - } - } - - for (; tempY < endY; ++tempY) - { - for (; tempX < gs.imageEnd.x && nSize > 0; tempX += widthlimit, nSize -= widthlimit, buf += widthlimit) - { - - /* write as many pixel at one time as possible */ - if (nSize < widthlimit) return NULL; - - wp(pstart, tempX % 2048, tempY % 2048, buf[0], gs.dstbuf.bw); - - if (widthlimit > 1) - { - wp(pstart, (tempX + 1) % 2048, tempY % 2048, buf[1], gs.dstbuf.bw); - - if (widthlimit > 2) - { - wp(pstart, (tempX + 2) % 2048, tempY % 2048, buf[2], gs.dstbuf.bw); - - if (widthlimit > 3) - { - wp(pstart, (tempX + 3) % 2048, tempY % 2048, buf[3], gs.dstbuf.bw); - } - } - } - } - - if (tempX >= gs.imageEnd.x) - { - assert(tempX == gs.imageEnd.x); - tempX = gs.trxpos.dx; - } - else - { - assert(gs.transferring == false || nSize*sizeof(T) / 4 == 0); - return NULL; - } - } - - return buf; -} - -// transfers whole rows -template -static __forceinline const T *TransmitHostLocalY_24(_writePixel_0 wp, s32 widthlimit, int endY, const T *buf) -{ - if (widthlimit != 8 || ((gs.imageEnd.x - gs.trxpos.dx) % widthlimit)) - { - //ZZLog::GS_Log("Bad Transmission! %d %d, psm: %d", gs.trxpos.dx, gs.imageEnd.x, gs.dstbuf.psm); - for (; tempY < endY; ++tempY) - { - for (; tempX < gs.imageEnd.x && nSize > 0; tempX += 1, nSize -= 1, buf += 3) - { - wp(pstart, tempX % 2048, tempY % 2048, *(u32*)(buf), gs.dstbuf.bw); - } - - if (tempX >= gs.imageEnd.x) - { - assert(gs.transferring == false || tempX == gs.imageEnd.x); - tempX = gs.trxpos.dx; - } - else - { - assert(gs.transferring == false || nSize == 0); - return NULL; - } - } - } - else - { - assert(/*(nSize%widthlimit) == 0 &&*/ widthlimit == 8); - - for (; tempY < endY; ++tempY) - { - for (; tempX < gs.imageEnd.x && nSize > 0; tempX += widthlimit, nSize -= widthlimit, buf += 3 * widthlimit) - { - if (nSize < widthlimit) return NULL; - - /* write as many pixel at one time as possible */ - - wp(pstart, tempX % 2048, tempY % 2048, *(u32*)(buf + 0), gs.dstbuf.bw); - wp(pstart, (tempX + 1) % 2048, tempY % 2048, *(u32*)(buf + 3), gs.dstbuf.bw); - wp(pstart, (tempX + 2) % 2048, tempY % 2048, *(u32*)(buf + 6), gs.dstbuf.bw); - wp(pstart, (tempX + 3) % 2048, tempY % 2048, *(u32*)(buf + 9), gs.dstbuf.bw); - wp(pstart, (tempX + 4) % 2048, tempY % 2048, *(u32*)(buf + 12), gs.dstbuf.bw); - wp(pstart, (tempX + 5) % 2048, tempY % 2048, *(u32*)(buf + 15), gs.dstbuf.bw); - wp(pstart, (tempX + 6) % 2048, tempY % 2048, *(u32*)(buf + 18), gs.dstbuf.bw); - wp(pstart, (tempX + 7) % 2048, tempY % 2048, *(u32*)(buf + 21), gs.dstbuf.bw); - } - - if (tempX >= gs.imageEnd.x) - { - assert(gs.transferring == false || tempX == gs.imageEnd.x); - tempX = gs.trxpos.dx; - } - else - { - if (nSize < 0) - { - /* extracted too much */ - assert((nSize % 3) == 0 && nSize > -24); - tempX += nSize / 3; - nSize = 0; - } - - assert(gs.transferring == false || nSize == 0); - - return NULL; - } - } - } - - return buf; -} - -// meant for 4bit transfers -template -static __forceinline const T *TransmitHostLocalY_4(_writePixel_0 wp, s32 widthlimit, int endY, const T *buf) -{ - for (; tempY < endY; ++tempY) - { - for (; tempX < gs.imageEnd.x && nSize > 0; tempX += widthlimit, nSize -= widthlimit) - { - /* write as many pixel at one time as possible */ - wp(pstart, tempX % 2048, tempY % 2048, *buf&0x0f, gs.dstbuf.bw); - wp(pstart, (tempX + 1) % 2048, tempY % 2048, *buf >> 4, gs.dstbuf.bw); - buf++; - - if (widthlimit > 2) - { - wp(pstart, (tempX + 2) % 2048, tempY % 2048, *buf&0x0f, gs.dstbuf.bw); - wp(pstart, (tempX + 3) % 2048, tempY % 2048, *buf >> 4, gs.dstbuf.bw); - buf++; - - if (widthlimit > 4) - { - wp(pstart, (tempX + 4) % 2048, tempY % 2048, *buf&0x0f, gs.dstbuf.bw); - wp(pstart, (tempX + 5) % 2048, tempY % 2048, *buf >> 4, gs.dstbuf.bw); - buf++; - - if (widthlimit > 6) - { - wp(pstart, (tempX + 6) % 2048, tempY % 2048, *buf&0x0f, gs.dstbuf.bw); - wp(pstart, (tempX + 7) % 2048, tempY % 2048, *buf >> 4, gs.dstbuf.bw); - buf++; - } - } - } - } - - if (tempX >= gs.imageEnd.x) - { - tempX = gs.trxpos.dx; - } - else - { - assert(gs.transferring == false || (nSize / 32) == 0); - return NULL; - } - } - - return buf; -} - -template -static __forceinline const T *TransmitHostLocalY(u32 psm, _writePixel_0 wp, s32 widthlimit, int endY, const T *buf) -{ - //ZZLog::WriteLn("TransmitHostLocalY: psm == %s, bimode == 0x%x", psm_name[psm], PSMT_BITMODE(psm)); - switch (PSMT_BITMODE(psm)) - { - case 1: - return TransmitHostLocalY_24(wp, widthlimit, endY, buf); - case 4: - return TransmitHostLocalY_4(wp, widthlimit, endY, buf); - default: - return TransmitHostLocalY_(wp, widthlimit, endY, buf); - } - - assert(0); - - return NULL; -} - -template -static __forceinline const T *TransmitHostLocalX_(_writePixel_0 wp, u32 widthlimit, u32 blockheight, u32 startX, const T *buf) -{ - for (u32 tempi = 0; tempi < blockheight; ++tempi) - { - for (tempX = startX; tempX < gs.imageEnd.x; tempX++, buf++) - { - wp(pstart, tempX % 2048, (tempY + tempi) % 2048, buf[0], gs.dstbuf.bw); - } - - buf += pitch - fracX; - } - - return buf; -} - -// transmit until endX, don't check size since it has already been prevalidated -template -static __forceinline const T *TransmitHostLocalX_24(_writePixel_0 wp, u32 widthlimit, u32 blockheight, u32 startX, const T *buf) -{ - for (u32 tempi = 0; tempi < blockheight; ++tempi) - { - for (tempX = startX; tempX < gs.imageEnd.x; tempX++, buf += 3) - { - wp(pstart, tempX % 2048, (tempY + tempi) % 2048, *(u32*)buf, gs.dstbuf.bw); - } - - buf += 3 * (pitch - fracX); - } - - return buf; -} - -// transmit until endX, don't check size since it has already been prevalidated -template -static __forceinline const T *TransmitHostLocalX_4(_writePixel_0 wp, u32 widthlimit, u32 blockheight, u32 startX, const T *buf) -{ - for (u32 tempi = 0; tempi < blockheight; ++tempi) - { - for (tempX = startX; tempX < gs.imageEnd.x; tempX += 2, buf++) - { - wp(pstart, tempX % 2048, (tempY + tempi) % 2048, buf[0]&0x0f, gs.dstbuf.bw); - wp(pstart, (tempX + 1) % 2048, (tempY + tempi) % 2048, buf[0] >> 4, gs.dstbuf.bw); - } - - buf += (pitch - fracX) / 2; - } - - return buf; -} - -template -static __forceinline const T *TransmitHostLocalX(u32 psm, _writePixel_0 wp, u32 widthlimit, u32 blockheight, u32 startX, const T *buf) -{ - //ZZLog::WriteLn("TransmitHostLocalX: psm == %s, bimode == 0x%x", psm_name[psm], PSMT_BITMODE(psm)); - switch (PSMT_BITMODE(psm)) - { - case 1: - return TransmitHostLocalX_24(wp, widthlimit, blockheight, startX, buf); - case 4: - return TransmitHostLocalX_4(wp, widthlimit, blockheight, startX, buf); - default: - return TransmitHostLocalX_(wp, widthlimit, blockheight, startX, buf); - } - - assert(0); - - return NULL; -} - -// calculate pitch in source buffer -static __forceinline u32 TransPitch(u32 pitch, u32 size) -{ - return pitch * size / 8; -} - -static __forceinline u32 TransPitch2(u32 pitch, u32 size) -{ - if (size == 4) return pitch / 2; - if (size == 24) return pitch * 3; - return pitch; -} - -#endif // MEM_TRANSMIT_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile.cpp 2014-04-18 21:20:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,266 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - - -//////////////////// -// Small profiler // -//////////////////// -#include -#include -#include -#include "Profile.h" -#include "Util.h" - -using namespace std; - -#define GET_PROFILE_TIME() GetCPUTicks() - -#if !defined(ZEROGS_DEVBUILD) -#define g_bWriteProfile 0 -#else -bool g_bWriteProfile = 0; -#endif - -u64 luPerfFreq; - -struct DVPROFSTRUCT; - -struct DVPROFSTRUCT -{ - - struct DATA - { - DATA(u64 time, u32 user = 0) : dwTime(time), dwUserData(user) {} - - DATA() : dwTime(0), dwUserData(0) {} - - u64 dwTime; - u32 dwUserData; - }; - - ~DVPROFSTRUCT() - { - list::iterator it = listpChild.begin(); - - while (it != listpChild.end()) - { - safe_delete(*it); - ++it; - } - } - - list listTimes; // before DVProfEnd is called, contains the global time it started - // after DVProfEnd is called, contains the time it lasted - // the list contains all the tracked times - char pname[256]; - - list listpChild; // other profilers called during this profiler period -}; - -struct DVPROFTRACK -{ - u32 dwUserData; - DVPROFSTRUCT::DATA* pdwTime; - DVPROFSTRUCT* pprof; -}; - -list g_listCurTracking; // the current profiling functions, the back element is the -// one that will first get popped off the list when DVProfEnd is called -// the pointer is an element in DVPROFSTRUCT::listTimes -list g_listProfilers; // the current profilers, note that these are the parents -// any profiler started during the time of another is held in -// DVPROFSTRUCT::listpChild -list g_listAllProfilers; // ignores the hierarchy, pointer to elements in g_listProfilers - -void DVProfRegister(char* pname) -{ - if (!g_bWriteProfile) return; - - list::iterator it = g_listAllProfilers.begin(); - -// while(it != g_listAllProfilers.end() ) { -// -// if( _tcscmp(pname, (*it)->pname) == 0 ) { -// (*it)->listTimes.push_back(timeGetTime()); -// DVPROFTRACK dvtrack; -// dvtrack.pdwTime = &(*it)->listTimes.back(); -// dvtrack.pprof = *it; -// g_listCurTracking.push_back(dvtrack); -// return; -// } -// -// ++it; -// } - - // else add in a new profiler to the appropriate parent profiler - DVPROFSTRUCT* pprof = NULL; - - if (g_listCurTracking.size() > 0) - { - assert(g_listCurTracking.back().pprof != NULL); - g_listCurTracking.back().pprof->listpChild.push_back(new DVPROFSTRUCT()); - pprof = g_listCurTracking.back().pprof->listpChild.back(); - } - else - { - g_listProfilers.push_back(DVPROFSTRUCT()); - pprof = &g_listProfilers.back(); - } - - strncpy(pprof->pname, pname, 256); - - // setup the profiler for tracking - pprof->listTimes.push_back(DVPROFSTRUCT::DATA(GET_PROFILE_TIME())); - - DVPROFTRACK dvtrack; - dvtrack.pdwTime = &pprof->listTimes.back(); - dvtrack.pprof = pprof; - dvtrack.dwUserData = 0; - - g_listCurTracking.push_back(dvtrack); - - // add to all profiler list - g_listAllProfilers.push_back(pprof); -} - -void DVProfEnd(u32 dwUserData) -{ - if (!g_bWriteProfile) - return; - - B_RETURN(g_listCurTracking.size() > 0); - - DVPROFTRACK dvtrack = g_listCurTracking.back(); - - assert(dvtrack.pdwTime != NULL && dvtrack.pprof != NULL); - - dvtrack.pdwTime->dwTime = 1000000 * (GET_PROFILE_TIME() - dvtrack.pdwTime->dwTime) / luPerfFreq; - - dvtrack.pdwTime->dwUserData = dwUserData; - - g_listCurTracking.pop_back(); -} - -struct DVTIMEINFO -{ - DVTIMEINFO() : uInclusive(0), uExclusive(0) {} - - u64 uInclusive, uExclusive; -}; - -map mapAggregateTimes; - -u64 DVProfWriteStruct(FILE* f, DVPROFSTRUCT* p, int ident) -{ - fprintf(f, "%*s%s - ", ident, "", p->pname); - - list::iterator ittime = p->listTimes.begin(); - - u64 utime = 0; - - while (ittime != p->listTimes.end()) - { - utime += (u32)ittime->dwTime; - - if (ittime->dwUserData) - fprintf(f, "time: %d, user: 0x%8.8x", (u32)ittime->dwTime, ittime->dwUserData); - else - fprintf(f, "time: %d", (u32)ittime->dwTime); - - ++ittime; - } - - mapAggregateTimes[p->pname].uInclusive += utime; - - fprintf(f, "\n"); - - list::iterator itprof = p->listpChild.begin(); - - u32 uex = utime; - - while (itprof != p->listpChild.end()) - { - - uex -= (u32)DVProfWriteStruct(f, *itprof, ident + 4); - ++itprof; - } - - mapAggregateTimes[p->pname].uExclusive += uex; - - return utime; -} - -void DVProfWrite(const char* pfilename, u32 frames) -{ - assert(pfilename != NULL); - FILE* f = fopen(pfilename, "wb"); - - mapAggregateTimes.clear(); - list::iterator it = g_listProfilers.begin(); - - while (it != g_listProfilers.end()) - { - DVProfWriteStruct(f, &(*it), 0); - ++it; - } - - { - map::iterator it; - fprintf(f, "\n\n-------------------------------------------------------------------\n\n"); - - u64 uTotal[2] = {0}; - double fiTotalTime[2]; - - for (it = mapAggregateTimes.begin(); it != mapAggregateTimes.end(); ++it) - { - uTotal[0] += it->second.uExclusive; - uTotal[1] += it->second.uInclusive; - } - - fprintf(f, "total times (%d): ex: %Lu ", frames, uTotal[0] / frames); - - fprintf(f, "inc: %Lu\n", uTotal[1] / frames); - - fiTotalTime[0] = 1.0 / (double)uTotal[0]; - fiTotalTime[1] = 1.0 / (double)uTotal[1]; - - // output the combined times - - for (it = mapAggregateTimes.begin(); it != mapAggregateTimes.end(); ++it) - { - fprintf(f, "%s - ex: %f inc: %f\n", it->first.c_str(), (double)it->second.uExclusive * fiTotalTime[0], - (double)it->second.uInclusive * fiTotalTime[1]); - } - } - - - fclose(f); -} - -void DVProfClear() -{ - g_listCurTracking.clear(); - g_listProfilers.clear(); - g_listAllProfilers.clear(); -} - -void InitProfile() -{ - luPerfFreq = GetCPUTicks(); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile_gl3.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile_gl3.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile_gl3.cpp 2012-06-08 18:14:47.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile_gl3.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2012 zeydlitz@gmail.com, arcum42@gmail.com, gregory.hainaut@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "Profile_gl3.h" -GPU_Profile GPU_Timer; - -void GPU_Profile::dump(bool flush) -{ - u32 high_limit; - if (flush) high_limit = 1; - else high_limit = 1000; - - while (datas.size() > high_limit) { - ProfileInfo data_start = datas.front(); - datas.pop_front(); - ProfileInfo data_stop = datas.front(); - datas.pop_front(); - - u32 gpu_time = read_diff_timers(data_start.timer, data_stop.timer); - -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("Time %6dus", gpu_time).c_str()); -#else - fprintf(stderr, "Frame %d (%d): %6dus\n", data_start.frame, data_start.draw, gpu_time); -#endif - } -} - -void GPU_Profile::create_timer() -{ - u32 timer = 0; -#ifdef GLSL4_API - glGenQueries(1, &timer); - glQueryCounter(timer, GL_TIMESTAMP); -#endif - datas.push_back(ProfileInfo(timer, frame, draw)); - -#ifdef ENABLE_MARKER - dump(true); -#endif -} - -u32 GPU_Profile::read_diff_timers(u32 start_timer, u32 stop_timer) -{ -#ifdef GLSL4_API - if(!start_timer || !stop_timer) return -1; - - int stopTimerAvailable = 0; - while (!stopTimerAvailable) - glGetQueryObjectiv(stop_timer, GL_QUERY_RESULT_AVAILABLE, &stopTimerAvailable); - - u64 start, stop = 0; - // Note: timers have a precision of the ns, so you need 64 bits value to avoid overflow! - glGetQueryObjectui64v(start_timer, GL_QUERY_RESULT, &start); - glGetQueryObjectui64v(stop_timer, GL_QUERY_RESULT, &stop); - - // delete timer - glDeleteQueries(1, &start_timer); - glDeleteQueries(1, &stop_timer); - - return (stop-start)/1000; -#else - return 0; -#endif -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile_gl3.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile_gl3.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile_gl3.h 2012-06-08 18:14:47.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile_gl3.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2012 zeydlitz@gmail.com, arcum42@gmail.com, gregory.hainaut@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "Util.h" - -#ifndef _PROFILE_GL3_H_ -#define _PROFILE_GL3_H_ - -#define ENABLE_MARKER // Fire some marker for opengl Debugger (apitrace, gdebugger) - -class GPU_Profile { - struct ProfileInfo { - u32 timer; - u32 frame; - u32 draw; - - ProfileInfo(u32 timer, u32 frame, u32 draw) : timer(timer), frame(frame), draw(draw) {} - ProfileInfo(u32 timer) : timer(timer), frame(0), draw(0) {} - }; - - std::list datas; - u32 frame; - u32 draw; - - - public: - GPU_Profile() : frame(0), draw(0) { - datas.clear(); - } - - void inc_draw() { draw++;} - void inc_frame() { frame++;} - - void create_timer(); - u32 read_diff_timers(u32 start_timer, u32 stop_timer); - - void dump(bool flush = false); -}; -extern GPU_Profile GPU_Timer; - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Profile.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Profile.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,172 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef PROFILE_H_INCLUDED -#define PROFILE_H_INCLUDED - -#include "Util.h" - -#if !defined(ZEROGS_DEVBUILD) -#define g_bWriteProfile 0 -#else -extern bool g_bWriteProfile; -#endif - -extern u64 luPerfFreq; - - -// Copied from Utilities; remove later. -#ifdef __linux__ - -#include -#include // ftime(), struct timeb - -inline unsigned long timeGetTime() -{ - timeb t; - ftime(&t); - - return (unsigned long)(t.time*1000 + t.millitm); -} - -inline unsigned long timeGetPreciseTime() -{ - timespec t; - clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t); - - return t.tv_nsec; -} - -static __forceinline void InitCPUTicks() -{ -} - -static __forceinline u64 GetTickFrequency() -{ - return 1000000; // unix measures in microseconds -} - -static __forceinline u64 GetCPUTicks() -{ - - struct timeval t; - gettimeofday(&t, NULL); - return ((u64)t.tv_sec*GetTickFrequency()) + t.tv_usec; -} - -#else -static __aligned16 LARGE_INTEGER lfreq; - -inline unsigned long timeGetPreciseTime() -{ - // Implement later. - return 0; -} - -static __forceinline void InitCPUTicks() -{ - QueryPerformanceFrequency(&lfreq); -} - -static __forceinline u64 GetTickFrequency() -{ - return lfreq.QuadPart; -} - -static __forceinline u64 GetCPUTicks() -{ - LARGE_INTEGER count; - QueryPerformanceCounter(&count); - return count.QuadPart; -} - -#endif - -// IMPORTANT: For every Register there must be an End -void DVProfRegister(char* pname); // first checks if this profiler exists in g_listProfilers -void DVProfEnd(u32 dwUserData); -void DVProfWrite(const char* pfilename, u32 frames = 0); -void DVProfClear(); // clears all the profilers - -#define DVPROFILE -#ifdef DVPROFILE - -class DVProfileFunc -{ - public: - u32 dwUserData; - DVProfileFunc(char* pname) { DVProfRegister(pname); dwUserData = 0; } - DVProfileFunc(char* pname, u32 dwUserData) : dwUserData(dwUserData) { DVProfRegister(pname); } - ~DVProfileFunc() { DVProfEnd(dwUserData); } -}; - -#else - -class DVProfileFunc -{ - - public: - u32 dwUserData; - static __forceinline DVProfileFunc(char* pname) {} - static __forceinline DVProfileFunc(char* pname, u32 dwUserData) { } - ~DVProfileFunc() {} -}; - -#endif - - -template -class CInterfacePtr -{ - - public: - inline CInterfacePtr() : ptr(NULL) {} - inline explicit CInterfacePtr(T* newptr) : ptr(newptr) { if (ptr != NULL) ptr->AddRef(); } - inline ~CInterfacePtr() { if (ptr != NULL) ptr->Release(); } - inline T* operator*() { assert(ptr != NULL); return *ptr; } - inline T* operator->() { return ptr; } - inline T* get() { return ptr; } - - inline void release() - { - if (ptr != NULL) { ptr->Release(); ptr = NULL; } - } - - inline operator T*() { return ptr; } - inline bool operator==(T* rhs) { return ptr == rhs; } - inline bool operator!=(T* rhs) { return ptr != rhs; } - - inline CInterfacePtr& operator= (T* newptr) - { - if (ptr != NULL) ptr->Release(); - - ptr = newptr; - - if (ptr != NULL) ptr->AddRef(); - - return *this; - } - - private: - T* ptr; -}; - -extern void InitProfile(); - -#endif // PROFILE_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw.fx pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw.fx --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw.fx 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw.fx 1970-01-01 00:00:00.000000000 +0000 @@ -1,867 +0,0 @@ -// ZZ Open GL graphics plugin -// Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com -// Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 -// -// 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 - -// Cg Shaders for PS2 GS emulation - -// divides by z for every pixel, instead of in vertex shader -// fixes kh textures -#define PERSPECTIVE_CORRECT_TEX - -//#define TEST_AEM // tests AEM for black pixels -//#define REGION_REPEAT // set if texture wrapping mode is region repeat -//#define WRITE_DEPTH // set if depth is also written in a MRT -//#define ACCURATE_DECOMPRESSION // set for less capable hardware ATI Radeon 9000 series -//#define EXACT_COLOR // make sure the output color is clamped to 1/255 boundaries (for alpha testing) - -#ifdef PERSPECTIVE_CORRECT_TEX -#define TEX_XY tex.xy/tex.z -#define TEX_DECL float3 -#else -#define TEX_XY tex.xy -#define TEX_DECL float2 -#endif - -#ifdef WRITE_DEPTH -#define DOZWRITE(x) x -#else -#define DOZWRITE(x) -#endif - -#include "ps2hw_ctx.fx" - -// used to get the tiled offset into a page given the linear offset -uniform samplerRECT g_sSrcFinal : register(s2); -uniform sampler2D g_sBlocks : register(s3); -uniform sampler2D g_sBilinearBlocks : register(s4); -uniform sampler2D g_sConv16to32 : register(s4); -uniform sampler3D g_sConv32to16 : register(s4); -uniform samplerRECT g_sBitwiseANDX : register(s5); -uniform samplerRECT g_sBitwiseANDY : register(s6); -uniform samplerRECT g_sInterlace : register(s7); - -// used only on rare cases where the render target is PSMT8H -uniform sampler2D g_sCLUT : register(s2); - -// global pixel shader constants -uniform float4 g_fInvTexDims : register(c22); // similar to g_fClutOff -uniform float4 g_fFogColor : register(c23); - -// used for rectblitting -uniform float4 g_fBitBltZ : register(c24); - -uniform half4 g_fOneColor : register(c25); // col*.xxxy+.zzzw - -// vertex shader constants -uniform float4 g_fBitBltPos : register(c4); -uniform float4 g_fZ : register(c5); // transforms d3dcolor z into float z -uniform float4 g_fZNorm : register(c6); -uniform float4 g_fZMin: register(c26) = float4(0.0f, 1.0f, 0.0f, 0.0f); -uniform float4 g_fBitBltTex : register(c7); - -// pixel shader consts -// .z is used for the addressing fn -uniform half4 g_fExactColor : register(c27) = half4(0.5,0.5/256.0f,0,1/255.0f); -uniform float4 g_fBilinear : register(c28) = float4(-0.7f, -0.65f, 0.9,1/32767.0f); -uniform float4 g_fZBias : register(c29) = half4(1.0f/256.0f, 1.0004f, 1, 0.5); // also for vs -uniform float4 g_fc0 : register(c30) = float4(0,1, 0.001, 0.5f); // also for vs -uniform float4 g_fMult : register(c31) = float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f); - -// vertex shader consts -uniform float4 g_fBitBltTrans : register(c31) = float4(0.5f, -0.5f, 0.5, 0.5 + 0.4/416.0f); - -// given a local tex coord, returns the coord in the memory -float2 ps2memcoord(float2 realtex) -{ - float4 off; - - // block off - realtex.xy = realtex.xy * g_fTexDims.xy + g_fTexDims.zw; - realtex.xy = (realtex.xy - frac(realtex.xy)) * g_fMult.zw; - float2 fblock = frac(realtex.xy); - off.xy = realtex.xy-fblock.xy; - -#ifdef ACCURATE_DECOMPRESSION - off.z = tex2D(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).a; - off.x = dot(off.xy, g_fTexOffset.xy); - float r = g_fTexOffset.w; - float f = frac(off.x); - float fadd = g_fTexOffset.z * off.z; - off.w = off.x + fadd + r; - off.x = frac(f + fadd + r); - off.w -= off.x ; -#else - off.z = tex2D(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).a; - - // combine the two - off.x = dot(off.xyz, g_fTexOffset.xyz)+g_fTexOffset.w; - off.x = modf(off.x, off.w); -#endif - - off.xy = off.xw * g_fPageOffset.zy + g_fPageOffset.wx; - //off.y = off.w * g_fPageOffset.y + g_fPageOffset.x; - return off.xy; -} - -// find all texcoords for bilinear filtering -// assume that orgtex are already on boundaries -void ps2memcoord4(float4 orgtex, out float4 off0, out float4 off1) -{ - //float4 off0, off1, off2, off3; - float4 realtex; - - // block off - realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw; - float4 fblock = frac(realtex.xyzw); - float4 ftransblock = g_fTexBlock.xyxy*fblock + g_fTexBlock.zwzw; - realtex -= fblock; - - float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w; - - float4 colors;// = tex2D(g_sBilinearBlocks, ftransblock.xy); - - // this is faster on ffx ingame - colors.x = tex2D(g_sBlocks, ftransblock.xy).a; - colors.y = tex2D(g_sBlocks, ftransblock.zy).a; - colors.z = tex2D(g_sBlocks, ftransblock.xw).a; - colors.w = tex2D(g_sBlocks, ftransblock.zw).a; - - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = frac(transvals); - float4 fadd = colors * g_fTexOffset.z; - rem = transvals + fadd; - fr = frac(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset.z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset.y + g_fPageOffset.x; - fr = fr * g_fPageOffset.z + g_fPageOffset.w; - - // combine - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -void ps2memcoord4_fast(float4 orgtex, out float4 off0, out float4 off1) -{ - float4 realtex; - - realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw; - float4 fblock = frac(realtex.xyzw); - float2 ftransblock = g_fTexBlock.xy*fblock.xy + g_fTexBlock.zw; - realtex -= fblock; - - float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w; - - float4 colors = tex2D(g_sBilinearBlocks, ftransblock.xy); - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = frac(transvals); - float4 fadd = colors * g_fTexOffset.z; - rem = transvals + fadd; - fr = frac(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset.z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset.y + g_fPageOffset.x; - fr = fr * g_fPageOffset.z; - - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -// Wrapping modes -#if defined(REPEAT) - -float2 ps2addr(float2 coord) -{ - return frac(coord.xy); -} - -#elif defined(CLAMP) - -float2 ps2addr(float2 coord) -{ - return clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw); -} - -#elif defined(REGION_REPEAT) - -// computes the local tex coord along with addressing modes -float2 ps2addr(float2 coord) -{ - float2 final = frac(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw)); - - if( TexWrapMode.x > g_fBilinear.z ) // region repeat mode for x (umsk&x)|ufix - final.x = texRECT(g_sBitwiseANDX, abs(coord.x)*TexWrapMode.zx).x * g_fClampExts.x + g_fClampExts.z; - if( TexWrapMode.y > g_fBilinear.z ) // region repeat mode for x (vmsk&x)|vfix - final.y = texRECT(g_sBitwiseANDY, abs(coord.y)*TexWrapMode.wy).x * g_fClampExts.y + g_fClampExts.w; - - return final; -} - -#else - -float2 ps2addr(float2 coord) -{ - return frac(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw)); -} - -#endif - -half4 tex2DPS_32(float2 tex0) -{ - return texRECT(g_sMemory, ps2memcoord(tex0).xy); -} - -// use when texture is not tiled -- shader 1 -half4 tex2DPS_tex32(float2 tex0) -{ - return texRECT(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w; -} - -// use when texture is not tiled -- shader 2 -half4 tex2DPS_clut32(float2 tex0) -{ - float index = texRECT(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw).a+g_fPageOffset.w; - return tex2D(g_sCLUT, index*g_fExactColor.xz+g_fExactColor.yz); -} - -// Shader 3 -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -half4 tex2DPS_tex32to16(float2 tex0) -{ - bool upper = false; - tex0.y += g_fPageOffset.z; - float2 ffrac = fmod(tex0, g_fTexOffset.xy); - tex0.xy = g_fc0.ww * (tex0.xy + ffrac); - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - upper = true; - } - if( ffrac.y >= g_fTexOffset.w ) { - tex0.y -= g_fTexOffset.w; - tex0.x += g_fc0.w; - } - - half4 color = texRECT(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w; - float2 uv = upper ? color.xw : color.zy; - return tex2D(g_sConv16to32, uv+g_fPageOffset.xy); -} - -// Shader 4 -// used when a 16 bit texture is used an 8h -half4 tex2DPS_tex16to8h(float2 tex0) -{ - float4 final; - float2 ffrac = fmod(tex0+g_fPageOffset.zw, g_fTexOffset.xy); - tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw; - - if( ffrac.x > g_fTexOffset.x*g_fc0.w ) - tex0.x += g_fTexOffset.x*g_fc0.w; - if( tex0.x >= g_fc0.y ) tex0 += g_fTexOffset.zw; - - float4 upper = texRECT(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw); - - // only need alpha - float index = tex3D(g_sConv32to16, upper.zyx-g_fc0.z).y + upper.w*g_fc0.w*g_fc0.w; - return tex2D(g_sCLUT, index+g_fExactColor.yz); -} - -// Shader 5 -// used when a 16 bit texture is used a 32bit one -half4 tex2DPS_tex16to32(float2 tex0) -{ - float4 final; - float2 ffrac = fmod(tex0+g_fPageOffset.zw, g_fTexOffset.xy); - //tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw; - tex0.y += g_fPageOffset.y * ffrac.y; - - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - tex0.y += g_fTexOffset.w; - } - - float fconst = g_fc0.w*g_fc0.w; - float4 lower = tex2D(g_sSrcFinal, g_fTexDims.xy*tex0); - float4 upper = tex2D(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw); - - final.zy = tex3D(g_sConv32to16, lower.zyx).xy + lower.ww*fconst; - final.xw = tex3D(g_sConv32to16, upper.zyx).xy + upper.ww*fconst; - return final; -} - - -//half4 f; -//f.w = old.y > (127.2f/255.0f) ? 1 : 0; -//old.y -= 0.5f * f.w; -//f.xyz = frac(old.yyx*half3(2.002*255.0f/256.0f, 64.025f*255.0f/256.0f, 8.002*255.0f/256.0f)); -//f.y += old.x * (0.25f*255.0f/256.0f); - -//////////////////////////////// -// calculates the texture color -//////////////////////////////// - -#define decl_ps2shade(num) \ -decl_ps2shade_##num(_32) \ -decl_ps2shade_##num(_tex32) \ -decl_ps2shade_##num(_clut32) \ -decl_ps2shade_##num(_tex32to16) \ -decl_ps2shade_##num(_tex16to8h) \ -decl_ps2shade_##num(_tex16to32h) \ - -// nearest -#define decl_ps2shade_0(bit) \ -float4 ps2shade0##bit( TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} \ - -// do fast memcoord4 calcs when textures behave well -#ifdef REPEAT -#define PS2MEMCOORD4 ps2memcoord4 -#else -#define PS2MEMCOORD4 ps2memcoord4 -#endif - -#define decl_BilinearFilter(bit, addrfn) \ -half4 BilinearFilter##bit(float2 tex0) \ -{ \ - float4 off0, off1; \ - float4 ftex; \ - float2 ffrac; \ - ftex.xy = tex0 + g_fBilinear.xy * g_fRealTexDims.zw; \ - ffrac = frac(ftex.xy*g_fRealTexDims.xy); \ - ftex.xy -= ffrac.xy * g_fRealTexDims.zw; \ - \ - ftex.zw = ps2addr(ftex.xy + g_fRealTexDims.zw); \ - ftex.xy = ps2addr(ftex.xy); \ - \ - PS2MEMCOORD4(ftex, off0, off1); \ - half4 c0 = texRECT(g_sMemory, off0.xy); \ - half4 c1 = texRECT(g_sMemory, off0.zw); \ - half4 c2 = texRECT(g_sMemory, off1.xy); \ - half4 c3 = texRECT(g_sMemory, off1.zw); \ - return lerp( lerp(c0, c1, ffrac.x), lerp(c2, c3, ffrac.x), ffrac.y ); \ -} \ - -decl_BilinearFilter(_32, ps2addr) -decl_BilinearFilter(_tex32, ps2addr) -decl_BilinearFilter(_clut32, ps2addr) -decl_BilinearFilter(_tex32to16, ps2addr) -decl_BilinearFilter(_tex16to8h, ps2addr) -decl_BilinearFilter(_tex16to32h, ps2addr) - -//TODO! For mip maps, only apply when LOD >= 0 -// lcm == 0, LOD = log(1/Q)*L + K, lcm == 1, LOD = K - -// bilinear -#define decl_ps2shade_1(bit) \ -half4 ps2shade1##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} \ - -// nearest, mip nearest -#define decl_ps2shade_2(bit) \ -half4 ps2shade2##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} \ - -// nearest, mip linear -#define decl_ps2shade_3(bit) \ -half4 ps2shade3##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit(ps2addr(TEX_XY)); \ -} \ - -// linear, mip nearest -#define decl_ps2shade_4(bit) \ -half4 ps2shade4##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} \ - -// linear, mip linear -#define decl_ps2shade_5(bit) \ -half4 ps2shade5##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} \ - -decl_ps2shade(0) -decl_ps2shade(1) -decl_ps2shade(2) -decl_ps2shade(3) -decl_ps2shade(4) -decl_ps2shade(5) - -half4 ps2CalcShade(half4 texcol, half4 color) -{ -#ifdef TEST_AEM - if( dot(texcol.xyzw, g_fTestBlack.xyzw) <= g_fc0.z ) - texcol.w = g_fc0.x; - else -#endif - texcol.w = texcol.w * fTexAlpha.y + fTexAlpha.x; - - texcol = texcol * (fTexAlpha2.zzzw * color + fTexAlpha2.xxxy) + fTexAlpha.zzzw * color.wwww; - - return texcol; -} - -// final ops on the color -#ifdef EXACT_COLOR - -half4 ps2FinalColor(half4 col) -{ - // g_fOneColor has to scale by 255 - half4 temp = col * g_fOneColor.xxxy + g_fOneColor.zzzw; - temp.w = floor(temp.w)*g_fExactColor.w; - return temp; -} - -#else -half4 ps2FinalColor(half4 col) -{ - return col * g_fOneColor.xxxy + g_fOneColor.zzzw; -} -#endif - -//////////////// -// Techniques // -//////////////// - -// technique to copy a rectangle from source to target -struct VSOUT_ -{ - float4 pos : POSITION; - half4 color : COLOR0; - DOZWRITE(float4 z : TEXCOORD0;) -}; - -struct VSOUT_T -{ - float4 pos : POSITION; - half4 color : COLOR0; - TEX_DECL tex : TEXCOORD0; - DOZWRITE(float4 z : TEXCOORD1;) -}; - -struct VSOUT_F -{ - float4 pos : POSITION; - half4 color : COLOR0; - float fog : TEXCOORD0; - DOZWRITE(float4 z : TEXCOORD1;) -}; - -struct VSOUT_TF -{ - float4 pos : POSITION; - half4 color : COLOR0; - TEX_DECL tex : TEXCOORD0; - half fog : TEXCOORD1; - DOZWRITE(float4 z : TEXCOORD2;) -}; - -// just smooth shadering -VSOUT_ RegularVS(float4 pos : POSITION, - half4 color : COLOR0, - float4 z : COLOR1 - ) -{ - VSOUT_ o; - - o.pos.xy = pos.xy*g_fPosXY.xy+g_fPosXY.zw; - o.pos.z = (log(g_fc0.y+dot(g_fZ, z.zyxw))*g_fZNorm.x+g_fZNorm.y) * g_fZMin.y + dot(g_fZ, z.zyxw) * g_fZMin.x ; - o.pos.w = g_fc0.y; // 1 - o.color = color; - - DOZWRITE(o.z = z*g_fZBias.x+g_fZBias.y; o.z.w = g_fc0.y;) - return o; -} - -void RegularPS(VSOUT_ i, out float4 c0 : COLOR0 -#ifdef WRITE_DEPTH - , out float4 c1 : COLOR1 -#endif - ) -{ - // whenever outputting depth, make sure to mult by 255/256 and 1 - c0 = ps2FinalColor(i.color); - DOZWRITE(c1 = i.z;) -} - -// diffuse texture mapping -VSOUT_T TextureVS(float4 pos : POSITION, - half4 color : COLOR0, - float4 z : COLOR1, - float3 tex0 : TEXCOORD0) -{ - VSOUT_T o; - o.pos.xy = pos.xy*g_fPosXY.xy+g_fPosXY.zw; - o.pos.z = (log(g_fc0.y+dot(g_fZ, z.zyxw))*g_fZNorm.x + g_fZNorm.y) * g_fZMin.y + dot(g_fZ, z.zyxw) * g_fZMin.x ; - o.pos.w = g_fc0.y; - o.color = color; - DOZWRITE(o.z = z*g_fZBias.x+g_fZBias.y; o.z.w = g_fc0.y;) -#ifdef PERSPECTIVE_CORRECT_TEX - o.tex = tex0; -#else - o.tex = tex0.xy/tex0.z; -#endif - return o; -} - -#ifdef WRITE_DEPTH - -#define DECL_TEXPS(num, bit) \ -void Texture##num##bit##PS(VSOUT_T i, out half4 c0 : COLOR0, out float4 c1 : COLOR1) \ -{ \ - c0 = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(i.tex), i.color)); \ - c1 = i.z; \ -} \ - -#else - -#define DECL_TEXPS(num, bit) \ -void Texture##num##bit##PS(VSOUT_T i, out half4 c0 : COLOR0) \ -{ \ - c0 = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(i.tex), i.color)); \ -} \ - -#endif - -#define DECL_TEXPS_(num) \ -DECL_TEXPS(num, _32) \ -DECL_TEXPS(num, _tex32) \ -DECL_TEXPS(num, _clut32) \ -DECL_TEXPS(num, _tex32to16) \ -DECL_TEXPS(num, _tex16to8h) \ - -DECL_TEXPS_(0) -DECL_TEXPS_(1) -DECL_TEXPS_(2) -DECL_TEXPS_(3) -DECL_TEXPS_(4) -DECL_TEXPS_(5) - -VSOUT_F RegularFogVS(float4 pos : POSITION, - half4 color : COLOR0, - float4 z : COLOR1) -{ - VSOUT_F o; - - o.pos.xy = pos.xy*g_fPosXY.xy+g_fPosXY.zw; - o.pos.z = (log(g_fc0.y+dot(g_fZ, z.zyxw))*g_fZNorm.x+g_fZNorm.y) * g_fZMin.y + dot(g_fZ, z.zyxw) * g_fZMin.x ; - o.pos.w = g_fc0.y; - DOZWRITE(o.z = z*g_fZBias.x+g_fZBias.y; o.z.w = g_fc0.y;) - o.color = color; - o.fog = pos.z*g_fBilinear.w; - return o; -} - -void RegularFogPS(VSOUT_F i, out half4 c0 : COLOR0 -#ifdef WRITE_DEPTH - , out float4 c1 : COLOR1 -#endif - ) -{ - half4 c; - c.xyz = lerp(g_fFogColor.xyz, i.color.xyz, i.fog); - c.w = i.color.w; - c0 = ps2FinalColor(c); - DOZWRITE(c1 = i.z;) -} - -VSOUT_TF TextureFogVS(float4 pos : POSITION, - half4 color : COLOR0, - float4 z : COLOR1, - float3 tex0 : TEXCOORD0) -{ - VSOUT_TF o; - - o.pos.xy = pos.xy*g_fPosXY.xy+g_fPosXY.zw; - o.pos.z = (log(g_fc0.y+dot(g_fZ, z.zyxw))*g_fZNorm.x+g_fZNorm.y) * g_fZMin.y + dot(g_fZ, z.zyxw) * g_fZMin.x ; - o.pos.w = g_fc0.y; - o.color = color; - o.fog = pos.z*g_fBilinear.w; - DOZWRITE(o.z = z*g_fZBias.x+g_fZBias.y; o.z.w = g_fc0.y;) -#ifdef PERSPECTIVE_CORRECT_TEX - o.tex = tex0; -#else - o.tex = tex0.xy/tex0.z; -#endif - return o; -} - -#ifdef WRITE_DEPTH - -#define DECL_TEXFOGPS(num, bit) \ -void TextureFog##num##bit##PS(VSOUT_TF i, out half4 c0 : COLOR0, out float4 c1 : COLOR1 ) \ -{ \ - half4 c = ps2CalcShade(ps2shade##num##bit(i.tex), i.color); \ - c.xyz = lerp(g_fFogColor.xyz, c.xyz, i.fog); \ - c0 = ps2FinalColor(c); \ - c1 = i.z; \ -} \ - -#else - -#define DECL_TEXFOGPS(num, bit) \ -void TextureFog##num##bit##PS(VSOUT_TF i, out half4 c0 : COLOR0) \ -{ \ - half4 c = ps2CalcShade(ps2shade##num##bit(i.tex), i.color); \ - c.xyz = lerp(g_fFogColor.xyz, c.xyz, i.fog); \ - c0 = ps2FinalColor(c); \ -} \ - -#endif - -#define DECL_TEXFOGPS_(num) \ -DECL_TEXFOGPS(num, _32) \ -DECL_TEXFOGPS(num, _tex32) \ -DECL_TEXFOGPS(num, _clut32) \ -DECL_TEXFOGPS(num, _tex32to16) \ -DECL_TEXFOGPS(num, _tex16to8h) \ - -DECL_TEXFOGPS_(0) -DECL_TEXFOGPS_(1) -DECL_TEXFOGPS_(2) -DECL_TEXFOGPS_(3) -DECL_TEXFOGPS_(4) -DECL_TEXFOGPS_(5) - -//------------------------------------------------------- -// Techniques not related to the main primitive commands -half4 BilinearBitBlt(float2 tex0) -{ - float4 ftex; - float2 ffrac; - - ffrac.xy = frac(tex0*g_fRealTexDims.xy); - ftex.xy = tex0 - ffrac.xy * g_fRealTexDims.zw; - ftex.zw = ftex.xy + g_fRealTexDims.zw; - - float4 off0, off1; - ps2memcoord4_fast(ftex, off0, off1); - half4 c0 = texRECT(g_sMemory, off0.xy); - half4 c1 = texRECT(g_sMemory, off0.zw); - half4 c2 = texRECT(g_sMemory, off1.xy); - half4 c3 = texRECT(g_sMemory, off1.zw); - - return lerp( lerp(c0, c1, ffrac.x), lerp(c2, c3, ffrac.x), ffrac.y ); -} - -void BitBltVS(in float4 pos : POSITION, - in half4 tex0 : COLOR1, - in float3 tex : TEXCOORD0, - out float4 opos : POSITION, - out float2 otex0 : TEXCOORD0, - out float2 ointerpos : TEXCOORD1) -{ - opos.xy = pos.xy * g_fBitBltPos.xy + g_fBitBltPos.zw; - ointerpos = opos.xy * g_fBitBltTrans.xy + g_fBitBltTrans.zw; - opos.zw = g_fc0.xy; - otex0 = tex.xy * g_fBitBltTex.xy + g_fBitBltTex.zw; -} - -half4 BitBltPS(in float2 tex0 : TEXCOORD0) : COLOR -{ - return texRECT(g_sMemory, ps2memcoord(tex0).xy)*g_fOneColor.xxxy; -} - -// used when AA -half4 BitBltAAPS(in float2 tex0 : TEXCOORD0) : COLOR -{ - return BilinearBitBlt(tex0)*g_fOneColor.xxxy; -} - -void BitBltDepthPS(in float2 tex0 : TEXCOORD0, - out float4 c : COLOR0, - out float depth : DEPTH) -{ - c = texRECT(g_sMemory, ps2memcoord(tex0)); - - depth = (log(g_fc0.y+dot(c, g_fBitBltZ))*g_fOneColor.w) * g_fZMin.y + dot(c, g_fBitBltZ) * g_fZMin.x ; - c += g_fZBias.y; -} - -void BitBltDepthMRTPS(in float2 tex0 : TEXCOORD0, - out half4 c0 : COLOR0, - out float4 c1 : COLOR1, - out float depth : DEPTH) -{ - c1 = texRECT(g_sMemory, ps2memcoord(tex0)); - - depth = (log(g_fc0.y+dot(c1, g_fBitBltZ))*g_fOneColor.w) * g_fZMin.y + dot(c1, g_fBitBltZ) * g_fZMin.x ; - c1 += g_fZBias.y; - c0 = g_fc0.x; -} - -/*static const float BlurKernel[9] = { - 0.027601, - 0.066213, - 0.123701, - 0.179952, - 0.205065, - 0.179952, - 0.123701, - 0.066213, - 0.027601 -};*/ - -half4 BilinearFloat16(float2 tex0) -{ - return texRECT(g_sSrcFinal, tex0.xy); -} - -half4 CRTCTargInterPS(in float2 tex0 : TEXCOORD0, in float2 ointerpos : TEXCOORD1) : COLOR -{ - float finter = texRECT(g_sInterlace, ointerpos.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float4 c = BilinearFloat16(tex0); - c.w = ( g_fc0.w*c.w * g_fOneColor.x + g_fOneColor.y ) * finter; - return c; -} - -half4 CRTCTargPS(in float2 tex0 : TEXCOORD0) : COLOR -{ - float4 c = BilinearFloat16(tex0); - c.w = g_fc0.w*c.w * g_fOneColor.x + g_fOneColor.y; - return c; -} - -half4 CRTCInterPS(in float2 tex0 : TEXCOORD0, in float2 ointerpos : TEXCOORD1) : COLOR -{ - float finter = texRECT(g_sInterlace, ointerpos.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = (tex0-frac(tex0))*g_fInvTexDims.xy+g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - - return c; -} - -// simpler -half4 CRTCInterPS_Nearest(in float2 tex0 : TEXCOORD0, in float2 ointerpos : TEXCOORD1) : COLOR -{ - float finter = texRECT(g_sInterlace, ointerpos.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - half4 c = texRECT(g_sMemory, ps2memcoord(tex0).xy); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - return c; -} - -half4 CRTCPS(in float2 tex0 : TEXCOORD0) : COLOR -{ - float2 filtcoord = (tex0/*-frac(tex0)*/)*g_fInvTexDims.xy+g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - - return c; -} - -// simpler -half4 CRTCPS_Nearest(in float2 tex0 : TEXCOORD0) : COLOR -{ - half4 c = texRECT(g_sMemory, ps2memcoord(tex0).xy); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - return c; -} - -half4 CRTC24InterPS(in float2 tex0 : TEXCOORD0, in float2 ointerpos : TEXCOORD1) : COLOR -{ - float finter = texRECT(g_sInterlace, ointerpos.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = (tex0-frac(tex0))*g_fInvTexDims.xy+g_fInvTexDims.zw; - - half4 c = texRECT(g_sMemory, ps2memcoord(filtcoord).xy).x; - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - - return c; -} - -half4 CRTC24PS(in float2 tex0 : TEXCOORD0) : COLOR -{ - float2 filtcoord = (tex0-frac(tex0))*g_fInvTexDims.xy+g_fInvTexDims.zw; - half4 c = texRECT(g_sMemory, ps2memcoord(filtcoord).xy).x; - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - - return c; -} - -half4 ZeroPS() : COLOR -{ - return g_fOneColor.x; -} - -half4 BaseTexturePS(in float2 tex0 : TEXCOORD0) : COLOR -{ - return texRECT(g_sSrcFinal, tex0) * g_fOneColor; -} - -half4 Convert16to32PS(float2 tex0 : TEXCOORD0) : COLOR -{ - float4 final; - float2 ffrac = fmod(tex0+g_fTexDims.zw, g_fTexOffset.xy); - tex0.xy = g_fTexDims.xy * tex0.xy - ffrac * g_fc0.yw; - - if( ffrac.x > g_fTexOffset.x*g_fc0.w ) - tex0.x += g_fTexOffset.x*g_fc0.w; - if( tex0.x >= g_fc0.y ) tex0 += g_fTexOffset.zw; - - float4 lower = texRECT(g_sSrcFinal, tex0); - float4 upper = texRECT(g_sSrcFinal, tex0+g_fPageOffset.xy); - - final.zy = tex3D(g_sConv32to16, lower.zyx).xy + lower.ww*g_fPageOffset.zw; - final.xw = tex3D(g_sConv32to16, upper.zyx).xy + upper.ww*g_fPageOffset.zw; - - return final; -} - -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -half4 Convert32to16PS(float2 tex0 : TEXCOORD0) : COLOR -{ - bool upper = false; - float2 ffrac = fmod(tex0+g_fTexDims.zw, g_fTexOffset.xy); - tex0.xy = g_fc0.ww * (tex0.xy + ffrac); - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - upper = true; - } - if( ffrac.y >= g_fTexOffset.w ) { - tex0.y -= g_fTexOffset.w; - tex0.x += g_fc0.w; - } - - half4 color = texRECT(g_sSrcFinal, tex0*g_fTexDims.xy)*g_fc0.yyyw; - float2 uv = upper ? color.xw : color.zy; - return tex2D(g_sConv16to32, uv*g_fPageOffset.xy+g_fPageOffset.zw)*g_fTexDims.xxxy; -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw_gl4.glsl pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw_gl4.glsl --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw_gl4.glsl 2013-07-06 09:42:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw_gl4.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,915 +0,0 @@ -//#version 420 Keep it for text editor detection - -// ZZ Open GL graphics plugin -// Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com, gregory.hainaut@gmail.com -// Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 -// -// 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 - -// divides by z for every pixel, instead of in vertex shader -// fixes kh textures - -#extension GL_ARB_texture_rectangle: require -#extension GL_ARB_shading_language_420pack: require -#extension GL_ARB_separate_shader_objects : require - - -//#define TEST_AEM // tests AEM for black pixels -//#define REGION_REPEAT // set if texture wrapping mode is region repeat -//#define WRITE_DEPTH // set if depth is also written in a MRT -//#define ACCURATE_DECOMPRESSION // set for less capable hardware ATI Radeon 9000 series -//#define EXACT_COLOR // make sure the output color is clamped to 1/255 boundaries (for alpha testing) -//#define NO_LOGZ // disable logz - -#define PERSPECTIVE_CORRECT_TEX - -#ifdef PERSPECTIVE_CORRECT_TEX -#define TEX_XY tex.xy/tex.z -#define TEX_DECL vec3 -#else -#define TEX_XY tex.xy -#define TEX_DECL vec2 -#endif - -// NVidia CG-data types -#define half2 vec2 -#define half3 vec3 -#define half4 vec4 -#define float2 vec2 -#define float3 vec3 -#define float4 vec4 - -//////////////////////////////////////////////////////////////////// -// INPUT/OUTPUT -//////////////////////////////////////////////////////////////////// -// NOTE: Future optimization tex.w is normally useless (in cg it is a float3) so it can contains the fog value -struct vertex -{ - vec4 color; - vec4 Z; - TEX_DECL tex; - float fog; -}; - -#ifdef VERTEX_SHADER -out gl_PerVertex { - invariant vec4 gl_Position; - float gl_PointSize; - float gl_ClipDistance[]; -}; - -layout(location = 0) in ivec4 Vert; -layout(location = 1) in vec4 Color; -layout(location = 2) in vec4 SecondaryColor; -layout(location = 3) in vec3 TexCoord; - -layout(location = 0) out vertex VSout; - -#endif - -#ifdef FRAGMENT_SHADER - -layout(location = 0) in vertex PSin; - -// FIXME: host only do glDrawBuffers of 1 buffers not 2. I think this is a major bug -layout(location = 0) out vec4 FragData0; -layout(location = 1) out vec4 FragData1; - -#endif - -//////////////////////////////////////////////////////////////////// -// Texture SAMPLER -//////////////////////////////////////////////////////////////////// -// // main ps2 memory, each pixel is stored in 32bit color -// uniform sampler2DRect g_sMemory[2]; -// -// // used to get the tiled offset into a page given the linear offset -// uniform sampler2DRect g_sSrcFinal; -// uniform sampler2D g_sBlocks; -// uniform sampler2D g_sBilinearBlocks; -// uniform sampler2D g_sConv16to32; -// uniform sampler3D g_sConv32to16; -// uniform sampler2DRect g_sBitwiseANDX; -// uniform sampler2DRect g_sBitwiseANDY; -// uniform sampler2DRect g_sInterlace; -// -// // used only on rare cases where the render target is PSMT8H -// uniform sampler2D g_sCLUT; -// main ps2 memory, each pixel is stored in 32bit color -layout(binding = 10) uniform sampler2DRect g_sMemory; // dual context - -// used to get the tiled offset into a page given the linear offset -layout(binding = 1) uniform sampler2DRect g_sSrcFinal; -layout(binding = 2) uniform sampler2D g_sBlocks; -layout(binding = 3) uniform sampler2D g_sBilinearBlocks; -layout(binding = 4) uniform sampler2D g_sConv16to32; -layout(binding = 5) uniform sampler3D g_sConv32to16; -layout(binding = 6) uniform sampler2DRect g_sBitwiseANDX; -layout(binding = 7) uniform sampler2DRect g_sBitwiseANDY; -layout(binding = 8) uniform sampler2DRect g_sInterlace; - -// used only on rare cases where the render target is PSMT8H -layout(binding = 9) uniform sampler2D g_sCLUT; - -//////////////////////////////////////////////////////////////////// -// UNIFORM BUFFER -//////////////////////////////////////////////////////////////////// -layout(std140, binding = 0) uniform constant_buffer -{ - // Both shader - // .z is used for the addressing fn - // FIXME: not same value between c and shader... - // float4 g_fBilinear = float4(-0.7f, -0.65f, 0.9,1/32767.0f); - float4 g_fBilinear; - float4 g_fZBias; - float4 g_fc0; - float4 g_fMult; - // Vertex - float4 g_fZ; // transforms d3dcolor z into float z - // Pixel - half4 g_fExactColor; -}; -layout(std140, binding = 1) uniform common_buffer -{ - float4 g_fPosXY; - float4 g_fFogColor; -}; -layout(std140, binding = 2) uniform vertex_buffer -{ - float4 g_fBitBltPos; - float4 g_fBitBltTex; - float4 g_fBitBltTrans; -}; -layout(std140, binding = 3) uniform fragment_buffer -{ - half4 fTexAlpha2; - - float4 g_fTexOffset; // converts the page and block offsets into the mem addr/1024 - float4 g_fTexDims; // mult by tex dims when accessing the block texture - float4 g_fTexBlock; - - float4 g_fClampExts; // if clamping the texture, use (minu, minv, maxu, maxv) - float4 TexWrapMode; // 0 - repeat/clamp, 1 - region rep (use fRegRepMask) - - float4 g_fRealTexDims; // tex dims used for linear filtering (w,h,1/w,1/h) - - // (alpha0, alpha1, 1 if highlight2 and tcc is rgba, 1-y) - half4 g_fTestBlack; // used for aem bit - - float4 g_fPageOffset; - - half4 fTexAlpha; - - float4 g_fInvTexDims; // similar to g_fClutOff - - // used for rectblitting - float4 g_fBitBltZ; - - half4 g_fOneColor; // col*.xxxy+.zzzw -}; - - -// given a local tex coord, returns the coord in the memory -float2 ps2memcoord(float2 realtex) -{ - float4 off; - - // block off - realtex.xy = realtex.xy * g_fTexDims.xy + g_fTexDims.zw; - realtex.xy = (realtex.xy - fract(realtex.xy)) * g_fMult.zw; - float2 fblock = fract(realtex.xy); - off.xy = realtex.xy-fblock.xy; - -#ifdef ACCURATE_DECOMPRESSION - off.z = texture(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).r; - off.x = dot(off.xy, g_fTexOffset.xy); - float r = g_fTexOffset.w; - float f = fract(off.x); - float fadd = g_fTexOffset.z * off.z; - off.w = off.x + fadd + r; - off.x = fract(f + fadd + r); - off.w -= off.x ; -#else - off.z = texture(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).r; - - // combine the two - off.x = dot(off.xyz, g_fTexOffset.xyz)+g_fTexOffset.w; - off.x = modf(off.x, off.w); -#endif - - off.xy = off.xw * g_fPageOffset.zy + g_fPageOffset.wx; - //off.y = off.w * g_fPageOffset.y + g_fPageOffset.x; - return off.xy; -} - -// find all texcoords for bilinear filtering -// assume that orgtex are already on boundaries -void ps2memcoord4(float4 orgtex, out float4 off0, out float4 off1) -{ - //float4 off0, off1, off2, off3; - float4 realtex; - - // block off - realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw; - float4 fblock = fract(realtex.xyzw); - float4 ftransblock = g_fTexBlock.xyxy*fblock + g_fTexBlock.zwzw; - realtex -= fblock; - - float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w; - - float4 colors;// = texture(g_sBilinearBlocks, ftransblock.xy); - - // this is faster on ffx ingame - colors.x = texture(g_sBlocks, ftransblock.xy).r; - colors.y = texture(g_sBlocks, ftransblock.zy).r; - colors.z = texture(g_sBlocks, ftransblock.xw).r; - colors.w = texture(g_sBlocks, ftransblock.zw).r; - - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = fract(transvals); - float4 fadd = colors * g_fTexOffset.z; - rem = transvals + fadd; - fr = fract(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset.z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset.y + g_fPageOffset.x; - fr = fr * g_fPageOffset.z + g_fPageOffset.w; - - // combine - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -void ps2memcoord4_fast(float4 orgtex, out float4 off0, out float4 off1) -{ - float4 realtex; - - realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw; - float4 fblock = fract(realtex.xyzw); - float2 ftransblock = g_fTexBlock.xy*fblock.xy + g_fTexBlock.zw; - realtex -= fblock; - - float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w; - - float4 colors = texture(g_sBilinearBlocks, ftransblock.xy); - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = fract(transvals); - float4 fadd = colors * g_fTexOffset.z; - rem = transvals + fadd; - fr = fract(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset.z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset.y + g_fPageOffset.x; - fr = fr * g_fPageOffset.z; - - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -// Wrapping modes -#if defined(REPEAT) - -float2 ps2addr(float2 coord) -{ - return fract(coord.xy); -} - -#elif defined(CLAMP) - -float2 ps2addr(float2 coord) -{ - return clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw); -} - -#elif defined(REGION_REPEAT) - -// computes the local tex coord along with addressing modes -float2 ps2addr(float2 coord) -{ - float2 final = fract(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw)); - - if( TexWrapMode.x > g_fBilinear.z ) // region repeat mode for x (umsk&x)|ufix - final.x = texture(g_sBitwiseANDX, abs(coord.x)*TexWrapMode.zx).x * g_fClampExts.x + g_fClampExts.z; - if( TexWrapMode.y > g_fBilinear.z ) // region repeat mode for x (vmsk&x)|vfix - final.y = texture(g_sBitwiseANDY, abs(coord.y)*TexWrapMode.wy).x * g_fClampExts.y + g_fClampExts.w; - - return final; -} - -#else - -float2 ps2addr(float2 coord) -{ - return fract(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw)); -} - -#endif - -half4 tex2DPS_32(float2 tex0) -{ - return texture(g_sMemory, ps2memcoord(tex0)); -} - -// use when texture is not tiled -- shader 1 -half4 tex2DPS_tex32(float2 tex0) -{ - return texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w; -} - -// use when texture is not tiled -- shader 2 -half4 tex2DPS_clut32(float2 tex0) -{ - float index = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw).a+g_fPageOffset.w; - return texture(g_sCLUT, index*g_fExactColor.xz+g_fExactColor.yz); -} - -// Shader 3 -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -half4 tex2DPS_tex32to16(float2 tex0) -{ - bool upper = false; - tex0.y += g_fPageOffset.z; - float2 ffrac = mod(tex0, g_fTexOffset.xy); - tex0.xy = g_fc0.ww * (tex0.xy + ffrac); - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - upper = true; - } - if( ffrac.y >= g_fTexOffset.w ) { - tex0.y -= g_fTexOffset.w; - tex0.x += g_fc0.w; - } - - half4 color = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w; - float2 uv = upper ? color.xw : color.zy; - return texture(g_sConv16to32, uv+g_fPageOffset.xy); -} - -// Shader 4 -// used when a 16 bit texture is used an 8h -half4 tex2DPS_tex16to8h(float2 tex0) -{ - float4 final; - float2 ffrac = mod(tex0+g_fPageOffset.zw, g_fTexOffset.xy); - tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw; - - if( ffrac.x > g_fTexOffset.x*g_fc0.w ) - tex0.x += g_fTexOffset.x*g_fc0.w; - if( tex0.x >= g_fc0.y ) tex0 += g_fTexOffset.zw; - - float4 upper = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw); - - // only need alpha - float index = texture(g_sConv32to16, upper.zyx-g_fc0.z).y + upper.w*g_fc0.w*g_fc0.w; - return texture(g_sCLUT, index+g_fExactColor.yz); -} - -// Shader 5 -// used when a 16 bit texture is used a 32bit one -half4 tex2DPS_tex16to32(float2 tex0) -{ - float4 final; - float2 ffrac = mod(tex0+g_fPageOffset.zw, g_fTexOffset.xy); - //tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw; - tex0.y += g_fPageOffset.y * ffrac.y; - - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - tex0.y += g_fTexOffset.w; - } - - float fconst = g_fc0.w*g_fc0.w; - float4 lower = texture(g_sSrcFinal, g_fTexDims.xy*tex0); - float4 upper = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw); - - final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*fconst; - final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*fconst; - return final; -} - -half4 tex2DPS_tex16to32h(float2 tex0) -{ - float4 final = vec4(0.0, 0.0, 0.0, 0.0); - return final; -} - -//half4 f; -//f.w = old.y > (127.2f/255.0f) ? 1 : 0; -//old.y -= 0.5f * f.w; -//f.xyz = fract(old.yyx*half3(2.002*255.0f/256.0f, 64.025f*255.0f/256.0f, 8.002*255.0f/256.0f)); -//f.y += old.x * (0.25f*255.0f/256.0f); - -//////////////////////////////// -// calculates the texture color -//////////////////////////////// - -#define decl_ps2shade(num) \ -decl_ps2shade_##num(_32) \ -decl_ps2shade_##num(_tex32) \ -decl_ps2shade_##num(_clut32) \ -decl_ps2shade_##num(_tex32to16) \ -decl_ps2shade_##num(_tex16to8h) \ -decl_ps2shade_##num(_tex16to32h) - -// nearest -#define decl_ps2shade_0(bit) \ -float4 ps2shade0##bit( TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} - -// do fast memcoord4 calcs when textures behave well -#ifdef REPEAT -#define PS2MEMCOORD4 ps2memcoord4 -#else -#define PS2MEMCOORD4 ps2memcoord4 -#endif - - -#define decl_BilinearFilter(bit, addrfn) \ -half4 BilinearFilter##bit(float2 tex0) \ -{ \ - float4 off0, off1; \ - float4 ftex; \ - float2 ffrac; \ - ftex.xy = tex0 + g_fBilinear.xy * g_fRealTexDims.zw; \ - ffrac = fract(ftex.xy*g_fRealTexDims.xy); \ - ftex.xy -= ffrac.xy * g_fRealTexDims.zw; \ - \ - ftex.zw = ps2addr(ftex.xy + g_fRealTexDims.zw); \ - ftex.xy = ps2addr(ftex.xy); \ - \ - PS2MEMCOORD4(ftex, off0, off1); \ - half4 c0 = texture(g_sMemory, off0.xy); \ - half4 c1 = texture(g_sMemory, off0.zw); \ - half4 c2 = texture(g_sMemory, off1.xy); \ - half4 c3 = texture(g_sMemory, off1.zw); \ - return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, ffrac.x), vec4(ffrac.y) ); \ -} - -decl_BilinearFilter(_32, ps2addr) -decl_BilinearFilter(_tex32, ps2addr) -decl_BilinearFilter(_clut32, ps2addr) -decl_BilinearFilter(_tex32to16, ps2addr) -decl_BilinearFilter(_tex16to8h, ps2addr) -decl_BilinearFilter(_tex16to32h, ps2addr) - -//TODO! For mip maps, only apply when LOD >= 0 -// lcm == 0, LOD = log(1/Q)*L + K, lcm == 1, LOD = K - -// bilinear -#define decl_ps2shade_1(bit) \ -half4 ps2shade1##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -// nearest, mip nearest -#define decl_ps2shade_2(bit) \ -half4 ps2shade2##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} - -// nearest, mip linear -#define decl_ps2shade_3(bit) \ -half4 ps2shade3##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit(ps2addr(TEX_XY)); \ -} - -// linear, mip nearest -#define decl_ps2shade_4(bit) \ -half4 ps2shade4##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -// linear, mip linear -#define decl_ps2shade_5(bit) \ -half4 ps2shade5##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -decl_ps2shade(0) -decl_ps2shade(1) -decl_ps2shade(2) -decl_ps2shade(3) -decl_ps2shade(4) -decl_ps2shade(5) - - -half4 ps2CalcShade(half4 texcol, half4 color) -{ -#ifdef TEST_AEM - if( dot(texcol.xyzw, g_fTestBlack.xyzw) <= g_fc0.z ) - texcol.w = g_fc0.x; - else -#endif - texcol.w = texcol.w * fTexAlpha.y + fTexAlpha.x; - - texcol = texcol * (fTexAlpha2.zzzw * color + fTexAlpha2.xxxy) + fTexAlpha.zzzw * color.wwww; - - return texcol; -} - -// final ops on the color -#ifdef EXACT_COLOR - -half4 ps2FinalColor(half4 col) -{ - // g_fOneColor has to scale by 255 - half4 temp = col * g_fOneColor.xxxy + g_fOneColor.zzzw; - temp.w = floor(temp.w)*g_fExactColor.w; - return temp; -} - -#else -half4 ps2FinalColor(half4 col) -{ - return col * g_fOneColor.xxxy + g_fOneColor.zzzw; -} -#endif - - -#ifdef FRAGMENT_SHADER // This is code only for FRAGMENTS (pixel shader) - -#ifdef WRITE_DEPTH -void write_depth_target() -{ - FragData1 = PSin.Z; -} -#else -void write_depth_target() { } -#endif - -void RegularPS() { - // whenever outputting depth, make sure to mult by 255/256 and 1 - FragData0 = ps2FinalColor(PSin.color); - write_depth_target(); -} - -#define DECL_TEXPS(num, bit) \ -void Texture##num##bit##PS() \ -{ \ - FragData0 = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(PSin.tex), PSin.color)); \ - write_depth_target(); \ -} - -#define DECL_TEXPS_(num) \ -DECL_TEXPS(num, _32) \ -DECL_TEXPS(num, _tex32) \ -DECL_TEXPS(num, _clut32) \ -DECL_TEXPS(num, _tex32to16) \ -DECL_TEXPS(num, _tex16to8h) - -DECL_TEXPS_(0) -DECL_TEXPS_(1) -DECL_TEXPS_(2) -DECL_TEXPS_(3) -DECL_TEXPS_(4) -DECL_TEXPS_(5) - -void RegularFogPS() { - half4 c; - c.xyz = mix(g_fFogColor.xyz, PSin.color.xyz, vec3(PSin.fog)); - c.w = PSin.color.w; - FragData0 = ps2FinalColor(c); - write_depth_target(); -} - -#define DECL_TEXFOGPS(num, bit) \ -void TextureFog##num##bit##PS() \ -{ \ - half4 c = ps2CalcShade(ps2shade##num##bit(PSin.tex), PSin.color); \ - c.xyz = mix(g_fFogColor.xyz, c.xyz, vec3(PSin.fog)); \ - FragData0 = ps2FinalColor(c); \ - write_depth_target(); \ -} - -#define DECL_TEXFOGPS_(num) \ -DECL_TEXFOGPS(num, _32) \ -DECL_TEXFOGPS(num, _tex32) \ -DECL_TEXFOGPS(num, _clut32) \ -DECL_TEXFOGPS(num, _tex32to16) \ -DECL_TEXFOGPS(num, _tex16to8h) - -DECL_TEXFOGPS_(0) -DECL_TEXFOGPS_(1) -DECL_TEXFOGPS_(2) -DECL_TEXFOGPS_(3) -DECL_TEXFOGPS_(4) -DECL_TEXFOGPS_(5) - -//------------------------------------------------------- -// Techniques not related to the main primitive commands -half4 BilinearBitBlt(float2 tex0) -{ - float4 ftex; - float2 ffrac; - - ffrac.xy = fract(tex0*g_fRealTexDims.xy); - ftex.xy = tex0 - ffrac.xy * g_fRealTexDims.zw; - ftex.zw = ftex.xy + g_fRealTexDims.zw; - - float4 off0, off1; - ps2memcoord4_fast(ftex, off0, off1); - half4 c0 = texture(g_sMemory, off0.xy); - half4 c1 = texture(g_sMemory, off0.zw); - half4 c2 = texture(g_sMemory, off1.xy); - half4 c3 = texture(g_sMemory, off1.zw); - - return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, vec4(ffrac.x)), vec4(ffrac.y) ); -} - -void BitBltPS() { - FragData0 = texture(g_sMemory, ps2memcoord(PSin.tex.xy))*g_fOneColor.xxxy; -} - -// used when AA -void BitBltAAPS() { - FragData0 = BilinearBitBlt(PSin.tex.xy) * g_fOneColor.xxxy; -} - -void BitBltDepthPS() { - vec4 data; - data = texture(g_sMemory, ps2memcoord(PSin.tex.xy)); - FragData0 = data + g_fZBias.y; -#ifdef NO_LOGZ - gl_FragDepth = dot(data, g_fBitBltZ); -#else - gl_FragDepth = log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w; -#endif -} - -void BitBltDepthMRTPS() { - vec4 data; - data = texture(g_sMemory, ps2memcoord(PSin.tex.xy)); - FragData0 = data + g_fZBias.y; - FragData1.x = g_fc0.x; -#ifdef NO_LOGZ - gl_FragDepth = dot(data, g_fBitBltZ); -#else - gl_FragDepth = log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w; -#endif -} - -// static const float BlurKernel[9] = { -// 0.027601, -// 0.066213, -// 0.123701, -// 0.179952, -// 0.205065, -// 0.179952, -// 0.123701, -// 0.066213, -// 0.027601 -// }; - -half4 BilinearFloat16(float2 tex0) -{ - return texture(g_sSrcFinal, tex0.xy); -} - -void CRTCTargInterPS() { - float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float4 c = BilinearFloat16(PSin.tex.xy); - c.w = ( g_fc0.w*c.w * g_fOneColor.x + g_fOneColor.y ) * finter; - FragData0 = c; -} - -void CRTCTargPS() { - float4 c = BilinearFloat16(PSin.tex.xy); - // FIXME DEBUG: to validate tex coord on blit - //c = vec4(PSin.tex.x/512.0f, PSin.tex.y/512.0f, 0.0, 1.0); - c.w = g_fc0.w * c.w * g_fOneColor.x + g_fOneColor.y; - FragData0 = c; -} - -void CRTCInterPS() { - float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - FragData0 = c; -} - -// simpler -void CRTCInterPS_Nearest() { - float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - half4 c = texture(g_sMemory, ps2memcoord(PSin.tex.xy)); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - FragData0 = c; -} - -void CRTCPS() { - float2 filtcoord = PSin.tex.xy * g_fInvTexDims.xy+g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - FragData0 = c; -} - -// simpler -void CRTCPS_Nearest() { - half4 c = texture(g_sMemory, ps2memcoord(PSin.tex.xy)); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - FragData0 = c; -} - -void CRTC24InterPS() { - float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - - half4 c = texture(g_sMemory, ps2memcoord(filtcoord)); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - FragData0 = c; -} - -void CRTC24PS() { - float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - half4 c = texture(g_sMemory, ps2memcoord(filtcoord)); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - FragData0 = c; -} - -void ZeroPS() { - FragData0 = g_fOneColor; -} - -void ZeroDebugPS() { - FragData0 = vec4(PSin.tex.x, PSin.tex.y, PSin.tex.z, 0.5); -} - -void ZeroDebug2PS() { - vec2 xy = ps2memcoord(fract(PSin.tex.xy/PSin.tex.z)) * vec2(1/4096.0f, 1/48.0f); - FragData0 = vec4(xy.x, xy.y, 0.0, 0.5); -} - -void ZeroDebug3PS() { - //FragData0 = vec4(PSin.position.x/2.0f + 0.5f, PSin.position.y/2.0f + 0.5f, 1.0, 0.5); -} - -void BaseTexturePS() { - FragData0 = texture(g_sSrcFinal, PSin.tex.xy) * g_fOneColor; -} - -void Convert16to32PS() { - float4 final; - float2 ffrac = mod ( PSin.tex.xy + g_fTexDims.zw, g_fTexOffset.xy); - float2 tex0 = g_fTexDims.xy * PSin.tex.xy - ffrac * g_fc0.yw; - - if (ffrac.x > g_fTexOffset.x*g_fc0.w) - tex0.x += g_fTexOffset.x*g_fc0.w; - if (tex0.x >= g_fc0.y) - tex0 += g_fTexOffset.zw; - - float4 lower = texture(g_sSrcFinal, tex0); - float4 upper = texture(g_sSrcFinal, tex0 + g_fPageOffset.xy); - - final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*g_fPageOffset.zw; - final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*g_fPageOffset.zw; - - FragData0= final; -} - -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -void Convert32to16PS() { - bool upper = false; - float2 ffrac = mod(PSin.tex.xy + g_fTexDims.zw, g_fTexOffset.xy); - float2 tex0 = g_fc0.ww * (PSin.tex.xy + ffrac); - if( ffrac.x > g_fTexOffset.z ) { - tex0.x -= g_fTexOffset.z; - upper = true; - } - if( ffrac.y >= g_fTexOffset.w ) { - tex0.y -= g_fTexOffset.w; - tex0.x += g_fc0.w; - } - - half4 color = texture(g_sSrcFinal, tex0*g_fTexDims.xy)*g_fc0.yyyw; - float2 uv = upper ? color.xw : color.zy; - FragData0 = texture(g_sConv16to32, uv*g_fPageOffset.xy+g_fPageOffset.zw)*g_fTexDims.xxxy; -} -#endif //FRAGMENT_SHADER - -#ifdef VERTEX_SHADER - -void SetColor() { - VSout.color = Color; -} - -void SetTex() { -#ifdef PERSPECTIVE_CORRECT_TEX - VSout.tex = TexCoord; -#else - VSout.tex.xy = TexCoord.xy/TexCoord.z; -#endif -} - -void SetZ() { -#ifdef WRITE_DEPTH - VSout.Z = SecondaryColor * g_fZBias.x + g_fZBias.y; - VSout.Z.w = 1.0f; -#endif -} - -void SetPosition() { - float4 position; - position.xy = vec2(Vert.xy) * g_fPosXY.xy + g_fPosXY.zw; - // FIXME: the factor in normal mode seem bogus. They don't have same order than in log mode. Or I failed to understand the logic - //// normal mode. - // -> dot(g_fZ, SecondaryColor.zyxw)) => reconstruct a float from normalized char. The float range from 0 to 1 - // position.z = dot(g_fZ, SecondaryColor.zyxw); - //// logz mode - // -> dot(g_fZ, SecondaryColor.zyxw)) => reconstruct a float from normalized char. The float range from 0 to 2**32 - // position.z = log(g_fc0.y + dot(g_fZ, SecondaryColor.zyxw)) * g_fZNorm.x - // position.z = log(1 + Z_INT) * 0.999f / (32 * log(2.0)) = log2(1 + Z_INT) * 0.999f / 32 - // log2(...) will range from 0 to 32 - - // position.z = (log(g_fc0.y + dot(g_fZ, SecondaryColor.zyxw)) * g_fZNorm.x + g_fZNorm.y) * g_fZMin.y + dot(g_fZ, SecondaryColor.zyxw) * g_fZMin.x ; -#ifdef NO_LOGZ - position.z = dot(g_fZ, SecondaryColor.zyxw); -#else - position.z = log2(1.0f + dot(g_fZ, SecondaryColor.zyxw)) * 0.999f/32.0f; -#endif - position.w = 1.0f; - - gl_Position = position; -} - -void SetFog() { - VSout.fog = float(Vert.z) * g_fBilinear.w; -} - -// just smooth shadering -void RegularVS() { - SetPosition(); - SetColor(); - SetZ(); -} - -// diffuse texture mapping -void TextureVS() { - SetPosition(); - SetColor(); - SetTex(); - SetZ(); -} - -void RegularFogVS() { - SetPosition(); - SetColor(); - SetZ(); - SetFog(); -} - -void TextureFogVS() { - SetPosition(); - SetColor(); - SetTex(); - SetZ(); - SetFog(); -} - -void BitBltVS() { - vec4 position; - position.xy = vec2(Vert.xy) * g_fBitBltPos.xy + g_fBitBltPos.zw; - position.zw = g_fc0.xy; - gl_Position = position; - - VSout.tex.xy = TexCoord.xy * g_fBitBltTex.xy + g_fBitBltTex.zw; - VSout.Z.xy = position.xy * g_fBitBltTrans.xy + g_fBitBltTrans.zw; -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw_gl4.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw_gl4.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw_gl4.h 2013-07-06 09:42:46.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw_gl4.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,941 +0,0 @@ -/* - * This file was generated by glsl2h.pl script - * - * 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 GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#pragma once - - - -static const char* ps2hw_gl4_glsl = - "//#version 420 Keep it for text editor detection\n" - "\n" - "// ZZ Open GL graphics plugin\n" - "// Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com, gregory.hainaut@gmail.com\n" - "// Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008\n" - "//\n" - "// This program is free software; you can redistribute it and/or modify\n" - "// it under the terms of the GNU General Public License as published by\n" - "// the Free Software Foundation; either version 2 of the License, or\n" - "// (at your option) any later version.\n" - "//\n" - "// This program is distributed in the hope that it will be useful,\n" - "// but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "// GNU General Public License for more details.\n" - "//\n" - "// You should have received a copy of the GNU General Public License\n" - "// along with this program; if not, write to the Free Software\n" - "// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n" - "\n" - "// divides by z for every pixel, instead of in vertex shader\n" - "// fixes kh textures\n" - "\n" - "#extension GL_ARB_texture_rectangle: require\n" - "#extension GL_ARB_shading_language_420pack: require\n" - "#extension GL_ARB_separate_shader_objects : require\n" - "\n" - "\n" - "//#define TEST_AEM // tests AEM for black pixels\n" - "//#define REGION_REPEAT // set if texture wrapping mode is region repeat\n" - "//#define WRITE_DEPTH // set if depth is also written in a MRT\n" - "//#define ACCURATE_DECOMPRESSION // set for less capable hardware ATI Radeon 9000 series\n" - "//#define EXACT_COLOR // make sure the output color is clamped to 1/255 boundaries (for alpha testing)\n" - "//#define NO_LOGZ // disable logz\n" - "\n" - "#define PERSPECTIVE_CORRECT_TEX\n" - "\n" - "#ifdef PERSPECTIVE_CORRECT_TEX\n" - "#define TEX_XY tex.xy/tex.z\n" - "#define TEX_DECL vec3\n" - "#else\n" - "#define TEX_XY tex.xy\n" - "#define TEX_DECL vec2\n" - "#endif\n" - "\n" - "// NVidia CG-data types\n" - "#define half2 vec2\n" - "#define half3 vec3\n" - "#define half4 vec4\n" - "#define float2 vec2\n" - "#define float3 vec3\n" - "#define float4 vec4\n" - "\n" - "////////////////////////////////////////////////////////////////////\n" - "// INPUT/OUTPUT\n" - "////////////////////////////////////////////////////////////////////\n" - "// NOTE: Future optimization tex.w is normally useless (in cg it is a float3) so it can contains the fog value\n" - "struct vertex\n" - "{\n" - " vec4 color;\n" - " vec4 Z;\n" - " TEX_DECL tex;\n" - " float fog;\n" - "};\n" - "\n" - "#ifdef VERTEX_SHADER\n" - "out gl_PerVertex {\n" - " invariant vec4 gl_Position;\n" - " float gl_PointSize;\n" - " float gl_ClipDistance[];\n" - "};\n" - "\n" - "layout(location = 0) in ivec4 Vert;\n" - "layout(location = 1) in vec4 Color;\n" - "layout(location = 2) in vec4 SecondaryColor;\n" - "layout(location = 3) in vec3 TexCoord;\n" - "\n" - "layout(location = 0) out vertex VSout;\n" - "\n" - "#endif\n" - "\n" - "#ifdef FRAGMENT_SHADER\n" - "\n" - "layout(location = 0) in vertex PSin;\n" - "\n" - "// FIXME: host only do glDrawBuffers of 1 buffers not 2. I think this is a major bug\n" - "layout(location = 0) out vec4 FragData0;\n" - "layout(location = 1) out vec4 FragData1;\n" - "\n" - "#endif\n" - "\n" - "////////////////////////////////////////////////////////////////////\n" - "// Texture SAMPLER\n" - "////////////////////////////////////////////////////////////////////\n" - "// // main ps2 memory, each pixel is stored in 32bit color\n" - "// uniform sampler2DRect g_sMemory[2];\n" - "//\n" - "// // used to get the tiled offset into a page given the linear offset\n" - "// uniform sampler2DRect g_sSrcFinal;\n" - "// uniform sampler2D g_sBlocks;\n" - "// uniform sampler2D g_sBilinearBlocks;\n" - "// uniform sampler2D g_sConv16to32;\n" - "// uniform sampler3D g_sConv32to16;\n" - "// uniform sampler2DRect g_sBitwiseANDX;\n" - "// uniform sampler2DRect g_sBitwiseANDY;\n" - "// uniform sampler2DRect g_sInterlace;\n" - "//\n" - "// // used only on rare cases where the render target is PSMT8H\n" - "// uniform sampler2D g_sCLUT;\n" - "// main ps2 memory, each pixel is stored in 32bit color\n" - "layout(binding = 10) uniform sampler2DRect g_sMemory; // dual context\n" - "\n" - "// used to get the tiled offset into a page given the linear offset\n" - "layout(binding = 1) uniform sampler2DRect g_sSrcFinal;\n" - "layout(binding = 2) uniform sampler2D g_sBlocks;\n" - "layout(binding = 3) uniform sampler2D g_sBilinearBlocks;\n" - "layout(binding = 4) uniform sampler2D g_sConv16to32;\n" - "layout(binding = 5) uniform sampler3D g_sConv32to16;\n" - "layout(binding = 6) uniform sampler2DRect g_sBitwiseANDX;\n" - "layout(binding = 7) uniform sampler2DRect g_sBitwiseANDY;\n" - "layout(binding = 8) uniform sampler2DRect g_sInterlace;\n" - "\n" - "// used only on rare cases where the render target is PSMT8H\n" - "layout(binding = 9) uniform sampler2D g_sCLUT;\n" - "\n" - "////////////////////////////////////////////////////////////////////\n" - "// UNIFORM BUFFER\n" - "////////////////////////////////////////////////////////////////////\n" - "layout(std140, binding = 0) uniform constant_buffer\n" - "{\n" - " // Both shader\n" - " // .z is used for the addressing fn\n" - " // FIXME: not same value between c and shader...\n" - " // float4 g_fBilinear = float4(-0.7f, -0.65f, 0.9,1/32767.0f);\n" - " float4 g_fBilinear;\n" - " float4 g_fZBias;\n" - " float4 g_fc0;\n" - " float4 g_fMult;\n" - " // Vertex\n" - " float4 g_fZ; // transforms d3dcolor z into float z\n" - " // Pixel\n" - " half4 g_fExactColor;\n" - "};\n" - "layout(std140, binding = 1) uniform common_buffer\n" - "{\n" - " float4 g_fPosXY;\n" - " float4 g_fFogColor;\n" - "};\n" - "layout(std140, binding = 2) uniform vertex_buffer\n" - "{\n" - " float4 g_fBitBltPos;\n" - " float4 g_fBitBltTex;\n" - " float4 g_fBitBltTrans;\n" - "};\n" - "layout(std140, binding = 3) uniform fragment_buffer\n" - "{\n" - " half4 fTexAlpha2;\n" - "\n" - " float4 g_fTexOffset; // converts the page and block offsets into the mem addr/1024\n" - " float4 g_fTexDims; // mult by tex dims when accessing the block texture\n" - " float4 g_fTexBlock;\n" - "\n" - " float4 g_fClampExts; // if clamping the texture, use (minu, minv, maxu, maxv)\n" - " float4 TexWrapMode; // 0 - repeat/clamp, 1 - region rep (use fRegRepMask)\n" - "\n" - " float4 g_fRealTexDims; // tex dims used for linear filtering (w,h,1/w,1/h)\n" - "\n" - " // (alpha0, alpha1, 1 if highlight2 and tcc is rgba, 1-y)\n" - " half4 g_fTestBlack; // used for aem bit\n" - "\n" - " float4 g_fPageOffset;\n" - "\n" - " half4 fTexAlpha;\n" - "\n" - " float4 g_fInvTexDims; // similar to g_fClutOff\n" - "\n" - " // used for rectblitting\n" - " float4 g_fBitBltZ;\n" - "\n" - " half4 g_fOneColor; // col*.xxxy+.zzzw\n" - "};\n" - "\n" - "\n" - "// given a local tex coord, returns the coord in the memory\n" - "float2 ps2memcoord(float2 realtex)\n" - "{\n" - " float4 off;\n" - "\n" - " // block off\n" - " realtex.xy = realtex.xy * g_fTexDims.xy + g_fTexDims.zw;\n" - " realtex.xy = (realtex.xy - fract(realtex.xy)) * g_fMult.zw;\n" - " float2 fblock = fract(realtex.xy);\n" - " off.xy = realtex.xy-fblock.xy;\n" - "\n" - "#ifdef ACCURATE_DECOMPRESSION\n" - " off.z = texture(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).r;\n" - " off.x = dot(off.xy, g_fTexOffset.xy);\n" - " float r = g_fTexOffset.w;\n" - " float f = fract(off.x);\n" - " float fadd = g_fTexOffset.z * off.z;\n" - " off.w = off.x + fadd + r;\n" - " off.x = fract(f + fadd + r);\n" - " off.w -= off.x ;\n" - "#else\n" - " off.z = texture(g_sBlocks, g_fTexBlock.xy*fblock + g_fTexBlock.zw).r;\n" - "\n" - " // combine the two\n" - " off.x = dot(off.xyz, g_fTexOffset.xyz)+g_fTexOffset.w;\n" - " off.x = modf(off.x, off.w);\n" - "#endif\n" - "\n" - " off.xy = off.xw * g_fPageOffset.zy + g_fPageOffset.wx;\n" - " //off.y = off.w * g_fPageOffset.y + g_fPageOffset.x;\n" - " return off.xy;\n" - "}\n" - "\n" - "// find all texcoords for bilinear filtering\n" - "// assume that orgtex are already on boundaries\n" - "void ps2memcoord4(float4 orgtex, out float4 off0, out float4 off1)\n" - "{\n" - " //float4 off0, off1, off2, off3;\n" - " float4 realtex;\n" - "\n" - " // block off\n" - " realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw;\n" - " float4 fblock = fract(realtex.xyzw);\n" - " float4 ftransblock = g_fTexBlock.xyxy*fblock + g_fTexBlock.zwzw;\n" - " realtex -= fblock;\n" - "\n" - " float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w;\n" - "\n" - " float4 colors;// = texture(g_sBilinearBlocks, ftransblock.xy);\n" - "\n" - " // this is faster on ffx ingame\n" - " colors.x = texture(g_sBlocks, ftransblock.xy).r;\n" - " colors.y = texture(g_sBlocks, ftransblock.zy).r;\n" - " colors.z = texture(g_sBlocks, ftransblock.xw).r;\n" - " colors.w = texture(g_sBlocks, ftransblock.zw).r;\n" - "\n" - " float4 fr, rem;\n" - "\n" - "#ifdef ACCURATE_DECOMPRESSION\n" - " fr = fract(transvals);\n" - " float4 fadd = colors * g_fTexOffset.z;\n" - " rem = transvals + fadd;\n" - " fr = fract(fr + fadd);\n" - " rem -= fr;\n" - "#else\n" - " transvals += colors * g_fTexOffset.z;\n" - "\n" - " fr = modf(transvals, rem);\n" - "#endif\n" - "\n" - " rem = rem * g_fPageOffset.y + g_fPageOffset.x;\n" - " fr = fr * g_fPageOffset.z + g_fPageOffset.w;\n" - "\n" - " // combine\n" - " off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy;\n" - " off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww;\n" - "}\n" - "\n" - "void ps2memcoord4_fast(float4 orgtex, out float4 off0, out float4 off1)\n" - "{\n" - " float4 realtex;\n" - "\n" - " realtex = (orgtex * g_fTexDims.xyxy + g_fTexDims.zwzw);// * g_fMult.zwzw;\n" - " float4 fblock = fract(realtex.xyzw);\n" - " float2 ftransblock = g_fTexBlock.xy*fblock.xy + g_fTexBlock.zw;\n" - " realtex -= fblock;\n" - "\n" - " float4 transvals = g_fTexOffset.x * realtex.xzxz + g_fTexOffset.y * realtex.yyww + g_fTexOffset.w;\n" - "\n" - " float4 colors = texture(g_sBilinearBlocks, ftransblock.xy);\n" - " float4 fr, rem;\n" - "\n" - "#ifdef ACCURATE_DECOMPRESSION\n" - " fr = fract(transvals);\n" - " float4 fadd = colors * g_fTexOffset.z;\n" - " rem = transvals + fadd;\n" - " fr = fract(fr + fadd);\n" - " rem -= fr;\n" - "#else\n" - " transvals += colors * g_fTexOffset.z;\n" - "\n" - " fr = modf(transvals, rem);\n" - "#endif\n" - "\n" - " rem = rem * g_fPageOffset.y + g_fPageOffset.x;\n" - " fr = fr * g_fPageOffset.z;\n" - "\n" - " off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy;\n" - " off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww;\n" - "}\n" - "\n" - "// Wrapping modes\n" - "#if defined(REPEAT)\n" - "\n" - "float2 ps2addr(float2 coord)\n" - "{\n" - " return fract(coord.xy);\n" - "}\n" - "\n" - "#elif defined(CLAMP)\n" - "\n" - "float2 ps2addr(float2 coord)\n" - "{\n" - " return clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw);\n" - "}\n" - "\n" - "#elif defined(REGION_REPEAT)\n" - "\n" - "// computes the local tex coord along with addressing modes\n" - "float2 ps2addr(float2 coord)\n" - "{\n" - " float2 final = fract(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw));\n" - "\n" - " if( TexWrapMode.x > g_fBilinear.z ) // region repeat mode for x (umsk&x)|ufix\n" - " final.x = texture(g_sBitwiseANDX, abs(coord.x)*TexWrapMode.zx).x * g_fClampExts.x + g_fClampExts.z;\n" - " if( TexWrapMode.y > g_fBilinear.z ) // region repeat mode for x (vmsk&x)|vfix\n" - " final.y = texture(g_sBitwiseANDY, abs(coord.y)*TexWrapMode.wy).x * g_fClampExts.y + g_fClampExts.w;\n" - "\n" - " return final;\n" - "}\n" - "\n" - "#else\n" - "\n" - "float2 ps2addr(float2 coord)\n" - "{\n" - " return fract(clamp(coord.xy, g_fClampExts.xy, g_fClampExts.zw));\n" - "}\n" - "\n" - "#endif\n" - "\n" - "half4 tex2DPS_32(float2 tex0)\n" - "{\n" - " return texture(g_sMemory, ps2memcoord(tex0));\n" - "}\n" - "\n" - "// use when texture is not tiled -- shader 1\n" - "half4 tex2DPS_tex32(float2 tex0)\n" - "{\n" - " return texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w;\n" - "}\n" - "\n" - "// use when texture is not tiled -- shader 2\n" - "half4 tex2DPS_clut32(float2 tex0)\n" - "{\n" - " float index = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw).a+g_fPageOffset.w;\n" - " return texture(g_sCLUT, index*g_fExactColor.xz+g_fExactColor.yz);\n" - "}\n" - "\n" - "// Shader 3\n" - "// use when texture is not tiled and converting from 32bit to 16bit\n" - "// don't convert on the block level, only on the column level\n" - "// so every other 8 pixels, use the upper bits instead of lower\n" - "half4 tex2DPS_tex32to16(float2 tex0)\n" - "{\n" - " bool upper = false;\n" - " tex0.y += g_fPageOffset.z;\n" - " float2 ffrac = mod(tex0, g_fTexOffset.xy);\n" - " tex0.xy = g_fc0.ww * (tex0.xy + ffrac);\n" - " if( ffrac.x > g_fTexOffset.z ) {\n" - " tex0.x -= g_fTexOffset.z;\n" - " upper = true;\n" - " }\n" - " if( ffrac.y >= g_fTexOffset.w ) {\n" - " tex0.y -= g_fTexOffset.w;\n" - " tex0.x += g_fc0.w;\n" - " }\n" - "\n" - " half4 color = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw)*g_fZBias.zzzw+g_fPageOffset.w;\n" - " float2 uv = upper ? color.xw : color.zy;\n" - " return texture(g_sConv16to32, uv+g_fPageOffset.xy);\n" - "}\n" - "\n" - "// Shader 4\n" - "// used when a 16 bit texture is used an 8h\n" - "half4 tex2DPS_tex16to8h(float2 tex0)\n" - "{\n" - " float4 final;\n" - " float2 ffrac = mod(tex0+g_fPageOffset.zw, g_fTexOffset.xy);\n" - " tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw;\n" - "\n" - " if( ffrac.x > g_fTexOffset.x*g_fc0.w )\n" - " tex0.x += g_fTexOffset.x*g_fc0.w;\n" - " if( tex0.x >= g_fc0.y ) tex0 += g_fTexOffset.zw;\n" - "\n" - " float4 upper = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw);\n" - "\n" - " // only need alpha\n" - " float index = texture(g_sConv32to16, upper.zyx-g_fc0.z).y + upper.w*g_fc0.w*g_fc0.w;\n" - " return texture(g_sCLUT, index+g_fExactColor.yz);\n" - "}\n" - "\n" - "// Shader 5\n" - "// used when a 16 bit texture is used a 32bit one\n" - "half4 tex2DPS_tex16to32(float2 tex0)\n" - "{\n" - " float4 final;\n" - " float2 ffrac = mod(tex0+g_fPageOffset.zw, g_fTexOffset.xy);\n" - " //tex0.xy = g_fPageOffset.xy * tex0.xy - ffrac * g_fc0.yw;\n" - " tex0.y += g_fPageOffset.y * ffrac.y;\n" - "\n" - " if( ffrac.x > g_fTexOffset.z ) {\n" - " tex0.x -= g_fTexOffset.z;\n" - " tex0.y += g_fTexOffset.w;\n" - " }\n" - "\n" - " float fconst = g_fc0.w*g_fc0.w;\n" - " float4 lower = texture(g_sSrcFinal, g_fTexDims.xy*tex0);\n" - " float4 upper = texture(g_sMemory, g_fTexDims.xy*tex0+g_fTexDims.zw);\n" - "\n" - " final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*fconst;\n" - " final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*fconst;\n" - " return final;\n" - "}\n" - "\n" - "half4 tex2DPS_tex16to32h(float2 tex0)\n" - "{\n" - " float4 final = vec4(0.0, 0.0, 0.0, 0.0);\n" - " return final;\n" - "}\n" - "\n" - "//half4 f;\n" - "//f.w = old.y > (127.2f/255.0f) ? 1 : 0;\n" - "//old.y -= 0.5f * f.w;\n" - "//f.xyz = fract(old.yyx*half3(2.002*255.0f/256.0f, 64.025f*255.0f/256.0f, 8.002*255.0f/256.0f));\n" - "//f.y += old.x * (0.25f*255.0f/256.0f);\n" - "\n" - "////////////////////////////////\n" - "// calculates the texture color\n" - "////////////////////////////////\n" - "\n" - "#define decl_ps2shade(num) \\\n" - "decl_ps2shade_##num(_32) \\\n" - "decl_ps2shade_##num(_tex32) \\\n" - "decl_ps2shade_##num(_clut32) \\\n" - "decl_ps2shade_##num(_tex32to16) \\\n" - "decl_ps2shade_##num(_tex16to8h) \\\n" - "decl_ps2shade_##num(_tex16to32h)\n" - "\n" - "// nearest\n" - "#define decl_ps2shade_0(bit) \\\n" - "float4 ps2shade0##bit( TEX_DECL tex) \\\n" - "{ \\\n" - " return tex2DPS##bit( ps2addr(TEX_XY)); \\\n" - "}\n" - "\n" - "// do fast memcoord4 calcs when textures behave well\n" - "#ifdef REPEAT\n" - "#define PS2MEMCOORD4 ps2memcoord4\n" - "#else\n" - "#define PS2MEMCOORD4 ps2memcoord4\n" - "#endif\n" - "\n" - "\n" - "#define decl_BilinearFilter(bit, addrfn) \\\n" - "half4 BilinearFilter##bit(float2 tex0) \\\n" - "{ \\\n" - " float4 off0, off1; \\\n" - " float4 ftex; \\\n" - " float2 ffrac; \\\n" - " ftex.xy = tex0 + g_fBilinear.xy * g_fRealTexDims.zw; \\\n" - " ffrac = fract(ftex.xy*g_fRealTexDims.xy); \\\n" - " ftex.xy -= ffrac.xy * g_fRealTexDims.zw; \\\n" - " \\\n" - " ftex.zw = ps2addr(ftex.xy + g_fRealTexDims.zw); \\\n" - " ftex.xy = ps2addr(ftex.xy); \\\n" - " \\\n" - " PS2MEMCOORD4(ftex, off0, off1); \\\n" - " half4 c0 = texture(g_sMemory, off0.xy); \\\n" - " half4 c1 = texture(g_sMemory, off0.zw); \\\n" - " half4 c2 = texture(g_sMemory, off1.xy); \\\n" - " half4 c3 = texture(g_sMemory, off1.zw); \\\n" - " return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, ffrac.x), vec4(ffrac.y) ); \\\n" - "}\n" - "\n" - "decl_BilinearFilter(_32, ps2addr)\n" - "decl_BilinearFilter(_tex32, ps2addr)\n" - "decl_BilinearFilter(_clut32, ps2addr)\n" - "decl_BilinearFilter(_tex32to16, ps2addr)\n" - "decl_BilinearFilter(_tex16to8h, ps2addr)\n" - "decl_BilinearFilter(_tex16to32h, ps2addr)\n" - "\n" - "//TODO! For mip maps, only apply when LOD >= 0\n" - "// lcm == 0, LOD = log(1/Q)*L + K, lcm == 1, LOD = K\n" - "\n" - "// bilinear\n" - "#define decl_ps2shade_1(bit) \\\n" - "half4 ps2shade1##bit(TEX_DECL tex) \\\n" - "{ \\\n" - " return BilinearFilter##bit(TEX_XY); \\\n" - "}\n" - "\n" - "// nearest, mip nearest\n" - "#define decl_ps2shade_2(bit) \\\n" - "half4 ps2shade2##bit(TEX_DECL tex) \\\n" - "{ \\\n" - " return tex2DPS##bit( ps2addr(TEX_XY)); \\\n" - "}\n" - "\n" - "// nearest, mip linear\n" - "#define decl_ps2shade_3(bit) \\\n" - "half4 ps2shade3##bit(TEX_DECL tex) \\\n" - "{ \\\n" - " return tex2DPS##bit(ps2addr(TEX_XY)); \\\n" - "}\n" - "\n" - "// linear, mip nearest\n" - "#define decl_ps2shade_4(bit) \\\n" - "half4 ps2shade4##bit(TEX_DECL tex) \\\n" - "{ \\\n" - " return BilinearFilter##bit(TEX_XY); \\\n" - "}\n" - "\n" - "// linear, mip linear\n" - "#define decl_ps2shade_5(bit) \\\n" - "half4 ps2shade5##bit(TEX_DECL tex) \\\n" - "{ \\\n" - " return BilinearFilter##bit(TEX_XY); \\\n" - "}\n" - "\n" - "decl_ps2shade(0)\n" - "decl_ps2shade(1)\n" - "decl_ps2shade(2)\n" - "decl_ps2shade(3)\n" - "decl_ps2shade(4)\n" - "decl_ps2shade(5)\n" - "\n" - "\n" - "half4 ps2CalcShade(half4 texcol, half4 color)\n" - "{\n" - "#ifdef TEST_AEM\n" - " if( dot(texcol.xyzw, g_fTestBlack.xyzw) <= g_fc0.z )\n" - " texcol.w = g_fc0.x;\n" - " else\n" - "#endif\n" - " texcol.w = texcol.w * fTexAlpha.y + fTexAlpha.x;\n" - "\n" - " texcol = texcol * (fTexAlpha2.zzzw * color + fTexAlpha2.xxxy) + fTexAlpha.zzzw * color.wwww;\n" - "\n" - " return texcol;\n" - "}\n" - "\n" - "// final ops on the color\n" - "#ifdef EXACT_COLOR\n" - "\n" - "half4 ps2FinalColor(half4 col)\n" - "{\n" - " // g_fOneColor has to scale by 255\n" - " half4 temp = col * g_fOneColor.xxxy + g_fOneColor.zzzw;\n" - " temp.w = floor(temp.w)*g_fExactColor.w;\n" - " return temp;\n" - "}\n" - "\n" - "#else\n" - "half4 ps2FinalColor(half4 col)\n" - "{\n" - " return col * g_fOneColor.xxxy + g_fOneColor.zzzw;\n" - "}\n" - "#endif\n" - "\n" - "\n" - "#ifdef FRAGMENT_SHADER // This is code only for FRAGMENTS (pixel shader)\n" - "\n" - "#ifdef WRITE_DEPTH\n" - "void write_depth_target()\n" - "{\n" - " FragData1 = PSin.Z; \n" - "}\n" - "#else\n" - "void write_depth_target() { }\n" - "#endif\n" - "\n" - "void RegularPS() {\n" - " // whenever outputting depth, make sure to mult by 255/256 and 1\n" - " FragData0 = ps2FinalColor(PSin.color);\n" - " write_depth_target();\n" - "}\n" - "\n" - "#define DECL_TEXPS(num, bit) \\\n" - "void Texture##num##bit##PS() \\\n" - "{ \\\n" - " FragData0 = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(PSin.tex), PSin.color)); \\\n" - " write_depth_target(); \\\n" - "}\n" - "\n" - "#define DECL_TEXPS_(num) \\\n" - "DECL_TEXPS(num, _32) \\\n" - "DECL_TEXPS(num, _tex32) \\\n" - "DECL_TEXPS(num, _clut32) \\\n" - "DECL_TEXPS(num, _tex32to16) \\\n" - "DECL_TEXPS(num, _tex16to8h)\n" - "\n" - "DECL_TEXPS_(0)\n" - "DECL_TEXPS_(1)\n" - "DECL_TEXPS_(2)\n" - "DECL_TEXPS_(3)\n" - "DECL_TEXPS_(4)\n" - "DECL_TEXPS_(5)\n" - "\n" - "void RegularFogPS() {\n" - " half4 c;\n" - " c.xyz = mix(g_fFogColor.xyz, PSin.color.xyz, vec3(PSin.fog));\n" - " c.w = PSin.color.w;\n" - " FragData0 = ps2FinalColor(c);\n" - " write_depth_target();\n" - "}\n" - "\n" - "#define DECL_TEXFOGPS(num, bit) \\\n" - "void TextureFog##num##bit##PS() \\\n" - "{ \\\n" - " half4 c = ps2CalcShade(ps2shade##num##bit(PSin.tex), PSin.color); \\\n" - " c.xyz = mix(g_fFogColor.xyz, c.xyz, vec3(PSin.fog)); \\\n" - " FragData0 = ps2FinalColor(c); \\\n" - " write_depth_target(); \\\n" - "}\n" - "\n" - "#define DECL_TEXFOGPS_(num) \\\n" - "DECL_TEXFOGPS(num, _32) \\\n" - "DECL_TEXFOGPS(num, _tex32) \\\n" - "DECL_TEXFOGPS(num, _clut32) \\\n" - "DECL_TEXFOGPS(num, _tex32to16) \\\n" - "DECL_TEXFOGPS(num, _tex16to8h)\n" - "\n" - "DECL_TEXFOGPS_(0)\n" - "DECL_TEXFOGPS_(1)\n" - "DECL_TEXFOGPS_(2)\n" - "DECL_TEXFOGPS_(3)\n" - "DECL_TEXFOGPS_(4)\n" - "DECL_TEXFOGPS_(5)\n" - "\n" - "//-------------------------------------------------------\n" - "// Techniques not related to the main primitive commands\n" - "half4 BilinearBitBlt(float2 tex0)\n" - "{\n" - " float4 ftex;\n" - " float2 ffrac;\n" - "\n" - " ffrac.xy = fract(tex0*g_fRealTexDims.xy);\n" - " ftex.xy = tex0 - ffrac.xy * g_fRealTexDims.zw;\n" - " ftex.zw = ftex.xy + g_fRealTexDims.zw;\n" - "\n" - " float4 off0, off1;\n" - " ps2memcoord4_fast(ftex, off0, off1);\n" - " half4 c0 = texture(g_sMemory, off0.xy);\n" - " half4 c1 = texture(g_sMemory, off0.zw);\n" - " half4 c2 = texture(g_sMemory, off1.xy);\n" - " half4 c3 = texture(g_sMemory, off1.zw);\n" - "\n" - " return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, vec4(ffrac.x)), vec4(ffrac.y) );\n" - "}\n" - "\n" - "void BitBltPS() {\n" - " FragData0 = texture(g_sMemory, ps2memcoord(PSin.tex.xy))*g_fOneColor.xxxy;\n" - "}\n" - "\n" - "// used when AA\n" - "void BitBltAAPS() {\n" - " FragData0 = BilinearBitBlt(PSin.tex.xy) * g_fOneColor.xxxy;\n" - "}\n" - "\n" - "void BitBltDepthPS() {\n" - " vec4 data;\n" - " data = texture(g_sMemory, ps2memcoord(PSin.tex.xy));\n" - " FragData0 = data + g_fZBias.y;\n" - "#ifdef NO_LOGZ\n" - " gl_FragDepth = dot(data, g_fBitBltZ);\n" - "#else\n" - " gl_FragDepth = log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w;\n" - "#endif\n" - "}\n" - "\n" - "void BitBltDepthMRTPS() {\n" - " vec4 data;\n" - " data = texture(g_sMemory, ps2memcoord(PSin.tex.xy));\n" - " FragData0 = data + g_fZBias.y;\n" - " FragData1.x = g_fc0.x;\n" - "#ifdef NO_LOGZ\n" - " gl_FragDepth = dot(data, g_fBitBltZ);\n" - "#else\n" - " gl_FragDepth = log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w;\n" - "#endif\n" - "}\n" - "\n" - "// static const float BlurKernel[9] = {\n" - "// 0.027601,\n" - "// 0.066213,\n" - "// 0.123701,\n" - "// 0.179952,\n" - "// 0.205065,\n" - "// 0.179952,\n" - "// 0.123701,\n" - "// 0.066213,\n" - "// 0.027601\n" - "// };\n" - "\n" - "half4 BilinearFloat16(float2 tex0)\n" - "{\n" - " return texture(g_sSrcFinal, tex0.xy);\n" - "}\n" - "\n" - "void CRTCTargInterPS() {\n" - " float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w;\n" - " float4 c = BilinearFloat16(PSin.tex.xy);\n" - " c.w = ( g_fc0.w*c.w * g_fOneColor.x + g_fOneColor.y ) * finter;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void CRTCTargPS() {\n" - " float4 c = BilinearFloat16(PSin.tex.xy);\n" - " // FIXME DEBUG: to validate tex coord on blit\n" - " //c = vec4(PSin.tex.x/512.0f, PSin.tex.y/512.0f, 0.0, 1.0);\n" - " c.w = g_fc0.w * c.w * g_fOneColor.x + g_fOneColor.y;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void CRTCInterPS() {\n" - " float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w;\n" - " float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw;\n" - " half4 c = BilinearBitBlt(filtcoord);\n" - " c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "// simpler\n" - "void CRTCInterPS_Nearest() {\n" - " float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w;\n" - " half4 c = texture(g_sMemory, ps2memcoord(PSin.tex.xy));\n" - " c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void CRTCPS() {\n" - " float2 filtcoord = PSin.tex.xy * g_fInvTexDims.xy+g_fInvTexDims.zw;\n" - " half4 c = BilinearBitBlt(filtcoord);\n" - " c.w = c.w * g_fOneColor.x + g_fOneColor.y;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "// simpler\n" - "void CRTCPS_Nearest() {\n" - " half4 c = texture(g_sMemory, ps2memcoord(PSin.tex.xy));\n" - " c.w = c.w * g_fOneColor.x + g_fOneColor.y;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void CRTC24InterPS() {\n" - " float finter = texture(g_sInterlace, PSin.Z.yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w;\n" - " float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw;\n" - "\n" - " half4 c = texture(g_sMemory, ps2memcoord(filtcoord));\n" - " c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void CRTC24PS() {\n" - " float2 filtcoord = trunc(PSin.tex.xy) * g_fInvTexDims.xy + g_fInvTexDims.zw;\n" - " half4 c = texture(g_sMemory, ps2memcoord(filtcoord));\n" - " c.w = c.w * g_fOneColor.x + g_fOneColor.y;\n" - " FragData0 = c;\n" - "}\n" - "\n" - "void ZeroPS() {\n" - " FragData0 = g_fOneColor;\n" - "}\n" - "\n" - "void ZeroDebugPS() {\n" - " FragData0 = vec4(PSin.tex.x, PSin.tex.y, PSin.tex.z, 0.5);\n" - "}\n" - "\n" - "void ZeroDebug2PS() {\n" - " vec2 xy = ps2memcoord(fract(PSin.tex.xy/PSin.tex.z)) * vec2(1/4096.0f, 1/48.0f);\n" - " FragData0 = vec4(xy.x, xy.y, 0.0, 0.5);\n" - "}\n" - "\n" - "void ZeroDebug3PS() {\n" - " //FragData0 = vec4(PSin.position.x/2.0f + 0.5f, PSin.position.y/2.0f + 0.5f, 1.0, 0.5);\n" - "}\n" - "\n" - "void BaseTexturePS() {\n" - " FragData0 = texture(g_sSrcFinal, PSin.tex.xy) * g_fOneColor;\n" - "}\n" - "\n" - "void Convert16to32PS() {\n" - " float4 final;\n" - " float2 ffrac = mod ( PSin.tex.xy + g_fTexDims.zw, g_fTexOffset.xy);\n" - " float2 tex0 = g_fTexDims.xy * PSin.tex.xy - ffrac * g_fc0.yw;\n" - "\n" - " if (ffrac.x > g_fTexOffset.x*g_fc0.w)\n" - " tex0.x += g_fTexOffset.x*g_fc0.w;\n" - " if (tex0.x >= g_fc0.y)\n" - " tex0 += g_fTexOffset.zw;\n" - "\n" - " float4 lower = texture(g_sSrcFinal, tex0);\n" - " float4 upper = texture(g_sSrcFinal, tex0 + g_fPageOffset.xy);\n" - "\n" - " final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*g_fPageOffset.zw;\n" - " final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*g_fPageOffset.zw;\n" - "\n" - " FragData0= final;\n" - "}\n" - "\n" - "// use when texture is not tiled and converting from 32bit to 16bit\n" - "// don't convert on the block level, only on the column level\n" - "// so every other 8 pixels, use the upper bits instead of lower\n" - "void Convert32to16PS() {\n" - " bool upper = false;\n" - " float2 ffrac = mod(PSin.tex.xy + g_fTexDims.zw, g_fTexOffset.xy);\n" - " float2 tex0 = g_fc0.ww * (PSin.tex.xy + ffrac);\n" - " if( ffrac.x > g_fTexOffset.z ) {\n" - " tex0.x -= g_fTexOffset.z;\n" - " upper = true;\n" - " }\n" - " if( ffrac.y >= g_fTexOffset.w ) {\n" - " tex0.y -= g_fTexOffset.w;\n" - " tex0.x += g_fc0.w;\n" - " }\n" - "\n" - " half4 color = texture(g_sSrcFinal, tex0*g_fTexDims.xy)*g_fc0.yyyw;\n" - " float2 uv = upper ? color.xw : color.zy;\n" - " FragData0 = texture(g_sConv16to32, uv*g_fPageOffset.xy+g_fPageOffset.zw)*g_fTexDims.xxxy;\n" - "}\n" - "#endif //FRAGMENT_SHADER\n" - "\n" - "#ifdef VERTEX_SHADER\n" - "\n" - "void SetColor() {\n" - " VSout.color = Color;\n" - "}\n" - "\n" - "void SetTex() {\n" - "#ifdef PERSPECTIVE_CORRECT_TEX\n" - " VSout.tex = TexCoord;\n" - "#else\n" - " VSout.tex.xy = TexCoord.xy/TexCoord.z;\n" - "#endif\n" - "}\n" - "\n" - "void SetZ() {\n" - "#ifdef WRITE_DEPTH\n" - " VSout.Z = SecondaryColor * g_fZBias.x + g_fZBias.y;\n" - " VSout.Z.w = 1.0f;\n" - "#endif\n" - "}\n" - "\n" - "void SetPosition() {\n" - " float4 position;\n" - " position.xy = vec2(Vert.xy) * g_fPosXY.xy + g_fPosXY.zw;\n" - " // FIXME: the factor in normal mode seem bogus. They don't have same order than in log mode. Or I failed to understand the logic\n" - " //// normal mode.\n" - " // -> dot(g_fZ, SecondaryColor.zyxw)) => reconstruct a float from normalized char. The float range from 0 to 1\n" - " // position.z = dot(g_fZ, SecondaryColor.zyxw);\n" - " //// logz mode\n" - " // -> dot(g_fZ, SecondaryColor.zyxw)) => reconstruct a float from normalized char. The float range from 0 to 2**32\n" - " // position.z = log(g_fc0.y + dot(g_fZ, SecondaryColor.zyxw)) * g_fZNorm.x\n" - " // position.z = log(1 + Z_INT) * 0.999f / (32 * log(2.0)) = log2(1 + Z_INT) * 0.999f / 32\n" - " // log2(...) will range from 0 to 32\n" - "\n" - " // position.z = (log(g_fc0.y + dot(g_fZ, SecondaryColor.zyxw)) * g_fZNorm.x + g_fZNorm.y) * g_fZMin.y + dot(g_fZ, SecondaryColor.zyxw) * g_fZMin.x ;\n" - "#ifdef NO_LOGZ\n" - " position.z = dot(g_fZ, SecondaryColor.zyxw);\n" - "#else\n" - " position.z = log2(1.0f + dot(g_fZ, SecondaryColor.zyxw)) * 0.999f/32.0f;\n" - "#endif\n" - " position.w = 1.0f;\n" - "\n" - " gl_Position = position;\n" - "}\n" - "\n" - "void SetFog() {\n" - " VSout.fog = float(Vert.z) * g_fBilinear.w;\n" - "}\n" - "\n" - "// just smooth shadering\n" - "void RegularVS() {\n" - " SetPosition();\n" - " SetColor();\n" - " SetZ();\n" - "}\n" - "\n" - "// diffuse texture mapping\n" - "void TextureVS() {\n" - " SetPosition();\n" - " SetColor();\n" - " SetTex();\n" - " SetZ();\n" - "}\n" - "\n" - "void RegularFogVS() {\n" - " SetPosition();\n" - " SetColor();\n" - " SetZ();\n" - " SetFog();\n" - "}\n" - "\n" - "void TextureFogVS() {\n" - " SetPosition();\n" - " SetColor();\n" - " SetTex();\n" - " SetZ();\n" - " SetFog();\n" - "}\n" - "\n" - "void BitBltVS() {\n" - " vec4 position;\n" - " position.xy = vec2(Vert.xy) * g_fBitBltPos.xy + g_fBitBltPos.zw;\n" - " position.zw = g_fc0.xy;\n" - " gl_Position = position;\n" - "\n" - " VSout.tex.xy = TexCoord.xy * g_fBitBltTex.xy + g_fBitBltTex.zw;\n" - " VSout.Z.xy = position.xy * g_fBitBltTrans.xy + g_fBitBltTrans.zw;\n" - "}\n" - "\n" - "#endif\n" - ; diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw.glsl pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw.glsl --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ps2hw.glsl 2013-03-01 17:37:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ps2hw.glsl 1970-01-01 00:00:00.000000000 +0000 @@ -1,827 +0,0 @@ -// ZZ Open GL graphics plugin -// Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com -// Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 -// -// 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 - -// divides by z for every pixel, instead of in vertex shader -// fixes kh textures - -#extension ARB_texture_rectangle: enable -#define GL_compatibility_profile 1 -#define PERSPECTIVE_CORRECT_TEX - -// When writting GLSL code we should change variables in code according to denominator -// Not than in and out variables are differ! -// in POSITION set by glVertexPointer goes to gl_Vertex; -// out POSITION goes to gl_position -// in COLOR0 gl_Color -// out COLOR0 gl_FrontColor -// in TEXCOORD0 gl_MultiTexCoord0 -// out TEXCOORD0 gl_TexCoord[0] - -//in Fragments: -// in TEXCOORD0 gl_TexCoord[0] -// out COLOR0 gl_FragData[0] - -//#define TEST_AEM // tests AEM for black pixels -//#define REGION_REPEAT // set if texture wrapping mode is region repeat -//#define WRITE_DEPTH // set if depth is also written in a MRT -//#define ACCURATE_DECOMPRESSION // set for less capable hardware ATI Radeon 9000 series -//#define EXACT_COLOR // make sure the output color is clamped to 1/255 boundaries (for alpha testing) - -#ifdef PERSPECTIVE_CORRECT_TEX -#define TEX_XY tex.xy/tex.z -#define TEX_DECL vec4 -#else -#define TEX_XY tex.xy -#define TEX_DECL vec4 -#endif - -#ifdef WRITE_DEPTH -#define DOZWRITE(x) x -#else -#define DOZWRITE(x) -#endif - -// NVidia CG-data types -#define half2 vec2 -#define half3 vec3 -#define half4 vec4 -#define float2 vec2 -#define float3 vec3 -#define float4 vec4 - -// main ps2 memory, each pixel is stored in 32bit color -uniform sampler2DRect g_sMemory[2]; - -// per context pixel shader constants -uniform half4 fTexAlpha2[2]; - -uniform float4 g_fTexOffset[2]; // converts the page and block offsets into the mem addr/1024 -uniform float4 g_fTexDims[2]; // mult by tex dims when accessing the block texture -uniform float4 g_fTexBlock[2]; - -uniform float4 g_fClampExts[2]; // if clamping the texture, use (minu, minv, maxu, maxv) -uniform float4 TexWrapMode[2]; // 0 - repeat/clamp, 1 - region rep (use fRegRepMask) - -uniform float4 g_fRealTexDims[2]; // tex dims used for linear filtering (w,h,1/w,1/h) - -// (alpha0, alpha1, 1 if highlight2 and tcc is rgba, 1-y) -uniform half4 g_fTestBlack[2]; // used for aem bit - -uniform float4 g_fPageOffset[2]; - -uniform half4 fTexAlpha[2]; - -// vertex shader constants -uniform float4 g_fPosXY[2]; - -// used to get the tiled offset into a page given the linear offset -uniform sampler2DRect g_sSrcFinal; -uniform sampler2D g_sBlocks; -uniform sampler2D g_sBilinearBlocks; -uniform sampler2D g_sConv16to32; -uniform sampler3D g_sConv32to16; -uniform sampler2DRect g_sBitwiseANDX; -uniform sampler2DRect g_sBitwiseANDY; -uniform sampler2DRect g_sInterlace; - -// used only on rare cases where the render target is PSMT8H -uniform sampler2D g_sCLUT; - -// global pixel shader constants -uniform float4 g_fInvTexDims; // similar to g_fClutOff -uniform float4 g_fFogColor; - -// used for rectblitting -uniform float4 g_fBitBltZ; - -uniform half4 g_fOneColor; // col*.xxxy+.zzzw - -// vertex shader constants -uniform float4 g_fBitBltPos; -uniform float4 g_fZ; // transforms d3dcolor z into float z -uniform float4 g_fZNorm; -uniform float4 g_fZMin = float4(0.0f, 1.0f, 0.0f, 0.0f); -uniform float4 g_fBitBltTex; - -// pixel shader consts -// .z is used for the addressing fn -uniform half4 g_fExactColor = half4(0.5,0.5/256.0f,0,1/255.0f); -uniform float4 g_fBilinear = float4(-0.7f, -0.65f, 0.9,1/32767.0f); -uniform float4 g_fZBias = half4(1.0f/256.0f, 1.0004f, 1, 0.5); // also for vs -uniform float4 g_fc0 = float4(0,1, 0.001, 0.5f); // also for vs -uniform float4 g_fMult = float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f); - -// vertex shader consts -uniform float4 g_fBitBltTrans = float4(0.5f, -0.5f, 0.5, 0.5 + 0.4/416.0f); - -// given a local tex coord, returns the coord in the memory -float2 ps2memcoord(float2 realtex) -{ - float4 off; - - // block off - realtex.xy = realtex.xy * g_fTexDims[CTX].xy + g_fTexDims[CTX].zw; - realtex.xy = (realtex.xy - fract(realtex.xy)) * g_fMult.zw; - float2 fblock = fract(realtex.xy); - off.xy = realtex.xy-fblock.xy; - -#ifdef ACCURATE_DECOMPRESSION - off.zw = texture(g_sBlocks, g_fTexBlock[CTX].xy*fblock + g_fTexBlock[CTX].zw).ar; - off.x = dot(off.xy, g_fTexOffset[CTX].xy); - float r = g_fTexOffset[CTX].w; - float f = fract(off.x); - float fadd = g_fTexOffset[CTX].z * off.z; - off.w = off.x + fadd + r; - off.x = fract(f + fadd + r); - off.w -= off.x ; -#else - off.z = texture(g_sBlocks, g_fTexBlock[CTX].xy*fblock + g_fTexBlock[CTX].zw).a; - - // combine the two - off.x = dot(off.xyz, g_fTexOffset[CTX].xyz)+g_fTexOffset[CTX].w; - off.x = modf(off.x, off.w); -#endif - - off.xy = off.xw * g_fPageOffset[CTX].zy + g_fPageOffset[CTX].wx; - //off.y = off.w * g_fPageOffset[CTX].y + g_fPageOffset[CTX].x; - return off.xy; -} - -// find all texcoords for bilinear filtering -// assume that orgtex are already on boundaries -void ps2memcoord4(float4 orgtex, out float4 off0, out float4 off1) -{ - //float4 off0, off1, off2, off3; - float4 realtex; - - // block off - realtex = (orgtex * g_fTexDims[CTX].xyxy + g_fTexDims[CTX].zwzw);// * g_fMult.zwzw; - float4 fblock = fract(realtex.xyzw); - float4 ftransblock = g_fTexBlock[CTX].xyxy*fblock + g_fTexBlock[CTX].zwzw; - realtex -= fblock; - - float4 transvals = g_fTexOffset[CTX].x * realtex.xzxz + g_fTexOffset[CTX].y * realtex.yyww + g_fTexOffset[CTX].w; - - float4 colors;// = texture(g_sBilinearBlocks, ftransblock.xy); - - // this is faster on ffx ingame - colors.x = texture(g_sBlocks, ftransblock.xy).a; - colors.y = texture(g_sBlocks, ftransblock.zy).a; - colors.z = texture(g_sBlocks, ftransblock.xw).a; - colors.w = texture(g_sBlocks, ftransblock.zw).a; - - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = fract(transvals); - float4 fadd = colors * g_fTexOffset[CTX].z; - rem = transvals + fadd; - fr = fract(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset[CTX].z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset[CTX].y + g_fPageOffset[CTX].x; - fr = fr * g_fPageOffset[CTX].z + g_fPageOffset[CTX].w; - - // combine - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -void ps2memcoord4_fast(float4 orgtex, out float4 off0, out float4 off1) -{ - float4 realtex; - - realtex = (orgtex * g_fTexDims[CTX].xyxy + g_fTexDims[CTX].zwzw);// * g_fMult.zwzw; - float4 fblock = fract(realtex.xyzw); - float2 ftransblock = g_fTexBlock[CTX].xy*fblock.xy + g_fTexBlock[CTX].zw; - realtex -= fblock; - - float4 transvals = g_fTexOffset[CTX].x * realtex.xzxz + g_fTexOffset[CTX].y * realtex.yyww + g_fTexOffset[CTX].w; - - float4 colors = texture(g_sBilinearBlocks, ftransblock.xy); - float4 fr, rem; - -#ifdef ACCURATE_DECOMPRESSION - fr = fract(transvals); - float4 fadd = colors * g_fTexOffset[CTX].z; - rem = transvals + fadd; - fr = fract(fr + fadd); - rem -= fr; -#else - transvals += colors * g_fTexOffset[CTX].z; - - fr = modf(transvals, rem); -#endif - - rem = rem * g_fPageOffset[CTX].y + g_fPageOffset[CTX].x; - fr = fr * g_fPageOffset[CTX].z; - - off0 = g_fc0.yxyx * fr.xxyy + g_fc0.xyxy * rem.xxyy; - off1 = g_fc0.yxyx * fr.zzww + g_fc0.xyxy * rem.zzww; -} - -// Wrapping modes -#if defined(REPEAT) - -float2 ps2addr(float2 coord) -{ - return fract(coord.xy); -} - -#elif defined(CLAMP) - -float2 ps2addr(float2 coord) -{ - return clamp(coord.xy, g_fClampExts[CTX].xy, g_fClampExts[CTX].zw); -} - -#elif defined(REGION_REPEAT) - -// computes the local tex coord along with addressing modes -float2 ps2addr(float2 coord) -{ - float2 final = fract(clamp(coord.xy, g_fClampExts[CTX].xy, g_fClampExts[CTX].zw)); - - if( TexWrapMode[CTX].x > g_fBilinear.z ) // region repeat mode for x (umsk&x)|ufix - final.x = texture(g_sBitwiseANDX, abs(coord.x)*TexWrapMode[CTX].zx).x * g_fClampExts[CTX].x + g_fClampExts[CTX].z; - if( TexWrapMode[CTX].y > g_fBilinear.z ) // region repeat mode for x (vmsk&x)|vfix - final.y = texture(g_sBitwiseANDY, abs(coord.y)*TexWrapMode[CTX].wy).x * g_fClampExts[CTX].y + g_fClampExts[CTX].w; - - return final; -} - -#else - -float2 ps2addr(float2 coord) -{ - return fract(clamp(coord.xy, g_fClampExts[CTX].xy, g_fClampExts[CTX].zw)); -} - -#endif - -half4 tex2DPS_32(float2 tex0) -{ - return texture(g_sMemory[CTX], ps2memcoord(tex0).xy); -} - -// use when texture is not tiled -- shader 1 -half4 tex2DPS_tex32(float2 tex0) -{ - return texture(g_sMemory[CTX], g_fTexDims[CTX].xy*tex0+g_fTexDims[CTX].zw)*g_fZBias.zzzw+g_fPageOffset[CTX].w; -} - -// use when texture is not tiled -- shader 2 -half4 tex2DPS_clut32(float2 tex0) -{ - float index = texture(g_sMemory[CTX], g_fTexDims[CTX].xy*tex0+g_fTexDims[CTX].zw).a+g_fPageOffset[CTX].w; - return texture(g_sCLUT, index*g_fExactColor.xz+g_fExactColor.yz); -} - -// Shader 3 -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -half4 tex2DPS_tex32to16(float2 tex0) -{ - bool upper = false; - tex0.y += g_fPageOffset[CTX].z; - float2 ffrac = mod(tex0, g_fTexOffset[CTX].xy); - tex0.xy = g_fc0.ww * (tex0.xy + ffrac); - if( ffrac.x > g_fTexOffset[CTX].z ) { - tex0.x -= g_fTexOffset[CTX].z; - upper = true; - } - if( ffrac.y >= g_fTexOffset[CTX].w ) { - tex0.y -= g_fTexOffset[CTX].w; - tex0.x += g_fc0.w; - } - - half4 color = texture(g_sMemory[CTX], g_fTexDims[CTX].xy*tex0+g_fTexDims[CTX].zw)*g_fZBias.zzzw+g_fPageOffset[CTX].w; - float2 uv = upper ? color.xw : color.zy; - return texture(g_sConv16to32, uv+g_fPageOffset[CTX].xy); -} - -// Shader 4 -// used when a 16 bit texture is used an 8h -half4 tex2DPS_tex16to8h(float2 tex0) -{ - float4 final; - float2 ffrac = mod(tex0+g_fPageOffset[CTX].zw, g_fTexOffset[CTX].xy); - tex0.xy = g_fPageOffset[CTX].xy * tex0.xy - ffrac * g_fc0.yw; - - if( ffrac.x > g_fTexOffset[CTX].x*g_fc0.w ) - tex0.x += g_fTexOffset[CTX].x*g_fc0.w; - if( tex0.x >= g_fc0.y ) tex0 += g_fTexOffset[CTX].zw; - - float4 upper = texture(g_sMemory[CTX], g_fTexDims[CTX].xy*tex0+g_fTexDims[CTX].zw); - - // only need alpha - float index = texture(g_sConv32to16, upper.zyx-g_fc0.z).y + upper.w*g_fc0.w*g_fc0.w; - return texture(g_sCLUT, index+g_fExactColor.yz); -} - -// Shader 5 -// used when a 16 bit texture is used a 32bit one -half4 tex2DPS_tex16to32(float2 tex0) -{ - float4 final; - float2 ffrac = mod(tex0+g_fPageOffset[CTX].zw, g_fTexOffset[CTX].xy); - //tex0.xy = g_fPageOffset[CTX].xy * tex0.xy - ffrac * g_fc0.yw; - tex0.y += g_fPageOffset[CTX].y * ffrac.y; - - if( ffrac.x > g_fTexOffset[CTX].z ) { - tex0.x -= g_fTexOffset[CTX].z; - tex0.y += g_fTexOffset[CTX].w; - } - - float fconst = g_fc0.w*g_fc0.w; - float4 lower = texture(g_sSrcFinal, g_fTexDims[CTX].xy*tex0); - float4 upper = texture(g_sMemory[CTX], g_fTexDims[CTX].xy*tex0+g_fTexDims[CTX].zw); - - final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*fconst; - final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*fconst; - return final; -} - -half4 tex2DPS_tex16to32h(float2 tex0) -{ - float4 final = vec4(0.0, 0.0, 0.0, 0.0); - return final; -} - -//half4 f; -//f.w = old.y > (127.2f/255.0f) ? 1 : 0; -//old.y -= 0.5f * f.w; -//f.xyz = fract(old.yyx*half3(2.002*255.0f/256.0f, 64.025f*255.0f/256.0f, 8.002*255.0f/256.0f)); -//f.y += old.x * (0.25f*255.0f/256.0f); - -//////////////////////////////// -// calculates the texture color -//////////////////////////////// - -#define decl_ps2shade(num) \ -decl_ps2shade_##num(_32) \ -decl_ps2shade_##num(_tex32) \ -decl_ps2shade_##num(_clut32) \ -decl_ps2shade_##num(_tex32to16) \ -decl_ps2shade_##num(_tex16to8h) \ -decl_ps2shade_##num(_tex16to32h) - -// nearest -#define decl_ps2shade_0(bit) \ -float4 ps2shade0##bit( TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} - -// do fast memcoord4 calcs when textures behave well -#ifdef REPEAT -#define PS2MEMCOORD4 ps2memcoord4 -#else -#define PS2MEMCOORD4 ps2memcoord4 -#endif - - -#define decl_BilinearFilter(bit, addrfn) \ -half4 BilinearFilter##bit(float2 tex0) \ -{ \ - float4 off0, off1; \ - float4 ftex; \ - float2 ffrac; \ - ftex.xy = tex0 + g_fBilinear.xy * g_fRealTexDims[CTX].zw; \ - ffrac = fract(ftex.xy*g_fRealTexDims[CTX].xy); \ - ftex.xy -= ffrac.xy * g_fRealTexDims[CTX].zw; \ - \ - ftex.zw = ps2addr(ftex.xy + g_fRealTexDims[CTX].zw); \ - ftex.xy = ps2addr(ftex.xy); \ - \ - PS2MEMCOORD4(ftex, off0, off1); \ - half4 c0 = texture(g_sMemory[CTX], off0.xy); \ - half4 c1 = texture(g_sMemory[CTX], off0.zw); \ - half4 c2 = texture(g_sMemory[CTX], off1.xy); \ - half4 c3 = texture(g_sMemory[CTX], off1.zw); \ - return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, ffrac.x), vec4(ffrac.y) ); \ -} - -decl_BilinearFilter(_32, ps2addr) -decl_BilinearFilter(_tex32, ps2addr) -decl_BilinearFilter(_clut32, ps2addr) -decl_BilinearFilter(_tex32to16, ps2addr) -decl_BilinearFilter(_tex16to8h, ps2addr) -decl_BilinearFilter(_tex16to32h, ps2addr) - -//TODO! For mip maps, only apply when LOD >= 0 -// lcm == 0, LOD = log(1/Q)*L + K, lcm == 1, LOD = K - -// bilinear -#define decl_ps2shade_1(bit) \ -half4 ps2shade1##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -// nearest, mip nearest -#define decl_ps2shade_2(bit) \ -half4 ps2shade2##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit( ps2addr(TEX_XY)); \ -} - -// nearest, mip linear -#define decl_ps2shade_3(bit) \ -half4 ps2shade3##bit(TEX_DECL tex) \ -{ \ - return tex2DPS##bit(ps2addr(TEX_XY)); \ -} - -// linear, mip nearest -#define decl_ps2shade_4(bit) \ -half4 ps2shade4##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -// linear, mip linear -#define decl_ps2shade_5(bit) \ -half4 ps2shade5##bit(TEX_DECL tex) \ -{ \ - return BilinearFilter##bit(TEX_XY); \ -} - -decl_ps2shade(0) -decl_ps2shade(1) -decl_ps2shade(2) -decl_ps2shade(3) -decl_ps2shade(4) -decl_ps2shade(5) - - -half4 ps2CalcShade(half4 texcol, half4 color) -{ -#ifdef TEST_AEM - if( dot(texcol.xyzw, g_fTestBlack[CTX].xyzw) <= g_fc0.z ) - texcol.w = g_fc0.x; - else -#endif - texcol.w = texcol.w * fTexAlpha[CTX].y + fTexAlpha[CTX].x; - - texcol = texcol * (fTexAlpha2[CTX].zzzw * color + fTexAlpha2[CTX].xxxy) + fTexAlpha[CTX].zzzw * color.wwww; - - return texcol; -} - -// final ops on the color -#ifdef EXACT_COLOR - -half4 ps2FinalColor(half4 col) -{ - // g_fOneColor has to scale by 255 - half4 temp = col * g_fOneColor.xxxy + g_fOneColor.zzzw; - temp.w = floor(temp.w)*g_fExactColor.w; - return temp; -} - -#else -half4 ps2FinalColor(half4 col) -{ - return col * g_fOneColor.xxxy + g_fOneColor.zzzw; -} -#endif - -#ifdef FRAGMENT_SHADER // This is code only for FRAGMENTS (pixel shader) - -void RegularPS() { - // whenever outputting depth, make sure to mult by 255/256 and 1 - gl_FragData[0] = ps2FinalColor(gl_Color); - DOZWRITE(gl_FragData[1] = gl_TexCoord[0];) -} - -#ifdef WRITE_DEPTH - -#define DECL_TEXPS(num, bit) \ -void Texture##num##bit##PS() \ -{ \ - gl_FragData[0] = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(gl_TexCoord[0]), gl_Color)); \ - gl_FragData[1] = gl_TexCoord[1]; \ -} - -#else - -#define DECL_TEXPS(num, bit) \ -void Texture##num##bit##PS() \ -{ \ - gl_FragData[0] = ps2FinalColor(ps2CalcShade(ps2shade##num##bit(gl_TexCoord[0]), gl_Color)); \ -} - -#endif - - -#define DECL_TEXPS_(num) \ -DECL_TEXPS(num, _32) \ -DECL_TEXPS(num, _tex32) \ -DECL_TEXPS(num, _clut32) \ -DECL_TEXPS(num, _tex32to16) \ -DECL_TEXPS(num, _tex16to8h) - -DECL_TEXPS_(0) -DECL_TEXPS_(1) -DECL_TEXPS_(2) -DECL_TEXPS_(3) -DECL_TEXPS_(4) -DECL_TEXPS_(5) - -void RegularFogPS() { - half4 c; - c.xyz = mix(g_fFogColor.xyz, gl_Color.xyz, vec3(gl_TexCoord[0].x)); - c.w = gl_Color.w; - gl_FragData[0] = ps2FinalColor(c); - DOZWRITE(gl_FragData[1] = gl_TexCoord[1];) -} - -#ifdef WRITE_DEPTH - -#define DECL_TEXFOGPS(num, bit) \ -void TextureFog##num##bit##PS() \ -{ \ - half4 c = ps2CalcShade(ps2shade##num##bit(gl_TexCoord[0]), gl_Color); \ - c.xyz = mix(g_fFogColor.xyz, c.xyz, vec3(gl_TexCoord[1].x)); \ - gl_FragData[0] = ps2FinalColor(c); \ - gl_FragData[1] = gl_TexCoord[2]; \ -} - -#else - -#define DECL_TEXFOGPS(num, bit) \ -void TextureFog##num##bit##PS() \ -{ \ - half4 c = ps2CalcShade(ps2shade##num##bit(gl_TexCoord[0]), gl_Color); \ - c.xyz = mix(g_fFogColor.xyz, c.xyz, vec3(gl_TexCoord[1].x)); \ - gl_FragData[0] = ps2FinalColor(c); \ -} - -#endif - -#define DECL_TEXFOGPS_(num) \ -DECL_TEXFOGPS(num, _32) \ -DECL_TEXFOGPS(num, _tex32) \ -DECL_TEXFOGPS(num, _clut32) \ -DECL_TEXFOGPS(num, _tex32to16) \ -DECL_TEXFOGPS(num, _tex16to8h) - -DECL_TEXFOGPS_(0) -DECL_TEXFOGPS_(1) -DECL_TEXFOGPS_(2) -DECL_TEXFOGPS_(3) -DECL_TEXFOGPS_(4) -DECL_TEXFOGPS_(5) - -//------------------------------------------------------- -// Techniques not related to the main primitive commands -half4 BilinearBitBlt(float2 tex0) -{ - float4 ftex; - float2 ffrac; - - ffrac.xy = fract(tex0*g_fRealTexDims[CTX].xy); - ftex.xy = tex0 - ffrac.xy * g_fRealTexDims[CTX].zw; - ftex.zw = ftex.xy + g_fRealTexDims[CTX].zw; - - float4 off0, off1; - ps2memcoord4_fast(ftex, off0, off1); - half4 c0 = texture(g_sMemory[CTX], off0.xy); - half4 c1 = texture(g_sMemory[CTX], off0.zw); - half4 c2 = texture(g_sMemory[CTX], off1.xy); - half4 c3 = texture(g_sMemory[CTX], off1.zw); - - return mix( mix(c0, c1, vec4(ffrac.x)), mix(c2, c3, vec4(ffrac.x)), vec4(ffrac.y) ); -} - -void BitBltPS() { - gl_FragData[0] = texture(g_sMemory[CTX], ps2memcoord(gl_TexCoord[0].xy).xy)*g_fOneColor.xxxy; -} - -// used when AA -void BitBltAAPS() { - gl_FragData[0] = BilinearBitBlt(gl_TexCoord[0].xy) * g_fOneColor.xxxy; -} - -void BitBltDepthPS() { - vec4 data; - data = texture(g_sMemory[CTX], ps2memcoord(gl_TexCoord[0].xy)); - gl_FragData[0] = data + g_fZBias.y; - gl_FragDepth = (log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w) * g_fZMin.y + dot(data, g_fBitBltZ) * g_fZMin.x ; -} - -void BitBltDepthMRTPS() { - vec4 data; - data = texture(g_sMemory[CTX], ps2memcoord(gl_TexCoord[0].xy)); - gl_FragData[0] = data + g_fZBias.y; - gl_FragData[1].x = g_fc0.x; - gl_FragDepth = (log(g_fc0.y + dot(data, g_fBitBltZ)) * g_fOneColor.w) * g_fZMin.y + dot(data, g_fBitBltZ) * g_fZMin.x ; -} - -// static const float BlurKernel[9] = { -// 0.027601, -// 0.066213, -// 0.123701, -// 0.179952, -// 0.205065, -// 0.179952, -// 0.123701, -// 0.066213, -// 0.027601 -// }; - -half4 BilinearFloat16(float2 tex0) -{ - return texture(g_sSrcFinal, tex0.xy); -} - -void CRTCTargInterPS() { - float finter = texture(g_sInterlace, gl_TexCoord[1].yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float4 c = BilinearFloat16(gl_TexCoord[0].xy); - c.w = ( g_fc0.w*c.w * g_fOneColor.x + g_fOneColor.y ) * finter; - gl_FragData[0] = c; -} - -void CRTCTargPS() { - float4 c = BilinearFloat16(gl_TexCoord[0].xy); - c.w = g_fc0.w * c.w * g_fOneColor.x + g_fOneColor.y; - gl_FragData[0] = c; -} - -void CRTCInterPS() { - float finter = texture(g_sInterlace, gl_TexCoord[1].yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = trunc(gl_TexCoord[0].xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - gl_FragData[0] = c; -} - -// simpler -void CRTCInterPS_Nearest() { - float finter = texture(g_sInterlace, gl_TexCoord[1].yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - half4 c = texture(g_sMemory[CTX], ps2memcoord(gl_TexCoord[0].xy).xy); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - gl_FragData[0] = c; -} - -void CRTCPS() { - float2 filtcoord = gl_TexCoord[0].xy * g_fInvTexDims.xy+g_fInvTexDims.zw; - half4 c = BilinearBitBlt(filtcoord); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - gl_FragData[0] = c; -} - -// simpler -void CRTCPS_Nearest() { - half4 c = texture(g_sMemory[CTX], ps2memcoord(gl_TexCoord[0].xy).xy); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - gl_FragData[0] = c; -} - -void CRTC24InterPS() { - float finter = texture(g_sInterlace, gl_TexCoord[1].yy).x * g_fOneColor.z + g_fOneColor.w + g_fc0.w; - float2 filtcoord = trunc(gl_TexCoord[0].xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - - half4 c = texture(g_sMemory[CTX], ps2memcoord(filtcoord).xy); - c.w = (c.w * g_fOneColor.x + g_fOneColor.y)*finter; - gl_FragData[0] = c; -} - -void CRTC24PS() { - float2 filtcoord = trunc(gl_TexCoord[0].xy) * g_fInvTexDims.xy + g_fInvTexDims.zw; - half4 c = texture(g_sMemory[CTX], ps2memcoord(filtcoord).xy); - c.w = c.w * g_fOneColor.x + g_fOneColor.y; - gl_FragData[0] = c; -} - -void ZeroPS() { - gl_FragData[0] = g_fOneColor; -} - -void BaseTexturePS() { - gl_FragData[0] = texture(g_sSrcFinal, gl_TexCoord[0].xy) * g_fOneColor; -} - -void Convert16to32PS() { - float4 final; - float2 ffrac = mod ( gl_TexCoord[0].xy + g_fTexDims[CTX].zw, g_fTexOffset[CTX].xy); - float2 tex0 = g_fTexDims[CTX].xy * gl_TexCoord[0].xy - ffrac * g_fc0.yw; - - if (ffrac.x > g_fTexOffset[CTX].x*g_fc0.w) - tex0.x += g_fTexOffset[CTX].x*g_fc0.w; - if (tex0.x >= g_fc0.y) - tex0 += g_fTexOffset[CTX].zw; - - float4 lower = texture(g_sSrcFinal, tex0); - float4 upper = texture(g_sSrcFinal, tex0 + g_fPageOffset[CTX].xy); - - final.zy = texture(g_sConv32to16, lower.zyx).xy + lower.ww*g_fPageOffset[CTX].zw; - final.xw = texture(g_sConv32to16, upper.zyx).xy + upper.ww*g_fPageOffset[CTX].zw; - - gl_FragData[0]= final; -} - -// use when texture is not tiled and converting from 32bit to 16bit -// don't convert on the block level, only on the column level -// so every other 8 pixels, use the upper bits instead of lower -void Convert32to16PS() { - bool upper = false; - float2 ffrac = mod(gl_TexCoord[0].xy + g_fTexDims[CTX].zw, g_fTexOffset[CTX].xy); - float2 tex0 = g_fc0.ww * (gl_TexCoord[0].xy + ffrac); - if( ffrac.x > g_fTexOffset[CTX].z ) { - tex0.x -= g_fTexOffset[CTX].z; - upper = true; - } - if( ffrac.y >= g_fTexOffset[CTX].w ) { - tex0.y -= g_fTexOffset[CTX].w; - tex0.x += g_fc0.w; - } - - half4 color = texture(g_sSrcFinal, tex0*g_fTexDims[CTX].xy)*g_fc0.yyyw; - float2 uv = upper ? color.xw : color.zy; - gl_FragData[0] = texture(g_sConv16to32, uv*g_fPageOffset[CTX].xy+g_fPageOffset[CTX].zw)*g_fTexDims[CTX].xxxy; -} -#endif //FRAGMENT_SHADER - -#ifdef VERTEX_SHADER - -float4 OutPosition(float4 vertex) { - float4 Position; - Position.xy = gl_Vertex.xy * g_fPosXY[CTX].xy + g_fPosXY[CTX].zw; - Position.z = (log(g_fc0.y + dot(g_fZ, gl_SecondaryColor.zyxw)) * g_fZNorm.x + g_fZNorm.y) * g_fZMin.y + dot(g_fZ, gl_SecondaryColor.zyxw) * g_fZMin.x ; - Position.w = g_fc0.y; - return Position; -} - -// just smooth shadering -void RegularVS() { - gl_Position = OutPosition(gl_Vertex); - gl_FrontColor = gl_Color; - DOZWRITE(gl_TexCoord[0] = gl_SecondaryColor * g_fZBias.x + g_fZBias.y; gl_TexCoord[0].w = g_fc0.y;) -} - -// diffuse texture mapping -void TextureVS() { - gl_Position = OutPosition(gl_Vertex); - gl_FrontColor = gl_Color; -#ifdef PERSPECTIVE_CORRECT_TEX - gl_TexCoord[0].xyz = gl_MultiTexCoord0.xyz; -#else - gl_TexCoord[0].xy = gl_MultiTexCoord0.xy/gl_MultiTexCoord0.z; -#endif - DOZWRITE(gl_TexCoord[1] = gl_SecondaryColor * g_fZBias.x + g_fZBias.y; gl_TexCoord[1].w = g_fc0.y;) -} - -void RegularFogVS() { - float4 position = OutPosition(gl_Vertex); - gl_Position = position; - gl_FrontColor = gl_Color; - gl_TexCoord[0].x = position.z * g_fBilinear.w; - DOZWRITE(gl_TexCoord[1] = gl_SecondaryColor * g_fZBias.x + g_fZBias.y; gl_TexCoord[1].w = g_fc0.y;) -} - -void TextureFogVS() { - gl_Position = OutPosition(gl_Vertex); - gl_FrontColor = gl_Color; -#ifdef PERSPECTIVE_CORRECT_TEX - gl_TexCoord[0].xyz = gl_MultiTexCoord0.xyz; -#else - gl_TexCoord[0].xy = gl_MultiTexCoord0.xy / gl_MultiTexCoord0.z; -#endif - gl_TexCoord[1].x = gl_Vertex.z * g_fBilinear.w; - DOZWRITE(gl_TexCoord[2] = gl_SecondaryColor * g_fZBias.x + g_fZBias.y; gl_TexCoord[2].w = g_fc0.y;) -} - -void BitBltVS() { - vec4 position; - position.xy = gl_Vertex.xy * g_fBitBltPos.xy + g_fBitBltPos.zw; - position.zw = g_fc0.xy; - gl_Position = position; - - gl_TexCoord[0].xy = gl_MultiTexCoord0.xy * g_fBitBltTex.xy + g_fBitBltTex.zw; - gl_TexCoord[1].xy = position.xy * g_fBitBltTrans.xy + g_fBitBltTrans.zw; -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/rasterfont.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/rasterfont.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/rasterfont.cpp 2010-12-25 04:38:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/rasterfont.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifdef _WIN32 -#include "Utilities/RedtapeWindows.h" -#endif - -#include -#include - -#include "rasterfont.h" -// globals - -GLubyte rasters[][13] = -{ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36}, - {0x00, 0x00, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xff, 0x66, 0x66, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x7e, 0xff, 0x1b, 0x1f, 0x7e, 0xf8, 0xd8, 0xff, 0x7e, 0x18}, - {0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x6e, 0x30, 0x18, 0x0c, 0x76, 0xdb, 0xd8, 0x70}, - {0x00, 0x00, 0x7f, 0xc6, 0xcf, 0xd8, 0x70, 0x70, 0xd8, 0xcc, 0xcc, 0x6c, 0x38}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x0c, 0x0e}, - {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c}, - {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30}, - {0x00, 0x00, 0x00, 0x00, 0x99, 0x5a, 0x3c, 0xff, 0x3c, 0x5a, 0x99, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03}, - {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xe3, 0xf3, 0xdb, 0xcf, 0xc7, 0xc3, 0x66, 0x3c}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0xe7, 0x7e}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0x07, 0x03, 0x03, 0xe7, 0x7e}, - {0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xcc, 0x6c, 0x3c, 0x1c, 0x0c}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x03, 0x7f, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06}, - {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60}, - {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0c, 0x06, 0x03, 0xc3, 0xc3, 0x7e}, - {0x00, 0x00, 0x3f, 0x60, 0xcf, 0xdb, 0xd3, 0xdd, 0xc3, 0x7e, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18}, - {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e}, - {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06}, - {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3}, - {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c}, - {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe}, - {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff}, - {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3}, - {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3}, - {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff}, - {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c}, - {0x00, 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60}, - {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18}, - {0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x70}, - {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0x7f, 0x03, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x03, 0x03, 0x03, 0x03, 0x03}, - {0x00, 0x00, 0x7f, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x33, 0x1e}, - {0x7e, 0xc3, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00}, - {0x38, 0x6c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x00}, - {0x00, 0x00, 0xc6, 0xcc, 0xf8, 0xf0, 0xd8, 0xcc, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0}, - {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78}, - {0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, - {0xc0, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x03, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xfe, 0x03, 0x03, 0x7e, 0xc0, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x1c, 0x36, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x00}, - {0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0xc0, 0x60, 0x60, 0x30, 0x18, 0x3c, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x0f, 0x18, 0x18, 0x18, 0x38, 0xf0, 0x38, 0x18, 0x18, 0x18, 0x0f}, - {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, - {0x00, 0x00, 0xf0, 0x18, 0x18, 0x18, 0x1c, 0x0f, 0x1c, 0x18, 0x18, 0x18, 0xf0}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8f, 0xf1, 0x60, 0x00, 0x00, 0x00} -}; - -RasterFont::RasterFont() -{ - // set GL modes - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - // create the raster font - fontOffset = glGenLists(128); - - for (int i = 32; i < 127; i++) - { - glNewList(i + fontOffset, GL_COMPILE); - glBitmap(8, 13, 0.0f, 2.0f, 10.0f, 0.0f, rasters[i-32]); - glEndList(); - } -} - -RasterFont::~RasterFont() -{ - glDeleteLists(fontOffset, 128); -} - -void RasterFont::printString(const char *s, double x, double y, double z) -{ - // go to the right spot - glRasterPos3d(x, y, z); - - glPushAttrib(GL_LIST_BIT); - glListBase(fontOffset); - glCallLists(strlen(s), GL_UNSIGNED_BYTE, (GLubyte *) s); - glPopAttrib(); -} - -void RasterFont::printCenteredString(const char *s, double y, int screen_width, double z) -{ - int length = strlen(s); - int x = int(screen_width / 2.0 - (length / 2.0) * char_width); - - printString(s, x, y, z); -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/rasterfont.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/rasterfont.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/rasterfont.h 2010-07-10 08:20:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/rasterfont.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef RasterFont_Header -#define RasterFont_Header - -class RasterFont -{ - - protected: - int fontOffset; - - public: - RasterFont(); - ~RasterFont(void); - static int debug; - - // some useful constants - enum {char_width = 10}; - enum {char_height = 15}; - - // and the happy helper functions - void printString(const char *s, double x, double y, double z = 0.0); - void printCenteredString(const char *s, double y, int screen_width, double z = 0.0); -}; - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/README.txt pcsx2-1.4.0/plugins/zzogl-pg/opengl/README.txt --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/README.txt 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/README.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -ZeroGS OpenGL -------------- -author: zerofrog (@gmail.com) - -ZeroGS heavily uses GPU shaders. All the shaders are written in nVidia's Cg language and can be found in ps2hw.fx. - -'Dev' versions of ZeroGS directly read ps2hw.fx -'Release' versions of ZeroGS read a precompiled version of ps2hw.fx from ps2hw.dat. In order to build ps2hw.dat, compile ZeroGSShaders and execute: - -./ZeroGSShaders ps2hw.fx ps2hw.dat - -For Windows users, once ZeroGSShaders is built, run buildshaders.bat directly. It will update all necessary resource files. -Note that ZeroGSShaders has only been tested in Windows so far, but the Windows ps2hw.dat can be used in linux builds. \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Regs.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Regs.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Regs.cpp 2014-04-18 21:39:12.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Regs.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1160 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "Regs.h" -#include "PS2Etypes.h" - -#include "targets.h" -#include "ZZoglVB.h" -#include "ZZoglDrawing.h" - - -#ifdef _MSC_VER -#pragma warning(disable:4244) -#endif - -GIFRegHandler g_GIFPackedRegHandlers[16]; -GIFRegHandler g_GIFRegHandlers[256]; -GIFRegHandler g_GIFTempRegHandlers[16] = {0}; - -// values for keeping track of changes -u32 s_uTex1Data[2][2] = {{0, }}; -u32 s_uClampData[2] = {0, }; - -//u32 results[65535] = {0, }; - -// Note that not all the registers are currently handled, even if they write values out. -// For reference, I'm starting a list of unhandled flags here. I'm sure I missed some, -// so feel free to add to this, or remove ones that are handled that I missed. -// Cases where these values are set would be useful, too. -// -// In GIFRegHandlerFOG, I don't see gs.vertexregs.f being used anywhere afterwards. -// GIFRegHandlerTEX1 doesn't look like anything other then mmag and mmin are handled. -// This includes: -// lcm - the lod (level of detail) calculation method. If 0, it's (log2(1/|Q|)< -void __gifCall GIFPackedRegHandlerTEX0(const u32* data) { GIFRegHandlerTEX0(data); } - -template -void __gifCall GIFPackedRegHandlerCLAMP(const u32* data) { GIFRegHandlerCLAMP(data); } - -void __gifCall GIFPackedRegHandlerXYZF3(const u32* data) { GIFRegHandlerXYZF3(data); } -void __gifCall GIFPackedRegHandlerXYZ3(const u32* data) { GIFRegHandlerXYZ3(data); } - -void __gifCall GIFPackedRegHandlerRGBA(const u32* data) -{ - FUNCLOG - GIFPackedRGBA* r = (GIFPackedRGBA*)(data); - gs.rgba = (r->R | (r->G << 8) | (r->B << 16) | (r->A << 24)); - gs.vertexregs.rgba = gs.rgba; - gs.vertexregs.q = gs.q; -} - -void __gifCall GIFPackedRegHandlerSTQ(const u32* data) -{ - FUNCLOG -// GIFPackedSTQ* r = (GIFPackedSTQ*)(data); -// gs.vertexregs.s = r->S; -// gs.vertexregs.t = r->T; -// gs.q = r->Q; - // Despite this code generating a warning, it's correct. float -> float reduction. S and Y are missed mantissas. - *(u32*)&gs.vertexregs.s = data[0] & 0xffffff00; - *(u32*)&gs.vertexregs.t = data[1] & 0xffffff00; - *(u32*)&gs.q = data[2]; -} - -void __gifCall GIFPackedRegHandlerUV(const u32* data) -{ - FUNCLOG - GIFPackedUV* r = (GIFPackedUV*)(data); - - gs.vertexregs.u = r->U; - gs.vertexregs.v = r->V; -} - -void __gifCall GIFPackedRegHandlerXYZF2(const u32* data) -{ - FUNCLOG - GIFPackedXYZF2* r = (GIFPackedXYZF2*)(data); - gs.add_vertex(r->X, r->Y,r->Z, r->F); - - ZZKick->KickVertex(!!(r->ADC)); -} - -void __gifCall GIFPackedRegHandlerXYZ2(const u32* data) -{ - FUNCLOG - GIFPackedXYZ2* r = (GIFPackedXYZ2*)(data); - gs.add_vertex(r->X, r->Y,r->Z); - - ZZKick->KickVertex(!!(r->ADC)); -} - -void __gifCall GIFPackedRegHandlerFOG(const u32* data) -{ - FUNCLOG - GIFPackedFOG* r = (GIFPackedFOG*)(data); - gs.vertexregs.f = r->F; -// gs.vertexregs.f = (data[3] & 0xff0) >> 4; - if (gs.vertexregs.f != 0) REG_LOG("GIFPackedRegHandlerFOG == %d", gs.vertexregs.f); -} - -void __gifCall GIFPackedRegHandlerA_D(const u32* data) -{ - FUNCLOG -// GIFPackedA_D* r = (GIFPackedA_D*)(data); -// -// g_GIFRegHandlers[r->ADDR](data); - - if ((data[2] & 0xff) < 100) - g_GIFRegHandlers[data[2] & 0xff](data); - else - GIFRegHandlerNull(data); -} - -void __gifCall GIFPackedRegHandlerNOP(const u32* data) -{ - FUNCLOG -} - -void __gifCall GIFRegHandlerNull(const u32* data) -{ - FUNCLOG -#ifdef _DEBUG - - if ((((uptr)&data[2])&0xffff) == 0) return; - - // 0x7f happens on a lot of games - if (data[2] != 0x7f && (data[0] || data[1])) - { - ZZLog::Debug_Log("Unexpected reg handler %x %x %x.", data[0], data[1], data[2]); - } - -#endif -} - -void __gifCall GIFRegHandlerPRIM(const u32 *data) -{ - FUNCLOG - GIFRegPRIM* r = (GIFRegPRIM*)(data); - - //if (data[0] & ~0x3ff) - //{ - //ZZLog::Warn_Log("Warning: unknown bits in prim %8.8lx_%8.8lx", data[1], data[0]); - //} - - gs.primC = 0; - prim->prim = r->PRIM; - gs._prim[0].prim = r->PRIM; - gs._prim[1].prim = r->PRIM; - gs._prim[1]._val = (data[0] >> 3) & 0xff; // Setting the next 8 flags after prim at once. - - gs.new_tri_fan = !(r->PRIM ^ PRIM_TRIANGLE_FAN); - ZZKick->DirtyValidPrevPrim(); - - Prim(); -} - -void __gifCall GIFRegHandlerRGBAQ(const u32* data) -{ - FUNCLOG -// GIFRegRGBAQ* r = (GIFRegRGBAQ*)(data); -// gs.rgba = (r->R | (r->G << 8) | (r->B << 16) | (r->A << 24)); -// gs.vertexregs.rgba = gs.rgba; -// gs.vertexregs.q = r->Q; - gs.rgba = data[0]; - gs.vertexregs.rgba = data[0]; - *(u32*)&gs.vertexregs.q = data[1]; -} - -void __gifCall GIFRegHandlerST(const u32* data) -{ - FUNCLOG -// GIFRegST* r = (GIFRegST*)(data); -// gs.vertexregs.s = r->S; -// gs.vertexregs.t = r->T; - *(u32*)&gs.vertexregs.s = data[0] & 0xffffff00; - *(u32*)&gs.vertexregs.t = data[1] & 0xffffff00; - //*(u32*)&gs.q = data[2]; -} - -void __gifCall GIFRegHandlerUV(const u32* data) -{ - // Baroque breaks if u&v are 16 bits instead of 14. - FUNCLOG -// gs.vertexregs.u = (data[0]) & 0x3fff; -// gs.vertexregs.v = (data[0] >> 16) & 0x3fff; - GIFRegUV* r = (GIFRegUV*)(data); - gs.vertexregs.u = r->U; - gs.vertexregs.v = r->V; -} - -void __gifCall GIFRegHandlerXYZF2(const u32* data) -{ - FUNCLOG - GIFRegXYZF* r = (GIFRegXYZF*)(data); - gs.add_vertex(r->X, r->Y,r->Z, r->F); - - ZZKick->KickVertex(false); -} - -void __gifCall GIFRegHandlerXYZ2(const u32* data) -{ - FUNCLOG - GIFRegXYZ* r = (GIFRegXYZ*)(data); - gs.add_vertex(r->X, r->Y,r->Z); - - ZZKick->KickVertex(false); -} - -template -void __gifCall GIFRegHandlerTEX0(const u32* data) -{ - FUNCLOG - - if (!NoHighlights(ctxt)) return; - - u32 psm = ZZOglGet_psm_TexBitsFix(data[0]); - - if (m_Blocks[psm].bpp == 0) - { - // kh and others - return; - } - - vb[ctxt].uNextTex0Data[0] = data[0]; - vb[ctxt].uNextTex0Data[1] = data[1]; - vb[ctxt].bNeedTexCheck = 1; - - // don't update unless necessary - - if (PSMT_ISCLUT(psm)) - { - if (CheckChangeInClut(data[1], psm)) - { - // loading clut, so flush whole texture - vb[ctxt].FlushTexData(); - } - - // check if csa is the same!! (ffx bisaid island, grass) - else if ((data[1] & CPSM_CSA_BITMASK) != (vb[ctxt].uCurTex0Data[1] & CPSM_CSA_BITMASK)) - { - Flush(ctxt); // flush any previous entries - } - } -} - -template -void __gifCall GIFRegHandlerCLAMP(const u32* data) -{ - FUNCLOG - - if (!NoHighlights(ctxt)) return; - - clampInfo& clamp = vb[ctxt].clamp; - GIFRegCLAMP* r = (GIFRegCLAMP*)(data); - - if ((s_uClampData[ctxt] != data[0]) || (((clamp.minv >> 8) | (clamp.maxv << 2)) != (data[1]&0x0fff))) - { - Flush(ctxt); - s_uClampData[ctxt] = data[0]; - - clamp.wms = r->WMS; - clamp.wmt = r->WMT; - clamp.minu = r->MINU; - clamp.maxu = r->MAXU; - clamp.minv = r->MINV; - clamp.maxv = r->MAXV; - - vb[ctxt].bTexConstsSync = false; - } -} - -void __gifCall GIFRegHandlerFOG(const u32* data) -{ - FUNCLOG - //gs.gsvertex[gs.primIndex].f = (data[1] >> 24); // shift to upper bits - GIFRegFOG* r = (GIFRegFOG*)(data); - gs.vertexregs.f = r->F; - if (gs.vertexregs.f != 0) REG_LOG("GIFPackedRegHandlerFOG == %d", gs.vertexregs.f); - -} - -void __gifCall GIFRegHandlerXYZF3(const u32* data) -{ - FUNCLOG - GIFRegXYZF* r = (GIFRegXYZF*)(data); - gs.add_vertex(r->X, r->Y,r->Z, r->F); - - ZZKick->KickVertex(true); -} - -void __gifCall GIFRegHandlerXYZ3(const u32* data) -{ - FUNCLOG - GIFRegXYZ* r = (GIFRegXYZ*)(data); - gs.add_vertex(r->X, r->Y,r->Z); - - ZZKick->KickVertex(true); -} - -void __gifCall GIFRegHandlerNOP(const u32* data) -{ - FUNCLOG -} - -template -void __gifCall GIFRegHandlerTEX1(const u32* data) -{ - FUNCLOG - - if (!NoHighlights(ctxt)) return; - - GIFRegTEX1* r = (GIFRegTEX1*)(data); - tex1Info& tex1 = vb[ctxt].tex1; - - if (conf.bilinear == 1 && (tex1.mmag != ((data[0] >> 5) & 0x1) || tex1.mmin != ((data[0] >> 6) & 0x7))) - { - Flush(ctxt); - vb[ctxt].bVarsTexSync = false; - } - - tex1.lcm = r->LCM; - - tex1.mxl = r->MXL; - tex1.mmag = r->MMAG; - tex1.mmin = r->MMIN; - tex1.mtba = r->MTBA; - tex1.l = r->L; - tex1.k = r->K; - -#ifdef SPAM_UNUSED_REGISTERS - REG_LOG("Lcm = %d, l = %d, k = %d", tex1.lcm, tex1.l, tex1.k); - if (tex1.mxl != 0) REG_LOG("MIPMAP level set to %d, which is unsupported."); -#endif -} - -template -void __gifCall GIFRegHandlerTEX2(const u32* data) -{ - FUNCLOG - - tex0Info& tex0 = vb[ctxt].tex0; - - vb[ctxt].FlushTexData(); - - u32 psm = ZZOglGet_psm_TexBitsFix(data[0]); - - u32* s_uTex0Data = vb[ctxt].uCurTex0Data; - - // don't update unless necessary -// if( ZZOglGet_psm_TexBitsFix(*s_uTex0Data) == ZZOglGet_psm_TexBitsFix(data[0]) ) { // psm is the same - if (ZZOglAllExceptClutIsSame(s_uTex0Data, data)) - { - if (!PSMT_ISCLUT(psm)) return; - - // have to write the CLUT again if changed - if (ZZOglClutMinusCLDunchanged(s_uTex0Data, data)) - { - tex0.cld = ZZOglGet_cld_TexBits(data[1]); - - if (tex0.cld != 0) - { - texClutWrite(ctxt); - // invalidate to make sure target didn't change! - vb[ctxt].bVarsTexSync = false; - } - - return; - } - } - - Flush(ctxt); - - vb[ctxt].bVarsTexSync = false; - vb[ctxt].bTexConstsSync = false; - - s_uTex0Data[0] = (s_uTex0Data[0] & ~0x03f00000) | (psm << 20); - s_uTex0Data[1] = (s_uTex0Data[1] & 0x1f) | (data[1] & ~0x1f); - - tex0.psm = ZZOglGet_psm_TexBitsFix(data[0]); - - if (PSMT_ISCLUT(tex0.psm)) CluttingForFlushedTex(&tex0, data[1], ctxt); -} - -template -void __gifCall GIFRegHandlerXYOFFSET(const u32* data) -{ - FUNCLOG - GIFRegXYOFFSET* r = (GIFRegXYOFFSET*)(data); - vb[ctxt].offset.x = r->OFX; - vb[ctxt].offset.y = r->OFY; - -// if( !conf.interlace ) { -// vb[1].offset.x &= ~15; -// vb[1].offset.y &= ~15; -// } -} - -void __gifCall GIFRegHandlerPRMODECONT(const u32* data) -{ - FUNCLOG - // Turns all the text into colored blocks on the initial Mana Khemia dialog if not run. - GIFRegPRMODECONT* r = (GIFRegPRMODECONT*)(data); -// gs.prac = data[0] & 0x1; - gs.prac = r->AC; - prim = &gs._prim[gs.prac]; - - Prim(); -} - -void __gifCall GIFRegHandlerPRMODE(const u32* data) -{ - FUNCLOG - gs._prim[0]._val = (data[0] >> 3) & 0xff; - - if (gs.prac == 0) Prim(); -} - -void __gifCall GIFRegHandlerTEXCLUT(const u32* data) -{ - FUNCLOG - // Affects background coloration of initial Mana Khemia dialog. - GIFRegTEXCLUT* r = (GIFRegTEXCLUT*)(data); - - vb[0].FlushTexData(); - vb[1].FlushTexData(); - - //Fixme - gs.clut.cbw = r->CBW << 6; - gs.clut.cou = r->COU << 4; - gs.clut.cov = r->COV; -} - -void __gifCall GIFRegHandlerSCANMSK(const u32* data) -{ - FUNCLOG - GIFRegSCANMSK* r = (GIFRegSCANMSK*)(data); - - gs.smask = r->MSK; - REG_LOG("Scanmsk == %d", gs.smask); -} - -template -void __gifCall GIFRegHandlerMIPTBP1(const u32* data) -{ - FUNCLOG - GIFRegMIPTBP1* r = (GIFRegMIPTBP1*)(data); - - miptbpInfo& miptbp0 = vb[ctxt].miptbp0; - miptbp0.tbp[0] = r->TBP1; - miptbp0.tbw[0] = r->TBW1; - miptbp0.tbp[1] = r->TBP2; - miptbp0.tbw[1] = r->TBW2; - miptbp0.tbp[2] = r->TBP3; - miptbp0.tbw[2] = r->TBW3; - -#ifdef SPAM_UNUSED_REGISTERS - if ((miptbp0.tbp[0] != 0) || (miptbp0.tbp[1] != 0) || (miptbp0.tbp[2] != 0)) - { - REG_LOG("MIPTBP1: 0:%d(%d) 1:%d(%d) 2:%d(%d).", \ - miptbp0.tbp[0], miptbp0.tbw[0], miptbp0.tbp[1], miptbp0.tbw[1], miptbp0.tbp[2], miptbp0.tbw[2]); - } -#endif -} - -template -void __gifCall GIFRegHandlerMIPTBP2(const u32* data) -{ - FUNCLOG - GIFRegMIPTBP2* r = (GIFRegMIPTBP2*)(data); - - miptbpInfo& miptbp1 = vb[ctxt].miptbp1; - miptbp1.tbp[0] = r->TBP4; - miptbp1.tbw[0] = r->TBW4; - miptbp1.tbp[1] = r->TBP5; - miptbp1.tbw[1] = r->TBW5; - miptbp1.tbp[2] = r->TBP6; - miptbp1.tbw[2] = r->TBW6; - -#ifdef SPAM_UNUSED_REGISTERS - if ((miptbp1.tbp[0] != 0) || (miptbp1.tbp[1] != 0) || (miptbp1.tbp[2] != 0)) - { - REG_LOG("MIPTBP2: 0:%d(%d) 1:%d(%d) 2:%d(%d).", \ - miptbp1.tbp[0], miptbp1.tbw[0], miptbp1.tbp[1], miptbp1.tbw[1], miptbp1.tbp[2], miptbp1.tbw[2]); - } -#endif -} - -void __gifCall GIFRegHandlerTEXA(const u32* data) -{ - FUNCLOG - // Background of initial Mana Khemia dialog. - GIFRegTEXA* r = (GIFRegTEXA*)(data); - - if ((r->AEM != gs.texa.aem) || (r->TA0 != gs.texa.ta[0]) || (r->TA1 != gs.texa.ta[1])) - { - FlushBoth(); - - vb[0].bTexConstsSync = false; - vb[1].bTexConstsSync = false; - } - - gs.texa.aem = r->AEM; - gs.texa.ta[0] = r->TA0; - gs.texa.ta[1] = r->TA1; -} - -void __gifCall GIFRegHandlerFOGCOL(const u32* data) -{ - FUNCLOG - GIFRegFOGCOL* r = (GIFRegFOGCOL*)(data); - SetFogColor(r); - gs.fogcol = r->ai32[0]; -} - -void __gifCall GIFRegHandlerTEXFLUSH(const u32* data) -{ - FUNCLOG - // Not actually handled by GSDX. - SetTexFlush(); -} - -template -void __gifCall GIFRegHandlerSCISSOR(const u32* data) -{ - FUNCLOG - GIFRegSCISSOR* r = (GIFRegSCISSOR*)(data); - - Rect2& scissor = vb[ctxt].scissor; - Rect2 newscissor; - - newscissor.x0 = r->SCAX0 << 3; - newscissor.x1 = r->SCAX1 << 3; - newscissor.y0 = r->SCAY0 << 3; - newscissor.y1 = r->SCAY1 << 3; - - if (newscissor.x1 != scissor.x1 || newscissor.y1 != scissor.y1 || - newscissor.x0 != scissor.x0 || newscissor.y0 != scissor.y0) - { - Flush(ctxt); - scissor = newscissor; - - // flush everything - vb[ctxt].bNeedFrameCheck = 1; - } -} - -template -void __gifCall GIFRegHandlerALPHA(const u32* data) -{ - FUNCLOG - alphaInfo newalpha; -// newalpha.a = r->A; -// newalpha.b = r->B; -// newalpha.c = r->C; -// newalpha.d = r->D; -// newalpha.fix = r->FIX; - - newalpha.abcd = *(u8*)data; - newalpha.fix = *(u8*)(data + 1); - - if (*(u16*)&newalpha != *(u16*)&vb[ctxt].alpha) - { - Flush(ctxt); - - if (newalpha.a == 3) newalpha.a = 0; - if (newalpha.b == 3) newalpha.b = 0; - if (newalpha.c == 3) newalpha.c = 0; - if (newalpha.d == 3) newalpha.d = 0; - - *(u16*)&vb[ctxt].alpha = *(u16*) & newalpha; -// vb[i].alpha = newalpha; - } -} - -// DIMX & DTHE are both for dithering, and not currently implemented. -void __gifCall GIFRegHandlerDIMX(const u32* data) -{ - FUNCLOG - GIFRegDIMX* r = (GIFRegDIMX*)(data); - - gs.dimx.i64 = r->i64; -} - -void __gifCall GIFRegHandlerDTHE(const u32* data) -{ - FUNCLOG - GIFRegDTHE* r = (GIFRegDTHE*)(data); - - gs.dthe = r->DTHE; - if (gs.dthe != 0) REG_LOG("Dithering set. (but not implemented.)"); -} - -void __gifCall GIFRegHandlerCOLCLAMP(const u32* data) -{ - FUNCLOG - GIFRegCOLCLAMP* r = (GIFRegCOLCLAMP*)(data); - - gs.colclamp = r->CLAMP; - - if (gs.colclamp == 0) - REG_LOG("COLCLAMP == MASK"); - else - REG_LOG("COLCLAMP == CLAMP"); -} - -template -void __gifCall GIFRegHandlerTEST(const u32* data) -{ - FUNCLOG -// GIFRegTEST* r = (GIFRegTEST*)(data); - - pixTest* test = &vb[ctxt].test; - - //if (test->_val != r->ai32[0]) - if ((*(u32*)test & 0x0007ffff) != (data[0] & 0x0007ffff)) - { - Flush(ctxt); - - *(u32*)test = data[0]; - //test->_val = r->ai32[0]; - } - -// test.ate = (data[0] ) & 0x1; -// test.atst = (data[0] >> 1) & 0x7; -// test.aref = (data[0] >> 4) & 0xff; -// test.afail = (data[0] >> 12) & 0x3; -// test.date = (data[0] >> 14) & 0x1; -// test.datm = (data[0] >> 15) & 0x1; -// test.zte = (data[0] >> 16) & 0x1; -// test.ztst = (data[0] >> 17) & 0x3; -} - -void __gifCall GIFRegHandlerPABE(const u32* data) -{ - FUNCLOG - GIFRegPABE* r = (GIFRegPABE*)(data); - //SetAlphaChanged(0, GPUREG_PABE); - //SetAlphaChanged(1, GPUREG_PABE); - FlushBoth(); - - gs.pabe = r->PABE; -} - -template -void __gifCall GIFRegHandlerFBA(const u32* data) -{ - FUNCLOG - GIFRegFBA* r = (GIFRegFBA*)(data); - - FlushBoth(); - - vb[ctxt].fba.fba = r->FBA; -} - -/* -template -void __gifCall GIFRegHandlerFRAME(const u32* data) -{ - FUNCLOG - // Affects opening dialogs, movie, and menu on Mana Khemia. - - GIFRegFRAME* r = (GIFRegFRAME*)(data); - frameInfo& gsfb = vb[i].gsfb; - - int fbw = r->FBW * 64; - int fbp = r->FBP * 32; - int fbh = 0; - - if (gs.dthe != 0) - { - // Dither here. - //ZZLog::Error_Log("frameWrite: Dither!"); - } - - if ((gsfb.fbp == fbp) && - (gsfb.fbw == fbw) && - (gsfb.psm == r->PSM) && - (gsfb.fbm == ZZOglGet_fbm_FrameBitsFix(data[0], data[1]))) - { - return; - } - - FlushBoth(); - if (r->FBW > 0) fbh = ZZOgl_fbh_Calc(r->FBP, r->FBW, r->PSM); - - gsfb.fbp = fbp; - gsfb.fbw = fbw; - gsfb.psm = r->PSM; - gsfb.fbh = fbh; - gsfb.fbm = ZZOglGet_fbm_FrameBitsFix(data[0], data[1]); - - - vb[i].bNeedFrameCheck = 1; - ZZLog::Greg_Log("FRAME_%d", i); -}*/ - -template -void __gifCall GIFRegHandlerFRAME(const u32* data) -{ - FUNCLOG - - frameInfo& gsfb = vb[ctxt].gsfb; - - if ((gsfb.fbp == ZZOglGet_fbp_FrameBitsMult(data[0])) && - (gsfb.fbw == ZZOglGet_fbw_FrameBitsMult(data[0])) && - (gsfb.psm == ZZOglGet_psm_FrameBits(data[0])) && - (gsfb.fbm == ZZOglGet_fbm_FrameBits(data[0]))) - { - return; - } - - FlushBoth(); - - gsfb.fbp = ZZOglGet_fbp_FrameBitsMult(data[0]); - gsfb.fbw = ZZOglGet_fbw_FrameBitsMult(data[0]); - gsfb.psm = ZZOglGet_psm_FrameBits(data[0]); - gsfb.fbm = ZZOglGet_fbm_FrameBitsFix(data[0], data[1]); - gsfb.fbh = ZZOglGet_fbh_FrameBitsCalc(data[0]); -// gsfb.fbhCalc = gsfb.fbh; - - vb[ctxt].bNeedFrameCheck = 1; -} - -/* -template -void __gifCall GIFRegHandlerZBUF(const u32* data) -{ - FUNCLOG - // I'll wait a bit on this one. - GIFRegZBUF* r = (GIFRegZBUF*)(data); - ZZLog::Greg_Log("ZBUF_1"); - - zbufInfo& zbuf = vb[i].zbuf; - int psm = (0x30 | r->PSM); - int zbp = r->ZBP * 32; - - if (zbuf.zbp == zbp && - zbuf.psm == psm && - zbuf.zmsk == r->ZMSK) - { - return; - } - - // error detection - if (m_Blocks[psm].bpp == 0) return; - - FlushBoth(); - - zbuf.zbp = zbp; - zbuf.psm = psm; - zbuf.zmsk = r->ZMSK; - - vb[i].zprimmask = 0xffffffff; - - if (zbuf.psm > 0x31) vb[i].zprimmask = 0xffff; - - vb[i].bNeedZCheck = 1; -}*/ -template -void __gifCall GIFRegHandlerZBUF(const u32* data) -{ - FUNCLOG - zbufInfo& zbuf = vb[ctxt].zbuf; - - int psm = (0x30 | ((data[0] >> 24) & 0xf)); - - if (zbuf.zbp == (data[0] & 0x1ff) * 32 && - zbuf.psm == psm && - zbuf.zmsk == (data[1] & 0x1)) - { - return; - } - - // error detection - if (m_Blocks[psm].bpp == 0) return; - - FlushBoth(); - - zbuf.zbp = (data[0] & 0x1ff) * 32; - zbuf.psm = 0x30 | ((data[0] >> 24) & 0xf); - zbuf.zmsk = data[1] & 0x1; - - vb[ctxt].bNeedZCheck = 1; - vb[ctxt].zprimmask = 0xffffffff; - - if (zbuf.psm > 0x31) vb[ctxt].zprimmask = 0xffff; -} - -void __gifCall GIFRegHandlerBITBLTBUF(const u32* data) -{ - FUNCLOG - GIFRegBITBLTBUF* r = (GIFRegBITBLTBUF*)(data); - - gs.srcbufnew.bp = r->SBP; - gs.srcbufnew.bw = r->SBW << 6; - gs.srcbufnew.psm = r->SPSM; - gs.dstbufnew.bp = r->DBP; - gs.dstbufnew.bw = r->DBW << 6; - gs.dstbufnew.psm = r->DPSM; - - if (gs.dstbufnew.bw == 0) gs.dstbufnew.bw = 64; - // GSdx does this: - - /*if((gs.srcbufnew.bw & 1) && (gs.srcbufnew.psm == PSM_PSMT8 || gs.srcbufnew.psm == PSM_PSMT4)) - { - gs.srcbufnew.bw &= ~1; - } - - if((gs.dstbufnew.bw & 1) && (gs.dstbufnew.psm == PSM_PSMT8 || gs.dstbufnew.psm == PSM_PSMT4)) - { - gs.dstbufnew.bw &= ~1; // namcoXcapcom: 5, 11, refered to as 4, 10 in TEX0.TBW later - }*/ -} - -void __gifCall GIFRegHandlerTRXPOS(const u32* data) -{ - FUNCLOG - GIFRegTRXPOS* r = (GIFRegTRXPOS*)(data); - - gs.trxposnew.sx = r->SSAX; - gs.trxposnew.sy = r->SSAY; - gs.trxposnew.dx = r->DSAX; - gs.trxposnew.dy = r->DSAY; - gs.trxposnew.dirx = r->DIRX; - gs.trxposnew.diry = r->DIRY; -} - -void __gifCall GIFRegHandlerTRXREG(const u32* data) -{ - FUNCLOG - GIFRegTRXREG* r = (GIFRegTRXREG*)(data); - gs.imageTemp.w = r->RRW; - gs.imageTemp.h = r->RRH; -} - -void __gifCall GIFRegHandlerTRXDIR(const u32* data) -{ - FUNCLOG - GIFRegTRXDIR* r = (GIFRegTRXDIR*)(data); - - gs.srcbuf = gs.srcbufnew; - gs.dstbuf = gs.dstbufnew; - - gs.imageNew.w = gs.imageTemp.w; - gs.imageNew.h = gs.imageTemp.h; - - gs.trxpos = gs.trxposnew; - gs.imageTransfer = r->XDIR; - gs.transferring = true; - - if (gs.imageNew.w > 0 && gs.imageNew.h > 0) - { - switch (gs.imageTransfer) - { - case XFER_HOST_TO_LOCAL: // host->loc - InitTransferHostLocal(); - break; - - case XFER_LOCAL_TO_HOST: // loc->host - InitTransferLocalHost(); - break; - - case XFER_LOCAL_TO_LOCAL: - TransferLocalLocal(); - break; - - case XFER_DEACTIVATED: - ZZLog::WriteLn("Image Transfer = 3?"); - gs.transferring = false; - break; - - default: - assert(0); - } - } - else - { -#if defined(ZEROGS_DEVBUILD) - //ZZLog::Warn_Log("Dummy transfer."); -#endif - gs.transferring = false; - } -} - -void __gifCall GIFRegHandlerHWREG(const u32* data) -{ - FUNCLOG - - if (gs.transferring && gs.imageTransfer == XFER_HOST_TO_LOCAL) - { - TransferHostLocal(data, 2); - } - else - { -#if defined(ZEROGS_DEVBUILD) - ZZLog::Error_Log("ZeroGS: HWREG!? %8.8x_%8.8x", data[0], data[1]); - //assert(0); -#endif - } -} - -extern int g_GSMultiThreaded; - -void __gifCall GIFRegHandlerSIGNAL(const u32* data) -{ - FUNCLOG - - if (!g_GSMultiThreaded) - { - SIGLBLID->SIGID = (SIGLBLID->SIGID & ~data[1]) | (data[0] & data[1]); - - if (gs.CSRw & 0x1) - { - CSR->SIGNAL = 1; - } - - if (!IMR->SIGMSK && GSirq) GSirq(); - } -} - -void __gifCall GIFRegHandlerFINISH(const u32* data) -{ - FUNCLOG - - if (!g_GSMultiThreaded) - { - if (gs.CSRw & 0x2) CSR->FINISH = 1; - - if (!IMR->FINISHMSK && GSirq) GSirq(); - } -} - -void __gifCall GIFRegHandlerLABEL(const u32* data) -{ - FUNCLOG - - if (!g_GSMultiThreaded) - { - SIGLBLID->LBLID = (SIGLBLID->LBLID & ~data[1]) | (data[0] & data[1]); - } -} - -void SetMultithreaded() -{ - // Some older versions of PCSX2 didn't properly set the irq callback to NULL - // in multithreaded mode (possibly because ZeroGS itself would assert in such - // cases), and didn't bind them to a dummy callback either. PCSX2 handles all - // IRQs internally when multithreaded anyway -- so let's ignore them here: - - if (g_GSMultiThreaded) - { - g_GIFRegHandlers[GIF_A_D_REG_SIGNAL] = &GIFRegHandlerNull; - g_GIFRegHandlers[GIF_A_D_REG_FINISH] = &GIFRegHandlerNull; - g_GIFRegHandlers[GIF_A_D_REG_LABEL] = &GIFRegHandlerNull; - } - else - { - g_GIFRegHandlers[GIF_A_D_REG_SIGNAL] = &GIFRegHandlerSIGNAL; - g_GIFRegHandlers[GIF_A_D_REG_FINISH] = &GIFRegHandlerFINISH; - g_GIFRegHandlers[GIF_A_D_REG_LABEL] = &GIFRegHandlerLABEL; - } -} - -void ResetRegs() -{ - for (int i = 0; i < 16; i++) - { - g_GIFPackedRegHandlers[i] = &GIFPackedRegHandlerNull; - } - - g_GIFPackedRegHandlers[GIF_REG_PRIM] = &GIFPackedRegHandlerPRIM; - g_GIFPackedRegHandlers[GIF_REG_RGBA] = &GIFPackedRegHandlerRGBA; - g_GIFPackedRegHandlers[GIF_REG_STQ] = &GIFPackedRegHandlerSTQ; - g_GIFPackedRegHandlers[GIF_REG_UV] = &GIFPackedRegHandlerUV; - g_GIFPackedRegHandlers[GIF_REG_XYZF2] = &GIFPackedRegHandlerXYZF2; - g_GIFPackedRegHandlers[GIF_REG_XYZ2] = &GIFPackedRegHandlerXYZ2; - g_GIFPackedRegHandlers[GIF_REG_TEX0_1] = &GIFPackedRegHandlerTEX0<0>; - g_GIFPackedRegHandlers[GIF_REG_TEX0_2] = &GIFPackedRegHandlerTEX0<1>; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_1] = &GIFPackedRegHandlerCLAMP<0>; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_2] = &GIFPackedRegHandlerCLAMP<1>; - g_GIFPackedRegHandlers[GIF_REG_FOG] = &GIFPackedRegHandlerFOG; - g_GIFPackedRegHandlers[GIF_REG_XYZF3] = &GIFPackedRegHandlerXYZF3; - g_GIFPackedRegHandlers[GIF_REG_XYZ3] = &GIFPackedRegHandlerXYZ3; - g_GIFPackedRegHandlers[GIF_REG_A_D] = &GIFPackedRegHandlerA_D; - g_GIFPackedRegHandlers[GIF_REG_NOP] = &GIFPackedRegHandlerNOP; - - for (int i = 0; i < 256; i++) - { - g_GIFRegHandlers[i] = &GIFPackedRegHandlerNull; - } - - g_GIFRegHandlers[GIF_A_D_REG_PRIM] = &GIFRegHandlerPRIM; - g_GIFRegHandlers[GIF_A_D_REG_RGBAQ] = &GIFRegHandlerRGBAQ; - g_GIFRegHandlers[GIF_A_D_REG_ST] = &GIFRegHandlerST; - g_GIFRegHandlers[GIF_A_D_REG_UV] = &GIFRegHandlerUV; - g_GIFRegHandlers[GIF_A_D_REG_XYZF2] = &GIFRegHandlerXYZF2; - g_GIFRegHandlers[GIF_A_D_REG_XYZ2] = &GIFRegHandlerXYZ2; - g_GIFRegHandlers[GIF_A_D_REG_TEX0_1] = &GIFRegHandlerTEX0<0>; - g_GIFRegHandlers[GIF_A_D_REG_TEX0_2] = &GIFRegHandlerTEX0<1>; - g_GIFRegHandlers[GIF_A_D_REG_CLAMP_1] = &GIFRegHandlerCLAMP<0>; - g_GIFRegHandlers[GIF_A_D_REG_CLAMP_2] = &GIFRegHandlerCLAMP<1>; - g_GIFRegHandlers[GIF_A_D_REG_FOG] = &GIFRegHandlerFOG; - g_GIFRegHandlers[GIF_A_D_REG_XYZF3] = &GIFRegHandlerXYZF3; - g_GIFRegHandlers[GIF_A_D_REG_XYZ3] = &GIFRegHandlerXYZ3; - g_GIFRegHandlers[GIF_A_D_REG_NOP] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_TEX1_1] = &GIFRegHandlerTEX1<0>; - g_GIFRegHandlers[GIF_A_D_REG_TEX1_2] = &GIFRegHandlerTEX1<1>; - g_GIFRegHandlers[GIF_A_D_REG_TEX2_1] = &GIFRegHandlerTEX2<0>; - g_GIFRegHandlers[GIF_A_D_REG_TEX2_2] = &GIFRegHandlerTEX2<1>; - g_GIFRegHandlers[GIF_A_D_REG_XYOFFSET_1] = &GIFRegHandlerXYOFFSET<0>; - g_GIFRegHandlers[GIF_A_D_REG_XYOFFSET_2] = &GIFRegHandlerXYOFFSET<1>; - g_GIFRegHandlers[GIF_A_D_REG_PRMODECONT] = &GIFRegHandlerPRMODECONT; - g_GIFRegHandlers[GIF_A_D_REG_PRMODE] = &GIFRegHandlerPRMODE; - g_GIFRegHandlers[GIF_A_D_REG_TEXCLUT] = &GIFRegHandlerTEXCLUT; - g_GIFRegHandlers[GIF_A_D_REG_SCANMSK] = &GIFRegHandlerSCANMSK; - g_GIFRegHandlers[GIF_A_D_REG_MIPTBP1_1] = &GIFRegHandlerMIPTBP1<0>; - g_GIFRegHandlers[GIF_A_D_REG_MIPTBP1_2] = &GIFRegHandlerMIPTBP1<1>; - g_GIFRegHandlers[GIF_A_D_REG_MIPTBP2_1] = &GIFRegHandlerMIPTBP2<0>; - g_GIFRegHandlers[GIF_A_D_REG_MIPTBP2_2] = &GIFRegHandlerMIPTBP2<1>; - g_GIFRegHandlers[GIF_A_D_REG_TEXA] = &GIFRegHandlerTEXA; - g_GIFRegHandlers[GIF_A_D_REG_FOGCOL] = &GIFRegHandlerFOGCOL; - g_GIFRegHandlers[GIF_A_D_REG_TEXFLUSH] = &GIFRegHandlerTEXFLUSH; - g_GIFRegHandlers[GIF_A_D_REG_SCISSOR_1] = &GIFRegHandlerSCISSOR<0>; - g_GIFRegHandlers[GIF_A_D_REG_SCISSOR_2] = &GIFRegHandlerSCISSOR<1>; - g_GIFRegHandlers[GIF_A_D_REG_ALPHA_1] = &GIFRegHandlerALPHA<0>; - g_GIFRegHandlers[GIF_A_D_REG_ALPHA_2] = &GIFRegHandlerALPHA<1>; - g_GIFRegHandlers[GIF_A_D_REG_DIMX] = &GIFRegHandlerDIMX; - g_GIFRegHandlers[GIF_A_D_REG_DTHE] = &GIFRegHandlerDTHE; - g_GIFRegHandlers[GIF_A_D_REG_COLCLAMP] = &GIFRegHandlerCOLCLAMP; - g_GIFRegHandlers[GIF_A_D_REG_TEST_1] = &GIFRegHandlerTEST<0>; - g_GIFRegHandlers[GIF_A_D_REG_TEST_2] = &GIFRegHandlerTEST<1>; - g_GIFRegHandlers[GIF_A_D_REG_PABE] = &GIFRegHandlerPABE; - g_GIFRegHandlers[GIF_A_D_REG_FBA_1] = &GIFRegHandlerFBA<0>; - g_GIFRegHandlers[GIF_A_D_REG_FBA_2] = &GIFRegHandlerFBA<1>; - g_GIFRegHandlers[GIF_A_D_REG_FRAME_1] = &GIFRegHandlerFRAME<0>; - g_GIFRegHandlers[GIF_A_D_REG_FRAME_2] = &GIFRegHandlerFRAME<1>; - g_GIFRegHandlers[GIF_A_D_REG_ZBUF_1] = &GIFRegHandlerZBUF<0>; - g_GIFRegHandlers[GIF_A_D_REG_ZBUF_2] = &GIFRegHandlerZBUF<1>; - g_GIFRegHandlers[GIF_A_D_REG_BITBLTBUF] = &GIFRegHandlerBITBLTBUF; - g_GIFRegHandlers[GIF_A_D_REG_TRXPOS] = &GIFRegHandlerTRXPOS; - g_GIFRegHandlers[GIF_A_D_REG_TRXREG] = &GIFRegHandlerTRXREG; - g_GIFRegHandlers[GIF_A_D_REG_TRXDIR] = &GIFRegHandlerTRXDIR; - g_GIFRegHandlers[GIF_A_D_REG_HWREG] = &GIFRegHandlerHWREG; - SetMultithreaded(); -} - -void WriteTempRegs() -{ - memcpy(g_GIFTempRegHandlers, g_GIFPackedRegHandlers, sizeof(g_GIFTempRegHandlers)); -} - -void SetFrameSkip(bool skip) -{ - if (skip) - { - g_GIFPackedRegHandlers[GIF_REG_PRIM] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_RGBA] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_STQ] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_UV] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_XYZF2] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_XYZ2] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_1] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_2] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_FOG] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_XYZF3] = &GIFPackedRegHandlerNOP; - g_GIFPackedRegHandlers[GIF_REG_XYZ3] = &GIFPackedRegHandlerNOP; - - g_GIFRegHandlers[GIF_A_D_REG_PRIM] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_RGBAQ] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_ST] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_UV] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_XYZF2] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_XYZ2] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_XYZF3] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_XYZ3] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_PRMODECONT] = &GIFRegHandlerNOP; - g_GIFRegHandlers[GIF_A_D_REG_PRMODE] = &GIFRegHandlerNOP; - } - else - { - g_GIFPackedRegHandlers[GIF_REG_PRIM] = &GIFPackedRegHandlerPRIM; - g_GIFPackedRegHandlers[GIF_REG_RGBA] = &GIFPackedRegHandlerRGBA; - g_GIFPackedRegHandlers[GIF_REG_STQ] = &GIFPackedRegHandlerSTQ; - g_GIFPackedRegHandlers[GIF_REG_UV] = &GIFPackedRegHandlerUV; - g_GIFPackedRegHandlers[GIF_REG_XYZF2] = &GIFPackedRegHandlerXYZF2; - g_GIFPackedRegHandlers[GIF_REG_XYZ2] = &GIFPackedRegHandlerXYZ2; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_1] = &GIFPackedRegHandlerCLAMP<0>; - g_GIFPackedRegHandlers[GIF_REG_CLAMP_2] = &GIFPackedRegHandlerCLAMP<1>; - g_GIFPackedRegHandlers[GIF_REG_FOG] = &GIFPackedRegHandlerFOG; - g_GIFPackedRegHandlers[GIF_REG_XYZF3] = &GIFPackedRegHandlerXYZF3; - g_GIFPackedRegHandlers[GIF_REG_XYZ3] = &GIFPackedRegHandlerXYZ3; - - g_GIFRegHandlers[GIF_A_D_REG_PRIM] = &GIFRegHandlerPRIM; - g_GIFRegHandlers[GIF_A_D_REG_RGBAQ] = &GIFRegHandlerRGBAQ; - g_GIFRegHandlers[GIF_A_D_REG_ST] = &GIFRegHandlerST; - g_GIFRegHandlers[GIF_A_D_REG_UV] = &GIFRegHandlerUV; - g_GIFRegHandlers[GIF_A_D_REG_XYZF2] = &GIFRegHandlerXYZF2; - g_GIFRegHandlers[GIF_A_D_REG_XYZ2] = &GIFRegHandlerXYZ2; - g_GIFRegHandlers[GIF_A_D_REG_XYZF3] = &GIFRegHandlerXYZF3; - g_GIFRegHandlers[GIF_A_D_REG_XYZ3] = &GIFRegHandlerXYZ3; - g_GIFRegHandlers[GIF_A_D_REG_PRMODECONT] = &GIFRegHandlerPRMODECONT; - g_GIFRegHandlers[GIF_A_D_REG_PRMODE] = &GIFRegHandlerPRMODE; - } -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Regs.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Regs.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Regs.h 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Regs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,1045 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __GSREGS_H__ -#define __GSREGS_H__ - -enum GIF_REG -{ - GIF_REG_PRIM = 0x00, - GIF_REG_RGBA = 0x01, - GIF_REG_STQ = 0x02, - GIF_REG_UV = 0x03, - GIF_REG_XYZF2 = 0x04, - GIF_REG_XYZ2 = 0x05, - GIF_REG_TEX0_1 = 0x06, - GIF_REG_TEX0_2 = 0x07, - GIF_REG_CLAMP_1 = 0x08, - GIF_REG_CLAMP_2 = 0x09, - GIF_REG_FOG = 0x0a, - GIF_REG_XYZF3 = 0x0c, - GIF_REG_XYZ3 = 0x0d, - GIF_REG_A_D = 0x0e, - GIF_REG_NOP = 0x0f, -}; - -enum GIF_A_D_REG -{ - GIF_A_D_REG_PRIM = 0x00, - GIF_A_D_REG_RGBAQ = 0x01, - GIF_A_D_REG_ST = 0x02, - GIF_A_D_REG_UV = 0x03, - GIF_A_D_REG_XYZF2 = 0x04, - GIF_A_D_REG_XYZ2 = 0x05, - GIF_A_D_REG_TEX0_1 = 0x06, - GIF_A_D_REG_TEX0_2 = 0x07, - GIF_A_D_REG_CLAMP_1 = 0x08, - GIF_A_D_REG_CLAMP_2 = 0x09, - GIF_A_D_REG_FOG = 0x0a, - GIF_A_D_REG_XYZF3 = 0x0c, - GIF_A_D_REG_XYZ3 = 0x0d, - GIF_A_D_REG_NOP = 0x0f, - GIF_A_D_REG_TEX1_1 = 0x14, - GIF_A_D_REG_TEX1_2 = 0x15, - GIF_A_D_REG_TEX2_1 = 0x16, - GIF_A_D_REG_TEX2_2 = 0x17, - GIF_A_D_REG_XYOFFSET_1 = 0x18, - GIF_A_D_REG_XYOFFSET_2 = 0x19, - GIF_A_D_REG_PRMODECONT = 0x1a, - GIF_A_D_REG_PRMODE = 0x1b, - GIF_A_D_REG_TEXCLUT = 0x1c, - GIF_A_D_REG_SCANMSK = 0x22, - GIF_A_D_REG_MIPTBP1_1 = 0x34, - GIF_A_D_REG_MIPTBP1_2 = 0x35, - GIF_A_D_REG_MIPTBP2_1 = 0x36, - GIF_A_D_REG_MIPTBP2_2 = 0x37, - GIF_A_D_REG_TEXA = 0x3b, - GIF_A_D_REG_FOGCOL = 0x3d, - GIF_A_D_REG_TEXFLUSH = 0x3f, - GIF_A_D_REG_SCISSOR_1 = 0x40, - GIF_A_D_REG_SCISSOR_2 = 0x41, - GIF_A_D_REG_ALPHA_1 = 0x42, - GIF_A_D_REG_ALPHA_2 = 0x43, - GIF_A_D_REG_DIMX = 0x44, - GIF_A_D_REG_DTHE = 0x45, - GIF_A_D_REG_COLCLAMP = 0x46, - GIF_A_D_REG_TEST_1 = 0x47, - GIF_A_D_REG_TEST_2 = 0x48, - GIF_A_D_REG_PABE = 0x49, - GIF_A_D_REG_FBA_1 = 0x4a, - GIF_A_D_REG_FBA_2 = 0x4b, - GIF_A_D_REG_FRAME_1 = 0x4c, - GIF_A_D_REG_FRAME_2 = 0x4d, - GIF_A_D_REG_ZBUF_1 = 0x4e, - GIF_A_D_REG_ZBUF_2 = 0x4f, - GIF_A_D_REG_BITBLTBUF = 0x50, - GIF_A_D_REG_TRXPOS = 0x51, - GIF_A_D_REG_TRXREG = 0x52, - GIF_A_D_REG_TRXDIR = 0x53, - GIF_A_D_REG_HWREG = 0x54, - GIF_A_D_REG_SIGNAL = 0x60, - GIF_A_D_REG_FINISH = 0x61, - GIF_A_D_REG_LABEL = 0x62, -}; - -// In case we want to change to/from __fastcall for GIF register handlers: -#define __gifCall __fastcall - -typedef void __gifCall FnType_GIFRegHandler(const u32* data); -typedef FnType_GIFRegHandler* GIFRegHandler; - -extern FnType_GIFRegHandler GIFPackedRegHandlerNull; -extern FnType_GIFRegHandler GIFPackedRegHandlerRGBA; -extern FnType_GIFRegHandler GIFPackedRegHandlerSTQ; -extern FnType_GIFRegHandler GIFPackedRegHandlerUV; -extern FnType_GIFRegHandler GIFPackedRegHandlerXYZF2; -extern FnType_GIFRegHandler GIFPackedRegHandlerXYZ2; -extern FnType_GIFRegHandler GIFPackedRegHandlerFOG; -extern FnType_GIFRegHandler GIFPackedRegHandlerA_D; -extern FnType_GIFRegHandler GIFPackedRegHandlerNOP; -extern FnType_GIFRegHandler GIFPackedRegHandlerPRIM; -extern FnType_GIFRegHandler GIFPackedRegHandlerXYZF3; -extern FnType_GIFRegHandler GIFPackedRegHandlerXYZ3; - -extern FnType_GIFRegHandler GIFRegHandlerNull; -extern FnType_GIFRegHandler GIFRegHandlerPRIM; -extern FnType_GIFRegHandler GIFRegHandlerRGBAQ; -extern FnType_GIFRegHandler GIFRegHandlerST; -extern FnType_GIFRegHandler GIFRegHandlerUV; -extern FnType_GIFRegHandler GIFRegHandlerXYZF2; -extern FnType_GIFRegHandler GIFRegHandlerXYZ2; -extern FnType_GIFRegHandler GIFRegHandlerFOG; -extern FnType_GIFRegHandler GIFRegHandlerXYZF3; -extern FnType_GIFRegHandler GIFRegHandlerXYZ3; -extern FnType_GIFRegHandler GIFRegHandlerNOP; -extern FnType_GIFRegHandler GIFRegHandlerPRMODECONT; -extern FnType_GIFRegHandler GIFRegHandlerPRMODE; -extern FnType_GIFRegHandler GIFRegHandlerTEXCLUT; -extern FnType_GIFRegHandler GIFRegHandlerSCANMSK; -extern FnType_GIFRegHandler GIFRegHandlerTEXA; -extern FnType_GIFRegHandler GIFRegHandlerFOGCOL; -extern FnType_GIFRegHandler GIFRegHandlerTEXFLUSH; -extern FnType_GIFRegHandler GIFRegHandlerDIMX; -extern FnType_GIFRegHandler GIFRegHandlerDTHE; -extern FnType_GIFRegHandler GIFRegHandlerCOLCLAMP; -extern FnType_GIFRegHandler GIFRegHandlerPABE; -extern FnType_GIFRegHandler GIFRegHandlerBITBLTBUF; -extern FnType_GIFRegHandler GIFRegHandlerTRXPOS; -extern FnType_GIFRegHandler GIFRegHandlerTRXREG; -extern FnType_GIFRegHandler GIFRegHandlerTRXDIR; -extern FnType_GIFRegHandler GIFRegHandlerHWREG; -extern FnType_GIFRegHandler GIFRegHandlerSIGNAL; -extern FnType_GIFRegHandler GIFRegHandlerFINISH; -extern FnType_GIFRegHandler GIFRegHandlerLABEL; - -template -extern FnType_GIFRegHandler GIFPackedRegHandlerTEX0; -template -extern FnType_GIFRegHandler GIFPackedRegHandlerCLAMP; -template - -extern FnType_GIFRegHandler GIFRegHandlerTEX0; -template -extern FnType_GIFRegHandler GIFRegHandlerCLAMP; -template -extern FnType_GIFRegHandler GIFRegHandlerTEX1; -template -extern FnType_GIFRegHandler GIFRegHandlerTEX2; -template -extern FnType_GIFRegHandler GIFRegHandlerXYOFFSET; -template -extern FnType_GIFRegHandler GIFRegHandlerMIPTBP1; -template -extern FnType_GIFRegHandler GIFRegHandlerMIPTBP2; -template -extern FnType_GIFRegHandler GIFRegHandlerSCISSOR; -template -extern FnType_GIFRegHandler GIFRegHandlerALPHA; -template -extern FnType_GIFRegHandler GIFRegHandlerTEST; -template -extern FnType_GIFRegHandler GIFRegHandlerFBA; -template -extern FnType_GIFRegHandler GIFRegHandlerFRAME; -template -extern FnType_GIFRegHandler GIFRegHandlerZBUF; - -// GifReg & GifPackedReg structs from GSdx, slightly modified. -enum GS_ATST -{ - ATST_NEVER = 0, - ATST_ALWAYS = 1, - ATST_LESS = 2, - ATST_LEQUAL = 3, - ATST_EQUAL = 4, - ATST_GEQUAL = 5, - ATST_GREATER = 6, - ATST_NOTEQUAL = 7 -}; - -enum GS_AFAIL -{ - AFAIL_KEEP = 0, - AFAIL_FB_ONLY = 1, - AFAIL_ZB_ONLY = 2, - AFAIL_RGB_ONLY = 3 -}; - -enum GS_TFX -{ - TFX_MODULATE = 0, - TFX_DECAL = 1, - TFX_HIGHLIGHT = 2, - TFX_HIGHLIGHT2 = 3 -}; - -enum GS_CLAMP -{ - CLAMP_REPEAT = 0, - CLAMP_CLAMP = 1, - CLAMP_REGION_CLAMP = 2, - CLAMP_REGION_REPEAT = 3 -}; -// GIFReg - -REG64_(GIFReg, ALPHA) - u32 A:2; - u32 B:2; - u32 C:2; - u32 D:2; - u32 _PAD1:24; - u32 FIX:8; - u32 _PAD2:24; -REG_END2 - // opaque => output will be Cs/As -// __forceinline bool IsOpaque() const {return (A == B || C == 2 && FIX == 0) && D == 0 || (A == 0 && B == D && C == 2 && FIX == 0x80);} -// __forceinline bool IsOpaque(int amin, int amax) const {return (A == B || amax == 0) && D == 0 || A == 0 && B == D && amin == 0x80 && amax == 0x80;} -REG_END2 - -REG64_(GIFReg, BITBLTBUF) - u32 SBP:14; - u32 _PAD1:2; - u32 SBW:6; - u32 _PAD2:2; - u32 SPSM:6; - u32 _PAD3:2; - u32 DBP:14; - u32 _PAD4:2; - u32 DBW:6; - u32 _PAD5:2; - u32 DPSM:6; - u32 _PAD6:2; -REG_END - -REG64_(GIFReg, CLAMP) -union -{ - struct - { - u32 WMS:2; - u32 WMT:2; - u32 MINU:10; - u32 MAXU:10; - u32 _PAD1:8; - u32 _PAD2:2; - u32 MAXV:10; - u32 _PAD3:20; - }; - - struct - { - u64 _PAD4:24; - u64 MINV:10; - u64 _PAD5:30; - }; -}; -REG_END - -REG64_(GIFReg, COLCLAMP) - u32 CLAMP:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, DIMX) - s32 DM00:3; - s32 _PAD00:1; - s32 DM01:3; - s32 _PAD01:1; - s32 DM02:3; - s32 _PAD02:1; - s32 DM03:3; - s32 _PAD03:1; - s32 DM10:3; - s32 _PAD10:1; - s32 DM11:3; - s32 _PAD11:1; - s32 DM12:3; - s32 _PAD12:1; - s32 DM13:3; - s32 _PAD13:1; - s32 DM20:3; - s32 _PAD20:1; - s32 DM21:3; - s32 _PAD21:1; - s32 DM22:3; - s32 _PAD22:1; - s32 DM23:3; - s32 _PAD23:1; - s32 DM30:3; - s32 _PAD30:1; - s32 DM31:3; - s32 _PAD31:1; - s32 DM32:3; - s32 _PAD32:1; - s32 DM33:3; - s32 _PAD33:1; -REG_END - -REG64_(GIFReg, DTHE) - u32 DTHE:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, FBA) - u32 FBA:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, FINISH) - u32 _PAD1:32; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, FOG) - u32 _PAD1:32; - u32 _PAD2:24; - u32 F:8; -REG_END - -REG64_(GIFReg, FOGCOL) - u32 FCR:8; - u32 FCG:8; - u32 FCB:8; - u32 _PAD1:8; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, FRAME) - u32 FBP:9; - u32 _PAD1:7; - u32 FBW:6; - u32 _PAD2:2; - u32 PSM:6; - u32 _PAD3:2; - u32 FBMSK:32; -REG_END2 - u32 Block() const {return FBP << 5;} -REG_END2 - -REG64_(GIFReg, HWREG) - u32 DATA_LOWER:32; - u32 DATA_UPPER:32; -REG_END - -REG64_(GIFReg, LABEL) - u32 ID:32; - u32 IDMSK:32; -REG_END - -REG64_(GIFReg, MIPTBP1) - u64 TBP1:14; - u64 TBW1:6; - u64 TBP2:14; - u64 TBW2:6; - u64 TBP3:14; - u64 TBW3:6; - u64 _PAD:4; -REG_END - -REG64_(GIFReg, MIPTBP2) - u64 TBP4:14; - u64 TBW4:6; - u64 TBP5:14; - u64 TBW5:6; - u64 TBP6:14; - u64 TBW6:6; - u64 _PAD:4; -REG_END - -REG64_(GIFReg, NOP) - u32 _PAD1:32; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, PABE) - u32 PABE:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, PRIM) - u32 PRIM:3; - u32 IIP:1; - u32 TME:1; - u32 FGE:1; - u32 ABE:1; - u32 AA1:1; - u32 FST:1; - u32 CTXT:1; - u32 FIX:1; - u32 _PAD1:21; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, PRMODE) - u32 _PRIM:3; - u32 IIP:1; - u32 TME:1; - u32 FGE:1; - u32 ABE:1; - u32 AA1:1; - u32 FST:1; - u32 CTXT:1; - u32 FIX:1; - u32 _PAD2:21; - u32 _PAD3:32; -REG_END - -REG64_(GIFReg, PRMODECONT) - u32 AC:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, RGBAQ) - u32 R:8; - u32 G:8; - u32 B:8; - u32 A:8; - float Q; -REG_END - -REG64_(GIFReg, SCANMSK) - u32 MSK:2; - u32 _PAD1:30; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, SCISSOR) - u32 SCAX0:11; - u32 _PAD1:5; - u32 SCAX1:11; - u32 _PAD2:5; - u32 SCAY0:11; - u32 _PAD3:5; - u32 SCAY1:11; - u32 _PAD4:5; -REG_END - -REG64_(GIFReg, SIGNAL) - u32 ID:32; - u32 IDMSK:32; -REG_END - -REG64_(GIFReg, ST) - float S; - float T; -REG_END - -REG64_(GIFReg, TEST) - u32 ATE:1; - u32 ATST:3; - u32 AREF:8; - u32 AFAIL:2; - u32 DATE:1; - u32 DATM:1; - u32 ZTE:1; - u32 ZTST:2; - u32 _PAD1:13; - u32 _PAD2:32; -REG_END2 - __forceinline bool DoFirstPass() {return !ATE || ATST != ATST_NEVER;} // not all pixels fail automatically - __forceinline bool DoSecondPass() {return ATE && ATST != ATST_ALWAYS && AFAIL != AFAIL_KEEP;} // pixels may fail, write fb/z - __forceinline bool NoSecondPass() {return ATE && ATST != ATST_ALWAYS && AFAIL == AFAIL_KEEP;} // pixels may fail, no output -REG_END2 - -REG64_(GIFReg, TEX0) -union -{ - struct - { - u32 TBP0:14; - u32 TBW:6; - u32 PSM:6; - u32 TW:4; - u32 _PAD1:2; - u32 _PAD2:2; - u32 TCC:1; - u32 TFX:2; - u32 CBP:14; - u32 CPSM:4; - u32 CSM:1; - u32 CSA:5; - u32 CLD:3; - }; - - struct - { - u64 _PAD3:30; - u64 TH:4; - u64 _PAD4:30; - }; -}; -REG_END2 - __forceinline bool IsRepeating() {return (u32)((u32)1 << TW) > (u32)(TBW << (u32)6);} -REG_END2 - -REG64_(GIFReg, TEX1) - u32 LCM:1; - u32 _PAD1:1; - u32 MXL:3; - u32 MMAG:1; - u32 MMIN:3; - u32 MTBA:1; - u32 _PAD2:9; - u32 L:2; - u32 _PAD3:11; - s32 K:12; // 1:7:4 - u32 _PAD4:20; -REG_END2 - bool IsMinLinear() const {return (MMIN == 1) || (MMIN & 4);} - bool IsMagLinear() const {return MMAG;} -REG_END2 - -REG64_(GIFReg, TEX2) - u32 _PAD1:20; - u32 PSM:6; - u32 _PAD2:6; - u32 _PAD3:5; - u32 CBP:14; - u32 CPSM:4; - u32 CSM:1; - u32 CSA:5; - u32 CLD:3; -REG_END - -REG64_(GIFReg, TEXA) - u32 TA0:8; - u32 _PAD1:7; - u32 AEM:1; - u32 _PAD2:16; - u32 TA1:8; - u32 _PAD3:24; -REG_END - -REG64_(GIFReg, TEXCLUT) - u32 CBW:6; - u32 COU:6; - u32 COV:10; - u32 _PAD1:10; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, TEXFLUSH) - u32 _PAD1:32; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, TRXDIR) - u32 XDIR:2; - u32 _PAD1:30; - u32 _PAD2:32; -REG_END - -REG64_(GIFReg, TRXPOS) - u32 SSAX:11; - u32 _PAD1:5; - u32 SSAY:11; - u32 _PAD2:5; - u32 DSAX:11; - u32 _PAD3:5; - u32 DSAY:11; - u32 DIRY:1; - u32 DIRX:1; - u32 _PAD4:3; -REG_END - -REG64_(GIFReg, TRXREG) - u32 RRW:12; - u32 _PAD1:20; - u32 RRH:12; - u32 _PAD2:20; -REG_END - -// GSState::GIFPackedRegHandlerUV and GSState::GIFRegHandlerUV will make sure that the _PAD1/2 bits are set to zero - -REG64_(GIFReg, UV) - u32 U:14; - u32 _PAD1:2; - u32 V:14; - u32 _PAD2:2; - u32 _PAD3:32; -REG_END - -// GSState::GIFRegHandlerXYOFFSET will make sure that the _PAD1/2 bits are set to zero - -REG64_(GIFReg, XYOFFSET) - u32 OFX; // :16; u32 _PAD1:16; - u32 OFY; // :16; u32 _PAD2:16; -REG_END - -REG64_(GIFReg, XYZ) - u32 X:16; - u32 Y:16; - u32 Z:32; -REG_END - -REG64_(GIFReg, XYZF) - u32 X:16; - u32 Y:16; - u32 Z:24; - u32 F:8; -REG_END - -REG64_(GIFReg, ZBUF) - u32 ZBP:9; - u32 _PAD1:15; - // u32 PSM:4; - // u32 _PAD2:4; - u32 PSM:6; - u32 _PAD2:2; - u32 ZMSK:1; - u32 _PAD3:31; -REG_END2 - u32 Block() const {return ZBP << 5;} -REG_END2 - -REG64_SET(GIFReg) - GIFRegALPHA ALPHA; - GIFRegBITBLTBUF BITBLTBUF; - GIFRegCLAMP CLAMP; - GIFRegCOLCLAMP COLCLAMP; - GIFRegDIMX DIMX; - GIFRegDTHE DTHE; - GIFRegFBA FBA; - GIFRegFINISH FINISH; - GIFRegFOG FOG; - GIFRegFOGCOL FOGCOL; - GIFRegFRAME FRAME; - GIFRegHWREG HWREG; - GIFRegLABEL LABEL; - GIFRegMIPTBP1 MIPTBP1; - GIFRegMIPTBP2 MIPTBP2; - GIFRegNOP NOP; - GIFRegPABE PABE; - GIFRegPRIM PRIM; - GIFRegPRMODE PRMODE; - GIFRegPRMODECONT PRMODECONT; - GIFRegRGBAQ RGBAQ; - GIFRegSCANMSK SCANMSK; - GIFRegSCISSOR SCISSOR; - GIFRegSIGNAL SIGNAL; - GIFRegST ST; - GIFRegTEST TEST; - GIFRegTEX0 TEX0; - GIFRegTEX1 TEX1; - GIFRegTEX2 TEX2; - GIFRegTEXA TEXA; - GIFRegTEXCLUT TEXCLUT; - GIFRegTEXFLUSH TEXFLUSH; - GIFRegTRXDIR TRXDIR; - GIFRegTRXPOS TRXPOS; - GIFRegTRXREG TRXREG; - GIFRegUV UV; - GIFRegXYOFFSET XYOFFSET; - GIFRegXYZ XYZ; - GIFRegXYZF XYZF; - GIFRegZBUF ZBUF; -REG_SET_END - -// GIFPacked - -REG128_(GIFPacked, PRIM) - u32 PRIM:11; - u32 _PAD1:21; - u32 _PAD2:32; - u32 _PAD3:32; - u32 _PAD4:32; -REG_END - -REG128_(GIFPacked, RGBA) - u32 R:8; - u32 _PAD1:24; - u32 G:8; - u32 _PAD2:24; - u32 B:8; - u32 _PAD3:24; - u32 A:8; - u32 _PAD4:24; -REG_END - -REG128_(GIFPacked, STQ) - float S; - float T; - float Q; - u32 _PAD1:32; -REG_END - -REG128_(GIFPacked, UV) - u32 U:14; - u32 _PAD1:18; - u32 V:14; - u32 _PAD2:18; - u32 _PAD3:32; - u32 _PAD4:32; -REG_END - -REG128_(GIFPacked, XYZF2) - u32 X:16; - u32 _PAD1:16; - u32 Y:16; - u32 _PAD2:16; - u32 _PAD3:4; - u32 Z:24; - u32 _PAD4:4; - u32 _PAD5:4; - u32 F:8; - u32 _PAD6:3; - u32 ADC:1; - u32 _PAD7:16; -REG_END - -REG128_(GIFPacked, XYZ2) - u32 X:16; - u32 _PAD1:16; - u32 Y:16; - u32 _PAD2:16; - u32 Z:32; - u32 _PAD3:15; - u32 ADC:1; - u32 _PAD4:16; -REG_END - -REG128_(GIFPacked, FOG) - u32 _PAD1:32; - u32 _PAD2:32; - u32 _PAD3:32; - u32 _PAD4:4; - u32 F:8; - u32 _PAD5:20; -REG_END - -REG128_(GIFPacked, A_D) - u64 DATA:64; - u32 ADDR:8; // enum GIF_A_D_REG - u32 _PAD1:24; - u32 _PAD2:32; -REG_END - -REG128_(GIFPacked, NOP) - u32 _PAD1:32; - u32 _PAD2:32; - u32 _PAD3:32; - u32 _PAD4:32; -REG_END - -REG128_SET(GIFPackedReg) - GIFReg r; - GIFPackedPRIM PRIM; - GIFPackedRGBA RGBA; - GIFPackedSTQ STQ; - GIFPackedUV UV; - GIFPackedXYZF2 XYZF2; - GIFPackedXYZ2 XYZ2; - GIFPackedFOG FOG; - GIFPackedA_D A_D; - GIFPackedNOP NOP; -REG_SET_END - -// This register stores the background color. Theoretically it'd get blended with the image in some cases, but we don't appear to be -// using it. See PMODE->SLBG. GSDx *is* using it. -REG64_(GSReg, BGCOLOR) - u32 R:8; - u32 G:8; - u32 B:8; - u32 _PAD1:8; - u32 _PAD2:32; -REG_END - -// This register switches the direction of Fifo. 0 - Host -> Local; 1 - Local -> Host. Fifo is supposed to be empty at the time. -// Unchecked by GSdx or ZZOgl. -REG64_(GSReg, BUSDIR) - u32 DIR:1; - u32 _PAD1:31; - u32 _PAD2:32; -REG_END - -// Mostly looks handled by pcsx2. -REG64_(GSReg, CSR) - u32 SIGNAL:1; - u32 FINISH:1; - u32 HSINT:1; - u32 VSINT:1; - u32 EDWINT:1; - u32 ZERO1:1; - u32 ZERO2:1; - u32 _PAD1:1; - u32 FLUSH:1; - u32 RESET:1; - u32 _PAD2:2; - u32 NFIELD:1; - u32 FIELD:1; - u32 FIFO:2; - u32 REV:8; - u32 ID:8; - u32 _PAD3:32; -REG_END - -// Settings for whichever circuit we're using. (Again, see PMODE.) -// -- FBP - Frame Buffer Pointer. address / 2048. -// -- FBW - Frame Buffer Width. width / 64. -// -- PSM - psm, but 5 bit. 0 - PSMCT32; 1 - PSMCT24; 2 - PSMCT16; 10 - PSMCT16S; 18 - PS-GPU24? -// -- DBX - Upper left x coords of rectangle. -// -- DBY - Upper left y coords of rectangle. -REG64_(GSReg, DISPFB) // (-1/2) - u32 FBP:9; - u32 FBW:6; - u32 PSM:5; - u32 _PAD:12; - u32 DBX:11; - u32 DBY:11; - u32 _PAD2:10; -REG_END - -// Settings for whichever display we're using. -// -- DX - X position in the display area. -// -- DY - Y position in the display area. -// -- MAGH - Horizontal Magnification; x1 - x16. -// -- MAGV - Vertical Magnification; x1 - x16. -// -- DW - Display Area Width - 1. -// -- DH - Display Area Height - 1. - -REG64_(GSReg, DISPLAY) // (-1/2) - u32 DX:12; - u32 DY:11; - u32 MAGH:4; - u32 MAGV:2; - u32 _PAD:3; - u32 DW:12; - u32 DH:11; - u32 _PAD2:9; -REG_END - -// This register has settings for the frame buffer when writing back. These next three registers are unused in ZZOgl & GSDx. -// -- EXBP - Base pointer of the buffer / 64. -// -- EXBW - Width of the buffer / 64. -// -- FBIN - Whether we use OUT1 or OUT2. 0 - 1; 1 - 2. -// -- WFFMD - Interlace Mode; 0 - Field; 1 - Frame. -// -- EMODA - When processing an input alpha value; 0 - write it as is; 1 Convert from RGB to luminence value Y. 2 - Same as 1, only /2. 3 - 0. -// -- EMODC - When processing an input color value; 0 - write it as is; 1 Convert from RGB to luminence value Y. 2 - Convert to YCbCr. 3 - Write Alpha to RGB. -// -- WDX - X coords. -// -- WDY - Y coords. - -REG64_(GSReg, EXTBUF) - u32 EXBP:14; - u32 EXBW:6; - u32 FBIN:2; - u32 WFFMD:1; - u32 EMODA:2; - u32 EMODC:2; - u32 _PAD1:5; - u32 WDX:11; - u32 WDY:11; - u32 _PAD2:10; -REG_END - -// Sets where you read when the write above is performed. -// -- SX - X coords. -// -- SX - Y coords. -// -- SMPH - Horiz Sampling rate. -// -- SMPV - Vert Sampling rate. -// -- WW - Rect Width - 1 -// -- WH - Rect Height - 1 - -REG64_(GSReg, EXTDATA) - u32 SX:12; - u32 SY:11; - u32 SMPH:4; - u32 SMPV:2; - u32 _PAD1:3; - u32 WW:12; - u32 WH:11; - u32 _PAD2:9; -REG_END - -// Starts or stops the aforementioned write. -REG64_(GSReg, EXTWRITE) - u32 WRITE; - u32 _PAD2:32; -REG_END - -// Pcsx2 handles this. -REG64_(GSReg, IMR) - u32 _PAD1:8; - u32 SIGMSK:1; - u32 FINISHMSK:1; - u32 HSMSK:1; - u32 VSMSK:1; - u32 EDWMSK:1; - u32 _PAD2:19; - u32 _PAD3:32; -REG_END - -// The fields of PMODE are: -// -- EN1 - Read Circuit 1; 0 - off, 1 - on. -// -- EN2 - Read Circuit 2; 0 - off, 1 - on. -// -- CRTMD - Always 1. -// -- MMOD - For Alpha blending, the selection is: 0 - The Alpha value of circuit 1, 1 - The ALP register value. -// -- AMOD - The OUT1 Alpha value selection: 0 - Read circuit 1, 1 - Read Circuit 2. -// -- SLBG - The Alpha blending type: 0 - blended with the output of Read circuit 1, 1 - blended with the background color. -// -- ALP - The fixed Alpha value. -// - -REG64_(GSReg, PMODE) - u32 EN1:1; - u32 EN2:1; - u32 CRTMD:3; - u32 MMOD:1; - u32 AMOD:1; - u32 SLBG:1; - u32 ALP:8; - u32 _PAD:16; - u32 _PAD1:32; -REG_END - -// Pcsx2 handles this. -REG64_(GSReg, SIGLBLID) - u32 SIGID:32; - u32 LBLID:32; -REG_END - -// Not sure about this one... -REG64_(GSReg, SMODE1) - u32 RC:3; - u32 LC:7; - u32 T1248:2; - u32 SLCK:1; - u32 CMOD:2; - u32 EX:1; - u32 PRST:1; - u32 SINT:1; - u32 XPCK:1; - u32 PCK2:2; - u32 SPML:4; - u32 GCONT:1; - u32 PHS:1; - u32 PVS:1; - u32 PEHS:1; - u32 PEVS:1; - u32 CLKSEL:2; - u32 NVCK:1; - u32 SLCK2:1; - u32 VCKSEL:2; - u32 VHP:1; - u32 _PAD1:27; -REG_END - -// The fields of SMODE2 are: -// -- INT - 0 for non-interlaced; 1 for interlaced. -// -- FFMD - 0 for field mode (read every other line); 1 for frame mode (read every line) -// -- DPMS - VESA DPMS mode setting; 0 - on, 1 - standby, 2 - suspend, 3 - off. -// -REG64_(GSReg, SMODE2) - u32 INT:1; - u32 FFMD:1; - u32 DPMS:2; - u32 _PAD2:28; - u32 _PAD3:32; -REG_END - -REG64_(GSReg, SIGBLID) - u32 SIGID; - u32 LBLID; -REG_END - -extern u8* g_pBasePS2Mem; - -#define PMODE ((GSRegPMODE*)(g_pBasePS2Mem+0x0000)) -#define SMODE1 ((GSRegSMODE1*)(g_pBasePS2Mem+0x0010)) -#define SMODE2 ((GSRegSMODE2*)(g_pBasePS2Mem+0x0020)) -// SRFSH -#define SYNCH1 ((GSRegSYNCH1*)(g_pBasePS2Mem+0x0040)) -#define SYNCH2 ((GSRegSYNCH2*)(g_pBasePS2Mem+0x0050)) -#define SYNCV ((GSRegSYNCV*)(g_pBasePS2Mem+0x0060)) -#define DISPFB1 ((GSRegDISPFB*)(g_pBasePS2Mem+0x0070)) -#define DISPLAY1 ((GSRegDISPLAY*)(g_pBasePS2Mem+0x0080)) -#define DISPFB2 ((GSRegDISPFB*)(g_pBasePS2Mem+0x0090)) -#define DISPLAY2 ((GSRegDISPLAY*)(g_pBasePS2Mem+0x00a0)) -#define EXTBUF ((GSRegEXTBUF*)(g_pBasePS2Mem+0x00b0)) -#define EXTDATA ((GSRegEXTDATA*)(g_pBasePS2Mem+0x00c0)) -#define EXTWRITE ((GSRegEXTWRITE*)(g_pBasePS2Mem+0x00d0)) -#define BGCOLOR ((GSRegBGCOLOR*)(g_pBasePS2Mem+0x00e0)) -#define CSR ((GSRegCSR*)(g_pBasePS2Mem+0x1000)) -#define IMR ((GSRegIMR*)(g_pBasePS2Mem+0x1010)) -#define BUSDIR ((GSRegBUSDIR*)(g_pBasePS2Mem+0x1040)) -#define SIGLBLID ((GSRegSIGBLID*)(g_pBasePS2Mem+0x1080)) - -// -// sps2tags.h -// -#define GET_GIF_REG(tag, reg) \ - (((tag).ai32[2 + ((reg) >> 3)] >> (((reg) & 7) << 2)) & 0xf) - -#define GET_GSFPS (((SMODE1->CMOD&1) ? 50 : 60) / (SMODE2->INT ? 1 : 2)) - -static __forceinline GSRegDISPLAY* Display_Reg(int circuit) -{ - return (circuit) ? DISPLAY2 : DISPLAY1; -} - -static __forceinline GSRegDISPFB* Dispfb_Reg(int circuit) -{ - return (circuit) ? DISPFB2 : DISPFB1; -} - -static __forceinline bool Circuit_Enabled(int circuit) -{ - return (circuit) ? PMODE->EN2 : PMODE->EN1; -} - -extern void WriteTempRegs(); -extern void SetFrameSkip(bool skip); -extern void ResetRegs(); - -extern void SetTexFlush(); -extern void SetFogColor(u32 fog); -extern void SetFogColor(GIFRegFOGCOL* fog); -extern bool CheckChangeInClut(u32 highdword, u32 psm); // returns true if clut will change after this tex0 op - -// flush current vertices, call before setting new registers (the main render method) -void Flush(int context); -void FlushBoth(); - -// called on a primitive switch -void Prim(); - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/shaders.sh pcsx2-1.4.0/plugins/zzogl-pg/opengl/shaders.sh --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/shaders.sh 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/shaders.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -#!/bin/sh - -# PCSX2 - PS2 Emulator for PCs -# Copyright (C) 2002-2011 PCSX2 Dev Team -# -# PCSX2 is free software: you can redistribute it and/or modify it under the terms -# of the GNU Lesser General Public License as published by the Free Software Found- -# ation, either version 3 of the License, or (at your option) any later version. -# -# PCSX2 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 PCSX2. -# If not, see . - -./zgsbuild ps2hw.fx -cp ps2hw.dat ../../../bin/plugins/ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/targets.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/targets.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/targets.cpp 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/targets.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1291 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include -#include - -#include "GS.h" -#include "Mem.h" -#include "x86.h" -#include "targets.h" -#include "ZZoglShaders.h" -#include "ZZClut.h" -#include "ZZoglVB.h" -#include "Util.h" - -#define RHA -//#define RW - -extern int g_TransferredToGPU; - -#if !defined(ZEROGS_DEVBUILD) -# define INC_RESOLVE() -#else -# define INC_RESOLVE() ++g_nResolve -#endif - -extern int s_nResolved; -extern u32 g_nResolve; -extern bool g_bSaveTrans; - -CRenderTargetMngr s_RTs, s_DepthRTs; -CBitwiseTextureMngr s_BitwiseTextures; -CMemoryTargetMngr g_MemTargs; - -//extern u32 s_ptexCurSet[2]; -bool g_bSaveZUpdate = 0; - -int VALIDATE_THRESH = 8; -u32 TEXDESTROY_THRESH = 16; -#define FORCE_TEXDESTROY_THRESH (3) // destroy texture after FORCE_TEXDESTROY_THRESH frames - -void _Resolve(const void* psrc, int fbp, int fbw, int fbh, int psm, u32 fbm, bool mode); -void SetWriteDepth(); -bool IsWriteDepth(); -bool IsWriteDestAlphaTest(); - -//-------------------------------------------------- - - -inline bool CheckWidthIsSame(const frameInfo& frame, CRenderTarget* ptarg) -{ - if (PSMT_ISHALF(frame.psm) == PSMT_ISHALF(ptarg->psm)) - return (frame.fbw == ptarg->fbw); - - if (PSMT_ISHALF(frame.psm)) - return (frame.fbw == 2 * ptarg->fbw); - else - return (2 * frame.fbw == ptarg->fbw); -} - -////////////////////////////////////// -// Texture Mngr For Bitwise AND Ops // -////////////////////////////////////// -void CBitwiseTextureMngr::Destroy() -{ - FUNCLOG - - for (map::iterator it = mapTextures.begin(); it != mapTextures.end(); ++it) - { - glDeleteTextures(1, &it->second); - } - - mapTextures.clear(); -} - -u32 CBitwiseTextureMngr::GetTexInt(u32 bitvalue, u32 ptexDoNotDelete) -{ - FUNCLOG - - if (mapTextures.size() > 32) - { - // randomly delete 8 - for (map::iterator it = mapTextures.begin(); it != mapTextures.end();) - { - if (!(rand()&3) && it->second != ptexDoNotDelete) - { - glDeleteTextures(1, &it->second); - mapTextures.erase(it++); - } - else - { - ++it; - } - } - } - - if (glGetError() != GL_NO_ERROR) ZZLog::Error_Log("Error before creation of bitmask texture."); - - // create a new tex - u32 ptex; - - glGenTextures(1, &ptex); - - if (glGetError() != GL_NO_ERROR) ZZLog::Error_Log("Error on generation of bitmask texture."); - - vector data(GPU_TEXMASKWIDTH); - - for (u32 i = 0; i < GPU_TEXMASKWIDTH; ++i) - { - data[i] = (((i << MASKDIVISOR) & bitvalue) << 6); // add the 1/2 offset so that - } - - // data[GPU_TEXMASKWIDTH] = 0; // I remove GPU_TEXMASKWIDTH+1 element of this texture, because it was a reason of FFC crush - // Probably, some sort of PoT incompability in drivers. - - glBindTexture(GL_TEXTURE_RECTANGLE, ptex); - if (glGetError() != GL_NO_ERROR) ZZLog::Error_Log("Error on binding bitmask texture."); - - TextureRect2(GL_LUMINANCE16, GPU_TEXMASKWIDTH, 1, GL_LUMINANCE, GL_UNSIGNED_SHORT, &data[0]); - if (glGetError() != GL_NO_ERROR) ZZLog::Error_Log("Error on applying bitmask texture."); - -// Removing clamping, as it seems lead to numerous troubles at some drivers -// Need to observe, may be clamping is not really needed. - /* setRectWrap2(GL_REPEAT); - - GLint Error = glGetError(); - if( Error != GL_NO_ERROR ) { - ERROR_LOG_SPAM_TEST("Failed to create bitmask texture; \t"); - if (SPAM_PASS) { - ZZLog::Log("bitmask cache %d; \t", mapTextures.size()); - switch (Error) { - case GL_INVALID_ENUM: ZZLog::Error_Log("Invalid enumerator.") ; break; - case GL_INVALID_VALUE: ZZLog::Error_Log("Invalid value."); break; - case GL_INVALID_OPERATION: ZZLog::Error_Log("Invalid operation."); break; - default: ZZLog::Error_Log("Error number: %d.", Error); - } - } - return 0; - }*/ - - mapTextures[bitvalue] = ptex; - - return ptex; -} - -void CRangeManager::RangeSanityCheck() -{ -#ifdef _DEBUG - // sanity check - - for (int i = 0; i < (int)ranges.size() - 1; ++i) - { - assert(ranges[i].end < ranges[i+1].start); - } - -#endif -} - -void CRangeManager::Insert(int start, int end) -{ - FUNCLOG - int imin = 0, imax = (int)ranges.size(), imid; - - RangeSanityCheck(); - - switch (ranges.size()) - { - - case 0: - ranges.push_back(RANGE(start, end)); - return; - - case 1: - if (end < ranges.front().start) - { - ranges.insert(ranges.begin(), RANGE(start, end)); - } - else if (start > ranges.front().end) - { - ranges.push_back(RANGE(start, end)); - } - else - { - if (start < ranges.front().start) ranges.front().start = start; - if (end > ranges.front().end) ranges.front().end = end; - } - - return; - } - - // find where start is - while (imin < imax) - { - imid = (imin + imax) >> 1; - - assert(imid < (int)ranges.size()); - - if ((ranges[imid].end >= start) && ((imid == 0) || (ranges[imid-1].end < start))) - { - imin = imid; - break; - } - else if (ranges[imid].start > start) - { - imax = imid; - } - else - { - imin = imid + 1; - } - } - - int startindex = imin; - - if (startindex >= (int)ranges.size()) - { - // non intersecting - assert(start > ranges.back().end); - ranges.push_back(RANGE(start, end)); - return; - } - - if (startindex == 0 && end < ranges.front().start) - { - ranges.insert(ranges.begin(), RANGE(start, end)); - RangeSanityCheck(); - return; - } - - imin = 0; - imax = (int)ranges.size(); - - // find where end is - - while (imin < imax) - { - imid = (imin + imax) >> 1; - - assert(imid < (int)ranges.size()); - - if ((ranges[imid].end <= end) && ((imid == (int)ranges.size() - 1) || (ranges[imid+1].start > end))) - { - imin = imid; - break; - } - else if (ranges[imid].start >= end) - { - imax = imid; - } - else - { - imin = imid + 1; - } - } - - int endindex = imin; - - if (startindex > endindex) - { - // create a new range - ranges.insert(ranges.begin() + startindex, RANGE(start, end)); - RangeSanityCheck(); - return; - } - - if (endindex >= (int)ranges.size() - 1) - { - // pop until startindex is reached - int lastend = ranges.back().end; - int numpop = (int)ranges.size() - startindex - 1; - - while (numpop-- > 0) - { - ranges.pop_back(); - } - - assert(start <= ranges.back().end); - - if (start < ranges.back().start) ranges.back().start = start; - if (lastend > ranges.back().end) ranges.back().end = lastend; - if (end > ranges.back().end) ranges.back().end = end; - - RangeSanityCheck(); - - return; - } - - if (endindex == 0) - { - assert(end >= ranges.front().start); - - if (start < ranges.front().start) ranges.front().start = start; - if (end > ranges.front().end) ranges.front().end = end; - - RangeSanityCheck(); - } - - // somewhere in the middle - if (ranges[startindex].start < start) start = ranges[startindex].start; - - if (startindex < endindex) - { - ranges.erase(ranges.begin() + startindex, ranges.begin() + endindex); - } - - if (start < ranges[startindex].start) ranges[startindex].start = start; - if (end > ranges[startindex].end) ranges[startindex].end = end; - - RangeSanityCheck(); -} - -CRangeManager s_RangeMngr; // manages overwritten memory - -void ResolveInRange(int start, int end) -{ - FUNCLOG - list listTargs = CreateTargetsList(start, end); - /* s_DepthRTs.GetTargs(start, end, listTargs); - s_RTs.GetTargs(start, end, listTargs);*/ - - if (listTargs.size() > 0) - { - FlushBoth(); - - // We need another list, because old one could be brocken by Flush(). - listTargs.clear(); - listTargs = CreateTargetsList(start, end); - /* s_DepthRTs.GetTargs(start, end, listTargs_1); - s_RTs.GetTargs(start, end, listTargs_1);*/ - - for (list::iterator it = listTargs.begin(); it != listTargs.end(); ++it) - { - // only resolve if not completely covered - if ((*it)->created == 123) - (*it)->Resolve(); - else - ZZLog::Debug_Log("Resolving non-existing object! Destroy code %d.", (*it)->created); - } - } -} - -////////////////// -// Transferring // -////////////////// -void FlushTransferRange(CRenderTarget* ptarg, int start, int end, int texstart, int texend) -{ - int range_size = end - start; - - if (!(ptarg->start < texend && ptarg->end > texstart)) - { - // check if target is currently being used - - if (!(conf.settings().no_quick_resolve)) - { - if (ptarg->fbp != vb[0].gsfb.fbp) - { - if (ptarg->fbp != vb[1].gsfb.fbp) - { - // this render target currently isn't used and is not in the texture's way, so can safely ignore - // resolving it. Also the range has to be big enough compared to the target to really call it resolved - // (ffx changing screens, shadowhearts) - // start == ptarg->start, used for kh to transfer text - - if (ptarg->IsDepth() || range_size > 0x50000 || ((conf.settings().quick_resolve_1) && start == ptarg->start)) - ptarg->status |= CRenderTarget::TS_NeedUpdate | CRenderTarget::TS_Resolved; - - return; - } - } - } - } - - // the first range check was very rough; some games (dragonball z) have the zbuf in the same page as textures (but not overlapping) - // so detect that condition - if (ptarg->fbh % m_Blocks[ptarg->psm].height) - { - // get start of left-most boundry page - int targstart, targend; - GetRectMemAddressZero(targstart, targend, ptarg->psm, ptarg->fbw, ptarg->fbh & ~(m_Blocks[ptarg->psm].height - 1), ptarg->fbp, ptarg->fbw); - - if (start >= targend) - { - // don't bother - if ((ptarg->fbh % m_Blocks[ptarg->psm].height) <= 2) return; - - // calc how many bytes of the block that the page spans - } - } - - if (start < ptarg->end && end > ptarg->start) - { - ptarg->status |= CRenderTarget::TS_Resolved; - - if (conf.settings().no_depth_update || conf.settings().gust) - { - if (conf.settings().gust) - { - if (range_size > 0x40000) - { - ptarg->status |= CRenderTarget::TS_NeedUpdate; - return; - } - /*else - { - ZZLog::WriteLn("FlushTransferRange: Gust Hack - No update!"); - }*/ - } - - if (conf.settings().no_depth_update) - { - if (!ptarg->IsDepth() || range_size > 0x1000) - { - ptarg->status |= CRenderTarget::TS_NeedUpdate; - return; - } - } - } - else - { - ptarg->status |= CRenderTarget::TS_NeedUpdate; - } - } -} - -void FlushTransferRanges(const tex0Info* ptex) -{ - FUNCLOG - assert(s_RangeMngr.ranges.size() > 0); - //bool bHasFlushed = false; - list listTransmissionUpdateTargs; - - int texstart = -1, texend = -1; - - if (ptex != NULL) // If ptex is NULL, texstart & texend will be -1. - { - GetRectMemAddressZero(texstart, texend, ptex->psm, ptex->tw, ptex->th, ptex->tbp0, ptex->tbw); - } - - for (vector::iterator itrange = s_RangeMngr.ranges.begin(); itrange != s_RangeMngr.ranges.end(); ++itrange) - { - - int start = itrange->start; - int end = itrange->end; - - listTransmissionUpdateTargs.clear(); - listTransmissionUpdateTargs = CreateTargetsList(start, end); - - for (list::iterator it = listTransmissionUpdateTargs.begin(); it != listTransmissionUpdateTargs.end(); ++it) - { - CRenderTarget* ptarg = *it; - - if ((ptarg->status & CRenderTarget::TS_Virtual)) continue; - FlushTransferRange(ptarg, start, end, texstart, texend); - } - - g_MemTargs.ClearRange(start, end); - } - - s_RangeMngr.Clear(); -} - - -#if 0 -// I removed some code here that wasn't getting called. The old versions #if'ed out below this. -#define RESOLVE_32_BIT(PSM, T, Tsrc, convfn) \ - { \ - u32 mask, imask; \ - \ - if (PSMT_ISHALF(psm)) /* 16 bit */ \ - {\ - /* mask is shifted*/ \ - imask = RGBA32to16(fbm);\ - mask = (~imask)&0xffff;\ - }\ - else \ - {\ - mask = ~fbm;\ - imask = fbm;\ - }\ - \ - Tsrc* src = (Tsrc*)(psrc); \ - T* pPageOffset = (T*)g_pbyGSMemory + fbp*(256/sizeof(T)), *dst; \ - int maxfbh = (MEMORY_END-fbp*256) / (sizeof(T) * fbw); \ - if( maxfbh > fbh ) maxfbh = fbh; \ - \ - for(int i = 0; i < maxfbh; ++i) { \ - for(int j = 0; j < fbw; ++j) { \ - T dsrc = convfn(src[RW(j)]); \ - dst = pPageOffset + getPixelAddress##PSM##_0(j, i, fbw); \ - *dst = (dsrc & mask) | (*dst & imask); \ - } \ - src += RH(Pitch(fbw))/sizeof(Tsrc); \ - } \ - } \ - -#endif - -#ifdef __linux__ -//#define LOG_RESOLVE_PROFILE -#endif - -template -inline void Resolve_32_Bit(const void* psrc, int fbp, int fbw, int fbh, const int psm, u32 fbm) -{ - u32 mask, imask; -#ifdef LOG_RESOLVE_PROFILE - u32 startime = timeGetPreciseTime(); -#endif - - if (PSMT_ISHALF(psm)) /* 16 bit */ - { - /* mask is shifted*/ - imask = RGBA32to16(fbm); - mask = (~imask)&0xffff; - } - else - { - mask = ~fbm; - imask = fbm; - } - - Tdst* pPageOffset = (Tdst*)g_pbyGSMemory + fbp*(256/sizeof(Tdst)); - Tdst* dst; - Tdst dsrc; - - int maxfbh = (MEMORY_END-fbp*256) / (sizeof(Tdst) * fbw); - if( maxfbh > fbh ) maxfbh = fbh; - -#ifdef LOG_RESOLVE_PROFILE - ZZLog::Dev_Log("*** Resolve 32 bits: %dx%d in %x", maxfbh, fbw, psm); -#endif - - // Start the src array at the end to reduce testing in loop - u32 raw_size = RH(Pitch(fbw))/sizeof(u32); - u32* src = (u32*)(psrc) + (maxfbh-1)*raw_size; - - for(int i = maxfbh-1; i >= 0; --i) { - for(int j = fbw-1; j >= 0; --j) { - if (do_conversion) { - dsrc = RGBA32to16(src[RW(j)]); - } else { - dsrc = (Tdst)src[RW(j)]; - } - // They are 3 methods to call the functions - // macro (compact, inline) but need a nice psm ; swich (inline) ; function pointer (compact) - // Use a switch to allow inlining of the getPixel function. - // Note: psm is const so the switch is completely optimized - // Function method example: - // dst = pPageOffset + getPixelFun_0[psm](j, i, fbw); - switch (psm) - { - case PSMCT32: - case PSMCT24: - dst = pPageOffset + getPixelAddress32_0(j, i, fbw); - break; - - case PSMCT16: - dst = pPageOffset + getPixelAddress16_0(j, i, fbw); - break; - - case PSMCT16S: - dst = pPageOffset + getPixelAddress16S_0(j, i, fbw); - break; - - case PSMT32Z: - case PSMT24Z: - dst = pPageOffset + getPixelAddress32Z_0(j, i, fbw); - break; - - case PSMT16Z: - dst = pPageOffset + getPixelAddress16Z_0(j, i, fbw); - break; - - case PSMT16SZ: - dst = pPageOffset + getPixelAddress16SZ_0(j, i, fbw); - break; - } - *dst = (dsrc & mask) | (*dst & imask); - } - src -= raw_size; - } -#ifdef LOG_RESOLVE_PROFILE - ZZLog::Dev_Log("*** 32 bits: execution time %d", timeGetPreciseTime()-startime); -#endif -} - -static const __aligned16 unsigned int pixel_5b_mask[4] = {0x0000001F, 0x0000001F, 0x0000001F, 0x0000001F}; - -#ifdef ZEROGS_SSE2 -// The function process 2*2 pixels in 32bits. And 2*4 pixels in 16bits -template -__forceinline void update_8pixels_sse2(u32* src, u32* basepage, u32 i_msk, u32 j, u32 pix_mask, u32 src_pitch) -{ - u32* base_ptr; - __m128i pixels_0; - __m128i pixel_0_low; - __m128i pixel_0_high; - - __m128i pixels_1; - __m128i pixel_1_low; - __m128i pixel_1_high; - - assert((i_msk&0x1) == 0); // Failure => wrong line selected - - // Note: pixels have a special arrangement in column. Here a short description when AA.x = 0 - // - // 32 bits format: 8x2 pixels: the idea is to read pixels 0-3 - // It is easier to process 4 bits (we can not cross column bondary) - // 0 1 4 5 8 9 12 13 - // 2 3 6 7 10 11 14 15 - // - // 16 bits format: 16x2 pixels, each pixels have a lower and higher part. - // Here the idea to read 0L-3L & 0H-3H to combine lower and higher part this avoid - // data interleaving and useless read/write - // 0L 1L 4L 5L 8L 9L 12L 13L 0H 1H 4H 5H 8H 9H 12H 13H - // 2L 3L 6L 7L 10L 11L 14L 15L 2H 3H 6H 7H 10H 11H 14H 15H - // - if (AA.x == 2) { - // Note: pixels (32bits) are stored like that: - // p0 p0 p0 p0 p1 p1 p1 p1 p4 p4 p4 p4 p5 p5 p5 p5 - // ... - // p2 p2 p2 p2 p3 p3 p3 p3 p6 p6 p6 p6 p7 p7 p7 p7 - base_ptr = &src[((j+INDEX)<<2)]; - pixel_0_low = _mm_loadl_epi64((__m128i*)(base_ptr + 3)); - if (!null_second_line) pixel_0_high = _mm_loadl_epi64((__m128i*)(base_ptr + 3 + src_pitch)); - - if (PSMT_ISHALF(psm)) { - pixel_1_low = _mm_loadl_epi64((__m128i*)(base_ptr + 3 + 32)); - if (!null_second_line) pixel_1_high = _mm_loadl_epi64((__m128i*)(base_ptr + 3 + 32 + src_pitch)); - } - } else if(AA.x ==1) { - // Note: pixels (32bits) are stored like that: - // p0 p0 p1 p1 p4 p4 p5 p5 - // ... - // p2 p2 p3 p3 p6 p6 p7 p7 - base_ptr = &src[((j+INDEX)<<1)]; - pixel_0_low = _mm_loadl_epi64((__m128i*)(base_ptr + 1)); - if (!null_second_line) pixel_0_high = _mm_loadl_epi64((__m128i*)(base_ptr + 1 + src_pitch)); - - if (PSMT_ISHALF(psm)) { - pixel_1_low = _mm_loadl_epi64((__m128i*)(base_ptr + 1 + 16)); - if (!null_second_line) pixel_1_high = _mm_loadl_epi64((__m128i*)(base_ptr + 1 + 16 + src_pitch)); - } - } else { - // Note: pixels (32bits) are stored like that: - // p0 p1 p4 p5 - // p2 p3 p6 p7 - base_ptr = &src[(j+INDEX)]; - pixel_0_low = _mm_loadl_epi64((__m128i*)base_ptr); - if (!null_second_line) pixel_0_high = _mm_loadl_epi64((__m128i*)(base_ptr + src_pitch)); - - if (PSMT_ISHALF(psm)) { - pixel_1_low = _mm_loadl_epi64((__m128i*)(base_ptr + 8)); - if (!null_second_line) pixel_1_high = _mm_loadl_epi64((__m128i*)(base_ptr + 8 + src_pitch)); - } - } - - // 2nd line does not exist... Just duplicate the pixel value - if(null_second_line) { - pixel_0_high = pixel_0_low; - if (PSMT_ISHALF(psm)) pixel_1_high = pixel_1_low; - } - - // Merge the 2 dword - pixels_0 = _mm_unpacklo_epi64(pixel_0_low, pixel_0_high); - if (PSMT_ISHALF(psm)) pixels_1 = _mm_unpacklo_epi64(pixel_1_low, pixel_1_high); - - // transform pixel from ARGB:8888 to ARGB:1555 - if (psm == PSMCT16 || psm == PSMCT16S) { - // shift pixel instead of the mask. It allow to keep 1 mask into a register - // instead of 4 (not enough room on x86...). - __m128i pixel_mask = _mm_load_si128((__m128i*)pixel_5b_mask); - - __m128i pixel_0_B = _mm_srli_epi32(pixels_0, 3); - pixel_0_B = _mm_and_si128(pixel_0_B, pixel_mask); - - __m128i pixel_0_G = _mm_srli_epi32(pixels_0, 11); - pixel_0_G = _mm_and_si128(pixel_0_G, pixel_mask); - - __m128i pixel_0_R = _mm_srli_epi32(pixels_0, 19); - pixel_0_R = _mm_and_si128(pixel_0_R, pixel_mask); - - // Note: because of the logical shift we do not need to mask the value - __m128i pixel_0_A = _mm_srli_epi32(pixels_0, 31); - - // Realignment of pixels - pixel_0_A = _mm_slli_epi32(pixel_0_A, 15); - pixel_0_R = _mm_slli_epi32(pixel_0_R, 10); - pixel_0_G = _mm_slli_epi32(pixel_0_G, 5); - - // rebuild a complete pixel - pixels_0 = _mm_or_si128(pixel_0_A, pixel_0_B); - pixels_0 = _mm_or_si128(pixels_0, pixel_0_G); - pixels_0 = _mm_or_si128(pixels_0, pixel_0_R); - - // do the same for pixel_1 - __m128i pixel_1_B = _mm_srli_epi32(pixels_1, 3); - pixel_1_B = _mm_and_si128(pixel_1_B, pixel_mask); - - __m128i pixel_1_G = _mm_srli_epi32(pixels_1, 11); - pixel_1_G = _mm_and_si128(pixel_1_G, pixel_mask); - - __m128i pixel_1_R = _mm_srli_epi32(pixels_1, 19); - pixel_1_R = _mm_and_si128(pixel_1_R, pixel_mask); - - __m128i pixel_1_A = _mm_srli_epi32(pixels_1, 31); - - // Realignment of pixels - pixel_1_A = _mm_slli_epi32(pixel_1_A, 15); - pixel_1_R = _mm_slli_epi32(pixel_1_R, 10); - pixel_1_G = _mm_slli_epi32(pixel_1_G, 5); - - // rebuild a complete pixel - pixels_1 = _mm_or_si128(pixel_1_A, pixel_1_B); - pixels_1 = _mm_or_si128(pixels_1, pixel_1_G); - pixels_1 = _mm_or_si128(pixels_1, pixel_1_R); - } - - // Move the pixels to higher parts and merge it with pixels_0 - if (PSMT_ISHALF(psm)) { - pixels_1 = _mm_slli_epi32(pixels_1, 16); - pixels_0 = _mm_or_si128(pixels_0, pixels_1); - } - - // Status 16 bits - // pixels_0 = p3H p3L p2H p2L p1H p1L p0H p0L - // Status 32 bits - // pixels_0 = p3 p2 p1 p0 - - // load the destination add - u32* dst_add; - if (PSMT_ISHALF(psm)) - dst_add = basepage + (pageTable[i_msk][(INDEX)] >> 1); - else - dst_add = basepage + pageTable[i_msk][(INDEX)]; - - // Save some memory access when pix_mask is 0. - if (pix_mask) { - // Build fbm mask (tranform a u32 to a 4 packets u32) - // In 16 bits texture one packet is "0000 DATA" - __m128i imask = _mm_cvtsi32_si128(pix_mask); - imask = _mm_shuffle_epi32(imask, 0); - - // apply the mask on new values - pixels_0 = _mm_andnot_si128(imask, pixels_0); - - __m128i old_pixels_0; - __m128i final_pixels_0; - - old_pixels_0 = _mm_and_si128(imask, _mm_load_si128((__m128i*)dst_add)); - final_pixels_0 = _mm_or_si128(old_pixels_0, pixels_0); - - _mm_store_si128((__m128i*)dst_add, final_pixels_0); - } else { - // Note: because we did not read the previous value of add. We could bypass the cache. - // We gains a few percents - _mm_stream_si128((__m128i*)dst_add, pixels_0); - } - -} - -// Update 2 lines of a page (2*64 pixels) -template -__forceinline void update_pixels_row_sse2(u32* src, u32* basepage, u32 i_msk, u32 j, u32 pix_mask, u32 raw_size) -{ - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - - if(!PSMT_ISHALF(psm)) { - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } - - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - - if(!PSMT_ISHALF(psm)) { - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } - - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - - if(!PSMT_ISHALF(psm)) { - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } - - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - - if(!PSMT_ISHALF(psm)) { - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - update_8pixels_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } -} - -template -void Resolve_32_Bit_sse2(const void* psrc, int fbp, int fbw, int fbh, u32 fbm) -{ - // Note a basic implementation was done in Resolve_32_Bit function -#ifdef LOG_RESOLVE_PROFILE - u32 startime = timeGetPreciseTime(); -#endif - u32 pix_mask; - if (PSMT_ISHALF(psm)) /* 16 bit format */ - { - /* Use 2 16bits mask */ - u32 pix16_mask = RGBA32to16(fbm); - pix_mask = (pix16_mask<<16) | pix16_mask; - } - else - pix_mask = fbm; - - // Note GS register: frame_register__fbp is specified in units of the 32 bits address divided by 2048 - // fbp is stored as 32*frame_register__fbp - u32* pPageOffset = (u32*)g_pbyGSMemory + (fbp/32)*2048; - - int maxfbh; - int memory_space = MEMORY_END-(fbp/32)*2048*4; - if (PSMT_ISHALF(psm)) - maxfbh = memory_space / (2*fbw); - else - maxfbh = memory_space / (4*fbw); - - if( maxfbh > fbh ) maxfbh = fbh; - -#ifdef LOG_RESOLVE_PROFILE - ZZLog::Dev_Log("*** Resolve 32 to 32 bits: %dx%d. Frame Mask %x. Format %x", maxfbh, fbw, pix_mask, psm); -#endif - - // Start the src array at the end to reduce testing in loop - // If maxfbh is odd, proces maxfbh -1 alone and then go back to maxfbh -3 - u32 raw_size = RH(Pitch(fbw))/sizeof(u32); - u32* src; - if (maxfbh&0x1) { - ZZLog::Dev_Log("*** Warning resolve 32bits have an odd number of lines"); - - // decrease maxfbh to process the bottom line (maxfbh-1) - maxfbh--; - - src = (u32*)(psrc) + maxfbh*raw_size; - u32 i_msk = maxfbh & (size-1); - // Note fbw is a multiple of 64. So you can unroll the loop 64 times - for(int j = (fbw - 64); j >= 0; j -= 64) { - u32* basepage = pPageOffset + ((maxfbh/size) * (fbw/64) + (j/64)) * 2048; - update_pixels_row_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } - // realign the src pointer to process others lines - src -= 2*raw_size; - } else { - // Because we process 2 lines at once go back to maxfbh-2. - src = (u32*)(psrc) + (maxfbh-2)*raw_size; - } - - // Note i must be even for the update_8pixels functions - assert((maxfbh&0x1) == 0); - for(int i = (maxfbh-2); i >= 0; i -= 2) { - u32 i_msk = i & (size-1); - // Note fbw is a multiple of 64. So you can unroll the loop 64 times - for(int j = (fbw - 64); j >= 0; j -= 64) { - u32* basepage = pPageOffset + ((i/size) * (fbw/64) + (j/64)) * 2048; - update_pixels_row_sse2(src, basepage, i_msk, j, pix_mask, raw_size); - } - - // Note update_8pixels process 2 lines at onces hence the factor 2 - src -= 2*raw_size; - } - - if(!pix_mask) { - // Ensure that previous (out of order) write are done. It must be done after non temporal instruction - // (or *_stream_* intrinsic) - _mm_sfence(); - } - -#ifdef LOG_RESOLVE_PROFILE - ZZLog::Dev_Log("*** 32 bits: execution time %d", timeGetPreciseTime()-startime); -#endif -} -#endif - -void _Resolve(const void* psrc, int fbp, int fbw, int fbh, int psm, u32 fbm, bool mode = true) -{ - FUNCLOG - - int start, end; - - s_nResolved += 2; - - // align the rect to the nearest page - // note that fbp is always aligned on page boundaries - GetRectMemAddressZero(start, end, psm, fbw, fbh, fbp, fbw); - - // Comment this to restore the previous resolve_32 version -#define OPTI_RESOLVE_32 - // start the conversion process A8R8G8B8 -> psm - switch (psm) - { - - // NOTE pass psm as a constant value otherwise gcc does not do its job. It keep - // the psm switch in Resolve_32_Bit - case PSMCT32: - case PSMCT24: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMCT32, fbm); -#endif - break; - - case PSMCT16: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMCT16, fbm); -#endif - break; - - case PSMCT16S: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMCT16S, fbm); -#endif - break; - - case PSMT32Z: - case PSMT24Z: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMT32Z, fbm); -#endif - break; - - case PSMT16Z: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMT16Z, fbm); -#endif - break; - - case PSMT16SZ: -#if defined(ZEROGS_SSE2) && defined(OPTI_RESOLVE_32) - Resolve_32_Bit_sse2(psrc, fbp, fbw, fbh, fbm); -#else - Resolve_32_Bit(psrc, fbp, fbw, fbh, PSMT16SZ, fbm); -#endif - break; - } - - g_MemTargs.ClearRange(start, end); - - INC_RESOLVE(); -} - -// Leaving this code in for reference for the moment. -#if 0 -void _Resolve(const void* psrc, int fbp, int fbw, int fbh, int psm, u32 fbm, bool mode) -{ - FUNCLOG - //GL_REPORT_ERRORD(); - s_nResolved += 2; - - // align the rect to the nearest page - // note that fbp is always aligned on page boundaries - int start, end; - GetRectMemAddressZero(start, end, psm, fbw, fbh, fbp, fbw); - - int i, j; - //short smask1 = gs.smask&1; - //short smask2 = gs.smask&2; - u32 mask, imask; - - if (PSMT_ISHALF(psm)) // 16 bit - { - // mask is shifted - imask = RGBA32to16(fbm); - mask = (~imask) & 0xffff; - } - else - { - mask = ~fbm; - imask = fbm; - - if ((psm&0xf) > 0 && 0) - { - // preserve the alpha? - mask &= 0x00ffffff; - imask |= 0xff000000; - } - } - - // Targets over 2000 should be shuffle. FFX and KH2 (0x2100) - int X = (psm == 0) ? 0 : 0; - -//if (X == 1) -//ZZLog::Error_Log("resolve: %x %x %x %x (%x-%x).", psm, fbp, fbw, fbh, start, end); - - -#define RESOLVE_32BIT(psm, T, Tsrc, blockbits, blockwidth, blockheight, convfn, frame, aax, aay) \ - { \ - Tsrc* src = (Tsrc*)(psrc); \ - T* pPageOffset = (T*)g_pbyGSMemory + fbp*(256/sizeof(T)), *dst; \ - int srcpitch = Pitch(fbw) * blockheight/sizeof(Tsrc); \ - int maxfbh = (MEMORY_END-fbp*256) / (sizeof(T) * fbw); \ - if( maxfbh > fbh ) maxfbh = fbh; \ - for(i = 0; i < (maxfbh&~(blockheight-1))*X; i += blockheight) { \ - /*if( smask2 && (i&1) == smask1 ) continue; */ \ - for(j = 0; j < fbw; j += blockwidth) { \ - /* have to write in the tiled format*/ \ - frame##SwizzleBlock##blockbits(pPageOffset + getPixelAddress##psm##_0(j, i, fbw), \ - src+RW(j), Pitch(fbw)/sizeof(Tsrc), mask); \ - } \ - src += RH(srcpitch); \ - } \ - for(; i < maxfbh; ++i) { \ - for(j = 0; j < fbw; ++j) { \ - T dsrc = convfn(src[RW(j)]); \ - dst = pPageOffset + getPixelAddress##psm##_0(j, i, fbw); \ - *dst = (dsrc & mask) | (*dst & imask); \ - } \ - src += RH(Pitch(fbw))/sizeof(Tsrc); \ - } \ - } \ - - if( GetRenderFormat() == RFT_byte8 ) { - // start the conversion process A8R8G8B8 -> psm - switch (psm) - { - - case PSMCT32: - - case PSMCT24: - - if (AA.y) - { - RESOLVE_32BIT(32, u32, u32, 32A4, 8, 8, (u32), Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(32, u32, u32, 32A2, 8, 8, (u32), Frame, 1, 0); - } - else - { - RESOLVE_32BIT(32, u32, u32, 32, 8, 8, (u32), Frame, 0, 0); - } - - break; - - case PSMCT16: - - if (AA.y) - { - RESOLVE_32BIT(16, u16, u32, 16A4, 16, 8, RGBA32to16, Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(16, u16, u32, 16A2, 16, 8, RGBA32to16, Frame, 1, 0); - } - else - { - RESOLVE_32BIT(16, u16, u32, 16, 16, 8, RGBA32to16, Frame, 0, 0); - } - - break; - - case PSMCT16S: - - if (AA.y) - { - RESOLVE_32BIT(16S, u16, u32, 16A4, 16, 8, RGBA32to16, Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(16S, u16, u32, 16A2, 16, 8, RGBA32to16, Frame, 1, 0); - } - else - { - RESOLVE_32BIT(16S, u16, u32, 16, 16, 8, RGBA32to16, Frame, 0, 0); - } - - break; - - case PSMT32Z: - - case PSMT24Z: - - if (AA.y) - { - RESOLVE_32BIT(32Z, u32, u32, 32A4, 8, 8, (u32), Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(32Z, u32, u32, 32A2, 8, 8, (u32), Frame, 1, 0); - } - else - { - RESOLVE_32BIT(32Z, u32, u32, 32, 8, 8, (u32), Frame, 0, 0); - } - - break; - - case PSMT16Z: - - if (AA.y) - { - RESOLVE_32BIT(16Z, u16, u32, 16A4, 16, 8, (u16), Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(16Z, u16, u32, 16A2, 16, 8, (u16), Frame, 1, 0); - } - else - { - RESOLVE_32BIT(16Z, u16, u32, 16, 16, 8, (u16), Frame, 0, 0); - } - - break; - - case PSMT16SZ: - - if (AA.y) - { - RESOLVE_32BIT(16SZ, u16, u32, 16A4, 16, 8, (u16), Frame, AA.x, AA.y); - } - else if (AA.x) - { - RESOLVE_32BIT(16SZ, u16, u32, 16A2, 16, 8, (u16), Frame, 1, 0); - } - else - { - RESOLVE_32BIT(16SZ, u16, u32, 16, 16, 8, (u16), Frame, 0, 0); - } - - break; - } - } - else // float16 - { - switch (psm) - { - - case PSMCT32: - - case PSMCT24: - - if (AA.y) - { - RESOLVE_32BIT(32, u32, Vector_16F, 32A4, 8, 8, Float16ToARGB, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(32, u32, Vector_16F, 32A2, 8, 8, Float16ToARGB, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(32, u32, Vector_16F, 32, 8, 8, Float16ToARGB, Frame16, 0, 0); - } - - break; - - case PSMCT16: - - if (AA.y) - { - RESOLVE_32BIT(16, u16, Vector_16F, 16A4, 16, 8, Float16ToARGB16, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(16, u16, Vector_16F, 16A2, 16, 8, Float16ToARGB16, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(16, u16, Vector_16F, 16, 16, 8, Float16ToARGB16, Frame16, 0, 0); - } - - break; - - case PSMCT16S: - - if (AA.y) - { - RESOLVE_32BIT(16S, u16, Vector_16F, 16A4, 16, 8, Float16ToARGB16, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(16S, u16, Vector_16F, 16A2, 16, 8, Float16ToARGB16, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(16S, u16, Vector_16F, 16, 16, 8, Float16ToARGB16, Frame16, 0, 0); - } - - break; - - case PSMT32Z: - - case PSMT24Z: - - if (AA.y) - { - RESOLVE_32BIT(32Z, u32, Vector_16F, 32ZA4, 8, 8, Float16ToARGB_Z, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(32Z, u32, Vector_16F, 32ZA2, 8, 8, Float16ToARGB_Z, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(32Z, u32, Vector_16F, 32Z, 8, 8, Float16ToARGB_Z, Frame16, 0, 0); - } - - break; - - case PSMT16Z: - - if (AA.y) - { - RESOLVE_32BIT(16Z, u16, Vector_16F, 16ZA4, 16, 8, Float16ToARGB16_Z, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(16Z, u16, Vector_16F, 16ZA2, 16, 8, Float16ToARGB16_Z, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(16Z, u16, Vector_16F, 16Z, 16, 8, Float16ToARGB16_Z, Frame16, 0, 0); - } - - break; - - case PSMT16SZ: - - if (AA.y) - { - RESOLVE_32BIT(16SZ, u16, Vector_16F, 16ZA4, 16, 8, Float16ToARGB16_Z, Frame16, 1, 1); - } - else if (AA.x) - { - RESOLVE_32BIT(16SZ, u16, Vector_16F, 16ZA2, 16, 8, Float16ToARGB16_Z, Frame16, 1, 0); - } - else - { - RESOLVE_32BIT(16SZ, u16, Vector_16F, 16Z, 16, 8, Float16ToARGB16_Z, Frame16, 0, 0); - } - - break; - } - } - - g_MemTargs.ClearRange(start, end); - - INC_RESOLVE(); -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/targets.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/targets.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/targets.h 2013-06-28 10:43:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/targets.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,519 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __ZEROGS_TARGETS_H__ -#define __ZEROGS_TARGETS_H__ - -#define TARGET_VIRTUAL_KEY 0x80000000 -#include "PS2Edefs.h" -#include -#include -#include "GS.h" -#include "ZZGl.h" -//#include "ZZoglVB.h" - -#ifndef GL_TEXTURE_RECTANGLE -#define GL_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_NV -#endif - -#define VB_BUFFERSIZE 0x4000 - -extern void FlushIfNecesary(void* ptr); -extern bool g_bSaveZUpdate; - -// all textures have this width -extern int GPU_TEXWIDTH; -extern float g_fiGPU_TEXWIDTH; -#define MASKDIVISOR 0 // Used for decrement bitwise mask texture size if 1024 is too big -#define GPU_TEXMASKWIDTH (1024 >> MASKDIVISOR) // bitwise mask width for region repeat mode - -// managers render-to-texture targets -class CRenderTarget -{ - - public: - CRenderTarget(); - virtual ~CRenderTarget(); - - virtual bool Create(const frameInfo& frame); - virtual void Destroy(); - - // set the GPU_POSXY variable, scissor rect, and current render target - void SetTarget(int fbplocal, const Rect2& scissor, int context); - void SetViewport(); - - // copies/creates the feedback contents - inline void CreateFeedback() - { - if (ptexFeedback == 0 || !(status&TS_FeedbackReady)) - _CreateFeedback(); - } - - virtual void Resolve(); - virtual void Resolve(int startrange, int endrange); // resolves only in the allowed range - virtual void Update(int context, CRenderTarget* pdepth); - virtual void ConvertTo32(); // converts a psm==2 target, to a psm==0 - virtual void ConvertTo16(); // converts a psm==0 target, to a psm==2 - - virtual bool IsDepth() { return false; } - - void SetRenderTarget(int targ); - - void* psys; // system data used for comparison - u32 ptex; - - int fbp, fbw, fbh, fbhCalc; // if fbp is negative, virtual target (not mapped to any real addr) - int start, end; // in bytes - u32 lastused; // time stamp since last used - float4 vposxy; - - u32 fbm; - u16 status; - u8 psm; - u8 resv0; - Rect scissorrect; - - u8 created; // Check for object destruction/creating for r201. - - //int startresolve, endresolve; - u32 nUpdateTarg; // use this target to update the texture if non 0 (one time only) - - // this is optionally used when feedback effects are used (render target is used as a texture when rendering to itself) - u32 ptexFeedback; - - enum TargetStatus - { - TS_Resolved = 1, - TS_NeedUpdate = 2, - TS_Virtual = 4, // currently not mapped to memory - TS_FeedbackReady = 8, // feedback effect is ready and doesn't need to be updated - TS_NeedConvert32 = 16, - TS_NeedConvert16 = 32 - }; - float4 DefaultBitBltPos(); - float4 DefaultBitBltTex(); - - private: - void _CreateFeedback(); - inline bool InitialiseDefaultTexture(u32 *p_ptr, int fbw, int fbh) ; -}; - -// manages zbuffers - -class CDepthTarget : public CRenderTarget -{ - - public: - CDepthTarget(); - virtual ~CDepthTarget(); - - virtual bool Create(const frameInfo& frame); - virtual void Destroy(); - - virtual void Resolve(); - virtual void Resolve(int startrange, int endrange); // resolves only in the allowed range - virtual void Update(int context, CRenderTarget* prndr); - - virtual bool IsDepth() { return true; } - - void SetDepthStencilSurface(); - - u32 pdepth; // 24 bit, will contain the stencil buffer if possible - u32 pstencil; // if not 0, contains the stencil buffer - int icount; // internal counter -}; - -// manages contiguous chunks of memory (width is always 1024) - -class CMemoryTarget -{ - public: - struct TEXTURE - { - inline TEXTURE() : tex(0), memptr(NULL), ref(0) {} - inline ~TEXTURE() { glDeleteTextures(1, &tex); _aligned_free(memptr); } - - u32 tex; - u8* memptr; // GPU memory used for comparison - int ref; - }; - - inline CMemoryTarget() : ptex(NULL), starty(0), height(0), realy(0), realheight(0), usedstamp(0), psm(0), cpsm(0), channels(0), clearminy(0), clearmaxy(0), validatecount(0), clut(NULL), clutsize(0) {} - - inline CMemoryTarget(const CMemoryTarget& r) - { - ptex = r.ptex; - - if (ptex != NULL) ptex->ref++; - - starty = r.starty; - height = r.height; - realy = r.realy; - realheight = r.realheight; - usedstamp = r.usedstamp; - psm = r.psm; - cpsm = r.cpsm; - clut = r.clut; - clearminy = r.clearminy; - clearmaxy = r.clearmaxy; - widthmult = r.widthmult; - texH = r.texH; - texW = r.texW; - channels = r.channels; - validatecount = r.validatecount; - fmt = r.fmt; - } - - ~CMemoryTarget() { Destroy(); } - - inline void Destroy() - { - if (ptex != NULL && ptex->ref > 0) - { - if (--ptex->ref <= 0) delete ptex; - } - - ptex = NULL; - - _aligned_free(clut); - clut = NULL; - clutsize = 0; - } - - // returns true if clut data is synced - bool ValidateClut(const tex0Info& tex0); - // returns true if tex data is synced - bool ValidateTex(const tex0Info& tex0, int starttex, int endtex, bool bDeleteBadTex); - - // realy is offset in pixels from start of valid region - // so texture in memory is [realy,starty+height] - // valid texture is [starty,starty+height] - // offset in mem [starty-realy, height] - TEXTURE* ptex; // can be 16bit - - int starty, height; // assert(starty >= realy) - int realy, realheight; // this is never touched once allocated - // realy is start pointer of data in 4M data block (start) and size (end-start). - - u32 usedstamp; - u8 psm, cpsm; // texture and clut format. For psm, only 16bit/32bit differentiation matters - - u32 fmt; - - int widthmult; // Either 1 or 2. - int channels; // The number of pixels per PSM format word. channels == PIXELS_PER_WORD(psm) - // This is the real drawing size in pixels of the texture in renderbuffer. - int texW; // (realheight + widthmult - 1)/widthmult == realheight or [(realheight+1)/2] - int texH; // GPU_TEXWIDTH *widthmult * channels; - - int clearminy, clearmaxy; // when maxy > 0, need to check for clearing - - int validatecount; // count how many times has been validated, if too many, destroy - - u8* clut; // Clut texture data. Null otherwise - int clutsize; // size of the clut array. 0 otherwise -}; - -inline u32 GetFrameKey(int fbp, int fbw); - -// manages render targets -class CRenderTargetMngr -{ - public: - typedef map MAPTARGETS; - - enum TargetOptions - { - TO_DepthBuffer = 1, - TO_StrictHeight = 2, // height returned has to be the same as requested - TO_Virtual = 4 - }; - - ~CRenderTargetMngr() { Destroy(); } - - void Destroy(); - static MAPTARGETS::iterator GetOldestTarg(MAPTARGETS& m); - - bool isFound(const frameInfo& frame, MAPTARGETS::iterator& it, u32 opts, u32 key, int maxposheight); - - CRenderTarget* GetTarg(const frameInfo& frame, u32 Options, int maxposheight); - inline CRenderTarget* GetTarg(int fbp, int fbw) - { - MAPTARGETS::iterator it = mapTargets.find(GetFrameKey(fbp, fbw)); - - /* if (fbp == 0x3600 && fbw == 0x100 && it == mapTargets.end()) - { - ZZLog::Debug_Log("%x", GetFrameKey(fbp, fbw)) ; - ZZLog::Debug_Log("%x %x", fbp, fbw); - for(MAPTARGETS::iterator it1 = mapTargets.begin(); it1 != mapTargets.end(); ++it1) - ZZLog::Debug_Log("\t %x %x %x %x", it1->second->fbw, it1->second->fbh, it1->second->psm, it1->second->fbp); - }*/ - return it != mapTargets.end() ? it->second : NULL; - } - - // gets all targets with a range - void GetTargs(int start, int end, list& listTargets) const; - - // resolves all targets within a range - __forceinline void Resolve(int start, int end); - __forceinline void ResolveAll() - { - for (MAPTARGETS::iterator it = mapTargets.begin(); it != mapTargets.end(); ++it) - it->second->Resolve(); - } - - void DestroyAllTargs(int start, int end, int fbw); - void DestroyIntersecting(CRenderTarget* prndr); - - // promotes a target from virtual to real - inline CRenderTarget* Promote(u32 key) - { - assert(!(key & TARGET_VIRTUAL_KEY)); - - // promote to regular targ - CRenderTargetMngr::MAPTARGETS::iterator it = mapTargets.find(key | TARGET_VIRTUAL_KEY); - assert(it != mapTargets.end()); - - CRenderTarget* ptarg = it->second; - mapTargets.erase(it); - - DestroyIntersecting(ptarg); - - it = mapTargets.find(key); - - if (it != mapTargets.end()) - { - DestroyTarg(it->second); - it->second = ptarg; - } - else - mapTargets[key] = ptarg; - - if (conf.settings().resolve_promoted) - ptarg->status = CRenderTarget::TS_Resolved; - else - ptarg->status = CRenderTarget::TS_NeedUpdate; - - return ptarg; - } - - void DestroyTarg(CRenderTarget* ptarg); - void PrintTargets(); - MAPTARGETS mapTargets, mapDummyTargs; - private: - - void DestroyAllTargetsHelper(void* ptr); -}; - -class CMemoryTargetMngr -{ - public: - CMemoryTargetMngr() : curstamp(0) {} - - CMemoryTarget* GetMemoryTarget(const tex0Info& tex0, int forcevalidate); // pcbp is pointer to start of clut - CMemoryTarget* SearchExistTarget(int start, int end, int clutsize, const tex0Info& tex0, int forcevalidate); - CMemoryTarget* ClearedTargetsSearch(u32 fmt, int widthmult, int channels, int height); - int CompareTarget(list::iterator& it, const tex0Info& tex0, int clutsize); - - void Destroy(); // destroy all targs - - void ClearRange(int starty, int endy); // set all targets to cleared - void DestroyCleared(); // flush all cleared targes - void DestroyOldest(); - - list listTargets, listClearedTargets; - u32 curstamp; - - private: - list::iterator DestroyTargetIter(list::iterator& it); - void GetClutVariables(int& clutsize, const tex0Info& tex0); - void GetMemAddress(int& start, int& end, const tex0Info& tex0); -}; - -class CBitwiseTextureMngr -{ - public: - ~CBitwiseTextureMngr() { Destroy(); } - - void Destroy(); - - // since GetTex can delete textures to free up mem, it is dangerous if using that texture, so specify at least one other tex to save - __forceinline u32 GetTex(u32 bitvalue, u32 ptexDoNotDelete) - { - map::iterator it = mapTextures.find(bitvalue); - - if (it != mapTextures.end()) return it->second; - - return GetTexInt(bitvalue, ptexDoNotDelete); - } - - private: - u32 GetTexInt(u32 bitvalue, u32 ptexDoNotDelete); - - map mapTextures; -}; - -// manages - -class CRangeManager -{ - public: - CRangeManager() - { - ranges.reserve(16); - } - - // [start, end) - - struct RANGE - { - RANGE() {} - - inline RANGE(int start, int end) : start(start), end(end) {} - - int start, end; - }; - - // works in semi logN - void Insert(int start, int end); - void RangeSanityCheck(); - inline void Clear() - { - ranges.resize(0); - } - - vector ranges; // organized in ascending order, non-intersecting -}; - -extern CRenderTargetMngr s_RTs, s_DepthRTs; -extern CBitwiseTextureMngr s_BitwiseTextures; -extern CMemoryTargetMngr g_MemTargs; -extern CRangeManager s_RangeMngr; // manages overwritten memory - -//extern u8 s_AAx, s_AAy; -extern Point AA; - -// Real rendered width, depends on AA. -inline int RW(int tbw) -{ - return (tbw << AA.x); -} - -// Real rendered height, depends on AA. -inline int RH(int tbh) -{ - return (tbh << AA.y); -} - -/* inline void CreateTargetsList(int start, int end, list& listTargs) { - s_DepthRTs.GetTargs(start, end, listTargs); - s_RTs.GetTargs(start, end, listTargs); - }*/ - -// This pattern of functions is called 3 times, so I add creating Targets list into one. -inline list CreateTargetsList(int start, int end) -{ - list listTargs; - s_DepthRTs.GetTargs(start, end, listTargs); - s_RTs.GetTargs(start, end, listTargs); - return listTargs; -} - -extern int icurctx; -extern GLuint vboRect; - -// Unworking -#define PSMPOSITION 28 - -// Code width and height of frame into key, that used in targetmanager -// This is 3 variants of one function, Key dependant on fbp and fbw. -inline u32 GetFrameKey(const frameInfo& frame) -{ - return (((frame.fbw) << 16) | (frame.fbp)); -} - -inline u32 GetFrameKey(CRenderTarget* frame) -{ - return (((frame->fbw) << 16) | (frame->fbp)); -} - -inline u32 GetFrameKey(int fbp, int fbw) -{ - return (((fbw) << 16) | (fbp)); -} - -inline u16 ShiftHeight(int fbh, int fbp, int fbhCalc) -{ - return fbh; -} - -//#define FRAME_KEY_BY_FBH - -//FIXME: this code is for P4 and KH1. It should not be so strange! -//Dummy targets was deleted from mapTargets, but not erased. -inline u32 GetFrameKeyDummy(int fbp, int fbw, int fbh, int psm) -{ -// if (fbp > 0x2000 && ZZOgl_fbh_Calc(fbp, fbw, psm) < 0x400 && ZZOgl_fbh_Calc(fbp, fbw, psm) != fbh) -// ZZLog::Debug_Log("Z %x %x %x %x\n", fbh, fbhCalc, fbp, ZZOgl_fbh_Calc(fbp, fbw, psm)); - // height over 1024 would shrink to 1024, so dummy targets with calculated size more than 0x400 should be - // distinct by real height. But in FFX there is 3e0 height target, so I put 0x300 as limit. - -#ifndef FRAME_KEY_BY_FBH - int calc = ZZOgl_fbh_Calc(fbp, fbw, psm); - if (/*fbp > 0x2000 && */calc < /*0x300*/0x2E0) - return ((fbw << 16) | calc); - else -#endif - return ((fbw << 16) | fbh); -} - -inline u32 GetFrameKeyDummy(const frameInfo& frame) -{ - return GetFrameKeyDummy(frame.fbp, frame.fbw, frame.fbh, frame.psm); -} - -inline u32 GetFrameKeyDummy(CRenderTarget* frame) -{ - return GetFrameKeyDummy(frame->fbp, frame->fbw, frame->fbh, frame->psm); -} - -//------------------------ Inlines ------------------------- - -// Calculate maximum height for target -inline int get_maxheight(int fbp, int fbw, int psm) -{ - int ret; - - if (fbw == 0) return 0; - - ret = (((0x00100000 - 64 * fbp) / fbw) & ~0x1f); - if (PSMT_ISHALF(psm)) ret *= 2; - - return ret; -} - -// memory size for one row of texture. It depends on width of texture and number of bytes -// per pixel -inline u32 Pitch(int fbw) { return (RW(fbw) * 4) ; } - -// memory size of whole texture. It is number of rows multiplied by memory size of row -inline u32 Tex_Memory_Size(int fbw, int fbh) { return (RH(fbh) * Pitch(fbw)); } - - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Util.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Util.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Util.h 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Util.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef UTIL_H_INCLUDED -#define UTIL_H_INCLUDED - - -#ifdef _WIN32 - -#include -#include "Utilities/RedtapeWindows.h" - -//#include -//#include - -#include -#include -#include "glprocs.h" -#ifdef ZEROGS_SSE2 -#include -#endif - -#else // linux basic definitions - -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#ifdef ZEROGS_SSE2 -#include -#endif - -#endif - -#define GSdefs - -//Pcsx2Defs is included in Dependencies.h. -#include "Utilities/Dependencies.h" - -#include "CRC.h" -#include "ZZLog.h" - -#ifdef _WIN32 -// need C definitions -- no mangling please! -extern "C" u32 CALLBACK PS2EgetLibType(void); -extern "C" u32 CALLBACK PS2EgetLibVersion2(u32 type); -extern "C" char* CALLBACK PS2EgetLibName(void); -#endif - -// Allow easy copy/past between GSdx and zzogl -typedef unsigned char uint8; -typedef signed char int8; -typedef unsigned short uint16; -typedef signed short int16; -typedef unsigned int uint32; -typedef signed int int32; -typedef unsigned long long uint64; -typedef signed long long int64; - -#include "ZZoglMath.h" -#include "Profile.h" -#include "GSDump.h" - -#include "Utilities/MemcpyFast.h" - -extern wxString s_strIniPath; // Air's new (r2361) new constant for ini file path - -static inline std::string format(const char* fmt, ...) -{ - va_list args; - va_start(args, fmt); - - int result = -1, length = 256; - - char* buffer = NULL; - - while(result == -1) - { - if(buffer) delete [] buffer; - - buffer = new char[length + 1]; - - memset(buffer, 0, length + 1); - - result = vsnprintf(buffer, length, fmt, args); - - length *= 2; - } - - va_end(args); - - std::string s(buffer); - - delete [] buffer; - - return s; -} - -typedef struct -{ - int x, y, w, h; -} Rect; - -typedef struct -{ - int x, y; -} Point; - -typedef struct -{ - int w, h; -} Size; - -typedef struct -{ - int x0, y0; - int x1, y1; -} Rect2; - -typedef struct -{ - int x, y, c; -} PointC; - -enum GSWindowDim -{ - - GSDim_640 = 0, - GSDim_800, - GSDim_1024, - GSDim_1280, -}; - -typedef union -{ - struct - { - u32 fullscreen : 1; - u32 tga_snap : 1; - u32 capture_avi : 1; - u32 widescreen : 1; - u32 wireframe : 1; - u32 loaded : 1; - u32 dimensions : 2; - }; - u32 _u32; - - void ZZOptions(u32 value) { _u32 = value; } -} ZZOptions; - -typedef struct -{ - u8 mrtdepth; // write color in render target - u8 interlace; // intelacing mode 0, 1, 3-off - u8 aa; // antialiasing 0 - off, 1 - 2x, 2 - 4x, 3 - 8x, 4 - 16x - u8 bilinear; // set to enable bilinear support. 0 - off, 1 -- on, 2 -- force (use for textures that usually need it) - ZZOptions zz_options; - gameHacks hacks; // game options -- different hacks. - gameHacks def_hacks;// default game settings - int width, height; // View target size, has no impact towards speed - int x, y; // Lets try for a persistant window position. - bool isWideScreen; // Widescreen support - u32 SkipDraw; - u32 log; - u32 disableHacks; - int dump; - - void incAA() { aa++; if (aa > 4) aa = 0; } - void decAA() { aa--; if (aa > 4) aa = 4; } // u8 is unsigned, so negative value is 255. - - gameHacks settings() - { - if (disableHacks) - { - return hacks; - } - else - { - gameHacks tempHack; - tempHack._u32 = (hacks._u32 | def_hacks._u32); - return tempHack; - } - } - - bool fullscreen() { return !!(zz_options.fullscreen); } - bool wireframe() { return !!(zz_options.wireframe); } - bool widescreen() { return !!(zz_options.widescreen); } - bool captureAvi() { return !!(zz_options.capture_avi); } - bool loaded() { return !!(zz_options.loaded); } - - void setFullscreen(bool flag) - { - zz_options.fullscreen = (flag) ? 1 : 0; - } - - void setWireframe(bool flag) - { - zz_options.wireframe = (flag) ? 1 : 0; - } - - void setCaptureAvi(bool flag) - { - zz_options.capture_avi = (flag) ? 1 : 0; - } - - void setLoaded(bool flag) - { - zz_options.loaded = (flag) ? 1 : 0; - } - void set_dimensions(u32 dim) - { - switch (dim) - { - - case GSDim_640: - width = 640; - height = isWideScreen ? 360 : 480; - break; - - case GSDim_800: - width = 800; - height = isWideScreen ? 450 : 600; - break; - - case GSDim_1024: - width = 1024; - height = isWideScreen ? 576 : 768; - break; - - case GSDim_1280: - width = 1280; - height = isWideScreen ? 720 : 960; - break; - - default: - width = 800; - height = 600; - break; - } - } - -} GSconf; -extern GSconf conf; - -// ----------------------- Defines - -#define REG64(name) \ -union name \ -{ \ - u64 i64; \ - u32 ai32[2]; \ - struct { \ - -#define REG128(name)\ -union name \ -{ \ - u64 ai64[2]; \ - u32 ai32[4]; \ - struct { \ - -#define REG64_(prefix, name) REG64(prefix##name) -#define REG128_(prefix, name) REG128(prefix##name) - -#define REG_END }; }; -#define REG_END2 }; - -#define REG64_SET(name) \ -union name \ -{ \ - u64 i64; \ - u32 ai32[2]; \ - -#define REG128_SET(name)\ -union name \ -{ \ - u64 ai64[2]; \ - u32 ai32[4]; \ - -#define REG_SET_END }; - -#define FORIT(it, v) for(it = (v).begin(); it != (v).end(); ++(it)) - -extern void LoadConfig(); -extern void SaveConfig(); - -extern void (*GSirq)(); - -extern void *SysLoadLibrary(char *lib); // Loads Library -extern void *SysLoadSym(void *lib, char *sym); // Loads Symbol from Library -extern char *SysLibError(); // Gets previous error loading sysbols -extern void SysCloseLibrary(void *lib); // Closes Library -extern void SysMessage(const char *fmt, ...); - -#ifdef ZEROGS_DEVBUILD -extern char EFFECT_NAME[256]; -extern char EFFECT_DIR[256]; -extern u32 g_nGenVars, g_nTexVars, g_nAlphaVars, g_nResolve; -extern bool g_bSaveTrans, g_bUpdateEffect, g_bSaveTex, g_bSaveResolved; -#endif - -extern bool g_bDisplayFPS; // should we display FPS on screen? - -#endif // UTIL_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Conf.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Conf.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Conf.cpp 2014-07-15 01:31:44.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Conf.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include - -#include "GS.h" -#include "Win32.h" -#include "Utilities/Path.h" - -extern HINSTANCE hInst; - - -void SaveConfig() -{ - wxChar szValue[256]; - const wxString iniFile(Path::Combine(s_strIniPath, L"zzogl-pg.ini")); - - wxSprintf(szValue, L"%u", conf.interlace); - WritePrivateProfileString(L"Settings", L"Interlace", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.aa); - WritePrivateProfileString(L"Settings", L"Antialiasing", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.bilinear); - WritePrivateProfileString(L"Settings", L"Bilinear", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.zz_options); - WritePrivateProfileString(L"Settings", L"ZZOptions", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.hacks._u32); - WritePrivateProfileString(L"Settings", L"AdvancedOptions", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.width); - WritePrivateProfileString(L"Settings", L"Width", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.height); - WritePrivateProfileString(L"Settings", L"Height", szValue, iniFile); - wxSprintf(szValue, L"%u", conf.SkipDraw); - WritePrivateProfileString(L"Settings", L"SkipDraw", szValue, iniFile); -} - -void LoadConfig() -{ - wxChar szValue[256]; - const wxString iniFile(Path::Combine(s_strIniPath, L"zzogl-pg.ini")); - - memset(&conf, 0, sizeof(conf)); - conf.interlace = 0; // on, mode 1 - conf.mrtdepth = 1; - conf.zz_options._u32 = 0; - conf.hacks._u32 = 0; - conf.bilinear = 1; - conf.width = 640; - conf.height = 480; - conf.SkipDraw = 0; - conf.disableHacks = 0; - - FILE *fp = wxFopen(iniFile, L"rt"); - - if (!fp) - { - SysMessage("Unable to open ZZOgl-PG's ini file!"); - CreateDirectory(s_strIniPath, NULL); - SaveConfig();//save and return - return ; - } - - fclose(fp); - - GetPrivateProfileString(L"Settings", L"Interlace", NULL, szValue, 20, iniFile); - conf.interlace = (u8)wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"Antialiasing", NULL, szValue, 20, iniFile); - conf.aa = (u8)wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"ZZOptions", NULL, szValue, 20, iniFile); - conf.zz_options._u32 = wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"AdvancedOptions", NULL, szValue, 20, iniFile); - conf.hacks._u32 = wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"Bilinear", NULL, szValue, 20, iniFile); - conf.bilinear = (u8)wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"Width", NULL, szValue, 20, iniFile); - conf.width = wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"Height", NULL, szValue, 20, iniFile); - conf.height = wxStrtoul(szValue, NULL, 10); - GetPrivateProfileString(L"Settings", L"SkipDraw", NULL, szValue, 20, iniFile); - conf.SkipDraw = wxStrtoul(szValue, NULL, 10); - - if (conf.aa < 0 || conf.aa > 4) conf.aa = 0; - - conf.isWideScreen = (conf.widescreen() != 0); - - switch (conf.zz_options.dimensions) - { - case GSDim_640: - conf.width = 640; - conf.height = conf.isWideScreen ? 360 : 480; - break; - - case GSDim_800: - conf.width = 800; - conf.height = conf.isWideScreen ? 450 : 600; - break; - - case GSDim_1024: - conf.width = 1024; - conf.height = conf.isWideScreen ? 576 : 768; - break; - - case GSDim_1280: - conf.width = 1280; - conf.height = conf.isWideScreen ? 720 : 960; - break; - } - - // turn off all hacks by default - conf.setWireframe(false); - conf.setCaptureAvi(false); - conf.setLoaded(true); - - if (conf.width <= 0 || conf.height <= 0) - { - conf.width = 640; - conf.height = 480; - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/wglext.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/wglext.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/wglext.h 2010-04-25 00:31:27.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/wglext.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,813 +0,0 @@ -#ifndef __wglext_h_ -#define __wglext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -/* Header file version number */ -/* wglext.h last updated 2009/03/03 */ -/* Current version at http://www.opengl.org/registry/ */ -#define WGL_WGLEXT_VERSION 12 - -#ifndef WGL_ARB_buffer_region -#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 -#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 -#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 -#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 -#endif - -#ifndef WGL_ARB_multisample -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 -#endif - -#ifndef WGL_ARB_extensions_string -#endif - -#ifndef WGL_ARB_pixel_format -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_DRAW_TO_BITMAP_ARB 0x2002 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_NEED_PALETTE_ARB 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 -#define WGL_SWAP_METHOD_ARB 0x2007 -#define WGL_NUMBER_OVERLAYS_ARB 0x2008 -#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 -#define WGL_TRANSPARENT_ARB 0x200A -#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 -#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 -#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 -#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A -#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B -#define WGL_SHARE_DEPTH_ARB 0x200C -#define WGL_SHARE_STENCIL_ARB 0x200D -#define WGL_SHARE_ACCUM_ARB 0x200E -#define WGL_SUPPORT_GDI_ARB 0x200F -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_RED_SHIFT_ARB 0x2016 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_GREEN_SHIFT_ARB 0x2018 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_BLUE_SHIFT_ARB 0x201A -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ALPHA_SHIFT_ARB 0x201C -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_SWAP_EXCHANGE_ARB 0x2028 -#define WGL_SWAP_COPY_ARB 0x2029 -#define WGL_SWAP_UNDEFINED_ARB 0x202A -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C -#endif - -#ifndef WGL_ARB_make_current_read -#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 -#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 -#endif - -#ifndef WGL_ARB_pbuffer -#define WGL_DRAW_TO_PBUFFER_ARB 0x202D -#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E -#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 -#define WGL_PBUFFER_LARGEST_ARB 0x2033 -#define WGL_PBUFFER_WIDTH_ARB 0x2034 -#define WGL_PBUFFER_HEIGHT_ARB 0x2035 -#define WGL_PBUFFER_LOST_ARB 0x2036 -#endif - -#ifndef WGL_ARB_render_texture -#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 -#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 -#define WGL_TEXTURE_FORMAT_ARB 0x2072 -#define WGL_TEXTURE_TARGET_ARB 0x2073 -#define WGL_MIPMAP_TEXTURE_ARB 0x2074 -#define WGL_TEXTURE_RGB_ARB 0x2075 -#define WGL_TEXTURE_RGBA_ARB 0x2076 -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 -#define WGL_TEXTURE_1D_ARB 0x2079 -#define WGL_TEXTURE_2D_ARB 0x207A -#define WGL_MIPMAP_LEVEL_ARB 0x207B -#define WGL_CUBE_MAP_FACE_ARB 0x207C -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 -#define WGL_FRONT_LEFT_ARB 0x2083 -#define WGL_FRONT_RIGHT_ARB 0x2084 -#define WGL_BACK_LEFT_ARB 0x2085 -#define WGL_BACK_RIGHT_ARB 0x2086 -#define WGL_AUX0_ARB 0x2087 -#define WGL_AUX1_ARB 0x2088 -#define WGL_AUX2_ARB 0x2089 -#define WGL_AUX3_ARB 0x208A -#define WGL_AUX4_ARB 0x208B -#define WGL_AUX5_ARB 0x208C -#define WGL_AUX6_ARB 0x208D -#define WGL_AUX7_ARB 0x208E -#define WGL_AUX8_ARB 0x208F -#define WGL_AUX9_ARB 0x2090 -#endif - -#ifndef WGL_ARB_pixel_format_float -#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 -#endif - -#ifndef WGL_ARB_create_context -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define ERROR_INVALID_VERSION_ARB 0x2095 -#endif - -#ifndef WGL_EXT_make_current_read -#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 -#endif - -#ifndef WGL_EXT_pixel_format -#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 -#define WGL_DRAW_TO_WINDOW_EXT 0x2001 -#define WGL_DRAW_TO_BITMAP_EXT 0x2002 -#define WGL_ACCELERATION_EXT 0x2003 -#define WGL_NEED_PALETTE_EXT 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 -#define WGL_SWAP_METHOD_EXT 0x2007 -#define WGL_NUMBER_OVERLAYS_EXT 0x2008 -#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 -#define WGL_TRANSPARENT_EXT 0x200A -#define WGL_TRANSPARENT_VALUE_EXT 0x200B -#define WGL_SHARE_DEPTH_EXT 0x200C -#define WGL_SHARE_STENCIL_EXT 0x200D -#define WGL_SHARE_ACCUM_EXT 0x200E -#define WGL_SUPPORT_GDI_EXT 0x200F -#define WGL_SUPPORT_OPENGL_EXT 0x2010 -#define WGL_DOUBLE_BUFFER_EXT 0x2011 -#define WGL_STEREO_EXT 0x2012 -#define WGL_PIXEL_TYPE_EXT 0x2013 -#define WGL_COLOR_BITS_EXT 0x2014 -#define WGL_RED_BITS_EXT 0x2015 -#define WGL_RED_SHIFT_EXT 0x2016 -#define WGL_GREEN_BITS_EXT 0x2017 -#define WGL_GREEN_SHIFT_EXT 0x2018 -#define WGL_BLUE_BITS_EXT 0x2019 -#define WGL_BLUE_SHIFT_EXT 0x201A -#define WGL_ALPHA_BITS_EXT 0x201B -#define WGL_ALPHA_SHIFT_EXT 0x201C -#define WGL_ACCUM_BITS_EXT 0x201D -#define WGL_ACCUM_RED_BITS_EXT 0x201E -#define WGL_ACCUM_GREEN_BITS_EXT 0x201F -#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 -#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 -#define WGL_DEPTH_BITS_EXT 0x2022 -#define WGL_STENCIL_BITS_EXT 0x2023 -#define WGL_AUX_BUFFERS_EXT 0x2024 -#define WGL_NO_ACCELERATION_EXT 0x2025 -#define WGL_GENERIC_ACCELERATION_EXT 0x2026 -#define WGL_FULL_ACCELERATION_EXT 0x2027 -#define WGL_SWAP_EXCHANGE_EXT 0x2028 -#define WGL_SWAP_COPY_EXT 0x2029 -#define WGL_SWAP_UNDEFINED_EXT 0x202A -#define WGL_TYPE_RGBA_EXT 0x202B -#define WGL_TYPE_COLORINDEX_EXT 0x202C -#endif - -#ifndef WGL_EXT_pbuffer -#define WGL_DRAW_TO_PBUFFER_EXT 0x202D -#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E -#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 -#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 -#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 -#define WGL_PBUFFER_LARGEST_EXT 0x2033 -#define WGL_PBUFFER_WIDTH_EXT 0x2034 -#define WGL_PBUFFER_HEIGHT_EXT 0x2035 -#endif - -#ifndef WGL_EXT_depth_float -#define WGL_DEPTH_FLOAT_EXT 0x2040 -#endif - -#ifndef WGL_3DFX_multisample -#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 -#define WGL_SAMPLES_3DFX 0x2061 -#endif - -#ifndef WGL_EXT_multisample -#define WGL_SAMPLE_BUFFERS_EXT 0x2041 -#define WGL_SAMPLES_EXT 0x2042 -#endif - -#ifndef WGL_I3D_digital_video_control -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 -#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 -#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 -#endif - -#ifndef WGL_I3D_gamma -#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E -#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F -#endif - -#ifndef WGL_I3D_genlock -#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 -#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045 -#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046 -#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047 -#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 -#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 -#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A -#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B -#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C -#endif - -#ifndef WGL_I3D_image_buffer -#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 -#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 -#endif - -#ifndef WGL_I3D_swap_frame_lock -#endif - -#ifndef WGL_NV_render_depth_texture -#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 -#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 -#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 -#define WGL_DEPTH_COMPONENT_NV 0x20A7 -#endif - -#ifndef WGL_NV_render_texture_rectangle -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 -#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 -#endif - -#ifndef WGL_ATI_pixel_format_float -#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 -#endif - -#ifndef WGL_NV_float_buffer -#define WGL_FLOAT_COMPONENTS_NV 0x20B0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 -#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 -#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 -#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 -#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 -#endif - -#ifndef WGL_3DL_stereo_control -#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 -#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 -#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 -#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 -#endif - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 -#endif - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 -#endif - -#ifndef WGL_NV_present_video -#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 -#endif - -#ifndef WGL_NV_video_out -#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 -#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 -#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 -#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 -#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 -#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 -#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define WGL_VIDEO_OUT_FRAME 0x20C8 -#define WGL_VIDEO_OUT_FIELD_1 0x20C9 -#define WGL_VIDEO_OUT_FIELD_2 0x20CA -#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB -#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC -#endif - -#ifndef WGL_NV_swap_group -#endif - -#ifndef WGL_NV_gpu_affinity -#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 -#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 -#endif - -#ifndef WGL_AMD_gpu_association -#define WGL_GPU_VENDOR_AMD 0x1F00 -#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 -#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define WGL_GPU_RAM_AMD 0x21A3 -#define WGL_GPU_CLOCK_AMD 0x21A4 -#define WGL_GPU_NUM_PIPES_AMD 0x21A5 -#define WGL_GPU_NUM_SIMD_AMD 0x21A6 -#define WGL_GPU_NUM_RB_AMD 0x21A7 -#define WGL_GPU_NUM_SPI_AMD 0x21A8 -#endif - - -/*************************************************************/ - -#ifndef WGL_ARB_pbuffer -DECLARE_HANDLE(HPBUFFERARB); -#endif -#ifndef WGL_EXT_pbuffer -DECLARE_HANDLE(HPBUFFEREXT); -#endif -#ifndef WGL_NV_present_video -DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); -#endif -#ifndef WGL_NV_video_out -DECLARE_HANDLE(HPVIDEODEV); -#endif -#ifndef WGL_NV_gpu_affinity -DECLARE_HANDLE(HPGPUNV); -DECLARE_HANDLE(HGPUNV); - -typedef struct _GPU_DEVICE { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD Flags; - RECT rcVirtualScreen; -} GPU_DEVICE, *PGPU_DEVICE; -#endif - -#ifndef WGL_ARB_buffer_region -#define WGL_ARB_buffer_region 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HANDLE WINAPI wglCreateBufferRegionARB (HDC, int, UINT); -extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE); -extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE, int, int, int, int); -extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE, int, int, int, int, int, int); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); -typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); -typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); -typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); -#endif - -#ifndef WGL_ARB_multisample -#define WGL_ARB_multisample 1 -#endif - -#ifndef WGL_ARB_extensions_string -#define WGL_ARB_extensions_string 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern const char * WINAPI wglGetExtensionsStringARB (HDC); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); -#endif - -#ifndef WGL_ARB_pixel_format -#define WGL_ARB_pixel_format 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC, int, int, UINT, const int *, int *); -extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC, int, int, UINT, const int *, FLOAT *); -extern BOOL WINAPI wglChoosePixelFormatARB (HDC, const int *, const FLOAT *, UINT, int *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -#endif - -#ifndef WGL_ARB_make_current_read -#define WGL_ARB_make_current_read 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglMakeContextCurrentARB (HDC, HDC, HGLRC); -extern HDC WINAPI wglGetCurrentReadDCARB (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); -#endif - -#ifndef WGL_ARB_pbuffer -#define WGL_ARB_pbuffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC, int, int, int, const int *); -extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB); -extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB, HDC); -extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB); -extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB, int, int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); -#endif - -#ifndef WGL_ARB_render_texture -#define WGL_ARB_render_texture 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB, int); -extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB, int); -extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); -#endif - -#ifndef WGL_ARB_pixel_format_float -#define WGL_ARB_pixel_format_float 1 -#endif - -#ifndef WGL_ARB_create_context -#define WGL_ARB_create_context 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HGLRC WINAPI wglCreateContextAttribsARB (HDC, HGLRC, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList); -#endif - -#ifndef WGL_EXT_display_color_table -#define WGL_EXT_display_color_table 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort); -extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *, GLuint); -extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort); -extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); -typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); -#endif - -#ifndef WGL_EXT_extensions_string -#define WGL_EXT_extensions_string 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern const char * WINAPI wglGetExtensionsStringEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); -#endif - -#ifndef WGL_EXT_make_current_read -#define WGL_EXT_make_current_read 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglMakeContextCurrentEXT (HDC, HDC, HGLRC); -extern HDC WINAPI wglGetCurrentReadDCEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); -#endif - -#ifndef WGL_EXT_pbuffer -#define WGL_EXT_pbuffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC, int, int, int, const int *); -extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT); -extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT, HDC); -extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT); -extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT, int, int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); -#endif - -#ifndef WGL_EXT_pixel_format -#define WGL_EXT_pixel_format 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC, int, int, UINT, int *, int *); -extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC, int, int, UINT, int *, FLOAT *); -extern BOOL WINAPI wglChoosePixelFormatEXT (HDC, const int *, const FLOAT *, UINT, int *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -#endif - -#ifndef WGL_EXT_swap_control -#define WGL_EXT_swap_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglSwapIntervalEXT (int); -extern int WINAPI wglGetSwapIntervalEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); -typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); -#endif - -#ifndef WGL_EXT_depth_float -#define WGL_EXT_depth_float 1 -#endif - -#ifndef WGL_NV_vertex_array_range -#define WGL_NV_vertex_array_range 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern void* WINAPI wglAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat); -extern void WINAPI wglFreeMemoryNV (void *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); -typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); -#endif - -#ifndef WGL_3DFX_multisample -#define WGL_3DFX_multisample 1 -#endif - -#ifndef WGL_EXT_multisample -#define WGL_EXT_multisample 1 -#endif - -#ifndef WGL_OML_sync_control -#define WGL_OML_sync_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetSyncValuesOML (HDC, INT64 *, INT64 *, INT64 *); -extern BOOL WINAPI wglGetMscRateOML (HDC, INT32 *, INT32 *); -extern INT64 WINAPI wglSwapBuffersMscOML (HDC, INT64, INT64, INT64); -extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC, int, INT64, INT64, INT64); -extern BOOL WINAPI wglWaitForMscOML (HDC, INT64, INT64, INT64, INT64 *, INT64 *, INT64 *); -extern BOOL WINAPI wglWaitForSbcOML (HDC, INT64, INT64 *, INT64 *, INT64 *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); -typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); -#endif - -#ifndef WGL_I3D_digital_video_control -#define WGL_I3D_digital_video_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC, int, int *); -extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC, int, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); -typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); -#endif - -#ifndef WGL_I3D_gamma -#define WGL_I3D_gamma 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC, int, int *); -extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC, int, const int *); -extern BOOL WINAPI wglGetGammaTableI3D (HDC, int, USHORT *, USHORT *, USHORT *); -extern BOOL WINAPI wglSetGammaTableI3D (HDC, int, const USHORT *, const USHORT *, const USHORT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); -#endif - -#ifndef WGL_I3D_genlock -#define WGL_I3D_genlock 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglEnableGenlockI3D (HDC); -extern BOOL WINAPI wglDisableGenlockI3D (HDC); -extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC, BOOL *); -extern BOOL WINAPI wglGenlockSourceI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSampleRateI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC, UINT *); -extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC, UINT *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); -typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); -typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); -#endif - -#ifndef WGL_I3D_image_buffer -#define WGL_I3D_image_buffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern LPVOID WINAPI wglCreateImageBufferI3D (HDC, DWORD, UINT); -extern BOOL WINAPI wglDestroyImageBufferI3D (HDC, LPVOID); -extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC, const HANDLE *, const LPVOID *, const DWORD *, UINT); -extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC, const LPVOID *, UINT); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); -typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); -typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); -typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); -#endif - -#ifndef WGL_I3D_swap_frame_lock -#define WGL_I3D_swap_frame_lock 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglEnableFrameLockI3D (void); -extern BOOL WINAPI wglDisableFrameLockI3D (void); -extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *); -extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); -#endif - -#ifndef WGL_I3D_swap_frame_usage -#define WGL_I3D_swap_frame_usage 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetFrameUsageI3D (float *); -extern BOOL WINAPI wglBeginFrameTrackingI3D (void); -extern BOOL WINAPI wglEndFrameTrackingI3D (void); -extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *, DWORD *, float *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); -typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); -#endif - -#ifndef WGL_ATI_pixel_format_float -#define WGL_ATI_pixel_format_float 1 -#endif - -#ifndef WGL_NV_float_buffer -#define WGL_NV_float_buffer 1 -#endif - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_EXT_pixel_format_packed_float 1 -#endif - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef WGL_NV_present_video -#define WGL_NV_present_video 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern int WINAPI wglEnumerateVideoDevicesNV (HDC, HVIDEOOUTPUTDEVICENV *); -extern BOOL WINAPI wglBindVideoDeviceNV (HDC, unsigned int, HVIDEOOUTPUTDEVICENV, const int *); -extern BOOL WINAPI wglQueryCurrentContextNV (int, int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList); -typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList); -typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue); -#endif - -#ifndef WGL_NV_video_out -#define WGL_NV_video_out 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetVideoDeviceNV (HDC, int, HPVIDEODEV *); -extern BOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV); -extern BOOL WINAPI wglBindVideoImageNV (HPVIDEODEV, HPBUFFERARB, int); -extern BOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB, int); -extern BOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB, int, unsigned long *, BOOL); -extern BOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV, unsigned long *, unsigned long *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); -typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock); -typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -#endif - -#ifndef WGL_NV_swap_group -#define WGL_NV_swap_group 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglJoinSwapGroupNV (HDC, GLuint); -extern BOOL WINAPI wglBindSwapBarrierNV (GLuint, GLuint); -extern BOOL WINAPI wglQuerySwapGroupNV (HDC, GLuint *, GLuint *); -extern BOOL WINAPI wglQueryMaxSwapGroupsNV (HDC, GLuint *, GLuint *); -extern BOOL WINAPI wglQueryFrameCountNV (HDC, GLuint *); -extern BOOL WINAPI wglResetFrameCountNV (HDC); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); -typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); -typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier); -typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count); -typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); -#endif - -#ifndef WGL_NV_gpu_affinity -#define WGL_NV_gpu_affinity 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglEnumGpusNV (UINT, HGPUNV *); -extern BOOL WINAPI wglEnumGpuDevicesNV (HGPUNV, UINT, PGPU_DEVICE); -extern HDC WINAPI wglCreateAffinityDCNV (const HGPUNV *); -extern BOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC, UINT, HGPUNV *); -extern BOOL WINAPI wglDeleteDCNV (HDC); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); -typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); -typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); -typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); -typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); -#endif - -#ifndef WGL_AMD_gpu_association -#define WGL_AMD_gpu_association 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern UINT WINAPI wglGetGPUIDsAMD (UINT, UINT *); -extern INT WINAPI wglGetGPUInfoAMD (UINT, int, GLenum, UINT, void *); -extern UINT WINAPI wglGetContextGPUIDAMD (HGLRC); -extern HGLRC WINAPI wglCreateAssociatedContextAMD (UINT); -extern HGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT, HGLRC, const int *); -extern BOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC); -extern BOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC); -extern HGLRC WINAPI wglGetCurrentAssociatedContextAMD (void); -extern VOID WINAPI wglBlitContextFramebufferAMD (HGLRC, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids); -typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data); -typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList); -typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); -typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); -typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); -typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Win32.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Win32.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Win32.cpp 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Win32.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,344 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include - -#include "Utilities/RedtapeWindows.h" -#include - -#include "resrc1.h" - -#include "GS.h" -#include "ZZoglShaders.h" -#include "Win32.h" - -#include - -using namespace std; - -extern int g_nPixelShaderVer; -static int prevbilinearfilter; -HINSTANCE hInst = NULL; - -void CALLBACK GSkeyEvent(keyEvent *ev) -{ -// switch (ev->event) { -// case KEYPRESS: -// switch (ev->key) { -// case VK_PRIOR: -// if (conf.fps) fpspos++; break; -// case VK_NEXT: -// if (conf.fps) fpspos--; break; -// case VK_END: -// if (conf.fps) fpspress = 1; break; -// case VK_DELETE: -// conf.fps = 1 - conf.fps; -// break; -// } -// break; -// } -} - -#include "Win32/resource.h" - -map mapConfOpts; -#define PUT_CONF(id) mapConfOpts[IDC_CONFOPT_##id] = 0x##id; - -void OnAdvOK(HWND hW) -{ - conf.hacks._u32 = 0; - - for (map::iterator it = mapConfOpts.begin(); it != mapConfOpts.end(); ++it) - { - if (IsDlgButtonChecked(hW, it->first)) conf.hacks._u32 |= it->second; - } - - GSsetGameCRC(g_LastCRC, conf.hacks._u32); - - SaveConfig(); - - EndDialog(hW, false); -} - -void OnInitAdvDialog(HWND hW) -{ - mapConfOpts.clear(); - - PUT_CONF(00000001); - PUT_CONF(00000002); - PUT_CONF(00000004); - PUT_CONF(00000008); - PUT_CONF(00000010); - PUT_CONF(00000020); - PUT_CONF(00000040); - PUT_CONF(00000080); - PUT_CONF(00000100); - PUT_CONF(00000200); - PUT_CONF(00000400); - PUT_CONF(00000800); - PUT_CONF(00001000); - PUT_CONF(00002000); - PUT_CONF(00004000); - PUT_CONF(00008000); - PUT_CONF(00010000); - PUT_CONF(00020000); - PUT_CONF(00040000); - PUT_CONF(00080000); - PUT_CONF(00100000); - PUT_CONF(00200000); - PUT_CONF(00800000); - PUT_CONF(01000000); - PUT_CONF(02000000); - PUT_CONF(04000000); - PUT_CONF(10000000); - - for (map::iterator it = mapConfOpts.begin(); it != mapConfOpts.end(); ++it) - { - CheckDlgButton(hW, it->first, (conf.settings()._u32 & it->second) ? 1 : 0); - } -} - -BOOL CALLBACK AdvancedDialogProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case WM_INITDIALOG: - OnInitAdvDialog(hW); - return true; - - case WM_COMMAND: - - switch (LOWORD(wParam)) - { - case IDCANCEL: - EndDialog(hW, true); - return true; - - case IDOK: - OnAdvOK(hW); - return true; - } - } - - return false; -} - -void CALLBACK AdvancedDialog() -{ - DialogBox(hInst, - MAKEINTRESOURCE(IDD_ADV_OPTIONS), - GetActiveWindow(), - (DLGPROC)AdvancedDialogProc); -} - -void OnInitConfDialog(HWND hW) -{ - if (!(conf.zz_options.loaded)) LoadConfig(); - - TCHAR *aaName[] = {L"None", L"x2", L"x4", L"x8", L"x16"}; - - for(int i=0; i<5; i++) - { - ComboBox_AddString(GetDlgItem(hW, IDC_AA_COMBO), (LPARAM)aaName[i]); - } - ComboBox_SelectString(GetDlgItem(hW, IDC_AA_COMBO), -1, (LPARAM)aaName[conf.aa]); - - TCHAR *sizeName[] = {L"640 x 480", L"800 x 600", L"1024 x 768", L"1280 x 960"}; - - for(int i=0; i<4; i++) - { - ComboBox_AddString(GetDlgItem(hW, IDC_WIN_SIZE_COMBO), (LPARAM)sizeName[i]); - } - ComboBox_SelectString(GetDlgItem(hW, IDC_WIN_SIZE_COMBO), -1, (LPARAM)sizeName[conf.zz_options.dimensions]); - - CheckDlgButton(hW, IDC_CONFIG_INTERLACE, conf.interlace); - CheckDlgButton(hW, IDC_CONFIG_BILINEAR, conf.bilinear); - CheckDlgButton(hW, IDC_CONFIG_DEPTHWRITE, conf.mrtdepth); - CheckDlgButton(hW, IDC_CONFIG_WIREFRAME, (conf.wireframe()) ? 1 : 0); - CheckDlgButton(hW, IDC_CONFIG_CAPTUREAVI, (conf.captureAvi()) ? 1 : 0); - CheckDlgButton(hW, IDC_CONFIG_FULLSCREEN, (conf.fullscreen()) ? 1 : 0); - CheckDlgButton(hW, IDC_CONFIG_WIDESCREEN, (conf.widescreen()) ? 1 : 0); - CheckDlgButton(hW, IDC_CONFIG_BMPSS, (conf.zz_options.tga_snap) ? 1 : 0); - - prevbilinearfilter = conf.bilinear; -} - -void OnConfOK(HWND hW) -{ - u32 newinterlace = IsDlgButtonChecked(hW, IDC_CONFIG_INTERLACE); - - if (!conf.interlace) - conf.interlace = newinterlace; - else if (!newinterlace) - conf.interlace = 2; // off - - conf.bilinear = IsDlgButtonChecked(hW, IDC_CONFIG_BILINEAR); - - // restore - if (conf.bilinear && prevbilinearfilter) conf.bilinear = prevbilinearfilter; - - if (ComboBox_GetCurSel(GetDlgItem(hW, IDC_AA_COMBO)) != -1) - conf.aa = ComboBox_GetCurSel(GetDlgItem(hW, IDC_AA_COMBO)); - - conf.zz_options._u32 = 0; - - conf.zz_options.capture_avi = IsDlgButtonChecked(hW, IDC_CONFIG_CAPTUREAVI) ? 1 : 0; - conf.zz_options.wireframe = IsDlgButtonChecked(hW, IDC_CONFIG_WIREFRAME) ? 1 : 0; - conf.zz_options.fullscreen = IsDlgButtonChecked(hW, IDC_CONFIG_FULLSCREEN) ? 1 : 0; - conf.zz_options.widescreen = IsDlgButtonChecked(hW, IDC_CONFIG_WIDESCREEN) ? 1 : 0; - conf.zz_options.tga_snap = IsDlgButtonChecked(hW, IDC_CONFIG_BMPSS) ? 1 : 0; - - if (ComboBox_GetCurSel(GetDlgItem(hW, IDC_WIN_SIZE_COMBO)) == 0) - conf.zz_options.dimensions = GSDim_640; - else if (ComboBox_GetCurSel(GetDlgItem(hW, IDC_WIN_SIZE_COMBO)) == 1) - conf.zz_options.dimensions = GSDim_800; - else if (ComboBox_GetCurSel(GetDlgItem(hW, IDC_WIN_SIZE_COMBO)) == 2) - conf.zz_options.dimensions = GSDim_1024; - else if (ComboBox_GetCurSel(GetDlgItem(hW, IDC_WIN_SIZE_COMBO)) == 3) - conf.zz_options.dimensions = GSDim_1280; - - SaveConfig(); - - EndDialog(hW, false); -} - -BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case WM_INITDIALOG: - OnInitConfDialog(hW); - return true; - - case WM_COMMAND: - - switch (LOWORD(wParam)) - { - case IDC_AA_COMBO: - break; - - case IDC_ADV_BTN: - AdvancedDialog(); - return true; - - case IDCANCEL: - EndDialog(hW, true); - return true; - - case IDOK: - OnConfOK(hW); - return true; - } - } - - return false; -} - -void CALLBACK GSconfigure() -{ - DialogBox(hInst, - MAKEINTRESOURCE(IDD_CONFIG2), - GetActiveWindow(), - (DLGPROC)ConfigureDlgProc); - - if (g_nPixelShaderVer == SHADER_REDUCED) conf.bilinear = 0; -} - -s32 CALLBACK GStest() -{ - return 0; -} - -BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case WM_INITDIALOG: - return true; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - EndDialog(hW, false); - return true; - } - } - - return false; -} - -void CALLBACK GSabout() -{ - DialogBox(hInst, - MAKEINTRESOURCE(IDD_ABOUT), - GetActiveWindow(), - (DLGPROC)AboutDlgProc); -} - -bool APIENTRY DllMain(HANDLE hModule, // DLL INIT - DWORD dwReason, - LPVOID lpReserved) -{ - hInst = (HINSTANCE)hModule; - return true; // very quick :) -} - -static char *err = "Error Loading Symbol"; -static int errval; - -void *SysLoadLibrary(char *lib) -{ - return LoadLibrary(wxString::FromUTF8(lib)); -} - -void *SysLoadSym(void *lib, char *sym) -{ - void *tmp = GetProcAddress((HINSTANCE)lib, sym); - - if (tmp == NULL) - errval = 1; - else - errval = 0; - - return tmp; -} - -char *SysLibError() -{ - if (errval) { errval = 0; return err; } - - return NULL; -} - -void SysCloseLibrary(void *lib) -{ - FreeLibrary((HINSTANCE)lib); -} - -void SysMessage(const char *fmt, ...) -{ - va_list list; - char tmp[512]; - - va_start(list, fmt); - vsprintf(tmp, fmt, list); - va_end(list); - MessageBox(0, wxString::FromUTF8(tmp), L"ZZOgl-PG Msg", 0); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Win32.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Win32.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/Win32.h 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/Win32.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __WIN32_H__ -#define __WIN32_H__ - -#include "resrc1.h" -#include "Win32/resource.h" - -BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam); - -#endif /* __WIN32_H__ */ Binary files /tmp/tmpSVkbbe/uyNelcf5ut/pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogs.bmp and /tmp/tmpSVkbbe/89WFQtNAsJ/pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogs.bmp differ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogs.def pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogs.def --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogs.def 2011-07-27 08:16:51.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogs.def 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -; Declares the module parameters for the DLL. - -;LIBRARY "ZeroGS" -;DESCRIPTION 'ZeroGS dll' - -EXPORTS - ; Explicit exports can go here - PS2EgetLibType @2 - PS2EgetLibName @3 - PS2EgetLibVersion2 @4 - GSinit @5 - GSshutdown @6 - GSopen @7 - GSclose @8 - GSgifTransfer @12 - GSgifTransfer1 @13 - GSgifTransfer2 @14 - GSgifTransfer3 @15 - GSreadFIFO @16 - GSvsync @17 - GSmakeSnapshot @18 - GSkeyEvent @19 - GSfreeze @20 - GSconfigure @21 - GStest @22 - GSabout @23 - GSreadFIFO2 @28 - GSirqCallback @29 - GSsetBaseMem @30 - GSwriteCSR @31 - GSchangeSaveState @32 - GSreset @33 - GSgifSoftReset @34 - GSsetFrameSkip @35 - GSsetGameCRC @36 - GSgetLastTag @37 - GSsetupRecording @38 - GSsetSettingsDir @39 diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.sln pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.sln --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.sln 2010-04-06 02:43:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_2008.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZZOgl", "zerogsogl_2008.vcproj", "{2D4E85B2-F47F-4D65-B091-701E5C031DAC}" - ProjectSection(ProjectDependencies) = postProject - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} = {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Utilities", "..\..\..\..\common\build\Utilities\utilities.vcproj", "{4639972E-424E-4E13-8B07-CA403C481346}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "..\..\..\..\3rdparty\zlib\zlib.vcproj", "{2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Devel|Win32 = Devel|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.ActiveCfg = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Debug|Win32.Build.0 = Debug|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.ActiveCfg = Devel|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Devel|Win32.Build.0 = Devel|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|Win32.ActiveCfg = Release|Win32 - {2D4E85B2-F47F-4D65-B091-701E5C031DAC}.Release|Win32.Build.0 = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.ActiveCfg = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Debug|Win32.Build.0 = Debug|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.ActiveCfg = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Devel|Win32.Build.0 = Devel|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.ActiveCfg = Release|Win32 - {4639972E-424E-4E13-8B07-CA403C481346}.Release|Win32.Build.0 = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Debug|Win32.Build.0 = Debug|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.ActiveCfg = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Devel|Win32.Build.0 = Devel|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.ActiveCfg = Release|Win32 - {2F6C0388-20CB-4242-9F6C-A6EBB6A83F47}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj 2012-05-08 07:32:15.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,288 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - ZZOgl - {2D4E85B2-F47F-4D65-B091-701E5C031DAC} - ZZogl - - - - DynamicLibrary - false - Unicode - true - - - DynamicLibrary - Unicode - - - DynamicLibrary - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName)-dev - $(SolutionDir)bin\$(PcsxSubsection)\ - $(PlatformName)\$(Configuration)\ - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_DEVBUILD;%(PreprocessorDefinitions) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\;%(AdditionalLibraryDirectories) - .\zerogs.def - - - - - $(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - _USRDLL;ZEROGS_DEVBUILD;_DEBUG;__i386__;%(PreprocessorDefinitions) - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\;%(AdditionalLibraryDirectories) - %(IgnoreSpecificDefaultLibraries) - .\zerogs.def - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_SSE2;RELEASE_TO_PUBLIC;%(PreprocessorDefinitions) - - - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\;%(AdditionalLibraryDirectories) - .\zerogs.def - - - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {bc236261-77e8-4567-8d09-45cd02965eb6} - true - false - false - true - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - true - false - false - true - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - true - false - false - true - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - true - false - false - true - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - true - false - false - true - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - true - false - false - true - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - true - false - false - true - false - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj.filters pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj.filters 2012-05-08 07:32:15.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +0,0 @@ - - - - - {db5b3cda-2af3-451d-95a6-1ecd6410acb3} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {609d2fdc-53bd-42af-90ff-793a1107f003} - h;hpp;hxx;hm;inl - - - {a2158e1c-a894-441e-ab9e-e2361e55f009} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {4755b02f-755a-491e-b851-acab63a59d75} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Resource Files - - - Resource Files - - - Docs - - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Source Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,294 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - ZZOgl - {2D4E85B2-F47F-4D65-B091-701E5C031DAC} - ZZogl - - - - DynamicLibrary - false - Unicode - true - v110_xp - - - DynamicLibrary - Unicode - v110_xp - - - DynamicLibrary - false - Unicode - v110_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName)-dev - $(SolutionDir)bin\$(PcsxSubsection)\ - $(PlatformName)\$(Configuration)\ - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_DEVBUILD;%(PreprocessorDefinitions) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - .\zerogs.def - false - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - _USRDLL;ZEROGS_DEVBUILD;_DEBUG;__i386__;%(PreprocessorDefinitions) - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - %(IgnoreSpecificDefaultLibraries) - .\zerogs.def - false - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_SSE2;RELEASE_TO_PUBLIC;%(PreprocessorDefinitions) - - - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - .\zerogs.def - - - false - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {bc236261-77e8-4567-8d09-45cd02965eb6} - true - false - false - true - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - true - false - false - true - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - true - false - false - true - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - true - false - false - true - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - true - false - false - true - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - true - false - false - true - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - true - false - false - true - false - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj.filters pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2012.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +0,0 @@ - - - - - {db5b3cda-2af3-451d-95a6-1ecd6410acb3} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {609d2fdc-53bd-42af-90ff-793a1107f003} - h;hpp;hxx;hm;inl - - - {a2158e1c-a894-441e-ab9e-e2361e55f009} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {4755b02f-755a-491e-b851-acab63a59d75} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Resource Files - - - Resource Files - - - Docs - - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Source Files - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj 2014-01-24 15:30:34.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj 1970-01-01 00:00:00.000000000 +0000 @@ -1,294 +0,0 @@ - - - - - Debug - Win32 - - - Devel - Win32 - - - Release - Win32 - - - - ZZOgl - {2D4E85B2-F47F-4D65-B091-701E5C031DAC} - ZZogl - - - - DynamicLibrary - false - Unicode - true - v120_xp - - - DynamicLibrary - Unicode - v120_xp - - - DynamicLibrary - false - Unicode - v120_xp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectName)-dev - $(SolutionDir)bin\$(PcsxSubsection)\ - $(PlatformName)\$(Configuration)\ - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_DEVBUILD;%(PreprocessorDefinitions) - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - .\zerogs.def - false - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - _USRDLL;ZEROGS_DEVBUILD;_DEBUG;__i386__;%(PreprocessorDefinitions) - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - %(IgnoreSpecificDefaultLibraries) - .\zerogs.def - false - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - - - - - $(CG_INC_PATH);$(ProjectRootDir)\;$(ProjectRootDir)\ZeroGSShaders\;$(ProjectRootDir)\Win32;$(SvnRootDir)\3rdparty\libjpeg;$(SvnRootDir)\3rdparty\zlib;%(AdditionalIncludeDirectories) - NDEBUG;_USRDLL;__i386__;ZEROGS_SSE2;RELEASE_TO_PUBLIC;%(PreprocessorDefinitions) - - - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - winmm.lib;Vfw32.lib;cg.lib;cgGL.lib;opengl32.lib;Comctl32.lib;rpcrt4.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - $(CG_LIB_PATH);..\;%(AdditionalLibraryDirectories) - .\zerogs.def - - - false - - - - - - - - - - - - - - - - - - - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - ml /nologo /c /Fo"$(IntDir)%(Filename).obj" "%(FullPath)" - - $(IntDir)%(Filename).obj;%(Outputs) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {bc236261-77e8-4567-8d09-45cd02965eb6} - true - false - false - true - false - - - {26511268-2902-4997-8421-ecd7055f9e28} - true - false - false - true - false - - - {7e9b2be7-cec3-4f14-847b-0ab8d562fb86} - true - false - false - true - false - - - {48ad7e0a-25b1-4974-a1e3-03f8c438d34f} - true - false - false - true - false - - - {0318ba30-ef48-441a-9e10-dc85efae39f0} - true - false - false - true - false - - - {2f6c0388-20cb-4242-9f6c-a6ebb6a83f47} - true - false - false - true - false - - - {4639972e-424e-4e13-8b07-ca403c481346} - true - false - false - true - false - - - - - - \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj.filters pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj.filters --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj.filters 2013-11-27 16:53:36.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/Win32/zerogsogl_vs2013.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +0,0 @@ - - - - - {db5b3cda-2af3-451d-95a6-1ecd6410acb3} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {609d2fdc-53bd-42af-90ff-793a1107f003} - h;hpp;hxx;hm;inl - - - {a2158e1c-a894-441e-ab9e-e2361e55f009} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {4755b02f-755a-491e-b851-acab63a59d75} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Resource Files - - - Resource Files - - - Docs - - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Resource Files - - - - - Source Files - - - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86-32.asm pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86-32.asm --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86-32.asm 2012-10-19 20:27:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86-32.asm 1970-01-01 00:00:00.000000000 +0000 @@ -1,652 +0,0 @@ -; Copyright (C) 2003-2005 Gabest -; http://www.gabest.org -; -; 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 GNU Make; see the file COPYING. If not, write to -; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. -; http://www.gnu.org/copyleft/gpl.html -; -; - .686 - .model flat - .mmx - .xmm - - .const - - __uvmin DD 0d01502f9r ; -1e+010 - __uvmax DD 0501502f9r ; +1e+010 - - .code - -; -; swizzling -; - -punpck macro op, sd0, sd2, s1, s3, d1, d3 - - movdqa @CatStr(xmm, %d1), @CatStr(xmm, %sd0) - pshufd @CatStr(xmm, %d3), @CatStr(xmm, %sd2), 0e4h - - @CatStr(punpckl, op) @CatStr(xmm, %sd0), @CatStr(xmm, %s1) - @CatStr(punpckh, op) @CatStr(xmm, %d1), @CatStr(xmm, %s1) - @CatStr(punpckl, op) @CatStr(xmm, %sd2), @CatStr(xmm, %s3) - @CatStr(punpckh, op) @CatStr(xmm, %d3), @CatStr(xmm, %s3) - - endm - -punpcknb macro - - movdqa xmm4, xmm0 - pshufd xmm5, xmm1, 0e4h - - psllq xmm1, 4 - psrlq xmm4, 4 - - movdqa xmm6, xmm7 - pand xmm0, xmm7 - pandn xmm6, xmm1 - por xmm0, xmm6 - - movdqa xmm6, xmm7 - pand xmm4, xmm7 - pandn xmm6, xmm5 - por xmm4, xmm6 - - movdqa xmm1, xmm4 - - movdqa xmm4, xmm2 - pshufd xmm5, xmm3, 0e4h - - psllq xmm3, 4 - psrlq xmm4, 4 - - movdqa xmm6, xmm7 - pand xmm2, xmm7 - pandn xmm6, xmm3 - por xmm2, xmm6 - - movdqa xmm6, xmm7 - pand xmm4, xmm7 - pandn xmm6, xmm5 - por xmm4, xmm6 - - movdqa xmm3, xmm4 - - punpck bw, 0, 2, 1, 3, 4, 6 - - endm - - -; -; swizzling -; - -; -; SwizzleBlock32 -; - -@SwizzleBlock32_sse2@16 proc public - - - push esi - push edi - - mov edi, ecx - mov esi, edx - mov edx, [esp+4+8] - mov ecx, 4 - - mov eax, [esp+8+8] - cmp eax, 0ffffffffh - jne SwizzleBlock32_sse2@WM - - align 16 -@@: - movdqa xmm0, [esi] - movdqa xmm4, [esi+16] - movdqa xmm1, [esi+edx] - movdqa xmm5, [esi+edx+16] - - punpck qdq, 0, 4, 1, 5, 2, 6 - - movntps [edi+16*0], xmm0 - movntps [edi+16*1], xmm2 - movntps [edi+16*2], xmm4 - movntps [edi+16*3], xmm6 - - lea esi, [esi+edx*2] - add edi, 64 - - dec ecx - jnz @B - - pop edi - pop esi - - ret 8 - -SwizzleBlock32_sse2@WM: - - movd xmm7, eax - pshufd xmm7, xmm7, 0 - - align 16 -@@: - movdqa xmm0, [esi] - movdqa xmm4, [esi+16] - movdqa xmm1, [esi+edx] - movdqa xmm5, [esi+edx+16] - - punpck qdq, 0, 4, 1, 5, 2, 6 - - movdqa xmm3, xmm7 - pshufd xmm5, xmm7, 0e4h - - pandn xmm3, [edi+16*0] - pand xmm0, xmm7 - por xmm0, xmm3 - movntps [edi+16*0], xmm0 - - pandn xmm5, [edi+16*1] - pand xmm2, xmm7 - por xmm2, xmm5 - movntps [edi+16*1], xmm2 - - movdqa xmm3, xmm7 - pshufd xmm5, xmm7, 0e4h - - pandn xmm3, [edi+16*2] - pand xmm4, xmm7 - por xmm4, xmm3 - movntps [edi+16*2], xmm4 - - pandn xmm5, [edi+16*3] - pand xmm6, xmm7 - por xmm6, xmm5 - movntps [edi+16*3], xmm6 - - lea esi, [esi+edx*2] - add edi, 64 - - dec ecx - jnz @B - - pop edi - pop esi - - ret 8 - -@SwizzleBlock32_sse2@16 endp - -; -; SwizzleBlock16 -; - -@SwizzleBlock16_sse2@12 proc public - - push ebx - - mov ebx, [esp+4+4] - mov eax, 4 - - align 16 -@@: - movdqa xmm0, [edx] - movdqa xmm1, [edx+16] - movdqa xmm2, [edx+ebx] - movdqa xmm3, [edx+ebx+16] - - punpck wd, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 5 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm1 - movntps [ecx+16*2], xmm4 - movntps [ecx+16*3], xmm5 - - lea edx, [edx+ebx*2] - add ecx, 64 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock16_sse2@12 endp - -; -; SwizzleBlock8 -; - -@SwizzleBlock8_sse2@12 proc public - - push ebx - - mov ebx, [esp+4+4] - mov eax, 2 - - align 16 -@@: - ; col 0, 2 - - movdqa xmm0, [edx] - movdqa xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - pshufd xmm1, [edx], 0b1h - pshufd xmm3, [edx+ebx], 0b1h - lea edx, [edx+ebx*2] - - punpck bw, 0, 2, 1, 3, 4, 6 - punpck wd, 0, 2, 4, 6, 1, 3 - punpck qdq, 0, 1, 2, 3, 4, 5 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm4 - movntps [ecx+16*2], xmm1 - movntps [ecx+16*3], xmm5 - - ; col 1, 3 - - pshufd xmm0, [edx], 0b1h - pshufd xmm2, [edx+ebx], 0b1h - lea edx, [edx+ebx*2] - - movdqa xmm1, [edx] - movdqa xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - punpck bw, 0, 2, 1, 3, 4, 6 - punpck wd, 0, 2, 4, 6, 1, 3 - punpck qdq, 0, 1, 2, 3, 4, 5 - - movntps [ecx+16*4], xmm0 - movntps [ecx+16*5], xmm4 - movntps [ecx+16*6], xmm1 - movntps [ecx+16*7], xmm5 - - add ecx, 128 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock8_sse2@12 endp - -; -; SwizzleBlock4 -; - -@SwizzleBlock4_sse2@12 proc public - - push ebx - - mov eax, 0f0f0f0fh - movd xmm7, eax - pshufd xmm7, xmm7, 0 - - mov ebx, [esp+4+4] - mov eax, 2 - - align 16 -@@: - ; col 0, 2 - - movdqa xmm0, [edx] - movdqa xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - movdqa xmm1, [edx] - movdqa xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - pshuflw xmm1, xmm1, 0b1h - pshuflw xmm3, xmm3, 0b1h - pshufhw xmm1, xmm1, 0b1h - pshufhw xmm3, xmm3, 0b1h - - punpcknb - punpck bw, 0, 2, 4, 6, 1, 3 - punpck bw, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 3 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm1 - movntps [ecx+16*2], xmm4 - movntps [ecx+16*3], xmm3 - - ; col 1, 3 - - movdqa xmm0, [edx] - movdqa xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - movdqa xmm1, [edx] - movdqa xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - pshuflw xmm0, xmm0, 0b1h - pshuflw xmm2, xmm2, 0b1h - pshufhw xmm0, xmm0, 0b1h - pshufhw xmm2, xmm2, 0b1h - - punpcknb - punpck bw, 0, 2, 4, 6, 1, 3 - punpck bw, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 3 - - movntps [ecx+16*4], xmm0 - movntps [ecx+16*5], xmm1 - movntps [ecx+16*6], xmm4 - movntps [ecx+16*7], xmm3 - - add ecx, 128 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock4_sse2@12 endp - -; -; swizzling with unaligned reads -; - -; -; SwizzleBlock32u -; - -@SwizzleBlock32u_sse2@16 proc public - - push esi - push edi - - mov edi, ecx - mov esi, edx - mov edx, [esp+4+8] - mov ecx, 4 - - mov eax, [esp+8+8] - cmp eax, 0ffffffffh - jne SwizzleBlock32u_sse2@WM - - align 16 -@@: - movdqu xmm0, [esi] - movdqu xmm4, [esi+16] - movdqu xmm1, [esi+edx] - movdqu xmm5, [esi+edx+16] - - punpck qdq, 0, 4, 1, 5, 2, 6 - - movntps [edi+16*0], xmm0 - movntps [edi+16*1], xmm2 - movntps [edi+16*2], xmm4 - movntps [edi+16*3], xmm6 - - lea esi, [esi+edx*2] - add edi, 64 - - dec ecx - jnz @B - - pop edi - pop esi - - ret 8 - -SwizzleBlock32u_sse2@WM: - - movd xmm7, eax - pshufd xmm7, xmm7, 0 - - align 16 -@@: - movdqu xmm0, [esi] - movdqu xmm4, [esi+16] - movdqu xmm1, [esi+edx] - movdqu xmm5, [esi+edx+16] - - punpck qdq, 0, 4, 1, 5, 2, 6 - - movdqa xmm3, xmm7 - pshufd xmm5, xmm7, 0e4h - - pandn xmm3, [edi+16*0] - pand xmm0, xmm7 - por xmm0, xmm3 - movdqa [edi+16*0], xmm0 - - pandn xmm5, [edi+16*1] - pand xmm2, xmm7 - por xmm2, xmm5 - movdqa [edi+16*1], xmm2 - - movdqa xmm3, xmm7 - pshufd xmm5, xmm7, 0e4h - - pandn xmm3, [edi+16*2] - pand xmm4, xmm7 - por xmm4, xmm3 - movdqa [edi+16*2], xmm4 - - pandn xmm5, [edi+16*3] - pand xmm6, xmm7 - por xmm6, xmm5 - movdqa [edi+16*3], xmm6 - - lea esi, [esi+edx*2] - add edi, 64 - - dec ecx - jnz @B - - pop edi - pop esi - - ret 8 - -@SwizzleBlock32u_sse2@16 endp - -; -; SwizzleBlock16u -; - -@SwizzleBlock16u_sse2@12 proc public - - push ebx - - mov ebx, [esp+4+4] - mov eax, 4 - - align 16 -@@: - movdqu xmm0, [edx] - movdqu xmm1, [edx+16] - movdqu xmm2, [edx+ebx] - movdqu xmm3, [edx+ebx+16] - - punpck wd, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 5 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm1 - movntps [ecx+16*2], xmm4 - movntps [ecx+16*3], xmm5 - - lea edx, [edx+ebx*2] - add ecx, 64 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock16u_sse2@12 endp - -; -; SwizzleBlock8u -; - -@SwizzleBlock8u_sse2@12 proc public - - push ebx - - mov ebx, [esp+4+4] - mov eax, 2 - - align 16 -@@: - ; col 0, 2 - - movdqu xmm0, [edx] - movdqu xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - movdqu xmm1, [edx] - movdqu xmm3, [edx+ebx] - pshufd xmm1, xmm1, 0b1h - pshufd xmm3, xmm3, 0b1h - lea edx, [edx+ebx*2] - - punpck bw, 0, 2, 1, 3, 4, 6 - punpck wd, 0, 2, 4, 6, 1, 3 - punpck qdq, 0, 1, 2, 3, 4, 5 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm4 - movntps [ecx+16*2], xmm1 - movntps [ecx+16*3], xmm5 - - ; col 1, 3 - - movdqu xmm0, [edx] - movdqu xmm2, [edx+ebx] - pshufd xmm0, xmm0, 0b1h - pshufd xmm2, xmm2, 0b1h - lea edx, [edx+ebx*2] - - movdqu xmm1, [edx] - movdqu xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - punpck bw, 0, 2, 1, 3, 4, 6 - punpck wd, 0, 2, 4, 6, 1, 3 - punpck qdq, 0, 1, 2, 3, 4, 5 - - movntps [ecx+16*4], xmm0 - movntps [ecx+16*5], xmm4 - movntps [ecx+16*6], xmm1 - movntps [ecx+16*7], xmm5 - - add ecx, 128 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock8u_sse2@12 endp - -; -; SwizzleBlock4u -; - -@SwizzleBlock4u_sse2@12 proc public - - push ebx - - mov eax, 0f0f0f0fh - movd xmm7, eax - pshufd xmm7, xmm7, 0 - - mov ebx, [esp+4+4] - mov eax, 2 - - align 16 -@@: - ; col 0, 2 - - movdqu xmm0, [edx] - movdqu xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - movdqu xmm1, [edx] - movdqu xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - pshuflw xmm1, xmm1, 0b1h - pshuflw xmm3, xmm3, 0b1h - pshufhw xmm1, xmm1, 0b1h - pshufhw xmm3, xmm3, 0b1h - - punpcknb - punpck bw, 0, 2, 4, 6, 1, 3 - punpck bw, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 3 - - movntps [ecx+16*0], xmm0 - movntps [ecx+16*1], xmm1 - movntps [ecx+16*2], xmm4 - movntps [ecx+16*3], xmm3 - - ; col 1, 3 - - movdqu xmm0, [edx] - movdqu xmm2, [edx+ebx] - lea edx, [edx+ebx*2] - - movdqu xmm1, [edx] - movdqu xmm3, [edx+ebx] - lea edx, [edx+ebx*2] - - pshuflw xmm0, xmm0, 0b1h - pshuflw xmm2, xmm2, 0b1h - pshufhw xmm0, xmm0, 0b1h - pshufhw xmm2, xmm2, 0b1h - - punpcknb - punpck bw, 0, 2, 4, 6, 1, 3 - punpck bw, 0, 2, 1, 3, 4, 6 - punpck qdq, 0, 4, 2, 6, 1, 3 - - movntps [ecx+16*4], xmm0 - movntps [ecx+16*5], xmm1 - movntps [ecx+16*6], xmm4 - movntps [ecx+16*7], xmm3 - - add ecx, 128 - - dec eax - jnz @B - - pop ebx - - ret 4 - -@SwizzleBlock4u_sse2@12 endp - - end \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86-32.S pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86-32.S --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86-32.S 2012-10-19 20:27:50.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86-32.S 1970-01-01 00:00:00.000000000 +0000 @@ -1,716 +0,0 @@ -# Copyright (C) 2005-2006 zerofrog(@gmail.com) -# -# 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 ve%rsion 2, or (at your option) -# any later ve%rsion. -# -# 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 GNU Make see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA USA. -# http://www.gnu.org/copyleft/gpl.html -# -# -.intel_syntax - -#ifdef ZEROGS_SSE2 -// SSE2 extensions - -// Note: pshufd 0xea <=> movdqa !!! -// What the function does is -// Interleave s1 and sd0 -> d1 (high) & sd0 (low) -// Interleave s3 and sd2 -> d3 (high) & sd2 (low) -#define punpck(op, sd0, sd2, s1, s3, d1, d3) \ - movdqa %xmm##d1, %xmm##sd0; \ - pshufd %xmm##d3, %xmm##sd2, 0xe4; \ - punpckl##op %xmm##sd0, %xmm##s1; \ - punpckh##op %xmm##d1, %xmm##s1; \ - punpckl##op %xmm##sd2, %xmm##s3; \ - punpckh##op %xmm##d3, %xmm##s3; \ - - -// Input xmm7 == 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F 0x0F0F0F0F -// DATA xmm[0-3] -// This function does a 4-bits interleaving of 4 xmm registers -// -// ARG Can not put comment in the middle of the define... -// After the first por -// low 32bits (4bits packed) == 1.6 0.6 1.4 0.4 1.2 0.2 1.0 0.0 -// After the second one -// low 32bits (4bits packed) == 1.7 0.7 1.5 0.5 1.3 0.3 1.1 0.1 -#define punpcknb \ - movdqa %xmm4, %xmm0; \ - pshufd %xmm5, %xmm1, 0xe4; \ - \ - psllq %xmm1, 4; \ - psrlq %xmm4, 4; \ - \ - movdqa %xmm6, %xmm7; \ - pand %xmm0, %xmm7; \ - pandn %xmm6, %xmm1; \ - por %xmm0, %xmm6; \ - \ - movdqa %xmm6, %xmm7; \ - pand %xmm4, %xmm7; \ - pandn %xmm6, %xmm5; \ - por %xmm4, %xmm6; \ - \ - movdqa %xmm1, %xmm4; \ - \ - \ - movdqa %xmm4, %xmm2; \ - pshufd %xmm5, %xmm3, 0xe4; \ - \ - psllq %xmm3, 4; \ - psrlq %xmm4, 4; \ - \ - movdqa %xmm6, %xmm7; \ - pand %xmm2, %xmm7; \ - pandn %xmm6, %xmm3; \ - por %xmm2, %xmm6; \ - \ - movdqa %xmm6, %xmm7; \ - pand %xmm4, %xmm7; \ - pandn %xmm6, %xmm5; \ - por %xmm4, %xmm6; \ - \ - movdqa %xmm3, %xmm4; \ - \ - punpck(bw, 0, 2, 1, 3, 4, 6);\ - -// output -// low 32 bits 0 (4 bits packed) == 1.3 0.3 1.2 0.2 1.1 0.1 1.0 0.0 -// low 32 bits 4 (4 bits packed) == 1.19 0.19 1.18 0.18 1.17 0.17 1.16 0.16 -// low 32 bits 2 (4 bits packed) == 3.3 2.3 3.2 2.2 3.1 2.1 3.0 2.0 -// low 32 bits 6 (4 bits packed) == 3.19 2.19 3.18 2.18 3.17 2.17 3.16 2.16 - - -// -// swizzling -// - -// -// SwizzleBlock32 -// - -.globl SwizzleBlock32_sse2 - .type SwizzleBlock32_sse2, @function -SwizzleBlock32_sse2: - - push %esi - push %edi - - // save dst - mov %edi, %ecx - // save src - mov %esi, %edx - // get pitch - mov %edx, [%esp+4+8] - mov %ecx, 4 - - // get WriteMask - mov %eax, [%esp+8+8] - cmp %eax, 0xffffffff - jne SwizzleBlock32_sse2_2 - - .align 16 -SwizzleBlock32_sse2_1: - movdqa %xmm0, [%esi] - movdqa %xmm4, [%esi+16] - movdqa %xmm1, [%esi+%edx] - movdqa %xmm5, [%esi+%edx+16] - - // 64bits interleave 1&0 -> 2&0 - // 64bits interleave 5&4 -> 6&4 - punpck(qdq, 0, 4, 1, 5, 2, 6) - - movntps [%edi+16*0], %xmm0 - movntps [%edi+16*1], %xmm2 - movntps [%edi+16*2], %xmm4 - movntps [%edi+16*3], %xmm6 - - // update ptr - lea %esi, [%esi+%edx*2] - add %edi, 64 - - dec %ecx - jnz SwizzleBlock32_sse2_1 - - pop %edi - pop %esi - - ret 8 - -SwizzleBlock32_sse2_2: - - // WriteMask: 32bits to 4*32bits - movd %xmm7, %eax - pshufd %xmm7, %xmm7, 0 - - .align 16 -SwizzleBlock32_sse2_3: - movdqa %xmm0, [%esi] - movdqa %xmm4, [%esi+16] - movdqa %xmm1, [%esi+%edx] - movdqa %xmm5, [%esi+%edx+16] - - // 64bits interleave 1&0 -> 2&0 - // 64bits interleave 5&4 -> 6&4 - punpck(qdq, 0, 4, 1, 5, 2, 6) - - // save a mask copy - movdqa %xmm3, %xmm7 - pshufd %xmm5, %xmm7, 0xe4 - - // *dst & ~WriteMask - pandn %xmm3, [%edi+16*0] - // *src & WriteMask - pand %xmm0, %xmm7 - // Final value to save - por %xmm0, %xmm3 - movntps [%edi+16*0], %xmm0 - - pandn %xmm5, [%edi+16*1] - pand %xmm2, %xmm7 - por %xmm2, %xmm5 - movntps [%edi+16*1], %xmm2 - - movdqa %xmm3, %xmm7 - pshufd %xmm5, %xmm7, 0xe4 - - pandn %xmm3, [%edi+16*2] - pand %xmm4, %xmm7 - por %xmm4, %xmm3 - movntps [%edi+16*2], %xmm4 - - pandn %xmm5, [%edi+16*3] - pand %xmm6, %xmm7 - por %xmm6, %xmm5 - movntps [%edi+16*3], %xmm6 - - // update ptr - lea %esi, [%esi+%edx*2] - add %edi, 64 - - dec %ecx - jnz SwizzleBlock32_sse2_3 - - pop %edi - pop %esi - - ret 8 - -// -// SwizzleBlock16 -// - -.globl SwizzleBlock16_sse2 - .type SwizzleBlock16_sse2, @function -SwizzleBlock16_sse2: - - push %ebx - - // srcpitch - mov %ebx, [%esp+4+4] - mov %eax, 4 - - .align 16 -SwizzleBlock16_sse2_1: - movdqa %xmm0, [%edx] - movdqa %xmm1, [%edx+16] - movdqa %xmm2, [%edx+%ebx] - movdqa %xmm3, [%edx+%ebx+16] - - // 16bits interleave 1&0 -> 4&0 - // 16bits interleave 3&2 -> 6&2 - punpck(wd, 0, 2, 1, 3, 4, 6) - // 64bits interleave 2&0 -> 1&0 - // 64bits interleave 6&4 -> 5&4 - punpck(qdq, 0, 4, 2, 6, 1, 5) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm1 - movntps [%ecx+16*2], %xmm4 - movntps [%ecx+16*3], %xmm5 - - // update ptr - lea %edx, [%edx+%ebx*2] - add %ecx, 64 - - dec %eax - jnz SwizzleBlock16_sse2_1 - - pop %ebx - - ret 4 - -// -// SwizzleBlock8 -// - -.globl SwizzleBlock8_sse2 - .type SwizzleBlock8_sse2, @function -SwizzleBlock8_sse2: - - push %ebx - - // load srcpitch - mov %ebx, [%esp+4+4] - // basic counter - mov %eax, 2 - - .align 16 -SwizzleBlock8_sse2_1: - // col 0, 2 - - movdqa %xmm0, [%edx] - movdqa %xmm2, [%edx+%ebx] - // update src pointer - lea %edx, [%edx+%ebx*2] - - // 2 3 0 1 - pshufd %xmm1, [%edx], 0xb1 - pshufd %xmm3, [%edx+%ebx], 0xb1 - // update src pointer - lea %edx, [%edx+%ebx*2] - - // 8bits interleave 1&0 -> 4&0 - // 8bits interleave 3&2 -> 6&2 - punpck(bw, 0, 2, 1, 3, 4, 6) - // 16bits interleave 4&0 -> 1&0 - // 16bits interleave 6&2 -> 3&2 - punpck(wd, 0, 2, 4, 6, 1, 3) - // 64bits interleave 2&0 -> 4&0 - // 64bits interleave 3&1 -> 5&1 - punpck(qdq, 0, 1, 2, 3, 4, 5) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm4 - movntps [%ecx+16*2], %xmm1 - movntps [%ecx+16*3], %xmm5 - - // col 1, 3 (same as previous column) - - // 2 3 0 1 - pshufd %xmm0, [%edx], 0xb1 - pshufd %xmm2, [%edx+%ebx], 0xb1 - // update src pointer - lea %edx, [%edx+%ebx*2] - - movdqa %xmm1, [%edx] - movdqa %xmm3, [%edx+%ebx] - // update src pointer - lea %edx, [%edx+%ebx*2] - - // 8bits interleave 1&0 -> 4&0 - // 8bits interleave 3&2 -> 6&2 - punpck(bw, 0, 2, 1, 3, 4, 6) - // 16bits interleave 4&0 -> 1&0 - // 16bits interleave 6&2 -> 3&2 - punpck(wd, 0, 2, 4, 6, 1, 3) - // 64bits interleave 2&0 -> 4&0 - // 64bits interleave 3&1 -> 5&1 - punpck(qdq, 0, 1, 2, 3, 4, 5) - - movntps [%ecx+16*4], %xmm0 - movntps [%ecx+16*5], %xmm4 - movntps [%ecx+16*6], %xmm1 - movntps [%ecx+16*7], %xmm5 - - // update dst pointer - add %ecx, 128 - - dec %eax - jnz SwizzleBlock8_sse2_1 - - pop %ebx - - ret 4 - -// -// SwizzleBlock4 -// - -.globl SwizzleBlock4_sse2 - .type SwizzleBlock4_sse2, @function -SwizzleBlock4_sse2: - - push %ebx - - // load 4 0x0F0F0F0F - mov %eax, 0xf0f0f0f - movd %xmm7, %eax - pshufd %xmm7, %xmm7, 0 - - // load srcpitch - mov %ebx, [%esp+4+4] - mov %eax, 2 - - .align 16 -SwizzleBlock4_sse2_1: - // col 0, 2 - - movdqa %xmm0, [%edx] - movdqa %xmm2, [%edx+%ebx] - //update src pointer - lea %edx, [%edx+%ebx*2] - - movdqa %xmm1, [%edx] - movdqa %xmm3, [%edx+%ebx] - // update src pointer - lea %edx, [%edx+%ebx*2] - - // - - - - 2 3 0 1 - pshuflw %xmm1, %xmm1, 0xb1 - pshuflw %xmm3, %xmm3, 0xb1 - // 6 7 4 5 - - - - - pshufhw %xmm1, %xmm1, 0xb1 - pshufhw %xmm3, %xmm3, 0xb1 - - // 4bits interleave 1&0 -> 4&0 - // 4bits interleave 3&2 -> 6&2 - punpcknb - // 8bits interleave 4&0 -> 1&0 - // 8bits interleave 6&2 -> 3&2 - punpck(bw, 0, 2, 4, 6, 1, 3) - // 8bits interleave 1&0 -> 4&0 - // 8bits interleave 3&2 -> 6&2 - punpck(bw, 0, 2, 1, 3, 4, 6) - // 64bits interleave 2&0 -> 1&0 - // 64bits interleave 6&4 -> 3&4 - punpck(qdq, 0, 4, 2, 6, 1, 3) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm1 - movntps [%ecx+16*2], %xmm4 - movntps [%ecx+16*3], %xmm3 - - // col 1, 3 (same as previous column) - - movdqa %xmm0, [%edx] - movdqa %xmm2, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - movdqa %xmm1, [%edx] - movdqa %xmm3, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - pshuflw %xmm0, %xmm0, 0xb1 - pshuflw %xmm2, %xmm2, 0xb1 - pshufhw %xmm0, %xmm0, 0xb1 - pshufhw %xmm2, %xmm2, 0xb1 - - punpcknb - punpck(bw, 0, 2, 4, 6, 1, 3) - punpck(bw, 0, 2, 1, 3, 4, 6) - punpck(qdq, 0, 4, 2, 6, 1, 3) - - movntps [%ecx+16*4], %xmm0 - movntps [%ecx+16*5], %xmm1 - movntps [%ecx+16*6], %xmm4 - movntps [%ecx+16*7], %xmm3 - - add %ecx, 128 - - dec %eax - jnz SwizzleBlock4_sse2_1 - - pop %ebx - - ret 4 - -// -// swizzling with unaligned reads -// Same functions as a above with movdqu instead of movdqa for the reads -// Movdqu is as fast as movdqa with aligned address... So do not bother, directly -// use movdqu -// - -// -// SwizzleBlock32u -// - -.globl SwizzleBlock32u_sse2 - .type SwizzleBlock32u_sse2, @function -SwizzleBlock32u_sse2: - - push %esi - push %edi - - mov %edi, %ecx - mov %esi, %edx - mov %edx, [%esp+4+8] - mov %ecx, 4 - - mov %eax, [%esp+8+8] - cmp %eax, 0xffffffff - jne SwizzleBlock32u_sse2_2 - - .align 16 -SwizzleBlock32u_sse2_1: - movdqu %xmm0, [%esi] - movdqu %xmm4, [%esi+16] - movdqu %xmm1, [%esi+%edx] - movdqu %xmm5, [%esi+%edx+16] - - punpck(qdq, 0, 4, 1, 5, 2, 6) - - movntps [%edi+16*0], %xmm0 - movntps [%edi+16*1], %xmm2 - movntps [%edi+16*2], %xmm4 - movntps [%edi+16*3], %xmm6 - - lea %esi, [%esi+%edx*2] - add %edi, 64 - - dec %ecx - jnz SwizzleBlock32u_sse2_1 - - pop %edi - pop %esi - - ret 8 - -SwizzleBlock32u_sse2_2: - - movd %xmm7, %eax - pshufd %xmm7, %xmm7, 0 - - .align 16 -SwizzleBlock32u_sse2_3: - movdqu %xmm0, [%esi] - movdqu %xmm4, [%esi+16] - movdqu %xmm1, [%esi+%edx] - movdqu %xmm5, [%esi+%edx+16] - - punpck(qdq, 0, 4, 1, 5, 2, 6) - - movdqa %xmm3, %xmm7 - pshufd %xmm5, %xmm7, 0xe4 - - pandn %xmm3, [%edi+16*0] - pand %xmm0, %xmm7 - por %xmm0, %xmm3 - movdqa [%edi+16*0], %xmm0 - - pandn %xmm5, [%edi+16*1] - pand %xmm2, %xmm7 - por %xmm2, %xmm5 - movdqa [%edi+16*1], %xmm2 - - movdqa %xmm3, %xmm7 - pshufd %xmm5, %xmm7, 0xe4 - - pandn %xmm3, [%edi+16*2] - pand %xmm4, %xmm7 - por %xmm4, %xmm3 - movdqa [%edi+16*2], %xmm4 - - pandn %xmm5, [%edi+16*3] - pand %xmm6, %xmm7 - por %xmm6, %xmm5 - movdqa [%edi+16*3], %xmm6 - - lea %esi, [%esi+%edx*2] - add %edi, 64 - - dec %ecx - jnz SwizzleBlock32u_sse2_3 - - pop %edi - pop %esi - - ret 8 - -// -// SwizzleBlock16u -// - -.globl SwizzleBlock16u_sse2 - .type SwizzleBlock16u_sse2, @function -SwizzleBlock16u_sse2: - - push %ebx - - mov %ebx, [%esp+4+4] - mov %eax, 4 - - .align 16 -SwizzleBlock16u_sse2_1: - movdqu %xmm0, [%edx] - movdqu %xmm1, [%edx+16] - movdqu %xmm2, [%edx+%ebx] - movdqu %xmm3, [%edx+%ebx+16] - - punpck(wd, 0, 2, 1, 3, 4, 6) - punpck(qdq, 0, 4, 2, 6, 1, 5) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm1 - movntps [%ecx+16*2], %xmm4 - movntps [%ecx+16*3], %xmm5 - - lea %edx, [%edx+%ebx*2] - add %ecx, 64 - - dec %eax - jnz SwizzleBlock16u_sse2_1 - - pop %ebx - - ret 4 - -// -// SwizzleBlock8u -// - -.globl SwizzleBlock8u_sse2 - .type SwizzleBlock8u_sse2, @function -SwizzleBlock8u_sse2: - - push %ebx - - mov %ebx, [%esp+4+4] - mov %eax, 2 - - .align 16 -SwizzleBlock8u_sse2_1: - // col 0, 2 - - movdqu %xmm0, [%edx] - movdqu %xmm2, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - movdqu %xmm1, [%edx] - movdqu %xmm3, [%edx+%ebx] - pshufd %xmm1, %xmm1, 0xb1 - pshufd %xmm3, %xmm3, 0xb1 - lea %edx, [%edx+%ebx*2] - - punpck(bw, 0, 2, 1, 3, 4, 6) - punpck(wd, 0, 2, 4, 6, 1, 3) - punpck(qdq, 0, 1, 2, 3, 4, 5) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm4 - movntps [%ecx+16*2], %xmm1 - movntps [%ecx+16*3], %xmm5 - - // col 1, 3 - - movdqu %xmm0, [%edx] - movdqu %xmm2, [%edx+%ebx] - pshufd %xmm0, %xmm0, 0xb1 - pshufd %xmm2, %xmm2, 0xb1 - lea %edx, [%edx+%ebx*2] - - movdqu %xmm1, [%edx] - movdqu %xmm3, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - punpck(bw, 0, 2, 1, 3, 4, 6) - punpck(wd, 0, 2, 4, 6, 1, 3) - punpck(qdq, 0, 1, 2, 3, 4, 5) - - movntps [%ecx+16*4], %xmm0 - movntps [%ecx+16*5], %xmm4 - movntps [%ecx+16*6], %xmm1 - movntps [%ecx+16*7], %xmm5 - - add %ecx, 128 - - dec %eax - jnz SwizzleBlock8u_sse2_1 - - pop %ebx - - ret 4 - -// -// SwizzleBlock4u -// - -.globl SwizzleBlock4u_sse2 - .type SwizzleBlock4u_sse2, @function -SwizzleBlock4u_sse2: - - push %ebx - - mov %eax, 0xf0f0f0f - movd %xmm7, %eax - pshufd %xmm7, %xmm7, 0 - - mov %ebx, [%esp+4+4] - mov %eax, 2 - - .align 16 -SwizzleBlock4u_sse2_1: - // col 0, 2 - - movdqu %xmm0, [%edx] - movdqu %xmm2, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - movdqu %xmm1, [%edx] - movdqu %xmm3, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - pshuflw %xmm1, %xmm1, 0xb1 - pshuflw %xmm3, %xmm3, 0xb1 - pshufhw %xmm1, %xmm1, 0xb1 - pshufhw %xmm3, %xmm3, 0xb1 - - punpcknb - punpck(bw, 0, 2, 4, 6, 1, 3) - punpck(bw, 0, 2, 1, 3, 4, 6) - punpck(qdq, 0, 4, 2, 6, 1, 3) - - movntps [%ecx+16*0], %xmm0 - movntps [%ecx+16*1], %xmm1 - movntps [%ecx+16*2], %xmm4 - movntps [%ecx+16*3], %xmm3 - - // col 1, 3 - - movdqu %xmm0, [%edx] - movdqu %xmm2, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - movdqu %xmm1, [%edx] - movdqu %xmm3, [%edx+%ebx] - lea %edx, [%edx+%ebx*2] - - pshuflw %xmm0, %xmm0, 0xb1 - pshuflw %xmm2, %xmm2, 0xb1 - pshufhw %xmm0, %xmm0, 0xb1 - pshufhw %xmm2, %xmm2, 0xb1 - - punpcknb - punpck(bw, 0, 2, 4, 6, 1, 3) - punpck(bw, 0, 2, 1, 3, 4, 6) - punpck(qdq, 0, 4, 2, 6, 1, 3) - - movntps [%ecx+16*4], %xmm0 - movntps [%ecx+16*5], %xmm1 - movntps [%ecx+16*6], %xmm4 - movntps [%ecx+16*7], %xmm3 - - add %ecx, 128 - - dec %eax - jnz SwizzleBlock4u_sse2_1 - - pop %ebx - - ret 4 - -#endif - -#if defined(__linux__) && defined(__ELF__) -.section .note.GNU-stack,"",%progbits -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86.cpp 2012-04-21 16:13:45.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1367 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "x86.h" -#include "Util.h" - - -// Note: all codes of this files is deprecated. Keeping for reference. - - -// swizzling - -//These were only used in the old version of RESOLVE_32_BITS. Keeping for reference. -#if 0 - -/* FrameSwizzleBlock32 */ -void __fastcall FrameSwizzleBlock32_c(u32* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if (WriteMask == 0xffffffff) - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - dst[d[j]] = (src[j]); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - dst[d[j]] = ((src[j])&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } -} - -void __fastcall FrameSwizzleBlock32A2_c(u32* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if( WriteMask == 0xffffffff ) { - for(int i = 0; i < 8; ++i, d += 8) { - for(int j = 0; j < 8; ++j) { - dst[d[j]] = ((src[2*j] + src[2*j+1]) >> 1); - } - src += srcpitch; - } - } - else { - for(int i = 0; i < 8; ++i, d += 8) { - for(int j = 0; j < 8; ++j) { - dst[d[j]] = (((src[2*j] + src[2*j+1]) >> 1)&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } -} - -void __fastcall FrameSwizzleBlock32A4_c(u32* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if( WriteMask == 0xffffffff ) { - for(int i = 0; i < 8; ++i, d += 8) { - for(int j = 0; j < 8; ++j) { - dst[d[j]] = ((src[2*j] + src[2*j+1] + src[2*j+srcpitch] + src[2*j+srcpitch+1]) >> 2); - } - src += srcpitch << 1; - } - } - else { - for(int i = 0; i < 8; ++i, d += 8) { - for(int j = 0; j < 8; ++j) { - dst[d[j]] = (((src[2*j] + src[2*j+1] + src[2*j+srcpitch] + src[2*j+srcpitch+1]) >> 2)&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch << 1; - } - } -} - -#define FrameSwizzleBlock24_c FrameSwizzleBlock32_c -#define FrameSwizzleBlock24A2_c FrameSwizzleBlock32A2_c -#define FrameSwizzleBlock24A4_c FrameSwizzleBlock32A4_c - -/* FrameSwizzleBlock16 */ -void __fastcall FrameSwizzleBlock16_c(u16* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if (WriteMask == 0xffff) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = (src[j]); - dst[d[j]] = RGBA32to16(temp); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = (src[j]); - u32 dsrc = RGBA32to16(temp); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } -} - -void __fastcall FrameSwizzleBlock16A2_c(u16* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if (WriteMask == 0xffff) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = ((src[2*j] + src[2*j+1]) >> 1); - dst[d[j]] = RGBA32to16(temp); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = ((src[2*j] + src[2*j+1]) >> 1); - u32 dsrc = RGBA32to16(temp); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } -} - -void __fastcall FrameSwizzleBlock16A4_c(u16* dst, u32* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if (WriteMask == 0xffff) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = ((src[2*j] + src[2*j+1] + src[2*j+srcpitch] + src[2*j+srcpitch+1]) >> 2); - dst[d[j]] = RGBA32to16(temp); - } - src += srcpitch << 1; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - u32 temp = ((src[2*j] + src[2*j+1] + src[2*j+srcpitch] + src[2*j+srcpitch+1]) >> 2); - u32 dsrc = RGBA32to16(temp); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch << 1; - } - } -} - - -/* Frame16SwizzleBlock32 */ -void __fastcall Frame16SwizzleBlock32_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if( WriteMask == 0xffffffff ) - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[j]); - dst[d[j]] = Float16ToARGB(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[j]); - u32 dsrc = Float16ToARGB(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock32A2_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if( WriteMask == 0xffffffff ) - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock32A4_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - - if( WriteMask == 0xffffffff ) - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB(dsrc16); - } - src += srcpitch << 1; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch << 1; - } - } - } - -/* Frame16SwizzleBlock32Z */ -void __fastcall Frame16SwizzleBlock32Z_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - if( WriteMask == 0xffffffff ) /* breaks KH text if not checked */ - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[j]); - dst[d[j]] = Float16ToARGB_Z(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[j]); - u32 dsrc = Float16ToARGB_Z(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock32ZA2_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - if( WriteMask == 0xffffffff ) /* breaks KH text if not checked */ - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB_Z(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB_Z(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock32ZA4_c(u32* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable32[0][0]; - if( WriteMask == 0xffffffff ) /* breaks KH text if not checked */ - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB_Z(dsrc16); - } - src += srcpitch << 1; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 8) - { - for(int j = 0; j < 8; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB_Z(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch << 1; - } - } - } - - - /* Frame16SwizzleBlock16 */ -void __fastcall Frame16SwizzleBlock16_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if ((WriteMask&0xfff8f8f8) == 0xfff8f8f8) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[j]); - dst[d[j]] = Float16ToARGB16(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[j]); - u32 dsrc = Float16ToARGB16(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock16A2_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if ((WriteMask&0xfff8f8f8) == 0xfff8f8f8) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB16(dsrc16); - } - src += srcpitch; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB16(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch; - } - } - } - -void __fastcall Frame16SwizzleBlock16A4_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - if ((WriteMask&0xfff8f8f8) == 0xfff8f8f8) - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB16(dsrc16); - } - src += srcpitch << 1; - } - } - else - { - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - u32 dsrc = Float16ToARGB16(dsrc16); - dst[d[j]] = (dsrc&WriteMask)|(dst[d[j]]&~WriteMask); - } - src += srcpitch << 1; - } - } - } - - /* Frame16SwizzleBlock16Z */ -void __fastcall Frame16SwizzleBlock16Z_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[j]); - dst[d[j]] = Float16ToARGB16_Z(dsrc16); - } - src += srcpitch; - } -} - -void __fastcall Frame16SwizzleBlock16ZA2_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB16_Z(dsrc16); - } - src += srcpitch; - } -} - -void __fastcall Frame16SwizzleBlock16ZA4_c(u16* dst, Vector_16F* src, int srcpitch, u32 WriteMask) -{ - u32* d = &g_columnTable16[0][0]; - - for(int i = 0; i < 8; ++i, d += 16) - { - for(int j = 0; j < 16; ++j) - { - Vector_16F dsrc16 = (src[2*j]); - dst[d[j]] = Float16ToARGB16_Z(dsrc16); - } - src += srcpitch << 1; - } -} -#endif - -#ifdef ZEROGS_SSE2 - -//void __fastcall WriteCLUT_T16_I8_CSM1_sse2(u32* vm, u32* clut) -//{ -// __asm { -// mov eax, vm -// mov ecx, clut -// mov edx, 8 -// } -// -//Extract32x2: -// __asm { -// movdqa xmm0, qword ptr [eax] -// movdqa xmm1, qword ptr [eax+16] -// movdqa xmm2, qword ptr [eax+32] -// movdqa xmm3, qword ptr [eax+48] -// -// // rearrange -// pshuflw xmm0, xmm0, 0xd8 -// pshufhw xmm0, xmm0, 0xd8 -// pshuflw xmm1, xmm1, 0xd8 -// pshufhw xmm1, xmm1, 0xd8 -// pshuflw xmm2, xmm2, 0xd8 -// pshufhw xmm2, xmm2, 0xd8 -// pshuflw xmm3, xmm3, 0xd8 -// pshufhw xmm3, xmm3, 0xd8 -// -// movdqa xmm4, xmm0 -// movdqa xmm6, xmm2 -// -// shufps xmm0, xmm1, 0x88 -// shufps xmm2, xmm3, 0x88 -// -// shufps xmm4, xmm1, 0xdd -// shufps xmm6, xmm3, 0xdd -// -// pshufd xmm0, xmm0, 0xd8 -// pshufd xmm2, xmm2, 0xd8 -// pshufd xmm4, xmm4, 0xd8 -// pshufd xmm6, xmm6, 0xd8 -// -// // left column -// movhlps xmm1, xmm0 -// movlhps xmm0, xmm2 -// //movdqa xmm7, [ecx] -// -// movdqa [ecx], xmm0 -// shufps xmm1, xmm2, 0xe4 -// movdqa [ecx+16], xmm1 -// -// // right column -// movhlps xmm3, xmm4 -// movlhps xmm4, xmm6 -// movdqa [ecx+32], xmm4 -// shufps xmm3, xmm6, 0xe4 -// movdqa [ecx+48], xmm3 -// -// add eax, 16*4 -// add ecx, 16*8 -// sub edx, 1 -// cmp edx, 0 -// jne Extract32x2 -// } -//} - -#if 0 -extern "C" void __fastcall WriteCLUT_T32_I8_CSM1_sse2(u32* vm, u32* clut) -{ - __m128i* src = (__m128i*)vm; - __m128i* dst = (__m128i*)clut; - - for (int j = 0; j < 64; j += 32, src += 32, dst += 32) - { - for (int i = 0; i < 16; i += 4) - { - __m128i r0 = _mm_load_si128(&src[i+0]); - __m128i r1 = _mm_load_si128(&src[i+1]); - __m128i r2 = _mm_load_si128(&src[i+2]); - __m128i r3 = _mm_load_si128(&src[i+3]); - - _mm_store_si128(&dst[i*2+0], _mm_unpacklo_epi64(r0, r1)); - _mm_store_si128(&dst[i*2+1], _mm_unpacklo_epi64(r2, r3)); - _mm_store_si128(&dst[i*2+2], _mm_unpackhi_epi64(r0, r1)); - _mm_store_si128(&dst[i*2+3], _mm_unpackhi_epi64(r2, r3)); - - __m128i r4 = _mm_load_si128(&src[i+0+16]); - __m128i r5 = _mm_load_si128(&src[i+1+16]); - __m128i r6 = _mm_load_si128(&src[i+2+16]); - __m128i r7 = _mm_load_si128(&src[i+3+16]); - - _mm_store_si128(&dst[i*2+4], _mm_unpacklo_epi64(r4, r5)); - _mm_store_si128(&dst[i*2+5], _mm_unpacklo_epi64(r6, r7)); - _mm_store_si128(&dst[i*2+6], _mm_unpackhi_epi64(r4, r5)); - _mm_store_si128(&dst[i*2+7], _mm_unpackhi_epi64(r6, r7)); - } - } -} - - -extern "C" void __fastcall WriteCLUT_T32_I4_CSM1_sse2(u32* vm, u32* clut) -{ - __m128i* src = (__m128i*)vm; - __m128i* dst = (__m128i*)clut; - - __m128i r0 = _mm_load_si128(&src[0]); - __m128i r1 = _mm_load_si128(&src[1]); - __m128i r2 = _mm_load_si128(&src[2]); - __m128i r3 = _mm_load_si128(&src[3]); - - _mm_store_si128(&dst[0], _mm_unpacklo_epi64(r0, r1)); - _mm_store_si128(&dst[1], _mm_unpacklo_epi64(r2, r3)); - _mm_store_si128(&dst[2], _mm_unpackhi_epi64(r0, r1)); - _mm_store_si128(&dst[3], _mm_unpackhi_epi64(r2, r3)); -} - -static const __aligned16 int s_clut_16bits_mask[4] = { 0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff }; -static const __aligned16 int s_clut16mask2[4] = { 0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff }; -static const __aligned16 int s_clut16mask[8] = { 0xffff0000, 0xffff0000, 0xffff0000, 0xffff0000, - 0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff - }; - -template -void __fastcall WriteCLUT_T16_I4_CSM1_core_sse2(u32* vm, u32* clut) -{ - __m128i vm_0; - __m128i vm_1; - __m128i vm_2; - __m128i vm_3; - __m128i clut_0; - __m128i clut_1; - __m128i clut_2; - __m128i clut_3; - - __m128i clut_mask = _mm_load_si128((__m128i*)s_clut_16bits_mask); - - // !HIGH_16BITS_VM - // CSA in 0-15 - // Replace lower 16 bits of clut0 with lower 16 bits of vm - // CSA in 16-31 - // Replace higher 16 bits of clut0 with lower 16 bits of vm - - // HIGH_16BITS_VM - // CSA in 0-15 - // Replace lower 16 bits of clut0 with higher 16 bits of vm - // CSA in 16-31 - // Replace higher 16 bits of clut0 with higher 16 bits of vm - if(HIGH_16BITS_VM && CSA_0_15) { - // move up to low - vm_0 = _mm_load_si128((__m128i*)vm); // 9 8 1 0 - vm_1 = _mm_load_si128((__m128i*)vm+1); // 11 10 3 2 - vm_2 = _mm_load_si128((__m128i*)vm+2); // 13 12 5 4 - vm_3 = _mm_load_si128((__m128i*)vm+3); // 15 14 7 6 - vm_0 = _mm_srli_epi32(vm_0, 16); - vm_1 = _mm_srli_epi32(vm_1, 16); - vm_2 = _mm_srli_epi32(vm_2, 16); - vm_3 = _mm_srli_epi32(vm_3, 16); - } else if(HIGH_16BITS_VM && !CSA_0_15) { - // Remove lower 16 bits - vm_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm)); // 9 8 1 0 - vm_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+1)); // 11 10 3 2 - vm_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+2)); // 13 12 5 4 - vm_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && CSA_0_15) { - // Remove higher 16 bits - vm_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm)); // 9 8 1 0 - vm_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+1)); // 11 10 3 2 - vm_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+2)); // 13 12 5 4 - vm_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && !CSA_0_15) { - // move low to high - vm_0 = _mm_load_si128((__m128i*)vm); // 9 8 1 0 - vm_1 = _mm_load_si128((__m128i*)vm+1); // 11 10 3 2 - vm_2 = _mm_load_si128((__m128i*)vm+2); // 13 12 5 4 - vm_3 = _mm_load_si128((__m128i*)vm+3); // 15 14 7 6 - vm_0 = _mm_slli_epi32(vm_0, 16); - vm_1 = _mm_slli_epi32(vm_1, 16); - vm_2 = _mm_slli_epi32(vm_2, 16); - vm_3 = _mm_slli_epi32(vm_3, 16); - } - - // Unsizzle the data - __m128i row_0 = _mm_unpacklo_epi32(vm_0, vm_1); // 3 2 1 0 - __m128i row_1 = _mm_unpacklo_epi32(vm_2, vm_3); // 7 6 5 4 - __m128i row_2 = _mm_unpackhi_epi32(vm_0, vm_1); // 11 10 9 8 - __m128i row_3 = _mm_unpackhi_epi32(vm_2, vm_3); // 15 14 13 12 - - // load old data & remove useless part - if(CSA_0_15) { - // Remove lower 16 bits - clut_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } else { - // Remove higher 16 bits - clut_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } - - // Merge old & new data - clut_0 = _mm_or_si128(clut_0, row_0); - clut_1 = _mm_or_si128(clut_1, row_1); - clut_2 = _mm_or_si128(clut_2, row_2); - clut_3 = _mm_or_si128(clut_3, row_3); - - _mm_store_si128((__m128i*)clut, clut_0); - _mm_store_si128((__m128i*)clut+1, clut_1); - _mm_store_si128((__m128i*)clut+2, clut_2); - _mm_store_si128((__m128i*)clut+3, clut_3); -} - -extern "C" void __fastcall WriteCLUT_T16_I4_CSM1_sse2(u32* vm, u32 csa) -{ - u32* clut = (u32*)(g_pbyGSClut + 64*(csa & 15)); - - if (csa > 15) { - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - } else { - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - } -} - -extern "C" void __fastcall WriteCLUT_T16_I4_CSM1_sse2_old(u32* vm, u32* clut) -{ -#define YET_ANOTHER_INTRINSIC -#ifdef YET_ANOTHER_INTRINSIC - __m128i vm0 = _mm_load_si128((__m128i*)vm); - __m128i vm1 = _mm_load_si128((__m128i*)vm+1); - __m128i vm2 = _mm_load_si128((__m128i*)vm+2); - __m128i vm3 = _mm_load_si128((__m128i*)vm+3); - - // rearrange 16bits words - vm0 = _mm_shufflehi_epi16(vm0, 0x88); - vm0 = _mm_shufflelo_epi16(vm0, 0x88); // 6 4 6 4 2 0 2 0 - vm1 = _mm_shufflehi_epi16(vm1, 0x88); - vm1 = _mm_shufflelo_epi16(vm1, 0x88); // 14 12 14 12 10 8 10 8 - - // Note: MSVC complains about direct c-cast... - // vm0 = (__m128i)_mm_shuffle_ps((__m128)vm0, (__m128)vm1, 0x88); // 14 12 10 8 6 4 2 0 - __m128 vm0_f = (_mm_shuffle_ps((__m128&)vm0, (__m128&)vm1, 0x88)); // 14 12 10 8 6 4 2 0 - vm0 = (__m128i&)vm0_f; - vm0 = _mm_shuffle_epi32(vm0, 0xD8); // 14 12 6 4 10 8 2 0 - - // *** Same jobs for vm2 and vm3 - vm2 = _mm_shufflehi_epi16(vm2, 0x88); - vm2 = _mm_shufflelo_epi16(vm2, 0x88); - vm3 = _mm_shufflehi_epi16(vm3, 0x88); - vm3 = _mm_shufflelo_epi16(vm3, 0x88); - - // Note: MSVC complains about direct c-cast... - // vm2 = (__m128i)_mm_shuffle_ps((__m128)vm2, (__m128)vm3, 0x88); - __m128 vm2_f = (_mm_shuffle_ps((__m128&)vm2, (__m128&)vm3, 0x88)); - vm2 = (__m128i&)vm2_f; - vm2 = _mm_shuffle_epi32(vm2, 0xD8); - - // Create a zero register. - __m128i zero_128 = _mm_setzero_si128(); - - if ((u32)clut & 0x0F) { - // Unaligned write. - - u16* clut_word_ptr = (u16*)clut; - __m128i clut_mask = _mm_load_si128((__m128i*)s_clut16mask2); - - // Load previous data and clear high 16 bits of double words - __m128i clut_0 = _mm_load_si128((__m128i*)(clut_word_ptr-1)); // 6 5 4 3 2 1 0 x - __m128i clut_2 = _mm_load_si128((__m128i*)(clut_word_ptr-1)+2); // 22 21 20 19 18 17 16 15 - clut_0 = _mm_and_si128(clut_0, clut_mask); // - 5 - 3 - 1 - x - clut_2 = _mm_and_si128(clut_2, clut_mask); // - 21 - 19 - 17 - 15 - - // Convert 16bits to 32 bits vm0 (zero entended) - __m128i vm0_low = _mm_unpacklo_epi16(vm0, zero_128); // - 10 - 8 - 2 - 0 - __m128i vm0_high = _mm_unpackhi_epi16(vm0, zero_128); // - 14 - 12 - 6 - 4 - - // shift the value to aligned it with clut - vm0_low = _mm_slli_epi32(vm0_low, 16); // 10 - 8 - 2 - 0 - - vm0_high = _mm_slli_epi32(vm0_high, 16); // 14 - 12 - 6 - 4 - - - // Interlace old and new data - clut_0 = _mm_or_si128(clut_0, vm0_low); // 10 5 8 3 2 1 0 x - clut_2 = _mm_or_si128(clut_2, vm0_high); // 14 21 12 19 6 17 4 15 - - // Save the result - _mm_store_si128((__m128i*)(clut_word_ptr-1), clut_0); - _mm_store_si128((__m128i*)(clut_word_ptr-1)+2, clut_2); - - // *** Same jobs for clut_1 and clut_3 - __m128i clut_1 = _mm_load_si128((__m128i*)(clut_word_ptr-1)+1); - __m128i clut_3 = _mm_load_si128((__m128i*)(clut_word_ptr-1)+3); - clut_1 = _mm_and_si128(clut_1, clut_mask); - clut_3 = _mm_and_si128(clut_3, clut_mask); - - __m128i vm2_low = _mm_unpacklo_epi16(vm2, zero_128); - __m128i vm2_high = _mm_unpackhi_epi16(vm2, zero_128); - vm2_low = _mm_slli_epi32(vm2_low, 16); - vm2_high = _mm_slli_epi32(vm2_high, 16); - - clut_1 = _mm_or_si128(clut_1, vm2_low); - clut_3 = _mm_or_si128(clut_3, vm2_high); - - _mm_store_si128((__m128i*)(clut_word_ptr-1)+1, clut_1); - _mm_store_si128((__m128i*)(clut_word_ptr-1)+3, clut_3); - } else { - // Standard write - - __m128i clut_mask = _mm_load_si128((__m128i*)s_clut16mask); - - // Load previous data and clear low 16 bits of double words - __m128i clut_0 = _mm_and_si128(_mm_load_si128((__m128i*)clut), clut_mask); // 7 - 5 - 3 - 1 - - __m128i clut_2 = _mm_and_si128(_mm_load_si128((__m128i*)clut+2), clut_mask); // 23 - 21 - 19 - 17 - - - // Convert 16bits to 32 bits vm0 (zero entended) - __m128i vm0_low = _mm_unpacklo_epi16(vm0, zero_128); // - 10 - 8 - 2 - 0 - __m128i vm0_high = _mm_unpackhi_epi16(vm0, zero_128); // - 14 - 12 - 6 - 4 - - // Interlace old and new data - clut_0 = _mm_or_si128(clut_0, vm0_low); // 7 10 5 8 3 2 1 0 - clut_2 = _mm_or_si128(clut_2, vm0_high); // 23 14 21 12 19 6 17 4 - - // Save the result - _mm_store_si128((__m128i*)clut, clut_0); - _mm_store_si128((__m128i*)clut+2, clut_2); - - // *** Same jobs for clut_1 and clut_3 - __m128i clut_1 = _mm_and_si128(_mm_load_si128((__m128i*)clut+1), clut_mask); - __m128i clut_3 = _mm_and_si128(_mm_load_si128((__m128i*)clut+3), clut_mask); - - __m128i vm2_low = _mm_unpacklo_epi16(vm2, zero_128); - __m128i vm2_high = _mm_unpackhi_epi16(vm2, zero_128); - - clut_1 = _mm_or_si128(clut_1, vm2_low); - clut_3 = _mm_or_si128(clut_3, vm2_high); - - _mm_store_si128((__m128i*)clut+1, clut_1); - _mm_store_si128((__m128i*)clut+3, clut_3); - } - -#else -#if defined(_MSC_VER) - __asm - { - mov eax, vm - mov ecx, clut - movdqa xmm0, qword ptr [eax] - movdqa xmm1, qword ptr [eax+16] - movdqa xmm2, qword ptr [eax+32] - movdqa xmm3, qword ptr [eax+48] - - // rearrange - pshuflw xmm0, xmm0, 0x88 - pshufhw xmm0, xmm0, 0x88 - pshuflw xmm1, xmm1, 0x88 - pshufhw xmm1, xmm1, 0x88 - pshuflw xmm2, xmm2, 0x88 - pshufhw xmm2, xmm2, 0x88 - pshuflw xmm3, xmm3, 0x88 - pshufhw xmm3, xmm3, 0x88 - - shufps xmm0, xmm1, 0x88 - shufps xmm2, xmm3, 0x88 - - pshufd xmm0, xmm0, 0xd8 - pshufd xmm2, xmm2, 0xd8 - - pxor xmm6, xmm6 - - test ecx, 15 - jnz WriteUnaligned - - movdqa xmm7, s_clut16mask // saves upper 16 bytes - - // have to save interlaced with the old data - movdqa xmm4, [ecx] - movdqa xmm5, [ecx+32] - movhlps xmm1, xmm0 - movlhps xmm0, xmm2 // lower 8 colors - - pand xmm4, xmm7 - pand xmm5, xmm7 - - shufps xmm1, xmm2, 0xe4 // upper 8 colors - movdqa xmm2, xmm0 - movdqa xmm3, xmm1 - - punpcklwd xmm0, xmm6 - punpcklwd xmm1, xmm6 - por xmm0, xmm4 - por xmm1, xmm5 - - punpckhwd xmm2, xmm6 - punpckhwd xmm3, xmm6 - - movdqa [ecx], xmm0 - movdqa [ecx+32], xmm1 - - movdqa xmm5, xmm7 - pand xmm7, [ecx+16] - pand xmm5, [ecx+48] - - por xmm2, xmm7 - por xmm3, xmm5 - - movdqa [ecx+16], xmm2 - movdqa [ecx+48], xmm3 - jmp End - -WriteUnaligned: - // ecx is offset by 2 - sub ecx, 2 - - movdqa xmm7, s_clut16mask2 // saves lower 16 bytes - - // have to save interlaced with the old data - movdqa xmm4, [ecx] - movdqa xmm5, [ecx+32] - movhlps xmm1, xmm0 - movlhps xmm0, xmm2 // lower 8 colors - - pand xmm4, xmm7 - pand xmm5, xmm7 - - shufps xmm1, xmm2, 0xe4 // upper 8 colors - movdqa xmm2, xmm0 - movdqa xmm3, xmm1 - - punpcklwd xmm0, xmm6 - punpcklwd xmm1, xmm6 - pslld xmm0, 16 - pslld xmm1, 16 - por xmm0, xmm4 - por xmm1, xmm5 - - punpckhwd xmm2, xmm6 - punpckhwd xmm3, xmm6 - pslld xmm2, 16 - pslld xmm3, 16 - - movdqa [ecx], xmm0 - movdqa [ecx+32], xmm1 - - movdqa xmm5, xmm7 - pand xmm7, [ecx+16] - pand xmm5, [ecx+48] - - por xmm2, xmm7 - por xmm3, xmm5 - - movdqa [ecx+16], xmm2 - movdqa [ecx+48], xmm3 - -End: - } -#else - __asm__ __volatile__(".intel_syntax noprefix\n" - "movdqa xmm0, xmmword ptr [%[vm]]\n" - "movdqa xmm1, xmmword ptr [%[vm]+16]\n" - "movdqa xmm2, xmmword ptr [%[vm]+32]\n" - "movdqa xmm3, xmmword ptr [%[vm]+48]\n" - - // rearrange - "pshuflw xmm0, xmm0, 0x88\n" - "pshufhw xmm0, xmm0, 0x88\n" - "pshuflw xmm1, xmm1, 0x88\n" - "pshufhw xmm1, xmm1, 0x88\n" - "pshuflw xmm2, xmm2, 0x88\n" - "pshufhw xmm2, xmm2, 0x88\n" - "pshuflw xmm3, xmm3, 0x88\n" - "pshufhw xmm3, xmm3, 0x88\n" - - "shufps xmm0, xmm1, 0x88\n" - "shufps xmm2, xmm3, 0x88\n" - - "pshufd xmm0, xmm0, 0xd8\n" - "pshufd xmm2, xmm2, 0xd8\n" - - "pxor xmm6, xmm6\n" - - "test %[clut], 15\n" - "jnz WriteUnaligned\n" - - "movdqa xmm7, %[s_clut16mask]\n" // saves upper 16 bits - - // have to save interlaced with the old data - "movdqa xmm4, [%[clut]]\n" - "movdqa xmm5, [%[clut]+32]\n" - "movhlps xmm1, xmm0\n" - "movlhps xmm0, xmm2\n"// lower 8 colors - - "pand xmm4, xmm7\n" - "pand xmm5, xmm7\n" - - "shufps xmm1, xmm2, 0xe4\n" // upper 8 colors - "movdqa xmm2, xmm0\n" - "movdqa xmm3, xmm1\n" - - "punpcklwd xmm0, xmm6\n" - "punpcklwd xmm1, xmm6\n" - "por xmm0, xmm4\n" - "por xmm1, xmm5\n" - - "punpckhwd xmm2, xmm6\n" - "punpckhwd xmm3, xmm6\n" - - "movdqa [%[clut]], xmm0\n" - "movdqa [%[clut]+32], xmm1\n" - - "movdqa xmm5, xmm7\n" - "pand xmm7, [%[clut]+16]\n" - "pand xmm5, [%[clut]+48]\n" - - "por xmm2, xmm7\n" - "por xmm3, xmm5\n" - - "movdqa [%[clut]+16], xmm2\n" - "movdqa [%[clut]+48], xmm3\n" - "jmp WriteCLUT_T16_I4_CSM1_End\n" - - "WriteUnaligned:\n" - // %[clut] is offset by 2 - "sub %[clut], 2\n" - - "movdqa xmm7, %[s_clut16mask2]\n" // saves lower 16 bits - - // have to save interlaced with the old data - "movdqa xmm4, [%[clut]]\n" - "movdqa xmm5, [%[clut]+32]\n" - "movhlps xmm1, xmm0\n" - "movlhps xmm0, xmm2\n" // lower 8 colors - - "pand xmm4, xmm7\n" - "pand xmm5, xmm7\n" - - "shufps xmm1, xmm2, 0xe4\n" // upper 8 colors - "movdqa xmm2, xmm0\n" - "movdqa xmm3, xmm1\n" - - "punpcklwd xmm0, xmm6\n" - "punpcklwd xmm1, xmm6\n" - "pslld xmm0, 16\n" - "pslld xmm1, 16\n" - "por xmm0, xmm4\n" - "por xmm1, xmm5\n" - - "punpckhwd xmm2, xmm6\n" - "punpckhwd xmm3, xmm6\n" - "pslld xmm2, 16\n" - "pslld xmm3, 16\n" - - "movdqa [%[clut]], xmm0\n" - "movdqa [%[clut]+32], xmm1\n" - - "movdqa xmm5, xmm7\n" - "pand xmm7, [%[clut]+16]\n" - "pand xmm5, [%[clut]+48]\n" - - "por xmm2, xmm7\n" - "por xmm3, xmm5\n" - - "movdqa [%[clut]+16], xmm2\n" - "movdqa [%[clut]+48], xmm3\n" - "WriteCLUT_T16_I4_CSM1_End:\n" - "\n" - ".att_syntax\n" - : - : [vm] "r" (vm), [clut] "r" (clut), [s_clut16mask] "m" (*s_clut16mask), [s_clut16mask2] "m" (*s_clut16mask2) - : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "memory" - ); -#endif // _MSC_VER -#endif -} - -__forceinline void WriteCLUT_T16_I8_CSM1_sse2(u32* vm, u32 csa) -{ - // update the right clut column (csa < 16) - u32* clut = (u32*)(g_pbyGSClut + 64*(csa & 15)); - u32 csa_right = (csa < 16) ? 16 - csa : 0; - - for(int i = (csa_right/2); i > 0 ; --i) { - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - vm += 16; // go down one column - } - - // update the left clut column - u32 csa_left = (csa >= 16) ? 16 : csa; - - // In case csa_right is odd (so csa_left is also odd), we cross the clut column - if(csa_right & 0x1) { - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - // go back to the base before processing left clut column - clut = (u32*)(g_pbyGSClut); - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - } else if(csa_right != 0) { - // go back to the base before processing left clut column - clut = (u32*)(g_pbyGSClut); - } - - for(int i = (csa_left/2); i > 0 ; --i) { - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - WriteCLUT_T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - vm += 16; // go down one column - } -} -#endif - -#endif // ZEROGS_SSE2 - -#if 0 -void __fastcall WriteCLUT_T16_I8_CSM1_c(u32* _vm, u32* _clut) -{ - const static u32 map[] = - { - 0, 2, 8, 10, 16, 18, 24, 26, - 4, 6, 12, 14, 20, 22, 28, 30, - 1, 3, 9, 11, 17, 19, 25, 27, - 5, 7, 13, 15, 21, 23, 29, 31 - }; - - u16* vm = (u16*)_vm; - u16* clut = (u16*)_clut; - - int left = ((u32)(uptr)clut & 2) ? 512 : 512 - (((u32)(uptr)clut) & 0x3ff) / 2; - - for (int j = 0; j < 8; j++, vm += 32, clut += 64, left -= 32) - { - if (left == 32) - { - assert(left == 32); - - for (int i = 0; i < 16; i++) - clut[2*i] = vm[map[i]]; - - clut = (u16*)((uptr)clut & ~0x3ff) + 1; - - for (int i = 16; i < 32; i++) - clut[2*i] = vm[map[i]]; - } - else - { - if (left == 0) - { - clut = (u16*)((uptr)clut & ~0x3ff) + 1; - left = -1; - } - - for (int i = 0; i < 32; i++) - clut[2*i] = vm[map[i]]; - } - } -} - -void __fastcall WriteCLUT_T32_I8_CSM1_c(u32* vm, u32* clut) -{ - u64* src = (u64*)vm; - u64* dst = (u64*)clut; - - for (int j = 0; j < 2; j++, src += 32) - { - for (int i = 0; i < 4; i++, dst += 16, src += 8) - { - dst[0] = src[0]; - dst[1] = src[2]; - dst[2] = src[4]; - dst[3] = src[6]; - dst[4] = src[1]; - dst[5] = src[3]; - dst[6] = src[5]; - dst[7] = src[7]; - - dst[8] = src[32]; - dst[9] = src[32+2]; - dst[10] = src[32+4]; - dst[11] = src[32+6]; - dst[12] = src[32+1]; - dst[13] = src[32+3]; - dst[14] = src[32+5]; - dst[15] = src[32+7]; - } - } -} - -void __fastcall WriteCLUT_T16_I4_CSM1_c(u32* _vm, u32* _clut) -{ - u16* dst = (u16*)_clut; - u16* src = (u16*)_vm; - - dst[0] = src[0]; - dst[2] = src[2]; - dst[4] = src[8]; - dst[6] = src[10]; - dst[8] = src[16]; - dst[10] = src[18]; - dst[12] = src[24]; - dst[14] = src[26]; - dst[16] = src[4]; - dst[18] = src[6]; - dst[20] = src[12]; - dst[22] = src[14]; - dst[24] = src[20]; - dst[26] = src[22]; - dst[28] = src[28]; - dst[30] = src[30]; -} - -void __fastcall WriteCLUT_T32_I4_CSM1_c(u32* vm, u32* clut) -{ - u64* src = (u64*)vm; - u64* dst = (u64*)clut; - - dst[0] = src[0]; - dst[1] = src[2]; - dst[2] = src[4]; - dst[3] = src[6]; - dst[4] = src[1]; - dst[5] = src[3]; - dst[6] = src[5]; - dst[7] = src[7]; -} - -#endif - -void SSE2_UnswizzleZ16Target(u16* dst, u16* src, int iters) -{ - -#if defined(_MSC_VER) - __asm - { - mov edx, iters - pxor xmm7, xmm7 - mov eax, dst - mov ecx, src - -Z16Loop: - // unpack 64 bytes at a time - movdqa xmm0, [ecx] - movdqa xmm2, [ecx+16] - movdqa xmm4, [ecx+32] - movdqa xmm6, [ecx+48] - - movdqa xmm1, xmm0 - movdqa xmm3, xmm2 - movdqa xmm5, xmm4 - - punpcklwd xmm0, xmm7 - punpckhwd xmm1, xmm7 - punpcklwd xmm2, xmm7 - punpckhwd xmm3, xmm7 - - // start saving - movdqa [eax], xmm0 - movdqa [eax+16], xmm1 - - punpcklwd xmm4, xmm7 - punpckhwd xmm5, xmm7 - - movdqa [eax+32], xmm2 - movdqa [eax+48], xmm3 - - movdqa xmm0, xmm6 - punpcklwd xmm6, xmm7 - - movdqa [eax+64], xmm4 - movdqa [eax+80], xmm5 - - punpckhwd xmm0, xmm7 - - movdqa [eax+96], xmm6 - movdqa [eax+112], xmm0 - - add ecx, 64 - add eax, 128 - sub edx, 1 - jne Z16Loop - } -#else // _MSC_VER - - __asm__ __volatile__(".intel_syntax\n" - "pxor %%xmm7, %%xmm7\n" - - "Z16Loop:\n" - // unpack 64 bytes at a time - "movdqa %%xmm0, [%[src]]\n" - "movdqa %%xmm2, [%[src]+16]\n" - "movdqa %%xmm4, [%[src]+32]\n" - "movdqa %%xmm6, [%[src]+48]\n" - - "movdqa %%xmm1, %%xmm0\n" - "movdqa %%xmm3, %%xmm2\n" - "movdqa %%xmm5, %%xmm4\n" - - "punpcklwd %%xmm0, %%xmm7\n" - "punpckhwd %%xmm1, %%xmm7\n" - "punpcklwd %%xmm2, %%xmm7\n" - "punpckhwd %%xmm3, %%xmm7\n" - - // start saving - "movdqa [%[dst]], %%xmm0\n" - "movdqa [%[dst]+16], %%xmm1\n" - - "punpcklwd %%xmm4, %%xmm7\n" - "punpckhwd %%xmm5, %%xmm7\n" - - "movdqa [%[dst]+32], %%xmm2\n" - "movdqa [%[dst]+48], %%xmm3\n" - - "movdqa %%xmm0, %%xmm6\n" - "punpcklwd %%xmm6, %%xmm7\n" - - "movdqa [%[dst]+64], %%xmm4\n" - "movdqa [%[dst]+80], %%xmm5\n" - - "punpckhwd %%xmm0, %%xmm7\n" - - "movdqa [%[dst]+96], %%xmm6\n" - "movdqa [%[dst]+112], %%xmm0\n" - - "add %[src], 64\n" - "add %[dst], 128\n" - "sub %[iters], 1\n" - "jne Z16Loop\n" - -".att_syntax\n" - : "=&r"(src), "=&r"(dst), "=&r"(iters) - : [src] "0"(src), [dst] "1"(dst), [iters] "2"(iters) - : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "memory" - ); -#endif // _MSC_VER -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/x86.h 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/x86.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZEROGS_X86 -#define ZEROGS_X86 - -#include "GS.h" - -#ifndef ZZNORMAL_MEMORY -// StarOcean use 24 in logo and 4HH and 4HL in menu subfont -// Tony hawk use 16, but have a lot of trouble -// This function move one blockwidth * blockheigh data block from src to dst, in assumption, that in dst we store swizzled data, -template -inline void __fastcall SwizzleBlock(u32* dst, u32* src, int pitch, u32 WriteMask = 0xffffffff) { - u8 B = (PSM_PIXELS_PER_WORD() > 2)? 4 : 2; - - assert ((pitch & 3) == 0 ); - - u32* src1 = src; - u32* src2 = src + pitch / 4; - - for(int j = 0; j < 4 ; j++, src1 += B * pitch / 4, src2 += B * pitch / 4) - for(int i = 0; i < 8; i++) { - fillPixelsFromMemory(dst, src1, i, B * j, pitch /4, 0, 0, WriteMask); - fillPixelsFromMemory(dst, src2, i, B * j + 1, pitch / 4 , 0, 0, WriteMask); - } -} - -// Simply AA multiplication. We does not use src[j << AA], but prefer to keep more central pixel in data. -// We does not use mixing of neighbour pixels, because it does not give any noticiable bonus, but speed penalty is big. -template -inline u32 mixed_pixel(u32* src, int j) { - if (AA == 0) - return src[j] ; - - if (AA == 1) - return src[(j << 1) + 1]; - - if (AA == 2) - return src[(j << 2) + 2]; -} - -// We fill destination word for pixel number j (j < 8). For 16-bit storage upper size of this word is pixel of j + 8, -// and RGBA data should be convert to ARGB16. -// WARNING: floating storage is never be testing -template -inline u32 convert_pixel(u32* src, int j) { - if (is_float) { - Vector_16F* fsrc = (Vector_16F*)src; // We use simplified code for float, it seems not - // to be used anyway. - if (PSM_ISHALF()) { - return Float16ToARGB16 ( fsrc[j << AA]) + (Float16ToARGB16(fsrc[(j + 8) << AA]) << 16); - } - else { - return Float16ToARGB ( fsrc[j << AA] ); - } - } - else { - if (PSM_ISHALF()) { - return RGBA32to16(mixed_pixel(src, j)) + (RGBA32to16(mixed_pixel(src, j + 8)) << 16); - } - else { - return mixed_pixel(src, j); - } - } -} - -// put data in u32 destination word for pixel x, y < 8 in swizzled block. Note, that in 16-bit target we put 2 pixels (x,y -// and x+8, y) in the same word. -template -inline void SettleSwizzlePixel(u32* dst, u32* src, int srcpitch, u32 mask) { - u32 tmp = convert_pixel(src + y * srcpitch, x); - MaskedOR (dst + pix, tmp, mask); // Don't forget to use mask. -} - -// Put in dst memory location swizzled block for src. We does not calculate pixel address there at all. -template -void __fastcall FrameSwizzleBlock(u32* dst, int sj, int si, u32* src, int srcpitch, u32 WriteMask) { - u32 mask = HandleWritemask(WriteMask); // This function made correct mask for 32, 24 and 16 target's - - for (int i = 0; i < 4; i++) { - SettleSwizzlePixel<0, 0, 0, psm, is_float, AA>(dst, src, srcpitch, mask); // it's possible to put one for here, but I don't know, what's faster - SettleSwizzlePixel<1, 1, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<2, 0, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<3, 1, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<4, 2, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<5, 3, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<6, 2, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<7, 3, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<8, 4, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<9, 5, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<10, 4, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<11, 5, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<12, 6, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<13, 7, 0, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<14, 6, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - SettleSwizzlePixel<15, 7, 1, psm, is_float, AA>(dst, src, srcpitch, mask); - - src += 2 * srcpitch; - dst += 16; - } -} -#endif -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zerogs.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/zerogs.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zerogs.cpp 2012-04-19 21:22:08.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/zerogs.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,442 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -//-------------------------- Includes -#include "Util.h" -#include "zerogs.h" -#include "ZZoglVB.h" - -///////////////////// -// graphics resources - -bool s_bTexFlush = false; -int s_nLastResolveReset = 0; -int s_nResolveCounts[30] = {0}; // resolve counts for last 30 frames -int s_nNewWidth = -1, s_nNewHeight = -1; - -primInfo *prim; -//////////////////// -// State parameters -int g_nDepthUpdateCount = 0; - -static ZeroGSInit s_ZeroGSInit; - -// does one time only initializing/destruction - -void HandleGLError() -{ - FUNCLOG - // check the error status of this framebuffer */ - GLenum error = FB::State(); - - // if error != GL_FRAMEBUFFER_COMPLETE_EXT, there's an error of some sort - - if (error != 0) - { - int w = 0; - int h = 0; - GLint fmt; - glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, &fmt); - glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_WIDTH_EXT, &w); - glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_HEIGHT_EXT, &h); - - switch (error) - { - case GL_FRAMEBUFFER_COMPLETE_EXT: - break; - - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: - ZZLog::Error_Log("Error! missing a required image/buffer attachment!"); - break; - - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: - ZZLog::Error_Log("Error! has no images/buffers attached!"); - break; - -// case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT: -// ZZLog::Error_Log("Error! has an image/buffer attached in multiple locations!"); -// break; - - case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: - ZZLog::Error_Log("Error! has mismatched image/buffer dimensions!"); - break; - - case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: - ZZLog::Error_Log("Error! colorbuffer attachments have different types!"); - break; - - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: - ZZLog::Error_Log("Error! trying to draw to non-attached color buffer!"); - break; - - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: - ZZLog::Error_Log("Error! trying to read from a non-attached color buffer!"); - break; - - case GL_FRAMEBUFFER_UNSUPPORTED_EXT: - ZZLog::Error_Log("Error! format is not supported by current graphics card/driver!"); - break; - - default: - ZZLog::Error_Log("*UNKNOWN ERROR* reported from glCheckFramebufferStatusEXT(0x%x)!", error); - break; - } - } -} - -void ZZGSStateReset() -{ - FUNCLOG - icurctx = -1; - - for (int i = 0; i < 2; ++i) - { - vb[i].Destroy(); - memset(&vb[i], 0, sizeof(VB)); - - vb[i].tex0.tw = 1; - vb[i].tex0.th = 1; - vb[i].scissor.x1 = 639; - vb[i].scissor.y1 = 479; - vb[i].tex0.tbw = 64; - vb[i].Init(VB_BUFFERSIZE); - } - - s_RangeMngr.Clear(); - - g_MemTargs.Destroy(); - s_RTs.Destroy(); - s_DepthRTs.Destroy(); - s_BitwiseTextures.Destroy(); - - vb[0].ictx = 0; - vb[1].ictx = 1; -} - -void SetDeviceSize(int nNewWidth, int nNewHeight) -{ - FUNCLOG - s_nNewWidth = nNewWidth; - s_nNewHeight = nNewHeight; - - if (!(conf.fullscreen())) - { - conf.width = nNewWidth; - conf.height = nNewHeight; - } -} - -void ChangeDeviceSize(int nNewWidth, int nNewHeight) -{ - FUNCLOG - - Size oldSize = GLWin.backbuffer; - - if (!ZZCreate(nNewWidth&~7, nNewHeight&~7)) - { - ZZLog::Error_Log("Failed to recreate, changing to old device."); - - if (!ZZCreate(oldSize.w, oldSize.h)) - { - SysMessage("Failed to create device, exiting..."); - exit(0); - } - } - - for (int i = 0; i < 2; ++i) - { - vb[i].bNeedFrameCheck = vb[i].bNeedZCheck = 1; - vb[i].CheckFrame(0); - } - - assert(vb[0].pBufferData != NULL && vb[1].pBufferData != NULL); -} - -void SetAA(int mode) -{ - FUNCLOG - float f = 1.0f; - - // need to flush all targets - s_RTs.ResolveAll(); - s_RTs.Destroy(); - s_DepthRTs.ResolveAll(); - s_DepthRTs.Destroy(); - - AA.x = AA.y = 0; // This is code for x0, x2, x4, x8 and x16 anti-aliasing. - - if (mode > 0) - { - // ( 1, 0 ) ; ( 1, 1 ) ; ( 2, 1 ) ; ( 2, 2 ) - // it's used as a binary shift, so x >> AA.x, y >> AA.y - AA.x = (mode + 1) / 2; - AA.y = mode / 2; - f = 2.0f; - } - - memset(s_nResolveCounts, 0, sizeof(s_nResolveCounts)); - s_nLastResolveReset = 0; - - vb[0].prndr = NULL; - vb[0].pdepth = NULL; - vb[1].prndr = NULL; - vb[1].pdepth = NULL; - - vb[0].bNeedFrameCheck = vb[0].bNeedZCheck = 1; - vb[1].bNeedFrameCheck = vb[1].bNeedZCheck = 1; - - glPointSize(f); -} - -//void RenderCustom(float fAlpha) -//{ -// FUNCLOG -// GL_REPORT_ERROR(); -// -// fAlpha = 1; -// FB::Unbind(); // switch to the backbuffer -// -// DisableAllgl() ; -// SetShaderCaller("RenderCustom"); -// -// glViewport(0, 0, GLWin.backbuffer.w, GLWin.backbuffer.h); -// -// // play custom animation -// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); -// -// // tex coords -// float4 v = float4(1 / 32767.0f, 1 / 32767.0f, 0, 0); -// ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltPos, v, "g_fBitBltPos"); -// v.x = (float)nLogoWidth; -// v.y = (float)nLogoHeight; -// ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "g_fBitBltTex"); -// -// v.x = v.y = v.z = v.w = fAlpha; -// ZZshSetParameter4fv(ppsBaseTexture.prog, ppsBaseTexture.sOneColor, v, "g_fOneColor"); -// -// if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -// -// // inside vhDCb[0]'s target area, so render that region only -// ZZshGLSetTextureParameter(ppsBaseTexture.prog, ppsBaseTexture.sFinal, ptexLogo, "Logo"); -// glBindBuffer(GL_ARRAY_BUFFER, vboRect); -// -// SET_STREAM(); -// -// ZZshSetVertexShader(pvsBitBlt.prog); -// ZZshSetPixelShader(ppsBaseTexture.prog); -// DrawTriangleArray(); -// -// // restore -// if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -// -// ProcessMessages(); -// -// GLWin.SwapGLBuffers(); -// -// glEnable(GL_SCISSOR_TEST); -// glEnable(GL_STENCIL_TEST); -// -// vb[0].bSyncVars = 0; -// vb[1].bSyncVars = 0; -// -// GL_REPORT_ERROR(); -//} - -////////////////////////// -// Internal Definitions // -////////////////////////// - -__forceinline void SetFogColor(float4 v) -{ - FUNCLOG - - SetShaderCaller("SetFogColor"); - ZZshSetParameter4fv(g_fparamFogColor, v, "g_fParamFogColor"); -} - -__forceinline void SetFogColor(u32 fog) -{ - FUNCLOG - - gs.fogcol = fog; - - FlushBoth(); - - float4 v; - - // set it immediately - v.SetColor(gs.fogcol); - SetFogColor(v); -} - -__forceinline void SetFogColor(GIFRegFOGCOL* fog) -{ - FUNCLOG - - float4 v; - - v.x = fog->FCR / 255.0f; - v.y = fog->FCG / 255.0f; - v.z = fog->FCB / 255.0f; - SetFogColor(v); -} - -void ExtWrite() -{ - FUNCLOG - ZZLog::Warn_Log("A hollow voice says 'EXTWRITE'! Nothing happens."); - - // use local DISPFB, EXTDATA, EXTBUF, and PMODE -// int bpp, start, end; -// tex0Info texframe; - -// bpp = 4; -// if( texframe.psm == PSMT16S ) bpp = 3; -// else if (PSMT_ISHALF(texframe.psm)) bpp = 2; -// -// // get the start and end addresses of the buffer -// GetRectMemAddressZero(start, end, texframe.psm, texframe.tw, texframe.th, texframe.tbp0, texframe.tbw); -} - -//////////// -// Caches // -//////////// - - -// case 0: return false; -// case 1: break; -// case 2: m_CBP[0] = TEX0.CBP; break; -// case 3: m_CBP[1] = TEX0.CBP; break; -// case 4: if(m_CBP[0] == TEX0.CBP) return false; m_CBP[0] = TEX0.CBP; break; -// case 5: if(m_CBP[1] == TEX0.CBP) return false; m_CBP[1] = TEX0.CBP; break; -// case 6: ASSERT(0); return false; // ffx2 menu -// case 7: ASSERT(0); return false; -// default: __assume(0); - -// cld state: -// 000 - clut data is not loaded; data in the temp buffer is stored -// 001 - clut data is always loaded. -// 010 - clut data is always loaded; cbp0 = cbp. -// 011 - clut data is always loadedl cbp1 = cbp. -// 100 - cbp0 is compared with cbp. if different, clut data is loaded. -// 101 - cbp1 is compared with cbp. if different, clut data is loaded. - -// GSdx sets cbp0 & cbp1 when checking for clut changes. ZeroGS sets them in texClutWrite. -bool CheckChangeInClut(u32 highdword, u32 psm) -{ - FUNCLOG - int cld = ZZOglGet_cld_TexBits(highdword); - int cbp = ZZOglGet_cbp_TexBits(highdword); - - // processing the CLUT after tex0/2 are written - //ZZLog::Error_Log("high == 0x%x; cld == %d", highdword, cld); - - switch (cld) - { - case 0: - return false; - - case 1: - break; - - case 2: - break; - - case 3: - break; - - case 4: - if (gs.cbp[0] == cbp) return false; - break; - - case 5: - if (gs.cbp[1] == cbp) return false; - break; - - default: - break; - } - - // Compare the cache with current memory - - // CSM2 is not supported - if (ZZOglGet_csm_TexBits(highdword)) - return true; - - int cpsm = ZZOglGet_cpsm_TexBits(highdword); - int csa = ZZOglGet_csa_TexBits(highdword); - int entries = PSMT_IS8CLUT(psm) ? 256 : 16; - - u8* GSMem = g_pbyGSMemory + cbp * 256; - - if (PSMT_IS32BIT(cpsm)) - return Cmp_ClutBuffer_GSMem((u32*)GSMem, csa, entries*4); - else { - // Mana Khemia triggers this. - //ZZLog::Error_Log("16 bit clut not supported."); - return Cmp_ClutBuffer_GSMem((u16*)GSMem, csa, entries*2); - } -} - -void texClutWrite(int ctx) -{ - FUNCLOG - s_bTexFlush = false; - - tex0Info& tex0 = vb[ctx].tex0; - - assert(PSMT_ISCLUT(tex0.psm)); - - // processing the CLUT after tex0/2 are written - switch (tex0.cld) - { - case 0: - return; - - case 1: - break; // tex0.cld is usually 1. - - case 2: - gs.cbp[0] = tex0.cbp; - break; - - case 3: - gs.cbp[1] = tex0.cbp; - break; - - case 4: - if (gs.cbp[0] == tex0.cbp) return; - gs.cbp[0] = tex0.cbp; - break; - - case 5: - if (gs.cbp[1] == tex0.cbp) return; - gs.cbp[1] = tex0.cbp; - break; - - default: //ZZLog::Debug_Log("cld isn't 0-5!"); - break; - } - - Flush(!ctx); - - // Write the memory to clut buffer - GSMem_to_ClutBuffer(tex0); -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zerogs.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/zerogs.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zerogs.h 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/zerogs.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __ZEROGS__H -#define __ZEROGS__H - -#ifdef _MSC_VER -#pragma warning(disable:4200) // nonstandard extension used : zero-sized array in struct/union -#endif - -// ----------------------------- Includes -#include "PS2Edefs.h" -// ------------------------ Variables ------------------------- - -////////////////////////// -// State parameters - -#if defined(_WIN32) -# include "Utilities/RedtapeWindows.h" -# include "resource.h" -#endif - -#include - -#include "GS.h" -#include "targets.h" -#include "GLWin.h" -#include "ZZoglShaders.h" -#include "ZZClut.h" -#include "HostMemory.h" - -typedef void (APIENTRYP _PFNSWAPINTERVAL)(int); - -PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL; -PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL; -PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL; -PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL; -PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL; -PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL; -PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL; -PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL; -PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL; -PFNGLDRAWBUFFERSPROC glDrawBuffers = NULL; - -#ifndef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 -#endif - -bool ZZCreate(int width, int height); -void ZZGSStateReset(); - -// flush current vertices, call before setting new registers (the main render method) -void Flush(int context); -void FlushBoth(); - -//extern u32 ptexLogo; -//extern int nLogoWidth, nLogoHeight; -//extern GLuint vboRect; -//void ProcessMessages(); -//void RenderCustom(float fAlpha); // intro anim - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/CMakeLists.txt pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/CMakeLists.txt --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/CMakeLists.txt 2014-12-15 18:29:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -# Check that people use the good file -if(NOT TOP_CMAKE_WAS_SOURCED) - message(FATAL_ERROR " - You did not 'cmake' the good CMakeLists.txt file. Use the one in the top dir. - It is advice to delete all wrongly generated cmake stuff => CMakeFiles & CMakeCache.txt") -endif() - - -# plugin name -set(Output zzogl-shader) - -set(CommonFlags - -DZEROGS_SSE2 - -fno-strict-aliasing - -Wstrict-aliasing # Allow to track strict aliasing issue. - -Wunused-variable - -DNVIDIA_CG_API - ) - -set(OptimizationFlags - -O2 - ) - -if(CMAKE_BUILD_TYPE STREQUAL Debug) - set(zerogsshadersFinalFlags - ${CommonFlags} -D_DEBUG - ) -elseif(CMAKE_BUILD_TYPE STREQUAL Devel) - set(zerogsshadersFinalFlags - ${CommonFlags} ${OptimizationFlags} -g -W -DZEROGS_DEVBUILD - ) -elseif(CMAKE_BUILD_TYPE STREQUAL Release) - set(zerogsshadersFinalFlags - ${CommonFlags} ${OptimizationFlags} -W - ) -endif(CMAKE_BUILD_TYPE STREQUAL Release) - -set(zerogsshadersFinalSources - zerogsshaders.cpp - zpipe.cpp -) - -set(zerogsshadersFinalLibs - ${ZLIB_LIBRARIES} - ${CG_LIBRARIES} - ${OPENGL_LIBRARIES} -) - -add_pcsx2_executable(${Output} "${zerogsshadersFinalSources}" "${zerogsshadersFinalLibs}" "${zerogsshadersFinalFlags}") - -# Now build the shader -add_custom_command(TARGET ${Output} POST_BUILD - COMMAND ${Output} ps2hw.fx ${CMAKE_CURRENT_BINARY_DIR}/ps2hw_cmake.dat - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/plugins/zzogl-pg/opengl - ) - -if(PACKAGE_MODE) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ps2hw_cmake.dat DESTINATION ${PLUGIN_DIR} RENAME ps2hw.dat) -else(PACKAGE_MODE) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ps2hw_cmake.dat DESTINATION ${CMAKE_SOURCE_DIR}/bin/plugins RENAME ps2hw.dat) -endif(PACKAGE_MODE) diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/copytozerogs.bat pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/copytozerogs.bat --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/copytozerogs.bat 2010-03-19 00:31:15.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/copytozerogs.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -copy .\Release\ZeroGSShaders.exe ..\ \ No newline at end of file diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/ZeroGSShaders_2005.sln pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/ZeroGSShaders_2005.sln --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/ZeroGSShaders_2005.sln 2010-03-19 00:31:15.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/ZeroGSShaders_2005.sln 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZeroGSShaders", "ZeroGSShaders_2005.vcproj", "{811D47CC-E5F0-456A-918E-5908005E8FC0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release (to Public)|Win32 = Release (to Public)|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Debug|Win32.ActiveCfg = Debug|Win32 - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Debug|Win32.Build.0 = Debug|Win32 - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Release (to Public)|Win32.ActiveCfg = Release (to Public)|Win32 - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Release (to Public)|Win32.Build.0 = Release (to Public)|Win32 - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Release|Win32.ActiveCfg = Release|Win32 - {811D47CC-E5F0-456A-918E-5908005E8FC0}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.cpp 2012-04-12 17:52:43.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,362 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#define _CRT_SECURE_NO_DEPRECATE - -// Builds all possible shader files from ps2hw.fx and stores them in -// a preprocessed database -#include -#include -#include -#include - -#ifdef _WIN32 -# include -#else -# include -#endif - -#include "zpipe.h" - -#include -#include - -#define SAFE_RELEASE(x) { if( (x) != NULL ) { (x)->Release(); x = NULL; } } - -#include -#include - -using namespace std; - -#include "zerogsshaders.h" - -char* srcfilename = "ps2hw.fx"; -char* dstfilename = "ps2hw.dat"; - -#ifndef ArraySize -#define ArraySize(x) (sizeof(x) / sizeof((x)[0])) -#endif - -struct SHADERINFO -{ - int type; - vector buf; -}; - -map mapShaders; -CGcontext g_cgcontext; - -void LoadShader(int index, const char* pshader, CGprofile prof, vector& vargs, int context) -{ - vector realargs; - realargs.reserve(16); - realargs.resize(vargs.size()); - if( vargs.size() > 0 ) - memcpy(&realargs[0], &vargs[0], realargs.size() * sizeof(realargs[0])); - realargs.push_back(context ? "-Ictx1" : "-Ictx0"); - realargs.push_back(NULL); - - CGprogram prog = cgCreateProgramFromFile(g_cgcontext, CG_SOURCE, srcfilename, prof, pshader, &realargs[0]); - if( !cgIsProgram(prog) ) { - printf("Failed to load shader %s: \n%s\n", pshader, cgGetLastListing(g_cgcontext)); - return; - } - - if( mapShaders.find(index) != mapShaders.end() ) { - printf("error: two shaders share the same index %d\n", index); - exit(0); - } - - if( !cgIsProgramCompiled(prog) ) - cgCompileProgram(prog); - - const char* pstr = cgGetProgramString(prog, CG_COMPILED_PROGRAM); - - const char* pprog = strstr(pstr, "#program"); - if( pprog == NULL ) { - printf("program field not found!\n"); - return; - } - pprog += 9; - const char* progend = strchr(pprog, '\r'); - if( progend == NULL ) progend = strchr(pprog, '\n'); - - if( progend == NULL ) { - printf("prog end not found!\n"); - return; - } - - const char* defname = "main"; - - SHADERINFO info; - info.type = 0; - info.buf.resize(strlen(pstr)+1); - - // change the program name to main - memset(&info.buf[0], 0, info.buf.size()); - memcpy(&info.buf[0], pstr, pprog-pstr); - memcpy(&info.buf[pprog-pstr], defname, 4); - memcpy(&info.buf[pprog-pstr+4], progend, strlen(pstr)-(progend-pstr)); - - if( mapShaders.find(index) != mapShaders.end() ) - printf("same shader\n"); - assert( mapShaders.find(index) == mapShaders.end() ); - mapShaders[index] = info; - - cgDestroyProgram(prog); -} - -int main(int argc, char** argv) -{ - printf("usage: [src] [dst] [opts]\n"); - - if( argc >= 2 ) srcfilename = argv[1]; - if( argc >= 3 ) dstfilename = argv[2]; - - FILE* fsrc = fopen(srcfilename, "r"); - if( fsrc == NULL ) { - printf("cannot open %s\n", srcfilename); - return 0; - } - fclose(fsrc); - - g_cgcontext = cgCreateContext(); - if( !cgIsContext(g_cgcontext) ) { - printf("failed to create cg context\n"); - return -1; - } - - CGprofile cgvProf = CG_PROFILE_ARBVP1; - CGprofile cgfProf = CG_PROFILE_ARBFP1; - if( !cgGLIsProfileSupported(cgvProf) != CG_TRUE ) { - printf("arbvp1 not supported\n"); - return 0; - } - if( !cgGLIsProfileSupported(cgfProf) != CG_TRUE ) { - printf("arbfp1 not supported\n"); - return 0; - } - - cgGLEnableProfile(cgvProf); - cgGLEnableProfile(cgfProf); - cgGLSetOptimalOptions(cgvProf); - cgGLSetOptimalOptions(cgfProf); - - vector vmacros; - - LoadShader(SH_BITBLTVS, "BitBltVS", cgvProf, vmacros, 0); - LoadShader(SH_BITBLTPS, "BitBltPS", cgfProf, vmacros, 0); - LoadShader(SH_BITBLTDEPTHPS, "BitBltDepthPS", cgfProf, vmacros, 0); - LoadShader(SH_BITBLTDEPTHMRTPS, "BitBltDepthMRTPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTCTARGPS, "CRTCTargPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTCPS, "CRTCPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTC_NEARESTPS, "CRTCPS_Nearest", cgfProf, vmacros, 0); - LoadShader(SH_CRTC24PS, "CRTC24PS", cgfProf, vmacros, 0); - LoadShader(SH_ZEROPS, "ZeroPS", cgfProf, vmacros, 0); - LoadShader(SH_BASETEXTUREPS, "BaseTexturePS", cgfProf, vmacros, 0); - LoadShader(SH_BITBLTAAPS, "BitBltPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTCTARGINTERPS, "CRTCTargInterPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTCINTERPS, "CRTCInterPS", cgfProf, vmacros, 0); - LoadShader(SH_CRTCINTER_NEARESTPS, "CRTCInterPS_Nearest", cgfProf, vmacros, 0); - LoadShader(SH_CRTC24INTERPS, "CRTC24InterPS", cgfProf, vmacros, 0); - LoadShader(SH_CONVERT16TO32PS, "Convert16to32PS", cgfProf, vmacros, 0); - LoadShader(SH_CONVERT32TO16PS, "Convert32to16PS", cgfProf, vmacros, 0); - - const int vsshaders[4] = { SH_REGULARVS, SH_TEXTUREVS, SH_REGULARFOGVS, SH_TEXTUREFOGVS }; - const char* pvsshaders[4] = { "RegularVS", "TextureVS", "RegularFogVS", "TextureFogVS" }; - - // load the texture shaders - char str[255], strdir[255]; - - strcpy(strdir, srcfilename); - int i = (int)strlen(strdir); - while(i > 0) { - if( strdir[i-1] == '/' || strdir[i-1] == '\\' ) - break; - --i; - } - - strdir[i] = 0; - - for(i = 0; i < ArraySize(vsshaders); ++i) { - for(int writedepth = 0; writedepth < 2; ++writedepth ) { - - if( writedepth ) vmacros.push_back("-DWRITE_DEPTH"); - LoadShader(vsshaders[i]|(writedepth?SH_WRITEDEPTH:0), pvsshaders[i], cgvProf, vmacros, 0); - LoadShader(vsshaders[i]|(writedepth?SH_WRITEDEPTH:0)|SH_CONTEXT1, pvsshaders[i], cgvProf, vmacros, 1); - if( writedepth ) vmacros.pop_back(); - } - } - - const int psshaders[2] = { SH_REGULARPS, SH_REGULARFOGPS }; - const char* ppsshaders[2] = { "RegularPS", "RegularFogPS" }; - - for(i = 0; i < ArraySize(psshaders); ++i) { - for(int writedepth = 0; writedepth < 2; ++writedepth ) { - if( writedepth ) vmacros.push_back("-DWRITE_DEPTH"); - LoadShader(psshaders[i]|(writedepth?SH_WRITEDEPTH:0), ppsshaders[i], cgfProf, vmacros, 0); - if( writedepth ) vmacros.pop_back(); - } - } - - printf("creating shaders, note that ctx0/ps2hw_ctx.fx, and ctx1/ps2hw_ctx.fx are required\n"); - vmacros.resize(0); - - for(int texwrap = 0; texwrap < NUM_TEXWRAPS; ++texwrap ) { - - if( g_pPsTexWrap[texwrap] != NULL ) - vmacros.push_back(g_pPsTexWrap[texwrap]); - - for(int context = 0; context < 2; ++context) { - - for(int texfilter = 0; texfilter < NUM_FILTERS; ++texfilter) { - for(int fog = 0; fog < 2; ++fog ) { - for(int writedepth = 0; writedepth < 2; ++writedepth ) { - - if( writedepth ) - vmacros.push_back("-DWRITE_DEPTH"); - - for(int testaem = 0; testaem < 2; ++testaem ) { - - if( testaem ) - vmacros.push_back("-DTEST_AEM"); - - for(int exactcolor = 0; exactcolor < 2; ++exactcolor ) { - - if( exactcolor ) - vmacros.push_back("-DEXACT_COLOR"); - - // 32 - sprintf(str, "Texture%s%d_32PS", fog?"Fog":"", texfilter); - - vmacros.push_back("-DACCURATE_DECOMPRESSION"); - LoadShader(GET_SHADER_INDEX(0, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, SHADER_ACCURATE), str, cgfProf, vmacros, context); - vmacros.pop_back(); - - LoadShader(GET_SHADER_INDEX(0, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, 0), str, cgfProf, vmacros, context); - - if( texfilter == 0 ) { - // tex32 - sprintf(str, "Texture%s%d_tex32PS", fog?"Fog":"", texfilter); - -// vmacros.push_back("-DACCURATE_DECOMPRESSION"); -// LoadShader(GET_SHADER_INDEX(1, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, SHADER_ACCURATE), str, cgfProf, vmacros, context); -// vmacros.pop_back(); - - LoadShader(GET_SHADER_INDEX(1, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, 0), str, cgfProf, vmacros, context); - - // clut32 - sprintf(str, "Texture%s%d_clut32PS", fog?"Fog":"", texfilter); - -// vmacros.push_back("-DACCURATE_DECOMPRESSION"); -// LoadShader(GET_SHADER_INDEX(2, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, SHADER_ACCURATE), str, cgfProf, vmacros, context); -// vmacros.pop_back(); - - LoadShader(GET_SHADER_INDEX(2, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, 0), str, cgfProf, vmacros, context); - - // tex32to16 - sprintf(str, "Texture%s%d_tex32to16PS", fog?"Fog":"", texfilter); - -// vmacros.push_back("-DACCURATE_DECOMPRESSION"); -// LoadShader(GET_SHADER_INDEX(3, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, SHADER_ACCURATE), str, cgfProf, vmacros, context); -// vmacros.pop_back(); - - LoadShader(GET_SHADER_INDEX(3, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, 0), str, cgfProf, vmacros, context); - - // tex16to8h - sprintf(str, "Texture%s%d_tex16to8hPS", fog?"Fog":"", texfilter); - -// vmacros.push_back("-DACCURATE_DECOMPRESSION"); -// LoadShader(GET_SHADER_INDEX(4, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, SHADER_ACCURATE), str, cgfProf, vmacros, context); -// vmacros.pop_back(); - - LoadShader(GET_SHADER_INDEX(4, texfilter, texwrap, fog, writedepth, testaem, exactcolor, context, 0), str, cgfProf, vmacros, context); - } - - if( exactcolor ) - vmacros.pop_back(); - } - - if( testaem ) - vmacros.pop_back(); - } - - if( writedepth ) - vmacros.pop_back(); - } - } - } - } - - if( g_pPsTexWrap[texwrap] != NULL ) - vmacros.pop_back(); - } - - if( vmacros.size() != 0 ) - printf("error with macros!\n"); - - // create the database - - int num = (int)mapShaders.size(); - - // first compress - vector buffer; - buffer.reserve(10000000); // 10mb - buffer.resize(sizeof(SHADERHEADER)*num); - - i = 0; - for(map::iterator it = mapShaders.begin(); it != mapShaders.end(); ++it, ++i) { - SHADERHEADER h; - h.index = it->first | it->second.type; - h.offset = (int)buffer.size(); - h.size = (int)it->second.buf.size(); - - memcpy(&buffer[0] + i*sizeof(SHADERHEADER), &h, sizeof(SHADERHEADER)); - - size_t cur = buffer.size(); - buffer.resize(cur + it->second.buf.size()); - memcpy(&buffer[cur], &it->second.buf[0], it->second.buf.size()); - } - - int compressed_size; - int real_size = (int)buffer.size(); - vector dst; - dst.resize(buffer.size()); - def(&buffer[0], &dst[0], (int)buffer.size(), &compressed_size); - - // write to file - // fmt: num shaders, size of compressed, compressed data - FILE* fdst = fopen(dstfilename, "wb"); - if( fdst == NULL ) { - printf("failed to open %s\n", dstfilename); - return 0; - } - - fwrite(&num, 4, 1, fdst); - fwrite(&compressed_size, 4, 1, fdst); - fwrite(&real_size, 4, 1, fdst); - fwrite(&dst[0], compressed_size, 1, fdst); - - fclose(fdst); - - printf("wrote %s\n", dstfilename); - - cgDestroyContext(g_cgcontext); - - return 0; -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.h 2012-04-29 18:50:07.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zerogsshaders.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __ZEROGS_SHADERS_H__ -#define __ZEROGS_SHADERS_H__ - -#include -#include -#include "PS2Edefs.h" - -#include -#include - -#define ZZshProgram CGprogram -#define ZZshContext CGcontext - -using namespace std; - -#define NUM_FILTERS 2 // texture filtering -#define NUM_TYPES 5 // types of texture read modes -#define NUM_TEXWRAPS 4 // texture wrapping - -#define SHADER_REDUCED 1 // equivalent to ps2.0 -#define SHADER_ACCURATE 2 // for older cards with less accurate math (ps2.x+) - -#define NUM_SHADERS (NUM_FILTERS*NUM_TYPES*NUM_TEXWRAPS*32) // # shaders for a given ps - -const static char* g_pPsTexWrap[] = { "-DREPEAT", "-DCLAMP", "-DREGION_REPEAT", NULL }; -const static char* g_pTexTypes[] = { "32", "tex32", "clut32", "tex32to16", "tex16to8h" }; - -#define TEXWRAP_REPEAT 0 -#define TEXWRAP_CLAMP 1 -#define TEXWRAP_REGION_REPEAT 2 -#define TEXWRAP_REPEAT_CLAMP 3 - -static __forceinline int GET_SHADER_INDEX(int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int context, int ps) -{ - return type + texfilter*NUM_TYPES + NUM_FILTERS*NUM_TYPES*texwrap + NUM_TEXWRAPS*NUM_FILTERS*NUM_TYPES*(fog+2*writedepth+4*testaem+8*exactcolor+16*context+32*ps); -} - -extern ZZshContext g_cgcontext; - -static CGprogram LoadShaderFromType(const char* srcdir, const char* srcfile, int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int ps, int context) -{ - assert( texwrap < NUM_TEXWRAPS); - assert( type < NUM_TYPES ); - - char str[255], strctx[255]; - sprintf(str, "Texture%s%d_%sPS", fog?"Fog":"", texfilter, g_pTexTypes[type]); - sprintf(strctx, "-I%s%s", srcdir, context?"ctx1":"ctx0"); - - vector macros; - macros.push_back(strctx); -#ifdef _DEBUG - macros.push_back("-bestprecision"); -#endif - if( g_pPsTexWrap[texwrap] != NULL ) macros.push_back(g_pPsTexWrap[texwrap]); - if( writedepth ) macros.push_back("-DWRITE_DEPTH"); - if( testaem ) macros.push_back("-DTEST_AEM"); - if( exactcolor ) macros.push_back("-DEXACT_COLOR"); - if( ps & SHADER_ACCURATE ) macros.push_back("-DACCURATE_DECOMPRESSION"); - macros.push_back(NULL); - - ZZshProgram prog = cgCreateProgramFromFile(g_cgcontext, CG_SOURCE, srcfile, CG_PROFILE_ARBFP1, str, ¯os[0]); - if( !cgIsProgram(prog) ) { - printf("Failed to load shader %s: \n%s\n", str, cgGetLastListing(g_cgcontext)); - return NULL; - } - - return prog; -} - -struct SHADERHEADER -{ - unsigned int index, offset, size; // if highest bit of index is set, pixel shader -}; - -#define SH_WRITEDEPTH 0x2000 // depth is written -#define SH_CONTEXT1 0x1000 // context1 is used - -#define SH_REGULARVS 0x8000 -#define SH_TEXTUREVS 0x8001 -#define SH_REGULARFOGVS 0x8002 -#define SH_TEXTUREFOGVS 0x8003 -#define SH_REGULARPS 0x8004 -#define SH_REGULARFOGPS 0x8005 -#define SH_BITBLTVS 0x8006 -#define SH_BITBLTPS 0x8007 -#define SH_BITBLTDEPTHPS 0x8009 -#define SH_CRTCTARGPS 0x800a -#define SH_CRTCPS 0x800b -#define SH_CRTC24PS 0x800c -#define SH_ZEROPS 0x800e -#define SH_BASETEXTUREPS 0x800f -#define SH_BITBLTAAPS 0x8010 -#define SH_CRTCTARGINTERPS 0x8012 -#define SH_CRTCINTERPS 0x8013 -#define SH_CRTC24INTERPS 0x8014 -#define SH_BITBLTDEPTHMRTPS 0x8016 -#define SH_CONVERT16TO32PS 0x8020 -#define SH_CONVERT32TO16PS 0x8021 -#define SH_CRTC_NEARESTPS 0x8022 -#define SH_CRTCINTER_NEARESTPS 0x8023 - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.cpp 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -/* The file is based of zpipe.c + minor rename and minor adaptation - * - * zpipe.c: example of proper use of zlib's inflate() and deflate() - * Not copyrighted -- provided to the public domain - * Version 1.4 11 December 2005 Mark Adler - * - * This file is in the public domain - */ - -// zpipe.cpp : Defines the entry point for the console application. -// - -#include - -#include -#include -#include - -//#define ZLIB_WINAPI -#include - -int def(char *src, char *dst, int bytes_to_compress, int *bytes_after_compressed) ; -int inf(char *src, char *dst, int bytes_to_decompress, int maximum_after_decompress) ; - -int def(char *src, char *dst, int bytes_to_compress, int *bytes_after_compressed) -{ - z_stream strm; - - int ret;//, flush; - unsigned have; - - /* allocate deflate state */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION) ; - if (ret != Z_OK) - return ret; - - /* compress */ - strm.avail_in = bytes_to_compress ; - strm.avail_out = bytes_to_compress ; - strm.next_in = (Bytef *)src ; - strm.next_out = (Bytef *)dst ; - - ret = deflate(&strm, Z_FINISH) ; - have = bytes_to_compress - strm.avail_out ; - *bytes_after_compressed = have ; - - assert(ret == Z_STREAM_END); /* stream will be complete */ - - /* clean up and return */ - (void)deflateEnd(&strm); - return Z_OK; -} - -int inf(char *src, char *dst, int bytes_to_decompress, int maximum_after_decompress, int* outbytes) -{ - z_stream strm; - - int ret; - //unsigned have; - - /* allocate inflate state */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = 0; - strm.next_in = Z_NULL; - ret = inflateInit(&strm); - if (ret != Z_OK) - return ret; - - /* decompress */ - strm.avail_in = bytes_to_decompress ; - strm.next_in = (Bytef *)src ; - strm.next_out = (Bytef *)dst ; - strm.avail_out = maximum_after_decompress ; - - ret = inflate(&strm, Z_NO_FLUSH) ; - assert(ret != Z_STREAM_ERROR); /* state not clobbered */ - switch (ret) { - case Z_NEED_DICT: - ret = Z_DATA_ERROR; /* and fall through */ - case Z_DATA_ERROR: - case Z_MEM_ERROR: - (void)inflateEnd(&strm); - return ret; - } - - assert(strm.avail_in == 0); /* all input will be used */ - - if( outbytes != NULL ) - *outbytes = strm.total_out; - - /* clean up and return */ - (void)inflateEnd(&strm); - return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; -} - -/* report a zlib or i/o error */ -void zerr(int ret) -{ - fputs("zpipe: ", stderr); - switch (ret) { - case Z_ERRNO: - if (ferror(stdin)) - fputs("error reading stdin\n", stderr); - if (ferror(stdout)) - fputs("error writing stdout\n", stderr); - break; - case Z_STREAM_ERROR: - fputs("invalid compression level\n", stderr); - break; - case Z_DATA_ERROR: - fputs("invalid or incomplete deflate data\n", stderr); - break; - case Z_MEM_ERROR: - fputs("out of memory\n", stderr); - break; - case Z_VERSION_ERROR: - fputs("zlib version mismatch!\n", stderr); - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.h 2010-10-09 11:24:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZeroGSShaders/zpipe.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef zpipe_h -#define zpipe_h - -int def(char *src, char *dst, int bytes_to_compress, int *bytes_after_compressed) ; -int inf(char *src, char *dst, int bytes_to_decompress, int maximum_after_decompress, int* outbytes); - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zpipe.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/zpipe.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zpipe.cpp 2014-04-13 08:41:24.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/zpipe.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -/* The file is based of zpipe.c + minor rename and minor adaptation - * - * zpipe.c: example of proper use of zlib's inflate() and deflate() - * Not copyrighted -- provided to the public domain - * Version 1.4 11 December 2005 Mark Adler - * - * This file is in the public domain - */ - -#include - -#include -#include -#include - -//#define ZLIB_WINAPI -#include "zlib.h" - -int def(char *src, char *dst, int bytes_to_compress, int *bytes_after_compressed) -{ - z_stream strm; - - int ret; - unsigned have; - - /* allocate deflate state */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION) ; - - if (ret != Z_OK) - return ret; - - /* compress */ - strm.avail_in = bytes_to_compress ; - strm.avail_out = bytes_to_compress ; - - strm.next_in = (Bytef *)src ; - strm.next_out = (Bytef *)dst ; - - ret = deflate(&strm, Z_FINISH) ; - - have = bytes_to_compress - strm.avail_out ; - - *bytes_after_compressed = have ; - - assert(ret == Z_STREAM_END); /* stream will be complete */ - - /* clean up and return */ - (void)deflateEnd(&strm); - - return Z_OK; -} - -int inf(char *src, char *dst, int bytes_to_decompress, int maximum_after_decompress, int* outbytes) -{ - z_stream strm; - - int ret; - - /* allocate inflate state */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = 0; - strm.next_in = Z_NULL; - ret = inflateInit(&strm); - - if (ret != Z_OK) return ret; - - /* decompress */ - strm.avail_in = bytes_to_decompress ; - strm.next_in = (Bytef *)src ; - strm.next_out = (Bytef *)dst ; - strm.avail_out = maximum_after_decompress ; - - ret = inflate(&strm, Z_NO_FLUSH) ; - - assert(ret != Z_STREAM_ERROR); /* state not clobbered */ - - switch (ret) - { - - case Z_NEED_DICT: - ret = Z_DATA_ERROR; /* and fall through */ - - case Z_DATA_ERROR: - - case Z_MEM_ERROR: - (void)inflateEnd(&strm); - return ret; - } - - assert(strm.avail_in == 0); /* all input will be used */ - - if (outbytes != NULL) *outbytes = strm.total_out; - - /* clean up and return */ - (void)inflateEnd(&strm); - - return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; -} - -/* report a zlib or i/o error */ -void zerr(int ret) -{ - fputs("zpipe: ", stderr); - - switch (ret) - { - - case Z_ERRNO: - if (ferror(stdin)) fputs("error reading stdin\n", stderr); - if (ferror(stdout)) fputs("error writing stdout\n", stderr); - break; - - case Z_STREAM_ERROR: - fputs("invalid compression level\n", stderr); - break; - - case Z_DATA_ERROR: - fputs("invalid or incomplete deflate data\n", stderr); - break; - - case Z_MEM_ERROR: - fputs("out of memory\n", stderr); - break; - - case Z_VERSION_ERROR: - fputs("zlib version mismatch!\n", stderr); - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zpipe.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/zpipe.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/zpipe.h 2010-10-09 11:24:38.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/zpipe.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef zpipe_h -#define zpipe_h - -int def(char *src, char *dst, int bytes_to_compress, int *bytes_after_compressed) ; -int inf(char *src, char *dst, int bytes_to_decompress, int maximum_after_decompress, int* outbytes); - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZClut.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZClut.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZClut.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZClut.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1079 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "GS.h" -#include "Mem.h" -#include "Util.h" - -// Local Clut buffer: -// It supports both 32 bits and 16 bits colors formats. The size of the buffer is 1KBytes. -// The 16 bits entries are arranged in 2 columns. One row is a 32 bits colors. -// 256 0 -// 271 1 -// ... .. -// 510 254 -// 511 255 -// -// CSA -> clut buffer offset: -// 16 bits format: CSA < 32 <=> 16 entries, 16 half-row of the buffer (for example 0 to 15) -// 32 bits format: CSA < 16 <=> 16 entries, 16 full row of the buffer (for example 256|0 to 271|15) - -static const __aligned16 int s_clut_16bits_mask[4] = { 0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff }; - -template -__forceinline T* GetClutBufferAddress(u32 csa) { } - -template <> -__forceinline u32* GetClutBufferAddress(u32 csa) -{ - return (u32*)(g_pbyGSClut + 64 * (csa & 15)); -} - -template <> -__forceinline u16* GetClutBufferAddress(u32 csa) -{ - return (u16*)(g_pbyGSClut + 64 * (csa & 15) + (csa >= 16 ? 2 : 0)); -} - -/* ***************************************************************** - * Local memory -> Clut buffer - * *****************************************************************/ - -#ifdef ZEROGS_SSE2 -__forceinline void GSMem_to_ClutBuffer__T32_I8_CSM1_sse2(u32* vm, u32 csa) -{ - u32* clut = GetClutBufferAddress(csa); - - __m128i* src = (__m128i*)vm; - __m128i* dst = (__m128i*)clut; - - for (int j = 0; j < 64; j += 32, src += 32, dst += 32) - { - for (int i = 0; i < 16; i += 4) - { - __m128i r0 = _mm_load_si128(&src[i+0]); - __m128i r1 = _mm_load_si128(&src[i+1]); - __m128i r2 = _mm_load_si128(&src[i+2]); - __m128i r3 = _mm_load_si128(&src[i+3]); - - _mm_store_si128(&dst[i*2+0], _mm_unpacklo_epi64(r0, r1)); - _mm_store_si128(&dst[i*2+1], _mm_unpacklo_epi64(r2, r3)); - _mm_store_si128(&dst[i*2+2], _mm_unpackhi_epi64(r0, r1)); - _mm_store_si128(&dst[i*2+3], _mm_unpackhi_epi64(r2, r3)); - - __m128i r4 = _mm_load_si128(&src[i+0+16]); - __m128i r5 = _mm_load_si128(&src[i+1+16]); - __m128i r6 = _mm_load_si128(&src[i+2+16]); - __m128i r7 = _mm_load_si128(&src[i+3+16]); - - _mm_store_si128(&dst[i*2+4], _mm_unpacklo_epi64(r4, r5)); - _mm_store_si128(&dst[i*2+5], _mm_unpacklo_epi64(r6, r7)); - _mm_store_si128(&dst[i*2+6], _mm_unpackhi_epi64(r4, r5)); - _mm_store_si128(&dst[i*2+7], _mm_unpackhi_epi64(r6, r7)); - } - } -} - -__forceinline void GSMem_to_ClutBuffer__T32_I4_CSM1_sse2(u32* vm, u32 csa) -{ - u32* clut = GetClutBufferAddress(csa); - - __m128i* src = (__m128i*)vm; - __m128i* dst = (__m128i*)clut; - - __m128i r0 = _mm_load_si128(&src[0]); - __m128i r1 = _mm_load_si128(&src[1]); - __m128i r2 = _mm_load_si128(&src[2]); - __m128i r3 = _mm_load_si128(&src[3]); - - _mm_store_si128(&dst[0], _mm_unpacklo_epi64(r0, r1)); - _mm_store_si128(&dst[1], _mm_unpacklo_epi64(r2, r3)); - _mm_store_si128(&dst[2], _mm_unpackhi_epi64(r0, r1)); - _mm_store_si128(&dst[3], _mm_unpackhi_epi64(r2, r3)); -} - - -template -__forceinline void GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(u32* vm, u32* clut) -{ - __m128i vm_0; - __m128i vm_1; - __m128i vm_2; - __m128i vm_3; - __m128i clut_0; - __m128i clut_1; - __m128i clut_2; - __m128i clut_3; - - __m128i clut_mask = _mm_load_si128((__m128i*)s_clut_16bits_mask); - - // !HIGH_16BITS_VM - // CSA in 0-15 - // Replace lower 16 bits of clut with lower 16 bits of vm - // CSA in 16-31 - // Replace higher 16 bits of clut with lower 16 bits of vm - - // HIGH_16BITS_VM - // CSA in 0-15 - // Replace lower 16 bits of clut with higher 16 bits of vm - // CSA in 16-31 - // Replace higher 16 bits of clut with higher 16 bits of vm - if(HIGH_16BITS_VM && CSA_0_15) { - // move up to low - vm_0 = _mm_load_si128((__m128i*)vm); // 9 8 1 0 - vm_1 = _mm_load_si128((__m128i*)vm+1); // 11 10 3 2 - vm_2 = _mm_load_si128((__m128i*)vm+2); // 13 12 5 4 - vm_3 = _mm_load_si128((__m128i*)vm+3); // 15 14 7 6 - vm_0 = _mm_srli_epi32(vm_0, 16); - vm_1 = _mm_srli_epi32(vm_1, 16); - vm_2 = _mm_srli_epi32(vm_2, 16); - vm_3 = _mm_srli_epi32(vm_3, 16); - } else if(HIGH_16BITS_VM && !CSA_0_15) { - // Remove lower 16 bits - vm_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm)); // 9 8 1 0 - vm_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+1)); // 11 10 3 2 - vm_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+2)); // 13 12 5 4 - vm_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)vm+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && CSA_0_15) { - // Remove higher 16 bits - vm_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm)); // 9 8 1 0 - vm_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+1)); // 11 10 3 2 - vm_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+2)); // 13 12 5 4 - vm_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)vm+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && !CSA_0_15) { - // move low to high - vm_0 = _mm_load_si128((__m128i*)vm); // 9 8 1 0 - vm_1 = _mm_load_si128((__m128i*)vm+1); // 11 10 3 2 - vm_2 = _mm_load_si128((__m128i*)vm+2); // 13 12 5 4 - vm_3 = _mm_load_si128((__m128i*)vm+3); // 15 14 7 6 - vm_0 = _mm_slli_epi32(vm_0, 16); - vm_1 = _mm_slli_epi32(vm_1, 16); - vm_2 = _mm_slli_epi32(vm_2, 16); - vm_3 = _mm_slli_epi32(vm_3, 16); - } - - // Unsizzle the data - __m128i row_0 = _mm_unpacklo_epi64(vm_0, vm_1); // 3 2 1 0 - __m128i row_1 = _mm_unpacklo_epi64(vm_2, vm_3); // 7 6 5 4 - __m128i row_2 = _mm_unpackhi_epi64(vm_0, vm_1); // 11 10 9 8 - __m128i row_3 = _mm_unpackhi_epi64(vm_2, vm_3); // 15 14 13 12 - - // load old data & remove useless part - if(CSA_0_15) { - // Remove lower 16 bits - clut_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } else { - // Remove higher 16 bits - clut_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } - - // Merge old & new data - clut_0 = _mm_or_si128(clut_0, row_0); - clut_1 = _mm_or_si128(clut_1, row_1); - clut_2 = _mm_or_si128(clut_2, row_2); - clut_3 = _mm_or_si128(clut_3, row_3); - - _mm_store_si128((__m128i*)clut, clut_0); - _mm_store_si128((__m128i*)clut+1, clut_1); - _mm_store_si128((__m128i*)clut+2, clut_2); - _mm_store_si128((__m128i*)clut+3, clut_3); -} - -__forceinline void GSMem_to_ClutBuffer__T16_I4_CSM1_sse2(u32* vm, u32 csa) -{ - u32* clut = GetClutBufferAddress(csa); // Keep aligned version for sse2 - - if (csa > 15) { - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - } else { - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - } -} - -__forceinline void GSMem_to_ClutBuffer__T16_I8_CSM1_sse2(u32* vm, u32 csa) -{ - // update the right clut column (csa < 16) - u32* clut = GetClutBufferAddress(csa); // Keep aligned version for sse2 - - u32 csa_right = (csa < 16) ? 16 - csa : 0; - - for(int i = (csa_right/2); i > 0 ; --i) { - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - vm += 16; // go down one column - } - - // update the left clut column - u32 csa_left = (csa >= 16) ? 16 : csa; - - // In case csa_right is odd (so csa_left is also odd), we cross the clut column - if(csa_right & 0x1) { - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - // go back to the base before processing left clut column - clut = GetClutBufferAddress(0); // Keep aligned version for sse2 - - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - vm += 16; // go down one column - } else if(csa_right != 0) { - // go back to the base before processing left clut column - clut = GetClutBufferAddress(0); // Keep aligned version for sse2 - - } - - for(int i = (csa_left/2); i > 0 ; --i) { - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - GSMem_to_ClutBuffer__T16_I4_CSM1_core_sse2(vm, clut); - clut += 16; - vm += 16; // go down one column - } -} - -#endif // ZEROGS_SSE2 - -__forceinline void GSMem_to_ClutBuffer__T16_I8_CSM1_c(u32* _vm, u32 csa) -{ - const static u32 map[] = - { - 0, 2, 8, 10, 16, 18, 24, 26, - 4, 6, 12, 14, 20, 22, 28, 30, - 1, 3, 9, 11, 17, 19, 25, 27, - 5, 7, 13, 15, 21, 23, 29, 31 - }; - - u16* vm = (u16*)_vm; - u16* clut = GetClutBufferAddress(csa); - - int left = ((u32)(uptr)clut & 2) ? 512 : 512 - (((u32)(uptr)clut) & 0x3ff) / 2; - - for (int j = 0; j < 8; j++, vm += 32, clut += 64, left -= 32) - { - if (left == 32) - { - assert(left == 32); - - for (int i = 0; i < 16; i++) - clut[2*i] = vm[map[i]]; - - clut = (u16*)((uptr)clut & ~0x3ff) + 1; - - for (int i = 16; i < 32; i++) - clut[2*i] = vm[map[i]]; - } - else - { - if (left == 0) - { - clut = (u16*)((uptr)clut & ~0x3ff) + 1; - left = -1; - } - - for (int i = 0; i < 32; i++) - clut[2*i] = vm[map[i]]; - } - } -} - -__forceinline void GSMem_to_ClutBuffer__T32_I8_CSM1_c(u32* vm, u32 csa) -{ - u64* src = (u64*)vm; - u64* dst = (u64*)GetClutBufferAddress(csa); - - for (int j = 0; j < 2; j++, src += 32) - { - for (int i = 0; i < 4; i++, dst += 16, src += 8) - { - dst[0] = src[0]; - dst[1] = src[2]; - dst[2] = src[4]; - dst[3] = src[6]; - dst[4] = src[1]; - dst[5] = src[3]; - dst[6] = src[5]; - dst[7] = src[7]; - - dst[8] = src[32]; - dst[9] = src[32+2]; - dst[10] = src[32+4]; - dst[11] = src[32+6]; - dst[12] = src[32+1]; - dst[13] = src[32+3]; - dst[14] = src[32+5]; - dst[15] = src[32+7]; - } - } -} - -__forceinline void GSMem_to_ClutBuffer__T16_I4_CSM1_c(u32* _vm, u32 csa) -{ - u16* dst = GetClutBufferAddress(csa); - u16* src = (u16*)_vm; - - dst[0] = src[0]; - dst[2] = src[2]; - dst[4] = src[8]; - dst[6] = src[10]; - dst[8] = src[16]; - dst[10] = src[18]; - dst[12] = src[24]; - dst[14] = src[26]; - dst[16] = src[4]; - dst[18] = src[6]; - dst[20] = src[12]; - dst[22] = src[14]; - dst[24] = src[20]; - dst[26] = src[22]; - dst[28] = src[28]; - dst[30] = src[30]; -} - -__forceinline void GSMem_to_ClutBuffer__T32_I4_CSM1_c(u32* vm, u32 csa) -{ - u64* src = (u64*)vm; - u64* dst = (u64*)GetClutBufferAddress(csa); - - dst[0] = src[0]; - dst[1] = src[2]; - dst[2] = src[4]; - dst[3] = src[6]; - dst[4] = src[1]; - dst[5] = src[3]; - dst[6] = src[5]; - dst[7] = src[7]; -} - -// Main GSmem to Clutbuffer function -/*__forceinline*/ void GSMem_to_ClutBuffer(tex0Info &tex0) -{ - int entries = PSMT_IS8CLUT(tex0.psm) ? 256 : 16; - - u8* _src = g_pbyGSMemory + 256 * tex0.cbp; - - if (tex0.csm) - { - switch (tex0.cpsm) - { - // 16bit psm - // eggomania uses non16bit textures for csm2 - - case PSMCT16: - { - u16* src = (u16*)_src; - u16 *dst = GetClutBufferAddress(tex0.csa); - - for (int i = 0; i < entries; ++i) - { - *dst = src[getPixelAddress16_0(gs.clut.cou+i, gs.clut.cov, gs.clut.cbw)]; - dst += 2; - - // check for wrapping - if (((uptr)dst & 0x3ff) == 0) dst = GetClutBufferAddress(16); - } - break; - } - - case PSMCT16S: - { - u16* src = (u16*)_src; - u16 *dst = GetClutBufferAddress(tex0.csa); - - for (int i = 0; i < entries; ++i) - { - *dst = src[getPixelAddress16S_0(gs.clut.cou+i, gs.clut.cov, gs.clut.cbw)]; - dst += 2; - - // check for wrapping - if (((uptr)dst & 0x3ff) == 0) dst = GetClutBufferAddress(16); - } - break; - } - - case PSMCT32: - case PSMCT24: - { - u32* src = (u32*)_src; - u32 *dst = GetClutBufferAddress(tex0.csa); - - // check if address exceeds src - - if (src + getPixelAddress32_0(gs.clut.cou + entries - 1, gs.clut.cov, gs.clut.cbw) >= (u32*)g_pbyGSMemory + 0x00100000) - ZZLog::Error_Log("texClutWrite out of bounds."); - else - for (int i = 0; i < entries; ++i) - { - *dst = src[getPixelAddress32_0(gs.clut.cou+i, gs.clut.cov, gs.clut.cbw)]; - dst++; - } - break; - } - - default: - { - //ZZLog::Debug_Log("Unknown cpsm: %x (%x).", tex0.cpsm, tex0.psm); - break; - } - } - } - else - { - u32* src = (u32*)_src; - - if (entries == 16) - { - if (tex0.cpsm < 2) { -#ifdef ZEROGS_SSE2 - GSMem_to_ClutBuffer__T32_I4_CSM1_sse2(src, tex0.csa); -#else - GSMem_to_ClutBuffer__T32_I4_CSM1_c(src, tex0.csa); -#endif - } else { -#ifdef ZEROGS_SSE2 - GSMem_to_ClutBuffer__T16_I4_CSM1_sse2(src, tex0.csa); -#else - GSMem_to_ClutBuffer__T16_I4_CSM1_c(src, tex0.csa); -#endif - } - } - else - { - if (tex0.cpsm < 2) { -#ifdef ZEROGS_SSE2 - GSMem_to_ClutBuffer__T32_I8_CSM1_sse2(src, tex0.csa); -#else - GSMem_to_ClutBuffer__T32_I8_CSM1_c(src, tex0.csa); -#endif - } else { -#ifdef ZEROGS_SSE2 - GSMem_to_ClutBuffer__T16_I8_CSM1_sse2(src, tex0.csa); -#else - GSMem_to_ClutBuffer__T16_I8_CSM1_c(src, tex0.csa); -#endif - } - - } - } -} - -/* ***************************************************************** - * Clut buffer -> local C array (linear) - * *****************************************************************/ -template -/*__forceinline*/ void ClutBuffer_to_Array(T* dst, u32 csa, u32 clutsize) {} - -template <> -/*__forceinline*/ void ClutBuffer_to_Array(u32* dst, u32 csa, u32 clutsize) -{ - u8* clut = (u8*)GetClutBufferAddress(csa); - memcpy((u8*)dst, clut, clutsize); -} - -template <> -/*__forceinline*/ void ClutBuffer_to_Array(u16* dst, u32 csa, u32 clutsize) -{ - u16* clut = (u16*)GetClutBufferAddress(csa); // Keep aligned version for sse2 - - // which side to copy - s32 clutsize_right; - s32 clutsize_left; - if (csa < 16) { - clutsize_right = min(clutsize, (16-csa)*64); - clutsize_left = clutsize - clutsize_right; - } else { - clutsize_right = 0; - clutsize_left = clutsize; - } - - while (clutsize_right > 0) - { -#ifdef ZEROGS_SSE2 - // only lower 16 bits of dword are valid - __m128i clut_0 = _mm_load_si128((__m128i*)clut); - __m128i clut_1 = _mm_load_si128((__m128i*)clut+1); - __m128i clut_2 = _mm_load_si128((__m128i*)clut+2); - __m128i clut_3 = _mm_load_si128((__m128i*)clut+3); - - clut_0 = _mm_shufflelo_epi16(clut_0, 0x88); - clut_1 = _mm_shufflelo_epi16(clut_1, 0x88); - clut_2 = _mm_shufflelo_epi16(clut_2, 0x88); - clut_3 = _mm_shufflelo_epi16(clut_3, 0x88); - - clut_0 = _mm_shufflehi_epi16(clut_0, 0x88); // - - 3 2 1 0 - - - clut_1 = _mm_shufflehi_epi16(clut_1, 0x88); - clut_2 = _mm_shufflehi_epi16(clut_2, 0x88); - clut_3 = _mm_shufflehi_epi16(clut_3, 0x88); - - clut_0 = _mm_srli_si128(clut_0, 4); - clut_1 = _mm_srli_si128(clut_1, 4); - clut_2 = _mm_srli_si128(clut_2, 4); - clut_3 = _mm_srli_si128(clut_3, 4); - - _mm_store_si128((__m128i*)dst, _mm_unpacklo_epi64(clut_0, clut_1)); - _mm_store_si128((__m128i*)dst+1, _mm_unpacklo_epi64(clut_2, clut_3)); -#else - for(int i = 0; i < 16; ++i) - dst[i] = clut[2*i]; -#endif - - dst += 16; - clut += 32; - clutsize_right -= 32; - } - - if(csa < 16) { - // go back to the base before processing left clut column - clut = (u16*)GetClutBufferAddress(0); // Keep aligned version for sse2 - } - - while (clutsize_left > 0) - { -#ifdef ZEROGS_SSE2 - // only higher 16 bits of dword are valid - __m128i clut_0 = _mm_load_si128((__m128i*)clut); - __m128i clut_1 = _mm_load_si128((__m128i*)clut+1); - __m128i clut_2 = _mm_load_si128((__m128i*)clut+2); - __m128i clut_3 = _mm_load_si128((__m128i*)clut+3); - - clut_0 = _mm_shufflelo_epi16(clut_0, 0x88); - clut_1 = _mm_shufflelo_epi16(clut_1, 0x88); - clut_2 = _mm_shufflelo_epi16(clut_2, 0x88); - clut_3 = _mm_shufflelo_epi16(clut_3, 0x88); - - clut_0 = _mm_shufflehi_epi16(clut_0, 0x88); // - - 3 2 1 0 - - - clut_1 = _mm_shufflehi_epi16(clut_1, 0x88); - clut_2 = _mm_shufflehi_epi16(clut_2, 0x88); - clut_3 = _mm_shufflehi_epi16(clut_3, 0x88); - - clut_0 = _mm_srli_si128(clut_0, 4); - clut_1 = _mm_srli_si128(clut_1, 4); - clut_2 = _mm_srli_si128(clut_2, 4); - clut_3 = _mm_srli_si128(clut_3, 4); - - _mm_store_si128((__m128i*)dst, _mm_unpacklo_epi64(clut_0, clut_1)); - _mm_store_si128((__m128i*)dst+1, _mm_unpacklo_epi64(clut_2, clut_3)); -#else - // Note +1 because we change higher 16 bits - for(int i = 0; i < 16; ++i) - dst[i] = clut[2*i+1]; -#endif - - dst += 16; - clut += 32; - clutsize_left -= 32; - } -} - -/* ***************************************************************** - * Compare: Clut buffer <-> Local Memory - * *****************************************************************/ -// false -> identical -// true -> different -template -/*__forceinline*/ bool Cmp_ClutBuffer_GSMem(T* GSmem, u32 csa, u32 clutsize); - -template <> -/*__forceinline*/ bool Cmp_ClutBuffer_GSMem(u32* GSmem, u32 csa, u32 clutsize) -{ - u64* _GSmem = (u64*) GSmem; - u64* clut = (u64*)GetClutBufferAddress(csa); - - while(clutsize > 0) { -#ifdef ZEROGS_SSE2 - // Note: local memory datas are swizzles - __m128i GSmem_0 = _mm_load_si128((__m128i*)_GSmem); // 9 8 1 0 - __m128i GSmem_1 = _mm_load_si128((__m128i*)_GSmem+1); // 11 10 3 2 - __m128i GSmem_2 = _mm_load_si128((__m128i*)_GSmem+2); // 13 12 5 4 - __m128i GSmem_3 = _mm_load_si128((__m128i*)_GSmem+3); // 15 14 7 6 - - __m128i clut_0 = _mm_load_si128((__m128i*)clut); - __m128i clut_1 = _mm_load_si128((__m128i*)clut+1); - __m128i clut_2 = _mm_load_si128((__m128i*)clut+2); - __m128i clut_3 = _mm_load_si128((__m128i*)clut+3); - - __m128i result = _mm_cmpeq_epi32(_mm_unpacklo_epi64(GSmem_0, GSmem_1), clut_0); - - __m128i result_tmp = _mm_cmpeq_epi32(_mm_unpacklo_epi64(GSmem_2, GSmem_3), clut_1); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi32(_mm_unpackhi_epi64(GSmem_0, GSmem_1), clut_2); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi32(_mm_unpackhi_epi64(GSmem_2, GSmem_3), clut_3); - result = _mm_and_si128(result, result_tmp); - - u32 result_int = _mm_movemask_epi8(result); - if (result_int != 0xFFFF) - return true; -#else - // I see no point to keep an mmx version. SSE2 versions is probably faster. - // Keep a slow portable C version for reference/debug - // Note: local memory datas are swizzles - if (clut[0] != _GSmem[0] || clut[1] != _GSmem[2] || clut[2] != _GSmem[4] || clut[3] != _GSmem[6] - || clut[4] != _GSmem[1] || clut[5] != _GSmem[3] || clut[6] != _GSmem[5] || clut[7] != _GSmem[7]) - return true; -#endif - - // go to the next memory block - _GSmem += 32; - - // go back to the previous memory block then down one memory column - if (clutsize & 0x40) { - _GSmem -= (64-8); - } - // In case previous operation (down one column) cross the block boundary - // Go to the next block - if (clutsize == 0x240) { - _GSmem += 32; - } - - clut += 8; - clutsize -= 64; - } - - return false; -} - -#ifdef ZEROGS_SSE2 -template -__forceinline bool Cmp_ClutBuffer_GSMem_core(u16* GSmem, u16* clut) -{ - __m128i GSmem_0; - __m128i GSmem_1; - __m128i GSmem_2; - __m128i GSmem_3; - __m128i clut_0; - __m128i clut_1; - __m128i clut_2; - __m128i clut_3; - - __m128i clut_mask = _mm_load_si128((__m128i*)s_clut_16bits_mask); - - // !HIGH_16BITS_VM - // CSA in 0-15 - // cmp lower 16 bits of clut with lower 16 bits of GSmem - // CSA in 16-31 - // cmp higher 16 bits of clut with lower 16 bits of GSmem - - // HIGH_16BITS_VM - // CSA in 0-15 - // cmp lower 16 bits of clut with higher 16 bits of GSmem - // CSA in 16-31 - // cmp higher 16 bits of clut with higher 16 bits of GSmem - if(HIGH_16BITS_VM && CSA_0_15) { - // move up to low - GSmem_0 = _mm_load_si128((__m128i*)GSmem); // 9 8 1 0 - GSmem_1 = _mm_load_si128((__m128i*)GSmem+1); // 11 10 3 2 - GSmem_2 = _mm_load_si128((__m128i*)GSmem+2); // 13 12 5 4 - GSmem_3 = _mm_load_si128((__m128i*)GSmem+3); // 15 14 7 6 - GSmem_0 = _mm_srli_epi32(GSmem_0, 16); - GSmem_1 = _mm_srli_epi32(GSmem_1, 16); - GSmem_2 = _mm_srli_epi32(GSmem_2, 16); - GSmem_3 = _mm_srli_epi32(GSmem_3, 16); - } else if(HIGH_16BITS_VM && !CSA_0_15) { - // Remove lower 16 bits - GSmem_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)GSmem)); // 9 8 1 0 - GSmem_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+1)); // 11 10 3 2 - GSmem_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+2)); // 13 12 5 4 - GSmem_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && CSA_0_15) { - // Remove higher 16 bits - GSmem_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)GSmem)); // 9 8 1 0 - GSmem_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+1)); // 11 10 3 2 - GSmem_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+2)); // 13 12 5 4 - GSmem_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)GSmem+3)); // 15 14 7 6 - } else if(!HIGH_16BITS_VM && !CSA_0_15) { - // move low to high - GSmem_0 = _mm_load_si128((__m128i*)GSmem); // 9 8 1 0 - GSmem_1 = _mm_load_si128((__m128i*)GSmem+1); // 11 10 3 2 - GSmem_2 = _mm_load_si128((__m128i*)GSmem+2); // 13 12 5 4 - GSmem_3 = _mm_load_si128((__m128i*)GSmem+3); // 15 14 7 6 - GSmem_0 = _mm_slli_epi32(GSmem_0, 16); - GSmem_1 = _mm_slli_epi32(GSmem_1, 16); - GSmem_2 = _mm_slli_epi32(GSmem_2, 16); - GSmem_3 = _mm_slli_epi32(GSmem_3, 16); - } - - // Unsizzle the data - __m128i row_0 = _mm_unpacklo_epi64(GSmem_0, GSmem_1); // 3 2 1 0 - __m128i row_1 = _mm_unpacklo_epi64(GSmem_2, GSmem_3); // 7 6 5 4 - __m128i row_2 = _mm_unpackhi_epi64(GSmem_0, GSmem_1); // 11 10 9 8 - __m128i row_3 = _mm_unpackhi_epi64(GSmem_2, GSmem_3); // 15 14 13 12 - - // load old data & remove useless part - if(!CSA_0_15) { - // Remove lower 16 bits - clut_0 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_andnot_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } else { - // Remove higher 16 bits - clut_0 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut)); - clut_1 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+1)); - clut_2 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+2)); - clut_3 = _mm_and_si128(clut_mask, _mm_load_si128((__m128i*)clut+3)); - } - - // Do the comparaison - __m128i result = _mm_cmpeq_epi16(row_0, clut_0); - __m128i result_tmp = _mm_cmpeq_epi16(row_1, clut_1); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(row_2, clut_2); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(row_3, clut_3); - result = _mm_and_si128(result, result_tmp); - - u32 result_int = _mm_movemask_epi8(result); - if(CSA_0_15) { - // only lower 16bits must be checked - if ((result_int&0x3333) != 0x3333) - return true; - } else { - // only higher 16bits must be checked - if ((result_int&0xCCCC) != 0xCCCC) - return true; - } - - return false; -} -#endif - -template <> -/*__forceinline*/ bool Cmp_ClutBuffer_GSMem(u16* GSmem, u32 csa, u32 clutsize) -{ -#ifdef ZEROGS_SSE2 - u16* clut = (u16*)GetClutBufferAddress(csa); // Keep aligned version for sse2 - - // Special case only one CSA block to check - if(clutsize == 32) { - if (csa < 16) - return Cmp_ClutBuffer_GSMem_core(GSmem, clut); - else - return Cmp_ClutBuffer_GSMem_core(GSmem, clut); - } - - // which side to cmp - s32 clutsize_right; // Note clutsize_right could be negative ! - u32 clutsize_left; - if (csa < 16) { - // the '-32' is a trick to handle easily when csa is odd - clutsize_right = min(clutsize, (16-csa)*32) -32; - clutsize_left = clutsize - clutsize_right; - } else { - clutsize_right = 0; - clutsize_left = clutsize; - } - - while(clutsize_right > 0) { - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - clut += 32; - - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - clut += 32; - - GSmem += 32; // go down one column - clutsize_right -= 64; - } - - if(csa < 16) { - // because of the extra -32, csa_righ is null when csa is odd - if (clutsize_right == 0) { - // cross the clut - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - clut += 32; - - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - - GSmem += 32; // go down one column - clutsize_left -= 32; - } - - // go back to the base before processing left clut column - clut = (u16*)GetClutBufferAddress(0); // Keep aligned version for sse2 - } - - while(clutsize_left > 0) { - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - clut += 32; - - if (Cmp_ClutBuffer_GSMem_core(GSmem, clut)) - return true; - clut += 32; - - GSmem += 32; // go down one column - clutsize_left -= 64; - } - - return false; -#else - // This function is only useful for performance. So just return - // for a plain c build - return true; -#endif -} - -/* ***************************************************************** - * Compare: Clut buffer <-> local C array (linear) - * *****************************************************************/ -// false -> identical -// true -> different -template -/*__forceinline*/ bool Cmp_ClutBuffer_SavedClut(T* saved_clut, u32 csa, u32 clutsize); - -template <> -/*__forceinline*/ bool Cmp_ClutBuffer_SavedClut(u32* saved_clut, u32 csa, u32 clutsize) -{ - u32* clut = GetClutBufferAddress(csa); - return !!memcmp_mmx(saved_clut, clut, clutsize); -} - -template <> -/*__forceinline*/ bool Cmp_ClutBuffer_SavedClut(u16* saved_clut, u32 csa, u32 clutsize) -{ - assert((clutsize&31) == 0); - -#ifdef ZEROGS_SSE2 - __m128i zero_128 = _mm_setzero_si128(); -#endif - u16* clut = (u16*)GetClutBufferAddress(csa); // Keep aligned version for sse2 - - // which side to cmp - u32 clutsize_right; - u32 clutsize_left; - if (csa < 16) { - clutsize_right = min(clutsize, (16-csa)*32); - clutsize_left = clutsize - clutsize_right; - } else { - clutsize_right = 0; - clutsize_left = clutsize; - } - - while (clutsize_right > 0) - { -#ifdef ZEROGS_SSE2 - // only lower 16 bits of dword are valid - __m128i clut_0 = _mm_load_si128((__m128i*)clut); - __m128i clut_1 = _mm_load_si128((__m128i*)clut+1); - __m128i clut_2 = _mm_load_si128((__m128i*)clut+2); - __m128i clut_3 = _mm_load_si128((__m128i*)clut+3); - - // value must converted to 32 bits - __m128i saved_clut_0 = _mm_load_si128((__m128i*)saved_clut); - __m128i saved_clut_1 = _mm_load_si128((__m128i*)saved_clut+1); - - __m128i result = _mm_cmpeq_epi16(_mm_unpacklo_epi16(saved_clut_0, zero_128), clut_0); - __m128i result_tmp = _mm_cmpeq_epi16(_mm_unpackhi_epi16(saved_clut_0, zero_128), clut_1); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(_mm_unpacklo_epi16(saved_clut_1, zero_128), clut_2); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(_mm_unpackhi_epi16(saved_clut_1, zero_128), clut_3); - result = _mm_and_si128(result, result_tmp); - - u32 result_int = _mm_movemask_epi8(result); - // only lower 16bits must be checked - if ((result_int&0x3333) != 0x3333) - return true; -#else - for (int i = 0; i < 16; ++i) - if (saved_clut[i] != clut[2*i]) return true; -#endif - - saved_clut += 16; - clut += 32; - clutsize_right -= 32; - } - - if(csa < 16) { - // go back to the base before processing left clut column - clut = (u16*)GetClutBufferAddress(0); // Keep aligned version for sse2 - } - - while (clutsize_left > 0) - { -#ifdef ZEROGS_SSE2 - // only higher 16 bits of dword are valid - __m128i clut_0 = _mm_load_si128((__m128i*)clut); - __m128i clut_1 = _mm_load_si128((__m128i*)clut+1); - __m128i clut_2 = _mm_load_si128((__m128i*)clut+2); - __m128i clut_3 = _mm_load_si128((__m128i*)clut+3); - - // value must converted to 32 bits (with 0 in lower 16 bits) - __m128i saved_clut_0 = _mm_load_si128((__m128i*)saved_clut); - __m128i saved_clut_1 = _mm_load_si128((__m128i*)saved_clut+1); - - __m128i result = _mm_cmpeq_epi16(_mm_unpacklo_epi16(zero_128, saved_clut_0), clut_0); - __m128i result_tmp = _mm_cmpeq_epi16(_mm_unpackhi_epi16(zero_128, saved_clut_0), clut_1); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(_mm_unpacklo_epi16(zero_128, saved_clut_1), clut_2); - result = _mm_and_si128(result, result_tmp); - - result_tmp = _mm_cmpeq_epi16(_mm_unpackhi_epi16(zero_128, saved_clut_1), clut_3); - result = _mm_and_si128(result, result_tmp); - - u32 result_int = _mm_movemask_epi8(result); - // only higher 16bits must be checked - if ((result_int&0xCCCC) != 0xCCCC) - return true; -#else - // Note +1 because we change higher 16 bits - for (int i = 0; i < 16; ++i) - if (saved_clut[i] != clut[2*i+1]) return true; -#endif - - saved_clut += 16; - clut += 32; - clutsize_left -= 32; - } - - return false; -} - - -/* ***************************************************************** - * Resolve color of clut texture - * *****************************************************************/ - -// used to build clut textures (note that this is for both 16 and 32 bit cluts) -template -/*__forceinline*/ void Build_Clut_Texture(u32 psm, u32 height, T* pclut, u8* psrc, T* pdst) -{ - switch (psm) - { - case PSMT8: - for (u32 i = 0; i < height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH / 2; ++j) - { - pdst[0] = pclut[psrc[0]]; - pdst[1] = pclut[psrc[1]]; - pdst[2] = pclut[psrc[2]]; - pdst[3] = pclut[psrc[3]]; - pdst[4] = pclut[psrc[4]]; - pdst[5] = pclut[psrc[5]]; - pdst[6] = pclut[psrc[6]]; - pdst[7] = pclut[psrc[7]]; - pdst += 8; - psrc += 8; - } - } - break; - - case PSMT4: - for (u32 i = 0; i < height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH; ++j) - { - pdst[0] = pclut[psrc[0] & 15]; - pdst[1] = pclut[psrc[0] >> 4]; - pdst[2] = pclut[psrc[1] & 15]; - pdst[3] = pclut[psrc[1] >> 4]; - pdst[4] = pclut[psrc[2] & 15]; - pdst[5] = pclut[psrc[2] >> 4]; - pdst[6] = pclut[psrc[3] & 15]; - pdst[7] = pclut[psrc[3] >> 4]; - - pdst += 8; - psrc += 4; - } - } - break; - - case PSMT8H: - for (u32 i = 0; i < height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH / 8; ++j) - { - pdst[0] = pclut[psrc[3]]; - pdst[1] = pclut[psrc[7]]; - pdst[2] = pclut[psrc[11]]; - pdst[3] = pclut[psrc[15]]; - pdst[4] = pclut[psrc[19]]; - pdst[5] = pclut[psrc[23]]; - pdst[6] = pclut[psrc[27]]; - pdst[7] = pclut[psrc[31]]; - pdst += 8; - psrc += 32; - } - } - break; - - case PSMT4HH: - for (u32 i = 0; i < height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH / 8; ++j) - { - pdst[0] = pclut[psrc[3] >> 4]; - pdst[1] = pclut[psrc[7] >> 4]; - pdst[2] = pclut[psrc[11] >> 4]; - pdst[3] = pclut[psrc[15] >> 4]; - pdst[4] = pclut[psrc[19] >> 4]; - pdst[5] = pclut[psrc[23] >> 4]; - pdst[6] = pclut[psrc[27] >> 4]; - pdst[7] = pclut[psrc[31] >> 4]; - pdst += 8; - psrc += 32; - } - } - break; - - case PSMT4HL: - for (u32 i = 0; i < height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH / 8; ++j) - { - pdst[0] = pclut[psrc[3] & 15]; - pdst[1] = pclut[psrc[7] & 15]; - pdst[2] = pclut[psrc[11] & 15]; - pdst[3] = pclut[psrc[15] & 15]; - pdst[4] = pclut[psrc[19] & 15]; - pdst[5] = pclut[psrc[23] & 15]; - pdst[6] = pclut[psrc[27] & 15]; - pdst[7] = pclut[psrc[31] & 15]; - pdst += 8; - psrc += 32; - } - } - break; - - default: - assert(0); - } -} - -// Instantiate the Build_Clut_Texture template... -template void Build_Clut_Texture(u32 psm, u32 height, u32* pclut, u8* psrc, u32* pdst); -template void Build_Clut_Texture(u32 psm, u32 height, u16* pclut, u8* psrc, u16* pdst); diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZClut.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZClut.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZClut.h 2010-10-20 09:09:31.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZClut.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef CLUT_H_INCLUDED -#define CLUT_H_INCLUDED - -extern void GSMem_to_ClutBuffer(tex0Info &tex0); -template extern void ClutBuffer_to_Array(T* dst, u32 csa, u32 clutsize); -template extern void Build_Clut_Texture(u32 psm, u32 height, T* pclut, u8* psrc, T* pdst); - -template extern bool Cmp_ClutBuffer_GSMem(T* GSmem, u32 csa, u32 clutsize); -template extern bool Cmp_ClutBuffer_SavedClut(T* saved_clut, u32 csa, u32 clutsize); - -#endif // CLUT_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZDepthTargets.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZDepthTargets.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZDepthTargets.cpp 2012-08-08 17:44:03.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZDepthTargets.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,315 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include -#include - -#include "GS.h" -#include "Mem.h" -#include "x86.h" -#include "targets.h" -#include "ZZoglShaders.h" -#include "ZZClut.h" -#include "ZZoglVB.h" -#include "Util.h" - -extern bool g_bUpdateStencil; - -void _Resolve(const void* psrc, int fbp, int fbw, int fbh, int psm, u32 fbm, bool mode); -void SetWriteDepth(); -bool IsWriteDepth(); -bool IsWriteDestAlphaTest(); - -const float g_filog32 = 0.999f / (32.0f * logf(2.0f)); - -CDepthTarget::CDepthTarget() : CRenderTarget(), pdepth(0), pstencil(0), icount(0) {} - -CDepthTarget::~CDepthTarget() -{ - FUNCLOG - - Destroy(); -} - -bool CDepthTarget::Create(const frameInfo& frame) -{ - FUNCLOG - - if (!CRenderTarget::Create(frame)) return false; - - GL_REPORT_ERROR(); - - glGenRenderbuffersEXT(1, &pdepth); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, pdepth); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH24_STENCIL8_EXT, RW(fbw), RH(fbh)); - - if (glGetError() != GL_NO_ERROR) - { - // try a separate depth and stencil buffer - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, pdepth); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, RW(fbw), RH(fbh)); - - if (g_bUpdateStencil) - { - glGenRenderbuffersEXT(1, &pstencil); - glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, pstencil); - glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX8_EXT, RW(fbw), RH(fbh)); - - if (glGetError() != GL_NO_ERROR) - { - ZZLog::Error_Log("Failed to create depth buffer %dx%d.", RW(fbw), RH(fbh)); - return false; - } - } - else - { - pstencil = 0; - } - } - else - { - pstencil = pdepth; - } - - status = TS_NeedUpdate; - - return true; -} - -void CDepthTarget::Destroy() -{ - FUNCLOG - - if (status) // In this case Framebuffer extension is off-use and lead to segfault - { - ResetRenderTarget(1); - FB::Attach(GL_DEPTH_ATTACHMENT_EXT); - FB::Attach(GL_STENCIL_ATTACHMENT_EXT); - GL_REPORT_ERRORD(); - - if (pstencil != 0) - { - if (pstencil != pdepth) glDeleteRenderbuffersEXT(1, &pstencil); - pstencil = 0; - } - - if (pdepth != 0) - { - glDeleteRenderbuffersEXT(1, &pdepth); - pdepth = 0; - } - - GL_REPORT_ERRORD(); - } - - CRenderTarget::Destroy(); -} - - -extern int g_nDepthUsed; // > 0 if depth is used - -void CDepthTarget::Resolve() -{ - FUNCLOG - - if (g_nDepthUsed > 0 && conf.mrtdepth && !(status & TS_Virtual) && IsWriteDepth() && !(conf.settings().no_depth_resolve)) - CRenderTarget::Resolve(); - else - { - // flush if necessary - FlushIfNecesary(this); - - if (!(status & TS_Virtual)) status |= TS_Resolved; - } - - if (!(status&TS_Virtual)) - { - SetWriteDepth(); - } -} - -void CDepthTarget::Resolve(int startrange, int endrange) -{ - FUNCLOG - - if (g_nDepthUsed > 0 && conf.mrtdepth && !(status&TS_Virtual) && IsWriteDepth()) - { - CRenderTarget::Resolve(startrange, endrange); - } - else - { - // flush if necessary - FlushIfNecesary(this) ; - - if (!(status & TS_Virtual)) - status |= TS_Resolved; - } - - if (!(status&TS_Virtual)) - { - SetWriteDepth(); - } -} - -void CDepthTarget::Update(int context, CRenderTarget* prndr) -{ - FUNCLOG - - assert(!(status & TS_Virtual)); - - // align the rect to the nearest page - // note that fbp is always aligned on page boundaries - tex0Info texframe; - texframe.tbp0 = fbp; - texframe.tbw = fbw; - texframe.tw = fbw; - texframe.th = fbh; - texframe.psm = psm; - // FIXME some field are not initialized... - // in particular the clut related one - assert(!PSMT_ISCLUT(psm)); - - DisableAllgl(); - - VB& curvb = vb[context]; - - if (curvb.test.zte == 0) return; - - SetShaderCaller("CDepthTarget::Update"); - - glEnable(GL_DEPTH_TEST); - - glDepthMask(!curvb.zbuf.zmsk); - - static const u32 g_dwZCmp[] = { GL_NEVER, GL_ALWAYS, GL_GEQUAL, GL_GREATER }; - - glDepthFunc(g_dwZCmp[curvb.test.ztst]); - - // write color and zero out stencil buf, always 0 context! - SetTexVariablesInt(0, 0, texframe, false, &ppsBitBltDepth, 1); - ZZshGLSetTextureParameter(ppsBitBltDepth.prog, ppsBitBltDepth.sMemory, vb[0].pmemtarg->ptex->tex, "BitBltDepth"); - - float4 v = DefaultBitBltPos(); - - v = DefaultBitBltTex(); - - v.x = 1; - v.y = 2; - v.z = PSMT_IS16Z(psm) ? 1.0f : 0.0f; - v.w = g_filog32; - ZZshSetParameter4fv(ppsBitBltDepth.prog, ppsBitBltDepth.sOneColor, v, "g_fOneColor"); - - float4 vdepth = g_vdepth; - - if (psm == PSMT24Z) - { - vdepth.w = 0; - } - else if (psm != PSMT32Z) - { - vdepth.z = vdepth.w = 0; - } - -#if defined(GLSL_API) || defined(GLSL4_API) - assert(ppsBitBltDepth.sBitBltZ != -1); -#else - assert(ppsBitBltDepth.sBitBltZ != 0); -#endif - - ZZshSetParameter4fv(ppsBitBltDepth.prog, ppsBitBltDepth.sBitBltZ, (vdepth*(255.0f / 256.0f)), "g_fBitBltZ"); - - assert(pdepth != 0); - //GLint w1 = 0; - //GLint h1 = 0; - - FB::Attach2D(0, ptex); - //glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_WIDTH_EXT, &w1); - //glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_HEIGHT_EXT, &h1); - SetDepthStencilSurface(); - - FB::Attach2D(1); - - GLenum buffer = GL_COLOR_ATTACHMENT0_EXT; - - //ZZLog::Error_Log("CDepthTarget::Update: w1 = 0x%x; h1 = 0x%x", w1, h1); - DrawBuffers(&buffer); - - SetViewport(); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - - SET_STREAM(); - ZZshSetVertexShader(pvsBitBlt.prog); - ZZshSetPixelShader(ppsBitBltDepth.prog); - - DrawTriangleArray(); - - status = TS_Resolved; - - if (!IsWriteDepth()) - { - ResetRenderTarget(1); - } - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - glEnable(GL_SCISSOR_TEST); - -#ifdef _DEBUG - if (g_bSaveZUpdate) - { - SaveTex(&texframe, 1); - SaveTexture("frame1.tga", GL_TEXTURE_RECTANGLE_NV, ptex, RW(fbw), RH(fbh)); - } -#endif -} - -void CDepthTarget::SetDepthStencilSurface() -{ - FUNCLOG - FB::Attach(GL_DEPTH_ATTACHMENT_EXT, pdepth); - - if (pstencil) - { - // there's a bug with attaching stencil and depth buffers - FB::Attach(GL_STENCIL_ATTACHMENT_EXT, pstencil); - - if (icount++ < 8) // not going to fail if succeeded 4 times - { - GL_REPORT_ERRORD(); - - if (FB::State() != GL_FRAMEBUFFER_COMPLETE_EXT) - { - FB::Attach(GL_STENCIL_ATTACHMENT_EXT); - - if (pstencil != pdepth) glDeleteRenderbuffersEXT(1, &pstencil); - - pstencil = 0; - g_bUpdateStencil = 0; - } - } - } - else - { - FB::Attach(GL_STENCIL_ATTACHMENT_EXT); - } -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZGl.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZGl.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZGl.h 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZGl.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,354 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZGL_H_INCLUDED -#define ZZGL_H_INCLUDED - -#include "PS2Etypes.h" -#include "PS2Edefs.h" - -// Need this before gl.h -#ifdef _WIN32 - -#include "Utilities/RedtapeWindows.h" - -#include -#include -#include "glprocs.h" - -#else - -// adding glew support instead of glXGetProcAddress (thanks to scaught) -#include -#include -#include -#include - -#endif - -#include "Mem.h" - -extern u32 s_stencilfunc, s_stencilref, s_stencilmask; -extern GLenum s_srcrgb, s_dstrgb, s_srcalpha, s_dstalpha; // set by zgsBlendFuncSeparateEXT -extern GLenum s_rgbeq, s_alphaeq; - -#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils -# define GL_DEPTH_STENCIL_EXT 0x84F9 -# define GL_UNSIGNED_INT_24_8_EXT 0x84FA -# define GL_DEPTH24_STENCIL8_EXT 0x88F0 -# define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif - -#ifdef _WIN32 -#define GL_LOADFN(name) { \ - if( (*(void**)&name = (void*)wglGetProcAddress(#name)) == NULL ) { \ - ZZLog::Error_Log("Failed to find %s, exiting.", #name); \ - } \ -} -#else -// let GLEW take care of it -#define GL_LOADFN(name) -#endif - -static __forceinline void GL_STENCILFUNC(GLenum func, GLint ref, GLuint mask) -{ - s_stencilfunc = func; - s_stencilref = ref; - s_stencilmask = mask; - glStencilFunc(func, ref, mask); -} - -static __forceinline void GL_STENCILFUNC_SET() -{ - glStencilFunc(s_stencilfunc, s_stencilref, s_stencilmask); -} - -#ifdef GLSL4_API -#include "ZZoglShaders.h" -#endif -// sets the data stream -static __forceinline void SET_STREAM() -{ -#ifndef GLSL4_API - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)8); - glSecondaryColorPointerEXT(4, GL_UNSIGNED_BYTE, sizeof(VertexGPU), (void*)12); - glTexCoordPointer(3, GL_FLOAT, sizeof(VertexGPU), (void*)16); - glVertexPointer(4, GL_SHORT, sizeof(VertexGPU), (void*)0); -#else - vertex_array->set_internal_format(); -#endif -} - -//static __forceinline void SAFE_RELEASE_TEX(u32& x) -//{ -// if (x != 0) -// { -// glDeleteTextures(1, &x); -// x = 0; -// } -//} -#define SAFE_RELEASE_TEX(x) { if( (x) != 0 ) { glDeleteTextures(1, &(x)); x = 0; } } - -// inline for an extremely often used sequence -// This is turning off all gl functions. Safe to do updates. -inline void DisableAllgl() -{ - glDisable(GL_SCISSOR_TEST); - glDisable(GL_BLEND); - glDisable(GL_ALPHA_TEST); - glDisable(GL_DEPTH_TEST); - glDepthMask(0); - glDisable(GL_STENCIL_TEST); - glColorMask(1, 1, 1, 1); -} - -//--------------------- Dummies - -#ifdef _WIN32 -extern void (__stdcall *zgsBlendEquationSeparateEXT)(GLenum, GLenum); -extern void (__stdcall *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum); -#else -extern void (APIENTRY *zgsBlendEquationSeparateEXT)(GLenum, GLenum); -extern void (APIENTRY *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum); -#endif - -// GL prototypes -extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT; -extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT; -extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT; -extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT; -extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT; -extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT; -extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT; -extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT; -extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT; -extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT; -extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT; -extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT; -extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT; -extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT; -extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT; -extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT; -extern PFNGLDRAWBUFFERSPROC glDrawBuffers; - -#ifdef GLSL4_API -#include "ZZoglShaders.h" -#endif -static __forceinline void DrawTriangleArray() -{ -#ifdef GLSL4_API - ZZshSetupShader(); -#endif - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - GL_REPORT_ERRORD(); -} - -static __forceinline void DrawBuffers(GLenum *buffer) -{ - if (glDrawBuffers != NULL) - { - glDrawBuffers(1, buffer); - } - - GL_REPORT_ERRORD(); -} - - -namespace FB -{ - extern u32 buf; - - static __forceinline void Create() - { - assert(buf == 0); - glGenFramebuffersEXT(1, &buf); - if (buf == 0) - ZZLog::Error_Log("Failed to create the renderbuffer."); - } - - static __forceinline void Delete() - { - if (buf != 0) { - glDeleteFramebuffersEXT(1, &buf); - buf = 0; - } - } - - static __forceinline void Bind() - { - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, buf); - } - - static __forceinline void Unbind() - { - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - } - - static __forceinline GLenum State() - { - return glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - } - - static __forceinline void Attach2D(int attach, int id = 0) - { - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + attach, GL_TEXTURE_RECTANGLE_NV, id, 0); - GL_REPORT_ERRORD(); - } - - static __forceinline void Attach(GLenum rend, GLuint id = 0) - { - glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, rend, GL_RENDERBUFFER_EXT, id); - } -}; - -static __forceinline void ResetRenderTarget(int index) -{ - FB::Attach2D(index); -} - -static __forceinline void TextureImage(GLenum tex_type, GLint iFormat, GLint width, GLint height, GLenum format, GLenum type, const GLvoid* pixels) -{ - glTexImage2D(tex_type, 0, iFormat, width, height, 0, format, type, pixels); -} - -static __forceinline void Texture2D(GLint iFormat, GLint width, GLint height, GLenum format, GLenum type, const GLvoid* pixels) -{ - TextureImage(GL_TEXTURE_2D, iFormat, width, height, format, type, pixels); -} - -static __forceinline void Texture2D(GLint iFormat, GLenum format, GLenum type, const GLvoid* pixels) -{ - TextureImage(GL_TEXTURE_2D, iFormat, BLOCK_TEXWIDTH, BLOCK_TEXHEIGHT, format, type, pixels); -} - -static __forceinline void TextureRect(GLint iFormat, GLint width, GLint height, GLenum format, GLenum type, const GLvoid* pixels) -{ - TextureImage(GL_TEXTURE_RECTANGLE_NV, iFormat, width, height, format, type, pixels); -} - -static __forceinline void TextureRect2(GLint iFormat, GLint width, GLint height, GLenum format, GLenum type, const GLvoid* pixels) -{ - TextureImage(GL_TEXTURE_RECTANGLE, iFormat, width, height, format, type, pixels); -} - -static __forceinline void Texture3D(GLint iFormat, GLint width, GLint height, GLint depth, GLenum format, GLenum type, const GLvoid* pixels) -{ - glTexImage3D(GL_TEXTURE_3D, 0, iFormat, width, height, depth, 0, format, type, pixels); -} - -static __forceinline void setTex2DFilters(GLint type) -{ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, type); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, type); -} - -static __forceinline void setTex2DWrap(GLint type) -{ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, type); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, type); -} - -static __forceinline void setTex3DFilters(GLint type) -{ - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, type); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, type); -} - -static __forceinline void setTex3DWrap(GLint type) -{ - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, type); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, type); - glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, type); -} - -static __forceinline void setRectFilters(GLint type) -{ - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, type); - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, type); -} - -static __forceinline void setRectWrap(GLint type) -{ - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_S, type); - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_WRAP_T, type); -} - -static __forceinline void setRectWrap2(GLint type) -{ - glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, type); - glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, type); -} - -static __forceinline void GL_BLEND_SET() -{ - zgsBlendFuncSeparateEXT(s_srcrgb, s_dstrgb, s_srcalpha, s_dstalpha); -} - -static __forceinline void GL_BLEND_RGB(GLenum src, GLenum dst) -{ - s_srcrgb = src; - s_dstrgb = dst; - GL_BLEND_SET(); -} - -static __forceinline void GL_BLEND_ALPHA(GLenum src, GLenum dst) -{ - s_srcalpha = src; - s_dstalpha = dst; - GL_BLEND_SET(); -} - -static __forceinline void GL_BLEND_ALL(GLenum srcrgb, GLenum dstrgb, GLenum srcalpha, GLenum dstalpha) -{ - s_srcrgb = srcrgb; - s_dstrgb = dstrgb; - s_srcalpha = srcalpha; - s_dstalpha = dstalpha; - GL_BLEND_SET(); -} - -static __forceinline void GL_ZTEST(bool enable) -{ - if (enable) - glEnable(GL_DEPTH_TEST); - else - glDisable(GL_DEPTH_TEST); -} - -static __forceinline void GL_ALPHATEST(bool enable) -{ - if (enable) - glEnable(GL_ALPHA_TEST); - else - glDisable(GL_ALPHA_TEST); -} - -static __forceinline void GL_BLENDEQ_RGB(GLenum eq) -{ - s_rgbeq = eq; - zgsBlendEquationSeparateEXT(s_rgbeq, s_alphaeq); -} - -static __forceinline void GL_BLENDEQ_ALPHA(GLenum eq) -{ - s_alphaeq = eq; - zgsBlendEquationSeparateEXT(s_rgbeq, s_alphaeq); -} - -#endif // ZZGL_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZHacks.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZHacks.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZHacks.cpp 2010-11-07 05:51:54.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZHacks.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - - #include "Util.h" - #include "ZZHacks.h" - #include "ZZLog.h" - -int CurrentHack = 0; - -// A list of what bit controls each of the current hacks. -u32 hackList[HACK_NUMBER] = -{ - 0, // No hack - 1, //GAME_TEXTURETARGS, - 2, //GAME_AUTORESET, - 3, //GAME_INTERLACE2X, - 4, //GAME_TEXAHACK, - 5, //GAME_NOTARGETRESOLVE, - 6, //GAME_EXACTCOLOR, - //7 //GAME_NOCOLORCLAMP, - //8 //GAME_FFXHACK, - 9, //GAME_NOALPHAFAIL, - 10, //GAME_NODEPTHUPDATE, - 11, //GAME_QUICKRESOLVE1, - 12, //GAME_NOQUICKRESOLVE, - 13, //GAME_NOTARGETCLUT, - 14, //GAME_NOSTENCIL, - 15, //GAME_NODEPTHRESOLVE, - 16, //GAME_FULL16BITRES, - 17, //GAME_RESOLVEPROMOTED, - 18, //GAME_FASTUPDATE, - 19, //GAME_NOALPHATEST, - 20, //GAME_DISABLEMRTDEPTH, - //21 //GAME_32BITTARGS, - //22 //GAME_PATH3HACK, - //23 //GAME_DOPARALLELCTX, - 24, //GAME_XENOSPECHACK, - //25 //GAME_PARTIALPOINTERS, - 26, //GAME_PARTIALDEPTH, - 27, //GAME_REGETHACK, - 28, //GAME_GUSTHACK, - 29, //GAME_NOLOGZ, - 30, //GAME_AUTOSKIPDRAW -}; - - -char hackDesc[32][64] = -{ - "No hack", - "Texture targs", - "Auto reset", - "Interlace 2x", - "Texa", - "No target resolve", - "Exact color", - "No color clamp", - "Final Fantasy X", - "No alpha fail", - "No depth update", - "Quick resolve 1", - "No Quick resolve", - "No target clut", - "No stencil", - "VSS", - "No depth resolve", - "Full 16 bit resolution", - "Resolve promoted", - "Fast update", - "No alpha test", - "Disable mrt depth", - "Args 32 bit", - "", - "Parallel context", - "Xenosaga spec", - "Partial pointers", - "Partial depth", - "Reget", - "Gust", - "No logz", - "Automatic skip draw" -}; - -struct hacks -{ - bool enabled; - char shortDesc[64]; - char longDesc[256]; -}; - -hacks hack_list[32] = -{ - { true, "No hack", "No hack" }, - { true, "Texture targs", "Tex Target checking - 00000001\nLego Racers" }, - { true, "Auto reset", "Auto reset targs - 00000002\nUse when game is slow and toggling AA fixes it. Samurai Warriors. (Automatically on for Shadow Hearts)" }, - { true, "Interlace 2x", "Interlace 2X - 00000004\nFixes 2x bigger screen. Gradius 3." }, - { false, "Texa", "" }, - { true, "No target resolve", "No target resolves - 00000010\nStops all resolving of targets. Try this first for really slow games. (Automatically on for Dark Cloud 1.)" }, - { true, "Exact color", "Exact color testing - 00000020\nFixes overbright or shadow/black artifacts. Crash 'n Burn." }, - { false, "No color clamp", "No color clamping - 00000040\nSpeeds up games, but might be too bright or too dim." }, - { false, "Final Fantasy X", "" }, - { false, "No alpha fail", "Alpha Fail hack - 00000100\nRemove vertical stripes or other coloring artifacts. Breaks Persona 4 and MGS3. (Automatically on for Sonic Unleashed, Shadow the Hedgehog, & Ghost in the Shell.)" }, - { true, "No depth update", "Disable depth updates - 00000200" }, - { true, "Quick resolve 1", "Resolve Hack #1 - 00000400\n Speeds some games. Kingdom Hearts."}, - { true, "No Quick resolve", "Resolve Hack #2 - 00000800\nShadow Hearts, Urbz. Destroys FFX."}, - { true, "No target clut", "No target CLUT - 00001000\nResident Evil 4, or foggy scenes." }, - { true, "No stencil", "Disable stencil buffer - 00002000\nUsually safe to do for simple scenes. Harvest Moon." }, - { false, "VSS", "" }, - { true, "No depth resolve", "No depth resolve - 00008000\nMight give z buffer artifacts." }, - { true, "Full 16 bit resolution", "Full 16 bit resolution - 00010000\nUse when half the screen is missing." }, - { true, "Resolve promoted", "Resolve Hack #3 - 00020000\nNeopets" }, - { true, "Fast update", "Fast Update - 00040000\n Speeds some games. Needed for Sonic Unleashed. Okami." }, - { true, "No alpha test", "Disable alpha testing - 00080000" }, - { true, "Disable mrt depth", "Enable Multiple RTs - 00100000" }, - { false, "Args 32 bit", "" }, - { false, "Path3", "" }, - { false, "Parallel context", "" }, - { true, "Xenosaga spec", "Specular Highlights - 01000000\nMakes graphics faster by removing highlights. (Automatically on for Xenosaga, Okami, & Okage.)" }, - { false, "Partial pointers", "Partial targets - 02000000" }, - { true, "Partial depth", "Partial depth - 04000000" }, - { false, "Reget", "" }, - { true, "Gust", "Gust fix - 10000000. Makes gust games cleaner and faster. (Automatically on for most Gust games)" }, - { true, "No logz", "No logarithmic Z - 20000000. Could decrease number of Z-artifacts." }, - { true, "Automatic skip draw", "Remove blur effect on some games\nSlow games." } -}; - -void ReportHacks(gameHacks hacks) -{ - for(int i = 0; i < 32; i++) - { - if (hacks._u32 & (1 << i)) - { - ZZLog::WriteLn("'%s' hack enabled.", hackDesc[i+1]); - } - } -} - -void ListHacks() -{ - if ((!conf.disableHacks) && (conf.def_hacks._u32 != 0)) - { - ZZLog::WriteLn("Auto-enabling these hacks:"); - ReportHacks(conf.def_hacks); - } - - if (conf.hacks._u32 != 0) - { - ZZLog::WriteLn("You've manually enabled these hacks:"); - ReportHacks(conf.hacks); - } -} - -void DisplayHack(int hack) -{ - ZZLog::WriteToScreen2("***%d %s", hack, hackDesc[hackList[hack]]); -} - -void ChangeCurrentHack(int hack) -{ - FUNCLOG - - conf.hacks._u32 &= !(hackList[CurrentHack]); - conf.hacks._u32 |= hackList[hack]; - - DisplayHack(hack); - - CurrentHack = hack; - SaveConfig(); - -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZHacks.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZHacks.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZHacks.h 2012-04-12 06:30:35.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZHacks.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZHACKS_H_INCLUDED -#define ZZHACKS_H_INCLUDED - -#include "PS2Edefs.h" - -// This is a list of the various hacks, and what bit controls them. -// Changing these is not advised unless you know what you are doing. -enum GAME_HACK_OPTIONS -{ - GAME_TEXTURETARGS = 0x00000001, - GAME_AUTORESET = 0x00000002, - GAME_INTERLACE2X = 0x00000004, - GAME_TEXAHACK = 0x00000008, // apply texa to non textured polys - GAME_NOTARGETRESOLVE = 0x00000010, - GAME_EXACTCOLOR = 0x00000020, - GAME_NOCOLORCLAMP = 0x00000040, - GAME_FFXHACK = 0x00000080, - GAME_NOALPHAFAIL = 0x00000100, - GAME_NODEPTHUPDATE = 0x00000200, - GAME_QUICKRESOLVE1 = 0x00000400, - GAME_NOQUICKRESOLVE = 0x00000800, - GAME_NOTARGETCLUT = 0x00001000, // full 16 bit resolution - GAME_NOSTENCIL = 0x00002000, - GAME_VSSHACKOFF = 0x00004000, // vertical stripe syndrome - GAME_NODEPTHRESOLVE = 0x00008000, - GAME_FULL16BITRES = 0x00010000, - GAME_RESOLVEPROMOTED = 0x00020000, - GAME_FASTUPDATE = 0x00040000, - GAME_NOALPHATEST = 0x00080000, - GAME_DISABLEMRTDEPTH = 0x00100000, - GAME_32BITTARGS = 0x00200000, - GAME_PATH3HACK = 0x00400000, - GAME_DOPARALLELCTX = 0x00800000, // tries to parallelize both contexts so that render calls are reduced (xenosaga) - // makes the game faster, but can be buggy - GAME_XENOSPECHACK = 0x01000000, // xenosaga specularity hack (ignore any zmask=1 draws) - GAME_PARTIALPOINTERS = 0x02000000, // whenver the texture or render target are small, tries to look for bigger ones to read from - GAME_PARTIALDEPTH = 0x04000000, // tries to save depth targets as much as possible across height changes - GAME_REGETHACK = 0x08000000, // some sort of weirdness in ReGet() code - GAME_GUSTHACK = 0x10000000, // Needed for Gustgames fast update. - GAME_NOLOGZ = 0x20000000, // Intended for linux -- not logarithmic Z. - GAME_AUTOSKIPDRAW = 0x40000000, // Remove blur effect on some games - GAME_RESERVED_HACK = 0x80000000 -}; - -#define USEALPHATESTING (!(conf.settings().no_alpha_test)) - -typedef union -{ - struct - { - u32 texture_targs : 1; - u32 auto_reset : 1; - u32 interlace_2x : 1; - u32 texa : 1; // apply texa to non textured polys - u32 no_target_resolve : 1; - u32 exact_color : 1; - u32 no_color_clamp : 1; - u32 ffx : 1; - u32 no_alpha_fail : 1; - u32 no_depth_update : 1; - u32 quick_resolve_1 : 1; - u32 no_quick_resolve : 1; - u32 no_target_clut : 1; // full 16 bit resolution - u32 no_stencil : 1; - u32 vss_hack_off : 1; // vertical stripe syndrome - u32 no_depth_resolve : 1; - u32 full_16_bit_res : 1; - u32 resolve_promoted : 1; - u32 fast_update : 1; - u32 no_alpha_test : 1; - u32 disable_mrt_depth : 1; - u32 args_32_bit : 1; - u32 path3 : 1; - u32 parallel_context : 1; // tries to parallelize both contexts so that render calls are reduced (xenosaga) - // makes the game faster, but can be buggy - u32 xenosaga_spec : 1; // xenosaga specularity hack (ignore any zmask=1 draws) - u32 partial_pointers : 1; // whenver the texture or render target are small, tries to look for bigger ones to read from - u32 partial_depth : 1; // tries to save depth targets as much as possible across height changes - u32 reget : 1; // some sort of weirdness in ReGet() code - u32 gust : 1; // Needed for Gustgames fast update. - u32 no_logz : 1; // Intended for linux -- not logarithmic Z. - u32 automatic_skip_draw :1; // allow debug of the automatic skip draw option - u32 reserved2 :1; - }; - u32 _u32; -} gameHacks; - -#define HACK_NUMBER 25 -extern u32 hackList[HACK_NUMBER]; -extern char hackDesc[32][64]; -extern int CurrentHack; - -extern void ReportHacks(gameHacks hacks); -extern void ListHacks(); - -extern void DisplayHack(int hack); -extern void ChangeCurrentHack(int hack); - -#endif // ZZHACKS_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZKeyboard.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZKeyboard.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZKeyboard.cpp 2012-04-07 21:23:01.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZKeyboard.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,247 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// keyboard functions - -#include "Util.h" -#include "GS.h" -#include "ZZoglShaders.h" -#include "Profile.h" -#include "GLWin.h" - -extern int CurrentSavestate, g_GSMultiThreaded, g_nPixelShaderVer; -extern char *libraryName; -extern const unsigned char zgsversion; -extern unsigned char zgsrevision, zgsbuild, zgsminor; - -extern bool SaveStateExists; - -const char* s_aa[5] = { "AA none |", "AA 2x |", "AA 4x |", "AA 8x |", "AA 16x |" }; -const char* pbilinear[] = { "off", "normal", "forced" }; - -extern void SetAA(int mode); - -extern bool dump_enable; - -void ProcessBilinear() -{ - FUNCLOG - char strtitle[256]; - - if (g_nPixelShaderVer == SHADER_REDUCED) - { - conf.bilinear = 0; - sprintf(strtitle, "reduced shaders don't support bilinear filtering"); - } - else - { - conf.bilinear = (conf.bilinear + 1) % 3; - sprintf(strtitle, "bilinear filtering - %s", pbilinear[conf.bilinear]); - } - ZZLog::WriteToScreen(strtitle); - SaveConfig(); -} - -void ProcessInterlace() -{ - FUNCLOG - - char strtitle[256]; - conf.interlace++; - - if (conf.interlace > 2) conf.interlace = 0; - - if (conf.interlace < 2) - sprintf(strtitle, "interlace on - mode %d", conf.interlace); - else - sprintf(strtitle, "interlace off"); - - ZZLog::WriteToScreen(strtitle); - SaveConfig(); -} - -void ProcessAASetting(bool reverse) -{ - FUNCLOG - - char strtitle[256]; - - if (reverse) - conf.decAA(); - else - conf.incAA(); - - sprintf(strtitle, "anti-aliasing - %s", s_aa[conf.aa]); - SetAA(conf.aa); - ZZLog::WriteToScreen(strtitle); - - SaveConfig(); -} - -void ProcessFPS() -{ - FUNCLOG - g_bDisplayFPS ^= 1; - ZZLog::Debug_Log("Toggled FPS."); -} - -void ProcessWireFrame() -{ - FUNCLOG - char strtitle[256]; - - conf.zz_options.wireframe = !conf.zz_options.wireframe; - glPolygonMode(GL_FRONT_AND_BACK, (conf.wireframe()) ? GL_LINE : GL_FILL); - sprintf(strtitle, "wireframe rendering - %s", (conf.wireframe()) ? "on" : "off"); - ZZLog::WriteToScreen(strtitle); -} - -void ProcessFrameDump() -{ - FUNCLOG - - conf.dump = 1; - - char strtitle[256]; - sprintf(strtitle, "GS dump-frame"); - - ZZLog::WriteToScreen(strtitle); - SaveConfig(); -} - -void ProcessVideoDump() -{ - FUNCLOG - - char strtitle[256]; - - if (conf.dump != 0) { - sprintf(strtitle, "Stop GS dump-video"); - conf.dump = 0; - } else { - sprintf(strtitle, "Start GS dump-video"); - conf.dump = 3; - } - - ZZLog::WriteToScreen(strtitle); - SaveConfig(); -} - -void ProcessHackSetting(bool reverse) -{ - FUNCLOG - - int hack = CurrentHack; - - if (reverse) - { - hack--; - - if (hack < 0) hack = HACK_NUMBER - 1; - } - else - { - hack++; - - if (hack >= HACK_NUMBER) hack = 0; - } - ChangeCurrentHack(hack); - - SaveConfig(); -} - -void ProcessSaveState() -{ - FUNCLOG - char strtitle[256]; - sprintf(strtitle, "Saving in savestate %d", CurrentSavestate); - SaveStateExists = true; - if (CurrentHack != 0) DisplayHack(CurrentHack); -} - -void OnFKey(int key, int shift) -{ - switch(key) - { - //case 1: - // ProcessSaveState(); - // break; - case 5: - if (shift) - ProcessBilinear(); - else - ProcessInterlace(); - break; - case 6: - if (shift) - ProcessAASetting(true); - else - ProcessAASetting(false); - break; - case 7: - if (!shift) - ProcessFPS(); - else - ProcessWireFrame(); - break; - case 9: -#ifdef _DEBUG - // Fn keys are a bit overload... I don't have a better idea --Gregory - if (shift) - ProcessVideoDump(); - else - ProcessFrameDump(); -#else - if (shift) - ProcessHackSetting(true); - else - ProcessHackSetting(false); - break; -#endif - default: - break; - } -} - -void WriteAA() -{ - if (conf.aa != 0) - { - char strtitle[64]; - sprintf(strtitle, "anti-aliasing - %s", s_aa[conf.aa]); - ZZLog::WriteToScreen(strtitle, 1000); - } -} - -void WriteBilinear() -{ - switch (conf.bilinear) - { - case 2: - ZZLog::WriteToScreen("bilinear filtering - forced", 1000); - break; - - case 1: - ZZLog::WriteToScreen("bilinear filtering - normal", 1000); - break; - - default: - break; - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZLog.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZLog.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZLog.cpp 2014-01-26 18:00:14.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZLog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,439 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include -#include "ZZLog.h" -#include -#include - -extern GSconf conf; - -using namespace std; - -static list listMsgs; -const char* logging_prefix = "ZZOgl-PG"; -void ProcessMessages() -{ - FUNCLOG - - if (listMsgs.size() > 0) - { - int left = 25, top = 15; - list::iterator it = listMsgs.begin(); - - while (it != listMsgs.end()) - { - DrawText(it->str, left + 1, top + 1, 0xff000000); - DrawText(it->str, left, top, 0xffffff30); - top += 15; - - if ((int)(it->dwTimeStamp - timeGetTime()) < 0) - it = listMsgs.erase(it); - else ++it; - } - } -} - -void ZZAddMessage(const char* pstr, u32 ms) -{ - FUNCLOG - listMsgs.push_back(MESSAGE(pstr, timeGetTime() + ms)); - ZZLog::Log("%s\n", pstr); -} - -namespace ZZLog -{ -std::string s_strLogPath("logs"); -FILE *gsLog; -FILE *gsLogGL; // I create a separate file because it could be very verbose - -bool IsLogging() -{ - // gsLog can be null if the config dialog is used prior to Pcsx2 starting an emulation session. - // (GSinit won't have been called then) - return (gsLog != NULL && conf.log); -} - -void Open() -{ - const std::string LogFile(s_strLogPath + "/GSzzogl.log"); - const std::string LogFileGL(s_strLogPath + "/GSzzogl_GL.log"); - - gsLog = fopen(LogFile.c_str(), "w"); - if (gsLog != NULL) - setvbuf(gsLog, NULL, _IONBF, 0); - else - SysMessage("Can't create log file %s\n", LogFile.c_str()); - - gsLogGL = fopen(LogFileGL.c_str(), "w"); - if (gsLogGL != NULL) - setvbuf(gsLogGL, NULL, _IONBF, 0); - else - SysMessage("Can't create log file %s\n", LogFileGL.c_str()); - - -} - -void Close() -{ - if (gsLog != NULL) { - fclose(gsLog); - gsLog = NULL; - } - if (gsLogGL != NULL) { - fclose(gsLogGL); - gsLogGL = NULL; - } -} - -void SetDir(const char* dir) -{ - // Get the path to the log directory. - s_strLogPath = (dir==NULL) ? "logs" : dir; - - // Reload previously open log file - if (gsLog) { - Close(); - Open(); - } -} - -void WriteToScreen(const char* pstr, u32 ms) -{ - ZZAddMessage(pstr, ms); -} - -void WriteToScreen2(const char* fmt, ...) -{ - va_list list; - char tmp[512]; - - va_start(list, fmt); - vsprintf(tmp, fmt, list); - va_end(list); - - ZZAddMessage(tmp, 5000); -} - -void _Message(const char *str) -{ - SysMessage(str); -} - -void _WriteToConsole(const char *str) -{ - fprintf(stderr,"%s: ", logging_prefix); - fprintf(stderr,"%s", str); -} - -void Message(const char *fmt, ...) -{ - va_list list; - char tmp[512]; - - va_start(list, fmt); - vsprintf(tmp, fmt, list); - va_end(list); - - SysMessage(tmp); -} - -void Log(const char *fmt, ...) -{ - va_list list; - - va_start(list, fmt); - - if (IsLogging()) vfprintf(gsLog, fmt, list); - - va_end(list); -} - -void WriteToConsole(const char *fmt, ...) -{ - va_list list; - - va_start(list, fmt); - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - va_end(list); -} - -void Print(const char *fmt, ...) -{ - va_list list; - - va_start(list, fmt); - - if (IsLogging()) vfprintf(gsLog, fmt, list); - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - - va_end(list); -} - - -void WriteLn(const char *fmt, ...) -{ - va_list list; - - va_start(list, fmt); - - if (IsLogging()) vfprintf(gsLog, fmt, list); - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - va_end(list); - fprintf(stderr,"\n"); -} - -void Greg_Log(const char *fmt, ...) -{ -#if defined(WRITE_GREG_LOGS) - va_list list; - char tmp[512]; - - va_start(list, fmt); - - if (IsLogging()) { - fprintf(gsLog, "GRegs: "); - vfprintf(gsLog, fmt, list); - } - //fprintf(stderr,"GRegs: "); - //vfprintf(stderr, fmt, list); - - va_end(list); - - if (IsLogging()) fprintf(gsLog, "\n"); - //fprintf(stderr,"\n"); -#endif -} - -void Prim_Log(const char *fmt, ...) -{ -#if defined(ZEROGS_DEVBUILD) && defined(WRITE_PRIM_LOGS) - va_list list; - char tmp[512]; - - va_start(list, fmt); - - if (conf.log /*& 0x00000010*/) - { - if (IsLogging()) vfprintf(gsLog, fmt, list); - - fprintf(stderr, "%s(PRIM): ", logging_prefix); - vfprintf(stderr, fmt, list); - - vprintf(fmt, list); - } - - va_end(list); - fprintf(stderr,"\n"); - -#endif -} - -void GS_Log(const char *fmt, ...) -{ -#ifdef ZEROGS_DEVBUILD - va_list list; - - va_start(list, fmt); - - if (IsLogging()) - { - vfprintf(gsLog, fmt, list); - fprintf(gsLog, "\n"); - } - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); - - va_end(list); -#endif -} - -void Warn_Log(const char *fmt, ...) -{ -#ifdef ZEROGS_DEVBUILD - va_list list; - - va_start(list, fmt); - - if (IsLogging()) - { - vfprintf(gsLog, fmt, list); - fprintf(gsLog, "\n"); - } - - fprintf(stderr, "%s(Warning): ", logging_prefix); - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); - - va_end(list); -#endif -} - -void Dev_Log(const char *fmt, ...) -{ -#ifdef ZEROGS_DEVBUILD - va_list list; - - va_start(list, fmt); - - if (IsLogging()) - { - vfprintf(gsLog, fmt, list); - fprintf(gsLog, "\n"); - } - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); - - va_end(list); -#endif -} - -void Debug_Log(const char *fmt, ...) -{ -#ifdef _DEBUG - va_list list; - - va_start(list, fmt); - - if (IsLogging()) - { - vfprintf(gsLog, fmt, list); - fprintf(gsLog, "\n"); - } - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); - - va_end(list); -#endif -} - -void Error_Log(const char *fmt, ...) -{ - va_list list; - - va_start(list, fmt); - - if (IsLogging()) - { - vfprintf(gsLog, fmt, list); - fprintf(gsLog, "\n"); - } - - fprintf(stderr, "%s: ", logging_prefix); - vfprintf(stderr, fmt, list); - fprintf(stderr, "\n"); - - va_end(list); -} - -#ifdef _DEBUG -#define LOUD_DEBUGGING -#endif - -#ifdef OGL4_LOG -void Check_GL_Error() -{ -#if defined(ZEROGS_DEVBUILD) || defined(_DEBUG) - unsigned int count = 64; // max. num. of messages that will be read from the log - int bufsize = 2048; - unsigned int* sources = new unsigned int[count]; - unsigned int* types = new unsigned int[count]; - unsigned int* ids = new unsigned int[count]; - unsigned int* severities = new unsigned int[count]; - int* lengths = new int[count]; - char* messageLog = new char[bufsize]; - unsigned int retVal = glGetDebugMessageLogARB(count, bufsize, sources, types, ids, severities, lengths, messageLog); - - if(retVal > 0) - { - unsigned int pos = 0; - for(unsigned int i=0; i 2) assert(0); -} -#else -void Check_GL_Error() {} -void GL_Error_Log(unsigned int source, unsigned int type, unsigned int id, unsigned int severity, const char* message) {} -#endif - -}; diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZLog.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZLog.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZLog.h 2014-08-03 18:11:22.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZLog.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZLOG_H_INCLUDED -#define ZZLOG_H_INCLUDED - -#include "Util.h" -#include - -extern void HandleGLError(); - -//Logging for errors that are called often should have a time counter. -#ifdef __linux__ -static u32 __attribute__((unused)) lasttime = 0; -static u32 __attribute__((unused)) BigTime = 5000; -static bool __attribute__((unused)) SPAM_PASS; -#else -static u32 lasttime = 0; -static u32 BigTime = 5000; -static bool SPAM_PASS; -#endif - -#define ERROR_LOG_SPAM(text) { \ - if( timeGetTime() - lasttime > BigTime ) { \ - ZZLog::Error_Log(text); \ - lasttime = timeGetTime(); \ - } \ -} -// The same macro with one-argument substitution. -#define ERROR_LOG_SPAMA(fmt, value) { \ - if( timeGetTime() - lasttime > BigTime ) { \ - ZZLog::Error_Log(fmt, value); \ - lasttime = timeGetTime(); \ - } \ -} - -#define ERROR_LOG_SPAM_TEST(text) {\ - if( timeGetTime() - lasttime > BigTime ) { \ - ZZLog::Error_Log(text); \ - lasttime = timeGetTime(); \ - SPAM_PASS = true; \ - } \ - else \ - SPAM_PASS = false; \ -} - -#if DEBUG_PROF -#define FILE_IS_IN_CHECK ((strcmp(__FILE__, "targets.cpp") == 0) || (strcmp(__FILE__, "ZZoglFlush.cpp") == 0)) - -#define FUNCLOG {\ - static bool Was_Here = false; \ - static unsigned long int waslasttime = 0; \ - if (!Was_Here && FILE_IS_IN_CHECK) { \ - Was_Here = true;\ - ZZLog::Error_Log("%s:%d %s", __FILE__, __LINE__, __func__); \ - waslasttime = timeGetTime(); \ - } \ - if (FILE_IS_IN_CHECK && (timeGetTime() - waslasttime > BigTime )) { \ - Was_Here = false; \ - } \ -} -#else -#define FUNCLOG -#endif - -//#define WRITE_GREG_LOGS -//#define WRITE_PRIM_LOGS -#if defined(_DEBUG) && !defined(ZEROGS_DEVBUILD) -#define ZEROGS_DEVBUILD -#endif - - -// sends a message to output window if assert fails -#define BMSG(x, str) { if( !(x) ) { ZZLog::Log(str); ZZLog::Log(str); } } -#define BMSG_RETURN(x, str) { if( !(x) ) { ZZLog::Log(str); ZZLog::Log(str); return; } } -#define BMSG_RETURNX(x, str, rtype) { if( !(x) ) { ZZLog::Log(str); ZZLog::Log(str); return (##rtype); } } -#define B(x) { if( !(x) ) { ZZLog::Log(_#x"\n"); ZZLog::Log(#x"\n"); } } -#define B_RETURN(x) { if( !(x) ) { ZZLog::Error_Log("%s:%d: %s", __FILE__, (u32)__LINE__, #x); return; } } -#define B_RETURNX(x, rtype) { if( !(x) ) { ZZLog::Error_Log("%s:%d: %s", __FILE__, (u32)__LINE__, #x); return (##rtype); } } -#define B_G(x, action) { if( !(x) ) { ZZLog::Error_Log("%s:%d: %s", __FILE__, (u32)__LINE__, #x); action; } } - -#ifndef OGL4_LOG - -#define GL_REPORT_ERROR() \ -{ \ - GLenum err = glGetError(); \ - if( err != GL_NO_ERROR ) \ - { \ - ZZLog::Error_Log("%s:%d: gl error %s(0x%x)", __FILE__, (int)__LINE__, error_name(err), err); \ - HandleGLError(); \ - } \ -} - -#ifdef _DEBUG -# define GL_REPORT_ERRORD() \ -{ \ - GLenum err = glGetError(); \ - if( err != GL_NO_ERROR ) \ - { \ - ZZLog::Error_Log("%s:%d: gl error %s (0x%x)", __FILE__, (int)__LINE__, error_name(err), err); \ - /* HandleGLError();*/ \ - } \ -} -#else -# define GL_REPORT_ERRORD() -#endif - -#else -#define GL_REPORT_ERROR() -#define GL_REPORT_ERRORD() -#endif - - -inline const char *error_name(int err) -{ - switch (err) - { - case GL_NO_ERROR: - return "GL_NO_ERROR"; - - case GL_INVALID_ENUM: - return "GL_INVALID_ENUM"; - - case GL_INVALID_VALUE: - return "GL_INVALID_VALUE"; - - case GL_INVALID_OPERATION: - return "GL_INVALID_OPERATION"; - - case GL_STACK_OVERFLOW: - return "GL_STACK_OVERFLOW"; - - case GL_STACK_UNDERFLOW: - return "GL_STACK_UNDERFLOW"; - - case GL_OUT_OF_MEMORY: - return "GL_OUT_OF_MEMORY"; - - case GL_TABLE_TOO_LARGE: - return "GL_TABLE_TOO_LARGE"; - - case GL_INVALID_FRAMEBUFFER_OPERATION: - return "GL_INVALID_FRAMEBUFFER_OPERATION"; - - default: - return "Unknown GL error"; - } -} - -struct MESSAGE -{ - MESSAGE() {} - - MESSAGE(const char* p, u32 dw) { strcpy(str, p); dwTimeStamp = dw; } - - char str[255]; - u32 dwTimeStamp; -}; - -extern void DrawText(const char* pstr, int left, int top, u32 color); -extern void __LogToConsole(const char *fmt, ...); - -extern void ZZAddMessage(const char* pstr, u32 ms = 5000); -extern void StartCapture(); -extern void StopCapture(); - - -namespace ZZLog -{ -extern bool IsLogging(); -void SetDir(const char* dir); -extern void Open(); -extern void Close(); -extern void Message(const char *fmt, ...); -extern void Log(const char *fmt, ...); -void WriteToScreen(const char* pstr, u32 ms = 5000); -void WriteToScreen2(const char* pstr, ...); -extern void WriteToConsole(const char *fmt, ...); -extern void Print(const char *fmt, ...); -extern void WriteLn(const char *fmt, ...); - -extern void Greg_Log(const char *fmt, ...); -extern void Prim_Log(const char *fmt, ...); -extern void GS_Log(const char *fmt, ...); - -extern void Debug_Log(const char *fmt, ...); -extern void Dev_Log(const char *fmt, ...); -extern void Warn_Log(const char *fmt, ...); -extern void Error_Log(const char *fmt, ...); - -extern void Check_GL_Error(); -extern void GL_Error_Log(unsigned int source, unsigned int type, unsigned int id, unsigned int severity, const char* message); - -}; - -#endif // ZZLOG_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZMemoryTargets.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZMemoryTargets.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZMemoryTargets.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZMemoryTargets.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,617 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include -#include - -#include "GS.h" -#include "Mem.h" -#include "targets.h" -#include "ZZClut.h" -#include "Util.h" - -extern int g_TransferredToGPU; - -extern int VALIDATE_THRESH; -extern u32 TEXDESTROY_THRESH; -#define FORCE_TEXDESTROY_THRESH (3) // destroy texture after FORCE_TEXDESTROY_THRESH frames - -void CMemoryTargetMngr::Destroy() -{ - FUNCLOG - listTargets.clear(); - listClearedTargets.clear(); -} - -bool CMemoryTarget::ValidateTex(const tex0Info& tex0, int starttex, int endtex, bool bDeleteBadTex) -{ - FUNCLOG - - if (clearmaxy == 0) return true; - - int checkstarty = max(starttex, clearminy); - int checkendy = min(endtex, clearmaxy); - - if (checkstarty >= checkendy) return true; - - if (validatecount++ > VALIDATE_THRESH) - { - height = 0; - return false; - } - - // lock and compare - assert(ptex != NULL && ptex->memptr != NULL); - - int result = memcmp_mmx(ptex->memptr + MemorySize(checkstarty-realy), MemoryAddress(checkstarty), MemorySize(checkendy-checkstarty)); - - if (result == 0) - { - clearmaxy = 0; - return true; - } - - if (!bDeleteBadTex) return false; - - // delete clearminy, clearmaxy range (not the checkstarty, checkendy range) - //int newstarty = 0; - if (clearminy <= starty) - { - if (clearmaxy < starty + height) - { - // preserve end - height = starty + height - clearmaxy; - starty = clearmaxy; - assert(height > 0); - } - else - { - // destroy - height = 0; - } - } - else - { - // beginning can be preserved - height = clearminy - starty; - } - - clearmaxy = 0; - - assert((starty >= realy) && ((starty + height) <= (realy + realheight))); - - return false; -} - -#define TARGET_THRESH 0x500 - -extern int g_MaxTexWidth, g_MaxTexHeight; // Maximum height & width of supported texture. - -//#define SORT_TARGETS -inline list::iterator CMemoryTargetMngr::DestroyTargetIter(list::iterator& it) -{ - // find the target and destroy - list::iterator itprev = it; - ++it; - listClearedTargets.splice(listClearedTargets.end(), listTargets, itprev); - - if (listClearedTargets.size() > TEXDESTROY_THRESH) - { - listClearedTargets.pop_front(); - } - - return it; -} - -// Compare target to current texture info -// Not same format -> 1 -// Same format, not same data (clut only) -> 2 -// identical -> 0 -int CMemoryTargetMngr::CompareTarget(list::iterator& it, const tex0Info& tex0, int clutsize) -{ - if (PSMT_ISCLUT(it->psm) != PSMT_ISCLUT(tex0.psm)) - return 1; - - if (PSMT_ISCLUT(tex0.psm)) { - if (it->psm != tex0.psm || it->cpsm != tex0.cpsm || it->clutsize != clutsize) - return 1; - - if (PSMT_IS32BIT(tex0.cpsm)) { - if (Cmp_ClutBuffer_SavedClut((u32*)&it->clut[0], tex0.csa, clutsize)) - return 2; - } else { - if (Cmp_ClutBuffer_SavedClut((u16*)&it->clut[0], tex0.csa, clutsize)) - return 2; - } - - } else { - if (PSMT_IS16BIT(tex0.psm) != PSMT_IS16BIT(it->psm)) - return 1; - } - - return 0; -} - -void CMemoryTargetMngr::GetClutVariables(int& clutsize, const tex0Info& tex0) -{ - clutsize = 0; - - if (PSMT_ISCLUT(tex0.psm)) - { - int entries = PSMT_IS8CLUT(tex0.psm) ? 256 : 16; - - if (PSMT_IS32BIT(tex0.cpsm)) - clutsize = min(entries, 256 - tex0.csa * 16) * 4; - else - clutsize = min(entries, 512 - tex0.csa * 16) * 2; - } -} - -void CMemoryTargetMngr::GetMemAddress(int& start, int& end, const tex0Info& tex0) -{ - int nbStart, nbEnd; - GetRectMemAddressZero(nbStart, nbEnd, tex0.psm, tex0.tw, tex0.th, tex0.tbp0, tex0.tbw); - assert(nbStart < nbEnd); - nbEnd = min(nbEnd, MEMORY_END); - - start = nbStart / (4 * GPU_TEXWIDTH); - end = (nbEnd + GPU_TEXWIDTH * 4 - 1) / (4 * GPU_TEXWIDTH); - assert(start < end); - -} - -CMemoryTarget* CMemoryTargetMngr::SearchExistTarget(int start, int end, int clutsize, const tex0Info& tex0, int forcevalidate) -{ - for (list::iterator it = listTargets.begin(); it != listTargets.end();) - { - - if (it->starty <= start && it->starty + it->height >= end) - { - - int res = CompareTarget(it, tex0, clutsize); - - if (res == 1) - { - if (it->validatecount++ > VALIDATE_THRESH) - { - it = DestroyTargetIter(it); - - if (listTargets.size() == 0) break; - } - else - ++it; - - continue; - } - else if (res == 2) - { - ++it; - continue; - } - - if (forcevalidate) //&& listTargets.size() < TARGET_THRESH ) { - { - // do more validation checking. delete if not been used for a while - - if (!it->ValidateTex(tex0, start, end, curstamp > it->usedstamp + FORCE_TEXDESTROY_THRESH)) - { - - if (it->height <= 0) - { - it = DestroyTargetIter(it); - - if (listTargets.size() == 0) break; - } - else - ++it; - - continue; - } - } - - it->usedstamp = curstamp; - - it->validatecount = 0; - - return &(*it); - } - -#ifdef SORT_TARGETS - else if (it->starty >= end) break; - -#endif - - ++it; - } - - return NULL; -} - -CMemoryTarget* CMemoryTargetMngr::ClearedTargetsSearch(u32 fmt, int widthmult, int channels, int height) -{ - CMemoryTarget* targ = NULL; - - if (listClearedTargets.size() > 0) - { - list::iterator itbest = listClearedTargets.begin(); - - while (itbest != listClearedTargets.end()) - { - if ((height == itbest->realheight) && (itbest->fmt == fmt) && (itbest->widthmult == widthmult) && (itbest->channels == channels)) - { - // check channels - if (PIXELS_PER_WORD(itbest->psm) == channels) break; - } - - ++itbest; - } - - if (itbest != listClearedTargets.end()) - { - listTargets.splice(listTargets.end(), listClearedTargets, itbest); - targ = &listTargets.back(); - targ->validatecount = 0; - } - else - { - // create a new - listTargets.push_back(CMemoryTarget()); - targ = &listTargets.back(); - } - } - else - { - listTargets.push_back(CMemoryTarget()); - targ = &listTargets.back(); - } - - return targ; -} - -CMemoryTarget* CMemoryTargetMngr::GetMemoryTarget(const tex0Info& tex0, int forcevalidate) -{ - FUNCLOG - int start, end, clutsize; - - GetClutVariables(clutsize, tex0); - GetMemAddress(start, end, tex0); - - CMemoryTarget* it = SearchExistTarget(start, end, clutsize, tex0, forcevalidate); - - if (it != NULL) return it; - - // couldn't find so create - CMemoryTarget* targ; - - u32 fmt; - u32 internal_fmt; - if (PSMT_ISHALF_STORAGE(tex0)) { - // RGBA_5551 storage format - fmt = GL_UNSIGNED_SHORT_1_5_5_5_REV; - internal_fmt = GL_RGB5_A1; - } else { - // RGBA_8888 storage format - fmt = GL_UNSIGNED_BYTE; - internal_fmt = GL_RGBA; - } - - int widthmult = 1, channels = 1; - - // If our texture is too big and could not be placed in 1 GPU texture. Pretty rare in modern cards. - if ((g_MaxTexHeight < 4096) && (end - start > g_MaxTexHeight)) - { - // In this rare case we made a texture of half height and place it on the screen. - ZZLog::Debug_Log("Making a half height texture (start - end == 0x%x)", (end-start)); - widthmult = 2; - } - - channels = PIXELS_PER_WORD(tex0.psm); - - targ = ClearedTargetsSearch(fmt, widthmult, channels, end - start); - - if (targ->ptex != NULL) - { - assert(end - start <= targ->realheight && targ->fmt == fmt && targ->widthmult == widthmult); - - // good enough, so init - targ->realy = targ->starty = start; - targ->usedstamp = curstamp; - targ->psm = tex0.psm; - targ->cpsm = tex0.cpsm; - targ->height = end - start; - } else { - // not initialized yet - targ->fmt = fmt; - targ->realy = targ->starty = start; - targ->realheight = targ->height = end - start; - targ->usedstamp = curstamp; - targ->psm = tex0.psm; - targ->cpsm = tex0.cpsm; - targ->widthmult = widthmult; - targ->channels = channels; - targ->texH = (targ->realheight + widthmult - 1)/widthmult; - targ->texW = GPU_TEXWIDTH * widthmult * channels; - - // alloc the mem - targ->ptex = new CMemoryTarget::TEXTURE(); - targ->ptex->ref = 1; - } - -#if defined(ZEROGS_DEVBUILD) - g_TransferredToGPU += MemorySize(channels * targ->height); -#endif - - // fill with data - if (targ->ptex->memptr == NULL) - { - targ->ptex->memptr = (u8*)_aligned_malloc(MemorySize(targ->realheight), 16); - assert(targ->ptex->ref > 0); - } - - memcpy(targ->ptex->memptr, MemoryAddress(targ->realy), MemorySize(targ->height)); - - __aligned16 u8* ptexdata = NULL; - bool has_data = false; - - if (PSMT_ISCLUT(tex0.psm)) - { - assert(clutsize > 0); - - // Local clut parameter - targ->cpsm = tex0.cpsm; - - // Allocate a local clut array - targ->clutsize = clutsize; - if(targ->clut == NULL) - targ->clut = (u8*)_aligned_malloc(clutsize, 16); - else { - // In case it could occured - // realloc would be better but you need to get it from libutilies first - // _aligned_realloc is brought in from ScopedAlloc.h now. --arcum42 - _aligned_free(targ->clut); - targ->clut = (u8*)_aligned_malloc(clutsize, 16); - } - - // texture parameter - ptexdata = (u8*)_aligned_malloc(CLUT_PIXEL_SIZE(tex0.cpsm) * targ->texH * targ->texW, 16); - has_data = true; - - u8* psrc = (u8*)(MemoryAddress(targ->realy)); - - // Fill a local clut then build the real texture - if (PSMT_IS32BIT(tex0.cpsm)) - { - ClutBuffer_to_Array((u32*)targ->clut, tex0.csa, clutsize); - Build_Clut_Texture(tex0.psm, targ->height, (u32*)targ->clut, psrc, (u32*)ptexdata); - } - else - { - ClutBuffer_to_Array((u16*)targ->clut, tex0.csa, clutsize); - Build_Clut_Texture(tex0.psm, targ->height, (u16*)targ->clut, psrc, (u16*)ptexdata); - } - - assert(targ->clutsize > 0); - } - else if (tex0.psm == PSMT16Z || tex0.psm == PSMT16SZ) - { - ptexdata = (u8*)_aligned_malloc(4 * targ->texH * targ->texW, 16); - has_data = true; - - // needs to be 8 bit, use xmm for unpacking - u16* dst = (u16*)ptexdata; - u16* src = (u16*)(MemoryAddress(targ->realy)); - -#ifdef ZEROGS_SSE2 - assert(((u32)(uptr)dst) % 16 == 0); - - __m128i zero_128 = _mm_setzero_si128(); - // NOTE: future performance improvement - // SSE4.1 support uncacheable load 128bits. Maybe it can - // avoid some cache pollution - // NOTE2: I create multiple _n variable to mimic the previous ASM behavior - // but I'm not sure there are real gains. - for (int i = targ->height * GPU_TEXWIDTH/16 ; i > 0 ; --i) - { - // Convert 16 bits pixels to 32bits (zero extended) - // Batch 64 bytes (32 pixels) at once. - __m128i pixels_1 = _mm_load_si128((__m128i*)src); - __m128i pixels_2 = _mm_load_si128((__m128i*)(src+8)); - __m128i pixels_3 = _mm_load_si128((__m128i*)(src+16)); - __m128i pixels_4 = _mm_load_si128((__m128i*)(src+24)); - - __m128i pix_low_1 = _mm_unpacklo_epi16(pixels_1, zero_128); - __m128i pix_high_1 = _mm_unpackhi_epi16(pixels_1, zero_128); - __m128i pix_low_2 = _mm_unpacklo_epi16(pixels_2, zero_128); - __m128i pix_high_2 = _mm_unpackhi_epi16(pixels_2, zero_128); - - // Note: bypass cache - _mm_stream_si128((__m128i*)dst, pix_low_1); - _mm_stream_si128((__m128i*)(dst+8), pix_high_1); - _mm_stream_si128((__m128i*)(dst+16), pix_low_2); - _mm_stream_si128((__m128i*)(dst+24), pix_high_2); - - __m128i pix_low_3 = _mm_unpacklo_epi16(pixels_3, zero_128); - __m128i pix_high_3 = _mm_unpackhi_epi16(pixels_3, zero_128); - __m128i pix_low_4 = _mm_unpacklo_epi16(pixels_4, zero_128); - __m128i pix_high_4 = _mm_unpackhi_epi16(pixels_4, zero_128); - - // Note: bypass cache - _mm_stream_si128((__m128i*)(dst+32), pix_low_3); - _mm_stream_si128((__m128i*)(dst+40), pix_high_3); - _mm_stream_si128((__m128i*)(dst+48), pix_low_4); - _mm_stream_si128((__m128i*)(dst+56), pix_high_4); - - src += 32; - dst += 64; - } - // It is advise to use a fence instruction after non temporal move (mm_stream) instruction... - // store fence insures that previous store are finish before execute new one. - _mm_sfence(); -#else // ZEROGS_SSE2 - - for (int i = 0; i < targ->height; ++i) - { - for (int j = 0; j < GPU_TEXWIDTH; ++j) - { - dst[0] = src[0]; - dst[1] = 0; - dst[2] = src[1]; - dst[3] = 0; - dst += 4; - src += 2; - } - } - -#endif // ZEROGS_SSE2 - } - else - { - ptexdata = targ->ptex->memptr; - // We really don't want to deallocate memptr. As a reminder... - has_data = false; - } - - // create the texture - GL_REPORT_ERRORD(); - - assert(ptexdata != NULL); - - if (targ->ptex->tex == 0) glGenTextures(1, &targ->ptex->tex); - - glBindTexture(GL_TEXTURE_RECTANGLE_NV, targ->ptex->tex); - - TextureRect(internal_fmt, targ->texW, targ->texH, GL_RGBA, fmt, ptexdata); - - while (glGetError() != GL_NO_ERROR) - { - // release resources until can create - if (listClearedTargets.size() > 0) - { - listClearedTargets.pop_front(); - } - else - { - if (listTargets.size() == 0) - { - ZZLog::Error_Log("Failed to create %dx%x texture.", targ->texW, targ->texH); - channels = 1; - if (has_data) _aligned_free(ptexdata); - return NULL; - } - - DestroyOldest(); - } - - TextureRect(internal_fmt, targ->texW, targ->texH, GL_RGBA, fmt, ptexdata); - } - - setRectWrap(GL_CLAMP); - if (has_data) _aligned_free(ptexdata); - - assert(tex0.psm != 0xd); - - return targ; -} - -void CMemoryTargetMngr::ClearRange(int nbStartY, int nbEndY) -{ - FUNCLOG - int starty = nbStartY / (4 * GPU_TEXWIDTH); - int endy = (nbEndY + 4 * GPU_TEXWIDTH - 1) / (4 * GPU_TEXWIDTH); - - for (list::iterator it = listTargets.begin(); it != listTargets.end();) - { - - if (it->starty < endy && (it->starty + it->height) > starty) - { - - // intersects, reduce valid texture mem (or totally delete texture) - // there are 4 cases - int miny = max(it->starty, starty); - int maxy = min(it->starty + it->height, endy); - assert(miny < maxy); - - if (it->clearmaxy == 0) - { - it->clearminy = miny; - it->clearmaxy = maxy; - } - else - { - if (it->clearminy > miny) it->clearminy = miny; - if (it->clearmaxy < maxy) it->clearmaxy = maxy; - } - } - - ++it; - } -} - -void CMemoryTargetMngr::DestroyCleared() -{ - FUNCLOG - - for (list::iterator it = listClearedTargets.begin(); it != listClearedTargets.end();) - { - if (it->usedstamp < curstamp - (FORCE_TEXDESTROY_THRESH -1)) - { - it = listClearedTargets.erase(it); - continue; - } - - ++it; - } - - if ((curstamp % FORCE_TEXDESTROY_THRESH) == 0) - { - // purge old targets every FORCE_TEXDESTROY_THRESH frames - for (list::iterator it = listTargets.begin(); it != listTargets.end();) - { - if (it->usedstamp < curstamp - FORCE_TEXDESTROY_THRESH) - { - it = listTargets.erase(it); - continue; - } - - ++it; - } - } - - ++curstamp; -} - -void CMemoryTargetMngr::DestroyOldest() -{ - FUNCLOG - - if (listTargets.size() == 0) - return; - - list::iterator it, itbest; - - it = itbest = listTargets.begin(); - - while (it != listTargets.end()) - { - if (it->usedstamp < itbest->usedstamp) itbest = it; - ++it; - } - - listTargets.erase(itbest); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCreate.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCreate.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCreate.cpp 2014-07-31 22:50:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCreate.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,846 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Create and Destroy function. They would be called once per session. - -//------------------ Includes -#include "GS.h" -#include "Mem.h" -#include "GLWin.h" -#include "ZZoglShaders.h" - -#include "targets.h" -#include "rasterfont.h" // simple font -#include "ZZoglDrawing.h" -#include "ZZoglVB.h" - -// This include for windows resource file with Shaders -#ifdef _WIN32 -# include "Win32.h" -#endif - -// ----------------- Types -map mapGLExtensions; - -extern bool ZZshLoadExtraEffects(); - -GLuint vboRect = 0; -GLuint g_vboBuffers[VB_NUMBUFFERS]; // VBOs for all drawing commands -u32 g_nCurVBOIndex = 0; - -inline bool CreateImportantCheck(); -inline void CreateOtherCheck(); -inline bool CreateOpenShadersFile(); - -void ZZGSStateReset(); - -//------------------ Dummies -#ifdef _WIN32 -void __stdcall glBlendFuncSeparateDummy(GLenum e1, GLenum e2, GLenum e3, GLenum e4) -#else -void APIENTRY glBlendFuncSeparateDummy(GLenum e1, GLenum e2, GLenum e3, GLenum e4) -#endif -{ - glBlendFunc(e1, e2); -} - -#ifdef _WIN32 -void __stdcall glBlendEquationSeparateDummy(GLenum e1, GLenum e2) -#else -void APIENTRY glBlendEquationSeparateDummy(GLenum e1, GLenum e2) -#endif -{ - glBlendEquation(e1); -} - -#ifdef _WIN32 -extern HINSTANCE hInst; -void (__stdcall *zgsBlendEquationSeparateEXT)(GLenum, GLenum) = NULL; -void (__stdcall *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum) = NULL; -#else -void (APIENTRY *zgsBlendEquationSeparateEXT)(GLenum, GLenum) = NULL; -void (APIENTRY *zgsBlendFuncSeparateEXT)(GLenum, GLenum, GLenum, GLenum) = NULL; -#endif - -//------------------ variables -//////////////////////////// -// State parameters - -extern u8* s_lpShaderResources; - -// String's for shader file in developer mode -//#ifdef ZEROGS_DEVBUILD -char EFFECT_NAME[256]; -char EFFECT_DIR[256]; -//#endif - -///////////////////// -// graphics resources -GLenum s_srcrgb, s_dstrgb, s_srcalpha, s_dstalpha; // set by zgsBlendFuncSeparateEXT -u32 s_stencilfunc, s_stencilref, s_stencilmask; -GLenum s_drawbuffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT }; - -u32 ptexLogo = 0; -int nLogoWidth, nLogoHeight; -u32 s_ptexInterlace = 0; // holds interlace fields -static bool vb_buffer_allocated = false; - -//------------------ Global Variables -int GPU_TEXWIDTH = 512; -float g_fiGPU_TEXWIDTH = 1/512.0f; -int g_MaxTexWidth = 4096, g_MaxTexHeight = 4096; - -namespace FB -{ - u32 buf = 0; -}; - -RasterFont* font_p = NULL; -float g_fBlockMult = 1; -//int s_nFullscreen = 0; - -u32 ptexBlocks = 0, ptexConv16to32 = 0; // holds information on block tiling -u32 ptexBilinearBlocks = 0; -u32 ptexConv32to16 = 0; -// int g_nDepthBias = 0; - -extern void Delete_Avi_Capture(); -extern void ZZDestroy(); -extern void SetAA(int mode); - -//------------------ Code - -///< returns true if the the opengl extension is supported -bool IsGLExt(const char* szTargetExtension) -{ - return mapGLExtensions.find(string(szTargetExtension)) != mapGLExtensions.end(); -} - -inline bool check_gl_version(uint32 major, uint32 minor) { - const GLubyte* s; - s = glGetString(GL_VERSION); - if (s == NULL) return false; - ZZLog::Error_Log("Supported Opengl version: %s on GPU: %s. Vendor: %s\n", s, glGetString(GL_RENDERER), glGetString(GL_VENDOR)); - // Could be useful to detect the GPU vendor: - // if ( strcmp((const char*)glGetString(GL_VENDOR), "ATI Technologies Inc.") == 0 ) - - GLuint dot = 0; - while (s[dot] != '\0' && s[dot] != '.') dot++; - if (dot == 0) return false; - - GLuint major_gl = s[dot-1]-'0'; - GLuint minor_gl = s[dot+1]-'0'; - - if ( (major_gl < major) || ( major_gl == major && minor_gl < minor ) ) { - ZZLog::Error_Log("OPENGL %d.%d is not supported\n", major, minor); - return false; - } - - return true; -} - -// Function asks about different OGL extensions, that are required to setup accordingly. Return false if checks failed -inline bool CreateImportantCheck() -{ - bool bSuccess = true; - -#ifndef _WIN32 - int const glew_ok = glewInit(); - - if (glew_ok != GLEW_OK) { - ZZLog::Error_Log("glewInit() is not ok!"); - // Better exit now, any openGL call will segfault. - return false; - } -#endif - - // Require a minimum of openGL2.0 (first version that support hardware shader) - bSuccess &= check_gl_version(2, 0); - - // GL_EXT_framebuffer_object -> GL3.0 - // Opensource driver -> Intel OK. Radeon need EXT_packed_depth_stencil - if (!IsGLExt("GL_EXT_framebuffer_object")) - { - ZZLog::Error_Log("*********\nZZogl: ERROR: Need GL_EXT_framebuffer_object for multiple render targets\nZZogl: *********"); - bSuccess = false; - } - - bSuccess &= ZZshCheckProfilesSupport(); - - return bSuccess; -} - -// This is a check for less important open gl extensions. -inline void CreateOtherCheck() -{ - // GL_EXT_blend_equation_separate -> GL2.0 - // Opensource driver -> Intel OK. Radeon OK. - zgsBlendEquationSeparateEXT = glBlendEquationSeparateEXT; - - // GL_EXT_blend_func_separate -> GL1.4 - // Opensource driver -> Intel OK. Radeon OK. - zgsBlendFuncSeparateEXT = glBlendFuncSeparateEXT; - - // GL_ARB_draw_buffers -> GL2.0 - // Opensource driver -> Intel (need gen4). Radeon OK. - if (glDrawBuffers == NULL) { - ZZLog::Error_Log("*********\nZZogl: OGL ERROR: multiple render targets not supported, some effects might look bad\nZZogl: *********"); - conf.mrtdepth = 0; - } - - GLint Max_Texture_Size_NV = 0; - GLint Max_Texture_Size_2d = 0; - - glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, &Max_Texture_Size_NV); - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &Max_Texture_Size_2d); - - g_MaxTexHeight = min(Max_Texture_Size_2d, Max_Texture_Size_NV); - - ZZLog::Error_Log("Maximum texture size is %d for Tex_2d and %d for Tex_NV.", Max_Texture_Size_2d, Max_Texture_Size_NV); - - if (Max_Texture_Size_NV < 1024) - ZZLog::Error_Log("Could not properly make bitmasks, so some textures will be missed."); - -#ifdef _WIN32 - GLWin.InitVsync(IsGLExt("WGL_EXT_swap_control") || IsGLExt("EXT_swap_control")); -#else - GLWin.InitVsync(IsGLExt("GLX_SGI_swap_control")); -#endif - - GLWin.SetVsync(false); -} - - -#ifdef _WIN32 -__forceinline bool LoadShadersFromRes() -{ - HRSRC hShaderSrc = FindResource(hInst, MAKEINTRESOURCE(IDR_SHADERS), RT_RCDATA); - assert(hShaderSrc != NULL); - HGLOBAL hShaderGlob = LoadResource(hInst, hShaderSrc); - assert(hShaderGlob != NULL); - s_lpShaderResources = (u8*)LockResource(hShaderGlob); - return true; -} -#else - -__forceinline bool LoadShadersFromDat() -{ - FILE* fres = fopen("ps2hw.dat", "rb"); - - if (fres == NULL) - { - fres = fopen("plugins/ps2hw.dat", "rb"); - - if (fres == NULL) - { - // Each linux distributions have his rules for path so we give them the possibility to - // change it with compilation flags. -- Gregory -#ifdef PLUGIN_DIR_COMPILATION -#define xPLUGIN_DIR_str(s) PLUGIN_DIR_str(s) -#define PLUGIN_DIR_str(s) #s - const std::string shader_file = string(xPLUGIN_DIR_str(PLUGIN_DIR_COMPILATION)) + "/ps2hw.dat"; - fres = fopen(shader_file.c_str(), "rb"); -#endif - if (fres == NULL) - { - ZZLog::Error_Log("Cannot find ps2hw.dat in working directory. Exiting."); - return false; - } - } - } - - fseek(fres, 0, SEEK_END); - - size_t s = ftell(fres); - s_lpShaderResources = new u8[s+1]; - fseek(fres, 0, SEEK_SET); - if (fread(s_lpShaderResources, s, 1, fres) == 0) - fprintf(stderr, "Failed to read ps2hw.dat. Corrupted file?\n"); - - s_lpShaderResources[s] = 0; - fclose(fres); - - return true; -} - -#ifdef DEVBUILD -__forceinline bool LoadShadersFromFX() -{ - // test if ps2hw.fx exists - char tempstr[255]; - char curwd[255]; - getcwd(curwd, ArraySize(curwd)); - - strcpy(tempstr, "/plugins/"); - sprintf(EFFECT_NAME, "%sps2hw.fx", tempstr); - FILE* f = fopen(EFFECT_NAME, "r"); - - if (f == NULL) - { - - strcpy(tempstr, "../../plugins/zzogl-pg/opengl/"); - sprintf(EFFECT_NAME, "%sps2hw.fx", tempstr); - f = fopen(EFFECT_NAME, "r"); - - if (f == NULL) - { - ZZLog::Error_Log("Failed to find %s, try compiling a non-devbuild.", EFFECT_NAME); - return false; - } - } - - fclose(f); - - sprintf(EFFECT_DIR, "%s/%s", curwd, tempstr); - sprintf(EFFECT_NAME, "%sps2hw.fx", EFFECT_DIR); - - return true; -} -#endif -#endif - - -// open shader file according to build target - -inline bool CreateOpenShadersFile() -{ -#ifndef DEVBUILD -# ifdef _WIN32 - return LoadShadersFromRes(); -# else // not _WIN32 - return LoadShadersFromDat(); -# endif // _WIN32 -#else // defined(ZEROGS_DEVBUILD) -# ifndef _WIN32 // NOT WINDOWS - return LoadShadersFromFX(); - - // No else clause? -#endif -#endif // !defined(ZEROGS_DEVBUILD) -} - -// Read all extensions name and fill mapGLExtensions -inline bool CreateFillExtensionsMap() -{ - int max_ext = 0; - string all_ext(""); - - PFNGLGETSTRINGIPROC glGetStringi = 0; - glGetStringi = (PFNGLGETSTRINGIPROC)GLWin.GetProcAddress("glGetStringi"); - glGetIntegerv(GL_NUM_EXTENSIONS, &max_ext); - - if (glGetStringi && max_ext) { - // Get opengl extension (opengl3) - for (GLint i = 0; i < max_ext; i++) - { - string extension((const char*)glGetStringi(GL_EXTENSIONS, i)); - mapGLExtensions[extension]; - - all_ext += extension; - if (i != (max_ext - 1)) all_ext += ", "; - } - } else { - // fallback to old method (pre opengl3, intel gma, geforce 7 ...) - ZZLog::Error_Log("glGetStringi opengl 3 interface not supported, fallback to opengl 2"); - - const char* ptoken = (const char*)glGetString(GL_EXTENSIONS); - if (ptoken == NULL) return false; - - all_ext = string(ptoken); // save the string to print a nice debug message - - const char* pend = NULL; - while (ptoken != NULL) - { - pend = strchr(ptoken, ' '); - - if (pend != NULL) - { - max_ext++; - mapGLExtensions[string(ptoken, pend-ptoken)]; - } - else - { - max_ext++; - mapGLExtensions[string(ptoken)]; - break; - } - - ptoken = pend; - while (*ptoken == ' ') ++ptoken; - } - } - - -#ifndef _DEBUG - ZZLog::Log("%d supported OpenGL Extensions: %s\n", max_ext, all_ext.c_str()); -#endif - ZZLog::Debug_Log("%d supported OpenGL Extensions: %s\n", max_ext, all_ext.c_str()); - - return true; -} - -void LoadglFunctions() -{ - // GL_EXT_framebuffer_object - // CORE -> 3.0 and replaced by GL_ARB_framebuffer_object - GL_LOADFN(glIsRenderbufferEXT); - GL_LOADFN(glBindRenderbufferEXT); - GL_LOADFN(glDeleteRenderbuffersEXT); - GL_LOADFN(glGenRenderbuffersEXT); - GL_LOADFN(glRenderbufferStorageEXT); - GL_LOADFN(glGetRenderbufferParameterivEXT); - GL_LOADFN(glIsFramebufferEXT); - GL_LOADFN(glBindFramebufferEXT); - GL_LOADFN(glDeleteFramebuffersEXT); - GL_LOADFN(glGenFramebuffersEXT); - GL_LOADFN(glCheckFramebufferStatusEXT); - GL_LOADFN(glFramebufferTexture1DEXT); - GL_LOADFN(glFramebufferTexture2DEXT); - GL_LOADFN(glFramebufferTexture3DEXT); - GL_LOADFN(glFramebufferRenderbufferEXT); - GL_LOADFN(glGetFramebufferAttachmentParameterivEXT); - - // CORE -> 2.0 - GL_LOADFN(glDrawBuffers); -} - -inline bool TryBlockFormat(GLint fmt, const GLvoid* vBlockData) { - glTexImage2D(GL_TEXTURE_2D, 0, fmt, BLOCK_TEXWIDTH, BLOCK_TEXHEIGHT, 0, GL_ALPHA, GL_FLOAT, vBlockData); - return (glGetError() == GL_NO_ERROR); -} - -inline bool TryBlinearFormat(GLint fmt32, const GLvoid* vBilinearData) { - glTexImage2D(GL_TEXTURE_2D, 0, fmt32, BLOCK_TEXWIDTH, BLOCK_TEXHEIGHT, 0, GL_RGBA, GL_FLOAT, vBilinearData); - return (glGetError() == GL_NO_ERROR); -} - -bool ZZCreate(int _width, int _height) -{ - GLenum err = GL_NO_ERROR; - bool bSuccess = true; - - ZZDestroy(); - ZZGSStateReset(); - - if (!GLWin.DisplayWindow(_width, _height)) return false; - - conf.mrtdepth = 0; // for now - - if (!CreateFillExtensionsMap()) return false; - if (!CreateImportantCheck()) return false; - - CreateOtherCheck(); - - // Incorrect must check rectangle texture too. Now done directly on CreateOtherCheck() - // - // check the max texture width and height - ///glGetIntegerv(GL_MAX_TEXTURE_SIZE, &g_MaxTexWidth); - // Limit the texture size supported to 8192. We do not need bigger texture. - // Besides the following assertion is false when texture are too big. - // ZZoglFlush.cpp:2349: assert(fblockstride >= 1.0f) - //g_MaxTexWidth = min(8192, g_MaxTexWidth); - - g_MaxTexHeight = g_MaxTexWidth / 4; - GPU_TEXWIDTH = min (g_MaxTexWidth/8, 1024); - g_fiGPU_TEXWIDTH = 1.0f / GPU_TEXWIDTH; - -#if !(defined(GLSL_API) || defined(GLSL4_API)) - if (!CreateOpenShadersFile()) return false; -#endif - - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - s_srcrgb = s_dstrgb = s_srcalpha = s_dstalpha = GL_ONE; - - LoadglFunctions(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - FB::Create(); - - GL_REPORT_ERRORD(); - - FB::Bind(); - - DrawBuffers(s_drawbuffers); - - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - font_p = new RasterFont(); - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - // init draw fns - //init_drawfn(); - if (ZZKick != NULL) delete ZZKick; - ZZKick = new Kick; - - SetAA(conf.aa); - - GSsetGameCRC(g_LastCRC, conf.settings()._u32); - - GL_STENCILFUNC(GL_ALWAYS, 0, 0); - - //s_bWriteDepth = true; - - GL_BLEND_ALL(GL_ONE, GL_ONE, GL_ONE, GL_ONE); - glViewport(0, 0, GLWin.backbuffer.w, GLWin.backbuffer.h); // Reset The Current Viewport - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - glShadeModel(GL_SMOOTH); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glClearDepth(1.0f); - - glEnable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - - glDepthFunc(GL_LEQUAL); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations - glGenTextures(1, &ptexLogo); - glBindTexture(GL_TEXTURE_RECTANGLE_NV, ptexLogo); - -#ifdef _WIN32 - HRSRC hBitmapSrc = FindResource(hInst, MAKEINTRESOURCE(IDB_ZEROGSLOGO), RT_BITMAP); - assert(hBitmapSrc != NULL); - - HGLOBAL hBitmapGlob = LoadResource(hInst, hBitmapSrc); - assert(hBitmapGlob != NULL); - - PBITMAPINFO pinfo = (PBITMAPINFO)LockResource(hBitmapGlob); - - GLenum tempFmt = (pinfo->bmiHeader.biBitCount == 32) ? GL_RGBA : GL_RGB; - TextureRect(GL_RGBA, pinfo->bmiHeader.biWidth, pinfo->bmiHeader.biHeight, tempFmt, GL_UNSIGNED_BYTE, (u8*)pinfo + pinfo->bmiHeader.biSize); - - nLogoWidth = pinfo->bmiHeader.biWidth; - nLogoHeight = pinfo->bmiHeader.biHeight; - - setRectFilters(GL_LINEAR); - -#else -#endif - - GL_REPORT_ERROR(); - -#ifdef GLSL4_API - GSInputLayoutOGL vert_format[] = - { - {0 , 4 , GL_SHORT , GL_FALSE , sizeof(VertexGPU) , (const GLvoid*)(0) } , // vertex - {1 , 4 , GL_UNSIGNED_BYTE , GL_TRUE , sizeof(VertexGPU) , (const GLvoid*)(8) } , // color - {2 , 4 , GL_UNSIGNED_BYTE , GL_TRUE , sizeof(VertexGPU) , (const GLvoid*)(12) } , // z value. FIXME WTF 4 unsigned byte, why not a full integer - {3 , 3 , GL_FLOAT , GL_FALSE , sizeof(VertexGPU) , (const GLvoid*)(16) } , // tex coord - }; - - vertex_array = new GSVertexBufferStateOGL(sizeof(VertexGPU), vert_format, 4); -#endif - - g_nCurVBOIndex = 0; - - if (!vb_buffer_allocated) { - glGenBuffers((GLsizei)ArraySize(g_vboBuffers), g_vboBuffers); - for (u32 i = 0; i < ArraySize(g_vboBuffers); ++i) - { - glBindBuffer(GL_ARRAY_BUFFER, g_vboBuffers[i]); - glBufferData(GL_ARRAY_BUFFER, 0x100*sizeof(VertexGPU), NULL, GL_STREAM_DRAW); -#ifdef GLSL4_API - vertex_array->set_internal_format(); -#endif - } - vb_buffer_allocated = true; // mark the buffer allocated - } - - GL_REPORT_ERROR(); - if (err != GL_NO_ERROR) bSuccess = false; - - // create the blocks texture - g_fBlockMult = 1; - -#ifndef ZZNORMAL_MEMORY - FillAlowedPsnTable(); - FillBlockTables(); -#endif - - vector vBlockData, vBilinearData; - BLOCK::FillBlocks(vBlockData, vBilinearData); - - glGenTextures(1, &ptexBlocks); - glBindTexture(GL_TEXTURE_2D, ptexBlocks); - - // Opensource driver -> Intel (need gen4) (enabled by default on mesa 9). Radeon depends on the HW capability -#ifdef GLSL4_API - // texture float -> GL3.0 - glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, BLOCK_TEXWIDTH, BLOCK_TEXHEIGHT, 0, GL_RED, GL_FLOAT, &vBlockData[0]); - if (glGetError() != GL_NO_ERROR) { - ZZLog::Error_Log("ZZogl ERROR: could not fill blocks"); - return false; - } -#else - if (TryBlockFormat(GL_RGBA32F, &vBlockData[0])) - ZZLog::Error_Log("Use GL_RGBA32F for blockdata."); - else if (TryBlockFormat(GL_ALPHA_FLOAT32_ATI, &vBlockData[0])) - ZZLog::Error_Log("Use ATI_texture_float for blockdata."); - else { - ZZLog::Error_Log("ZZogl ERROR: float texture not supported. If you use opensource driver (aka Mesa), you probably need to compile it with texture float support."); - ZZLog::Error_Log("ZZogl ERROR: Otherwise you probably have a very very old GPU, either use an older version of the plugin or upgrade your computer"); - return false; - } -#endif - - setTex2DFilters(GL_NEAREST); - setTex2DWrap(GL_REPEAT); - - // fill in the bilinear blocks (main variant). - glGenTextures(1, &ptexBilinearBlocks); - glBindTexture(GL_TEXTURE_2D, ptexBilinearBlocks); - -#ifdef GLSL4_API - if (!TryBlinearFormat(GL_RGBA32F, &vBilinearData[0])) - ZZLog::Error_Log("Fill bilinear blocks failed."); -#else - if (TryBlinearFormat(GL_RGBA32F, &vBilinearData[0])) - ZZLog::Error_Log("Fill bilinear blocks OK.!"); - else if (TryBlinearFormat(GL_RGBA_FLOAT32_ATI, &vBilinearData[0])) - ZZLog::Error_Log("Fill bilinear blocks with ATI_texture_float."); - else if (TryBlinearFormat(GL_FLOAT_RGBA32_NV, &vBilinearData[0])) - ZZLog::Error_Log("ZZogl Fill bilinear blocks with NVidia_float."); - else - ZZLog::Error_Log("Fill bilinear blocks failed."); -#endif - - setTex2DFilters(GL_NEAREST); - setTex2DWrap(GL_REPEAT); - - float fpri = 1; - - glPrioritizeTextures(1, &ptexBlocks, &fpri); - - if (ptexBilinearBlocks != 0) glPrioritizeTextures(1, &ptexBilinearBlocks, &fpri); - - GL_REPORT_ERROR(); - - // fill a simple rect - glGenBuffers(1, &vboRect); - glBindBuffer(GL_ARRAY_BUFFER, vboRect); -#ifdef GLSL4_API - vertex_array->set_internal_format(); -#endif - - vector verts(4); - - VertexGPU* pvert = &verts[0]; - - pvert->set_xyzst(-0x7fff, 0x7fff, 0, 0, 0); - pvert++; - - pvert->set_xyzst(0x7fff, 0x7fff, 0, 1, 0); - pvert++; - - pvert->set_xyzst(-0x7fff, -0x7fff, 0, 0, 1); - pvert++; - - pvert->set_xyzst(0x7fff, -0x7fff, 0, 1, 1); - pvert++; - - glBufferDataARB(GL_ARRAY_BUFFER, 4*sizeof(VertexGPU), &verts[0], GL_STATIC_DRAW); - -#ifndef GLSL4_API - // setup the default vertex declaration - glEnableClientState(GL_VERTEX_ARRAY); - glClientActiveTexture(GL_TEXTURE0); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glEnableClientState(GL_SECONDARY_COLOR_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - GL_REPORT_ERROR(); -#endif - - // create the conversion textures - glGenTextures(1, &ptexConv16to32); - glBindTexture(GL_TEXTURE_2D, ptexConv16to32); - - vector conv16to32data(256*256); - - for (int i = 0; i < 256*256; ++i) - { - u32 tempcol = RGBA16to32(i); - // have to flip r and b - conv16to32data[i] = (tempcol & 0xff00ff00) | ((tempcol & 0xff) << 16) | ((tempcol & 0xff0000) >> 16); - } - - Texture2D(4, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, &conv16to32data[0]); - - setTex2DFilters(GL_NEAREST); - setTex2DWrap(GL_CLAMP); - - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - vector conv32to16data(32*32*32); - - glGenTextures(1, &ptexConv32to16); - - glBindTexture(GL_TEXTURE_3D, ptexConv32to16); - - u32* dst = &conv32to16data[0]; - - for (int i = 0; i < 32; ++i) - { - for (int j = 0; j < 32; ++j) - { - for (int k = 0; k < 32; ++k) - { - u32 col = (i << 10) | (j << 5) | k; - *dst++ = ((col & 0xff) << 16) | (col & 0xff00); - } - } - } - - Texture3D(4, 32, 32, 32, GL_RGBA, GL_UNSIGNED_BYTE, &conv32to16data[0]); - setTex3DFilters(GL_NEAREST); - setTex3DWrap(GL_CLAMP); - GL_REPORT_ERROR(); - - if (err != GL_NO_ERROR) bSuccess = false; - - if (!ZZshStartUsingShaders()) bSuccess = false; - - GL_REPORT_ERROR(); - - - if (err != GL_NO_ERROR) bSuccess = false; - - glDisable(GL_STENCIL_TEST); - glEnable(GL_SCISSOR_TEST); - - GL_BLEND_ALPHA(GL_ONE, GL_ZERO); - - glBlendColorEXT(0, 0, 0, 0.5f); - - glDisable(GL_CULL_FACE); - - // points - // This was changed in SetAA - should we be changing it back? - glPointSize(1.0f); - - // g_nDepthBias = 0; - - glEnable(GL_POLYGON_OFFSET_FILL); - glEnable(GL_POLYGON_OFFSET_LINE); - - glPolygonOffset(0, 1); - - vb[0].Init(VB_BUFFERSIZE); - vb[1].Init(VB_BUFFERSIZE); - - g_vsprog = g_psprog = sZero; - - if (glGetError() == GL_NO_ERROR) - { - return bSuccess; - } - else - { - ZZLog::Debug_Log("Error In final init!"); - return false; - } -} - -void ZZDestroy() -{ - Delete_Avi_Capture(); - - g_MemTargs.Destroy(); - - s_RTs.Destroy(); - s_DepthRTs.Destroy(); - s_BitwiseTextures.Destroy(); - - SAFE_RELEASE_TEX(s_ptexInterlace); - SAFE_RELEASE_TEX(ptexBlocks); - SAFE_RELEASE_TEX(ptexBilinearBlocks); - SAFE_RELEASE_TEX(ptexConv16to32); - SAFE_RELEASE_TEX(ptexConv32to16); - - vb[0].Destroy(); - vb[1].Destroy(); - - if (vb_buffer_allocated) - { - glDeleteBuffers((GLsizei)ArraySize(g_vboBuffers), g_vboBuffers); - vb_buffer_allocated = false; // mark the buffer unallocated - } - -#ifdef GLSL4_API - if (vertex_array != NULL) { - delete vertex_array; - vertex_array = NULL; - } -#endif - - g_nCurVBOIndex = 0; - - for (u32 i = 0; i < ArraySize(pvs); ++i) - { - SAFE_RELEASE_PROG(pvs[i]); - } - - for (u32 i = 0; i < ArraySize(ppsRegular); ++i) - { - SAFE_RELEASE_PROG(ppsRegular[i].prog); - } - - for (u32 i = 0; i < ArraySize(ppsTexture); ++i) - { - SAFE_RELEASE_PROG(ppsTexture[i].prog); - } - - SAFE_RELEASE_PROG(pvsBitBlt.prog); - - SAFE_RELEASE_PROG(ppsBitBlt[0].prog); - SAFE_RELEASE_PROG(ppsBitBlt[1].prog); - SAFE_RELEASE_PROG(ppsBitBltDepth.prog); - SAFE_RELEASE_PROG(ppsCRTCTarg[0].prog); - SAFE_RELEASE_PROG(ppsCRTCTarg[1].prog); - SAFE_RELEASE_PROG(ppsCRTC[0].prog); - SAFE_RELEASE_PROG(ppsCRTC[1].prog); -// SAFE_RELEASE_PROG(ppsCRTC24[0].prog); -// SAFE_RELEASE_PROG(ppsCRTC24[1].prog); - SAFE_RELEASE_PROG(ppsOne.prog); - - safe_delete(font_p); - - FB::Delete(); - - GLWin.ReleaseContext(); - - mapGLExtensions.clear(); -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCRTC.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCRTC.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCRTC.cpp 2013-07-03 18:42:05.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCRTC.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,921 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Realisation of RenderCRTC function ONLY. -// It draw picture direct on screen, so here we have interlacing and frame skipping. - -//------------------ Includes -#include "Util.h" -#include "ZZoglCRTC.h" -#include "GLWin.h" -#include "ZZoglShaders.h" -#include "ZZoglShoots.h" -#include "ZZoglDrawing.h" -#include "rasterfont.h" // simple font -#include -#include "ZZoglVB.h" - -//------------------ Defines -#if !defined(ZEROGS_DEVBUILD) -#define g_bSaveFrame 0 -#define g_bSaveFinalFrame 0 -#else -bool g_bSaveFrame = 0; // saves the current psurfTarget -bool g_bSaveFinalFrame = 0; // saves the input to the CRTC -#endif // !defined(ZEROGS_DEVBUILD) - -extern int maxmin; -extern bool g_bCRTCBilinear; -bool g_bDisplayFPS = false; -int g_nFrameRender = 10, g_nFramesSkipped = 0, s_nResolved = 0; // s_nResolved == number of targets resolved this frame -// Helper for skip frames. -int TimeLastSkip = 0; - -vector s_vecTempTextures; // temporary textures, released at the end of every frame - -// Snapshot variables. -extern bool g_bMakeSnapshot; -extern string strSnapshot; - -extern void ExtWrite(); -extern void ZZDestroy(); -extern void ChangeDeviceSize(int nNewWidth, int nNewHeight); - -extern GLuint vboRect; - -// I'm making this variable global for the moment in the course of fiddling with the interlace code -// to try and make it more straightforward. -int interlace_mode = 0; // 0 - not interlacing, 1 - interlacing. -bool bUsingStencil = false; - -bool INTERLACE_COUNT() -{ - return (interlace_mode && (gs.interlace == conf.interlace)); -} - -// Adjusts vertex shader BitBltPos vector v to preserve aspect ratio. It used to emulate 4:3 or 16:9. -void AdjustTransToAspect(float4& v) -{ - double temp; - float f; - const float mult = 1 / 32767.0f; - - if (conf.width * GLWin.backbuffer.h > conf.height * GLWin.backbuffer.w) // limited by width - { - // change in ratio - f = ((float)GLWin.backbuffer.w / (float)conf.width) / ((float)GLWin.backbuffer.h / (float)conf.height); - v.y *= f; - v.w *= f; - - // scanlines mess up when not aligned right - v.y += (1 - (float)modf(v.y * (float)GLWin.backbuffer.h * 0.5f + 0.05f, &temp)) * 2.0f / (float)GLWin.backbuffer.h; - v.w += (1 - (float)modf(v.w * (float)GLWin.backbuffer.h * 0.5f + 0.05f, &temp)) * 2.0f / (float)GLWin.backbuffer.h; - } - else // limited by height - { - f = ((float)GLWin.backbuffer.h / (float)conf.height) / ((float)GLWin.backbuffer.w / (float)conf.width); - f -= (float)modf(f * GLWin.backbuffer.w, &temp) / (float)GLWin.backbuffer.w; - v.x *= f; - v.z *= f; - } - - v *= mult; -} - -inline bool FrameSkippingHelper() -{ - bool ShouldSkip = false; - - if (g_nFrameRender > 0) - { - if (g_nFrameRender < 8) - { - g_nFrameRender++; - - if (g_nFrameRender <= 3) - { - g_nFramesSkipped++; - ShouldSkip = true; - } - } - } - else - { - if (g_nFrameRender < -1) - { - g_nFramesSkipped++; - ShouldSkip = true; - } - - g_nFrameRender--; - } - -#if defined _DEBUG - if (timeGetTime() - TimeLastSkip > 15000 && ShouldSkip) - { - ZZLog::Debug_Log("ZZogl Skipped frames."); - TimeLastSkip = timeGetTime(); - } -#endif - - return ShouldSkip; -} - -// helper function for save frame in picture. -inline void FrameSavingHelper() -{ - if (g_bSaveFrame) - { - if (vb[0].prndr != NULL) - { - SaveTexture("frame1.tga", GL_TEXTURE_RECTANGLE_NV, vb[0].prndr->ptex, RW(vb[0].prndr->fbw), RH(vb[0].prndr->fbh)); - } - - if (vb[1].prndr != NULL && vb[0].prndr != vb[1].prndr) - { - SaveTexture("frame2.tga", GL_TEXTURE_RECTANGLE_NV, vb[1].prndr->ptex, RW(vb[1].prndr->fbw), RH(vb[1].prndr->fbh)); - } - -#ifdef _WIN32 - else - { - DeleteFile(L"frame2.tga"); - } -#endif - } -} - -// Function populated tex0Info[2] array -inline void FrameObtainDispinfo(tex0Info* dispinfo) -{ - for (int i = 0; i < 2; ++i) - { - if (!Circuit_Enabled(i)) - { - dispinfo[i].tw = 0; - dispinfo[i].th = 0; - continue; - } - - GSRegDISPFB* pfb = Dispfb_Reg(i); - GSRegDISPLAY* pd = Display_Reg(i); - - int magh = pd->MAGH + 1; - int magv = pd->MAGV + 1; - - dispinfo[i].tbp0 = pfb->FBP << 5; - dispinfo[i].tbw = pfb->FBW << 6; - dispinfo[i].tw = (pd->DW + 1) / magh; - dispinfo[i].th = (pd->DH + 1) / magv; - dispinfo[i].psm = pfb->PSM; - - // hack!! - // 2 * dispinfo[i].tw / dispinfo[i].th <= 1, metal slug 4 - - // Note: This is what causes the double image if interlace is off on the Final Fantasy X-2 opening. - if (interlace_mode && 2 * dispinfo[i].tw / dispinfo[i].th <= 1 && !(conf.settings().interlace_2x)) - { - dispinfo[i].th >>= 1; - } - } -} - -extern bool s_bWriteDepth; - -// Something should be done before Renderering the picture. -inline void RenderStartHelper() -{ - if (conf.mrtdepth && ZZshExistProgram(pvs[8])) - { - conf.mrtdepth = 0; - s_bWriteDepth = false; - - ZZLog::Debug_Log("Disabling MRT depth writing\n"); - } - - FlushBoth(); - - FrameSavingHelper(); - - if (s_RangeMngr.ranges.size() > 0) FlushTransferRanges(NULL); - - SetShaderCaller("RenderStartHelper"); - - // reset fba after every frame - vb[0].fba.fba = 0; - vb[1].fba.fba = 0; - - FB::Unbind(); // switch to the backbuffer - - glViewport(0, 0, GLWin.backbuffer.w, GLWin.backbuffer.h); - - // if interlace, only clear every other vsync - if (!interlace_mode) - { - glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } - - ZZshSetVertexShader(pvsBitBlt.prog); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - SET_STREAM(); - GL_REPORT_ERRORD(); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - DisableAllgl(); - - GL_REPORT_ERRORD(); - - if (interlace_mode) g_PrevBitwiseTexX = -1; // reset since will be using -} - -// Settings for interlace texture multiplied vector; -// The idea is: (x, y) -- position on screen, then interlaced texture get F = 1 or 0 depending -// on image y coords. So if we write valpha.z * F + valpha.w + 0.5, it would be switching odd -// and even strings at each frame. -// valpha.x and y are used for image blending. -inline void RenderGetForClip(int psm, CRTC_TYPE render_type) -{ - SetShaderCaller("RenderGetForClip"); - FRAGMENTSHADER* prog = curr_pps(render_type); - float4 valpha; - // first render the current render targets, then from ptexMem - - if (psm == PSMCT24) - { - valpha.x = 1; - valpha.y = 0; - } - else - { - valpha.x = 0; - valpha.y = 1; - } - - if (interlace_mode) - { - if (gs.interlace == (conf.interlace & 1)) - { - // pass if odd - valpha.z = 1.0f; - valpha.w = -0.4999f; - } - else - { - // pass if even - valpha.z = -1.0f; - valpha.w = 0.5001f; - } - } - else - { - // always pass interlace test - valpha.z = 0; - valpha.w = 1; - } - - ZZshSetParameter4fv(prog->prog, prog->sOneColor, valpha, "g_fOneColor"); -} - -// Put interlaced texture in use for shader prog. -// Note: if the frame is interlaced, its th is halved, so we should multiply it by 2. -inline void RenderCreateInterlaceTex(int th, CRTC_TYPE render_type) -{ - FRAGMENTSHADER* prog; - int interlacetex; - - if (!interlace_mode) return; - - prog = curr_pps(render_type); - interlacetex = CreateInterlaceTex(2 * th); - - ZZshGLSetTextureParameter(prog->prog, prog->sInterlace, interlacetex, "Interlace"); -} - -// Do blending setup prior to second pass of half-frame drawing. -inline void RenderSetupBlending() -{ - // setup right blending - glEnable(GL_BLEND); - zgsBlendEquationSeparateEXT(GL_FUNC_ADD, GL_FUNC_ADD); - - if (PMODE->MMOD) - { - // Use the ALP register for alpha blending. - glBlendColorEXT(PMODE->ALP*(1 / 255.0f), PMODE->ALP*(1 / 255.0f), PMODE->ALP*(1 / 255.0f), 0.5f); - s_srcrgb = GL_CONSTANT_COLOR_EXT; - s_dstrgb = GL_ONE_MINUS_CONSTANT_COLOR_EXT; - } - else - { - // Use the alpha value of circuit 1 for alpha blending. - s_srcrgb = GL_SRC_ALPHA; - s_dstrgb = GL_ONE_MINUS_SRC_ALPHA; - } - - if (PMODE->AMOD) - { - s_srcalpha = GL_ZERO; - s_dstalpha = GL_ONE; - } - else - { - s_srcalpha = GL_ONE; - s_dstalpha = GL_ZERO; - } - - zgsBlendFuncSeparateEXT(s_srcrgb, s_dstrgb, s_srcalpha, s_dstalpha); -} - -// each frame could be drawn in two stages, so blending should be different for them -inline void RenderSetupStencil(int i) -{ - s_stencilmask = 1 << i; - glStencilMask(s_stencilmask); - GL_STENCILFUNC_SET(); -} - -// do stencil check for each found target i -- texturing stage -inline void RenderUpdateStencil(int i) -{ - if (!bUsingStencil) - { - glClear(GL_STENCIL_BUFFER_BIT); - bUsingStencil = true; - } - - glEnable(GL_STENCIL_TEST); - GL_STENCILFUNC(GL_NOTEQUAL, 3, 1 << i); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glStencilMask(1 << i); -} - -// CRTC24 could not be rendered -/*inline void RenderCRTC24helper(int psm) -{ - ZZLog::Debug_Log("ZZogl: CRTC24!!! I'm trying to show something."); - SetShaderCaller("RenderCRTC24helper"); - // assume that data is already in ptexMem (do Resolve?) - RenderGetForClip(psm, CRTC_RENDER_24); - ZZshSetPixelShader(curr_ppsCRTC24()->prog); - - DrawTriangleArray(); -}*/ - -// Maybe I do this function global-defined. Calculate bits per pixel for -// each psm. It's the only place with PSMCT16 which have a different bpp. -// FIXME: check PSMCT16S -inline int RenderGetBpp(int psm) -{ - if (psm == PSMCT16S) - { - //ZZLog::Debug_Log("ZZogl: 16S target."); - return 3; - } - - if (PSMT_ISHALF(psm)) return 2; - - return 4; -} - -// We want to draw ptarg on screen, that could be disaligned to viewport. -// So we do aligning it by height. -inline int RenderGetOffsets(int* dby, int* movy, tex0Info& texframe, CRenderTarget* ptarg, int bpp) -{ - *dby += (256 / bpp) * (texframe.tbp0 - ptarg->fbp) / texframe.tbw; - - if (*dby < 0) - { - *movy = -*dby; - *dby = 0; - } - - return min(ptarg->fbh - *dby, texframe.th - *movy); -} - -// BltBit shader calculate vertex (4 coord's pixel) position at the viewport. -inline float4 RenderSetTargetBitPos(int dh, int th, int movy) -{ - SetShaderCaller("RenderSetTargetBitPos"); - float4 v; - // dest rect - v.x = 1; - v.y = dh / (float)th; - v.z = 0; - v.w = 1 - v.y; - - if (movy > 0) v.w -= movy / (float)th; - - AdjustTransToAspect(v); - - if (INTERLACE_COUNT()) - { - // move down by 1 pixel - v.w += 1.0f / (float)dh ; - } - - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltPos, v, "g_fBitBltPos"); - - return v; -} - -// Important stuff. We could use these coordinates to change viewport position on the frame. -// For example, use tw / X and tw / X magnify the viewport. -// Interlaced output is little out of VB, it could be seen as an evil blinking line on top -// and bottom, so we try to remove it. -inline float4 RenderSetTargetBitTex(float th, float tw, float dh, float dw) -{ - SetShaderCaller("RenderSetTargetBitTex"); - - float4 v; - v = float4(th, tw, dh, dw); - - // Incorrect Aspect ratio on interlaced frames - - if (INTERLACE_COUNT()) - { - v.y -= 1.0f / conf.height; - v.w += 1.0f / conf.height; - } - - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "g_fBitBltTex"); - - return v; -} - -// Translator for POSITION coordinates (-1.0:+1.0f at x axis, +1.0f:-1.0y at y) into target frame ones. -// We don't need x coordinate, because interlacing is y-axis only. -inline float4 RenderSetTargetBitTrans(int th) -{ - SetShaderCaller("RenderSetTargetBitTrans"); - float4 v = float4(float(th), -float(th), float(th), float(th)); - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.fBitBltTrans, v, "g_fBitBltTrans"); - return v; -} - -// use g_fInvTexDims to store inverse texture dims -// Seems, that Targ shader does not use it -inline float4 RenderSetTargetInvTex(int tw, int th, CRTC_TYPE render_type) -{ - SetShaderCaller("RenderSetTargetInvTex"); - - FRAGMENTSHADER* prog = curr_pps(render_type); - float4 v = float4(0, 0, 0, 0); - - if (prog->sInvTexDims) - { - v.x = 1.0f / (float)tw; - v.y = 1.0f / (float)th; - v.z = (float)0.0; - v.w = -0.5f / (float)th; - ZZshSetParameter4fv(prog->prog, prog->sInvTexDims, v, "g_fInvTexDims"); - } - - return v; -} - -// Metal Slug 5 hack (as was written). If target tbp not equal to framed fbp, than we look for a better possibility, -// Note, than after true result iterator it could not be used. -inline bool RenderLookForABetterTarget(int fbp, int tbp, list& listTargs, list::iterator& it) -{ - if (fbp == tbp) return false; - - // look for a better target (metal slug 5) - list::iterator itbetter; - - for (itbetter = listTargs.begin(); itbetter != listTargs.end(); ++itbetter) - { - if ((*itbetter)->fbp == tbp) break; - } - - if (itbetter != listTargs.end()) - { - it = listTargs.erase(it); - return true; - } - - return false; -} - -inline void RenderCheckForMemory(tex0Info& texframe, list& listTargs, int circuit); - -// First try to draw frame from targets. -inline void RenderCheckForTargets(tex0Info& texframe, list& listTargs, int circuit) -{ - // get the start and end addresses of the buffer - int bpp = RenderGetBpp(texframe.psm); - GSRegDISPFB* pfb = Dispfb_Reg(circuit); - - int start, end; - int tex_th = (interlace_mode) ? texframe.th * 2 : texframe.th; - - //ZZLog::WriteLn("Render checking for targets, circuit %d", circuit); - GetRectMemAddressZero(start, end, texframe.psm, texframe.tw, tex_th, texframe.tbp0, texframe.tbw); - - // We need share list of targets between functions - s_RTs.GetTargs(start, end, listTargs); - - for (list::iterator it = listTargs.begin(); it != listTargs.end();) - { - CRenderTarget* ptarg = *it; - - if (ptarg->fbw == texframe.tbw && !(ptarg->status&CRenderTarget::TS_NeedUpdate) && ((256 / bpp)*(texframe.tbp0 - ptarg->fbp)) % texframe.tbw == 0) - { - FRAGMENTSHADER* pps; - int dby = pfb->DBY; - int movy = 0; - - if (RenderLookForABetterTarget(ptarg->fbp, texframe.tbp0, listTargs, it)) - { - continue; - } - - if (g_bSaveFinalFrame) SaveTexture("frame1.tga", GL_TEXTURE_RECTANGLE_NV, ptarg->ptex, RW(ptarg->fbw), RH(ptarg->fbh)); - - // determine the rectangle to render - int dh = RenderGetOffsets(&dby, &movy, texframe, ptarg, bpp); - - if (dh >= 64) - { - if (ptarg->fbh - dby < tex_th - movy && !bUsingStencil) - { - RenderUpdateStencil(circuit); - } - else if (ptarg->fbh - dby > 2 * ( tex_th - movy )) // I'm not sure this is needed any more. - { - // Sometimes calculated position onscreen is misaligned, ie in FFX-2 intro. In such case some part of image are out of - // border's and we should move it manually. - dby -= ((ptarg->fbh - dby) >> 2) - ((tex_th + movy) >> 1); - } - - SetShaderCaller("RenderCheckForTargets"); - - // Texture - float4 v = RenderSetTargetBitTex((float)RW(texframe.tw), (float)RH(dh), (float)RW(pfb->DBX), (float)RH(dby)); - - // dest rect - v = RenderSetTargetBitPos(dh, texframe.th, movy); - v = RenderSetTargetBitTrans(ptarg->fbh); - v = RenderSetTargetInvTex(texframe.tbw, ptarg->fbh, CRTC_RENDER_TARG); // FIXME. This is no use - - RenderGetForClip(texframe.psm, CRTC_RENDER_TARG); - pps = curr_ppsCRTCTarg(); - - // inside vb[0]'s target area, so render that region only - ZZshGLSetTextureParameter(pps->prog, pps->sFinal, ptarg->ptex, "CRTC target"); - RenderCreateInterlaceTex(texframe.th, CRTC_RENDER_TARG); - - ZZshSetPixelShader(pps->prog); - - DrawTriangleArray(); - - if (abs(dh - (int)texframe.th) <= 1) - { - return; - } - - if (abs(dh - (int)ptarg->fbh) <= 1) - { - it = listTargs.erase(it); - continue; - } - } - } - - ++it; - } - RenderCheckForMemory(texframe, listTargs, circuit); -} - - -// The same as the previous, but from memory. -// If you ever wondered why a picture from a minute ago suddenly flashes on the screen (say, in Mana Khemia), -// this is the function that does it. -inline void RenderCheckForMemory(tex0Info& texframe, list& listTargs, int circuit) -{ - float4 v; - - for (list::iterator it = listTargs.begin(); it != listTargs.end(); ++it) - { - (*it)->Resolve(); - } - - // context has to be 0 - if (interlace_mode >= 2) ZZLog::Error_Log("CRCR Check for memory shader fault."); - - //if (!bUsingStencil) RenderUpdateStencil(i); - - SetShaderCaller("RenderCheckForMemory"); - - float w1, h1, w2, h2; - if (g_bCRTCBilinear) - { - w1 = texframe.tw; - h1 = texframe.th; - w2 = -0.5f; - h2 = -0.5f; - SetTexVariablesInt(0, 2, texframe, false, curr_ppsCRTC(), 1); - } - else - { - w1 = 1; - h1 = 1; - w2 = -0.5f / (float)texframe.tw; - h2 = -0.5f / (float)texframe.th; - SetTexVariablesInt(0, 0, texframe, false, curr_ppsCRTC(), 1); - } - - if (g_bSaveFinalFrame) SaveTex(&texframe, g_bSaveFinalFrame - 1 > 0); - - // Fixme: Why is this here? - // We should probably call RenderSetTargetBitTex instead. - v = RenderSetTargetBitTex(w1, h1, w2, h2); - - // finally render from the memory (note that the stencil buffer will keep previous regions) - v = RenderSetTargetBitPos(1, 1, 0); - v = RenderSetTargetBitTrans(texframe.th); - v = RenderSetTargetInvTex(texframe.tw, texframe.th, CRTC_RENDER); - RenderGetForClip(texframe.psm, CRTC_RENDER); - - ZZshGLSetTextureParameter(curr_ppsCRTC()->prog, curr_ppsCRTC()->sMemory, vb[0].pmemtarg->ptex->tex, "CRTC memory"); - RenderCreateInterlaceTex(texframe.th, CRTC_RENDER); - ZZshSetPixelShader(curr_ppsCRTC()->prog); - - DrawTriangleArray(); -} - -extern RasterFont* font_p; - -void DrawText(const char* pstr, int left, int top, u32 color) -{ - FUNCLOG - ZZshGLDisableProfile(); - - float4 v; - v.SetColor(color); - glColor3f(v.z, v.y, v.x); - - font_p->printString(pstr, left * 2.0f / (float)GLWin.backbuffer.w - 1, 1 - top * 2.0f / (float)GLWin.backbuffer.h, 0); - ZZshGLEnableProfile(); -} - -// Put FPS counter on screen (not in window title) -inline void DisplayFPS() -{ - char str[64]; - int left = 10, top = 15; - sprintf(str, "%.1f fps", fFPS); - - DrawText(str, left + 1, top + 1, 0xff000000); - DrawText(str, left, top, 0xffc0ffff); -} - -// Snapshot helper -inline void MakeSnapshot() -{ - - if (!g_bMakeSnapshot) return; - - char str[64]; - int left = 200, top = 15; - sprintf(str, "ZeroGS %d.%d.%d - %.1f fps %s", zgsrevision, zgsbuild, zgsminor, fFPS, s_frameskipping ? " - frameskipping" : ""); - - DrawText(str, left + 1, top + 1, 0xff000000); - DrawText(str, left, top, 0xffc0ffff); - - if (SaveRenderTarget(strSnapshot != "" ? strSnapshot.c_str() : "temp.jpg", GLWin.backbuffer.w, -GLWin.backbuffer.h, 0)) //(conf.options.tga_snap)?0:1) ) { - { - char str[255]; - sprintf(str, "saved %s\n", strSnapshot.c_str()); - ZZAddMessage(str, 500); - } - - g_bMakeSnapshot = false; -} - -// call to destroy video resources -void ZZReset() -{ - FUNCLOG - s_RTs.ResolveAll(); - s_DepthRTs.ResolveAll(); - - vb[0].nCount = 0; - vb[1].nCount = 0; - - memset(s_nResolveCounts, 0, sizeof(s_nResolveCounts)); - s_nLastResolveReset = 0; - - icurctx = -1; - g_vsprog = g_psprog = sZero; - - ZZGSStateReset(); - ZZDestroy(); - //clear_drawfn(); - if (ZZKick != NULL) delete ZZKick; -} - -// Put new values on statistic variable -inline void CountStatistics() -{ - if (s_nWriteDepthCount > 0) - { - assert(conf.mrtdepth); - - if (--s_nWriteDepthCount <= 0) - { - s_bWriteDepth = false; - } - } - - if (s_nWriteDestAlphaTest > 0) - { - if (--s_nWriteDestAlphaTest <= 0) - { - s_bDestAlphaTest = false; - } - } - - if (g_nDepthUsed > 0) --g_nDepthUsed; - - s_ClutResolve = 0; - g_nDepthUpdateCount = 0; -} - -// This all could be easily forefeit -inline void AfterRendererUnimportantJob() -{ - ProcessMessages(); - - if (g_bDisplayFPS) DisplayFPS(); - - // Swapping buffers, so we could use another window - GLWin.SwapGLBuffers(); - - // clear all targets - if (conf.wireframe()) s_nWireframeCount = 1; - - if (g_bMakeSnapshot) MakeSnapshot(); - - CaptureFrame(); - CountStatistics(); - - if (s_nNewWidth >= 0 && s_nNewHeight >= 0) - { - // If needed reset - ZZReset(); - - ChangeDeviceSize(s_nNewWidth, s_nNewHeight); - s_nNewWidth = s_nNewHeight = -1; - } - - maxmin = 608; -} - -// Swich Framebuffers -inline void AfterRendererSwitchBackToTextures() -{ - FB::Bind(); - - g_MemTargs.DestroyCleared(); - - if (s_vecTempTextures.size() > 0) - glDeleteTextures((GLsizei)s_vecTempTextures.size(), &s_vecTempTextures[0]); - - s_vecTempTextures.clear(); - - if (EXTWRITE->WRITE & 1) - { - ZZLog::Warn_Log("EXTWRITE!"); - ExtWrite(); - EXTWRITE->WRITE = 0; - } - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - glEnable(GL_SCISSOR_TEST); - - if (icurctx >= 0) - { - vb[icurctx].bVarsSetTarg = false; - vb[icurctx].bVarsTexSync = false; - vb[0].bVarsTexSync = false; - } -} - -// Reset Targets Helper, for hack. -inline void AfterRendererAutoresetTargets() -{ - if (conf.settings().auto_reset) - { - s_nResolveCounts[s_nCurResolveIndex] = s_nResolved; - s_nCurResolveIndex = (s_nCurResolveIndex + 1) % ArraySize(s_nResolveCounts); - - int total = 0; - - for (u32 i = 0; i < ArraySize(s_nResolveCounts); ++i) total += s_nResolveCounts[i]; - - if (total / ArraySize(s_nResolveCounts) > 3) - { - if (s_nLastResolveReset > (int)(fFPS * 8)) - { - // reset - ZZLog::Error_Log("Video memory reset."); - s_nLastResolveReset = 0; - memset(s_nResolveCounts, 0, sizeof(s_nResolveCounts)); - - s_RTs.ResolveAll(); - return; - } - } - - s_nLastResolveReset++; - } - - if (s_nResolved > 8) - s_nResolved = 2; - else if (s_nResolved > 0) - --s_nResolved; -} - -int count = 0; - -// The main renderer function -void RenderCRTC() -{ - tex0Info dispinfo[2]; - - if (FrameSkippingHelper()) return; - - // If we are in frame mode and interlacing, and we haven't forced interlacing off, interlace_mode is 1. - interlace_mode = SMODE2->INT && SMODE2->FFMD && (conf.interlace < 2); - bUsingStencil = false; - - RenderStartHelper(); - - FrameObtainDispinfo(dispinfo); - - // start from the last circuit - for (int i = !PMODE->SLBG; i >= 0; --i) - { - if (!Circuit_Enabled(i)) continue; - tex0Info& texframe = dispinfo[i]; - - // I don't think this is neccessary, now that we make sure the ciruit we are working with is enabled. - // - // Actually it seems there are still empty frame in some games (persona 4 and tales of abyss). I'm not sure it - // is normal, for the moment keep the check to avoid some undefined behavior. -- Gregory - if (texframe.th <= 1) continue; - - if (SMODE2->INT && SMODE2->FFMD) - { - texframe.th >>= 1; - - // Final Fantasy X-2 issue here. - /*if (conf.interlace == 2 && texframe.th >= 512) - { - texframe.th >>= 1; - }*/ - } - - if (i == 0) RenderSetupBlending(); - if (bUsingStencil) RenderSetupStencil(i); - - /*if (texframe.psm == 0x12) // Probably broken - 0x12 isn't a valid psm. 24 bit is 1. - { - RenderCRTC24helper(texframe.psm); - continue; - }*/ - - // We shader targets between two functions, so declare it here; - list listTargs; - - // if we could not draw image from target's, do it from memory - RenderCheckForTargets(texframe, listTargs, i); - } - - GL_REPORT_ERRORD(); - - glDisable(GL_BLEND); - - AfterRendererUnimportantJob(); - AfterRendererSwitchBackToTextures(); - AfterRendererAutoresetTargets(); -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCRTC.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCRTC.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglCRTC.h 2012-10-21 18:10:13.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglCRTC.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZOGLCRTC_H_INCLUDED -#define ZZOGLCRTC_H_INCLUDED - -#include -#include "targets.h" - -extern int s_frameskipping; -extern float fFPS; -extern unsigned char zgsrevision, zgsbuild, zgsminor; - -extern int s_nWriteDepthCount; -extern int s_nWireframeCount; -extern int s_nWriteDestAlphaTest; - -extern int g_PrevBitwiseTexX, g_PrevBitwiseTexY; // textures stored in SAMP_BITWISEANDX and SAMP_BITWISEANDY - - -extern bool s_bDestAlphaTest; -extern int s_ClutResolve; -extern int s_nLastResolveReset; -extern int g_nDepthUpdateCount; -extern int s_nResolveCounts[30]; // resolve counts for last 30 frames -static int s_nCurResolveIndex = 0; -extern int g_nDepthUsed; // ffx2 pal movies - -//------------------ Namespace - -extern u32 s_ptexInterlace; // holds interlace fields - -extern int s_nNewWidth, s_nNewHeight; - -extern CRangeManager s_RangeMngr; // manages overwritten memory -extern void FlushTransferRanges(const tex0Info* ptex); -extern void ProcessMessages(); -void AdjustTransToAspect(float4& v); - -void ZZGSStateReset(); - -// Interlace texture is lazy 1*(height) array of 1 and 0. -// If its height (named s_nInterlaceTexWidth here) is hanging we must redo -// the texture. -// FIXME: If this function were spammed too often, we could use -// width < s_nInterlaceTexWidth as correct for old texture -static int s_nInterlaceTexWidth = 0; // width of texture - -inline u32 CreateInterlaceTex(int width) -{ - if (width == s_nInterlaceTexWidth && s_ptexInterlace != 0) return s_ptexInterlace; - - SAFE_RELEASE_TEX(s_ptexInterlace); - - s_nInterlaceTexWidth = width; - - vector data(width); - - for (int i = 0; i < width; ++i) - { - data[i] = (i & 1) ? 0xffffffff : 0; - } - - glGenTextures(1, &s_ptexInterlace); - glBindTexture(GL_TEXTURE_RECTANGLE_NV, s_ptexInterlace); - TextureRect(GL_RGBA, width, 1, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]); - setRectFilters(GL_NEAREST); - GL_REPORT_ERRORD(); - - return s_ptexInterlace; -} - -#endif // ZZOGLCRTC_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglDrawing.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglDrawing.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglDrawing.cpp 2012-05-26 09:58:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglDrawing.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,255 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include "ZZoglDrawing.h" -#include "ZZoglVB.h" - -Kick* ZZKick; - -const u32 g_primmult[8] = { 1, 2, 2, 3, 3, 3, 2, 0xff }; -const u32 g_primsub[8] = { 1, 2, 1, 3, 1, 1, 2, 0 }; - -const GLenum primtype[8] = { GL_POINTS, GL_LINES, GL_LINES, GL_TRIANGLES, GL_TRIANGLES, GL_TRIANGLES, GL_TRIANGLES, 0xffffffff }; - -extern float fiTexWidth[2], fiTexHeight[2]; // current tex width and height - -// Still thinking about the best place to put this. -// called on a primitive switch -void Prim() -{ - FUNCLOG - - VB& curvb = vb[prim->ctxt]; - - if (curvb.CheckPrim()) Flush(prim->ctxt); - curvb.SetCurrentPrim(); -} - -// Replaced by a macro -> see ZZoglDrawing.h -// return true if triangle SHOULD be painted. -// Hackish and should be replaced. -// bool __forceinline NoHighlights(int i) -// { -// //Old code -// return (!(conf.settings().xenosaga_spec) || !vb[i].zbuf.zmsk || prim->iip) ; -// } - -// Not inlining for the moment to avoid getting 'unresolved external symbol' errors in Windows. -// This could also be resolved by moving the function into the header... -void Kick::KickVertex(bool adc) -{ - FUNCLOG - if (++gs.primC >= (int)g_primmult[prim->prim]) - { - if (!adc && NoHighlights(prim->ctxt)) DrawPrim(prim->prim); - else DirtyValidPrevPrim(); - - gs.primC -= g_primsub[prim->prim]; - } - gs.primIndex = gs.primNext(); -} - -template -void Kick::Set_Vertex(VertexGPU *p, Vertex & gsvertex) -{ - VB& curvb = vb[prim->ctxt]; - - p->move_x(gsvertex, curvb.offset.x); - p->move_y(gsvertex, curvb.offset.y); - if(DO_Z_FOG) { - p->move_z(gsvertex, curvb.zprimmask); - p->move_fog(gsvertex); - } - - p->rgba = prim->iip ? gsvertex.rgba : gs.rgba; - - if (conf.settings().texa) - { - u32 B = ((p->rgba & 0xfe000000) >> 1) + (0x01000000 * vb[prim->ctxt].fba.fba); - p->rgba = (p->rgba & 0xffffff) + B; - } - - if (prim->tme) - { - if (prim->fst) - { - p->s = (float)gsvertex.u * fiTexWidth[prim->ctxt]; - p->t = (float)gsvertex.v * fiTexHeight[prim->ctxt]; - p->q = 1; - } - else - { - p->s = gsvertex.s; - p->t = gsvertex.t; - p->q = gsvertex.q; - } - } -} - -__forceinline void Kick::Output_Vertex(VertexGPU vert, u32 id) -{ -#ifdef WRITE_PRIM_LOGS - ZZLog::Prim_Log("%c%d(%d): xyzf=(%4d,%4d,0x%x,%3d), rgba=0x%8.8x, stq = (%2.5f,%2.5f,%2.5f)", - id == 0 ? '*' : ' ', id, prim->prim, vert.x / 8, vert.y / 8, vert.z, vert.f / 128, - vert.rgba, Clamp(vert.s, -10, 10), Clamp(vert.t, -10, 10), Clamp(vert.q, -10, 10)); -#endif -} - -void Kick::DrawPrim(u32 prim_type) -{ - VB& curvb = vb[prim->ctxt]; - - curvb.FlushTexData(); - - if ((vb[!prim->ctxt].nCount > 0) && (vb[prim->ctxt].gsfb.fbp == vb[!prim->ctxt].gsfb.fbp)) - { - assert(vb[prim->ctxt].nCount == 0); - Flush(!prim->ctxt); - } - - // check enough place is left for the biggest primitive (sprite) - // This function is unlikely to be called so do not inline it. - if (unlikely(curvb.nCount + 6 > curvb.nNumVertices)) - curvb.IncreaseVertexBuffer(); - - VertexGPU* p = curvb.pBufferData + curvb.nCount; - - u32 prev; - u32 last; - switch(prim_type) { - case PRIM_POINT: - Set_Vertex(&p[0], gs.gsvertex[gs.primIndex]); - curvb.nCount ++; - break; - - case PRIM_LINE: - Set_Vertex(&p[0], gs.gsvertex[gs.primPrev()]); - Set_Vertex(&p[1], gs.gsvertex[gs.primIndex]); - curvb.nCount += 2; - break; - - case PRIM_LINE_STRIP: - if (likely(ValidPrevPrim) && curvb.nCount != 0) { - assert(curvb.nCount >= 1); - p[0] = p[-1]; - } else { - Set_Vertex(&p[0], gs.gsvertex[gs.primPrev()]); - ValidPrevPrim = true; - } - - Set_Vertex(&p[1], gs.gsvertex[gs.primIndex]); - curvb.nCount += 2; - break; - - case PRIM_TRIANGLE: - Set_Vertex(&p[0], gs.gsvertex[gs.primPrev(2)]); - Set_Vertex(&p[1], gs.gsvertex[gs.primPrev()]); - Set_Vertex(&p[2], gs.gsvertex[gs.primIndex]); - curvb.nCount += 3; - break; - - case PRIM_TRIANGLE_STRIP: - if (likely(ValidPrevPrim) && curvb.nCount != 0) { - assert(curvb.nCount >= 2); - p[0] = p[-2]; - p[1] = p[-1]; - } else { - Set_Vertex(&p[0], gs.gsvertex[gs.primPrev(2)]); - Set_Vertex(&p[1], gs.gsvertex[gs.primPrev()]); - ValidPrevPrim = true; - } - - Set_Vertex(&p[2], gs.gsvertex[gs.primIndex]); - curvb.nCount += 3; - break; - - case PRIM_TRIANGLE_FAN: - if (likely(ValidPrevPrim) && curvb.nCount != 0) { - assert(curvb.nCount >= 2); - VertexGPU* TriFanVert = curvb.pBufferData + gs.nTriFanVert; - p[0] = TriFanVert[0]; - p[1] = p[-1]; - } else { - Set_Vertex(&p[0], gs.gsTriFanVertex); - Set_Vertex(&p[1], gs.gsvertex[gs.primPrev(1)]); - ValidPrevPrim = true; - // Remenber the base for future processing - gs.nTriFanVert = curvb.nCount; - } - - Set_Vertex(&p[2], gs.gsvertex[gs.primIndex]); - curvb.nCount += 3; - break; - - case PRIM_SPRITE: - prev = gs.primPrev(); - last = gs.primIndex; - - // sprite is too small and AA shows lines (tek4, Mana Khemia) - gs.gsvertex[last].x += (4 * AA.x); - gs.gsvertex[last].y += (4 * AA.y); - - // might be bad sprite (KH dialog text) - //if( gs.gsvertex[prev].x == gs.gsvertex[last].x || gs.gsvertex[prev].y == gs.gsvertex[last].y ) - //return; - - // process sprite as 2 triangles. The common diagonal is 0,1 and 3,4 - Set_Vertex(&p[0], gs.gsvertex[prev]); - Set_Vertex(&p[1], gs.gsvertex[last]); - - // Only fog and Z of last vertex is valid - p[0].z = p[1].z; - p[0].f = p[1].f; - - // Duplicate the vertex - p[3] = p[0]; - p[2] = p[0]; - p[4] = p[1]; - p[5] = p[1]; - - // Move some vertex x coord to create the others corners of the sprite - p[2].s = p[1].s; - p[2].x = p[1].x; - p[5].s = p[0].s; - p[5].x = p[0].x; - - curvb.nCount += 6; - break; - - default: break; - } - - // Print DEBUG info and code assertion - switch(prim_type) { - case PRIM_TRIANGLE: - case PRIM_TRIANGLE_STRIP: - case PRIM_TRIANGLE_FAN: - assert(gs.primC >= 3); - Output_Vertex(p[2],2); - case PRIM_LINE: - case PRIM_LINE_STRIP: - case PRIM_SPRITE: - assert(gs.primC >= 2); - Output_Vertex(p[1],1); - case PRIM_POINT: - assert(gs.primC >= 1); - Output_Vertex(p[0],0); - default: break; - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglDrawing.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglDrawing.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglDrawing.h 2012-05-26 09:58:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglDrawing.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZOGLDRAWING_H_INCLUDED -#define ZZOGLDRAWING_H_INCLUDED - -#include "Util.h" -#include "GS.h" - -// extern bool __forceinline NoHighlights(int i); - -// return true if triangle SHOULD be painted. -// Hackish and should be replaced. -// Previous version was an inlined function but gcc-4.6 does not want to inline it. -// Because the code is in the middle of vertex which are very often call, -// a basic macro is more effective -- Gregory -#define NoHighlights(I) (!(conf.settings().xenosaga_spec) || !vb[(I)].zbuf.zmsk || prim->iip) - -enum PRIM_TYPE { - PRIM_POINT = 0, - PRIM_LINE, - PRIM_LINE_STRIP, - PRIM_TRIANGLE, - PRIM_TRIANGLE_STRIP, - PRIM_TRIANGLE_FAN, - PRIM_SPRITE, - PRIM_DUMMY -}; - -class Kick -{ - private: - // template void Set_Vertex(VertexGPU *p, int i); - template void Set_Vertex(VertexGPU *p, Vertex &gsvertex); - void Output_Vertex(VertexGPU vert, u32 id); - bool ValidPrevPrim; - public: - Kick() : ValidPrevPrim(false) { } - ~Kick() { } - - void KickVertex(bool adc); - - void DrawPrim(u32 i); - - inline void DirtyValidPrevPrim() { - ValidPrevPrim = 0; - } -}; -extern Kick* ZZKick; - -#endif // ZZOGLDRAWING_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlush.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlush.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlush.cpp 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlush.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,2754 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Realization of Flush -- drawing function of GS - -#include -#include - -#include "GS.h" -#include "Mem.h" -#include "targets.h" -#include "ZZoglFlushHack.h" -#include "ZZoglShaders.h" -#include "ZZClut.h" -#include "ZZoglFlush.h" - -//------------------ Defines - -#ifdef ZEROGS_DEVBUILD -bool g_bUpdateEffect = false; -bool g_bSaveTex = false; // saves the current texture -bool g_bSaveResolved = false; -#endif // !defined(ZEROGS_DEVBUILD) - -bool g_bSaveTrans = false; -bool s_bWriteDepth = false; -bool s_bDestAlphaTest = false; - -bool g_bUpdateStencil = true; -bool bCanRenderStencil = true; - -// local alpha blending settings -GLenum s_rgbeq, s_alphaeq; // set by zgsBlendEquationSeparateEXT // ZZ - -// Note: blendalpha[2] & blendinvalpha[2] are never used !!! The index 2 is changed to 0 -// Note: blendalpha[3] & blendinvalpha[3] are special case for dest blending on 24bits. FIXME: I was expected GL_ONE & GL_ZERO ! -- greg -static const u32 blendalpha[4] = { GL_SRC_ALPHA, GL_DST_ALPHA, GL_CONSTANT_COLOR_EXT, GL_SRC_ALPHA }; // ZZ -static const u32 blendinvalpha[4] = { GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_CONSTANT_COLOR_EXT, GL_ONE_MINUS_SRC_ALPHA }; //ZZ -static const u32 g_dwAlphaCmp[] = { GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL }; // ZZ - -// used for afail case -static const u32 g_dwReverseAlphaCmp[] = { GL_ALWAYS, GL_NEVER, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL, GL_LESS, GL_LEQUAL, GL_EQUAL }; -static const u32 g_dwZCmp[] = { GL_NEVER, GL_ALWAYS, GL_GEQUAL, GL_GREATER }; - -///////////////////// -// graphics resources -#define s_bForceTexFlush 1 // ZZ -static u32 s_ptexCurSet[2] = {0}; -static u32 s_ptexNextSet[2] = {0}; // ZZ - -int s_ClutResolve = 0; // ZZ -int g_nDepthUsed = 0; // ffx2 pal movies -int s_nWriteDepthCount = 0; // ZZ -int s_nWriteDestAlphaTest = 0; // ZZ -int s_nWireframeCount = 0; - -//////////////////// -// State parameters -static float4 vAlphaBlendColor; // used for GPU_COLOR -static bool bNeedBlendFactorInAlpha; // set if the output source alpha is different from the real source alpha (only when blend factor > 0x80) -static u32 s_dwColorWrite = 0xf; // the color write mask of the current target - -// g_flag_vars g_vars; - -//static alphaInfo s_alphaInfo; // ZZ - -int g_PrevBitwiseTexX = -1, g_PrevBitwiseTexY = -1; // textures stored in SAMP_BITWISEANDX and SAMP_BITWISEANDY // ZZ -float fiTexWidth[2], fiTexHeight[2]; // current tex width and height -Point AA = {0,0}; // if AA.y is set, then AA.x has to be set. - -VB vb[2]; -int icurctx = -1; - -void Draw(const VB& curvb) -{ -#ifdef GLSL4_API - ZZshSetupShader(); -#endif - glDrawArrays(primtype[curvb.curprim.prim], 0, curvb.nCount); -} - -inline float AlphaReferedValue(int aref) -{ - // return (b2XAlphaTest) ? min(1.0f, (float)aref / 127.5f) : (float)aref / 255.0f ; - return min(1.0f, (float)aref / 127.5f); -} - -inline void SetAlphaTest(const pixTest& curtest) -{ - // if s_dwColorWrite is nontrivial, than we should not off alphatest. - // This fix GOW and Okami. - if (!curtest.ate && USEALPHATESTING && (s_dwColorWrite != 2 && s_dwColorWrite != 14)) - { - glDisable(GL_ALPHA_TEST); - } - else - { - glEnable(GL_ALPHA_TEST); - glAlphaFunc(g_dwAlphaCmp[curtest.atst], AlphaReferedValue(curtest.aref)); - } -} - -// Return, if tcc, aem or psm mode told us, than Alpha test should be used -// if tcc == 0 than no alpha used, aem used for alpha expanding and I am not sure -// that it's correct, psm -- color mode, -inline bool IsAlphaTestExpansion(tex0Info tex0) -{ - return (tex0.tcc && gs.texa.aem && PSMT_ALPHAEXP(PIXEL_STORAGE_FORMAT(tex0))); -} - -// Switch wireframe rendering off for first flush, so it's draw few solid primitives -inline void SwitchWireframeOff() -{ - if (conf.wireframe()) - { - if (s_nWireframeCount > 0) - { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } - } -} - -// Switch wireframe rendering on, look at previous function -inline void SwitchWireframeOn() -{ - if (conf.wireframe()) - { - if (s_nWireframeCount > 0) - { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - --s_nWireframeCount; - } - } -} - -extern u32 ptexBilinearBlocks; - -int GetTexFilter(const tex1Info& tex1) -{ - // always force - if (conf.bilinear == 2) return 1; - - int texfilter = 0; - - if (conf.bilinear && ptexBilinearBlocks != 0) - { - if (tex1.mmin <= 1) - texfilter = tex1.mmin | tex1.mmag; - else - texfilter = tex1.mmag ? ((tex1.mmin + 2) & 5) : tex1.mmin; - - texfilter = texfilter == 1 || texfilter == 4 || texfilter == 5; - } - - return texfilter; -} - -void ReloadEffects() -{ -#ifdef ZEROGS_DEVBUILD - - for (u32 i = 0; i < ArraySize(ppsTexture); ++i) - { - SAFE_RELEASE_PROG(ppsTexture[i].prog); - } - - memset(ppsTexture, 0, sizeof(ppsTexture)); - - ZZshLoadExtraEffects(); -#endif -} - -long BufferNumber = 0; - -// This is a debug function. It prints all buffer info and save current texture into the file, then prints the file name. -inline void VisualBufferMessage(int context) -{ -#if defined(WRITE_PRIM_LOGS) && defined(_DEBUG) - BufferNumber++; - VB& curvb = vb[context]; - static const char* patst[8] = { "NEVER", "ALWAYS", "LESS", "LEQUAL", "EQUAL", "GEQUAL", "GREATER", "NOTEQUAL"}; - static const char* pztst[4] = { "NEVER", "ALWAYS", "GEQUAL", "GREATER" }; - static const char* pafail[4] = { "KEEP", "FB_ONLY", "ZB_ONLY", "RGB_ONLY" }; - ZZLog::Debug_Log("**Drawing ctx %d, num %d, fbp: 0x%x, zbp: 0x%x, fpsm: %d, zpsm: %d, fbw: %d", context, vb[context].nCount, curvb.prndr->fbp, curvb.zbuf.zbp, curvb.prndr->psm, curvb.zbuf.psm, curvb.prndr->fbw); - ZZLog::Debug_Log("prim: prim=%x iip=%x tme=%x fge=%x abe=%x aa1=%x fst=%x ctxt=%x fix=%x", - curvb.curprim.prim, curvb.curprim.iip, curvb.curprim.tme, curvb.curprim.fge, curvb.curprim.abe, curvb.curprim.aa1, curvb.curprim.fst, curvb.curprim.ctxt, curvb.curprim.fix); - ZZLog::Debug_Log("test: ate:%d, atst: %s, aref: %d, afail: %s, date: %d, datm: %d, zte: %d, ztst: %s, fba: %d", - curvb.test.ate, patst[curvb.test.atst], curvb.test.aref, pafail[curvb.test.afail], curvb.test.date, curvb.test.datm, curvb.test.zte, pztst[curvb.test.ztst], curvb.fba.fba); - ZZLog::Debug_Log("alpha: A%d B%d C%d D%d FIX:%d pabe: %d; aem: %d, ta0: %d, ta1: %d\n", curvb.alpha.a, curvb.alpha.b, curvb.alpha.c, curvb.alpha.d, curvb.alpha.fix, gs.pabe, gs.texa.aem, gs.texa.ta[0], gs.texa.ta[1]); - ZZLog::Debug_Log("tex0: tbp0=0x%x, tbw=%d, psm=0x%x, tw=%d, th=%d, tcc=%d, tfx=%d, cbp=0x%x, cpsm=0x%x, csm=%d, csa=%d, cld=%d", - curvb.tex0.tbp0, curvb.tex0.tbw, curvb.tex0.psm, curvb.tex0.tw, - curvb.tex0.th, curvb.tex0.tcc, curvb.tex0.tfx, curvb.tex0.cbp, - curvb.tex0.cpsm, curvb.tex0.csm, curvb.tex0.csa, curvb.tex0.cld); - char* Name; - Name = NamedSaveTex(&curvb.tex0, 1); - ZZLog::Error_Log("TGA name '%s'.", Name); - free(Name); - ZZLog::Debug_Log("buffer %ld.\n", BufferNumber); -#endif -} - -inline void SaveRendererTarget(VB& curvb) -{ -#ifdef _DEBUG - -// Needs a # after rndr to work... -// char str[255]; -// sprintf(str, "rndr.tga"); -// SaveRenderTarget(str, curvb.prndr->fbw, curvb.prndr->fbh, 0); - -#endif -} - -// Stop effects in Developers mode -inline void FlushUpdateEffect() -{ -#if defined(DEVBUILD) - - if (g_bUpdateEffect) - { - ReloadEffects(); - g_bUpdateEffect = 0; - } - -#endif -} - -// Check, maybe we could skip flush -inline bool IsFlushNoNeed(VB& curvb, const pixTest& curtest) -{ - if (curvb.nCount == 0 || (curtest.zte && curtest.ztst == 0) || IsBadFrame(curvb)) - { - curvb.nCount = 0; - return true; - } - - return false; -} - -// Transfer targets, that are located in current texture. -inline void FlushTransferRangesHelper(VB& curvb) -{ - if (s_RangeMngr.ranges.size() > 0) - { - // don't want infinite loop, so set nCount to 0. - u32 prevcount = curvb.nCount; - curvb.nCount = 0; - - FlushTransferRanges(curvb.curprim.tme ? &curvb.tex0 : NULL); - - curvb.nCount += prevcount; - } -} - -// If set bit for texture checking, do it. Maybe it's all. -inline bool FushTexDataHelper(VB& curvb) -{ - if (curvb.bNeedFrameCheck || curvb.bNeedZCheck) - { - curvb.CheckFrame(curvb.curprim.tme ? curvb.tex0.tbp0 : 0); - } - - if (curvb.bNeedTexCheck) // Zeydlitz want to try this - { - curvb.FlushTexData(); - - if (curvb.nCount == 0) return true; - } - - return false; -} - -// Null target mean that we do something really bad. -inline bool FlushCheckForNULLTarget(VB& curvb, int context) -{ - if ((curvb.prndr == NULL) || (curvb.pdepth == NULL)) - { - ERROR_LOG_SPAMA("Current render target NULL (ctx: %d)", context); - curvb.nCount = 0; - return true; - } - - return false; -} - -// O.k. A set of resolutions, we do before real flush. We do RangeManager, FrameCheck and -// ZCheck before this. -inline bool FlushInitialTest(VB& curvb, const pixTest& curtest, int context) -{ - GL_REPORT_ERRORD(); - assert(context >= 0 && context <= 1); - - FlushUpdateEffect(); - - if (IsFlushNoNeed(curvb, curtest)) return true; - - FlushTransferRangesHelper(curvb); - - if (FushTexDataHelper(curvb)) return true; - - GL_REPORT_ERRORD(); - - if (FlushCheckForNULLTarget(curvb, context)) return true; - - return false; -} - -inline void TargetLog(int& tbw, int& tbp0, int& tpsm, VB& curvb, bool miss) -{ -#ifdef _DEBUG - if (tbp0 == 0x3600 && tbw == 0x100) - { - if (miss) - { - ZZLog::Debug_Log("Miss %x 0x%x %d", tbw, tbp0, tpsm); - - typedef map MAPTARGETS; - - for (MAPTARGETS::iterator itnew = s_RTs.mapTargets.begin(); itnew != s_RTs.mapTargets.end(); ++itnew) - { - ZZLog::Debug_Log("\tRender %x 0x%x %x", itnew->second->fbw, itnew->second->fbp, itnew->second->psm); - } - - for (MAPTARGETS::iterator itnew = s_DepthRTs.mapTargets.begin(); itnew != s_DepthRTs.mapTargets.end(); ++itnew) - { - ZZLog::Debug_Log("\tDepth %x 0x%x %x", itnew->second->fbw, itnew->second->fbp, itnew->second->psm); - } - - ZZLog::Debug_Log("\tCurvb 0x%x 0x%x 0x%x %x", curvb.frame.fbp, curvb.prndr->end, curvb.prndr->fbp, curvb.prndr->fbw); - } - else - ZZLog::Debug_Log("Hit %x 0x%x %x", tbw, tbp0, tpsm); - } -#endif -} - -// Try to different approach if texture target was not found -inline CRenderTarget* FlushReGetTarget(int& tbw, int& tbp0, int& tpsm, VB& curvb) -{ - // This was incorrect code - CRenderTarget* ptextarg = NULL; - - if (PSMT_ISZTEX(tpsm)) - { - // try depth - ptextarg = s_DepthRTs.GetTarg(tbp0, tbw); - } - - // I wonder if either of these hacks are useful, or if I can just remove them? - if ((conf.settings().reget) && (tpsm == PSMT8)) - { - // check for targets with half the width. Break Valkyrie Chronicles - ptextarg = s_RTs.GetTarg(tbp0, tbw / 2); - - if (ptextarg == NULL) - { - tbp0 &= ~0x7ff; - ptextarg = s_RTs.GetTarg(tbp0, tbw / 2); // mgs3 hack - - if (ptextarg == NULL) - { - // check the next level (mgs3) - tbp0 &= ~0xfff; - ptextarg = s_RTs.GetTarg(tbp0, tbw / 2); // mgs3 hack - } - - if (ptextarg != NULL && ptextarg->start > tbp0*256) - { - // target beyond range, so ignore - ptextarg = NULL; - } - } - } - - if ((conf.settings().texture_targs) && (ptextarg == NULL)) - { - // check if any part of the texture intersects the current target - if (!PSMT_ISCLUT(tpsm) && (curvb.tex0.tbp0 >= curvb.frame.fbp) && ((curvb.tex0.tbp0) < curvb.prndr->end)) - { - ptextarg = curvb.prndr; - } - } - - TargetLog(tbw, tbp0, tpsm, curvb, (ptextarg == NULL)); - - return ptextarg; -} - -// Find target to draw a texture. -inline CRenderTarget* FlushGetTarget(VB& curvb) -{ - int tbw, tbp0, tpsm; - - CRenderTarget* ptextarg = NULL; - - if (!curvb.curprim.tme) return ptextarg; // Which would be NULL, currently. - - if (curvb.bNeedTexCheck) - { - ZZLog::Error_Log("How it is possible?"); - // not yet initied, but still need to get correct target! (xeno3 ingame) - tbp0 = ZZOglGet_tbp0_TexBits(curvb.uNextTex0Data[0]); - tbw = ZZOglGet_tbw_TexBitsMult(curvb.uNextTex0Data[0]); - tpsm = ZZOglGet_psm_TexBitsFix(curvb.uNextTex0Data[0]); - } - else - { - tbw = curvb.tex0.tbw; - tbp0 = curvb.tex0.tbp0; - tpsm = curvb.tex0.psm; - } - - ptextarg = s_RTs.GetTarg(tbp0, tbw); - - if (ptextarg == NULL) ptextarg = FlushReGetTarget(tbw, tbp0, tpsm, curvb); - - if ((ptextarg != NULL) && !(ptextarg->status & CRenderTarget::TS_NeedUpdate)) - { - if (PSMT_BITMODE(tpsm) == 4) // handle 8h cluts - { - // don't support clut targets, read from mem - // 4hl - kh2 check - from dx version -- arcum42 - - if (tpsm == PSMT4 && s_ClutResolve <= 1) - { - // xenosaga requires 2 resolves - u32 prevcount = curvb.nCount; - curvb.nCount = 0; - ptextarg->Resolve(); - s_ClutResolve++; - curvb.nCount += prevcount; - } - - ptextarg = NULL; - } - else - { - if (ptextarg == curvb.prndr) - { - // need feedback - curvb.prndr->CreateFeedback(); - - if (s_bWriteDepth && (curvb.pdepth != NULL)) - curvb.pdepth->SetRenderTarget(1); - else - ResetRenderTarget(1); - } - } - } - else - { - // If a texture needs updating, clear it. - ptextarg = NULL; - } - - return ptextarg; -} - -// Set target for current context -inline void FlushSetContextTarget(VB& curvb, int context) -{ - if (!curvb.bVarsSetTarg) - { - SetContextTarget(context); - } - else - { - assert(curvb.pdepth != NULL); - - if (curvb.pdepth->status & CRenderTarget::TS_Virtual) - { - if (!curvb.zbuf.zmsk) - { -#ifdef NDEBUG - s_DepthRTs.Promote(GetFrameKey(curvb.pdepth)); -#else - CRenderTarget* ptemp = s_DepthRTs.Promote(GetFrameKey(curvb.pdepth)); - assert(ptemp == curvb.pdepth); -#endif - } - else - { - curvb.pdepth->status &= ~CRenderTarget::TS_NeedUpdate; - } - } - - if ((curvb.pdepth->status & CRenderTarget::TS_NeedUpdate) || (curvb.prndr->status & CRenderTarget::TS_NeedUpdate)) - SetContextTarget(context); - } - - assert(!(curvb.prndr->status&CRenderTarget::TS_NeedUpdate)); - - curvb.prndr->status = 0; - - if (curvb.pdepth != NULL) - { -#ifdef _DEBUG - // Reduce an assert to a warning. - if (curvb.pdepth->status & CRenderTarget::TS_NeedUpdate) - { - ZZLog::Debug_Log("In FlushSetContextTarget, pdepth has TS_NeedUpdate set."); - } -#endif - if (!curvb.zbuf.zmsk) - { - assert(!(curvb.pdepth->status & CRenderTarget::TS_Virtual)); - curvb.pdepth->status = 0; - } - } -} - -inline void FlushSetStream(VB& curvb) -{ - // setup current buffer - glBindBuffer(GL_ARRAY_BUFFER, g_vboBuffers[g_nCurVBOIndex]); - glBufferData(GL_ARRAY_BUFFER, curvb.nCount * sizeof(VertexGPU), curvb.pBufferData, GL_STREAM_DRAW); - - g_nCurVBOIndex = (g_nCurVBOIndex + 1) % ArraySize(g_vboBuffers); - - -// void* pdata = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); -// memcpy(pdata, curvb.pBufferData, curvb.nCount * sizeof(VertexGPU)); -// glUnmapBuffer(GL_ARRAY_BUFFER); - SET_STREAM(); - - GL_REPORT_ERRORD(); -} - -// Set color mask. Really, it's not as good as PS2 one. -inline void FlushSetColorMask(VB& curvb) -{ - s_dwColorWrite = (PSMT_BITMODE(curvb.prndr->psm) == 1) ? (COLORMASK_BLUE | COLORMASK_GREEN | COLORMASK_RED) : 0xf; - - int maskR = ZZOglGet_fbmRed_FrameBits(curvb.frame.fbm); - int maskG = ZZOglGet_fbmGreen_FrameBits(curvb.frame.fbm); - int maskB = ZZOglGet_fbmBlue_FrameBits(curvb.frame.fbm); - int maskA = ZZOglGet_fbmAlpha_FrameBits(curvb.frame.fbm); - - if (maskR == 0xff) s_dwColorWrite &= ~COLORMASK_RED; - if (maskG == 0xff) s_dwColorWrite &= ~COLORMASK_GREEN; - if (maskB == 0xff) s_dwColorWrite &= ~COLORMASK_BLUE; - - if ((maskA == 0xff) || (curvb.curprim.abe && (curvb.test.atst == ATST_LESS && curvb.test.aref == 128))) - s_dwColorWrite &= ~COLORMASK_ALPHA; - - GL_COLORMASK(s_dwColorWrite); -} - -// Set Scissors for scissor test. -inline void FlushSetScissorRect(VB& curvb) -{ - Rect& scissor = curvb.prndr->scissorrect; - glScissor(scissor.x, scissor.y, scissor.w, scissor.h); -} - -// Prior really doing something check context -inline void FlushDoContextJob(VB& curvb, int context) -{ - SaveRendererTarget(curvb); - - FlushSetContextTarget(curvb, context); - icurctx = context; - - FlushSetStream(curvb); - FlushSetColorMask(curvb); - FlushSetScissorRect(curvb); -} - -// Set 1 is Alpha test is EQUAL and alpha should be proceed with care. -inline int FlushGetExactcolor(const pixTest curtest) -{ - if (!(g_nPixelShaderVer&SHADER_REDUCED)) - // ffx2 breaks when ==7 - return ((curtest.ate && curtest.aref <= 128) && (curtest.atst == ATST_EQUAL));// || curtest.atst == ATST_NOTEQUAL); - - return 0; -} - -// fill the buffer by decoding the clut -inline void FlushDecodeClut(VB& curvb, GLuint& ptexclut) -{ - glGenTextures(1, &ptexclut); - glBindTexture(GL_TEXTURE_2D, ptexclut); - - if (ptexclut != 0) - { - int clutsize; - int entries = PSMT_IS8CLUT(curvb.tex0.psm) ? 256 : 16; - - if (curvb.tex0.csm && curvb.tex0.csa) ZZLog::Debug_Log("ERROR, csm1."); - - if (PSMT_IS32BIT(curvb.tex0.cpsm)) { - __aligned16 u32 data[256]; - clutsize = min(entries, 256 - curvb.tex0.csa * 16) * 4; - - ClutBuffer_to_Array((u32*)data, curvb.tex0.csa, clutsize); - - Texture2D(4, 256, 1, GL_RGBA, GL_UNSIGNED_BYTE, data); - } else { - __aligned16 u16 data[256]; - clutsize = min(entries, 512 - curvb.tex0.csa * 16) * 2; - - ClutBuffer_to_Array((u16*)data, curvb.tex0.csa, clutsize); - - Texture2D(4, 256, 1, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, data); - } - - s_vecTempTextures.push_back(ptexclut); - - if (g_bSaveTex) SaveTexture("clut.tga", GL_TEXTURE_2D, ptexclut, 256, 1); - - setTex2DWrap(GL_REPEAT); - setTex2DFilters(GL_LINEAR); - } -} - -inline int FlushGetShaderType(VB& curvb, CRenderTarget* ptextarg, GLuint& ptexclut) -{ - if (PSMT_ISCLUT(curvb.tex0.psm) && !(conf.settings().no_target_clut)) - { - FlushDecodeClut(curvb, ptexclut); - - if (!(g_nPixelShaderVer&SHADER_REDUCED) && PSMT_ISHALF(ptextarg->psm)) - { - return 4; - } - else - { - // Valkyrie - return 2; - } - } - - if (PSMT_ISHALF_STORAGE(curvb.tex0) != PSMT_ISHALF(ptextarg->psm) && (!(g_nPixelShaderVer&SHADER_REDUCED) || !curvb.curprim.fge)) - { - if (PSMT_ISHALF_STORAGE(curvb.tex0)) - { - // converting from 32->16 - // Radiata Chronicles - return 3; - } - else - { - // converting from 16->32 - // Star Ward: Force - return 0; - } - } - - return 1; -} - - -//Set page offsets depends on shader type. -inline void FlushSetPageOffset(FRAGMENTSHADER* pfragment, int shadertype, CRenderTarget* ptextarg) -{ - SetShaderCaller("FlushSetPageOffset"); - - float4 vpageoffset; - vpageoffset.w = 0; - - switch (shadertype) - { - case 3: - vpageoffset.x = -0.1f / 256.0f; - vpageoffset.y = -0.001f / 256.0f; - vpageoffset.z = -0.1f / (ptextarg->fbh); - vpageoffset.w = 0.0f; - break; - - case 4: - vpageoffset.x = 2; - vpageoffset.y = 1; - vpageoffset.z = 0; - vpageoffset.w = 0.0001f; - break; - } - - // zoe2 - if (PSMT_ISZTEX(ptextarg->psm)) vpageoffset.w = -1.0f; - - ZZshSetParameter4fv(pfragment->prog, pfragment->fPageOffset, vpageoffset, "g_fPageOffset"); -} - -//Setting texture offsets depends on shader type. -inline void FlushSetTexOffset(FRAGMENTSHADER* pfragment, int shadertype, VB& curvb, CRenderTarget* ptextarg) -{ - SetShaderCaller("FlushSetTexOffset"); - float4 v; - - if (shadertype == 3) - { - float4 v; - v.x = 16.0f / (float)curvb.tex0.tw; - v.y = 16.0f / (float)curvb.tex0.th; - v.z = 0.5f * v.x; - v.w = 0.5f * v.y; - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexOffset, v, "g_fTexOffset"); - } - else if (shadertype == 4) - { - float4 v; - v.x = 16.0f / (float)ptextarg->fbw; - v.y = 16.0f / (float)ptextarg->fbh; - v.z = -1; - v.w = 8.0f / (float)ptextarg->fbh; - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexOffset, v, "g_fTexOffset"); - } -} - -// Set dimension (Real!) of texture. z and w -inline void FlushTextureDims(FRAGMENTSHADER* pfragment, int shadertype, VB& curvb, CRenderTarget* ptextarg) -{ - SetShaderCaller("FlushTextureDims"); - float4 vTexDims; - vTexDims.x = (float)RW(curvb.tex0.tw) ; - vTexDims.y = (float)RH(curvb.tex0.th) ; - - // look at the offset of tbp0 from fbp - - if (curvb.tex0.tbp0 <= ptextarg->fbp) - { - vTexDims.z = 0;//-0.5f/(float)ptextarg->fbw; - vTexDims.w = 0;//0.2f/(float)ptextarg->fbh; - } - else - { - //u32 tbp0 = curvb.tex0.tbp0 >> 5; // align to a page - int blockheight = PSMT_ISHALF(ptextarg->psm) ? 64 : 32; - int ycoord = ((curvb.tex0.tbp0 - ptextarg->fbp) / (32 * (ptextarg->fbw >> 6))) * blockheight; - int xcoord = (((curvb.tex0.tbp0 - ptextarg->fbp) % (32 * (ptextarg -> fbw >> 6)))) * 2; - vTexDims.z = (float)xcoord; - vTexDims.w = (float)ycoord; - } - - if (shadertype == 4) - vTexDims.z += 8.0f; - - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexDims, vTexDims, "g_fTexDims"); -} - -// Apply TEX1 mmag and mmin -- filter for expanding/reducing texture -// We ignore all settings, only NEAREST (0) is used -inline void FlushApplyResizeFilter(VB& curvb, u32& dwFilterOpts, CRenderTarget* ptextarg, int context) -{ - u32 ptexset = (ptextarg == curvb.prndr) ? ptextarg->ptexFeedback : ptextarg->ptex; - s_ptexCurSet[context] = ptexset; - - if ((!curvb.tex1.mmag) || (!curvb.tex1.mmin)) - glBindTexture(GL_TEXTURE_RECTANGLE_NV, ptexset); - - if (!curvb.tex1.mmag) - { - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - dwFilterOpts |= 1; - } - - if (!curvb.tex1.mmin) - { - glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - dwFilterOpts |= 2; - } -} - - -// Usage existing targets depends on several tricks, 32-16 conversion and CLUTing, so we need to handle it. -inline FRAGMENTSHADER* FlushUseExistRenderTarget(VB& curvb, CRenderTarget* ptextarg, u32& dwFilterOpts, int exactcolor, int context) -{ - if (ptextarg->IsDepth()) - SetWriteDepth(); - - GLuint ptexclut = 0; - - //int psm = PIXEL_STORAGE_FORMAT(curvb.tex0); - int shadertype = FlushGetShaderType(curvb, ptextarg, ptexclut); - - FRAGMENTSHADER* pfragment = ZZshLoadShadeEffect(shadertype, 0, curvb.curprim.fge, - IsAlphaTestExpansion(curvb.tex0), exactcolor, curvb.clamp, context, NULL); - - FlushSetPageOffset(pfragment, shadertype, ptextarg); - - FlushSetTexOffset(pfragment, shadertype, curvb, ptextarg); - - FlushTextureDims(pfragment, shadertype, curvb, ptextarg); - - if (pfragment->sCLUT != NULL && ptexclut != 0) - ZZshGLSetTextureParameter(pfragment->prog, pfragment->sCLUT, ptexclut, "CLUT"); - - FlushApplyResizeFilter(curvb, dwFilterOpts, ptextarg, context); - - if (g_bSaveTex) - SaveTexture("tex.tga", GL_TEXTURE_RECTANGLE_NV, - ptextarg == curvb.prndr ? ptextarg->ptexFeedback : ptextarg->ptex, RW(ptextarg->fbw), RH(ptextarg->fbh)); - - return pfragment; -} - -// Usage most major shader. -inline FRAGMENTSHADER* FlushMadeNewTarget(VB& curvb, int exactcolor, int context) -{ - // save the texture - if (g_bSaveTex) - { - // FIXME: I suspect one of g_bSaveTex test variable is wrong - if (g_bSaveTex == 1) - { - SaveTex(&curvb.tex0, 1); - /*CMemoryTarget* pmemtarg = */ - g_MemTargs.GetMemoryTarget(curvb.tex0, 0); - } - else - { - SaveTex(&curvb.tex0, 0); - } - } - - FRAGMENTSHADER* pfragment = ZZshLoadShadeEffect(0, GetTexFilter(curvb.tex1), curvb.curprim.fge, - IsAlphaTestExpansion(curvb.tex0), exactcolor, curvb.clamp, context, NULL); - - if (pfragment == NULL) - ZZLog::Error_Log("Could not find memory target shader."); - - return pfragment; -} - -// We made an shader, so now need to put all common variables. -inline void FlushSetTexture(VB& curvb, FRAGMENTSHADER* pfragment, CRenderTarget* ptextarg, int context) -{ - SetTexVariables(context, pfragment); - SetTexInt(context, pfragment, ptextarg == NULL); - - // have to enable the texture parameters(curtest.atst) - if( curvb.ptexClamp[0] != 0 ) - ZZshGLSetTextureParameter(pfragment->prog, pfragment->sBitwiseANDX, curvb.ptexClamp[0], "Clamp 0"); - - if( curvb.ptexClamp[1] != 0 ) - ZZshGLSetTextureParameter(pfragment->prog, pfragment->sBitwiseANDY, curvb.ptexClamp[1], "Clamp 1"); - - // FIXME condition is a bit strange for GLSL -#ifdef GLSL4_API - if( s_ptexCurSet[context] != 0) - ZZshGLSetTextureParameter(pfragment->prog, pfragment->sMemory, s_ptexCurSet[context], "Clamp memory"); -#else - if( pfragment->sMemory != NULL && s_ptexCurSet[context] != 0) - ZZshGLSetTextureParameter(pfragment->prog, pfragment->sMemory, s_ptexCurSet[context], "Clamp memory"); -#endif -} - -// Reset program and texture variables; -inline void FlushBindProgram(FRAGMENTSHADER* pfragment, int context) -{ - vb[context].bTexConstsSync = 0; - vb[context].bVarsTexSync = 0; - - ZZshSetPixelShader(pfragment->prog); -} - -inline FRAGMENTSHADER* FlushRendererStage(VB& curvb, u32& dwFilterOpts, CRenderTarget* ptextarg, int exactcolor, int context) -{ - - FRAGMENTSHADER* pfragment = NULL; - - // set the correct pixel shaders - - if (curvb.curprim.tme) - { - if (ptextarg != NULL) - pfragment = FlushUseExistRenderTarget(curvb, ptextarg, dwFilterOpts, exactcolor, context); - else - pfragment = FlushMadeNewTarget(curvb, exactcolor, context); - - if (pfragment == NULL) - { - ZZLog::Error_Log("Shader is not found."); -// return NULL; - } - - FlushSetTexture(curvb, pfragment, ptextarg, context); - } - else - { - pfragment = &ppsRegular[curvb.curprim.fge + 2 * s_bWriteDepth]; - } - - GL_REPORT_ERRORD(); - - // set the shaders - SetShaderCaller("FlushRendererStage"); - ZZshSetVertexShader(pvs[2 * ((curvb.curprim._val >> 1) & 3) + 8 * s_bWriteDepth + context]); - FlushBindProgram(pfragment, context); - - GL_REPORT_ERRORD(); - return pfragment; -} - -inline bool AlphaCanRenderStencil(VB& curvb) -{ - return g_bUpdateStencil && (PSMT_BITMODE(curvb.prndr->psm) != 1) && - !ZZOglGet_fbmHighByte(curvb.frame.fbm) && !(conf.settings().no_stencil); -} - -inline void AlphaSetStencil() -{ - if (s_bDestAlphaTest && bCanRenderStencil) - { - glEnable(GL_STENCIL_TEST); - GL_STENCILFUNC(GL_ALWAYS, 0, 0); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - } - else glDisable(GL_STENCIL_TEST); -} - -//inline u32 FtoDW(float f) { return (*((u32*)&f)); } - -inline void AlphaSetDepthTest(VB& curvb, const pixTest curtest, FRAGMENTSHADER* pfragment) -{ - glDepthMask(!curvb.zbuf.zmsk && curtest.zte); - // && curtest.zte && (curtest.ztst > 1) ); - - if (curtest.zte) - { - if (curtest.ztst > 1) g_nDepthUsed = 2; -#if 0 - if ((curtest.ztst == 2) ^(g_nDepthBias != 0)) - { - g_nDepthBias = (curtest.ztst == 2); - //SETRS(D3DRS_DEPTHBIAS, g_nDepthBias?FtoDW(0.0003f):FtoDW(0.000015f)); - } -#endif - - glDepthFunc(g_dwZCmp[curtest.ztst]); - } - - GL_ZTEST(curtest.zte); - - if (s_bWriteDepth) - { - if (!curvb.zbuf.zmsk) - curvb.pdepth->SetRenderTarget(1); - else - ResetRenderTarget(1); - } -} - -inline u32 AlphaSetupBlendTest(VB& curvb) -{ - if (curvb.curprim.abe) - SetAlphaVariables(curvb.alpha); - else - glDisable(GL_BLEND); - - u32 oldabe = curvb.curprim.abe; - - if (gs.pabe) - { - //ZZLog::Error_Log("PABE!"); - curvb.curprim.abe = 1; - glEnable(GL_BLEND); - } - - return oldabe; -} - -inline void AlphaRenderFBA(VB& curvb, FRAGMENTSHADER* pfragment) -{ - // needs to be before RenderAlphaTest - if ((gs.pabe) || (curvb.fba.fba && !ZZOglGet_fbmHighByte(curvb.frame.fbm)) || (s_bDestAlphaTest && bCanRenderStencil)) - { - RenderFBA(curvb, pfragment); - } - -} - -inline u32 AlphaRenderAlpha(VB& curvb, const pixTest curtest, FRAGMENTSHADER* pfragment, int exactcolor) -{ - SetShaderCaller("AlphaRenderAlpha"); - u32 dwUsingSpecialTesting = 0; - - if (curvb.curprim.abe) - { - if ((bNeedBlendFactorInAlpha || ((curtest.ate && curtest.atst > ATST_ALWAYS) && (curtest.aref > 0x80)))) - { - // need special stencil processing for the alpha - RenderAlphaTest(curvb, pfragment); - dwUsingSpecialTesting = 1; - } - - // harvest fishing - float4 v = vAlphaBlendColor; - - if (exactcolor) - { - v.y *= 255; - v.w *= 255; - } - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - } - else - { - // not using blending so set to defaults - float4 v = exactcolor ? float4(1, 510 * 255.0f / 256.0f, 0, 0) : float4(1, 2 * 255.0f / 256.0f, 0, 0); - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - } - - return dwUsingSpecialTesting; -} - -inline void AlphaRenderStencil(VB& curvb, u32 dwUsingSpecialTesting) -{ - if (s_bDestAlphaTest && bCanRenderStencil) - { - // if not 24bit and can write to high alpha bit - RenderStencil(curvb, dwUsingSpecialTesting); - } - else - { - s_stencilref = STENCIL_SPECIAL; - s_stencilmask = STENCIL_SPECIAL; - - // setup the stencil to only accept the test pixels - - if (dwUsingSpecialTesting) - { - glEnable(GL_STENCIL_TEST); - glStencilMask(STENCIL_PIXELWRITE); - GL_STENCILFUNC(GL_EQUAL, STENCIL_SPECIAL | STENCIL_PIXELWRITE, STENCIL_SPECIAL); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - } - } - -// #ifdef _DEBUG -// if (bDestAlphaColor == 1) -// { -// ZZLog::Debug_Log("Dest alpha blending! Manipulate alpha here."); -// } -// -// #endif - - if (bCanRenderStencil && gs.pabe) - { - // only render the pixels with alpha values >= 0x80 - GL_STENCILFUNC(GL_EQUAL, s_stencilref | STENCIL_FBA, s_stencilmask | STENCIL_FBA); - } - - GL_REPORT_ERRORD(); -} - -inline void AlphaTest(VB& curvb) -{ -// ZZLog::Debug_Log("%d %d %d %d %d", curvb.test.date, curvb.test.datm, gs.texa.aem, curvb.test.ate, curvb.test.atst ); - -// return; - // Zeydlitz changed this with a reason! It's an "Alpha more than 1 hack." - if (curvb.test.ate == 1 && curvb.test.atst == ATST_ALWAYS && curvb.test.date == 1) - { - if (curvb.test.datm == 1) - { - glAlphaFunc(GL_GREATER, 1.0f); - } - else - { - glAlphaFunc(GL_LESS, 1.0f); - ZZLog::Debug_Log("%d %d %d", curvb.test.date, curvb.test.datm, gs.texa.aem); - } - } - - if (!curvb.test.ate || curvb.test.atst > ATST_NEVER) - { - Draw(curvb); - } - - GL_REPORT_ERRORD(); -} - -inline void AlphaPabe(VB& curvb, FRAGMENTSHADER* pfragment, int exactcolor) -{ - if (gs.pabe) - { - SetShaderCaller("AlphaPabe"); - // only render the pixels with alpha values < 0x80 - glDisable(GL_BLEND); - GL_STENCILFUNC_SET(); - - float4 v; - v.x = 1; - v.y = 2; - v.z = 0; - v.w = 0; - - if (exactcolor) v.y *= 255; - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - Draw(curvb); - - // reset - if (!s_stencilmask) s_stencilfunc = GL_ALWAYS; - - GL_STENCILFUNC_SET(); - } - - GL_REPORT_ERRORD(); -} - -// Alpha Failure does not work properly on this cases. True means that no failure job should be done. -// First three cases are trivial manual. -inline bool AlphaFailureIgnore(const pixTest curtest) -{ - if ((!curtest.ate) || (curtest.atst == ATST_ALWAYS) || (curtest.afail == AFAIL_KEEP)) return true; - - if (conf.settings().no_alpha_fail && ((s_dwColorWrite < 8) || (s_dwColorWrite == 15 && curtest.atst == 5 && (curtest.aref == 64)))) - return true; - -// old and seemingly incorrect code. -// if ((s_dwColorWrite < 8 && s_dwColorWrite !=8) && curtest.afail == AFAIL_FB_ONLY) -// return true; -// if ((s_dwColorWrite == 0xf) && curtest.atst == ATST_GEQUAL && curtest.afail == AFAIL_FB_ONLY && !(conf.settings() & GAME_REGETHACK)) -// return true; - return false; -} - -// more work on alpha failure case -inline void AlphaFailureTestJob(VB& curvb, const pixTest curtest, FRAGMENTSHADER* pfragment, int exactcolor, int oldabe) -{ - // Note, case when ate == 1, atst == ATST_NEVER and afail > AFAIL_KEEP in documentation wrote as failure case. But it seems that - // either doc's are incorrect or this case has some issues. - if (AlphaFailureIgnore(curtest)) return; - -#ifdef NOALFAFAIL - ZZLog::Error_Log("Alpha job here %d %d %d %d %d %d", s_dwColorWrite, curtest.atst, curtest.afail, curtest.aref, gs.pabe, s_bWriteDepth); - -// return; -#endif - - SetShaderCaller("AlphaFailureTestJob"); - - // need to reverse the test and disable some targets - glAlphaFunc(g_dwReverseAlphaCmp[curtest.atst], AlphaReferedValue(curtest.aref)); - - if (curtest.afail & 1) // front buffer update only - { - if (curtest.afail == AFAIL_RGB_ONLY) glColorMask(1, 1, 1, 0);// disable alpha - - glDepthMask(0); - - if (s_bWriteDepth) ResetRenderTarget(1); - } - else - { - // zbuffer update only - glColorMask(0, 0, 0, 0); - } - - if (gs.pabe && bCanRenderStencil) - { - // only render the pixels with alpha values >= 0x80 - float4 v = vAlphaBlendColor; - - if (exactcolor) { v.y *= 255; v.w *= 255; } - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - glEnable(GL_BLEND); - GL_STENCILFUNC(GL_EQUAL, s_stencilref | STENCIL_FBA, s_stencilmask | STENCIL_FBA); - } - - Draw(curvb); - - GL_REPORT_ERRORD(); - - if (gs.pabe) - { - // only render the pixels with alpha values < 0x80 - glDisable(GL_BLEND); - GL_STENCILFUNC_SET(); - - float4 v; - v.x = 1; - v.y = 2; - v.z = 0; - v.w = 0; - - if (exactcolor) v.y *= 255; - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - Draw(curvb); - - // reset - if (oldabe) glEnable(GL_BLEND); - - if (!s_stencilmask) s_stencilfunc = GL_ALWAYS; - - GL_STENCILFUNC_SET(); - } - - // restore - if ((curtest.afail & 1) && !curvb.zbuf.zmsk) - { - glDepthMask(1); - - if (s_bWriteDepth) - { - assert(curvb.pdepth != NULL); - curvb.pdepth->SetRenderTarget(1); - } - } - - GL_COLORMASK(s_dwColorWrite); - - // not needed anymore since rest of ops concentrate on image processing - - GL_REPORT_ERRORD(); -} - -inline void AlphaSpecialTesting(VB& curvb, FRAGMENTSHADER* pfragment, u32 dwUsingSpecialTesting, int exactcolor) -{ - if (dwUsingSpecialTesting) - { - SetShaderCaller("AlphaSpecialTesting"); - - // render the real alpha - glDisable(GL_ALPHA_TEST); - glColorMask(0, 0, 0, 1); - - if (s_bWriteDepth) - { - ResetRenderTarget(1); - } - - glDepthMask(0); - - glStencilFunc(GL_EQUAL, STENCIL_SPECIAL | STENCIL_PIXELWRITE, STENCIL_SPECIAL | STENCIL_PIXELWRITE); - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - - float4 v = float4(0, exactcolor ? 510.0f : 2.0f, 0, 0); - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - Draw(curvb); - - // don't need to restore - } - - GL_REPORT_ERRORD(); -} - -inline void AlphaDestinationTest(VB& curvb, FRAGMENTSHADER* pfragment) -{ - if (s_dwColorWrite & COLORMASK_ALPHA) - { - if (curvb.fba.fba) - { - ProcessFBA(curvb, pfragment); - } - else if (s_bDestAlphaTest && bCanRenderStencil) - { - // finally make sure all entries are 1 when the dest alpha >= 0x80 (if fba is 1, this is already the case) - ProcessStencil(curvb); - } - } - - // if (bDestAlphaColor == 1) - // { - // // need to reset the dest colors to their original counter parts - // //ZZLog::Warn_Log("Need to reset dest alpha color"); - // } -} - -inline void AlphaSaveTarget(VB& curvb) -{ -#ifdef _DEBUG - return; // Do nothing - -//#ifdef _WIN32 -// CreateDirectory("frames", NULL); -//#else -// char* strdir=""; -// sprintf(strdir, "mkdir %s", "frames"); -// system(strdir); -//#endif -// char str[255]; - -// Needs a # after frame to work properly. -// sprintf(str, "frames/frame.tga"); - -// //FB::Unbind(); // switch to the backbuffer -// //glFlush(); -// //SaveTexture("tex.jpg", GL_TEXTURE_RECTANGLE_NV, curvb.prndr->ptex, RW(curvb.prndr->fbw), RH(curvb.prndr->fbh)); -// SaveRenderTarget(str, RW(curvb.prndr->fbw), RH(curvb.prndr->fbh), 0); -#endif -} - -inline void FlushUndoFiter(u32 dwFilterOpts) -{ - if (dwFilterOpts) - { - // undo filter changes (binding didn't change) - if (dwFilterOpts & 1) glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - if (dwFilterOpts & 2) glTexParameteri(GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } -} - -// This is the most important function! It draws all collected info onscreen. -void Flush(int context) -{ - FUNCLOG - VB& curvb = vb[context]; - const pixTest curtest = curvb.test; -#ifdef GLSL4_API - g_cs.set_context(context); -#endif - - if (FlushInitialTest(curvb, curtest, context)) return; - - VisualBufferMessage(context); - - GL_REPORT_ERRORD(); - - CRenderTarget* ptextarg = FlushGetTarget(curvb); - - SwitchWireframeOff(); - FlushDoContextJob(curvb, context); - - u32 dwUsingSpecialTesting = 0, dwFilterOpts = 0; - int exactcolor = FlushGetExactcolor(curtest); - - FRAGMENTSHADER* pfragment = FlushRendererStage(curvb, dwFilterOpts, ptextarg, exactcolor, context); - - bCanRenderStencil = AlphaCanRenderStencil(curvb); - - if (curtest.date || gs.pabe) SetDestAlphaTest(); - - AlphaSetStencil(); - AlphaSetDepthTest(curvb, curtest, pfragment); // Error! - SetAlphaTest(curtest); - - u32 oldabe = AlphaSetupBlendTest(curvb); // Unavoidable - - // needs to be before RenderAlphaTest - AlphaRenderFBA(curvb, pfragment); - - dwUsingSpecialTesting = AlphaRenderAlpha(curvb, curtest, pfragment, exactcolor); // Unavoidable - AlphaRenderStencil(curvb, dwUsingSpecialTesting); - AlphaTest(curvb); // Unavoidable - AlphaPabe(curvb, pfragment, exactcolor); - AlphaFailureTestJob(curvb, curtest, pfragment, exactcolor, oldabe); - AlphaSpecialTesting(curvb, pfragment, dwUsingSpecialTesting, exactcolor); - AlphaDestinationTest(curvb, pfragment); - AlphaSaveTarget(curvb); - - GL_REPORT_ERRORD(); - - FlushUndoFiter(dwFilterOpts); - - ppf += curvb.nCount + 0x100000; - - curvb.nCount = 0; - curvb.curprim.abe = oldabe; - - SwitchWireframeOn(); - - GL_REPORT_ERRORD(); -} - -void FlushBoth() -{ - Flush(0); - Flush(1); -} - -// Often called for several reasons -// Call flush if renderer or depth target is equal to ptr -void FlushIfNecesary(void* ptr) -{ - if (vb[0].prndr == ptr || vb[0].pdepth == ptr) Flush(0); - if (vb[1].prndr == ptr || vb[1].pdepth == ptr) Flush(1); -} - -inline void RenderFBA(const VB& curvb, FRAGMENTSHADER* pfragment) -{ - // add fba to all pixels - GL_STENCILFUNC(GL_ALWAYS, STENCIL_FBA, 0xff); - glStencilMask(STENCIL_CLEAR); - glStencilOp(GL_ZERO, GL_KEEP, GL_REPLACE); - - glDisable(GL_DEPTH_TEST); - glDepthMask(0); - glColorMask(0, 0, 0, 0); - - if (s_bWriteDepth) ResetRenderTarget(1); - - SetShaderCaller("RenderFBA"); - - glEnable(GL_ALPHA_TEST); - - glAlphaFunc(GL_GEQUAL, 1); - - float4 v(1,2,0,0); - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - Draw(curvb); - - SetAlphaTest(curvb.test); - - // reset (not necessary) - GL_COLORMASK(s_dwColorWrite); - - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - if (!curvb.zbuf.zmsk) - { - glDepthMask(1); - - assert(curvb.pdepth != NULL); - - if (s_bWriteDepth) curvb.pdepth->SetRenderTarget(1); - } - - GL_ZTEST(curvb.test.zte); -} - -__forceinline void RenderAlphaTest(const VB& curvb, FRAGMENTSHADER* pfragment ) -{ - if (!g_bUpdateStencil) return; - - if ((curvb.test.ate) && (curvb.test.afail == AFAIL_FB_ONLY)) glDisable(GL_ALPHA_TEST); - - glDepthMask(0); - - glColorMask(0, 0, 0, 0); - - if (s_bWriteDepth) ResetRenderTarget(1); - - SetShaderCaller("RenderAlphaTest"); - - float4 v(1,2,0,0); - - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - // or a 1 to the stencil buffer wherever alpha passes - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - s_stencilfunc = GL_ALWAYS; - - glEnable(GL_STENCIL_TEST); - - if (!s_bDestAlphaTest) - { - // clear everything - s_stencilref = 0; - glStencilMask(STENCIL_CLEAR); - glDisable(GL_ALPHA_TEST); - GL_STENCILFUNC_SET(); - Draw(curvb); - - if (curvb.test.ate && curvb.test.afail != AFAIL_FB_ONLY && USEALPHATESTING) glEnable(GL_ALPHA_TEST); - } - - if (curvb.test.ate && curvb.test.atst > ATST_ALWAYS && curvb.test.aref > 0x80) - { - v = float4(1,1,0,0); - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - glAlphaFunc(g_dwAlphaCmp[curvb.test.atst], AlphaReferedValue(curvb.test.aref)); - } - - s_stencilref = STENCIL_SPECIAL; - - glStencilMask(STENCIL_SPECIAL); - GL_STENCILFUNC_SET(); - glDisable(GL_DEPTH_TEST); - - Draw(curvb); - - if (curvb.test.zte) glEnable(GL_DEPTH_TEST); - - GL_ALPHATEST(0); - - GL_COLORMASK(s_dwColorWrite); - - if (!curvb.zbuf.zmsk) - { - glDepthMask(1); - - // set rt next level - - if (s_bWriteDepth) curvb.pdepth->SetRenderTarget(1); - } -} - -inline void RenderStencil(const VB& curvb, u32 dwUsingSpecialTesting) -{ - //NOTE: This stencil hack for dest alpha testing ONLY works when - // the geometry in one DrawPrimitive call does not overlap - - // mark the stencil buffer for the new data's bits (mark 4 if alpha is >= 0xff) - // mark 4 if a pixel was written (so that the stencil buf can be changed with new values) - glStencilMask(STENCIL_PIXELWRITE); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - s_stencilmask = (curvb.test.date ? STENCIL_ALPHABIT : 0) | (dwUsingSpecialTesting ? STENCIL_SPECIAL : 0); - s_stencilfunc = s_stencilmask ? GL_EQUAL : GL_ALWAYS; - - s_stencilref = curvb.test.date * curvb.test.datm | STENCIL_PIXELWRITE | (dwUsingSpecialTesting ? STENCIL_SPECIAL : 0); - GL_STENCILFUNC_SET(); -} - -inline void ProcessStencil(const VB& curvb) -{ - assert(!curvb.fba.fba); - - // set new alpha bit - glStencilMask(STENCIL_ALPHABIT); - GL_STENCILFUNC(GL_EQUAL, STENCIL_PIXELWRITE, STENCIL_PIXELWRITE | STENCIL_FBA); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - - glDisable(GL_DEPTH_TEST); - glDepthMask(0); - glColorMask(0, 0, 0, 0); - - if (s_bWriteDepth) ResetRenderTarget(1); - - GL_ALPHATEST(0); - - SetShaderCaller("ProcessStencil"); - - ZZshSetPixelShader(ppsOne.prog); - Draw(curvb); - - // process when alpha >= 0xff - GL_STENCILFUNC(GL_EQUAL, STENCIL_PIXELWRITE | STENCIL_FBA | STENCIL_ALPHABIT, STENCIL_PIXELWRITE | STENCIL_FBA); - Draw(curvb); - - // clear STENCIL_PIXELWRITE bit - glStencilMask(STENCIL_CLEAR); - - GL_STENCILFUNC(GL_ALWAYS, 0, STENCIL_PIXELWRITE | STENCIL_FBA); - Draw(curvb); - - // restore state - GL_COLORMASK(s_dwColorWrite); - - if (curvb.test.ate && USEALPHATESTING) glEnable(GL_ALPHA_TEST); - - if (!curvb.zbuf.zmsk) - { - glDepthMask(1); - - if (s_bWriteDepth) - { - assert(curvb.pdepth != NULL); - curvb.pdepth->SetRenderTarget(1); - } - } - - GL_ZTEST(curvb.test.zte); - - glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); -} - -__forceinline void ProcessFBA(const VB& curvb, FRAGMENTSHADER* pfragment ) -{ - if ((curvb.frame.fbm&0x80000000)) return; - - // add fba to all pixels that were written and alpha was less than 0xff - glStencilMask(STENCIL_ALPHABIT); - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - GL_STENCILFUNC(GL_EQUAL, STENCIL_FBA | STENCIL_PIXELWRITE | STENCIL_ALPHABIT, STENCIL_PIXELWRITE | STENCIL_FBA); - glDisable(GL_DEPTH_TEST); - - glDepthMask(0); - glColorMask(0, 0, 0, 1); - - if (s_bWriteDepth) ResetRenderTarget(1); - - SetShaderCaller("ProcessFBA"); - - // processes the pixels with ALPHA < 0x80*2 - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_LEQUAL, 1); - - // add 1 to dest - GL_BLEND_ALPHA(GL_ONE, GL_ONE); - GL_BLENDEQ_ALPHA(GL_FUNC_ADD); - - // FIXME: Seem dangerous - // float f = 1; - // ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, &f, "g_fOneColor"); - float4 v = float4(1,1,0,0); - ZZshSetParameter4fv(pfragment->prog, pfragment->sOneColor, v, "g_fOneColor"); - - ZZshSetPixelShader(ppsOne.prog); - Draw(curvb); - glDisable(GL_ALPHA_TEST); - - // reset bits - glStencilMask(STENCIL_CLEAR); - GL_STENCILFUNC(GL_GREATER, 0, STENCIL_PIXELWRITE | STENCIL_FBA); - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - Draw(curvb); - - if ((curvb.test.atst != ATST_NEVER) && USEALPHATESTING) - { - glEnable(GL_ALPHA_TEST); - glAlphaFunc(g_dwAlphaCmp[curvb.test.atst], AlphaReferedValue(curvb.test.aref)); - } - - // restore (SetAlphaVariables) - GL_BLEND_ALPHA(GL_ONE, GL_ZERO); - - if (vAlphaBlendColor.y < 0) GL_BLENDEQ_ALPHA(GL_FUNC_REVERSE_SUBTRACT); - - // reset (not necessary) - GL_COLORMASK(s_dwColorWrite); - - if (!curvb.zbuf.zmsk) - { - glDepthMask(1); - - if (s_bWriteDepth) curvb.pdepth->SetRenderTarget(1); - } - - GL_ZTEST(curvb.test.zte); -} - -void SetContextTarget(int context) -{ - FUNCLOG - VB& curvb = vb[context]; - GL_REPORT_ERRORD(); - - if (curvb.prndr == NULL) - curvb.prndr = s_RTs.GetTarg(curvb.frame, 0, get_maxheight(curvb.gsfb.fbp, curvb.gsfb.fbw, curvb.gsfb.psm)); - - // make sure targets are valid - if (curvb.pdepth == NULL) - { - frameInfo f; - f.fbp = curvb.zbuf.zbp; - f.fbw = curvb.frame.fbw; - f.fbh = curvb.prndr->fbh; - f.psm = curvb.zbuf.psm; - f.fbm = 0; - curvb.pdepth = (CDepthTarget*)s_DepthRTs.GetTarg(f, CRenderTargetMngr::TO_DepthBuffer | CRenderTargetMngr::TO_StrictHeight | - (curvb.zbuf.zmsk ? CRenderTargetMngr::TO_Virtual : 0), get_maxheight(curvb.zbuf.zbp, curvb.gsfb.fbw, 0)); - } - - assert(curvb.prndr != NULL && curvb.pdepth != NULL); - - if (curvb.pdepth->fbh != curvb.prndr->fbh) ZZLog::Debug_Log("(curvb.pdepth->fbh(0x%x) != curvb.prndr->fbh(0x%x))", curvb.pdepth->fbh, curvb.prndr->fbh); - //assert(curvb.pdepth->fbh == curvb.prndr->fbh); - - if (curvb.pdepth->status & CRenderTarget::TS_Virtual) - { - - if (!curvb.zbuf.zmsk) - { -#ifdef NDEBUG - s_DepthRTs.Promote(curvb.pdepth->fbp | (curvb.pdepth->fbw << 16)); -#else - CRenderTarget* ptemp = s_DepthRTs.Promote(curvb.pdepth->fbp | (curvb.pdepth->fbw << 16)); - assert(ptemp == curvb.pdepth); -#endif - } - else - { - curvb.pdepth->status &= ~CRenderTarget::TS_NeedUpdate; - } - } - - //bool bSetTarg = 1; - - if (curvb.pdepth->status & CRenderTarget::TS_NeedUpdate) - { - assert(!(curvb.pdepth->status & CRenderTarget::TS_Virtual)); - - // don't update if virtual - curvb.pdepth->Update(context, curvb.prndr); - //bSetTarg = 0; - } - - GL_REPORT_ERRORD(); - - if (curvb.prndr->status & CRenderTarget::TS_NeedUpdate) - { - /* if(bSetTarg) { - * ZZLog::Debug_Log( " Here "); - * if(s_bWriteDepth) { - * curvb.pdepth->SetRenderTarget(1); - * curvb.pdepth->SetDepthStencilSurface(); - * } - * else - * curvb.pdepth->SetDepthStencilSurface(); - * }*/ - curvb.prndr->Update(context, curvb.pdepth); - } - else - { - - //if( (vb[0].prndr != vb[1].prndr && vb[!context].bVarsSetTarg) || !vb[context].bVarsSetTarg ) - curvb.prndr->SetRenderTarget(0); - //if( bSetTarg && ((vb[0].pdepth != vb[1].pdepth && vb[!context].bVarsSetTarg) || !vb[context].bVarsSetTarg) ) - curvb.pdepth->SetDepthStencilSurface(); - - if (conf.mrtdepth && IsWriteDepth()) curvb.pdepth->SetRenderTarget(1); - if (s_ptexCurSet[0] == curvb.prndr->ptex) s_ptexCurSet[0] = 0; - if (s_ptexCurSet[1] == curvb.prndr->ptex) s_ptexCurSet[1] = 0; - - curvb.prndr->SetViewport(); - } - - curvb.prndr->SetTarget(curvb.frame.fbp, curvb.scissor, context); - - if ((curvb.zbuf.zbp - curvb.pdepth->fbp) != (curvb.frame.fbp - curvb.prndr->fbp) && curvb.test.zte) - ZZLog::Warn_Log("Frame and zbuf not aligned."); - - curvb.bVarsSetTarg = true; - - if (vb[!context].prndr != curvb.prndr) vb[!context].bVarsSetTarg = false; - -#ifdef _DEBUG - // These conditions happen often enough that we'll just warn about it rather then abort in Debug mode. - if (curvb.prndr->status & CRenderTarget::TS_NeedUpdate) - { - ZZLog::Debug_Log("In SetContextTarget, prndr is ending with TS_NeedUpdate set."); - } - - if (curvb.pdepth != NULL && (curvb.pdepth->status & CRenderTarget::TS_NeedUpdate)) - { - ZZLog::Debug_Log("In SetContextTarget, pdepth is ending with TS_NeedUpdate set."); - } -#endif - - GL_REPORT_ERRORD(); -} - - -void SetTexInt(int context, FRAGMENTSHADER* pfragment, int settexint) -{ - FUNCLOG - - if (settexint) - { - tex0Info& tex0 = vb[context].tex0; - - if (vb[context].bVarsTexSync) { - SetTexVariablesInt(context, GetTexFilter(vb[context].tex1), tex0, true, pfragment, s_bForceTexFlush); - } else { - SetTexVariablesInt(context, GetTexFilter(vb[context].tex1), tex0, false, pfragment, s_bForceTexFlush); - - INC_TEXVARS(); - } - vb[context].bVarsTexSync = true; - } - else - { - vb[context].bVarsTexSync = false; - } -} - -// clamp relies on texture width -void SetTexClamping(int context, FRAGMENTSHADER* pfragment) -{ - FUNCLOG - SetShaderCaller("SetTexClamping"); - clampInfo* pclamp = &vb[context].clamp; - float4 v, v2; - v.x = v.y = 0; - u32* ptex = vb[context].ptexClamp; - ptex[0] = ptex[1] = 0; - - float fw = vb[context].tex0.tw ; - float fh = vb[context].tex0.th ; - - switch (pclamp->wms) - { - case CLAMP_REPEAT: - v2.x = -1e10; - v2.z = 1e10; - break; - - case CLAMP_CLAMP: // pclamp - // suikoden5 movie text - v2.x = 0; - v2.z = 1 - 0.5f / fw; - break; - - case CLAMP_REGION_CLAMP: // reg pclamp - v2.x = (pclamp->minu + 0.5f) / fw; - v2.z = (pclamp->maxu - 0.5f) / fw; - break; - - case CLAMP_REGION_REPEAT: // region rep x - v.x = 0.9999f; - v.z = (float)fw; - v2.x = (float)GPU_TEXMASKWIDTH / fw; - v2.z = pclamp->maxu / fw; - int correctMinu = pclamp->minu & (~pclamp->maxu); // (A && B) || C == (A && (B && !C)) + C - - if (correctMinu != g_PrevBitwiseTexX) - { - g_PrevBitwiseTexX = correctMinu; - ptex[0] = s_BitwiseTextures.GetTex(correctMinu, 0); - } - - break; - } - - switch (pclamp->wmt) - { - - case CLAMP_REPEAT: - v2.y = -1e10; - v2.w = 1e10; - break; - - case CLAMP_CLAMP: // pclamp - // suikoden5 movie text - v2.y = 0; - v2.w = 1 - 0.5f / fh; - break; - - case CLAMP_REGION_CLAMP: // reg pclamp - v2.y = (pclamp->minv + 0.5f) / fh; - v2.w = (pclamp->maxv - 0.5f) / fh; - break; - - case CLAMP_REGION_REPEAT: // region rep y - v.y = 0.9999f; - v.w = (float)fh; - v2.y = (float)GPU_TEXMASKWIDTH / fh; - v2.w = pclamp->maxv / fh; - int correctMinv = pclamp->minv & (~pclamp->maxv); // (A && B) || C == (A && (B && !C)) + C - - if (correctMinv != g_PrevBitwiseTexY) - { - g_PrevBitwiseTexY = correctMinv; - ptex[1] = s_BitwiseTextures.GetTex(correctMinv, ptex[0]); - } - break; - } - - if (pfragment->fTexWrapMode != 0) - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexWrapMode, v, "g_fTexWrapMode"); - - if (pfragment->fClampExts != 0) - ZZshSetParameter4fv(pfragment->prog, pfragment->fClampExts, v2, "g_fClampExts"); - -} - -int CheckTexArray[4][2][2][2] = {{{{0, }}}}; -void SetTexVariables(int context, FRAGMENTSHADER* pfragment) -{ - FUNCLOG - - if (!vb[context].curprim.tme) return; - - assert(!vb[context].bNeedTexCheck); - - float4 v, v2; - - tex0Info& tex0 = vb[context].tex0; - - //float fw = (float)tex0.tw; - //float fh = (float)tex0.th; - - if (!vb[context].bTexConstsSync) - { - SetShaderCaller("SetTexVariables"); - - // alpha and texture highlighting - float4 valpha, valpha2; - - // if clut, use the frame format - int psm = PIXEL_STORAGE_FORMAT(tex0); - -// ZZLog::Error_Log( "A %d psm, is-clut %d. cpsm %d | %d %d", psm, PSMT_ISCLUT(psm), tex0.cpsm, tex0.tfx, tex0.tcc ); - - /* tcc -- Texture Color Component 0=RGB, 1=RGBA + use Alpha from TEXA reg when not in PSM - * tfx -- Texture Function (0=modulate, 1=decal, 2=hilight, 3=hilight2) - * - * valpha2 = 0 0 2 1 0 0 2 1 - * 1 0 0 0 1 1 0 0 - * 0 0 2 0 0 1 2 0 - * 0 0 2 0 0 1 2 0 - * - * 0 1,!nNeed 1, psm=2, 10 1, psm=1 - * valpha = 0 0 0 1 0 2 0 0 2ta0 2ta1-2ta0 0 0 2ta0 0 0 0 - * 0 0 0 1 0 1 0 0 ta0 ta1-ta0 0 0 ta0 0 0 0 - * 0 0 1 1 0 1 1 1 1 1 ta0 0 1 1 - * 0 0 1 1 0 1 1 0 1 0 ta0 0 1 0 - */ - - valpha2.x = (tex0.tfx == TFX_DECAL); - valpha2.y = (tex0.tcc == 1) && (tex0.tfx != TFX_MODULATE); - valpha2.z = (tex0.tfx != TFX_DECAL) * 2; - valpha2.w = (tex0.tfx == TFX_MODULATE); - - if (tex0.tcc && PSMT_ALPHAEXP(psm)) - { - valpha.x = (gs.texa.ta[0] / 255.0f) * (1 + (tex0.tfx == TFX_MODULATE)); - if (psm == PSMCT24) - { - valpha.y = 0; - } - else - { - valpha.y = ((gs.texa.ta[1] - gs.texa.ta[0]) / 255.0f) * (1 + (tex0.tfx == TFX_MODULATE)); - } - } - else - { - valpha.x = 0; - valpha.y = (!!tex0.tcc) * (1 + (tex0.tfx == TFX_MODULATE)); - } - - valpha.z = (tex0.tfx == TFX_HIGHLIGHT2); - valpha.w = (tex0.tcc == 0) || (tex0.tcc == 1 && tex0.tfx == TFX_HIGHLIGHT); - - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexAlpha, valpha, "g_fTexAlpha"); - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexAlpha2, valpha2, "g_fTexAlpha2"); - - if (IsAlphaTestExpansion(tex0)) - { - float4 vblack; - vblack.x = vblack.y = vblack.z = vblack.w = 10; - if (tex0.tcc && gs.texa.aem && psm == PSMCT24) vblack.w = 0; - ZZshSetParameter4fv(pfragment->prog, pfragment->fTestBlack, vblack, "g_fTestBlack"); - } - - SetTexClamping(context, pfragment); - - vb[context].bTexConstsSync = true; - } - - if (s_bTexFlush) - { - if (PSMT_ISCLUT(tex0.psm)) - texClutWrite(context); - else - s_bTexFlush = false; - } -} - -void SetTexVariablesInt(int context, int bilinear, const tex0Info& tex0, bool CheckVB, FRAGMENTSHADER* pfragment, int force) -{ - FUNCLOG - float4 v; - CMemoryTarget* pmemtarg = g_MemTargs.GetMemoryTarget(tex0, 1); - - assert( pmemtarg != NULL && pfragment != NULL && pmemtarg->ptex != NULL); - if (pmemtarg == NULL || pfragment == NULL || pmemtarg->ptex == NULL) - { - ZZLog::Error_Log("SetTexVariablesInt error."); - return; - } - - if (CheckVB && vb[context].pmemtarg == pmemtarg) return; - - SetShaderCaller("SetTexVariablesInt"); - - float fw = (float)tex0.tw; - float fh = (float)tex0.th; - - bool bUseBilinear = bilinear > 1 || (bilinear && conf.bilinear); - - if (bUseBilinear) - { - v.x = (float)fw; - v.y = (float)fh; - v.z = 1.0f / (float)fw; - v.w = 1.0f / (float)fh; - - ZZshSetParameter4fvWithRetry(&pfragment->fRealTexDims, pfragment->prog, v, "g_fRealTexDims"); - } - - if (m_Blocks[tex0.psm].bpp == 0) - { - ZZLog::Error_Log("Undefined tex psm 0x%x!", tex0.psm); - return; - } - - const BLOCK& b = m_Blocks[tex0.psm]; - - float fbw = (float)tex0.tbw; - - float4 vTexDims; - - vTexDims.x = b.vTexDims.x * (fw); - vTexDims.y = b.vTexDims.y * (fh); - vTexDims.z = (float)BLOCK_TEXWIDTH * (0.002f / 64.0f + 0.01f / 128.0f); - vTexDims.w = (float)BLOCK_TEXHEIGHT * 0.1f / 512.0f; - - if (bUseBilinear) - { - vTexDims.x *= 1 / 128.0f; - vTexDims.y *= 1 / 512.0f; - vTexDims.z *= 1 / 128.0f; - vTexDims.w *= 1 / 512.0f; - } - - float g_fitexwidth = g_fiGPU_TEXWIDTH / (float)pmemtarg->widthmult; - - //float g_texwidth = GPU_TEXWIDTH*(float)pmemtarg->widthmult; - - float fpage = tex0.tbp0 * (64.0f * g_fitexwidth);// + 0.05f * g_fitexwidth; - float fpageint = floorf(fpage); - //int starttbp = (int)fpage; - - // 2048 is number of words to span one page - //float fblockstride = (2048.0f /(float)(g_texwidth*BLOCK_TEXWIDTH)) * b.vTexDims.x * fbw; - - float fblockstride = (2048.0f / (float)(GPU_TEXWIDTH * (float)pmemtarg->widthmult * BLOCK_TEXWIDTH)) * b.vTexDims.x * fbw; - - assert(fblockstride >= 1.0f); - - v.x = (float)(2048 * g_fitexwidth); - v.y = fblockstride; - v.z = g_fBlockMult / (float)pmemtarg->widthmult; - v.w = fpage - fpageint ; - - if (g_fBlockMult > 1) - { - // make sure to divide by mult (since the G16R16 texture loses info) - v.z *= b.bpp * (1 / 32.0f); - } - - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexDims, vTexDims, "g_fTexDims"); - -// ZZshSetParameter4fv(pfragment->fTexBlock, b.vTexBlock, "g_fTexBlock"); // I change it, and it's working. Seems casting from float4 to float[4] is ok. - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexBlock, &b.vTexBlock.x, "g_fTexBlock"); - ZZshSetParameter4fv(pfragment->prog, pfragment->fTexOffset, v, "g_fTexOffset"); - - // get hardware texture dims - //int texheight = pmemtarg->texH; - int texwidth = pmemtarg->texW; - - v.y = 1.0f; - v.x = (fpageint - (float)pmemtarg->realy / (float)pmemtarg->widthmult + 0.5f);//*v.y; - v.z = (float)texwidth; - - /* if( !(g_nPixelShaderVer & SHADER_ACCURATE) || bUseBilinear ) { - if (tex0.psm == PSMT4 ) - v.w = 0.0f; - else - v.w = 0.25f; - } - else - v.w = 0.5f;*/ - v.w = 0.5f; - - ZZshSetParameter4fv(pfragment->prog, pfragment->fPageOffset, v, "g_fPageOffset"); - - if (force) - s_ptexCurSet[context] = pmemtarg->ptex->tex; - else - s_ptexNextSet[context] = pmemtarg->ptex->tex; - - vb[context].pmemtarg = pmemtarg; - - vb[context].bVarsTexSync = false; -} - -#if 0 -#define SET_ALPHA_COLOR_FACTOR(sign) \ -{ \ - switch(a.c) \ - { \ - case 0: \ - vAlphaBlendColor.y = (sign) ? 2.0f*255.0f/256.0f : -2.0f*255.0f/256.0f; \ - s_srcalpha = GL_ONE; \ - s_alphaeq = (sign) ? GL_FUNC_ADD : GL_FUNC_REVERSE_SUBTRACT; \ - break; \ - \ - case 1: \ - /* if in 24 bit mode, dest alpha should be one */ \ - switch(PSMT_BITMODE(vb[icurctx].prndr->psm)) \ - { \ - case 0: \ - bDestAlphaColor = (a.d!=2)&&((a.a==a.d)||(a.b==a.d)); \ - break; \ - \ - case 1: \ - /* dest alpha should be one */ \ - bDestAlphaColor = 2; \ - break; \ - /* default: 16bit surface, so returned alpha is ok */ \ - } \ - break; \ - \ - case 2: \ - bNeedBlendFactorInAlpha = true; /* should disable alpha channel writing */ \ - vAlphaBlendColor.y = 0; \ - vAlphaBlendColor.w = (sign) ? (float)a.fix * (2.0f/255.0f) : (float)a.fix * (-2.0f/255.0f); \ - usec = 0; /* change so that alpha comes from source*/ \ - break; \ - } \ -} - -#if 0 -if( a.fix <= 0x80 ) { \ - dwTemp = (a.fix*2)>255?255:(a.fix*2); \ - dwTemp = dwTemp|(dwTemp<<8)|(dwTemp<<16)|0x80000000; \ - ZZLog::Debug_Log("bfactor: %8.8x", dwTemp); \ - glBlendColorEXT(dwTemp); \ - } \ - else { \ - -#endif - -//void ResetAlphaVariables() { -// FUNCLOG -//} - -inline void NeedFactor(int w) -{ - if (bDestAlphaColor == 2) - { - bNeedBlendFactorInAlpha = (w + 1) ? true : false; - vAlphaBlendColor.y = 0; - vAlphaBlendColor.w = (float)w; - } -} -#endif - -template -__forceinline int Set_Alpha_Color_Factor(const alphaInfo& a) -{ - int usec = 0; - switch(a.c) - { - case 0: - usec = 0; - /* Note: there are already default value when sign is 1. So only change them - * when sign is 0 - */ - if (!SIGN) { - vAlphaBlendColor.y = -2.0f*255.0f/256.0f; - s_alphaeq = GL_FUNC_REVERSE_SUBTRACT; - } - break; - case 1: - usec = 1; - /* if in 24 bit mode, dest alpha should be one */ - if(PSMT_BITMODE(vb[icurctx].prndr->psm) == 1) { - /* dest alpha should be one */ - ZZLog::Debug_Log("Alpha on a 24 bits framebuffer, good place to check the value of blend"); - // FIMXE: the array constains GL_SRC_ALPHA and GL_ONE_MINUS_SRC_ALPHA - // It will love a test with GL_ONE and GL_ZERO - usec = 4; - - // need a factor correction - if (NEED_FACTOR) { - bNeedBlendFactorInAlpha = (SIGN) ? true : false; - vAlphaBlendColor.y = 0; - vAlphaBlendColor.w = (SIGN) ? 1.0 : -1.0; - } - } - break; - case 2: - usec = 0; /* change so that alpha comes from source*/ - bNeedBlendFactorInAlpha = true; /* should disable alpha channel writing */ - vAlphaBlendColor.y = 0; - vAlphaBlendColor.w = (SIGN) ? (float)a.fix * (2.0f/255.0f) : (float)a.fix * (-2.0f/255.0f); - break; - - default: - assert(0); - } - return usec; -} - -//static int CheckArray[48][2] = {{0,}}; - -void SetAlphaVariables(const alphaInfo& a) -{ - FUNCLOG - bool alphaenable = true; - - // TODO: negative color when not clamping turns to positive??? - // g_vars._bAlphaState = 0; // set all to zero - bNeedBlendFactorInAlpha = false; - // b2XAlphaTest = 1; - //u32 dwTemp = 0xffffffff; - // bDestAlphaColor = 0; - - // default - s_srcalpha = GL_ONE; - s_dstalpha = GL_ZERO; - s_alphaeq = GL_FUNC_ADD; - s_rgbeq = GL_FUNC_ADD; - -// s_alphaInfo = a; - vAlphaBlendColor = float4(1, 2 * 255.0f / 256.0f, 0, 0); - // u32 usec = a.c; - u32 usec; - const bool POS_A = true; - const bool NEG_A = false; - const bool NEED_FACTOR = true; - - - /* - * Alpha table - * a + b + d - * S D - * 0 a -a 1 | 0 0 0 - * 1 0 0 0 | a -a 1 - * 2 0 0 0 | 0 0 0 - * - * d = 0 Cs - * a b 0 Cs 1 Cd 2 0 - * | | - * 0 000: a+-a+ 1 | 0+ 0+ 0 = 1 | 010: a+ 0+ 1 | 0+-a+ 0 = 1-(-a)(+)(-a) | 020: a+ 0+ 1 | 0+ 0+ 0 = 1-(-a) (+) 0 - * 1 100: 0+-a+ 1 | a+ 0+ 0 = 1-a (+) a | 110: 0+ 0+ 1 | a+-a+ 0 = 1 | 120: 0+ 0+ 1 | a+ 0+ 0 = 1 (+) a - * 2 200: 0+-a+ 1 | 0+ 0+ 0 = 1-a (+) 0 | 210: 0+ 0+ 1 | 0+-a+ 0 = 1 (-) a | 220: 0+ 0+ 1 | 0+ 0+ 0 = 1 - * - * d = 1 Cd - * 0 | 1 | 2 - * 0 001: a+-a+ 0 | 0+ 0+ 1 = 0 (+) 1 | 011: a+ 0+ 0 | 0+-a+ 1 = a (+) 1-a | 021: a+ 0+ 0 | 0+ 0+ 1 = a (+) 1 - * 1 101: 0+-a+ 0 | a+ 0+ 1 = (-a)(+) 1-(-a) | 111: 0+ 0+ 0 | a+-a+ 1 = 0 (+) 1 | 121: 0+ 0+ 0 | a+ 0+ 1 = 0 (+) 1-(-a) - * 2 201: 0+-a+ 0 | 0+ 0+ 1 = a (R-)1 | 211: 0+ 0+ 0 | 0+-a+ 1 = 0 (+) 1-a | 221: 0+ 0+ 0 | 0+ 0+ 1 = 0 (+) 1 - * - * d = 2 0 - * 0 | 1 | 2 - * 0 002: a+-a+ 0 | 0+ 0+ 0 = 0 | 012: a+ 0+ 0 | 0+-a+ 0 = a (-) a | 022: a+ 0+ 0 | 0+ 0+ 0 = a (+) 0 - * 1 102: 0+-a+ 0 | a+ 0+ 0 = a (R-) a | 112: 0+ 0+ 0 | a+-a+ 0 = 0 | 122: 0+ 0+ 0 | a+ 0+ 0 = 0 (+) a - * 2 202: 0+-a+ 0 | 0+ 0+ 0 = a (R-) 0 | 212: 0+ 0+ 0 | 0+-a+ 0 = 0 (-) a | 222: 0+ 0+ 0 | 0+ 0+ 0 = 0 - * - * Formulae is: (a-b) * (c /128) + d - * 0 1 2 - * a Cs Cd 0 - * b Cs Cd 0 - * c As Ad ALPHA.FIX - * d Cs Cd 0 - * - * We want to emulate Cs * F1(alpha) + Cd * F2(alpha) by OpenGl blending: (Cs * Ss (+,-,R-) Cd * Sd) - * SET_ALPHA_COLOR_FACTOR(sign) set Set A (as As>>7, Ad>>7 or FIX>>7) with sign. - * So we could use 1+a as one_minus_alpha and -a as alpha. - * - */ - int code = (a.a * 16) + (a.b * 4) + a.d ; - -// #define one_minus_alpha (bDestAlphaColor == 2) ? GL_ONE_MINUS_SRC_ALPHA : blendinvalpha[usec] -// #define alpha (bDestAlphaColor == 2) ? GL_SRC_ALPHA : blendalpha[usec] -// #define one (bDestAlphaColor == 2) ? GL_ONE : blendalpha[usec] -// #define zero (bDestAlphaColor == 2) ? GL_ZERO : blendinvalpha[usec] - -#define one_minus_alpha blendinvalpha[usec] -#define alpha blendalpha[usec] - - switch (code) - { - - case 0: // 000 // Cs -- nothing changed - case 20: // 110 = 16+4=20 // Cs - case 40: // 220 = 32+8=40 // Cs - { - alphaenable = false; - break; - } - - case 2: //002 // 0 -- should be zero - case 22: //112 // 0 - case 42: //222 = 32+8+2 =42 // 0 - { - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = GL_ZERO; - break; - } - - case 1: //001 // Cd -- Should be destination alpha - case 21: //111, // Cd -- 0*Source + 1*Desrinarion - case 41: //221 = 32+8+1=41 // Cd -- - { - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = GL_ONE; - break; - } - - case 4: // 010 // (Cs-Cd)*A+Cs = Cs * (A + 1) - Cd * A - { - // bAlphaClamping = 3; - // SET_ALPHA_COLOR_FACTOR(0); // a = -A - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; // Cs*(1-a)+Cd*a - s_srcrgb = one_minus_alpha ; - s_dstrgb = alpha; - - // NeedFactor(-1); - break; - } - - case 5: // 011 // (Cs-Cd)*A+Cs = Cs * A + Cd * (1-A) - { - // bAlphaClamping = 3; // all testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = alpha; - s_dstrgb = one_minus_alpha; - - // NeedFactor(1); - break; - } - - case 6: //012 // (Cs-Cd)*A = Cs*A - Cd*A - { - // bAlphaClamping = 3; - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_SUBTRACT; - s_srcrgb = alpha; - s_dstrgb = alpha; - - break; - } - - case 8: //020 // Cs*A+Cs = Cs * (1+A) - { - // bAlphaClamping = 2; // max testing - // SET_ALPHA_COLOR_FACTOR(0); // Zeydlitz change this! a = -A - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = one_minus_alpha; // Cs*(1-a). - s_dstrgb = GL_ZERO; - -// NeedFactor(1); - break; - } - - case 9: //021 // Cs*A+Cd - { - // bAlphaClamping = 2; // max testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = alpha; // ZZ change it too. - s_dstrgb = GL_ONE; - break; - } - - case 10: //022 // Cs*A - { - // bAlphaClamping = 2; // max testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = alpha; - s_dstrgb = GL_ZERO; - break; - } - - case 16: //100 // (Cd-Cs)*A + Cs = Cd*A + Cs*(1-A) - { - // bAlphaClamping = 3; - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = one_minus_alpha; - s_dstrgb = alpha; - - // NeedFactor(1); - break; - } - - case 17: //101 // (Cd-Cs)*A + Cd = Cd*(A+1) - A*Cs - { - // bAlphaClamping = 3; // all testing - // SET_ALPHA_COLOR_FACTOR(0); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = alpha; - s_dstrgb = one_minus_alpha; - - // NeedFactor(-1); - break; - } - - case 18: //102 // (Cd-Cs)*A = Cd*A - Cs*A - { - // bAlphaClamping = 3; - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_REVERSE_SUBTRACT; - s_srcrgb = alpha; - s_dstrgb = alpha; - - break; - } - - case 24: //120 = 16+8 // Cd*A + Cs - { - // bAlphaClamping = 2; // max testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ONE; - s_dstrgb = alpha; - break; - } - - case 25: //121 // Cd*(1+A) - { - // bAlphaClamping = 2; // max testing - // SET_ALPHA_COLOR_FACTOR(0); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = one_minus_alpha; - -// NeedFactor(-1); - break; - } - - case 26: //122 // Cd*A - { - // bAlphaClamping = 2; - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = alpha; - break; - } - - case 32: // 200 = 32 // -Cs*A + Cs = Cs*(1-A) - { - // bAlphaClamping = 1; // min testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = one_minus_alpha; - s_dstrgb = GL_ZERO; - break; - } - - case 33: //201 // -Cs*A + Cd - { - // bAlphaClamping = 1; // min testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_REVERSE_SUBTRACT; - s_srcrgb = alpha; - s_dstrgb = GL_ONE; - break; - } - - case 34: //202 // -Cs*A - case 38: //212 // -Cd*A - { - // bAlphaClamping = 1; // min testing -- negative values - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = GL_ZERO; - break; - } - - case 36: //210 // -Cd*A + Cs - { - // bAlphaClamping = 1; // min testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_SUBTRACT; - s_srcrgb = GL_ONE; - s_dstrgb = alpha; - break; - } - - case 37: //211 // -Cd*A+Cd = Cd * (1-A) - { - // bAlphaClamping = 1; // min testing - // SET_ALPHA_COLOR_FACTOR(1); - usec = Set_Alpha_Color_Factor(a); - - s_rgbeq = GL_FUNC_ADD; - s_srcrgb = GL_ZERO; - s_dstrgb = one_minus_alpha; - break; - } - - default: - { - ZZLog::Error_Log("Bad alpha code %d | %d %d %d", code, a.a, a.b, a.d); - } - } - - /* - int t_rgbeq = GL_FUNC_ADD; - int t_srcrgb = GL_ONE; - int t_dstrgb = GL_ZERO; - int tAlphaClamping = 0; - - if( a.a == a.b ) - { // just d remains - if( a.d == 0 ) {} - else - { - t_dstrgb = a.d == 1 ? GL_ONE : GL_ZERO; - t_srcrgb = GL_ZERO; - t_rgbeq = GL_FUNC_ADD; //a) (001) (111) (221) b) (002) (112) (222) - } - goto EndSetAlpha; - } - else if( a.d == 2 ) - { // zero - if( a.a == 2 ) - { - // zero all color - t_srcrgb = GL_ZERO; - t_dstrgb = GL_ZERO; - goto EndSetAlpha; // (202) (212) - } - else if( a.b == 2 ) - { - //b2XAlphaTest = 1; // a) (022) // b) (122) - SET_ALPHA_COLOR_FACTOR(1); - - if( bDestAlphaColor == 2 ) - { - t_rgbeq = GL_FUNC_ADD; - t_srcrgb = a.a == 0 ? GL_ONE : GL_ZERO; - t_dstrgb = a.a == 0 ? GL_ZERO : GL_ONE; - } - else - { - tAlphaClamping = 2; - t_rgbeq = GL_FUNC_ADD; - t_srcrgb = a.a == 0 ? blendalpha[usec] : GL_ZERO; - t_dstrgb = a.a == 0 ? GL_ZERO : blendalpha[usec]; - } - - goto EndSetAlpha; - } - - // nothing is zero, so must do some real blending //b2XAlphaTest = 1; //a) (012) //b) (102) - tAlphaClamping = 3; - - SET_ALPHA_COLOR_FACTOR(1); - - t_rgbeq = a.a == 0 ? GL_FUNC_SUBTRACT : GL_FUNC_REVERSE_SUBTRACT; - t_srcrgb = bDestAlphaColor == 2 ? GL_ONE : blendalpha[usec]; - t_dstrgb = bDestAlphaColor == 2 ? GL_ONE : blendalpha[usec]; - } - else if( a.a == 2 ) - { // zero - - //b2XAlphaTest = 1; - tAlphaClamping = 1; // min testing - - SET_ALPHA_COLOR_FACTOR(1); - - if( a.b == a.d ) - { - // can get away with 1-A - // a.a == a.d == 2!! (200) (211) - t_rgbeq = GL_FUNC_ADD; - t_srcrgb = (a.b == 0 && bDestAlphaColor != 2) ? blendinvalpha[usec] : GL_ZERO; - t_dstrgb = (a.b == 0 || bDestAlphaColor == 2) ? GL_ZERO : blendinvalpha[usec]; - } - else - { - // a) (201) b)(210) - t_rgbeq = a.b==0 ? GL_FUNC_REVERSE_SUBTRACT : GL_FUNC_SUBTRACT; - t_srcrgb = (a.b == 0 && bDestAlphaColor != 2) ? blendalpha[usec] : GL_ONE; - t_dstrgb = (a.b == 0 || bDestAlphaColor == 2 ) ? GL_ONE : blendalpha[usec]; - } - } - else if( a.b == 2 ) - { - tAlphaClamping = 2; // max testing - - SET_ALPHA_COLOR_FACTOR(a.a!=a.d); - - if( a.a == a.d ) - { - // can get away with 1+A, but need to set alpha to negative - // a)(020) - // b)(121) - t_rgbeq = GL_FUNC_ADD; - - if( bDestAlphaColor == 2 ) - { - t_srcrgb = (a.a == 0) ? GL_ONE_MINUS_SRC_ALPHA : GL_ZERO; - t_dstrgb = (a.a == 0) ? GL_ZERO : GL_ONE_MINUS_SRC_ALPHA; - } - else - { - t_srcrgb = a.a == 0 ? blendinvalpha[usec] : GL_ZERO; - t_dstrgb = a.a == 0 ? GL_ZERO : blendinvalpha[usec]; - } - } - else - { - //a)(021) //b)(120) //b2XAlphaTest = 1; - t_rgbeq = GL_FUNC_ADD; - t_srcrgb = (a.a == 0 && bDestAlphaColor != 2) ? blendalpha[usec] : GL_ONE; - t_dstrgb = (a.a == 0 || bDestAlphaColor == 2) ? GL_ONE : blendalpha[usec]; - } - } - else - { - // all 3 components are valid! - tAlphaClamping = 3; // all testing - SET_ALPHA_COLOR_FACTOR(a.a!=a.d); - - if( a.a == a.d ) - { - // can get away with 1+A, but need to set alpha to negative // a) 010, // b) 101 - t_rgbeq = GL_FUNC_ADD; - - if( bDestAlphaColor == 2 ) - { - // all ones - t_srcrgb = a.a == 0 ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA; - t_dstrgb = a.a == 0 ? GL_SRC_ALPHA : GL_ONE_MINUS_SRC_ALPHA; - } - else - { - t_srcrgb = a.a == 0 ? blendinvalpha[usec] : blendalpha[usec]; - t_dstrgb = a.a == 0 ? blendalpha[usec] : blendinvalpha[usec]; - } - } - else - { - t_rgbeq = GL_FUNC_ADD; // a) 011 // b) 100 // - if( bDestAlphaColor == 2 ) - { - // all ones - t_srcrgb = a.a != 0 ? GL_ONE_MINUS_SRC_ALPHA : GL_SRC_ALPHA; - t_dstrgb = a.a != 0 ? GL_SRC_ALPHA : GL_ONE_MINUS_SRC_ALPHA; - } - else - { - //b2XAlphaTest = 1; - t_srcrgb = a.a != 0 ? blendinvalpha[usec] : blendalpha[usec]; - t_dstrgb = a.a != 0 ? blendalpha[usec] : blendinvalpha[usec]; - } - } - } - EndSetAlpha: - - - if ( alphaenable && (t_rgbeq != s_rgbeq || s_srcrgb != t_srcrgb || t_dstrgb != s_dstrgb || tAlphaClamping != bAlphaClamping)) { - if (CheckArray[code][(bDestAlphaColor==2)] != -1) { - ZZLog::Debug_Log( "A code %d, 0x%x, 0x%x, 0x%x, 0x%x %d", code, alpha, one_minus_alpha, one, zero, bDestAlphaColor ); - ZZLog::Debug_Log( " Difference %d %d %d %d | 0x%x 0x%x | 0x%x 0x%x | 0x%x 0x%x | %d %d", - code, a.a, a.b, a.d, - t_rgbeq, s_rgbeq, t_srcrgb, s_srcrgb, t_dstrgb, s_dstrgb, tAlphaClamping, bAlphaClamping); - CheckArray[code][(bDestAlphaColor==2)] = -1; - } - } - else - if (CheckArray[code][(bDestAlphaColor==2)] == 0){ - ZZLog::Debug_Log( "Add good code %d %d, psm %d destA %d", code, a.c, vb[icurctx].prndr->psm, bDestAlphaColor); - CheckArray[code][(bDestAlphaColor==2)] = 1; - }*/ - - - if (alphaenable) - { - zgsBlendFuncSeparateEXT(s_srcrgb, s_dstrgb, s_srcalpha, s_dstalpha); - zgsBlendEquationSeparateEXT(s_rgbeq, s_alphaeq); - glEnable(GL_BLEND); // always set - } - else - { - glDisable(GL_BLEND); - } - - INC_ALPHAVARS(); -} - -void SetWriteDepth() -{ - FUNCLOG - - if (conf.mrtdepth) - { - s_bWriteDepth = true; - s_nWriteDepthCount = 4; - } -} - -bool IsWriteDepth() -{ - FUNCLOG - return s_bWriteDepth; -} - -bool IsWriteDestAlphaTest() -{ - FUNCLOG - return s_bDestAlphaTest; -} - -void SetDestAlphaTest() -{ - FUNCLOG - s_bDestAlphaTest = true; - s_nWriteDestAlphaTest = 4; -} - -void SetTexFlush() -{ - FUNCLOG - s_bTexFlush = true; - -// if( PSMT_ISCLUT(vb[0].tex0.psm) ) -// texClutWrite(0); -// if( PSMT_ISCLUT(vb[1].tex0.psm) ) -// texClutWrite(1); - - if (!s_bForceTexFlush) - { - if (s_ptexCurSet[0] != s_ptexNextSet[0]) s_ptexCurSet[0] = s_ptexNextSet[0]; - if (s_ptexCurSet[1] != s_ptexNextSet[1]) s_ptexCurSet[1] = s_ptexNextSet[1]; - } -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlush.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlush.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlush.h 2012-05-07 19:51:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlush.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZOGLFLUSH_H_INCLUDED -#define ZZOGLFLUSH_H_INCLUDED - -#ifndef ZEROGS_DEVBUILD - -#define INC_GENVARS() -#define INC_TEXVARS() -#define INC_ALPHAVARS() -#define INC_RESOLVE() - -#define g_bUpdateEffect 0 -#define g_bSaveTex 0 -#define g_bSaveResolved 0 - -#else // defined(ZEROGS_DEVBUILD) - -#define INC_GENVARS() ++g_nGenVars -#define INC_TEXVARS() ++g_nTexVars -#define INC_ALPHAVARS() ++g_nAlphaVars -#define INC_RESOLVE() ++g_nResolve - -extern bool g_bUpdateEffect; -extern bool g_bSaveTex; // saves the current texture -extern bool g_bSaveResolved; -#endif // !defined(ZEROGS_DEVBUILD) - -enum StencilBits -{ - STENCIL_ALPHABIT = 1, // if set, dest alpha >= 0x80 - STENCIL_PIXELWRITE = 2, // if set, pixel just written (reset after every Flush) - STENCIL_FBA = 4, // if set, just written pixel's alpha >= 0 (reset after every Flush) - STENCIL_SPECIAL = 8 // if set, indicates that pixel passed its alpha test (reset after every Flush) - //STENCIL_PBE = 16 -}; -#define STENCIL_CLEAR (2|4|8|16) - -enum ColorMask -{ - COLORMASK_RED = 1, - COLORMASK_GREEN = 2, - COLORMASK_BLUE = 4, - COLORMASK_ALPHA = 8 - -}; -#define GL_COLORMASK(mask) glColorMask(!!((mask)&COLORMASK_RED), !!((mask)&COLORMASK_GREEN), !!((mask)&COLORMASK_BLUE), !!((mask)&COLORMASK_ALPHA)) - -// extern int g_nDepthBias; -extern float g_fBlockMult; // used for old cards, that do not support Alpha-32float textures. We store block data in u16 and use it. -extern u32 g_nCurVBOIndex; -extern u8* g_pbyGSClut; -extern int ppf; - -extern bool s_bTexFlush; - -extern vector s_vecTempTextures; // temporary textures, released at the end of every frame -extern GLuint g_vboBuffers[VB_NUMBUFFERS]; // VBOs for all drawing commands -extern CRangeManager s_RangeMngr; // manages overwritten memory // zz - -#if 0 -typedef union -{ - struct - { - u8 _bNeedAlphaColor; // set if vAlphaBlendColor needs to be set - u8 _b2XAlphaTest; // Only valid when bNeedAlphaColor is set. if 1st bit set set, double all alpha testing values - // otherwise alpha testing needs to be done separately. - u8 _bDestAlphaColor; // set to 1 if blending with dest color (process only one tri at a time). If 2, dest alpha is always 1. - u8 _bAlphaClamping; // if first bit is set, do min; if second bit, do max - }; - - u32 _bAlphaState; -} g_flag_vars; - -extern g_flag_vars g_vars; -#endif - -//#define bNeedAlphaColor g_vars._bNeedAlphaColor -//#define b2XAlphaTest g_vars._b2XAlphaTest -//#define bDestAlphaColor g_vars._bDestAlphaColor -//#define bAlphaClamping g_vars._bAlphaClamping - -void FlushTransferRanges(const tex0Info* ptex); //zz - -// use to update the state -void SetTexVariables(int context, FRAGMENTSHADER* pfragment); // zz -void SetTexInt(int context, FRAGMENTSHADER* pfragment, int settexint); // zz -void SetAlphaVariables(const alphaInfo& ainfo); // zzz -//void ResetAlphaVariables(); - -inline void SetAlphaTestInt(pixTest curtest); - -inline void RenderAlphaTest(const VB& curvb, FRAGMENTSHADER* pfragment); -inline void RenderStencil(const VB& curvb, u32 dwUsingSpecialTesting); -inline void ProcessStencil(const VB& curvb); -inline void RenderFBA(const VB& curvb, FRAGMENTSHADER* pfragment); -inline void ProcessFBA(const VB& curvb, FRAGMENTSHADER* pfragment); // zz - -void SetContextTarget(int context); - -void SetWriteDepth(); -bool IsWriteDepth(); -void SetDestAlphaTest(); - -#endif // ZZOGLFLUSH_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlushHack.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlushHack.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlushHack.cpp 2014-04-14 19:32:55.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlushHack.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,531 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2010 gregory.hainaut@gmail.com, zeydlitz@gmail.com - * Based on GSdx Copyright (C) 2007-2009 Gabest - * - * 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 - */ - -/* This file is a collection of hack for removing the blur effect on some games - * The blur renders very badly on high screen flat panel. - * - * To avoid severals combo-box, the hack detects the game based on crc - */ - -#include "ZZoglFlushHack.h" - -inline bool GABEST_HAS_SHARED_BITS (int fbp, int fpsm, int tbp, int tpsm) -{ - if ( !PSMT_HAS_SHARED_BITS (fpsm, tpsm) ) - return ((fbp ^ tbp) == 0); - else - return false; -} - - -// GSC_... function has been imported from GSdx -void GSC_Okami(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT32) - skip = 1000; - } - else - { - if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x03800 && fi.TPSM == PSMT4) - skip = 0; - } -} - -void GSC_MetalGearSolid3(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSMCT24) - skip = 1000; // 76, 79 - else if(fi.TME && fi.FBP == 0x02800 && fi.FPSM == PSMCT24 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01000) && fi.TPSM == PSMCT32) - skip = 1000; // 69 - } - else - { - if(!fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01000) && fi.FPSM == PSMCT32) - skip = 0; - } -} - -void GSC_DBZBT2(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && /*fi.FBP == 0x00000 && fi.FPSM == PSMCT16 &&*/ fi.TBP0 == 0x02000 && fi.TPSM == PSMT16Z) - skip = 27; - else if(!fi.TME && fi.FBP == 0x03000 && fi.FPSM == PSMCT16) - skip = 10; - } -} - -void GSC_DBZBT3(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x01c00 && fi.FPSM == PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x00e00) && fi.TPSM == PSMT8H) - skip = 24; // blur - else if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00e00) && fi.FPSM == PSMCT32 && fi.TPSM == PSMT8H) - skip = 28; // outline - } -} - -void GSC_SFEX3(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x00500 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x00f00 && fi.TPSM == PSMCT16) - skip = 2; // blur - } -} - -void GSC_Bully(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - // Test is useless ! - // if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01180) && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180) && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.FPSM == fi.TPSM) - // return; // allowed - if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01180) && fi.FPSM == PSMCT16S && fi.TBP0 == 0x02300 && fi.TPSM == PSMT16SZ) - skip = 6; - } - else - { - if(!fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01180) && fi.FPSM == PSMCT32) - skip = 0; - } -} - -void GSC_BullyCC(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - // Test is useless ! - // if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01180) && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01180) && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.FPSM == fi.TPSM) - // return; // allowed - - if(!fi.TME && fi.FBP == 0x02800 && fi.FPSM == PSMCT24) - skip = 9; - } -} - -void GSC_SoTC(const GSFrameInfo& fi, int& skip) -{ - // Not needed anymore? What did it fix anyway? (rama) - /*if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02b80 && fi.FPSM == PSMCT24 && fi.TBP0 == 0x01e80 && fi.TPSM == PSMCT24) - skip = 9; - else if(fi.TME && fi.FBP == 0x01c00 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x03800 && fi.TPSM == PSMCT32) - skip = 8; - else if(fi.TME && fi.FBP == 0x01e80 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x03880 && fi.TPSM == PSMCT32) - skip = 8; - }*/ -} - -void GSC_OnePieceGrandAdventure(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02d00 && fi.FPSM == PSMCT16 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x00e00 || fi.TBP0 == 0x00f00) && fi.TPSM == PSMCT16) - skip = 4; - } -} - -void GSC_OnePieceGrandBattle(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02d00 && fi.FPSM == PSMCT16 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x00f00) && fi.TPSM == PSMCT16) - skip = 4; - } -} - -void GSC_ICO(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x03d00 && fi.TPSM == PSMCT32) - skip = 3; - else if(fi.TME && fi.FBP == 0x00800 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x02800 && fi.TPSM == PSMT8H) - skip = 1; - } - else - { - if(fi.TME && fi.TBP0 == 0x00800 && fi.TPSM == PSMCT32) - skip = 0; - } -} - -void GSC_GT4(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && (fi.FBP == 0x03440 || fi.FBP >= 0x03e00) && fi.FPSM == PSMCT32 && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x01400) && fi.TPSM == PSMT8) - skip = 880; - else if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x01400) && fi.FPSM == PSMCT24 && fi.TBP0 >= 0x03420 && fi.TPSM == PSMT8) - { - // TODO: removes gfx from where it is not supposed to (garage) - // skip = 58; - } - } -} - -void GSC_WildArms4(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x03100 && fi.FPSM == PSMT32Z && fi.TBP0 == 0x01c00 && fi.TPSM == PSMT32Z) - skip = 100; - } - else - { - if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x02a00 && fi.TPSM == PSMCT32) - skip = 1; - } -} - -void GSC_WildArms5(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x03100 && fi.FPSM == PSMT32Z && fi.TBP0 == 0x01c00 && fi.TPSM == PSMT32Z) - skip = 100; - } - else - { - if(fi.TME && fi.FBP == 0x00e00 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x02a00 && fi.TPSM == PSMCT32) - skip = 1; - } -} - -void GSC_Manhunt2(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x03c20 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x01400 && fi.TPSM == PSMT8) - skip = 640; - } -} - -void GSC_CrashBandicootWoC(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - // Test is useless ! - // if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00a00) && (fi.TBP0 == 0x00000 || fi.TBP0 == 0x00a00) && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.FPSM == fi.TPSM) - // return false; // allowed - - if(fi.TME && fi.FBP == 0x02200 && fi.FPSM == PSMT24Z && fi.TBP0 == 0x01400 && fi.TPSM == PSMT24Z) - skip = 41; - } - else - { - if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00a00) && fi.FPSM == PSMCT32 && fi.TBP0 == 0x03c00 && fi.TPSM == PSMCT32) - skip = 0; - else if(!fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00a00)) - skip = 0; - } -} - -void GSC_ResidentEvil4(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x03100 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x01c00 && fi.TPSM == PSMT24Z) - skip = 176; - } -} - -void GSC_Spartan(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02000 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT32) - skip = 107; - } -} - -void GSC_AceCombat4(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02a00 && fi.FPSM == PSMT24Z && fi.TBP0 == 0x01600 && fi.TPSM == PSMT24Z) - skip = 71; // clouds (z, 16-bit) - else if(fi.TME && fi.FBP == 0x02900 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT24) - skip = 28; // blur - } -} - -void GSC_Drakengard2(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x026c0 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00a00 && fi.TPSM == PSMCT32) - skip = 64; - } -} - -void GSC_Tekken5(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02ea0 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT32) - skip = 95; - } -} - -void GSC_IkkiTousen(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x00a80 && fi.FPSM == PSMT24Z && fi.TBP0 == 0x01180 && fi.TPSM == PSMT24Z) - skip = 1000; // shadow (result is broken without depth copy, also includes 16 bit) - else if(fi.TME && fi.FBP == 0x00700 && fi.FPSM == PSMT24Z && fi.TBP0 == 0x01180 && fi.TPSM == PSMT24Z) - skip = 11; // blur - } - else if(skip > 7) - { - if(fi.TME && fi.FBP == 0x00700 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x00700 && fi.TPSM == PSMCT16) - skip = 7; // the last steps of shadow drawing - } -} - -void GSC_GodOfWar(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT16) - { - // skip = 30; //GSdx - skip = 4; // 23 or 4 need more testing - } - else if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSMCT32 && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT32 && fi.FBMSK == 0xff000000) - skip = 1; // blur - else if(fi.FBP == 0x00000 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT8 - && ((fi.TZTST == 2 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 1 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 3 && fi.FBMSK == 0xFF000000))) - skip = 1; // wall of fog - } -} - -void GSC_GodOfWar2(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME) - { - if((fi.FBP == 0x00100 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x00100 && fi.TPSM == PSMCT16) // ntsc - || (fi.FBP == 0x02100 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x02100 && fi.TPSM == PSMCT16)) // pal - skip = 29; // shadows - if(fi.FBP == 0x00100 && fi.FPSM == PSMCT32 && (fi.TBP0 & 0x03000) == 0x03000 - && (fi.TPSM == PSMT8 || fi.TPSM == PSMT4) - && ((fi.TZTST == 2 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 1 && fi.FBMSK == 0x00FFFFFF) || (fi.TZTST == 3 && fi.FBMSK == 0xFF000000))) - skip = 1; // wall of fog - } - } -} - -void GSC_GiTS(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x01400 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x02e40 && fi.TPSM == PSMCT16) - skip = 1315; - } -} - -void GSC_Onimusha3(const GSFrameInfo& fi, int& skip) -{ - if(fi.TME /*&& (fi.FBP == 0x00000 || fi.FBP == 0x00700)*/ && (fi.TBP0 == 0x01180 || fi.TBP0 == 0x00e00 || fi.TBP0 == 0x01000 || fi.TBP0 == 0x01200) && (fi.TPSM == PSMCT32 || fi.TPSM == PSMCT24)) - skip = 1; -} - -void GSC_TalesOfAbyss(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00e00) && fi.TBP0 == 0x01c00 && fi.TPSM == PSMT8) // copies the z buffer to the alpha channel of the fb - skip = 1000; - else if(fi.TME && (fi.FBP == 0x00000 || fi.FBP == 0x00e00) && (fi.TBP0 == 0x03560 || fi.TBP0 == 0x038e0) && fi.TPSM == PSMCT32) - skip = 1; - } - else - { - if(fi.TME && fi.TPSM != PSMT8) - skip = 0; - } -} - -void GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x02200 && fi.FPSM == PSMCT16S && fi.TBP0 == 0x00000 && fi.TPSM == PSMCT16) - skip = 1000; // shadow - } - else - { - if(fi.TME && fi.FBP == 0x00000 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x02200 && fi.TPSM == PSMCT16S) - skip = 2; - } -} - -void GSC_Genji(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == 0x01500 && fi.FPSM == PSMCT16 && fi.TBP0 == 0x00e00 && fi.TPSM == PSMT16Z) - skip = 6; // - } -} - -void GSC_StarOcean3(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH) - skip = 1000; // - } - else - { - if(!(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH)) - skip = 0; - } -} - -void GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH) - skip = 1000; // - } - else - { - if(!(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH)) - skip = 0; - } -} - -void GSC_RadiataStories(const GSFrameInfo& fi, int& skip) -{ - if(skip == 0) - { - if(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH) - skip = 1000; // Shadows - else if (fi.TME && fi.FBP == fi.TBP0 && (fi.TBP0 == 0x3700 || fi.TBP0 == 0x3400) && fi.TZTST == 1) - skip = 1; // Start manu issue; - } - else - { - if(!(fi.TME && fi.FBP == fi.TBP0 && fi.FPSM == PSMCT32 && fi.TPSM == PSMT4HH)) - skip = 0; - } -} - -bool GSC_HauntingGround(const GSFrameInfo& fi, int& skip) -{ - // Note GSdx seems to use invert somewhere FBMSK. So values were inverted - if(skip == 0) - { - if(fi.TME && fi.FPSM == fi.TPSM && fi.TPSM == PSMCT16S && ~fi.FBMSK == 0x03FFF) - skip = 1; - else if(fi.TME && fi.FBP == 0x3000 && fi.TBP0 == 0x3380) - skip = 1; // bloom - else if(fi.TME && fi.FBP == fi.TBP0 && fi.TBP0 == 0x3000 && ~fi.FBMSK == 0xFFFFFF && - GABEST_HAS_SHARED_BITS(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM)) - skip = 1; - } - - return true; -} - -// Record skipped frame to allow better analysis -// #define FRAME_RECORDING_ON 1 -#ifdef FRAME_RECORDING_ON -static const u32 MAX_FRAMES = 500; -static GSFrameInfo FrameAppear[MAX_FRAMES]; -static u32 Rec_Numbers = 0; - -void RecordNewFrames(VB& curvb, GSFrameInfo fi) { - if (Rec_Numbers >= MAX_FRAMES) - return; - - u32 i; - bool was_recorded = false; - for (i = 0; i < Rec_Numbers; i++ ) { - if (FrameAppear[i].FBP == fi.FBP && FrameAppear[i].FPSM == fi.FPSM - && FrameAppear[i].TBP0 == fi.TBP0 && FrameAppear[i].TPSM == fi.TPSM) { - was_recorded = true; - break; - } - } - if (!was_recorded) { - FrameAppear[Rec_Numbers] = fi; - Rec_Numbers++; - ZZLog::Print( "New frame %d, skip %d | fpb: %x fpsm: %d fpmsk: %x tme: %x tbp0: %x tpsm: %d tztst: %x | bits %d\n", \ - Rec_Numbers, g_SkipFlushFrame, fi.FBP, fi.FPSM, fi.FBMSK, fi.TME, fi.TBP0, fi.TPSM, fi.TZTST, GABEST_HAS_SHARED_BITS(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM) ); - - // Dump a nice picture of the frame - char filename[255]; - sprintf(filename, "SkipFlushFrame_%d__%d.tga", g_SkipFlushFrame, Rec_Numbers); - SaveRenderTarget(filename, curvb.prndr->fbw, curvb.prndr->fbh, 0); - } -} -#endif - -__forceinline bool IsBadFrame(VB& curvb) -{ - GSFrameInfo fi; - - // Keep GSdx naming convention to ease sharing code - fi.FBP = curvb.frame.fbp; - fi.FPSM = curvb.frame.psm; - fi.FBMSK = ~curvb.frame.fbm; - fi.TME = curvb.curprim.tme; - fi.TBP0 = curvb.tex0.tbp0; - fi.TPSM = curvb.tex0.psm; - fi.TZTST = curvb.test.ztst; - - if (GetSkipCount_Handler && conf.settings().automatic_skip_draw) - GetSkipCount_Handler(fi, g_SkipFlushFrame); - - if(g_SkipFlushFrame == 0 && (conf.SkipDraw > 0)) - { - if(fi.TME) - { - // depth textures (bully, mgs3s1 intro, Front Mission 5) - // Or General, often problematic post processing - if (PSMT_ISZTEX(fi.TPSM) || (GABEST_HAS_SHARED_BITS(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM))) - g_SkipFlushFrame = conf.SkipDraw; - } - } - - if(g_SkipFlushFrame > 0) - { -#ifdef FRAME_RECORDING_ON - RecordNewFrames(curvb, fi); -#endif - g_SkipFlushFrame--; - return true; - } - - return false; -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlushHack.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlushHack.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglFlushHack.h 2011-03-25 05:06:49.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglFlushHack.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2010 gregory.hainaut@gmail.com - * Based on GSdx Copyright (C) 2007-2009 Gabest - * - * 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 - */ - -/* This file is a collection of hack for removing the blur effect on some games - * The blur renders very badly on high screen flat panel. - * - * To avoid severals combo-box, the hack detects the game based on crc - */ - -#ifndef ZZOGL_FLUSH_HACK_H_INCLUDED -#define ZZOGL_FLUSH_HACK_H_INCLUDED - -#include "GS.h" -#include "targets.h" -#include "ZZoglVB.h" - -extern int g_SkipFlushFrame; - -struct GSFrameInfo -{ - u32 FBP; - u32 FPSM; - u32 FBMSK; - u32 TBP0; - u32 TPSM; - u32 TZTST; - bool TME; -}; - -typedef void (*GetSkipCount)(const GSFrameInfo& fi, int& skip); - -extern GetSkipCount GetSkipCount_Handler; - -void GSC_Okami(const GSFrameInfo& fi, int& skip); -void GSC_MetalGearSolid3(const GSFrameInfo& fi, int& skip); -void GSC_DBZBT2(const GSFrameInfo& fi, int& skip); -void GSC_DBZBT3(const GSFrameInfo& fi, int& skip); -void GSC_SFEX3(const GSFrameInfo& fi, int& skip); -void GSC_Bully(const GSFrameInfo& fi, int& skip); -void GSC_BullyCC(const GSFrameInfo& fi, int& skip); -void GSC_SoTC(const GSFrameInfo& fi, int& skip); -void GSC_OnePieceGrandAdventure(const GSFrameInfo& fi, int& skip); -void GSC_OnePieceGrandBattle(const GSFrameInfo& fi, int& skip); -void GSC_ICO(const GSFrameInfo& fi, int& skip); -void GSC_GT4(const GSFrameInfo& fi, int& skip); -void GSC_WildArms4(const GSFrameInfo& fi, int& skip); -void GSC_WildArms5(const GSFrameInfo& fi, int& skip); -void GSC_Manhunt2(const GSFrameInfo& fi, int& skip); -void GSC_CrashBandicootWoC(const GSFrameInfo& fi, int& skip); -void GSC_ResidentEvil4(const GSFrameInfo& fi, int& skip); -void GSC_Spartan(const GSFrameInfo& fi, int& skip); -void GSC_AceCombat4(const GSFrameInfo& fi, int& skip); -void GSC_Drakengard2(const GSFrameInfo& fi, int& skip); -void GSC_Tekken5(const GSFrameInfo& fi, int& skip); -void GSC_IkkiTousen(const GSFrameInfo& fi, int& skip); -void GSC_GodOfWar(const GSFrameInfo& fi, int& skip); -void GSC_GodOfWar2(const GSFrameInfo& fi, int& skip); -void GSC_GiTS(const GSFrameInfo& fi, int& skip); -void GSC_Onimusha3(const GSFrameInfo& fi, int& skip); -void GSC_TalesOfAbyss(const GSFrameInfo& fi, int& skip); -void GSC_SonicUnleashed(const GSFrameInfo& fi, int& skip); -void GSC_Genji(const GSFrameInfo& fi, int& skip); -void GSC_StarOcean3(const GSFrameInfo& fi, int& skip); -void GSC_ValkyrieProfile2(const GSFrameInfo& fi, int& skip); -void GSC_RadiataStories(const GSFrameInfo& fi, int& skip); - -extern bool IsBadFrame(VB& curvb); -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMath.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMath.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMath.h 2012-04-21 16:13:45.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMath.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,511 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZOGLMATH_H_INCLUDED -#define ZZOGLMATH_H_INCLUDED - -//Remind me to check and see if this is necessary, and what uses it. --arcum42 -#ifndef _WIN32 -#include -#endif - -#include -#include "Pcsx2Defs.h" - -//#define ZZ_MMATH - -#ifndef ZZ_MMATH - -template -class Vector4 -{ - public: - T x, y, z, w; - - Vector4(T x1 = 0, T y1 = 0, T z1 = 0, T w1 = 0) - { - x = x1; - y = y1; - z = z1; - w = w1; - } - - Vector4(Vector4 &f) - { - x = f.x; - y = f.y; - z = f.z; - w = f.w; - } - - Vector4(T* f) - { - x = f[0]; - y = f[1]; - z = f[2]; - w = f[3]; // For some reason, the old code set this to 0. - } - - T& operator[](int i) - { - switch(i) - { - case 0: return x; - case 1: return y; - case 2: return z; - case 3: return w; - default: assert(0); - } - } - - operator T*() - { - return (T*) this; - } - - operator const T*() const - { - return (const T*) this; - } - - Vector4& operator =(const Vector4& v) - { - x = v.x; - y = v.y; - z = v.z; - w = v.w; - return *this; - } - - bool operator ==(const Vector4& v) - { - return !!( x == v.x && - y == v.y && - z == v.z && - w == v.w ); - } - - Vector4 operator +(const Vector4& v) const - { - return Vector4(x + v.x, y + v.y, z + v.z, w + v.w); - } - - Vector4 operator -(const Vector4& v) const - { - return Vector4(x - v.x, y - v.y, z - v.z, w - v.w); - } - - Vector4 operator *(const Vector4& v) const - { - return Vector4(x * v.x, y * v.y, z * v.z, w * v.w); - } - - Vector4 operator /(const Vector4& v) const - { - return Vector4(x / v.x, y / v.y, z / v.z, w / v.w); - } - Vector4 operator +(T val) const - { - return Vector4(x + val, y + val, z + val, w + val); - } - - Vector4 operator -(T val) const - { - return Vector4(x - val, y - val, z - val, w - val); - } - - Vector4 operator *(T val) const - { - return Vector4(x * val, y * val, z * val, w * val); - } - - Vector4 operator /(T val) const - { - return Vector4(x / val, y / val, z / val, w / val); - } - - Vector4& operator +=(const Vector4& v) - { - *this = *this + v; - return *this; - } - - Vector4& operator -=(const Vector4& v) - { - *this = *this - v; - return *this; - } - - Vector4& operator *=(const Vector4& v) - { - *this = *this * v; - return *this; - } - - Vector4& operator /=(const Vector4& v) - { - *this = *this - v; - return *this; - } - - Vector4& operator +=(T val) - { - *this = *this + (T)val; - return *this; - } - - Vector4& operator -=(T val) - { - *this = *this - (T)val; - return *this; - } - - Vector4& operator *=(T val) - { - *this = *this * (T)val; - return *this; - } - - Vector4& operator /=(T val) - { - *this = *this / (T)val; - return *this; - } - - // Probably doesn't belong here, but I'll leave it in for the moment. - void SetColor(u32 color) - { - x = (color & 0xff) / 255.0f; - y = ((color >> 8) & 0xff) / 255.0f; - z = ((color >> 16) & 0xff) / 255.0f; - } - - bool equal_vectors(const Vector4& v) - { - if (abs(x - v.x) + abs(y - v.y) + abs(z - v.z) + abs(w - v.w) < 0.01) - return true; - else - return false; - } - -}; - -typedef Vector4 float4; - -#else - -// Reimplement, swiping a bunch of code from GSdx and adapting it. (specifically GSVector.h) -// This doesn't include more then half of the functions in there, as well as some of the structs... -#include "Util.h" - -#include "Pcsx2Types.h" - -class float4 -{ - public: - union - { - struct {float x, y, z, w;}; - struct {float r, g, b, a;}; - struct {float left, top, right, bottom;}; - float v[4]; - float f32[4]; - s8 _s8[16]; - s16 _s16[8]; - s32 _s32[4]; - s64 _s64[2]; - u8 _u8[16]; - u16 _u16[8]; - u32 _u32[4]; - u64 _u64[2]; - __m128 m; - }; - - float4() - { - m = _mm_setzero_ps(); - } - - float4(float x, float y, float z, float w = 0) - { - m = _mm_set_ps(w, z, y, x); - } - - float4(float4 &f) - { - m = f.m; - } - - float4(float x, float y) - { - m = _mm_unpacklo_ps(_mm_load_ss(&x), _mm_load_ss(&y)); - } - - float4(int x, int y) - { - m = _mm_cvtepi32_ps(_mm_unpacklo_epi32(_mm_cvtsi32_si128(x), _mm_cvtsi32_si128(y))); - } - - explicit float4(float f) - { - m = _mm_set1_ps(f); - } - - explicit float4(__m128 m) - { - this->m = m; - } - - float4(float* f) - { - x = f[0]; - y = f[1]; - z = f[2]; - w = f[3]; // For some reason, the old code set this to 0. - } - - float& operator[](int i) - { - switch(i) - { - case 0: return x; - case 1: return y; - case 2: return z; - case 3: return w; - default: assert(0); - } - } - - operator float*() - { - return (float*) this; - } - - operator const float*() const - { - return (const float*) this; - } - - void operator = (float f) - { - m = _mm_set1_ps(f); - } - - void operator = (__m128 m) - { - this->m = m; - } - - - void operator += (const float4& v) - { - m = _mm_add_ps(m, v.m); - } - - void operator -= (const float4& v) - { - m = _mm_sub_ps(m, v.m); - } - - void operator *= (const float4& v) - { - m = _mm_mul_ps(m, v.m); - } - - void operator /= (const float4& v) - { - m = _mm_div_ps(m, v.m); - } - - void operator += (float f) - { - *this += float4(f); - } - - void operator -= (float f) - { - *this -= float4(f); - } - - void operator *= (float f) - { - *this *= float4(f); - } - - void operator /= (float f) - { - *this /= float4(f); - } - - void operator &= (const float4& v) - { - m = _mm_and_ps(m, v.m); - } - - void operator |= (const float4& v) - { - m = _mm_or_ps(m, v.m); - } - - void operator ^= (const float4& v) - { - m = _mm_xor_ps(m, v.m); - } - - friend float4 operator + (const float4& v1, const float4& v2) - { - return float4(_mm_add_ps(v1.m, v2.m)); - } - - friend float4 operator - (const float4& v1, const float4& v2) - { - return float4(_mm_sub_ps(v1.m, v2.m)); - } - - friend float4 operator * (const float4& v1, const float4& v2) - { - return float4(_mm_mul_ps(v1.m, v2.m)); - } - - friend float4 operator / (const float4& v1, const float4& v2) - { - return float4(_mm_div_ps(v1.m, v2.m)); - } - - friend float4 operator + (const float4& v, float f) - { - return v + float4(f); - } - - friend float4 operator - (const float4& v, float f) - { - return v - float4(f); - } - - friend float4 operator * (const float4& v, float f) - { - return v * float4(f); - } - - friend float4 operator / (const float4& v, float f) - { - return v / float4(f); - } - - friend float4 operator & (const float4& v1, const float4& v2) - { - return float4(_mm_and_ps(v1.m, v2.m)); - } - - friend float4 operator | (const float4& v1, const float4& v2) - { - return float4(_mm_or_ps(v1.m, v2.m)); - } - - friend float4 operator ^ (const float4& v1, const float4& v2) - { - return float4(_mm_xor_ps(v1.m, v2.m)); - } - - friend float4 operator == (const float4& v1, const float4& v2) - { - return float4(_mm_cmpeq_ps(v1.m, v2.m)); - } - - friend float4 operator != (const float4& v1, const float4& v2) - { - return float4(_mm_cmpneq_ps(v1.m, v2.m)); - } - - friend float4 operator > (const float4& v1, const float4& v2) - { - return float4(_mm_cmpgt_ps(v1.m, v2.m)); - } - - friend float4 operator < (const float4& v1, const float4& v2) - { - return float4(_mm_cmplt_ps(v1.m, v2.m)); - } - - friend float4 operator >= (const float4& v1, const float4& v2) - { - return float4(_mm_cmpge_ps(v1.m, v2.m)); - } - - friend float4 operator <= (const float4& v1, const float4& v2) - { - return float4(_mm_cmple_ps(v1.m, v2.m)); - } - - bool equal_vectors(const float4& v) - { - if (abs(x - v.x) + abs(y - v.y) + abs(z - v.z) + abs(w - v.w) < 0.01) - return true; - else - return false; - } - - // This looked interesting, so I thought I'd include it... - - template float4 shuffle() const - { - return float4(_mm_shuffle_ps(m, m, _MM_SHUFFLE(i, i, i, i))); - } - - #define VECTOR4_SHUFFLE_4(xs, xn, ys, yn, zs, zn, ws, wn) \ - float4 xs##ys##zs##ws() const {return float4(_mm_shuffle_ps(m, m, _MM_SHUFFLE(wn, zn, yn, xn)));} \ - float4 xs##ys##zs##ws(const float4& v) const {return float4(_mm_shuffle_ps(m, v.m, _MM_SHUFFLE(wn, zn, yn, xn)));} \ - - #define VECTOR4_SHUFFLE_3(xs, xn, ys, yn, zs, zn) \ - VECTOR4_SHUFFLE_4(xs, xn, ys, yn, zs, zn, x, 0) \ - VECTOR4_SHUFFLE_4(xs, xn, ys, yn, zs, zn, y, 1) \ - VECTOR4_SHUFFLE_4(xs, xn, ys, yn, zs, zn, z, 2) \ - VECTOR4_SHUFFLE_4(xs, xn, ys, yn, zs, zn, w, 3) \ - - #define VECTOR4_SHUFFLE_2(xs, xn, ys, yn) \ - VECTOR4_SHUFFLE_3(xs, xn, ys, yn, x, 0) \ - VECTOR4_SHUFFLE_3(xs, xn, ys, yn, y, 1) \ - VECTOR4_SHUFFLE_3(xs, xn, ys, yn, z, 2) \ - VECTOR4_SHUFFLE_3(xs, xn, ys, yn, w, 3) \ - - #define VECTOR4_SHUFFLE_1(xs, xn) \ - float4 xs##4() const {return float4(_mm_shuffle_ps(m, m, _MM_SHUFFLE(xn, xn, xn, xn)));} \ - float4 xs##4(const float4& v) const {return float4(_mm_shuffle_ps(m, v.m, _MM_SHUFFLE(xn, xn, xn, xn)));} \ - VECTOR4_SHUFFLE_2(xs, xn, x, 0) \ - VECTOR4_SHUFFLE_2(xs, xn, y, 1) \ - VECTOR4_SHUFFLE_2(xs, xn, z, 2) \ - VECTOR4_SHUFFLE_2(xs, xn, w, 3) \ - - VECTOR4_SHUFFLE_1(x, 0) - VECTOR4_SHUFFLE_1(y, 1) - VECTOR4_SHUFFLE_1(z, 2) - VECTOR4_SHUFFLE_1(w, 3) - - // Probably doesn't belong here, but I'll leave it in for the moment. - void SetColor(u32 color) - { - x = (color & 0xff) / 255.0f; - y = ((color >> 8) & 0xff) / 255.0f; - z = ((color >> 16) & 0xff) / 255.0f; - } -}; - -#endif - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMem.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMem.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMem.cpp 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMem.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,556 +0,0 @@ -/* ZeroGS KOSMOS - * Copyright (C) 2005-2006 zerofrog@gmail.com - * - * 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 - */ - -#include "GS.h" -#include "Util.h" -#include "ZZoglMem.h" -#include "targets.h" -#include "x86.h" - -#include "Mem_Swizzle.h" - -#ifndef ZZNORMAL_MEMORY - -bool allowed_psm[256] = {false, }; // Sometimes we got strange unknown psm -PSM_value PSM_value_Table[64] = {PSMT_BAD_PSM, }; // for int -> PSM_value - -// return array of pointer of array string, -// We SHOULD do memory allocation for u32** -- otherwize we have a lot of trouble! -// if bw and bh are set correctly, as dimensions of table, than array have pointers -// to table rows, so array[i][j] = table[i][j]; -inline u32** InitTable(int bh, int bw, u32* table) { - u32** array = (u32**)malloc(bh * sizeof(u32*)); - for (int i = 0; i < bh; i++) { - array[i] = &table[i * bw]; - } - return array; -} - -// initialize dynamic arrays (u32**) for each regular psm. -inline void SetTable(int psm) { - switch (psm) { - case PSMCT32: - g_pageTable[psm] = InitTable( 32, 64, &g_pageTable32[0][0]); - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable32[0][0]); - g_columnTable[psm] = InitTable( 8, 8, &g_columnTable32[0][0]); - break; - - case PSMCT24: - g_pageTable[psm] = g_pageTable[PSMCT32];; - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable32[0][0]); - g_columnTable[psm] = InitTable( 8, 8, &g_columnTable32[0][0]); - break; - - case PSMCT16: - g_pageTable[psm] = InitTable( 64, 64, &g_pageTable16[0][0]); - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable16[0][0]); - g_columnTable[psm] = InitTable( 8, 16, &g_columnTable16[0][0]); - break; - - case PSMCT16S: - g_pageTable[psm] = InitTable( 64, 64, &g_pageTable16S[0][0]); - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable16S[0][0]); - g_columnTable[psm] = InitTable( 8, 16, &g_columnTable16[0][0]); - break; - - case PSMT8: - g_pageTable[psm] = InitTable( 64, 128, &g_pageTable8[0][0]); - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable8[0][0]); - g_columnTable[psm] = InitTable( 16, 16, &g_columnTable8[0][0]); - break; - - case PSMT8H: - g_pageTable[psm] = g_pageTable[PSMCT32]; - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable8[0][0]); - g_columnTable[psm] = InitTable( 16, 16, &g_columnTable8[0][0]); - break; - - case PSMT4: - g_pageTable[psm] = InitTable(128, 128, &g_pageTable4[0][0]); - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable4[0][0]); - g_columnTable[psm] = InitTable( 16, 32, &g_columnTable4[0][0]); - break; - - case PSMT4HL: - case PSMT4HH: - g_pageTable[psm] = g_pageTable[PSMCT32]; - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable4[0][0]); - g_columnTable[psm] = InitTable( 16, 32, &g_columnTable4[0][0]); - break; - - case PSMT32Z: - g_pageTable[psm] = InitTable( 32, 64, &g_pageTable32Z[0][0]); - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable32Z[0][0]); - g_columnTable[psm] = InitTable( 8, 8, &g_columnTable32[0][0]); - break; - - case PSMT24Z: - g_pageTable[psm] = g_pageTable[PSMT32Z]; - g_blockTable[psm] = InitTable( 4, 8, &g_blockTable32Z[0][0]); - g_columnTable[psm] = InitTable( 8, 8, &g_columnTable32[0][0]); - break; - - case PSMT16Z: - g_pageTable[psm] = InitTable( 64, 64, &g_pageTable16Z[0][0]); - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable16Z[0][0]); - g_columnTable[psm] = InitTable( 8, 16, &g_columnTable16[0][0]); - break; - - case PSMT16SZ: - g_pageTable[psm] = InitTable( 64, 64, &g_pageTable16SZ[0][0]); - g_blockTable[psm] = InitTable( 8, 4, &g_blockTable16SZ[0][0]); - g_columnTable[psm] = InitTable( 8, 16, &g_columnTable16[0][0]); - break; - } -} - -// After this, the function arrays with u32** have memory set and filled. -void FillBlockTables() { - for (int i = 0; i < MAX_PSM; i++) - SetTable(i); -} - -// Deallocate memory for u32** arrays. -void DestroyBlockTables() { - for (int i = 0; i < MAX_PSM; i++) { - if (g_pageTable[i] != NULL && (i != PSMT8H && i != PSMT4HL && i != PSMT4HH && i != PSMCT24 && i != PSMT24Z)) - free(g_pageTable[i]); - - if (g_blockTable[i] != NULL) - free(g_blockTable[i]); - - if (g_columnTable[i] != NULL) - free(g_columnTable[i]); - } -} - -void FillNewPageTable() { - int k = 0; - for (int psm = 0; psm < MAX_PSM; psm ++) - if (allowed_psm[psm]) { - for (u32 i = 0; i < 127; i++) - for(u32 j = 0; j < 127; j++) { - u32 address; - u32 shift; - - address = g_pageTable[psm][i & ZZ_DT[psm][3]][j & ZZ_DT[psm][4]]; - shift = (((address << ZZ_DT[psm][5]) & 0x7 ) << 3)+ ZZ_DT[psm][7]; // last part is for 8H, 4HL and 4HH -- they have data from 24 and 28 byte - g_pageTable2[k][i][j] = (address >> ZZ_DT[psm][0]) + (shift << 16); // now lower 16 byte of page table is 32-bit aligned address, and upper -- - // shift. - } - g_pageTableNew[psm] = InitTable( 128, 128, &g_pageTable2[k][0][0]); - k++;; - } -} - -BLOCK m_Blocks[MAX_PSM]; // Do so that blocks are indexable. - -// At the begining and the end of each string we should made unaligned writes, with nSize checks. We should be sure that all -// these pixels are inside one widthlimit space. -template -inline bool DoOneTransmitStep(void* pstart, int& nSize, int endj, const void* pbuf, int& k, int& i, int& j, int widthlimit) { - for (; j < endj && nSize > 0; j++, k++, nSize -= 1) { - writePixelMem((u32*)pstart, j%2048, i%2048, (u32*)(pbuf), k, gs.dstbuf.bw); - } - - return (nSize == 0); -} - -// FFX has PSMT8 transmit (starting intro -- sword and hairs). -// Persona 4 texts at start are PSMCT32 (and there is also PSMCT16 transmit somwhere after that). -// Tekken V has PSMCT24 and PSMT4 transfers - -// This function transfers "Y" block pixels. I use little another code than Zerofrog. My code often uses widthmult != 1 addition (Zerofrog's code -// have an strict condition for fast path: width of transferred data should be widthlimit multiplied by j; EndY also should be multiplied. But -// the usual data block of 255 pixels becomes transfered by 1. -// I should check, maybe Unaligned_Start and Unaligned_End often == 0, and I could try a fastpath -- with this block off. -template -inline bool TRANSMIT_HOSTLOCAL_Y(u32* pbuf, int& nSize, u8* pstart, int endY, int& i, int& j, int& k) { -// if (psm != PSMT8 && psm != 0 && psm != PSMT4 && psm != PSMCT24) -// ERROR_LOG("This is usable function TRANSMIT_HOSTLOCAL_Y at ZZoglMem.cpp %d %d %d %d %d\n", psm, widthlimit, i, j, nSize); - - int q = (gs.trxpos.dx - j) % widthlimit; - if (DoOneTransmitStep(pstart, nSize, q, pbuf, k, i, j, widthlimit)) return true; // After this j and dx are compatible by modyle of widthlimit - - int Unaligned_Start = (gs.trxpos.dx % widthlimit == 0) ? 0 : widthlimit - gs.trxpos.dx % widthlimit; // gs.trpos.dx + Unaligned_Start is multiple of widthlimit - for (; i < endY; ++i) { - if (DoOneTransmitStep(pstart, nSize, j + Unaligned_Start, pbuf, k, i, j, widthlimit)) return true; // This operation made j % widthlimit == 0. - //assert (j % widthlimit != 0); - - for (; j < gs.imageEnd.x - widthlimit + 1 && nSize >= widthlimit; j += widthlimit, nSize -= widthlimit) { - writePixelsFromMemory(pstart, pbuf, k, j % 2048, i % 2048, gs.dstbuf.bw); - } - - assert ( gs.imageEnd.x - j < widthlimit || nSize < widthlimit); - if (DoOneTransmitStep(pstart, nSize, gs.imageEnd.x, pbuf, k, i, j, widthlimit)) return true; // There are 2 reasons for finish of previous for: 1) nSize < widthlimit - // 2) j > gs.imageEnd.x - widthlimit + 1. We would try to write pixels up do - // EndX, it's no more widthlimit pixels - j = gs.trxpos.dx; - } - - return false; -} - -// PSMT4 -- Tekken V -template -inline void TRANSMIT_HOSTLOCAL_X(u32* pbuf, int& nSize, u8* pstart, int& i, int& j, int& k, int blockheight, int startX, int pitch, int fracX) { - if (psm != PSMT8 && psm != PSMT4) - ZZLog::Error_Log("This is usable function TRANSMIT_HOSTLOCAL_X at ZZoglMem.cpp %d %d %d %d %d\n", psm, widthlimit, i, j, nSize); - - for(int tempi = 0; tempi < blockheight; ++tempi) { - for(j = startX; j < gs.imageEnd.x; j++, k++) { - writePixelMem((u32*)pstart, j%2048, (i + tempi)%2048, (u32*)(pbuf), k, gs.dstbuf.bw); - } - k += ( pitch - fracX ); - } -} - -template -inline int TRANSMIT_PITCH(int pitch) { - return (PSM_BITS_PER_PIXEL() * pitch) >> 3; -} - -// ------------------------ -// | Y | -// ------------------------ -// | block | | -// | aligned area | X | -// | | | -// ------------------------ -// | Y | -// ------------------------ - - -template -int FinishTransfer(int i, int j, int nSize, int nLeftOver) -{ - if( i >= gs.imageEnd.y ) - { - assert( gs.transferring == false || i == gs.imageEnd.y ); - gs.transferring = false; - } - else { - /* update new params */ - gs.image.y = i; - gs.image.x = j; - } - - return (nSize * TRANSMIT_PITCH(2) + nLeftOver)/2; -} - -template -int TransferHostLocal(const void* pbyMem, u32 nQWordSize) -{ - assert( gs.imageTransfer == XFER_HOST_TO_LOCAL ); - u8* pstart = g_pbyGSMemory + gs.dstbuf.bp*256; - - int i = gs.image.y, j = gs.image.x; - - const u8* pbuf = (const u8*)pbyMem; - int nLeftOver = (nQWordSize*4*2)%(TRANSMIT_PITCH(2)); - int nSize = nQWordSize*4*2/TRANSMIT_PITCH(2); - nSize = min(nSize, gs.imageNew.w * gs.imageNew.h); - - int pitch, area, fracX; - int endY = ROUND_UPPOW2(i, blockheight); - Point alignedPt; - - alignedPt.x = ROUND_DOWNPOW2(gs.imageEnd.x, blockwidth); - alignedPt.y = ROUND_DOWNPOW2(gs.imageEnd.y, blockheight); - - bool bAligned; - bool bCanAlign = MOD_POW2(gs.trxpos.dx, blockwidth) == 0 && (j == gs.trxpos.dx) && (alignedPt.y > endY) && alignedPt.x > gs.trxpos.dx; - - if( (gs.imageEnd.x - gs.trxpos.dx) % widthlimit ) { - /* hack */ - int testwidth = (int)nSize - (gs.imageEnd.y - i) * (gs.imageEnd.x - gs.trxpos.dx) + (j - gs.trxpos.dx); - if((testwidth <= widthlimit) && (testwidth >= -widthlimit)) { - /* don't transfer */ - /*ZZLog::Debug_Log("bad texture %s: %d %d %d\n", #psm, gs.trxpos.dx, gs.imageEnd.x, nQWordSize);*/ - gs.transferring = false; - } - bCanAlign = false; - } - - /* first align on block boundary */ - if( MOD_POW2(i, blockheight) || !bCanAlign ) { - - if( !bCanAlign ) - endY = gs.imageEnd.y; /* transfer the whole image */ - else - assert( endY < gs.imageEnd.y); /* part of alignment condition */ - - int limit = widthlimit; - if (((gs.imageEnd.x - gs.trxpos.dx) % widthlimit) || ((gs.imageEnd.x - j) % widthlimit)) - /* transmit with a width of 1 */ - limit = 1 + (gs.dstbuf.psm == PSMT4); - /*TRANSMIT_HOSTLOCAL_Y##TransSfx(psm, T, limit, endY)*/ - int k = 0; - - if (TRANSMIT_HOSTLOCAL_Y((u32*)pbuf, nSize, pstart, endY, i, j, k)) - return FinishTransfer(i, j, nSize, nLeftOver); - - pbuf += TRANSMIT_PITCH(k); - - if (nSize == 0 || i == gs.imageEnd.y) return FinishTransfer(i, j, nSize, nLeftOver); - } - - assert( MOD_POW2(i, blockheight) == 0 && j == gs.trxpos.dx); - - /* can align! */ - pitch = gs.imageEnd.x - gs.trxpos.dx; - area = pitch * blockheight; - fracX = gs.imageEnd.x - alignedPt.x; - - /* on top of checking whether pbuf is aligned, make sure that the width is at least aligned to its limits (due to bugs in pcsx2) */ - bAligned = !((uptr)pbuf & 0xf) && ((TRANSMIT_PITCH(pitch)&0xf) == 0); - - /* transfer aligning to blocks */ - for(; i < alignedPt.y && nSize >= area; i += blockheight, nSize -= area) { - - for(int tempj = gs.trxpos.dx; tempj < alignedPt.x; tempj += blockwidth, pbuf += TRANSMIT_PITCH(blockwidth)) { - SwizzleBlock((u32*)(pstart + getPixelAddress(tempj, i, gs.dstbuf.bw)*blockbits/8), - (u32*)pbuf, TRANSMIT_PITCH(pitch)); - } - - /* transfer the rest */ - if( alignedPt.x < gs.imageEnd.x ) { - int k = 0; - TRANSMIT_HOSTLOCAL_X((u32*)pbuf, nSize, pstart, i, j, k, blockheight, alignedPt.x, pitch, fracX); - pbuf += TRANSMIT_PITCH(k - alignedPt.x + gs.trxpos.dx); - } - else pbuf += (blockheight-1)*TRANSMIT_PITCH(pitch); - j = gs.trxpos.dx; - } - - if( TRANSMIT_PITCH(nSize)/4 > 0 ) { - int k = 0; - TRANSMIT_HOSTLOCAL_Y((u32*)pbuf, nSize, pstart, gs.imageEnd.y, i, j, k); - pbuf += TRANSMIT_PITCH(k); - /* sometimes wrong sizes are sent (tekken tag) */ - assert( gs.transferring == false || TRANSMIT_PITCH(nSize)/4 <= 2 ); - } - - return FinishTransfer(i, j, nSize, nLeftOver); -} - -inline int TransferHostLocal32(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal32Z(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal24(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal24Z(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal16(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal16S(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal16Z(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal16SZ(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal8(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal4(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal8H(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal4HL(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -inline int TransferHostLocal4HH(const void* pbyMem, u32 nQWordSize) -{ - return TransferHostLocal( pbyMem, nQWordSize); -} - -void TransferLocalHost32(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost24(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost16(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost16S(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost8(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost4(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost8H(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost4HL(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost4HH(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost32Z(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost24Z(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost16Z(void* pbyMem, u32 nQWordSize) { FUNCLOG } -void TransferLocalHost16SZ(void* pbyMem, u32 nQWordSize) { FUNCLOG } - -inline void FILL_BLOCK(BLOCK& b, vector& vBlockData, vector& vBilinearData, int ox, int oy, int psmX) { - int bw = ZZ_DT[psmX][4] + 1; - int bh = ZZ_DT[psmX][3] + 1; - int mult = 1 << ZZ_DT[psmX][0]; - - b.vTexDims = float4 (BLOCK_TEXWIDTH/(float)(bw), BLOCK_TEXHEIGHT/(float)(bh), 0, 0); - b.vTexBlock = float4( (float)bw/BLOCK_TEXWIDTH, (float)bh/BLOCK_TEXHEIGHT, ((float)ox+0.2f)/BLOCK_TEXWIDTH, ((float)oy+0.05f)/BLOCK_TEXHEIGHT); - b.width = bw; - b.height = bh; - b.colwidth = bh / 4; - b.colheight = bw / 8; - b.bpp = 32/mult; - - b.pageTable = g_pageTable[psmX]; - b.blockTable = g_blockTable[psmX]; - b.columnTable = g_columnTable[psmX]; - - // This is never true. - //assert( sizeof(g_pageTable[psmX]) == bw*bh*sizeof(g_pageTable[psmX][0][0]) ); - float* psrcf = (float*)&vBlockData[0] + ox + oy * BLOCK_TEXWIDTH; - for(int i = 0; i < bh; ++i) { - for(int j = 0; j < bw; ++j) { - /* fill the table */ - u32 u = g_blockTable[psmX][(i / b.colheight)][(j / b.colwidth)] * 64 * mult + g_columnTable[psmX][i%b.colheight][j%b.colwidth]; - b.pageTable[i][j] = u; - psrcf[i*BLOCK_TEXWIDTH+j] = (float)(u) / (float)(GPU_TEXWIDTH*mult); - } - } - - float4* psrcv = (float4*)&vBilinearData[0] + ox + oy * BLOCK_TEXWIDTH; - for(int i = 0; i < bh; ++i) { - for(int j = 0; j < bw; ++j) { - float4* pv = &psrcv[i*BLOCK_TEXWIDTH+j]; - pv->x = psrcf[i*BLOCK_TEXWIDTH+j]; - pv->y = psrcf[i*BLOCK_TEXWIDTH+((j+1)%bw)]; - pv->z = psrcf[((i+1)%bh)*BLOCK_TEXWIDTH+j]; - pv->w = psrcf[((i+1)%bh)*BLOCK_TEXWIDTH+((j+1)%bw)]; - } - } -} - -void BLOCK::FillBlocks(vector& vBlockData, vector& vBilinearData) -{ - FUNCLOG - vBlockData.resize(BLOCK_TEXWIDTH * BLOCK_TEXHEIGHT * (floatfmt ? 4 : 2)); - - if (floatfmt) - vBilinearData.resize(BLOCK_TEXWIDTH * BLOCK_TEXHEIGHT * sizeof(float4)); - - BLOCK b; - - memset(m_Blocks, 0, sizeof(m_Blocks)); - - // 32 - FILL_BLOCK(b, vBlockData, vBilinearData, 0, 0, PSMCT32); - b.TransferHostLocal = TransferHostLocal32; - b.TransferLocalHost = TransferLocalHost32; - m_Blocks[PSMCT32] = b; - - // 24 (same as 32 except write/readPixel are different) - b.TransferHostLocal = TransferHostLocal24; - b.TransferLocalHost = TransferLocalHost24; - m_Blocks[PSMCT24] = b; - - // 8H (same as 32 except write/readPixel are different) - b.TransferHostLocal = TransferHostLocal8H; - b.TransferLocalHost = TransferLocalHost8H; - m_Blocks[PSMT8H] = b; - - b.TransferHostLocal = TransferHostLocal4HL; - b.TransferLocalHost = TransferLocalHost4HL; - m_Blocks[PSMT4HL] = b; - - b.TransferHostLocal = TransferHostLocal4HH; - b.TransferLocalHost = TransferLocalHost4HH; - m_Blocks[PSMT4HH] = b; - - // 32z - FILL_BLOCK(b, vBlockData, vBilinearData, 64, 0, PSMT32Z); - b.TransferHostLocal = TransferHostLocal32Z; - b.TransferLocalHost = TransferLocalHost32Z; - m_Blocks[PSMT32Z] = b; - - // 24Z (same as 32Z except write/readPixel are different) - b.TransferHostLocal = TransferHostLocal24Z; - b.TransferLocalHost = TransferLocalHost24Z; - m_Blocks[PSMT24Z] = b; - - // 16 - FILL_BLOCK(b, vBlockData, vBilinearData, 0, 32, PSMCT16); - b.TransferHostLocal = TransferHostLocal16; - b.TransferLocalHost = TransferLocalHost16; - m_Blocks[PSMCT16] = b; - - // 16s - FILL_BLOCK(b, vBlockData, vBilinearData, 64, 32, PSMCT16S); - b.TransferHostLocal = TransferHostLocal16S; - b.TransferLocalHost = TransferLocalHost16S; - m_Blocks[PSMCT16S] = b; - - // 16z - FILL_BLOCK(b, vBlockData, vBilinearData, 0, 96, PSMT16Z); - b.TransferHostLocal = TransferHostLocal16Z; - b.TransferLocalHost = TransferLocalHost16Z; - m_Blocks[PSMT16Z] = b; - - // 16sz - FILL_BLOCK(b, vBlockData, vBilinearData, 64, 96, PSMT16SZ); - b.TransferHostLocal = TransferHostLocal16SZ; - b.TransferLocalHost = TransferLocalHost16SZ; - m_Blocks[PSMT16SZ] = b; - - // 8 - FILL_BLOCK(b, vBlockData, vBilinearData, 0, 160, PSMT8); - b.TransferHostLocal = TransferHostLocal8; - b.TransferLocalHost = TransferLocalHost8; - m_Blocks[PSMT8] = b; - - // 4 - FILL_BLOCK(b, vBlockData, vBilinearData, 0, 224, PSMT4); - b.TransferHostLocal = TransferHostLocal4; - b.TransferLocalHost = TransferLocalHost4; - m_Blocks[PSMT4] = b; -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMem.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMem.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglMem.h 2013-03-25 18:49:29.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglMem.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,790 +0,0 @@ -/* ZeroGS KOSMOS - * Copyright (C) 2005-2006 zerofrog@gmail.com - * - * 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 - */ - -#ifndef __ZZOGL_MEM_H__ -#define __ZZOGL_MEM_H__ - -#include -#include -#include "GS.h" -#include "Util.h" -#include "Mem.h" - -#ifndef ZZNORMAL_MEMORY - -extern u32 g_blockTable32[4][8]; -extern u32 g_blockTable32Z[4][8]; -extern u32 g_blockTable16[8][4]; -extern u32 g_blockTable16S[8][4]; - -extern u32 g_blockTable16Z[8][4]; - -extern u32 g_blockTable16SZ[8][4]; - -extern u32 g_blockTable8[4][8]; -extern u32 g_blockTable4[8][4]; - -extern u32 g_columnTable32[8][8]; -extern u32 g_columnTable16[8][16]; -extern u32 g_columnTable8[16][16]; -extern u32 g_columnTable4[16][32]; - -//-- - -extern u32 g_pageTable32[32][64]; -extern u32 g_pageTable32Z[32][64]; -extern u32 g_pageTable16[64][64]; -extern u32 g_pageTable16S[64][64]; -extern u32 g_pageTable16Z[64][64]; -extern u32 g_pageTable16SZ[64][64]; -extern u32 g_pageTable8[64][128]; -extern u32 g_pageTable4[128][128]; - - -//maximum PSM is 58, so our arrays have 58 + 1 = 59 elements - -// This table is used for fast access to memory storage data. -extern u32 ZZ_DT[MAX_PSM][TABLE_WIDTH]; - - -//maxium PSM is 58, so our arrays have 58 + 1 = 59 elements -extern u32** g_pageTable[MAX_PSM]; -extern u32** g_blockTable[MAX_PSM]; -extern u32** g_columnTable[MAX_PSM]; -extern u32 g_pageTable2[MAX_PSM][127][127]; -extern u32** g_pageTableNew[MAX_PSM]; - -// rest not visible externally -struct BLOCK -{ - BLOCK() { memset(this, 0, sizeof(BLOCK)); } - - // shader constants for this block - float4 vTexBlock; - float4 vTexDims; - int width, height; // dims of one page in pixels - int bpp; - int colwidth, colheight; - u32** pageTable; // offset inside each page - u32** blockTable; - u32** columnTable; - - // Nobody use this, so we better remove it. -// u32 (*getPixelAddress)(int x, int y, u32 bp, u32 bw); -// u32 (*getPixelAddress_0)(int x, int y, u32 bw); -// void (*writePixel)(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw); -// void (*writePixel_0)(void* pmem, int x, int y, u32 pixel, u32 bw); -// u32 (*readPixel)(const void* pmem, int x, int y, u32 bp, u32 bw); -// u32 (*readPixel_0)(const void* pmem, int x, int y, u32 bw); - int (*TransferHostLocal)(const void* pbyMem, u32 nQWordSize); - void (*TransferLocalHost)(void* pbyMem, u32 nQWordSize); - - // texture must be of dims BLOCK_TEXWIDTH and BLOCK_TEXHEIGHT - static void FillBlocks(std::vector& vBlockData, std::vector& vBilinearData); -}; - -void FillBlockTables(); -void DestroyBlockTables(); -void FillNewPageTable(); - -extern BLOCK m_Blocks[]; - -extern u32 g_blockTable32[4][8]; -extern u32 g_blockTable32Z[4][8]; -extern u32 g_blockTable16[8][4]; -extern u32 g_blockTable16S[8][4]; -extern u32 g_blockTable16Z[8][4]; -extern u32 g_blockTable16SZ[8][4]; -extern u32 g_blockTable8[4][8]; -extern u32 g_blockTable4[8][4]; - -extern u32 g_columnTable32[8][8]; -extern u32 g_columnTable16[8][16]; -extern u32 g_columnTable8[16][16]; -extern u32 g_columnTable4[16][32]; - -extern u32 g_pageTable32[32][64]; -extern u32 g_pageTable32Z[32][64]; -extern u32 g_pageTable16[64][64]; -extern u32 g_pageTable16S[64][64]; -extern u32 g_pageTable16Z[64][64]; -extern u32 g_pageTable16SZ[64][64]; -extern u32 g_pageTable8[64][128]; -extern u32 g_pageTable4[128][128]; - - -extern u32** g_pageTable[MAX_PSM]; -extern u32** g_blockTable[MAX_PSM]; -extern u32** g_columnTable[MAX_PSM]; -extern u32 ZZ_DT[MAX_PSM][TABLE_WIDTH]; -extern u32** g_pageTableNew[MAX_PSM]; - -static __forceinline void MaskedOR(u32* dst, u32 pixel, u32 mask = 0xffffffff) { - if (mask == 0xffffffff) - *dst = pixel; - else - *dst = (*dst & (~mask)) | (pixel & mask); -} - -// This two defines seems like idiotic code, but in reality it have one, but big importance -- this code -// made psm variable (and psm2 in second case) -- constant, so optimiser could properly pass proper function -#define PSM_SWITCHCASE(X) { \ - switch (psm) { \ - case PSMCT32: { \ - const int psmC = PSMCT32; \ - X; } \ - break; \ - case PSMT32Z: { \ - const int psmC = PSMT32Z; \ - X; } \ - break; \ - case PSMCT24: { \ - const int psmC = PSMCT24; \ - X; } \ - break; \ - case PSMT24Z: { \ - const int psmC = PSMT24Z; \ - X; } \ - break; \ - case PSMCT16: { \ - const int psmC = PSMCT16; \ - X; } \ - break; \ - case PSMCT16S: { \ - const int psmC = PSMCT16S; \ - X; } \ - break; \ - case PSMT16Z: { \ - const int psmC = PSMT16Z; \ - X; } \ - break; \ - case PSMT16SZ: { \ - const int psmC = PSMT16SZ; \ - X; } \ - break; \ - case PSMT8: { \ - const int psmC = PSMT8; \ - X; } \ - break; \ - case PSMT8H: { \ - const int psmC = PSMT8H; \ - X; } \ - break; \ - case PSMT4HH: { \ - const int psmC = PSMT4HH; \ - X; } \ - break; \ - case PSMT4HL: { \ - const int psmC = PSMT4HL; \ - X; } \ - break; \ - case PSMT4: { \ - const int psmC = PSMT4; \ - X; } \ - break; \ - }\ -} - -#define PSM_SWITCHCASE_2(X) { \ - switch (psm) { \ - case PSMCT32: \ - if( psm2 == PSMCT32 ) { const int psmC = PSMCT32, psmC1 = PSMCT32; X; } \ - else { const int psmC = PSMCT32, psmC1 = PSMT32Z; X; } \ - break; \ - case PSMCT24: \ - if( psm2 == PSMCT24 ) { const int psmC = PSMCT24, psmC1 = PSMCT24; X; } \ - else { const int psmC = PSMCT24, psmC1 = PSMT24Z; X; } \ - break; \ - case PSMT32Z: \ - if( psm2 == PSMT32Z ) { const int psmC = PSMT32Z, psmC1 = PSMCT32; X; } \ - else { const int psmC = PSMT32Z, psmC1 = PSMT32Z; X; } \ - break; \ - case PSMT24Z: \ - if( psm2 == PSMCT24 ) { const int psmC = PSMT24Z, psmC1 = PSMCT24; X; } \ - else { const int psmC = PSMT24Z, psmC1 = PSMT24Z; X; } \ - break; \ - case PSMCT16: \ - switch(psm2) { \ - case PSMCT16: { const int psmC = PSMCT16, psmC1 = PSMCT16; X; } break; \ - case PSMCT16S: { const int psmC = PSMCT16, psmC1 = PSMCT16S; X; } break; \ - case PSMT16Z: { const int psmC = PSMCT16, psmC1 = PSMT16Z; X; } break; \ - case PSMT16SZ: { const int psmC = PSMCT16, psmC1 = PSMT16SZ; X; } break; \ - } \ - break; \ - case PSMCT16S: \ - switch(psm2) { \ - case PSMCT16: { const int psmC = PSMCT16S, psmC1 = PSMCT16; X; } break; \ - case PSMCT16S: { const int psmC = PSMCT16S, psmC1 = PSMCT16S; X; } break; \ - case PSMT16Z: { const int psmC = PSMCT16S, psmC1 = PSMT16Z; X; } break; \ - case PSMT16SZ: { const int psmC = PSMCT16S, psmC1 = PSMT16SZ; X; } break; \ - } \ - break; \ - case PSMT16Z: \ - switch(psm2) { \ - case PSMCT16: { const int psmC = PSMT16Z, psmC1 = PSMCT16; X; } break; \ - case PSMCT16S: { const int psmC = PSMT16Z, psmC1 = PSMCT16S; X; } break; \ - case PSMT16Z: { const int psmC = PSMT16Z, psmC1 = PSMT16Z; X; } break; \ - case PSMT16SZ: { const int psmC = PSMT16Z, psmC1 = PSMT16SZ; X; } break; \ - } \ - break; \ - case PSMT16SZ: \ - switch(psm2) { \ - case PSMCT16: { const int psmC = PSMT16SZ, psmC1 = PSMCT16; X; } break; \ - case PSMCT16S: { const int psmC = PSMT16SZ, psmC1 = PSMCT16S; X; } break; \ - case PSMT16Z: { const int psmC = PSMT16SZ, psmC1 = PSMT16Z; X; } break; \ - case PSMT16SZ: { const int psmC = PSMT16SZ, psmC1 = PSMT16SZ; X; } break; \ - } \ - break; \ - case PSMT8: \ - if( psm2 == PSMT8 ) { const int psmC = PSMT8, psmC1 = PSMT8; X; } \ - else { const int psmC = PSMT8, psmC1 = PSMT8H; X; } \ - break; \ - case PSMT8H: \ - if( psm2 == PSMT8H ) { const int psmC = PSMT8H, psmC1 = PSMT8; X; } \ - else { const int psmC = PSMT8H, psmC1 = PSMT8H; X; } \ - break; \ - case PSMT4: \ - switch(psm2) { \ - case PSMT4: { const int psmC = PSMT4, psmC1 = PSMT4; X; } break; \ - case PSMT4HL: { const int psmC = PSMT4, psmC1 = PSMT4HL; X; } break; \ - case PSMT4HH: { const int psmC = PSMT4, psmC1 = PSMT4HH; X; } break; \ - } \ - break; \ - case PSMT4HL: \ - switch(psm2) { \ - case PSMT4: { const int psmC = PSMT4HL, psmC1 = PSMT4; X; } break; \ - case PSMT4HL: { const int psmC = PSMT4HL, psmC1 = PSMT4HL; X; } break; \ - case PSMT4HH: { const int psmC = PSMT4HL, psmC1 = PSMT4HH; X; } break; \ - } \ - break; \ - case PSMT4HH: \ - switch(psm2) { \ - case PSMT4: { const int psmC = PSMT4HH, psmC1 = PSMT4; X; } break; \ - case PSMT4HL: { const int psmC = PSMT4HH, psmC1 = PSMT4HL; X; } break; \ - case PSMT4HH: { const int psmC = PSMT4HH, psmC1 = PSMT4HH; X; } break; \ - } \ - break; \ - } \ -} - -template -static __forceinline void setPsmtConstantsX(u8& A, u8& B, u8& C, u8& D, u8& E, u8& F, u32& G, u8& H) { - switch (psm) { - case PSMCT32: - case PSMT32Z: - A = 5; B = 6; C = 0; D = 31; E = 63; F = 0; H = 1; G = 0xffffffff; - break; - - case PSMCT24: - case PSMT24Z: - A = 5; B = 6; C = 0; D = 31; E = 63; F = 0; H = 1; G = 0xffffff; - break; - - case PSMT8H: - A = 5; B = 6; C = 0; D = 31; E = 63; F = 24; H = 4; G = 0xff; - break; - - case PSMT4HH: - A = 5; B = 6; C = 0; D = 31; E = 63; F = 28; H = 8; G = 0xf; - break; - - case PSMT4HL: - A = 5; B = 6; C = 0; D = 31; E = 63; F = 24; H = 8; G = 0xf; - break; - - case PSMCT16: - case PSMT16Z: - case PSMCT16S: - case PSMT16SZ: - A = 6; B = 6; C = 1; D = 63; E = 63; F = 0; H = 2; G = 0xffff; - break; - - case PSMT8: - A = 6; B = 7; C = 2; D = 63; E = 127; F = 0; H = 4; G = 0xff; - break; - - case PSMT4: - A = 7; B = 7; C = 3; D = 127; E = 127; F = 0; H = 8; G = 0xf; - break; - } -} - -// This is where the NEW_CODE define used to be. - -// ------------------------------------------ get Address functions ------------------------------------ -// Yes, only 1 function to all cases of life! -// Warning! We switch bp and bw for usage of default value, so be warned! It's -// not C, it's C++, so not it. -template -static __forceinline u32 getPixelAddress(int x, int y, u32 bw, u32 bp = 0) { - u32 basepage; - u32 word; - - u8 A = 0, B = 0, C = 0, D = 0, E = 0, F = 0; u32 G = 0; u8 H= 0; - setPsmtConstantsX(A, B, C, D, E, F, G, H); - basepage = ((y>>A) * (bw>>B)) + (x>>B); - word = ((bp * 64 + basepage * 2048) << C) + g_pageTable[psm][y&D][x&E]; - - return word; -} - -// It's Zerofrog's function. I need to eliminate them all! All access should be 32-bit aligned. -static __forceinline u32 getPixelAddress(int psm, int x, int y, u32 bw, u32 bp = 0) { - PSM_SWITCHCASE(return getPixelAddress(x, y, bw, bp) ;) - return 0; -} - -// This is compatibility code, for reference, -#define Def_getPixelAddress(psmT, psmX) \ - static __forceinline u32 getPixelAddress##psmT(int x, int y, u32 bp, u32 bw) { \ - return getPixelAddress(x, y, bw, bp); } \ - static __forceinline u32 getPixelAddress##psmT##_0(int x, int y, u32 bw) { \ - return getPixelAddress(x, y, bw); } \ - -Def_getPixelAddress(32, PSMCT32) -Def_getPixelAddress(16, PSMCT16) -Def_getPixelAddress(16S, PSMCT16S) -Def_getPixelAddress(8, PSMT8) -Def_getPixelAddress(4, PSMT4) -Def_getPixelAddress(32Z, PSMT32Z) -Def_getPixelAddress(16Z, PSMT16Z) -Def_getPixelAddress(16SZ, PSMT16SZ) - -#define getPixelAddress24 getPixelAddress32 -#define getPixelAddress24_0 getPixelAddress32_0 -#define getPixelAddress8H getPixelAddress32 -#define getPixelAddress8H_0 getPixelAddress32_0 -#define getPixelAddress4HL getPixelAddress32 -#define getPixelAddress4HL_0 getPixelAddress32_0 -#define getPixelAddress4HH getPixelAddress32 -#define getPixelAddress4HH_0 getPixelAddress32_0 -#define getPixelAddress24Z getPixelAddress32Z -#define getPixelAddress24Z_0 getPixelAddress32Z_0 - -// Check FFX-1 (very begining) for PSMT8 -// Check Tekken menu for PSMT4 -// ZZ_DT[7] is needed only for PSMT8H, PSMT4HL and PSMT4HH -- at this case word contain data not from a begining. - -// This function return shift from 32-bit aligned address and shift -- number of byte in u32 order. -// so if ((u32*)mem + getPixelAddress_Aligned32) is exact location of u32, where our pixel data stored. -// Just for remember: -// PMSCT32, 24, 32Z, 24Z, 8HH, 4HL and 4HH have ZZ_DT[psm] == 3, so shift is always 0. -// PSMCT16, 16S, 16SZ, 16Z have ZZ_DT[psm] == 2, so shift is 0 or 16. -// PSMT8 ZZ_DT[psm] == 1, shift is 0, 8, 16, 24 -// PSMT4 ZZ_DT[psm] == 0, shift is 0, 4, 8, 12, 16, 20, 24, 28. - -// It allow us to made a fast access to pixels in the same basepage: if x % N == 0 (N = 1, 2, 4, 8, .. 64) -// than we could guarantee that all pixels form x to x + N - 1 are in the same basepage. -template -static __forceinline u32* getPixelBasepage(const void* pmem, int x, int y, u32 bw, u32 bp = 0) { - u32 basepage; - u8 A = 0, B = 0, C = 0 , D = 0, E = 0, F = 0; u32 G = 0; u8 H = 0; - setPsmtConstantsX (A, B, C, D, E, F, G, H); - basepage = ((y>>A) * (bw>>B)) + (x>>B); - return ((u32*)pmem + (bp * 64 + basepage * 2048)); -} - -// And this is offset for this pixels. -template -static __forceinline u32* getPixelOffset(u32& mask, u32& shift, const void* pmem, int x, int y) { - u32 word; - - u8 A = 0, B = 0, C = 0 , D = 0, E = 0, F = 0; u32 G = 0; u8 H = 0; - setPsmtConstantsX (A, B, C, D, E, F, G, H); - - word = (g_pageTable[psm][y&D][x&E] << (3 - C)); - shift = ((word & 0x7) << 2) + F; - mask &= G << shift; - - return ((u32*)pmem + ((word & ~0x7) >> 3)); -} - - -template -static __forceinline u32* getPixelAddress_A32(u32& mask, u32& shift, const void* pmem, int x, int y, u32 bw, u32 bp = 0) { - return getPixelOffset(mask, shift, getPixelBasepage(pmem, x, y, bw, bp), x, y); - -} - -template -static __forceinline u32* getPixelBaseAddress_A32(const void* pmem, int x, int y, u32 bw, u32 bp = 0) { - u32 word; - - u8 A = 0, B = 0, C = 0 , D = 0, E = 0, F = 0; u32 G = 0; u8 H = 0; - setPsmtConstantsX (A, B, C, D, E, F, G, H); - - word = (g_pageTable[psm][y&D][x&E] << (3 - C)); - return ((u32*)getPixelBasepage(pmem, x, y, bw, bp) + ((word & ~0x7) >> 3)); -} - -// Wrapper for cases, where psm is not constant, should be avoided inside cycles -static __forceinline u32* getPixelAddress_A32(u32& mask, u32& shift, int psm, const void* pmem, int x, int y, u32 bw, u32 bp = 0) { - PSM_SWITCHCASE( return getPixelAddress_A32(mask, shift, pmem, x, y, bw, bp) ); - return 0; -} - -static __forceinline u32* getClutAddress(u8* pmem, const tex0Info& tex0) { - if (PSMT_ISHALF(tex0.cpsm)) - return (u32*)(pmem + 64 * (tex0.csa & 15) + (tex0.csa >= 16 ? 2 : 0) ); - else - return (u32*)(pmem + 64 * (tex0.csa & 15)); -} - -//--------------------------------------------- Write Pixel ----------------------------------------------------------- -// Set proper mask for transfering multiple bytes per word. -template -inline u32 HandleWritemask(u32 Writemask) { - u8 G = PSM_BITS_PER_PIXEL(); - u32 dmask = Writemask & ((1 << G) - 1); // drop all bits in writemask, that could not be used - u32 mask; - - switch (psm) { - case PSMT8H: // modes with non-zero start bit should be handled differently - return 0xff000000; - case PSMT4HL: - return 0x0f000000; - case PSMT4HH: - return 0xf0000000; - default: - mask = dmask; // 32 targets and lower - - if (G < 24) { - mask |= dmask << G; // 16 targets and lower - if (G < 16) { - mask |= dmask << (2 * G); // 8 targets and lower - mask |= dmask << (3 * G); - if (G < 8) { - mask |= dmask << (4 * G); // 4 targets - mask |= dmask << (5 * G); - mask |= dmask << (6 * G); - mask |= dmask << (7 * G); - }}} - return mask; - } -} - -//push pixel data at position x,y, according psm storage format. pixel do not need to be properly masked, wrong bit's would not be used -//mask should be made according PSM. -template -static __forceinline void writePixel(void* pmem, int x, int y, u32 pixel, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 shift; - u32* p = getPixelAddress_A32(mask, shift, pmem, x, y, bw, bp); - - MaskedOR (p, pixel << shift, mask); -} - -static __forceinline void writePixel(int psm, void* pmem, int x, int y, u32 pixel, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - PSM_SWITCHCASE(writePixel(pmem, x, y, pixel, bw, bp, mask)); -} - -// Put pixel data from memory. Pixel is p, memory start from pixel, and we should count pmove words and shift resulting word to shift -// 24 targets could be outside of 32-bit borders. -template -static __forceinline void pushPixelMem(u32* p, u32* pixel, int pmove, int shift, u32 mask = 0xffffffff) { - if (psm != PSMCT24 || psm != PSMT24Z) { - if (shift > 0) - MaskedOR (p, (*(pixel + pmove)) << (shift), mask); - else - MaskedOR (p, (*(pixel + pmove)) >> (-shift), mask); - } - else { // for 24 and 24Z psm data could be not-aligned by 32. Merde! - u64 pixel64 = (*(u64*)(pixel + pmove) ) >> (-shift); // we read more data, but for 24 targets shift always negative and resulting data is u32 - MaskedOR(p, (u32)pixel64, mask); // drop upper part, we don't need it. all data is stored in lower part of u64 after shift - -// MaskedOR(p, (u32)((u8*)pixel + count * 3), mask); - } -} - -// use it if pixel already shifted by needed number of bytes. -// offseted mean that we should skip basepage calculation, pmem is link to basepage'ed memory. Just a little quicker. -template -static __forceinline void writePixelMem(const void* pmem, int x, int y, u32* pixel, int count, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 shift; - u32* p; - - if (offseted) - p = getPixelOffset(mask, shift, pmem, x, y); - else - p = getPixelAddress_A32(mask, shift, pmem, x, y, bw, bp); - - int A = PSM_BITS_PER_PIXEL(); - - int pmove = (count * A) >> 5; - int pshift = (count * A) & 31; // we assume, that if shift outside word, than user want next pixel data - - pushPixelMem(p, pixel, pmove, (int)shift - pshift, mask); -} - - -// This function push several pixels. Note, that for 32, 24, 8HH, 4HL, 4HH it's simply write (and pixel should not be properly masked), 16 do push 2 pixels (and x should be even). -// 8 push 4 pixels: 0,0; 0,1; 1,0 and 1,1. 4 push 8: 0,0; 0,1; 1,0; 1,1; 2,0, 2,1; 3,0; 3,1. -template -static __forceinline void writePixelWord(const void* pmem, int x, int y, u32 pixel, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 maskA = mask, shift; - u32* p = getPixelAddress_A32(maskA, shift, pmem, x, y, bw, bp); - -/* if (PSM_NON_FULL_WORD()) - maskA = maskA & mask; - else - maskA = mask;*/ - - MaskedOR (p, pixel, mask); -} - -// ------------------------------------- Read Pixel --------------------------------------- -template -static __forceinline u32 readPixel(const void* pmem, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 shift; - u32* p = getPixelAddress_A32(mask, shift, pmem, x, y, bw, bp); - - return ((*p & mask) >> shift); -} - -static __forceinline u32 readPixel(int psm, const void* pmem, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - PSM_SWITCHCASE(return readPixel(pmem, x, y, bw, bp, mask);); - return 0; -} - -template -static __forceinline u32 readPixelWord(const void* pmem, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 maskA = 0xffffffff, shift; - if (PSM_NON_FULL_WORD()) - return *getPixelAddress_A32(mask, shift, pmem, x, y, bw, bp) & mask; - else - return *getPixelAddress_A32(maskA, shift, pmem, x, y, bw, bp) & mask; -} - -template -static __forceinline void fillMemoryFromPixels(u32* dst, const void* pmem, int& count, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 pixel; - - u8 I = PSM_BITS_PER_PIXEL(); - int K = count / PSM_PIXELS_STORED_PER_WORD(); // offset for pmem, count for 32, count / 2 for 16, etc. - - pixel = readPixel(pmem, x, y, bw, bp, mask); // I prefer not to use for here. It's slow - if (I < 32) { - pixel += readPixel(pmem, x + 1, y, bw, bp, mask) << I; - if (I < 16) { // 8 and 4 targets - pixel += readPixel(pmem, x + 2, y, bw, bp, mask) << (2 * I); - pixel += readPixel(pmem, x + 3, y, bw, bp, mask) << (3 * I); - if (I < 8) { // This is for 4, 4HH and 4HL - pixel += readPixel(pmem, x + 4, y, bw, bp, mask) << (4 * I); - pixel += readPixel(pmem, x + 5, y, bw, bp, mask) << (5 * I); - pixel += readPixel(pmem, x + 6, y, bw, bp, mask) << (6 * I); - pixel += readPixel(pmem, x + 7, y, bw, bp, mask) << (7 * I); - }}} - - if (I != 24) { - *(dst + K) = pixel; - } - else { // 24. should have special care. -// ERROR_LOG("special care %d\n", count); - MaskedOR((u32*)((u8*)dst + 3 * count), pixel, 0xffffff); - } - count += PSM_PIXELS_STORED_PER_WORD(); -} - - -// Fill count pixels form continues memory region, starting from pmem, First pixel to read have number shift in this region. -// Read no more than count pixels. We could assert, that all this pixels would be place in the same basepage -// Shift is automaticaly increased by count (or decreased if count < 0) -template -static __forceinline void writePixelsFromMemory(void* dst, const void* pmem, int& shift, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - const void* base; - if (offseted) - base = getPixelBasepage(dst, x, y, bw, bp); - else - base = (const void*)dst; - - shift += count; - writePixelMem(base, x, y, (u32*)pmem, shift - count, bw, bp, mask); // I prefer not to use for here. It's slow - if (count < 2) return; - writePixelMem(base, x + 1, y, (u32*)pmem, shift - count + 1, bw, bp, mask); - if (count < 3) return; - writePixelMem(base, x + 2, y, (u32*)pmem, shift - count + 2, bw, bp, mask); - if (count < 4) return; - writePixelMem(base, x + 3, y, (u32*)pmem, shift - count + 3, bw, bp, mask); - if (count < 5) return; - writePixelMem(base, x + 4, y, (u32*)pmem, shift - count + 4, bw, bp, mask); - if (count < 6) return; - writePixelMem(base, x + 5, y, (u32*)pmem, shift - count + 5, bw, bp, mask); - if (count < 7) return; - writePixelMem(base, x + 6, y, (u32*)pmem, shift - count + 6, bw, bp, mask); - if (count < 8) return; - writePixelMem(base, x + 7, y, (u32*)pmem, shift - count + 7, bw, bp, mask); -} - -// Use it if we don't know that starting pixel is aligned for multiple-pixel write -template -static __forceinline void writeUnalignedPixelsFromMemory(void* dst, int div, const void* pmem, int& shift, int x, int y, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - switch (div){ - case 0: return; // Pixels are aligned, so we could move on - case 1: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 2: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 3: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 4: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 5: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 6: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - case 7: writePixelsFromMemory(dst, pmem, shift, x, y, bw, bp, mask); - return; - } -} - -// This little swizzle function used to convert data form memory. z is first byte in destination block, and y is number of word, in which we look look for data. -// s is shift by number of pixels, that should be used in masking -template -static __forceinline u32 BitmaskinPSM(u32* pmem, u8 x) { - - u8 H = PSM_BITCOUNT(); - u8 I = PSM_BITS_PER_PIXEL() ; // length of bitmask in bits. - - - if (PSM_BITMODE() != 1) { // PSMCT24 and 24Z should be handle separated, as it could pass 32-bit storage. - u8 k = (x & (H - 1)) * I; // shift of PC data -- in PC we use pixels from constant position: x / H word and k is shift: x = ( x % H ) * H + k / I - // in PS2 we use all bit position from 0 by I pixels. - - u32 J = ((1 << I) - 1) << k; // bitmask (of length ) & mask, moved by position k - - // gcc complains repeatedly about this always being false. I'll investigate later. - if (z > k) - return ((*(pmem + x/H + y)) & J) << (z - k); // we use PX data from *mem + and properly shift - else // This formula loo little swizzled. - return ((*(pmem + x/H + y)) & J) >> (k - z); - } - else { // only 24 targets - u8* mem = ((u8*)pmem + (x * 3) + 4 * y); // Our pixel's is disaligned on 32-bit. So just use u8*. - return *(u32*)mem; // Mask would be handled later - } -} - -// We use this function to limit number of memory R/W. This function fill all pixels for data with coordindates x, y. inside block data. -// Only rule is x, y should be < 8 (it automatically fill all needed pixels, that lie in blockdata, but have coords more than 8). -template -static __forceinline void fillPixelsFromMemory(u32* dst, u32* pmem, int x, int y, int pitch, u32 bw, u32 bp = 0, u32 mask = 0xffffffff) { - u32 pixel = 0; - const u8 H = PSM_PIXELS_PER_WORD(); - - if (PSM_PIXEL_SHIFT() == 0) // We could not use calculated constants as templated parameters. - pixel = BitmaskinPSM(pmem, x); // First pixel x,y is the common part of all psmt path's - else { - if (PSM_PIXEL_SHIFT() == 24) // 8H and 4HL have 1 pixel, but shifted to 24 bits. 4HH -- 28 bits. - pixel = BitmaskinPSM(pmem, x); - else - pixel = BitmaskinPSM(pmem, x); - } - if (H > 1) { - const u8 G = psm & 0x7; // Bitmode, we use it for better chance of switch optimization - int div = ( x < 4 ) ? 4 : -4; // secondary row have shift by +4 or -4 pixels - - switch (G) { - case 2: - pixel |= BitmaskinPSM(pmem, x); - break; - case 3: - pixel |= BitmaskinPSM(pmem, x); - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - break; - case 4: - pixel |= BitmaskinPSM(pmem, x); - pixel |= BitmaskinPSM(pmem, x); - pixel |= BitmaskinPSM(pmem, x); - - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - pixel |= BitmaskinPSM(pmem + 2 * pitch, x + div); - - break; - } - } - writePixelWord(dst, x, y, pixel, bw, bp, HandleWritemask(mask)); // use it for 32, 24, 8H, 4HL and 4HH -} - -template -void writeWordPixel(u32* pmem, u32 pixel, u32 mask) { - if (psm == PSMT4HH || psm == PSMT8H || psm == PSMT4HL || psm == PSMCT24 || psm == PSMT24Z) - MaskedOR(pmem, pixel, mask); - else - *pmem = pixel; -} - -// Get pixel from src and put in in src. We assume, that psm of both buffers are the same and (sx-dx) & E == (sy - dy) & D == 0; -// Also in this case we could transfer the whole word -template -void transferPixelFast(void* dst, void* src, int dx, int dy, int sx, int sy, u32 dbw, u32 sbw ) { - u32 Dbasepage, Sbasepage; - u32 word, mask = 0xffffffff; - - u8 A = 0, B = 0, C = 0 , D = 0, E = 0, F = 0; u32 G = 0; u8 H = 0; - setPsmtConstantsX (A, B, C, D, E, F, G, H); - assert ( ((sx-dx) & E == (sy - dy) & D) && ((sy - dy) & D == 0) ); - - Dbasepage = ((dy>>A) * (dbw>>B)) + (dx>>B); - Sbasepage = ((sy>>A) * (sbw>>B)) + (sx>>B); - - word = (g_pageTable[psm][sy&D][sx&E] >> C); - - u32* dstp = (u32*)dst + Dbasepage * 2048 + word; - u32* srcp = (u32*)src + Sbasepage * 2048 + word; - - writeWordPixel(dstp, *srcp, G << F); -} - -// if we could not guarantee, that buffer suize shared same page Table address -template -void transferPixel(void* dst, void* src, int dx, int dy, int sx, int sy, u32 dbw, u32 sbw ) { - u32 mask = 0xffffffff, shift; - u32* dstp = getPixelAddress_A32(mask, shift, dst, dx, dy, dbw); - u32* srcp = getPixelAddress_A32(mask, shift, src, sx, sy, sbw); - writeWordPixel(dstp, *srcp, mask); // write whole word -} - -#define Def_getReadWrite(psmT, psmX) \ - static __forceinline void writePixel##psmT(void* pmem, int x, int y, u32 pixel, u32 bp, u32 bw) { \ - writePixel(pmem, x, y, pixel, bw, bp); } \ - static __forceinline u32 readPixel##psmT(const void* pmem, int x, int y, u32 bp, u32 bw) { \ - return readPixel(pmem, x, y, bw, bp); } \ - static __forceinline void writePixel##psmT##_0(void* pmem, int x, int y, u32 pixel, u32 bw) { \ - writePixel(pmem, x, y, pixel, bw); } \ - static __forceinline u32 readPixel##psmT##_0(const void* pmem, int x, int y, u32 bw) { \ - return readPixel(pmem, x, y, bw); } - -Def_getReadWrite(32, PSMCT32); -Def_getReadWrite(24, PSMCT24); -Def_getReadWrite(16, PSMCT16); -Def_getReadWrite(16S, PSMCT16); -Def_getReadWrite(8, PSMT8); -Def_getReadWrite(8H, PSMT8H); -Def_getReadWrite(4, PSMT4); -Def_getReadWrite(4HH, PSMT4HH); -Def_getReadWrite(4HL, PSMT4HL); -Def_getReadWrite(32Z, PSMCT32); -Def_getReadWrite(24Z, PSMCT24); -Def_getReadWrite(16Z, PSMCT16); -Def_getReadWrite(16SZ, PSMCT16); - -#endif // Zeydlitz's code - -#endif /* __ZZOGL_MEM_H__ */ diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglSave.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglSave.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglSave.cpp 2014-04-18 21:20:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglSave.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Save and Load. - -//------------------ Includes - #include "Util.h" -#include "ZZoglVB.h" - -extern void ZZGSStateReset(); -//----------------------- Defines - -#define VBSAVELIMIT ((u32)((u8*)&vb[0].nNextFrameHeight-(u8*)&vb[0])) -#define ZEROGS_SAVEVER 0xaa000005 - -//------------------ Variables - -// Hack for save game compatible! -#ifdef _DEBUG -const char *libraryNameX = "ZeroGS-Pg OpenGL (Debug) "; -#elif defined(ZEROGS_DEVBUILD) -const char *libraryNameX = "ZeroGS-Pg OpenGL (Dev) "; -#else -const char *libraryNameX = "ZeroGS Playground OpenGL "; -#endif - -//------------------ Code - -extern char *libraryName; -extern u32 s_uTex1Data[2][2], s_uClampData[2]; - -void SetFogColor(u32 fog); -void SetFogColor(GIFRegFOGCOL* fog); - -int ZZSave(s8* pbydata) -{ - if (pbydata == NULL) - return 40 + MEMORY_END + sizeof(gs) + 2*VBSAVELIMIT + 2*sizeof(frameInfo) + 4 + 256*4; - - s_RTs.ResolveAll(); - s_DepthRTs.ResolveAll(); - - strcpy((char*)pbydata, libraryNameX); - - *(u32*)(pbydata + 16) = ZEROGS_SAVEVER; - - pbydata += 32; - *(int*)pbydata = icurctx; - - pbydata += 4; - *(int*)pbydata = VBSAVELIMIT; - - pbydata += 4; - - memcpy(pbydata, g_pbyGSMemory, MEMORY_END); - pbydata += MEMORY_END; - - memcpy(pbydata, g_pbyGSClut, 256*4); - pbydata += 256 * 4; - - *(int*)pbydata = sizeof(gs); - pbydata += 4; - - memcpy(pbydata, &gs, sizeof(gs)); - pbydata += sizeof(gs); - - for (int i = 0; i < 2; ++i) - { - memcpy(pbydata, &vb[i], VBSAVELIMIT); - pbydata += VBSAVELIMIT; - } - - return 0; -} - -extern u32 g_nCurVBOIndex; - -bool ZZLoad(s8* pbydata) -{ - memset(s_uTex1Data, 0, sizeof(s_uTex1Data)); - memset(s_uClampData, 0, sizeof(s_uClampData)); - - g_nCurVBOIndex = 0; - - // first 32 bytes are the id - u32 savever = *(u32*)(pbydata + 16); - - if (strncmp((char*)pbydata, libraryNameX, 6) == 0 && (savever == ZEROGS_SAVEVER || savever == 0xaa000004)) - { - g_MemTargs.Destroy(); - - ZZGSStateReset(); - pbydata += 32; - - //int context = *(int*)pbydata; - pbydata += 4; - u32 savelimit = VBSAVELIMIT; - - savelimit = *(u32*)pbydata; - pbydata += 4; - - memcpy(g_pbyGSMemory, pbydata, MEMORY_END); - pbydata += MEMORY_END; - - memcpy(g_pbyGSClut, pbydata, 256*4); - pbydata += 256 * 4; - - memset(&gs, 0, sizeof(gs)); - - int savedgssize; - - if (savever == 0xaa000004) - { - savedgssize = 0x1d0; - } - else - { - savedgssize = *(int*)pbydata; - pbydata += 4; - } - - memcpy(&gs, pbydata, savedgssize); - - pbydata += savedgssize; - prim = &gs._prim[gs.prac]; - - vb[0].Destroy(); - memcpy(&vb[0], pbydata, min(savelimit, VBSAVELIMIT)); - pbydata += savelimit; - vb[0].pBufferData = NULL; - - vb[1].Destroy(); - memcpy(&vb[1], pbydata, min(savelimit, VBSAVELIMIT)); - pbydata += savelimit; - vb[1].pBufferData = NULL; - - for (int i = 0; i < 2; ++i) - { - vb[i].Init(VB_BUFFERSIZE); - vb[i].bNeedZCheck = vb[i].bNeedFrameCheck = 1; - - vb[i].bSyncVars = 0; - vb[i].bNeedTexCheck = 1; - memset(vb[i].uCurTex0Data, 0, sizeof(vb[i].uCurTex0Data)); - } - - icurctx = -1; - - FB::Bind(); // switch to the backbuffer - SetFogColor(gs.fogcol); - - GL_REPORT_ERRORD(); - return true; - } - - return false; -} - diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShaders.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShaders.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShaders.cpp 2014-07-31 22:50:41.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShaders.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,935 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009 zeydlitz@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2006 - * - * 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 - */ - -// By default enable nvidia cg api -#if !defined(GLSL_API) && !defined(NVIDIA_CG_API) && !defined(GLSL4_API) -#define NVIDIA_CG_API -#endif - -#ifdef NVIDIA_CG_API // This code is only for NVIDIA cg-toolkit API -// ZZogl Shader manipulation functions. - -//------------------- Includes -#include "Util.h" -#include "ZZoglShaders.h" -#include "zpipe.h" -#include -#include - -#ifdef _WIN32 -# include "Win32.h" -extern HINSTANCE hInst; -#endif - -// ----------------- Defines - -#define TEXWRAP_REPEAT 0 -#define TEXWRAP_CLAMP 1 -#define TEXWRAP_REGION_REPEAT 2 -#define TEXWRAP_REPEAT_CLAMP 3 - -#define SH_WRITEDEPTH 0x2000 // depth is written -#define SH_CONTEXT1 0x1000 // context1 is used -#define SH_REGULARVS 0x8000 -#define SH_TEXTUREVS 0x8001 -#define SH_REGULARFOGVS 0x8002 -#define SH_TEXTUREFOGVS 0x8003 -#define SH_REGULARPS 0x8004 -#define SH_REGULARFOGPS 0x8005 -#define SH_BITBLTVS 0x8006 -#define SH_BITBLTPS 0x8007 -#define SH_BITBLTDEPTHPS 0x8009 -#define SH_CRTCTARGPS 0x800a -#define SH_CRTCPS 0x800b -#define SH_CRTC24PS 0x800c -#define SH_ZEROPS 0x800e -#define SH_BASETEXTUREPS 0x800f -#define SH_BITBLTAAPS 0x8010 -#define SH_CRTCTARGINTERPS 0x8012 -#define SH_CRTCINTERPS 0x8013 -#define SH_CRTC24INTERPS 0x8014 -#define SH_BITBLTDEPTHMRTPS 0x8016 -#define SH_CONVERT16TO32PS 0x8020 -#define SH_CONVERT32TO16PS 0x8021 -#define SH_CRTC_NEARESTPS 0x8022 -#define SH_CRTCINTER_NEARESTPS 0x8023 - -//------------------ Constants - -// Used in a logarithmic Z-test, as (1-o(1))/log(MAX_U32). -const float g_filog32 = 0.999f / (32.0f * logf(2.0f)); - -const char* g_pShaders[4] = { "full", "reduced", "accurate", "accurate-reduced" }; - -// ----------------- Global Variables - -ZZshContext g_cgcontext; -ZZshProfile cgvProf, cgfProf; -int g_nPixelShaderVer = 0; // default -u8* s_lpShaderResources = NULL; -ZZshProgram pvs[16] = {NULL}; -ZZshProgram g_vsprog = 0, g_psprog = 0; // 2 -- ZZ -ZZshParameter g_vparamPosXY[2] = {0}, g_fparamFogColor = 0; - -//#ifdef DEVBUILD -extern char EFFECT_NAME[256]; // All this variables used for testing and set manually -extern char EFFECT_DIR[256]; -//#endif - -bool g_bCRTCBilinear = true; - -float4 g_vdepth, vlogz; -FRAGMENTSHADER ppsBitBlt[2], ppsBitBltDepth, ppsOne; -FRAGMENTSHADER ppsBaseTexture, ppsConvert16to32, ppsConvert32to16; -FRAGMENTSHADER ppsRegular[4], ppsTexture[NUM_SHADERS]; -FRAGMENTSHADER ppsCRTC[2], /*ppsCRTC24[2],*/ ppsCRTCTarg[2]; -VERTEXSHADER pvsBitBlt; - -inline bool LoadEffects(); -extern bool s_bWriteDepth; - -struct SHADERHEADER -{ - unsigned int index, offset, size; // if highest bit of index is set, pixel shader -}; -map mapShaderResources; - -// Debug variable, store name of the function that call the shader. -const char* ShaderCallerName = ""; -const char* ShaderHandleName = ""; - -//------------------ Code - -inline int GET_SHADER_INDEX(int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int context, int ps) { - return type + texfilter*NUM_TYPES + NUM_FILTERS*NUM_TYPES*texwrap + NUM_TEXWRAPS*NUM_FILTERS*NUM_TYPES*(fog+2*writedepth+4*testaem+8*exactcolor+16*context+32*ps) ; -} - -bool ZZshCheckProfilesSupport() { - // load the effect, find the best profiles (if any) - if (cgGLIsProfileSupported(CG_PROFILE_ARBVP1) != CG_TRUE) { - ZZLog::Error_Log("arbvp1 not supported."); - return false; - } - if (cgGLIsProfileSupported(CG_PROFILE_ARBFP1) != CG_TRUE) { - ZZLog::Error_Log("arbfp1 not supported."); - return false; - } - return true; -} - -// Error handler. Setup in ZZogl_Create once. -void HandleCgError(ZZshContext ctx, ZZshError err, void* appdata) -{ - ZZLog::Error_Log("%s->%s: %s\n", ShaderCallerName, ShaderHandleName, cgGetErrorString(err)); - const char* listing = cgGetLastListing(g_cgcontext); - if (listing != NULL) - ZZLog::Debug_Log(" last listing: %s\n", listing); -} - -bool ZZshStartUsingShaders() { - cgSetErrorHandler(HandleCgError, NULL); - g_cgcontext = cgCreateContext(); - - cgvProf = CG_PROFILE_ARBVP1; - cgfProf = CG_PROFILE_ARBFP1; - cgGLEnableProfile(cgvProf); - cgGLEnableProfile(cgfProf); - cgGLSetOptimalOptions(cgvProf); - cgGLSetOptimalOptions(cgfProf); - - cgGLSetManageTextureParameters(g_cgcontext, CG_FALSE); - //cgSetAutoCompile(g_cgcontext, CG_COMPILE_IMMEDIATE); - - g_fparamFogColor = cgCreateParameter(g_cgcontext, CG_FLOAT4); - g_vparamPosXY[0] = cgCreateParameter(g_cgcontext, CG_FLOAT4); - g_vparamPosXY[1] = cgCreateParameter(g_cgcontext, CG_FLOAT4); - - - ZZLog::GS_Log("Creating effects."); - B_G(LoadEffects(), return false); - - // create a sample shader - clampInfo temp; - memset(&temp, 0, sizeof(temp)); - temp.wms = 3; temp.wmt = 3; - - g_nPixelShaderVer = 0;//SHADER_ACCURATE; - // test - bool bFailed; - FRAGMENTSHADER* pfrag = ZZshLoadShadeEffect(0, 1, 1, 1, 1, temp, 0, &bFailed); - if( bFailed || pfrag == NULL ) { - g_nPixelShaderVer = SHADER_ACCURATE|SHADER_REDUCED; - - pfrag = ZZshLoadShadeEffect(0, 0, 1, 1, 0, temp, 0, &bFailed); - if( pfrag != NULL ) - cgGLLoadProgram(pfrag->prog); - if( bFailed || pfrag == NULL || cgGetError() != CG_NO_ERROR ) { - g_nPixelShaderVer = SHADER_REDUCED; - ZZLog::Error_Log("Basic shader test failed."); - } - } - - if (g_nPixelShaderVer & SHADER_REDUCED) - conf.bilinear = 0; - - ZZLog::GS_Log("Creating extra effects."); - B_G(ZZshLoadExtraEffects(), return false); - - ZZLog::GS_Log("using %s shaders\n", g_pShaders[g_nPixelShaderVer]); - return true; -} - -void ZZshExitCleaning() { - // nothing to do with cg -} - -// open shader file according to build target -bool ZZshCreateOpenShadersFile() { -#ifndef DEVBUILD -# ifdef _WIN32 - HRSRC hShaderSrc = FindResource(hInst, MAKEINTRESOURCE(IDR_SHADERS), RT_RCDATA); - assert( hShaderSrc != NULL ); - HGLOBAL hShaderGlob = LoadResource(hInst, hShaderSrc); - assert( hShaderGlob != NULL ); - s_lpShaderResources = (u8*)LockResource(hShaderGlob); -# else // not _WIN32 - FILE* fres = fopen("ps2hw.dat", "rb"); - if( fres == NULL ) { - fres = fopen("plugins/ps2hw.dat", "rb"); - if( fres == NULL ) { - ZZLog::Error_Log("Cannot find ps2hw.dat in working directory. Exiting."); - return false; - } - } - fseek(fres, 0, SEEK_END); - size_t s = ftell(fres); - s_lpShaderResources = new u8[s+1]; - fseek(fres, 0, SEEK_SET); - if (fread(s_lpShaderResources, s, 1, fres) == 0) - ZZLog::Error_Log("Cannot read ps2hw.dat in working directory."); - s_lpShaderResources[s] = 0; - fclose(fres); -# endif // _WIN32 -#else // NOT RELEASE_TO_PUBLIC -# ifndef _WIN32 // NOT WINDOWS - // test if ps2hw.fx exists - char tempstr[255]; - char curwd[255]; - getcwd(curwd, ArraySize(curwd)); - - strcpy(tempstr, "/plugins/"); - sprintf(EFFECT_NAME, "%sps2hw.fx", tempstr); - FILE* f = fopen(EFFECT_NAME, "r"); - if( f == NULL ) { - - strcpy(tempstr, "../../plugins/zzogl-pg/opengl/"); - sprintf(EFFECT_NAME, "%sps2hw.fx", tempstr); - f = fopen(EFFECT_NAME, "r"); - - if( f == NULL ) { - ZZLog::Error_Log("Failed to find %s, try compiling a non-devbuild\n", EFFECT_NAME); - return false; - } - } - fclose(f); - - sprintf(EFFECT_DIR, "%s/%s", curwd, tempstr); - sprintf(EFFECT_NAME, "%sps2hw.fx", EFFECT_DIR); - #endif -#endif // RELEASE_TO_PUBLIC - return true; -} - -// Disable CG -void ZZshGLDisableProfile() { - cgGLDisableProfile(cgvProf); - cgGLDisableProfile(cgfProf); -} -//Enable CG -void ZZshGLEnableProfile() { - cgGLEnableProfile(cgvProf); - cgGLEnableProfile(cgfProf); -} - -// This is helper of cgGLSetParameter4fv, made for debug purpose. -// Name could be any string. We must use it on compilation time, because erroneus handler does not -// return name -void ZZshSetParameter4fv(ZZshParameter param, const float* v, const char* name) { - ShaderHandleName = name; - cgGLSetParameter4fv(param, v); -} - -void ZZshSetParameter4fv(ZZshProgram& prog, ZZshParameter param, const float* v, const char* name) { - ShaderHandleName = name; - cgGLSetParameter4fv(param, v); -} - -// The same stuff, but also with retry of param, name should be USED name of param for prog. -void ZZshSetParameter4fvWithRetry(ZZshParameter* param, ZZshProgram& prog, const float* v, const char* name) { - if (param != NULL) - ZZshSetParameter4fv(prog, param[0], v, name); - else - ZZshSetParameter4fv(prog, cgGetNamedParameter(prog, name), v, name); -} - -void ZZshGLSetTextureParameter(ZZshParameter param, GLuint texobj, const char* name) { - ShaderHandleName = name; - cgGLSetTextureParameter(param, texobj); - cgGLEnableTextureParameter(param); -} - -// The same function for texture, also to cgGLEnable -void ZZshGLSetTextureParameter(ZZshProgram prog, ZZshParameter param, GLuint texobj, const char* name) { - ShaderHandleName = name; - cgGLSetTextureParameter(param, texobj); - cgGLEnableTextureParameter(param); -} - -// Used sometimes for color 1. -void ZZshDefaultOneColor( FRAGMENTSHADER& ptr ) { - ShaderHandleName = "Set Default One color"; - float4 v = float4 ( 1, 1, 1, 1 ); - ZZshSetParameter4fv( ptr.prog, ptr.sOneColor, v, "DefaultOne"); -} - -#define SET_UNIFORMPARAM(var, name) { \ - p = cgGetNamedParameter(pf->prog, name); \ - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) \ - pf->var = p; \ -} \ - -void ZZshSetVertexShader(ZZshProgram prog) { - if ((prog) != g_vsprog) { - cgGLBindProgram(prog); - g_vsprog = prog; - } -} - -void ZZshSetPixelShader(ZZshProgram prog) { - if ((prog) != g_psprog) { - cgGLBindProgram(prog); - g_psprog = prog; - } -} - -void SetupFragmentProgramParameters(FRAGMENTSHADER* pf, int context, int type) -{ - // uniform parameters - ZZshParameter p; - - p = cgGetNamedParameter(pf->prog, "g_fFogColor"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgConnectParameter(g_fparamFogColor, p); - } - - SET_UNIFORMPARAM(sOneColor, "g_fOneColor"); - SET_UNIFORMPARAM(sBitBltZ, "g_fBitBltZ"); - SET_UNIFORMPARAM(sInvTexDims, "g_fInvTexDims"); - SET_UNIFORMPARAM(fTexAlpha2, "fTexAlpha2"); - SET_UNIFORMPARAM(fTexOffset, "g_fTexOffset"); - SET_UNIFORMPARAM(fTexDims, "g_fTexDims"); - SET_UNIFORMPARAM(fTexBlock, "g_fTexBlock"); - SET_UNIFORMPARAM(fClampExts, "g_fClampExts"); - SET_UNIFORMPARAM(fTexWrapMode, "TexWrapMode"); - SET_UNIFORMPARAM(fRealTexDims, "g_fRealTexDims"); - SET_UNIFORMPARAM(fTestBlack, "g_fTestBlack"); - SET_UNIFORMPARAM(fPageOffset, "g_fPageOffset"); - SET_UNIFORMPARAM(fTexAlpha, "fTexAlpha"); - - // textures - p = cgGetNamedParameter(pf->prog, "g_sBlocks"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexBlocks); - cgGLEnableTextureParameter(p); - } - - // cg parameter usage is wrong, so do it manually - if( type == 3 ) { - p = cgGetNamedParameter(pf->prog, "g_sConv16to32"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexConv16to32); - cgGLEnableTextureParameter(p); - } - } - else if( type == 4 ) { - p = cgGetNamedParameter(pf->prog, "g_sConv32to16"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexConv32to16); - cgGLEnableTextureParameter(p); - } - } - else { - p = cgGetNamedParameter(pf->prog, "g_sBilinearBlocks"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetTextureParameter(p, ptexBilinearBlocks); - cgGLEnableTextureParameter(p); - } - } - - p = cgGetNamedParameter(pf->prog, "g_sMemory"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sMemory = p; - } - p = cgGetNamedParameter(pf->prog, "g_sSrcFinal"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sFinal = p; - } - p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDX"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sBitwiseANDX = p; - } - p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDY"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sBitwiseANDY = p; - } - p = cgGetNamedParameter(pf->prog, "g_sCLUT"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sCLUT = p; - } - p = cgGetNamedParameter(pf->prog, "g_sInterlace"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - //cgGLEnableTextureParameter(p); - pf->sInterlace = p; - } - - // set global shader constants - p = cgGetNamedParameter(pf->prog, "g_fExactColor"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) { - cgGLSetParameter4fv(p, float4(0.5f, (conf.settings().exact_color)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f)); - } - - p = cgGetNamedParameter(pf->prog, "g_fBilinear"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f )); - - p = cgGetNamedParameter(pf->prog, "g_fZBias"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(1.0f/256.0f, 1.0004f, 1, 0.5f)); - - p = cgGetNamedParameter(pf->prog, "g_fc0"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(0,1, 0.001f, 0.5f)); - - p = cgGetNamedParameter(pf->prog, "g_fMult"); - if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f)); -} - -void SetupVertexProgramParameters(ZZshProgram prog, int context) -{ - ZZshParameter p; - - p = cgGetNamedParameter(prog, "g_fPosXY"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) - cgConnectParameter(g_vparamPosXY[context], p); - - // Set Z-test, log or no log; - if (conf.settings().no_logz) { - g_vdepth = float4( 255.0 /256.0f, 255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f)); - vlogz = float4( 1.0f, 0.0f, 0.0f, 0.0f); - } - else { - g_vdepth = float4( 256.0f*65536.0f, 65536.0f, 256.0f, 65536.0f*65536.0f); - vlogz = float4( 0.0f, 1.0f, 0.0f, 0.0f); - } - - p = cgGetNamedParameter(prog, "g_fZ"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) { - cgGLSetParameter4fv(p, g_vdepth); - - p = cgGetNamedParameter(prog, "g_fZMin"); // Switch to flat-z when needed - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) { - //ZZLog::Error_Log("Use flat-z\n"); - cgGLSetParameter4fv(p, vlogz); - } - else - ZZLog::Error_Log("Shader file version is outdated! Only log-Z is possible."); - } - - float4 vnorm = float4(g_filog32, 0, 0,0); - p = cgGetNamedParameter(prog, "g_fZNorm"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) - cgGLSetParameter4fv(p, vnorm); - - p = cgGetNamedParameter(prog, "g_fBilinear"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f )); - - p = cgGetNamedParameter(prog, "g_fZBias"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(1.0f/256.0f, 1.0004f, 1, 0.5f)); - - p = cgGetNamedParameter(prog, "g_fc0"); - if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) - cgGLSetParameter4fv(p, float4(0,1, 0.001f, 0.5f)); -} - -#ifndef DEVBUILD -#if 0 -static __forceinline void LOAD_VS(int Index, ZZshProgram prog) -{ - assert(mapShaderResources.find(Index) != mapShaderResources.end()); - header = mapShaderResources[Index]; - assert((header) != NULL && (header)->index == (Index)); - prog = cgCreateProgram(g_cgcontext, CG_OBJECT, (char*)(s_lpShaderResources + (header)->offset), cgvProf, NULL, NULL); - if (!cgIsProgram(prog)) - { - ZZLog::Error_Log("Failed to load vs %d: \n%s", Index, cgGetLastListing(g_cgcontext)); - return false; - } - cgGLLoadProgram(prog); - - if (cgGetError() != CG_NO_ERROR) ZZLog::Error_Log("Failed to load program %d.", Index); - SetupVertexProgramParameters(prog, !!(Index&SH_CONTEXT1)); -} - - -static __forceinline void LOAD_VS(int Index, FRAGMENTSHADER fragment) -{ - bLoadSuccess = true; - assert(mapShaderResources.find(Index) != mapShaderResources.end()); - header = mapShaderResources[Index]; - fragment.prog = cgCreateProgram(g_cgcontext, CG_OBJECT, (char*)(s_lpShaderResources + (header)->offset), cgfProf, NULL, NULL); - if (!cgIsProgram(fragment.prog)) - { - ZZLog::Error_Log("Failed to load ps %d: \n%s", Index, cgGetLastListing(g_cgcontext)); - return false; - } - - cgGLLoadProgram(fragment.prog); - - if (cgGetError() != CG_NO_ERROR) - { - ZZLog::Error_Log("failed to load program %d.", Index); - bLoadSuccess = false; - } - - SetupFragmentProgramParameters(&fragment, !!(Index&SH_CONTEXT1), 0); -} -#endif - -#define LOAD_VS(Index, prog) { \ - assert( mapShaderResources.find(Index) != mapShaderResources.end() ); \ - header = mapShaderResources[Index]; \ - assert( (header) != NULL && (header)->index == (Index) ); \ - prog = cgCreateProgram(g_cgcontext, CG_OBJECT, (char*)(s_lpShaderResources + (header)->offset), cgvProf, NULL, NULL); \ - if( !cgIsProgram(prog) ) { \ - ZZLog::Error_Log("Failed to load vs %d: \n%s", Index, cgGetLastListing(g_cgcontext)); \ - return false; \ - } \ - cgGLLoadProgram(prog); \ - if( cgGetError() != CG_NO_ERROR ) ZZLog::Error_Log("Failed to load program %d.", Index); \ - SetupVertexProgramParameters(prog, !!(Index&SH_CONTEXT1)); \ -} \ - -#define LOAD_PS(Index, fragment) { \ - bLoadSuccess = true; \ - assert( mapShaderResources.find(Index) != mapShaderResources.end() ); \ - header = mapShaderResources[Index]; \ - fragment.prog = cgCreateProgram(g_cgcontext, CG_OBJECT, (char*)(s_lpShaderResources + (header)->offset), cgfProf, NULL, NULL); \ - if( !cgIsProgram(fragment.prog) ) { \ - ZZLog::Error_Log("Failed to load ps %d: \n%s", Index, cgGetLastListing(g_cgcontext)); \ - return false; \ - } \ - cgGLLoadProgram(fragment.prog); \ - if( cgGetError() != CG_NO_ERROR ) { \ - ZZLog::Error_Log("failed to load program %d.", Index); \ - bLoadSuccess = false; \ - } \ - SetupFragmentProgramParameters(&fragment, !!(Index&SH_CONTEXT1), 0); \ -} \ - -inline bool LoadEffects() -{ - assert( s_lpShaderResources != NULL ); - - // process the header - u32 num = *(u32*)s_lpShaderResources; - int compressed_size = *(int*)(s_lpShaderResources+4); - int real_size = *(int*)(s_lpShaderResources+8); - int out; - - char* pbuffer = (char*)malloc(real_size); - inf((char*)s_lpShaderResources+12, &pbuffer[0], compressed_size, real_size, &out); - assert(out == real_size); - - s_lpShaderResources = (u8*)pbuffer; - SHADERHEADER* header = (SHADERHEADER*)s_lpShaderResources; - - mapShaderResources.clear(); - while(num-- > 0 ) { - mapShaderResources[header->index] = header; - ++header; - } - - // clear the textures - for(u16 i = 0; i < ArraySize(ppsTexture); ++i) { - SAFE_RELEASE_PROG(ppsTexture[i].prog); - ppsTexture[i].prog = NULL; - } -#ifndef _DEBUG - memset(ppsTexture, 0, sizeof(ppsTexture)); -#endif - - return true; -} - -// called -bool ZZshLoadExtraEffects() -{ - SHADERHEADER* header; - bool bLoadSuccess = true; - - const u32 vsshaders[4] = { SH_REGULARVS, SH_TEXTUREVS, SH_REGULARFOGVS, SH_TEXTUREFOGVS }; - - for(int i = 0; i < 4; ++i) { - LOAD_VS(vsshaders[i], pvs[2*i]); - LOAD_VS((vsshaders[i] | SH_CONTEXT1), pvs[2*i+1]); - //if( conf.mrtdepth ) { - LOAD_VS((vsshaders[i] | SH_WRITEDEPTH), pvs[2*i+8]); - LOAD_VS((vsshaders[i] | SH_WRITEDEPTH | SH_CONTEXT1), pvs[2*i+8+1]); -// } -// else { -// pvs[2*i+8] = pvs[2*i+8+1] = NULL; -// } - } - - LOAD_VS(SH_BITBLTVS, pvsBitBlt.prog); - pvsBitBlt.sBitBltPos = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltPos"); - pvsBitBlt.sBitBltTex = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltTex"); - pvsBitBlt.fBitBltTrans = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltTrans"); - - LOAD_PS(SH_REGULARPS, ppsRegular[0]); - LOAD_PS(SH_REGULARFOGPS, ppsRegular[1]); - - if( conf.mrtdepth ) { - LOAD_PS(SH_REGULARPS, ppsRegular[2]); - if( !bLoadSuccess ) - conf.mrtdepth = 0; - LOAD_PS(SH_REGULARFOGPS, ppsRegular[3]); - if( !bLoadSuccess ) - conf.mrtdepth = 0; - } - - LOAD_PS(SH_BITBLTPS, ppsBitBlt[0]); - LOAD_PS(SH_BITBLTAAPS, ppsBitBlt[1]); - if( !bLoadSuccess ) { - ZZLog::Error_Log("Failed to load BitBltAAPS, using BitBltPS."); - LOAD_PS(SH_BITBLTPS, ppsBitBlt[1]); - } - LOAD_PS(SH_BITBLTDEPTHPS, ppsBitBltDepth); - LOAD_PS(SH_CRTCTARGPS, ppsCRTCTarg[0]); - LOAD_PS(SH_CRTCTARGINTERPS, ppsCRTCTarg[1]); - - g_bCRTCBilinear = true; - LOAD_PS(SH_CRTCPS, ppsCRTC[0]); - if( !bLoadSuccess ) { - // switch to simpler - g_bCRTCBilinear = false; - LOAD_PS(SH_CRTC_NEARESTPS, ppsCRTC[0]); - LOAD_PS(SH_CRTCINTER_NEARESTPS, ppsCRTC[0]); - } - else { - LOAD_PS(SH_CRTCINTERPS, ppsCRTC[1]); - } - - if( !bLoadSuccess ) - ZZLog::Error_Log("Failed to create CRTC shaders."); - -// LOAD_PS(SH_CRTC24PS, ppsCRTC24[0]); -// LOAD_PS(SH_CRTC24INTERPS, ppsCRTC24[1]); - LOAD_PS(SH_ZEROPS, ppsOne); - LOAD_PS(SH_BASETEXTUREPS, ppsBaseTexture); - LOAD_PS(SH_CONVERT16TO32PS, ppsConvert16to32); - LOAD_PS(SH_CONVERT32TO16PS, ppsConvert32to16); - - return true; -} - -FRAGMENTSHADER* ZZshLoadShadeEffect(int type, int texfilter, int fog, int testaem, int exactcolor, const clampInfo& clamp, int context, bool* pbFailed) -{ - int texwrap; - assert( texfilter < NUM_FILTERS ); - - if(g_nPixelShaderVer&SHADER_REDUCED) - texfilter = 0; - assert(!(g_nPixelShaderVer&SHADER_REDUCED) || !exactcolor); - - if( clamp.wms == clamp.wmt ) { - switch( clamp.wms ) { - case 0: texwrap = TEXWRAP_REPEAT; break; - case 1: texwrap = TEXWRAP_CLAMP; break; - case 2: texwrap = TEXWRAP_CLAMP; break; - default: texwrap = TEXWRAP_REGION_REPEAT; break; - } - } - else if( clamp.wms==3||clamp.wmt==3) - texwrap = TEXWRAP_REGION_REPEAT; - else - texwrap = TEXWRAP_REPEAT_CLAMP; - - u32 index = GET_SHADER_INDEX(type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, context, 0); - - assert( index < ArraySize(ppsTexture) ); - FRAGMENTSHADER* pf = ppsTexture+index; - - if( pbFailed != NULL ) *pbFailed = false; - - if( pf->prog != NULL ) - return pf; - - if( (g_nPixelShaderVer & SHADER_ACCURATE) && mapShaderResources.find(index+NUM_SHADERS*SHADER_ACCURATE) != mapShaderResources.end() ) - index += NUM_SHADERS*SHADER_ACCURATE; - - assert( mapShaderResources.find(index) != mapShaderResources.end() ); - SHADERHEADER* header = mapShaderResources[index]; - if( header == NULL ) - ZZLog::Error_Log("%d %d", index, g_nPixelShaderVer); - assert( header != NULL ); - - //DEBUG_LOG("shader:\n%s\n", (char*)(s_lpShaderResources + (header)->offset)); - pf->prog = cgCreateProgram(g_cgcontext, CG_OBJECT, (char*)(s_lpShaderResources + (header)->offset), cgfProf, NULL, NULL); - if( pf->prog != NULL && cgIsProgram(pf->prog) && cgGetError() == CG_NO_ERROR ) { - SetupFragmentProgramParameters(pf, context, type); - cgGLLoadProgram(pf->prog); - if( cgGetError() != CG_NO_ERROR ) { -// cgGLLoadProgram(pf->prog); -// if( cgGetError() != CG_NO_ERROR ) { - ZZLog::Error_Log("Failed to load shader %d,%d,%d,%d.", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = true; - return pf; -// } - } - return pf; - } - - ZZLog::Error_Log("Failed to create shader %d,%d,%d,%d", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = true; - - return NULL; -} - -#else // not RELEASE_TO_PUBLIC - -#define LOAD_VS(name, prog, shaderver) { \ - prog = cgCreateProgramFromFile(g_cgcontext, CG_SOURCE, EFFECT_NAME, shaderver, name, args); \ - if( !cgIsProgram(prog) ) { \ - ZZLog::Error_Log("Failed to load vs %s: \n%s", name, cgGetLastListing(g_cgcontext)); \ - return false; \ - } \ - cgGLLoadProgram(prog); \ - if( cgGetError() != CG_NO_ERROR ) ZZLog::Error_Log("failed to load program %s", name); \ - SetupVertexProgramParameters(prog, args[0]==context1); \ -} \ - -#ifdef _DEBUG -#define SET_PSFILENAME(frag, name) frag.filename = name -#else -#define SET_PSFILENAME(frag, name) -#endif - -#define LOAD_PS(name, fragment, shaderver) { \ - bLoadSuccess = true; \ - fragment.prog = cgCreateProgramFromFile(g_cgcontext, CG_SOURCE, EFFECT_NAME, shaderver, name, args); \ - if( !cgIsProgram(fragment.prog) ) { \ - ZZLog::Error_Log("Failed to load ps %s: \n%s", name, cgGetLastListing(g_cgcontext)); \ - return false; \ - } \ - cgGLLoadProgram(fragment.prog); \ - if( cgGetError() != CG_NO_ERROR ) { \ - ZZLog::Error_Log("failed to load program %s", name); \ - bLoadSuccess = false; \ - } \ - SetupFragmentProgramParameters(&fragment, args[0]==context1, 0); \ - SET_PSFILENAME(fragment, name); \ -} \ - -inline bool LoadEffects() -{ - // clear the textures - for(int i = 0; i < ArraySize(ppsTexture); ++i) { - SAFE_RELEASE_PROG(ppsTexture[i].prog); - } - -#ifndef _DEBUG - memset(ppsTexture, 0, sizeof(ppsTexture)); -#endif - - return true; -} - -bool ZZshLoadExtraEffects() -{ - const char* args[] = { NULL , NULL, NULL, NULL }; - char context0[255], context1[255]; - sprintf(context0, "-I%sctx0", EFFECT_DIR); - sprintf(context1, "-I%sctx1", EFFECT_DIR); - char* write_depth = "-DWRITE_DEPTH"; - bool bLoadSuccess = true; - - const char* pvsshaders[4] = { "RegularVS", "TextureVS", "RegularFogVS", "TextureFogVS" }; - - for(int i = 0; i < 4; ++i) { - args[0] = context0; - args[1] = NULL; - LOAD_VS(pvsshaders[i], pvs[2*i], cgvProf); - args[0] = context1; - LOAD_VS(pvsshaders[i], pvs[2*i+1], cgvProf); - - //if( conf.mrtdepth ) { - args[0] = context0; - args[1] = write_depth; - LOAD_VS(pvsshaders[i], pvs[2*i+8], cgvProf); - args[0] = context1; - LOAD_VS(pvsshaders[i], pvs[2*i+8+1], cgvProf); -// } -// else { -// pvs[2*i+8] = pvs[2*i+8+1] = NULL; -// } - } - - args[0] = context0; - args[1] = NULL; - LOAD_VS("BitBltVS", pvsBitBlt.prog, cgvProf); - pvsBitBlt.sBitBltPos = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltPos"); - pvsBitBlt.sBitBltTex = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltTex"); - pvsBitBlt.fBitBltTrans = cgGetNamedParameter(pvsBitBlt.prog, "g_fBitBltTrans"); - - LOAD_PS("RegularPS", ppsRegular[0], cgfProf); - LOAD_PS("RegularFogPS", ppsRegular[1], cgfProf); - - if( conf.mrtdepth ) { - args[0] = context0; - args[1] = write_depth; - LOAD_PS("RegularPS", ppsRegular[2], cgfProf); - if( !bLoadSuccess ) - conf.mrtdepth = 0; - LOAD_PS("RegularFogPS", ppsRegular[3], cgfProf); - if( !bLoadSuccess ) - conf.mrtdepth = 0; - } - - LOAD_PS("BitBltPS", ppsBitBlt[0], cgfProf); - LOAD_PS("BitBltAAPS", ppsBitBlt[1], cgfProf); - if( !bLoadSuccess ) { - ZZLog::Error_Log("Failed to load BitBltAAPS, using BitBltPS."); - LOAD_PS("BitBltPS", ppsBitBlt[1], cgfProf); - } - - LOAD_PS("BitBltDepthPS", ppsBitBltDepth, cgfProf); - LOAD_PS("CRTCTargPS", ppsCRTCTarg[0], cgfProf); - LOAD_PS("CRTCTargInterPS", ppsCRTCTarg[1], cgfProf); - - g_bCRTCBilinear = true; - LOAD_PS("CRTCPS", ppsCRTC[0], cgfProf); - if( !bLoadSuccess ) { - // switch to simpler - g_bCRTCBilinear = false; - LOAD_PS("CRTCPS_Nearest", ppsCRTC[0], cgfProf); - LOAD_PS("CRTCInterPS_Nearest", ppsCRTC[0], cgfProf); - } - else { - LOAD_PS("CRTCInterPS", ppsCRTC[1], cgfProf); - } - - if( !bLoadSuccess ) - ZZLog::Error_Log("Failed to create CRTC shaders."); - -// LOAD_PS("CRTC24PS", ppsCRTC24[0], cgfProf); LOAD_PS("CRTC24InterPS", ppsCRTC24[1], cgfProf); - LOAD_PS("ZeroPS", ppsOne, cgfProf); - LOAD_PS("BaseTexturePS", ppsBaseTexture, cgfProf); - LOAD_PS("Convert16to32PS", ppsConvert16to32, cgfProf); - LOAD_PS("Convert32to16PS", ppsConvert32to16, cgfProf); - -// if( !conf.mrtdepth ) { -// ZZLog::Error_Log("Disabling MRT depth writing,"); -// s_bWriteDepth = FALSE; -// } - - return true; -} - -FRAGMENTSHADER* ZZshLoadShadeEffect(int type, int texfilter, int fog, int testaem, int exactcolor, const clampInfo& clamp, int context, bool* pbFailed) -{ - int texwrap; - - assert( texfilter < NUM_FILTERS ); - //assert( g_nPixelShaderVer == SHADER_30 ); - if( clamp.wms == clamp.wmt ) { - switch( clamp.wms ) { - case 0: texwrap = TEXWRAP_REPEAT; break; - case 1: texwrap = TEXWRAP_CLAMP; break; - case 2: texwrap = TEXWRAP_CLAMP; break; - default: - texwrap = TEXWRAP_REGION_REPEAT; break; - } - } - else if( clamp.wms==3||clamp.wmt==3) - texwrap = TEXWRAP_REGION_REPEAT; - else - texwrap = TEXWRAP_REPEAT_CLAMP; - - int index = GET_SHADER_INDEX(type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, context, 0); - - if( pbFailed != NULL ) *pbFailed = false; - - FRAGMENTSHADER* pf = ppsTexture+index; - - if( pf->prog != NULL ) - return pf; - - pf->prog = LoadShaderFromType(EFFECT_DIR, EFFECT_NAME, type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, g_nPixelShaderVer, context); - - if( pf->prog != NULL ) { -#ifdef _DEBUG - char str[255]; - const static char* g_pTexTypes[] = { "32", "tex32", "clut32", "tex32to16", "tex16to8h" }; - sprintf(str, "Texture%s%d_%sPS", fog?"Fog":"", texfilter, g_pTexTypes[type]); - pf->filename = str; -#endif - SetupFragmentProgramParameters(pf, context, type); - cgGLLoadProgram(pf->prog); - if( cgGetError() != CG_NO_ERROR ) { - // try again -// cgGLLoadProgram(pf->prog); -// if( cgGetError() != CG_NO_ERROR ) { - ZZLog::Error_Log("Failed to load shader %d,%d,%d,%d", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = true; - //assert(0); - // NULL makes things crash - return pf; -// } - } - return pf; - } - - ZZLog::Error_Log("Failed to create shader %d,%d,%d,%d", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = true; - - return NULL; -} - -#endif // RELEASE_TO_PUBLIC - -#endif // NVIDIA_CG_API diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShadersGLSL4.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShadersGLSL4.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShadersGLSL4.cpp 2014-07-31 23:00:53.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShadersGLSL4.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,594 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009 zeydlitz@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2006 - * - * 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 - */ - -#ifdef GLSL4_API // This code is only for GLSL API -// ZZogl Shader manipulation functions. - -/* - * used cg calls: - * cgGLIsProfileSupported -- don't needed - * cgGetErrorString -- later - * cgGetLastListing -- later - * cgSetErrorHandler -- later - * cgCreateContext -- think that don't need - * cgGLEnableProfile -- don't need - * cgGLSetOptimalOptions -- don't need? - * cgGLSetManageTextureParameters -- what's this? - * cgCreateParameter -- don't need - * cgGLLoadProgram void LinkProgram(uint program) - * cgGetError -- later - * cgGLDisableProfile -- don't need - * cgGLSetParameter4fv - * cgGetNamedParameter - * cgGLEnableTextureParameter - * cgIsParameterUsed - * cgGLBindProgram void UseProgram(uint program) - * cgConnectParameter - * cgIsProgram bool IsProgram(uint program) - * cgCreateProgramFromFile - */ - -//------------------- Includes -#include "Util.h" -#include "ZZoglShaders.h" -#include "zpipe.h" -#include -#include // this for open(). Maybe linux-specific -#include "ps2hw_gl4.h" - -// ----------------- Defines - -#define TEXWRAP_REPEAT 0 -#define TEXWRAP_CLAMP 1 -#define TEXWRAP_REGION_REPEAT 2 -#define TEXWRAP_REPEAT_CLAMP 3 - -#ifdef DEVBUILD -# define UNIFORM_ERROR_LOG ZZLog::Error_Log -#else -# define UNIFORM_ERROR_LOG -#endif - -// Set it to 0 to diable context usage, 1 -- to enable. FFX-1 have a strange issue with ClampExt. -#define NOCONTEXT 0 -#define NUMBER_OF_SAMPLERS 11 -#define MAX_SHADER_NAME_SIZE 25 -#define DEFINE_STRING_SIZE 256 - -// #define ENABLE_MARKER // Fire some marker for opengl Debugger (apitrace, gdebugger) -//------------------ Constants - -const static char* g_pTexTypes[] = { "32", "tex32", "clut32", "tex32to16", "tex16to8h" }; -const static char* g_pPsTexWrap[] = { "#define REPEAT 1\n", "#define CLAMP 1\n", "#define REGION_REPEAT 1\n", "\n" }; -const int GLSL_VERSION = 330; - - -// ----------------- Global Variables - -ZZshContext g_cgcontext; -ZZshProfile cgvProf, cgfProf; -int g_nPixelShaderVer = 0; // default -u8* s_lpShaderResources = NULL; -ZZshShaderLink pvs[16] = {sZero}, g_vsprog = sZero, g_psprog = sZero; // 2 -- ZZ -ZZshParameter g_vparamPosXY[2] = {pZero}, g_fparamFogColor = pZero; - -bool g_bCRTCBilinear = true; - -float4 g_vdepth, vlogz; -FRAGMENTSHADER ppsBitBlt[2], ppsBitBltDepth, ppsOne; -FRAGMENTSHADER ppsBaseTexture, ppsConvert16to32, ppsConvert32to16; -FRAGMENTSHADER ppsRegular[4], ppsTexture[NUM_SHADERS]; -FRAGMENTSHADER ppsCRTC[2], /*ppsCRTC24[2],*/ ppsCRTCTarg[2]; -VERTEXSHADER pvsStore[16]; -VERTEXSHADER pvsBitBlt; - -inline bool LoadEffects(); -extern bool s_bWriteDepth; - -// Debug variable, store name of the function that call the shader. -const char* ShaderCallerName = ""; -const char* ShaderHandleName = ""; - -// new for GLSL4 -GSUniformBufferOGL *constant_buffer; -GSUniformBufferOGL *common_buffer; -GSUniformBufferOGL *vertex_buffer; -GSUniformBufferOGL *fragment_buffer; -static bool dirty_common_buffer = true; -static bool dirty_vertex_buffer = true; -static bool dirty_fragment_buffer = true; - -GSVertexBufferStateOGL *vertex_array = NULL; - -COMMONSHADER g_cs; -static GLuint s_pipeline = 0; - -uint g_current_texture_bind[11] = {0}; -GLenum g_current_vs = 0; -GLenum g_current_ps = 0; - -FRAGMENTSHADER ppsDebug; -FRAGMENTSHADER ppsDebug2; -FRAGMENTSHADER ppsDebug3; - -//------------------ Code - -inline int GET_SHADER_INDEX(int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int context, int ps) { - return type + texfilter*NUM_TYPES + NUM_FILTERS*NUM_TYPES*texwrap + NUM_TEXWRAPS*NUM_FILTERS*NUM_TYPES*(fog+2*writedepth+4*testaem+8*exactcolor+16*context+32*ps) ; -} - -// Nothing need to be done. -bool ZZshCheckProfilesSupport() { - return true; -} - -bool ZZshStartUsingShaders() { - - ZZLog::Error_Log("Creating effects."); - B_G(LoadEffects(), return false); - if (!glCreateShader) - { - ZZLog::Error_Log("GLSL shaders is not supported, stop."); - return false; - } - - init_shader(); - - // create a sample shader - clampInfo temp; - memset(&temp, 0, sizeof(temp)); - temp.wms = 3; temp.wmt = 3; - - // test - bool bFailed; - FRAGMENTSHADER* pfrag = ZZshLoadShadeEffect(0, 1, 1, 1, 1, temp, 0, &bFailed); - if( bFailed || pfrag == NULL ) { - ZZLog::Error_Log("Shader test failed."); - return false; - } - - ZZLog::Error_Log("Creating extra effects."); - B_G(ZZshLoadExtraEffects(), return false); - - - return true; -} - -// open shader file according to build target -bool ZZshCreateOpenShadersFile() { - return true; -} - -void ZZshExitCleaning() { - delete constant_buffer; - delete common_buffer; - delete vertex_buffer; - delete fragment_buffer; - - dirty_fragment_buffer = true; - dirty_vertex_buffer = true; - dirty_common_buffer = true; - g_current_ps = 0; - g_current_vs = 0; - for (uint i = 0; i < 11; i++) - g_current_texture_bind[i] = 0; - - glDeleteProgramPipelines(1, &s_pipeline); -} - -// Disable CG -void ZZshGLDisableProfile() { // This stop all other shader programs from running; - glBindProgramPipeline(0); -} -//Enable CG -void ZZshGLEnableProfile() { - glBindProgramPipeline(s_pipeline); -} -//------------------------------------------------------------------------------------- - -// The same function for texture, also to cgGLEnable -void ZZshGLSetTextureParameter(ZZshParameter param, GLuint texobj, const char* name) { -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("CS: texture %d, param %d", texobj, param).c_str() ); -#endif - - g_cs.set_texture(param, texobj); -} - -void ZZshGLSetTextureParameter(ZZshShaderLink prog, ZZshParameter param, GLuint texobj, const char* name) { - FRAGMENTSHADER* shader = (FRAGMENTSHADER*)prog.link; -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("FS(%d):texture %d, param %d", shader->program, texobj, param).c_str() ); -#endif - - shader->set_texture(param, texobj); -} - -// This is helper of cgGLSetParameter4fv, made for debug purpose. -// Name could be any string. We must use it on compilation time, because erroneus handler does not -// return name -void ZZshSetParameter4fv(ZZshShaderLink& prog, ZZshParameter param, const float* v, const char* name) { - if (prog.isFragment) { - FRAGMENTSHADER* shader = (FRAGMENTSHADER*)prog.link; - shader->ZZshSetParameter4fv(param, v); - dirty_fragment_buffer = true; - } else { - VERTEXSHADER* shader = (VERTEXSHADER*)prog.link; - shader->ZZshSetParameter4fv(param, v); - dirty_vertex_buffer = true; - } -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("prog: uniform (%s) (%f)", name, *v).c_str() ); -#endif -} - -void ZZshSetParameter4fv(ZZshParameter param, const float* v, const char* name) { - g_cs.ZZshSetParameter4fv(param, v); - dirty_common_buffer = true; -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("CS: uniform (%s) (%f)", name, *v).c_str() ); -#endif -} - -// The same stuff, but also with retry of param, name should be USED name of param for prog. -void ZZshSetParameter4fvWithRetry(ZZshParameter* param, ZZshShaderLink& prog, const float* v, const char* name) { - ZZshSetParameter4fv(prog, *param, v, name); -} - -// Used sometimes for color 1. -void ZZshDefaultOneColor( FRAGMENTSHADER& ptr ) { - ShaderHandleName = "Set Default One colot"; - float4 v = float4 ( 1, 1, 1, 1 ); - ptr.ZZshSetParameter4fv(ptr.sOneColor, v); - dirty_fragment_buffer = true; -} -//------------------------------------------------------------------------------------- - -static bool ValidateProgram(ZZshProgram Prog) { - GLint isValid; - - glValidateProgram(Prog); - glGetProgramiv(Prog, GL_VALIDATE_STATUS, &isValid); - - if (!isValid) { - int lenght, infologlength; - glGetProgramiv(Prog, GL_INFO_LOG_LENGTH, &infologlength); - char* InfoLog = new char[infologlength]; - glGetProgramInfoLog(Prog, infologlength, &lenght, InfoLog); - ZZLog::Error_Log("Validation %d... %d:\t %s", Prog, infologlength, InfoLog); - delete[] InfoLog; - } - return (isValid != 0); -} - -static void ValidatePipeline(GLuint pipeline) { - glValidateProgramPipeline(pipeline); - GLint isValid; - glGetProgramPipelineiv(pipeline, GL_VALIDATE_STATUS, &isValid); - if (!isValid) { - int lenght, infologlength; - glGetProgramPipelineiv(pipeline, GL_INFO_LOG_LENGTH, &infologlength); - char* InfoLog = new char[infologlength]; - glGetProgramPipelineInfoLog(pipeline, infologlength, &lenght, InfoLog); - ZZLog::Error_Log("Validation %d... %d:\t %s", pipeline, infologlength, InfoLog); - delete[] InfoLog; - } -} - -inline bool CompileShaderFromFile(ZZshProgram& program, const std::string& DefineString, std::string main_entry, GLenum ShaderType) -{ - std::string header(""); - - header += format("#version %d\n", GLSL_VERSION); - header += format("#define %s main\n", main_entry.c_str()); - if (ShaderType == GL_VERTEX_SHADER) header += "#define VERTEX_SHADER 1\n"; - else if (ShaderType == GL_FRAGMENT_SHADER) header += "#define FRAGMENT_SHADER 1\n"; - header += DefineString; - - const GLchar* ShaderSource[2]; - -#if 0 - // It sucks because it doesn't report the good line for error/warnings! - // But at least this stupid AMD drivers doesn't crash... - ShaderSource[0] = header.append(ps2hw_gl4_glsl).c_str(); - program = glCreateShaderProgramv(ShaderType, 1, &ShaderSource[0]); - -#else - ShaderSource[0] = header.c_str(); - ShaderSource[1] = ps2hw_gl4_glsl; - - program = glCreateShaderProgramv(ShaderType, 2, &ShaderSource[0]); -#endif - - ZZLog::Debug_Log("Creating program %d for %s", program, main_entry.c_str()); - -#if defined(DEVBUILD) || defined(_DEBUG) - if (!ValidateProgram(program)) return false; -#endif - - return true; - -} - -//------------------------------------------------------------------------------------- - -void ZZshSetupShader() { - VERTEXSHADER* vs = (VERTEXSHADER*)g_vsprog.link; - FRAGMENTSHADER* ps = (FRAGMENTSHADER*)g_psprog.link; - - if (vs == NULL || ps == NULL) return; - - // From the glValidateProgram docs: "The implementation may use this as an opportunity to perform any internal - // shader modifications that may be required to ensure correct operation of the installed - // shaders given the current GL state" - // It might be a good idea to validate the pipeline also in release mode??? -#if defined(DEVBUILD) || defined(_DEBUG) - ValidatePipeline(s_pipeline); -#endif - - PutParametersInProgram(vs, ps); - GL_REPORT_ERRORD(); -} - -void ZZshSetVertexShader(ZZshShaderLink prog) { - g_vsprog = prog; - - VERTEXSHADER* vs = (VERTEXSHADER*)g_vsprog.link; - if (!vs) return; - - if (vs->program != g_current_vs) { - glUseProgramStages(s_pipeline, GL_VERTEX_SHADER_BIT, vs->program); - g_current_vs = vs->program; - } -} - -void ZZshSetPixelShader(ZZshShaderLink prog) { - g_psprog = prog; - - FRAGMENTSHADER* ps = (FRAGMENTSHADER*)g_psprog.link; - if (!ps) return; - - if (ps->program != g_current_ps) { - glUseProgramStages(s_pipeline, GL_FRAGMENT_SHADER_BIT, ps->program); - g_current_ps = ps->program; - } -} - -//------------------------------------------------------------------------------------------------------------------ - -void init_shader() { - // TODO: - // Note it would be more clever to allocate buffer inside SHADER class - // Add a dirty flags to avoid to upload twice same data... - // You need to attach() properly the uniform buffer; - // Note: don't put GSUniformBuffer creation inside constructor of static object (context won't - // be set to call gl command) - - // Warning put same order than GLSL - constant_buffer = new GSUniformBufferOGL(0, sizeof(ConstantUniform)); - common_buffer = new GSUniformBufferOGL(1, sizeof(GlobalUniform)); - vertex_buffer = new GSUniformBufferOGL(2, sizeof(VertexUniform)); - fragment_buffer = new GSUniformBufferOGL(3, sizeof(FragmentUniform)); - - constant_buffer->bind(); - constant_buffer->upload((void*)&g_cs.uniform_buffer_constant); - - g_cs.set_texture(g_cs.sBlocks, ptexBlocks); - g_cs.set_texture(g_cs.sConv16to32, ptexConv16to32); - g_cs.set_texture(g_cs.sConv32to16, ptexConv32to16); - g_cs.set_texture(g_cs.sBilinearBlocks, ptexBilinearBlocks); - - glGenProgramPipelines(1, &s_pipeline); - glBindProgramPipeline(s_pipeline); - - - // FIXME - // In the future it would be better to use directly the common shader - g_vparamPosXY[0] = g_cs.g_vparamPosXY; - g_vparamPosXY[1] = g_cs.g_vparamPosXY; - g_fparamFogColor = g_cs.g_fparamFogColor; -} - -void PutParametersInProgram(VERTEXSHADER* vs, FRAGMENTSHADER* ps) { - - if (dirty_common_buffer) { - common_buffer->bind(); - common_buffer->upload((void*)&g_cs.uniform_buffer[g_cs.context]); - dirty_common_buffer = false; - } - - if (dirty_vertex_buffer) { - vertex_buffer->bind(); - vertex_buffer->upload((void*)&vs->uniform_buffer[vs->context]); - dirty_vertex_buffer = false; - } - - if (dirty_fragment_buffer) { - fragment_buffer->bind(); - fragment_buffer->upload((void*)&ps->uniform_buffer[ps->context]); - dirty_fragment_buffer = false; - } - -#ifdef ENABLE_MARKER - if (GLEW_GREMEDY_string_marker) glStringMarkerGREMEDY(0, format("FS(%d): enable texture", ps->program).c_str() ); -#endif - - g_cs.enable_texture(); - ps->enable_texture(); - // By default enable the unit 0, so I have the guarantee that any - // texture command won't change current binding of others unit - glActiveTexture(GL_TEXTURE0); -} - -std::string BuildGlslMacro(bool writedepth, int texwrap = 3, bool testaem = false, bool exactcolor = false) -{ - std::string header(""); - - if (writedepth) header += "#define WRITE_DEPTH 1\n"; - if (testaem) header += "#define TEST_AEM 1\n"; - if (exactcolor) header += "#define EXACT_COLOR 1\n"; - header += format("%s", g_pPsTexWrap[texwrap]); - //const char* AddAccurate = (ps & SHADER_ACCURATE)?"#define ACCURATE_DECOMPRESSION 1\n":""; - if (conf.settings().no_logz) { - header += "#define NO_LOGZ 1\n"; - } - - return header; -} - -static __forceinline bool LOAD_VS(const std::string& DefineString, const char* name, VERTEXSHADER& vertex, ZZshProfile context) -{ - bool flag = CompileShaderFromFile(vertex.program, DefineString, name, GL_VERTEX_SHADER); - vertex.set_context(context); - return flag; -} - -static __forceinline bool LOAD_PS(const std::string& DefineString, const char* name, FRAGMENTSHADER& fragment, ZZshProfile context) -{ - bool flag = CompileShaderFromFile(fragment.program, DefineString, name, GL_FRAGMENT_SHADER); - fragment.set_context(context); - return flag; -} - -inline bool LoadEffects() -{ - // clear the textures - for(u32 i = 0; i < ArraySize(ppsTexture); ++i) - ppsTexture[i].release_prog(); - - return true; -} - -bool ZZshLoadExtraEffects() { - bool bLoadSuccess = true; - - std::string depth_macro = BuildGlslMacro(true); - std::string empty_macro = BuildGlslMacro(false); - - // DEBUG - // Put them first so it is easier to get their program index in apitrace. Namely 3,4,5 - if (!LOAD_PS(empty_macro, "ZeroDebugPS", ppsDebug, 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "ZeroDebug2PS", ppsDebug2, 0)) bLoadSuccess = false; - //if (!LOAD_PS(empty_macro, "ZeroDebug3PS", ppsDebug3, 0)) bLoadSuccess = false; - - const char* pvsshaders[4] = { "RegularVS", "TextureVS", "RegularFogVS", "TextureFogVS" }; - - for (int i = 0; i < 4; ++i) { - if (!LOAD_VS(empty_macro, pvsshaders[i], pvsStore[2 * i], 0)) bLoadSuccess = false; - if (!LOAD_VS(empty_macro, pvsshaders[i], pvsStore[2 *i + 1 ], 1)) bLoadSuccess = false; - if (!LOAD_VS(depth_macro, pvsshaders[i], pvsStore[2 *i + 8 ], 0)) bLoadSuccess = false; - if (!LOAD_VS(depth_macro, pvsshaders[i], pvsStore[2 *i + 8 + 1], 1)) bLoadSuccess = false; - } - for (int i = 0; i < 16; ++i) - pvs[i] = pvsStore[i].prog; - - if (!LOAD_VS(empty_macro, "BitBltVS", pvsBitBlt, 0)) bLoadSuccess = false; - GL_REPORT_ERRORD(); - - if (!LOAD_PS(empty_macro, "RegularPS", ppsRegular[0], 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "RegularFogPS", ppsRegular[1], 0)) bLoadSuccess = false; - - if( conf.mrtdepth ) { - if (!LOAD_PS(depth_macro, "RegularPS", ppsRegular[2], 0)) bLoadSuccess = false; - if (!bLoadSuccess) conf.mrtdepth = 0; - - if (!LOAD_PS(depth_macro, "RegularFogPS", ppsRegular[3], 0)) bLoadSuccess = false; - if (!bLoadSuccess) conf.mrtdepth = 0; - } - - if (!LOAD_PS(empty_macro, "BitBltPS", ppsBitBlt[0], 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "BitBltAAPS", ppsBitBlt[1], 0)) bLoadSuccess = false; - if (!bLoadSuccess) { - ZZLog::Error_Log("Failed to load BitBltAAPS, using BitBltPS."); - if (!LOAD_PS(empty_macro, "BitBltPS", ppsBitBlt[1], 0)) bLoadSuccess = false; - } - - if (!LOAD_PS(empty_macro, "BitBltDepthPS", ppsBitBltDepth, 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "CRTCTargPS", ppsCRTCTarg[0], 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "CRTCTargInterPS", ppsCRTCTarg[1], 0)) bLoadSuccess = false; - - g_bCRTCBilinear = true; - if (!LOAD_PS(empty_macro, "CRTCPS", ppsCRTC[0], 0)) bLoadSuccess = false; - if( !bLoadSuccess ) { - // switch to simpler - g_bCRTCBilinear = false; - if (!LOAD_PS(empty_macro, "CRTCPS_Nearest", ppsCRTC[0], 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "CRTCInterPS_Nearest", ppsCRTC[0], 0)) bLoadSuccess = false; - } - else { - if (!LOAD_PS(empty_macro, "CRTCInterPS", ppsCRTC[1], 0)) bLoadSuccess = false; - } - - if( !bLoadSuccess ) - ZZLog::Error_Log("Failed to create CRTC shaders."); - - // if (!LOAD_PS(empty_macro, "CRTC24PS", ppsCRTC24[0], 0)) bLoadSuccess = false; - // if (!LOAD_PS(empty_macro, "CRTC24InterPS", ppsCRTC24[1], 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "ZeroPS", ppsOne, 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "BaseTexturePS", ppsBaseTexture, 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "Convert16to32PS", ppsConvert16to32, 0)) bLoadSuccess = false; - if (!LOAD_PS(empty_macro, "Convert32to16PS", ppsConvert32to16, 0)) bLoadSuccess = false; - - GL_REPORT_ERRORD(); - return true; -} - -FRAGMENTSHADER* ZZshLoadShadeEffect(int type, int texfilter, int fog, int testaem, int exactcolor, const clampInfo& clamp, int context, bool* pbFailed) -{ - int texwrap; - - assert( texfilter < NUM_FILTERS ); - if( clamp.wms == clamp.wmt ) { - switch( clamp.wms ) { - case 0: texwrap = TEXWRAP_REPEAT; break; - case 1: texwrap = TEXWRAP_CLAMP; break; - case 2: texwrap = TEXWRAP_CLAMP; break; - default: - texwrap = TEXWRAP_REGION_REPEAT; break; - } - } - else if( clamp.wms==3||clamp.wmt==3) - texwrap = TEXWRAP_REGION_REPEAT; - else - texwrap = TEXWRAP_REPEAT_CLAMP; - - int index = GET_SHADER_INDEX(type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, 0, 0); - - if( pbFailed != NULL ) *pbFailed = false; - - FRAGMENTSHADER* pf = ppsTexture+index; - - if (ZZshExistProgram(pf)) - { - return pf; - } - - std::string macro = BuildGlslMacro(s_bWriteDepth, texwrap, testaem, exactcolor); - std::string main_entry = format("Texture%s%d_%sPS", fog?"Fog":"", texfilter, g_pTexTypes[type]); - - pf->set_context(context); - if (!CompileShaderFromFile(pf->program, macro, main_entry, GL_FRAGMENT_SHADER)) { - ZZLog::Error_Log("Failed to create shader %d,%d,%d,%d.", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = false; - return NULL; - } - return pf; -} - -#endif // GLSL4_API diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShadersGLSL.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShadersGLSL.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShadersGLSL.cpp 2014-04-18 21:20:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShadersGLSL.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,980 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009 zeydlitz@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2006 - * - * 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 - */ - -#if defined(GLSL_API) && !defined(GLSL4_API) // This code is only for GLSL API -// ZZogl Shader manipulation functions. - -/* - * used cg calls: - * cgGLIsProfileSupported -- don't needed - * cgGetErrorString -- later - * cgGetLastListing -- later - * cgSetErrorHandler -- later - * cgCreateContext -- think that don't need - * cgGLEnableProfile -- don't need - * cgGLSetOptimalOptions -- don't need? - * cgGLSetManageTextureParameters -- what's this? - * cgCreateParameter -- don't need - * cgGLLoadProgram void LinkProgram(uint program) - * cgGetError -- later - * cgGLDisableProfile -- don't need - * cgGLSetParameter4fv - * cgGetNamedParameter - * cgGLEnableTextureParameter - * cgIsParameterUsed - * cgGLBindProgram void UseProgram(uint program) - * cgConnectParameter - * cgIsProgram bool IsProgram(uint program) - * cgCreateProgramFromFile - */ - -//------------------- Includes -#include "Util.h" -#include "ZZoglShaders.h" -#include "zpipe.h" -#include -#include -#include // this for open(). Maybe linux-specific -#include // and this for mmap - -// ----------------- Defines - -#define TEXWRAP_REPEAT 0 -#define TEXWRAP_CLAMP 1 -#define TEXWRAP_REGION_REPEAT 2 -#define TEXWRAP_REPEAT_CLAMP 3 - -#ifdef DEVBUILD -# define UNIFORM_ERROR_LOG ZZLog::Error_Log -#else -# define UNIFORM_ERROR_LOG -#endif - -// Set it to 0 to diable context usage, 1 -- to enable. FFX-1 have a strange issue with ClampExt. -#define NOCONTEXT 0 -#define NUMBER_OF_SAMPLERS 11 -#define MAX_SHADER_NAME_SIZE 25 -#define MAX_UNIFORM_NAME_SIZE 20 -#define DEFINE_STRING_SIZE 256 -//------------------ Constants - -// Used in a logarithmic Z-test, as (1-o(1))/log(MAX_U32). -const float g_filog32 = 0.999f / (32.0f * logf(2.0f)); - -const static char* g_pTexTypes[] = { "32", "tex32", "clut32", "tex32to16", "tex16to8h" }; -const static char* g_pShaders[4] = { "full", "reduced", "accurate", "accurate-reduced" }; - -// ----------------- Global Variables - -ZZshContext g_cgcontext; -ZZshProfile cgvProf, cgfProf; -int g_nPixelShaderVer = 0; // default -u8* s_lpShaderResources = NULL; -ZZshShaderLink pvs[16] = {sZero}, g_vsprog = sZero, g_psprog = sZero; // 2 -- ZZ -ZZshParameter g_vparamPosXY[2] = {pZero}, g_fparamFogColor = pZero; - -ZZshProgram ZZshMainProgram; -char* ZZshSource; // Shader's source data. -off_t ZZshSourceSize; - -extern char EFFECT_NAME[256]; // All this variables used for testing and set manually -extern char EFFECT_DIR[256]; - -bool g_bCRTCBilinear = true; - -float4 g_vdepth, vlogz; -FRAGMENTSHADER ppsBitBlt[2], ppsBitBltDepth, ppsOne; -FRAGMENTSHADER ppsBaseTexture, ppsConvert16to32, ppsConvert32to16; -FRAGMENTSHADER ppsRegular[4], ppsTexture[NUM_SHADERS]; -FRAGMENTSHADER ppsCRTC[2], /*ppsCRTC24[2],*/ ppsCRTCTarg[2]; -VERTEXSHADER pvsStore[16]; -VERTEXSHADER pvsBitBlt; - -inline bool LoadEffects(); -extern bool s_bWriteDepth; - -struct SHADERHEADER -{ - unsigned int index, offset, size; // if highest bit of index is set, pixel shader -}; -map mapShaderResources; - -// Debug variable, store name of the function that call the shader. -const char* ShaderCallerName = ""; -const char* ShaderHandleName = ""; - -int NumActiveUniforms, NumGlobalUniforms; -ZZshParamInfo UniformsIndex[MAX_ACTIVE_UNIFORMS] = {qZero}; -const char* ShaderNames[MAX_ACTIVE_SHADERS] = {""}; -ZZshShaderType ShaderTypes[MAX_ACTIVE_SHADERS] = {ZZ_SH_NONE}; - -ZZshProgram CompiledPrograms[MAX_ACTIVE_SHADERS][MAX_ACTIVE_SHADERS] = {{0}}; -const char* TextureUnits[NUMBER_OF_SAMPLERS] = - {"g_sMemory[0]", "g_sMemory[1]", "g_sSrcFinal", "g_sBitwiseANDX", "g_sBitwiseANDY", "g_sInterlace", \ - "g_sCLUT", "g_sBlocks", "g_sBilinearBlocks", "g_sConv16to32", "g_sConv32to16"}; -ZZshPARAMTYPE TextureTypes[NUMBER_OF_SAMPLERS] = - {ZZ_TEXTURE_RECT, ZZ_TEXTURE_RECT, ZZ_TEXTURE_RECT, ZZ_TEXTURE_RECT, ZZ_TEXTURE_RECT, ZZ_TEXTURE_RECT, \ - ZZ_TEXTURE_2D, ZZ_TEXTURE_2D, ZZ_TEXTURE_2D, ZZ_TEXTURE_2D, ZZ_TEXTURE_3D} ; - -//------------------ Code - -inline int GET_SHADER_INDEX(int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int context, int ps) { - return type + texfilter*NUM_TYPES + NUM_FILTERS*NUM_TYPES*texwrap + NUM_TEXWRAPS*NUM_FILTERS*NUM_TYPES*(fog+2*writedepth+4*testaem+8*exactcolor+16*context+32*ps) ; -} - -// Nothing need to be done. -bool ZZshCheckProfilesSupport() { - return true; -} - -// Error handler. Setup in ZZogl_Create once. -void HandleCgError(ZZshContext ctx, ZZshError err, void* appdata) -{/* - ZZLog::Error_Log("%s->%s: %s", ShaderCallerName, ShaderHandleName, cgGetErrorString(err)); - const char* listing = cgGetLastListing(g_cgcontext); - if (listing != NULL) - ZZLog::Debug_Log(" last listing: %s", listing); -*/ -} - -float ZeroFloat4[4] = {0}; - -inline void SettleFloat(float* f, const float* v) { - f[0] = v[0]; - f[1] = v[1]; - f[2] = v[2]; - f[3] = v[3]; -} - -inline ZZshParamInfo ParamInfo(const char* ShName, ZZshPARAMTYPE type, const float fvalue[], GLuint sampler, GLint texid, bool Constant, bool Settled) { - ZZshParamInfo x; - x.ShName = new char[MAX_UNIFORM_NAME_SIZE]; - x.ShName = ShName; - x.type = type; - SettleFloat(x.fvalue, fvalue); - x.sampler = sampler; - x.texid = texid; - x.Constant = Constant; - x.Settled = Settled; - return x; -} - -inline void SetGlobalUniform(ZZshParameter* param, const char* name) { - *param = NumActiveUniforms; - UniformsIndex[NumActiveUniforms] = ParamInfo(name, ZZ_FLOAT4, ZeroFloat4, -1, 0, false, false); - NumActiveUniforms++; -} - -bool ZZshStartUsingShaders() { - - ZZLog::Error_Log("Creating effects."); - B_G(LoadEffects(), return false); - if (!glCreateShader) - { - ZZLog::Error_Log("GLSL shaders is not supported, stop."); - return false; - } - - // create a sample shader - clampInfo temp; - memset(&temp, 0, sizeof(temp)); - temp.wms = 3; temp.wmt = 3; - - g_nPixelShaderVer = 0;//SHADER_ACCURATE; - // test - bool bFailed; - FRAGMENTSHADER* pfrag = ZZshLoadShadeEffect(0, 1, 1, 1, 1, temp, 0, &bFailed); - if( bFailed || pfrag == NULL ) { - g_nPixelShaderVer = SHADER_ACCURATE|SHADER_REDUCED; - - pfrag = ZZshLoadShadeEffect(0, 0, 1, 1, 0, temp, 0, &bFailed); - if( pfrag != NULL ) - glLinkProgram(pfrag->Shader); - if( bFailed || pfrag == NULL || glGetError() != GL_NO_ERROR) { - g_nPixelShaderVer = SHADER_REDUCED; - ZZLog::Error_Log("Basic shader test failed."); - } - } - ZZshMainProgram = glCreateProgram(); - NumActiveUniforms = 0; - SetGlobalUniform(&g_fparamFogColor, "g_fFogColor"); - SetGlobalUniform(&g_vparamPosXY[0], "g_fPosXY[0]"); - SetGlobalUniform(&g_vparamPosXY[1], NOCONTEXT?"g_fPosXY[1]":"g_fPosXY[0]"); - NumGlobalUniforms = NumActiveUniforms; - - if (g_nPixelShaderVer & SHADER_REDUCED) - conf.bilinear = 0; - - ZZLog::Error_Log("Creating extra effects."); - B_G(ZZshLoadExtraEffects(), return false); - - ZZLog::Error_Log("Using %s shaders.", g_pShaders[g_nPixelShaderVer]); - - return true; -} - -// open shader file according to build target -bool ZZshCreateOpenShadersFile() { - std::string ShaderFileName("plugins/ps2hw.glsl"); - int ShaderFD = open(ShaderFileName.c_str(), O_RDONLY); - struct stat sb; - if ((ShaderFD == -1) || (fstat(ShaderFD, &sb) == -1)) { - // Each linux distributions have his rules for path so we give them the possibility to - // change it with compilation flags. -- Gregory -#ifdef GLSL_SHADER_DIR_COMPILATION -#define xGLSL_SHADER_DIR_str(s) GLSL_SHADER_DIR_str(s) -#define GLSL_SHADER_DIR_str(s) #s - ShaderFileName = string(xGLSL_SHADER_DIR_str(GLSL_SHADER_DIR_COMPILATION)) + "/ps2hw.glsl"; - ShaderFD = open(ShaderFileName.c_str(), O_RDONLY); -#endif - if ((ShaderFD == -1) || (fstat(ShaderFD, &sb) == -1)) { - ZZLog::Error_Log("No source for %s: \n", ShaderFileName.c_str()); - return false; - } - } - - ZZshSourceSize = sb.st_size; - ZZshSource = (char*)mmap(NULL, sb.st_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, ShaderFD, 0); // This function directly maped file into memory. - ZZshSource[ ZZshSourceSize - 1] = 0; // Made source null-terminated. - - close(ShaderFD); - return true; -} - -void ZZshExitCleaning() { - munmap(ZZshSource, ZZshSourceSize); -} - -// Disable CG -void ZZshGLDisableProfile() { // This stop all other shader programs from running; - glUseProgram(0); -} -//Enable CG -void ZZshGLEnableProfile() { -} -//------------------------------------------------------------------------------------- - -// The same function for texture, also to cgGLEnable -void ZZshGLSetTextureParameter(ZZshParameter param, GLuint texobj, const char* name) { - if (param > -1) { -// ZZLog::Error_Log("Set texture parameter %s %d... Ok", name, texobj); - UniformsIndex[param].texid = texobj; - UniformsIndex[param].Settled = true; - } -} - -void ZZshGLSetTextureParameter(ZZshShaderLink prog, ZZshParameter param, GLuint texobj, const char* name) { - if (param > -1) { -// ZZLog::Error_Log("Set texture parameter %s %d... Ok", name, texobj); - UniformsIndex[param].texid = texobj; - UniformsIndex[param].Settled = true; - } -} - -// This is helper of cgGLSetParameter4fv, made for debug purpose. -// Name could be any string. We must use it on compilation time, because erroneus handler does not -// return name -void ZZshSetParameter4fv(ZZshShaderLink& prog, ZZshParameter param, const float* v, const char* name) { - if (param > -1) { -// ZZLog::Error_Log("Set float parameter %s %f, %f, %f, %f... Ok", name, v[0], v[1], v[2], v[3]); - SettleFloat(UniformsIndex[param].fvalue, v); - UniformsIndex[param].Settled = true; - } -} - -void ZZshSetParameter4fv(ZZshParameter param, const float* v, const char* name) { - if (param > -1) { -// ZZLog::Error_Log("Set float parameter %s %f, %f, %f, %f... Ok", name, v[0], v[1], v[2], v[3]); - SettleFloat(UniformsIndex[param].fvalue, v); - UniformsIndex[param].Settled = true; - } -} - -// The same stuff, but also with retry of param, name should be USED name of param for prog. -void ZZshSetParameter4fvWithRetry(ZZshParameter* param, ZZshShaderLink& prog, const float* v, const char* name) { - if (param != NULL) - ZZshSetParameter4fv(prog, *param, v, name); -} - -// Used sometimes for color 1. -void ZZshDefaultOneColor( FRAGMENTSHADER& ptr ) { -// return; - ShaderHandleName = "Set Default One colot"; - float4 v = float4 ( 1, 1, 1, 1 ); - ZZshSetParameter4fv(ptr.prog, ptr.sOneColor, v, "DegaultOne"); -} -//------------------------------------------------------------------------------------- - -const GLchar * EmptyVertex = "void main(void) {gl_Position = ftransform();}"; -const GLchar * EmptyFragment = "void main(void) {gl_FragColor = gl_Color;}"; - -inline ZZshProgram UseEmptyProgram(const char* name, GLenum shaderType) { - GLuint shader = glCreateShader(shaderType); - if (shaderType == GL_VERTEX_SHADER) - glShaderSource(shader, 1, &EmptyVertex, NULL); - else - glShaderSource(shader, 1, &EmptyFragment, NULL); - - glCompileShader(shader); - ZZshProgram prog = glCreateProgram(); - glAttachShader(prog, shader); - glLinkProgram(prog); - if( !glIsProgram(prog) || glGetError() != GL_NO_ERROR ) { - ZZLog::Error_Log("Failed to load empty shader for %s:", name); - return -1; - } - ZZLog::Error_Log("Used Empty program for %s... Ok.",name); - return prog; -} - -ZZshShaderType ZZshGetShaderType(const char* name) { - if (strncmp(name, "TextureFog", 10) == 0) return ZZ_SH_TEXTURE_FOG; - if (strncmp(name, "Texture", 7) == 0) return ZZ_SH_TEXTURE; - if (strncmp(name, "RegularFog", 10) == 0) return ZZ_SH_REGULAR_FOG; - if (strncmp(name, "Regular", 7) == 0) return ZZ_SH_REGULAR; - if (strncmp(name, "Zero", 4) == 0) return ZZ_SH_ZERO; - return ZZ_SH_CRTC; -} - -inline ZZshShader UseEmptyShader(const char* name, GLenum shaderType) { - GLuint shader = glCreateShader(shaderType); - if (shaderType == GL_VERTEX_SHADER) - glShaderSource(shader, 1, &EmptyVertex, NULL); - else - glShaderSource(shader, 1, &EmptyFragment, NULL); - - glCompileShader(shader); - - ShaderNames[shader] = name; - ShaderTypes[shader] = ZZshGetShaderType(name); - - ZZLog::Error_Log("Used Empty shader for %s... Ok.",name); - return shader; -} - -inline bool GetCompilationLog(GLuint shader) { - GLint CompileStatus; - glGetShaderiv(shader, GL_COMPILE_STATUS, &CompileStatus); - if (CompileStatus == GL_TRUE) - return true; - - int* lenght, infologlength; - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infologlength); - char* InfoLog = new char[infologlength]; - glGetShaderInfoLog(shader, infologlength, lenght, InfoLog); - ZZLog::Error_Log("Compiling... %d:\t %s", shader, InfoLog); - - return false; -} - -inline bool CompileShader(ZZshProgram& shader, const char* DefineString, const char* name, GLenum shaderType) { - const GLchar* ShaderSource[2]; - ShaderSource[0] = (const GLchar*)DefineString; - ShaderSource[1] = (const GLchar*)ZZshSource; - - shader = glCreateShader(shaderType); - glShaderSource(shader, 2, &ShaderSource[0], NULL); - glCompileShader(shader); - ZZLog::Debug_Log("Creating shader %d for %s", shader, name); - - if (!GetCompilationLog(shader)) { - ZZLog::Error_Log("Failed to compile shader for %s:", name); - return false; - } - - ShaderTypes[shader] = ZZshGetShaderType(name); - ShaderNames[shader] = name; - - GL_REPORT_ERRORD(); - return true; -} - -inline bool LoadShaderFromFile(ZZshShader& shader, const char* DefineString, const char* name, GLenum ShaderType) { // Linux specific, as I presume - if (!CompileShader(shader, DefineString, name, ShaderType)) { - ZZLog::Error_Log("Failed to compile shader for %s: ", name); - return false; - } - - ZZLog::Error_Log("Used shader for %s... Ok",name); - return true; -} - -inline bool GetLinkLog(ZZshProgram prog) { - GLint LinkStatus; - glGetProgramiv(prog, GL_LINK_STATUS, &LinkStatus); - - int unif, atrib; - glGetProgramiv(prog, GL_ACTIVE_UNIFORMS, &unif); - glGetProgramiv(prog, GL_ACTIVE_ATTRIBUTES, &atrib); - UNIFORM_ERROR_LOG("Uniforms %d, attributes %d", unif, atrib); - - if (LinkStatus == GL_TRUE && glIsProgram(prog)) return true; - -#if defined(DEVBUILD) || defined(_DEBUG) - int* lenght, infologlength; - glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &infologlength); - char* InfoLog = new char[infologlength]; - glGetProgramInfoLog(prog, infologlength, lenght, InfoLog); - if (!infologlength == 0) - ZZLog::Error_Log("Linking %d... %d:\t %s", prog, infologlength, InfoLog); -#endif - - return false; - -} - -//------------------------------------------------------------------------------------- -inline ZZshProgram madeProgram(ZZshShader shader, ZZshShader shader2, char* name) { - ZZshProgram prog = glCreateProgram(); - glAttachShader(prog, shader); - if (shader2 != 0) - glAttachShader(prog, shader2); - glLinkProgram(prog); - if (!GetLinkLog(prog)) { - ZZLog::Error_Log("Failed to link shader for %s: ", name); - prog = UseEmptyProgram(name, GL_FRAGMENT_SHADER); - } - glDetachShader(prog, shader); - - ZZLog::Error_Log("Made shader program for %s... Ok",name); - return prog; -} - -static void PutParametersInProgam(int start, int finish) { - for (int i = start; i < finish; i++) { - ZZshParamInfo param = UniformsIndex[i]; - GLint location = glGetUniformLocation(ZZshMainProgram, param.ShName); - - if (location != -1 && param.type != ZZ_UNDEFINED) { - UNIFORM_ERROR_LOG("\tTry uniform %d %d %d %s...\t\t", i, location, param.type, param.ShName); - - if (!param.Settled && !param.Constant) { - UNIFORM_ERROR_LOG("\tUnsettled, non-constant uniform, could be bug: %d %s", param.type, param.ShName); - continue; - } - - if (param.type == ZZ_FLOAT4) { - glUniform4fv(location, 1, param.fvalue); - } - else - { - // assert(param.texid != 0); - // ZZLog::Error_Log("Set texture (%s) : %d with sampler %d\n", param.ShName, param.texid, param.sampler); - // assert(param.sampler >= 0); - glActiveTexture(GL_TEXTURE0 + param.sampler); - if (param.type == ZZ_TEXTURE_2D) - glBindTexture(GL_TEXTURE_2D, param.texid); - else if (param.type == ZZ_TEXTURE_3D) - glBindTexture(GL_TEXTURE_3D, param.texid); - else - glBindTexture(GL_TEXTURE_RECTANGLE, param.texid); - GL_REPORT_ERRORD(); - } - - if (glGetError() == GL_NO_ERROR) - UNIFORM_ERROR_LOG("Ok. Param name %s, location %d, type %d", param.ShName, location, param.type); - else - ZZLog::Error_Log("error in PutParametersInProgam param name %s, location %d, type %d", param.ShName, location, param.type); - - if (!param.Constant) // Unset used parameters - UniformsIndex[i].Settled == false; - } - else if (start != 0 && location == -1 && param.Settled) // No global variable - ZZLog::Error_Log("Warning! Unused, but set uniform %d, %s", location, param.ShName); - } - GL_REPORT_ERRORD(); -} - -void PutSInProgam(int start, int finish) { - for (int i = start; i < finish; i++) { - ZZshParamInfo param = UniformsIndex[i]; - GLint location = glGetUniformLocation(ZZshMainProgram, param.ShName); - - if (location != -1 && param.type != ZZ_UNDEFINED) { - if (param.type != ZZ_FLOAT4) { - UNIFORM_ERROR_LOG("\tTry sampler %d %d %d %s %d...\t\t", i, location, param.type, param.ShName, param.sampler); - if (glGetError() == GL_NO_ERROR) - UNIFORM_ERROR_LOG("Ok"); - else - UNIFORM_ERROR_LOG("error!"); - glUniform1i(location, param.sampler); - } - } - } - GL_REPORT_ERRORD(); -} - -static bool ValidateProgram(ZZshProgram Prog) { - GLint isValid; - glGetProgramiv(Prog, GL_VALIDATE_STATUS, &isValid); - - if (!isValid) { - glValidateProgram(Prog); - int* lenght, infologlength; - glGetProgramiv(Prog, GL_INFO_LOG_LENGTH, &infologlength); - char* InfoLog = new char[infologlength]; - glGetProgramInfoLog(Prog, infologlength, lenght, InfoLog); - ZZLog::Error_Log("Validation %d... %d:\t %s", Prog, infologlength, InfoLog); - } - return (isValid != 0); -} - -static void PutParametersAndRun(VERTEXSHADER* vs, FRAGMENTSHADER* ps) { - UNIFORM_ERROR_LOG("Run program %s(%d) \t+\t%s(%d)", ShaderNames[vs->Shader], vs->Shader, ShaderNames[ps->Shader], ps->Shader); - - glUseProgram(ZZshMainProgram); - if (glGetError() != GL_NO_ERROR) { - ZZLog::Error_Log("Something weird happened on Linking stage."); - - glUseProgram(0); - return; - } - - PutSInProgam(vs->ParametersStart, vs->ParametersFinish); - PutSInProgam(ps->ParametersStart, ps->ParametersFinish); - - PutParametersInProgam(0, NumGlobalUniforms); - PutParametersInProgam(vs->ParametersStart, vs->ParametersFinish); - PutParametersInProgam(ps->ParametersStart, ps->ParametersFinish); - - ValidateProgram(ZZshMainProgram); - GL_REPORT_ERRORD(); -} - -static void CreateNewProgram(VERTEXSHADER* vs, FRAGMENTSHADER* ps) { - ZZLog::Error_Log("\n---> New shader program %d, %s(%d) \t+\t%s(%d).", ZZshMainProgram, ShaderNames[vs->Shader], vs->Shader, ShaderNames[ps->Shader], ps->Shader); - - if (vs->Shader != 0) - glAttachShader(ZZshMainProgram, vs->Shader); - if (ps->Shader != 0) - glAttachShader(ZZshMainProgram, ps->Shader); - - glLinkProgram(ZZshMainProgram); - if (!GetLinkLog(ZZshMainProgram)) { - ZZLog::Error_Log("Main program linkage error, don't use any shader for this stage."); - return; - } - - GL_REPORT_ERRORD(); -} - -inline bool ZZshCheckShaderCompatibility(VERTEXSHADER* vs, FRAGMENTSHADER* ps) { - if (vs == NULL) return false; - if (vs->ShaderType == ZZ_SH_ZERO) return true; // ZeroPS is compatible with everything - if (ps == NULL) return false; - - return (vs->ShaderType == ps->ShaderType); -} - -static void ZZshSetShader(VERTEXSHADER* vs, FRAGMENTSHADER* ps) { - if (!ZZshCheckShaderCompatibility(vs, ps)) // We don't need to link uncompatible shaders - return; - - int vss = (vs!=NULL)?vs->Shader:0; - int pss = (ps!=NULL)?ps->Shader:0; - - if (vss !=0 && pss != 0) { - if (CompiledPrograms[vss][pss] != 0 && glIsProgram(CompiledPrograms[vss][pss])) { - ZZshMainProgram = CompiledPrograms[vs->Shader][ps->Shader]; - } - else { - ZZshProgram NewProgram = glCreateProgram(); - ZZshMainProgram = NewProgram; - CompiledPrograms[vss][pss] = NewProgram; - CreateNewProgram(vs, ps) ; - } - - PutParametersAndRun(vs, ps); - GL_REPORT_ERRORD(); - } -} - -void ZZshSetVertexShader(ZZshShaderLink prog) { - g_vsprog = prog; - ZZshSetShader((VERTEXSHADER*)(g_vsprog.link), (FRAGMENTSHADER*)(g_psprog.link)) ; -} - -void ZZshSetPixelShader(ZZshShaderLink prog) { - g_psprog = prog; - ZZshSetShader((VERTEXSHADER*)(g_vsprog.link), (FRAGMENTSHADER*)(g_psprog.link)) ; -} - -//------------------------------------------------------------------------------------------------------------------ - -// For several reason texobj could not be put in sampler directly, only though GL_TEXTUREi interface. So we need to check correct sampler for each one. -inline void SettleTextureUnit(ZZshParamInfo* param, const char* name) { - for (int i = 0; i < NUMBER_OF_SAMPLERS; i++) { - if (strcmp(TextureUnits[i], name) == 0) { - param->sampler = i; - param->type = TextureTypes[i]; - return; - } - } -} - -inline int SetUniformParam(ZZshProgram prog, ZZshParameter* param, const char* name) { - GLint p = glGetUniformLocation(prog, name); - if (p > -1) { - *param = NumActiveUniforms; - UniformsIndex[NumActiveUniforms] = ParamInfo(name, ZZ_FLOAT4, ZeroFloat4, -1, 0, false, false); // By define Uniform is FLOAT4 - - SettleTextureUnit(&(UniformsIndex[NumActiveUniforms]), name); - UNIFORM_ERROR_LOG("uniform %s \t\t%d %d", name, p, UniformsIndex[NumActiveUniforms].type); - - NumActiveUniforms++; - } - else *param = -1; - return p; -} - -#define SET_UNIFORMPARAM(var, name) { \ - p = SetUniformParam(prog, &(pf->var), name); \ -} - -#define INIT_SAMPLERPARAM(tex, name) { \ - ZZshParameter x; \ - p = SetUniformParam(prog, &x, name); \ - (UniformsIndex[x]).Constant = true; \ - ZZshGLSetTextureParameter(pf->prog, x, tex, name); \ -} - -#define INIT_UNIFORMPARAM(var, name) { \ - ZZshParameter x; \ - p = SetUniformParam(prog, &x, name); \ - (UniformsIndex[x]).Constant = true; \ - ZZshSetParameter4fv(pf->prog, x, var, name); \ -} - -char* AddContextToName(const char* name, int context) { - char* newname = new char[MAX_UNIFORM_NAME_SIZE]; - sprintf(newname, "%s[%d]", name, context * NOCONTEXT); - return newname; -} - -static void SetupFragmentProgramParameters(FRAGMENTSHADER* pf, int context, int type) -{ - // uniform parameters - GLint p; - pf->prog.link = (void*)pf; // Setting autolink - pf->prog.isFragment = true; // Setting autolink - pf->ShaderType = ShaderTypes[pf->Shader]; - - pf->ParametersStart = NumActiveUniforms; - ZZshProgram prog = madeProgram(pf->Shader, 0, ""); - glUseProgram(prog); - GL_REPORT_ERRORD(); - - SET_UNIFORMPARAM(sOneColor, "g_fOneColor"); - SET_UNIFORMPARAM(sBitBltZ, "g_fBitBltZ"); - SET_UNIFORMPARAM(sInvTexDims, "g_fInvTexDims"); - SET_UNIFORMPARAM(fTexAlpha2, AddContextToName("fTexAlpha2", context)); - SET_UNIFORMPARAM(fTexOffset, AddContextToName("g_fTexOffset", context)); - SET_UNIFORMPARAM(fTexDims, AddContextToName("g_fTexDims", context)); - SET_UNIFORMPARAM(fTexBlock, AddContextToName("g_fTexBlock", context)); - SET_UNIFORMPARAM(fClampExts, AddContextToName("g_fClampExts", context)); // FIXME: There is a bug, that lead FFX-1 to incorrect CLAMP if this uniform have context. - SET_UNIFORMPARAM(fTexWrapMode, AddContextToName("TexWrapMode", context)); - SET_UNIFORMPARAM(fRealTexDims, AddContextToName("g_fRealTexDims", context)); - SET_UNIFORMPARAM(fTestBlack, AddContextToName("g_fTestBlack", context)); - SET_UNIFORMPARAM(fPageOffset, AddContextToName("g_fPageOffset", context)); - SET_UNIFORMPARAM(fTexAlpha, AddContextToName("fTexAlpha", context)); - GL_REPORT_ERRORD(); - - // textures - INIT_SAMPLERPARAM(ptexBlocks, "g_sBlocks"); - if (type == 3) - {INIT_SAMPLERPARAM(ptexConv16to32, "g_sConv16to32");} - else if (type == 4) - {INIT_SAMPLERPARAM(ptexConv32to16, "g_sConv32to16");} - else - {INIT_SAMPLERPARAM(ptexBilinearBlocks, "g_sBilinearBlocks");} - GL_REPORT_ERRORD(); - - SET_UNIFORMPARAM(sMemory, AddContextToName("g_sMemory", context)); - SET_UNIFORMPARAM(sFinal, "g_sSrcFinal"); - SET_UNIFORMPARAM(sBitwiseANDX, "g_sBitwiseANDX"); - SET_UNIFORMPARAM(sBitwiseANDY, "g_sBitwiseANDY"); - SET_UNIFORMPARAM(sCLUT, "g_sCLUT"); - SET_UNIFORMPARAM(sInterlace, "g_sInterlace"); - GL_REPORT_ERRORD(); - - // set global shader constants - INIT_UNIFORMPARAM(float4(0.5f, (conf.settings().exact_color)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f), "g_fExactColor"); - INIT_UNIFORMPARAM(float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ), "g_fBilinear"); - INIT_UNIFORMPARAM(float4(1.0f/256.0f, 1.0004f, 1, 0.5f), "g_fZBias"); - INIT_UNIFORMPARAM(float4(0,1, 0.001f, 0.5f), "g_fc0"); - INIT_UNIFORMPARAM(float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f), "g_fMult"); - pf->ParametersFinish = NumActiveUniforms; - if (NumActiveUniforms > MAX_ACTIVE_UNIFORMS) - ZZLog::Error_Log("Too many shader variables. You may increase the limit in source %d.", NumActiveUniforms); - - glUseProgram(0); - GL_REPORT_ERRORD(); -} - -void SetupVertexProgramParameters(VERTEXSHADER* pf, int context) -{ - GLint p; - pf->prog.link = (void*)pf; // Setting autolink - pf->prog.isFragment = false; // Setting autolink - pf->ShaderType = ShaderTypes[pf->Shader]; - - pf->ParametersStart = NumActiveUniforms; - - ZZshProgram prog = madeProgram(pf->Shader, 0, ""); - glUseProgram(prog); - - GL_REPORT_ERRORD(); - - // Set Z-test, log or no log; - if (conf.settings().no_logz) { - g_vdepth = float4( 255.0 /256.0f, 255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f)); - vlogz = float4( 1.0f, 0.0f, 0.0f, 0.0f); - } - else { - g_vdepth = float4( 256.0f*65536.0f, 65536.0f, 256.0f, 65536.0f*65536.0f); - vlogz = float4( 0.0f, 1.0f, 0.0f, 0.0f); - } - - INIT_UNIFORMPARAM(g_vdepth, "g_fZ"); - if (p > -1) { - INIT_UNIFORMPARAM(vlogz, "g_fZMin"); - if (p == -1) ZZLog::Error_Log ("Shader file version is outdated! Only log-Z is possible."); - } - GL_REPORT_ERRORD(); - - float4 vnorm = float4(g_filog32, 0, 0,0); - INIT_UNIFORMPARAM(vnorm, "g_fZNorm"); - INIT_UNIFORMPARAM(float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ), "g_fBilinear"); - INIT_UNIFORMPARAM(float4(1.0f/256.0f, 1.0004f, 1, 0.5f), "g_fZBias") ; - INIT_UNIFORMPARAM(float4(0,1, 0.001f, 0.5f), "g_fc0"); - - SET_UNIFORMPARAM(sBitBltPos, "g_fBitBltPos"); - SET_UNIFORMPARAM(sBitBltTex, "g_fBitBltTex"); - SET_UNIFORMPARAM(fBitBltTrans, "g_fBitBltTrans"); - pf->ParametersFinish = NumActiveUniforms; - if (NumActiveUniforms > MAX_ACTIVE_UNIFORMS) - ZZLog::Error_Log("Too many shader variables. You may increase the limit in the source."); - - glUseProgram(0); - GL_REPORT_ERRORD(); -} - -const int GLSL_VERSION = 130; // Sampler2DRect appear in 1.3 - -// We use strictly compilation from source for GSLS -static __forceinline void GlslHeaderString(char* header_string, const char* name, const char* depth) -{ - sprintf(header_string, "#version %d\n#define %s main\n%s\n", GLSL_VERSION, name, depth); -} - -static __forceinline bool LOAD_VS(char* DefineString, const char* name, VERTEXSHADER& vertex, int shaderver, ZZshProfile context, const char* depth) -{ - bool flag; - char temp[200]; - GlslHeaderString(temp, name, depth); - sprintf(DefineString, "%s#define VERTEX_SHADER 1\n#define CTX %d\n", temp, context * NOCONTEXT); - //ZZLog::WriteLn("Define for VS == '%s'", DefineString); - flag = LoadShaderFromFile(vertex.Shader, DefineString, name, GL_VERTEX_SHADER); - SetupVertexProgramParameters(&vertex, context); - return flag; -} - -static __forceinline bool LOAD_PS(char* DefineString, const char* name, FRAGMENTSHADER& fragment, int shaderver, ZZshProfile context, const char* depth) -{ - bool flag; - char temp[200]; - GlslHeaderString(temp, name, depth); - sprintf(DefineString, "%s#define FRAGMENT_SHADER 1\n#define CTX %d\n", temp, context * NOCONTEXT); - //ZZLog::WriteLn("Define for PS == '%s'", DefineString); - flag = LoadShaderFromFile(fragment.Shader, DefineString, name, GL_FRAGMENT_SHADER); - SetupFragmentProgramParameters(&fragment, context, 0); - return flag; -} - -inline bool LoadEffects() -{ - // clear the textures - for(u32 i = 0; i < ArraySize(ppsTexture); ++i) { - SAFE_RELEASE_PROG(ppsTexture[i].prog); - } - -#ifndef _DEBUG - memset(ppsTexture, 0, sizeof(ppsTexture)); -#endif - - return true; -} - -bool ZZshLoadExtraEffects() { - bool bLoadSuccess = true; - char DefineString[DEFINE_STRING_SIZE] = ""; - const char* writedepth = "#define WRITE_DEPTH 1\n"; // should we write depth field - - - const char* pvsshaders[4] = { "RegularVS", "TextureVS", "RegularFogVS", "TextureFogVS" }; - - for (int i = 0; i < 4; ++i) { - if (!LOAD_VS(DefineString, pvsshaders[i], pvsStore[2 * i], cgvProf, 0, "")) bLoadSuccess = false; - if (!LOAD_VS(DefineString, pvsshaders[i], pvsStore[2 *i + 1 ], cgvProf, 1, "")) bLoadSuccess = false; - if (!LOAD_VS(DefineString, pvsshaders[i], pvsStore[2 *i + 8 ], cgvProf, 0, writedepth)) bLoadSuccess = false; - if (!LOAD_VS(DefineString, pvsshaders[i], pvsStore[2 *i + 8 + 1], cgvProf, 1, writedepth)) bLoadSuccess = false; - } - for (int i = 0; i < 16; ++i) - pvs[i] = pvsStore[i].prog; - - if (!LOAD_VS(DefineString, "BitBltVS", pvsBitBlt, cgvProf, 0, "")) bLoadSuccess = false; - GLint p; - GL_REPORT_ERRORD(); - - if (!LOAD_PS(DefineString, "RegularPS", ppsRegular[0], cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "RegularFogPS", ppsRegular[1], cgfProf, 0, "")) bLoadSuccess = false; - - if( conf.mrtdepth ) { - if (!LOAD_PS(DefineString, "RegularPS", ppsRegular[2], cgfProf, 0, writedepth)) bLoadSuccess = false; - if (!bLoadSuccess) conf.mrtdepth = 0; - - if (!LOAD_PS(DefineString, "RegularFogPS", ppsRegular[3], cgfProf, 0, writedepth)) bLoadSuccess = false; - if (!bLoadSuccess) conf.mrtdepth = 0; - } - - if (!LOAD_PS(DefineString, "BitBltPS", ppsBitBlt[0], cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "BitBltAAPS", ppsBitBlt[1], cgfProf, 0, "")) bLoadSuccess = false; - if (!bLoadSuccess) { - ZZLog::Error_Log("Failed to load BitBltAAPS, using BitBltPS."); - if (!LOAD_PS(DefineString, "BitBltPS", ppsBitBlt[1], cgfProf, 0, "")) bLoadSuccess = false; - } - - if (!LOAD_PS(DefineString, "BitBltDepthPS", ppsBitBltDepth, cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "CRTCTargPS", ppsCRTCTarg[0], cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "CRTCTargInterPS", ppsCRTCTarg[1], cgfProf, 0, "")) bLoadSuccess = false; - - g_bCRTCBilinear = true; - if (!LOAD_PS(DefineString, "CRTCPS", ppsCRTC[0], cgfProf, 0, "")) bLoadSuccess = false; - if( !bLoadSuccess ) { - // switch to simpler - g_bCRTCBilinear = false; - if (!LOAD_PS(DefineString, "CRTCPS_Nearest", ppsCRTC[0], cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "CRTCInterPS_Nearest", ppsCRTC[0], cgfProf, 0, "")) bLoadSuccess = false; - } - else { - if (!LOAD_PS(DefineString, "CRTCInterPS", ppsCRTC[1], cgfProf, 0, "")) bLoadSuccess = false; - } - - if( !bLoadSuccess ) - ZZLog::Error_Log("Failed to create CRTC shaders."); - - // if (!LOAD_PS(DefineString, "CRTC24PS", ppsCRTC24[0], cgfProf, 0, "")) bLoadSuccess = false; - // if (!LOAD_PS(DefineString, "CRTC24InterPS", ppsCRTC24[1], cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "ZeroPS", ppsOne, cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "BaseTexturePS", ppsBaseTexture, cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "Convert16to32PS", ppsConvert16to32, cgfProf, 0, "")) bLoadSuccess = false; - if (!LOAD_PS(DefineString, "Convert32to16PS", ppsConvert32to16, cgfProf, 0, "")) bLoadSuccess = false; - - GL_REPORT_ERRORD(); - return true; -} - -const static char* g_pPsTexWrap[] = { "#define REPEAT 1\n", "#define CLAMP 1\n", "#define REGION_REPEAT 1\n", "" }; - -static ZZshShader LoadShaderFromType(const char* srcdir, const char* srcfile, int type, int texfilter, int texwrap, int fog, int writedepth, int testaem, int exactcolor, int ps, int context) { - - assert( texwrap < NUM_TEXWRAPS); - assert( type < NUM_TYPES ); - //ZZLog::Error_Log("\n"); - - ZZshProgram prog; - - char* name = new char[MAX_SHADER_NAME_SIZE]; - sprintf(name, "Texture%s%d_%sPS", fog?"Fog":"", texfilter, g_pTexTypes[type]); - - ZZLog::Debug_Log("Starting shader for %s", name); - - const char* AddWrap = g_pPsTexWrap[texwrap]; - const char* AddDepth = writedepth?"#define WRITE_DEPTH 1\n":""; - const char* AddAEM = testaem?"#define TEST_AEM 1\n":""; - const char* AddExcolor = exactcolor?"#define EXACT_COLOR 1\n":""; - const char* AddAccurate = (ps & SHADER_ACCURATE)?"#define ACCURATE_DECOMPRESSION 1\n":""; - char DefineString[DEFINE_STRING_SIZE] = ""; - char temp[200]; - GlslHeaderString(temp, name, AddWrap); - sprintf(DefineString, "%s#define FRAGMENT_SHADER 1\n%s%s%s%s\n#define CTX %d\n", temp, AddDepth, AddAEM, AddExcolor, AddAccurate, context * NOCONTEXT); - - ZZshShader shader; - if (!CompileShader(shader, DefineString, name, GL_FRAGMENT_SHADER)) - return UseEmptyShader(name, GL_FRAGMENT_SHADER); - - ZZLog::Debug_Log("Used shader for type:%d filter:%d wrap:%d for:%d depth:%d aem:%d color:%d decompression:%d ctx:%d... Ok \n", type, texfilter, texwrap, fog, writedepth, testaem, exactcolor, ps, context); - - GL_REPORT_ERRORD(); - return shader; -} - -FRAGMENTSHADER* ZZshLoadShadeEffect(int type, int texfilter, int fog, int testaem, int exactcolor, const clampInfo& clamp, int context, bool* pbFailed) -{ - int texwrap; - - assert( texfilter < NUM_FILTERS ); - //assert( g_nPixelShaderVer == SHADER_30 ); - if( clamp.wms == clamp.wmt ) { - switch( clamp.wms ) { - case 0: texwrap = TEXWRAP_REPEAT; break; - case 1: texwrap = TEXWRAP_CLAMP; break; - case 2: texwrap = TEXWRAP_CLAMP; break; - default: - texwrap = TEXWRAP_REGION_REPEAT; break; - } - } - else if( clamp.wms==3||clamp.wmt==3) - texwrap = TEXWRAP_REGION_REPEAT; - else - texwrap = TEXWRAP_REPEAT_CLAMP; - - int index = GET_SHADER_INDEX(type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, context, 0); - - if( pbFailed != NULL ) *pbFailed = false; - - FRAGMENTSHADER* pf = ppsTexture+index; - - if (ZZshExistProgram(pf)) - { - return pf; - } - pf->Shader = LoadShaderFromType(EFFECT_DIR, EFFECT_NAME, type, texfilter, texwrap, fog, s_bWriteDepth, testaem, exactcolor, g_nPixelShaderVer, context); - - if (ZZshExistProgram(pf)) { - SetupFragmentProgramParameters(pf, context, type); - GL_REPORT_ERRORD(); - - if( glGetError() != GL_NO_ERROR ) { - ZZLog::Error_Log("Failed to load shader %d,%d,%d,%d.", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if (pbFailed != NULL ) *pbFailed = true; - return pf; - } - - return pf; - } - - ZZLog::Error_Log("Failed to create shader %d,%d,%d,%d.", type, fog, texfilter, 4*clamp.wms+clamp.wmt); - if( pbFailed != NULL ) *pbFailed = true; - - GL_REPORT_ERRORD(); - return NULL; -} - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShaders.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShaders.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShaders.h 2012-08-08 17:44:03.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShaders.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,782 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef __ZEROGS_SHADERS_H__ -#define __ZEROGS_SHADERS_H__ - -// -- Not very important things, but we keep it to enumerate shader -#define NUM_FILTERS 2 // texture filtering -#define NUM_TYPES 5 // types of texture read modes -#define NUM_TEXWRAPS 4 // texture wrapping -#define NUM_SHADERS (NUM_FILTERS*NUM_TYPES*NUM_TEXWRAPS*32) // # shaders for a given ps - -// Just bitmask for different type of shaders -#define SHADER_REDUCED 1 // equivalent to ps2.0 -#define SHADER_ACCURATE 2 // for older cards with less accurate math (ps2.x+) - -#include -#include "ZZoglMath.h" -#include "GS.h" - -// By default enable nvidia cg api -#if !defined(GLSL_API) && !defined(NVIDIA_CG_API) && !defined(GLSL4_API) -#define NVIDIA_CG_API -#endif -// --------------------------- API abstraction level -------------------------------- - -#ifdef NVIDIA_CG_API // Code for NVIDIA cg-toolkit API - -#include -#include -#define ZZshProgram CGprogram -#define ZZshShader CGprogram -#define ZZshShaderLink CGprogram -#define ZZshParameter CGparameter -#define ZZshContext CGcontext -#define ZZshProfile CGprofile -#define ZZshError CGerror -#define pZero 0 // Zero parameter -#define sZero 0 // Zero program - -#define SAFE_RELEASE_PROG(x) { if( (x) != NULL ) { cgDestroyProgram(x); x = NULL; } } - -#endif // end NVIDIA cg-toolkit API - -#ifdef GLSL4_API -#include "GSUniformBufferOGL.h" -#include "GSVertexArrayOGL.h" -#endif - -// GLSL only -// Set it to 0 to diable context usage, 1 -- to enable. FFX-1 have a strange issue with ClampExt. -#define NOCONTEXT 0 - -#if defined(GLSL_API) - -#define MAX_ACTIVE_UNIFORMS 600 -#define MAX_ACTIVE_SHADERS 400 - -enum ZZshPARAMTYPE { - ZZ_UNDEFINED, - ZZ_TEXTURE_2D, - ZZ_TEXTURE_RECT, - ZZ_TEXTURE_3D, - ZZ_FLOAT4, -}; - -typedef struct { - const char* ShName; // Name of uniform - ZZshPARAMTYPE type; // Choose between parameter type - - float fvalue[4]; - GLuint sampler; // Number of texture unit in array - GLint texid; // Number of texture - texid. - - bool Constant; // Uniform could be constants, does not change at program flow - bool Settled; // Check if Uniform value was set. -} ZZshParamInfo; -const ZZshParamInfo qZero = {ShName:"", type:ZZ_UNDEFINED, fvalue:{0}, sampler: -1, texid: 0, Constant: false, Settled: false}; - -#define SAFE_RELEASE_PROG(x) { /*don't know what to do*/ } - -#endif - -#if defined(GLSL_API) || defined(GLSL4_API) - -typedef struct { - void* link; - bool isFragment; -} ZZshShaderLink; - -#define ZZshProgram GLuint -#define ZZshShader GLuint -#define ZZshParameter GLint -#define ZZshContext int -#define ZZshProfile int -#define ZZshError int -#define ZZshIndex GLuint - -#define pZero 0 - -const ZZshShaderLink sZero = {link: NULL, isFragment: false}; -#endif - -// --------------------------- - -extern float4 g_vdepth; -extern float4 vlogz; - - -#ifdef GLSL4_API -enum { - ZZSH_CTX_0 = 0, - ZZSH_CTX_1 = 1, - ZZSH_CTX_ALL = 2 -}; - -// Note A nice template could be better -// Warning order is important for buffer (see GLSL) -// Note must be keep POD (so you can map it to GLSL) -struct GlobalUniform { - union { - struct { - // VS - float g_fPosXY[4]; // dual context - // PS - float g_fFogColor[4]; - }; - float linear[2*4]; - }; - void SettleFloat(uint indice, const float* v) { - assert(indice + 3 < 2*4); - linear[indice+0] = v[0]; - linear[indice+1] = v[1]; - linear[indice+2] = v[2]; - linear[indice+3] = v[3]; - } -}; -struct ConstantUniform { - union { - struct { - // Both VS/PS - float g_fBilinear[4]; - float g_fZbias[4]; - float g_fc0[4]; - float g_fMult[4]; - // VS - float g_fZ[4]; - // PS - float g_fExactColor[4]; - }; - float linear[6*4]; - }; - void SettleFloat(uint indice, const float* v) { - assert(indice + 3 < 6*4); - linear[indice+0] = v[0]; - linear[indice+1] = v[1]; - linear[indice+2] = v[2]; - linear[indice+3] = v[3]; - } -}; -struct FragmentUniform { - union { - struct { - float g_fTexAlpha2[4]; // dual context - float g_fTexOffset[4]; // dual context - float g_fTexDims[4]; // dual context - float g_fTexBlock[4]; // dual context - float g_fClampExts[4]; // dual context - float g_fTexWrapMode[4]; // dual context - float g_fRealTexDims[4]; // dual context - float g_fTestBlack[4]; // dual context - float g_fPageOffset[4]; // dual context - float g_fTexAlpha[4]; // dual context - float g_fInvTexDims[4]; - float g_fBitBltZ[4]; - float g_fOneColor[4]; - }; - float linear[13*4]; - }; - void SettleFloat(uint indice, const float* v) { - assert(indice + 3 < 13*4); - linear[indice+0] = v[0]; - linear[indice+1] = v[1]; - linear[indice+2] = v[2]; - linear[indice+3] = v[3]; - } -}; -struct VertexUniform { - union { - struct { - float g_fBitBltPos[4]; - float g_fBitBltTex[4]; - float g_fBitBltTrans[4]; - }; - float linear[3*4]; - }; - void SettleFloat(uint indice, const float* v) { - assert(indice + 3 < 3*4); - linear[indice+0] = v[0]; - linear[indice+1] = v[1]; - linear[indice+2] = v[2]; - linear[indice+3] = v[3]; - } -}; -#endif - - - -enum ZZshShaderType {ZZ_SH_ZERO, ZZ_SH_REGULAR, ZZ_SH_REGULAR_FOG, ZZ_SH_TEXTURE, ZZ_SH_TEXTURE_FOG, ZZ_SH_CRTC, ZZ_SH_NONE}; -// We have "compatible" shaders, as RegularFogVS and RegularFogPS. if don't need to wory about incompatible shaders -// It used only in GLSL mode. - -// ------------------------- Variables ------------------------------- - -extern int g_nPixelShaderVer; -extern ZZshShaderLink pvs[16], g_vsprog, g_psprog; -extern ZZshParameter g_vparamPosXY[2], g_fparamFogColor; - -#ifndef GLSL4_API -struct FRAGMENTSHADER -{ - FRAGMENTSHADER() : prog(sZero), Shader(0), sMemory(pZero), sFinal(pZero), sBitwiseANDX(pZero), sBitwiseANDY(pZero), sInterlace(pZero), sCLUT(pZero), sOneColor(pZero), sBitBltZ(pZero), - fTexAlpha2(pZero), fTexOffset(pZero), fTexDims(pZero), fTexBlock(pZero), fClampExts(pZero), fTexWrapMode(pZero), - fRealTexDims(pZero), fTestBlack(pZero), fPageOffset(pZero), fTexAlpha(pZero) {} - - ZZshShaderLink prog; // it link to FRAGMENTSHADER structure, for compability between GLSL and CG - ZZshShader Shader; // GLSL store shader's not as ready programs, but as shaders compilated object. VS and PS should be linked together to - // made a program. - ZZshShaderType ShaderType; // Not every PS and VS are used together, only compatible ones. - - ZZshParameter sMemory, sFinal, sBitwiseANDX, sBitwiseANDY, sInterlace, sCLUT; - ZZshParameter sOneColor, sBitBltZ, sInvTexDims; - ZZshParameter fTexAlpha2, fTexOffset, fTexDims, fTexBlock, fClampExts, fTexWrapMode, fRealTexDims, fTestBlack, fPageOffset, fTexAlpha; - - int ParametersStart, ParametersFinish; // this is part of UniformsIndex array in which parameters of this shader stored. Last one is ParametersFinish-1 - -#ifdef _DEBUG - string filename; -#endif - -#ifdef NVIDIA_CG_API - void set_uniform_param(ZZshParameter &var, const char *name) - { - ZZshParameter p; - p = cgGetNamedParameter(prog, name); - - if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) var = p; - } - - bool set_texture(GLuint texobj, const char *name) - { - ZZshParameter p; - - p = cgGetNamedParameter(prog, name); - - if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) - { - cgGLSetTextureParameter(p, texobj); - cgGLEnableTextureParameter(p); - return true; - } - - return false; - } - - bool connect(ZZshParameter &tex, const char *name) - { - ZZshParameter p; - - p = cgGetNamedParameter(prog, name); - - if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) - { - cgConnectParameter(tex, p); - return true; - } - - return false; - } - - bool set_texture(ZZshParameter &tex, const char *name) - { - ZZshParameter p; - - p = cgGetNamedParameter(prog, name); - - if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) - { - //cgGLEnableTextureParameter(p); - tex = p; - return true; - } - - return false; - } - - bool set_shader_const(float4 v, const char *name) - { - ZZshParameter p; - - p = cgGetNamedParameter(prog, name); - - if (p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE) - { - cgGLSetParameter4fv(p, v); - return true; - } - - return false; - } -#endif -}; -#else -const GLenum g_texture_target[11] = {GL_TEXTURE_RECTANGLE, GL_TEXTURE_RECTANGLE, GL_TEXTURE_2D, GL_TEXTURE_2D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_RECTANGLE, GL_TEXTURE_RECTANGLE, GL_TEXTURE_RECTANGLE, GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE}; - -extern uint g_current_texture_bind[11]; -struct SamplerParam { - int unit; - GLuint texid; - GLenum target; - - SamplerParam() : unit(-1), texid(0), target(0) {} - - void set_unit(int new_unit) { - assert(new_unit < 11); - unit = new_unit; - target = g_texture_target[new_unit]; - } - - void enable_texture() { - assert(unit >= 0); - assert(unit < 11); - if (texid) { - // Unfortunately there is a nastly corner case - // 1/ Attach a texture to the unit - // 2/ delete the texture - // 3/ recreate a texture (with same id) - // 4/ => texture need to be reattached again... -#if 0 - if (g_current_texture_bind[unit] != texid) { - glActiveTexture(GL_TEXTURE0 + unit); - glBindTexture(target, texid); - g_current_texture_bind[unit] = texid; - } -#else - glActiveTexture(GL_TEXTURE0 + unit); - glBindTexture(target, texid); -#endif - } - } - - void set_texture(GLuint new_texid) { - texid = new_texid; - } - - void release_texture() { - texid = 0; - } -}; - -struct FRAGMENTSHADER -{ - FRAGMENTSHADER() : prog(sZero) - , program(0) - , context(0) - , sMemory(0) // dual context need 2 slots - , sFinal(2) - , sBitwiseANDX(3) - , sBitwiseANDY(4) - , sInterlace(5) - , sCLUT(6) - { - // Uniform - sOneColor = (ZZshParameter)offsetof(struct FragmentUniform, g_fOneColor) /4; - sBitBltZ = (ZZshParameter)offsetof(struct FragmentUniform, g_fBitBltZ) /4; - sInvTexDims = (ZZshParameter)offsetof(struct FragmentUniform, g_fInvTexDims) /4; - fTexAlpha = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexAlpha) /4; - fTexAlpha2 = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexAlpha2) /4; - fTexOffset = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexOffset) /4; - fTexDims = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexDims) /4; - fTexBlock = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexBlock) /4; - fClampExts = (ZZshParameter)offsetof(struct FragmentUniform, g_fClampExts) /4; // FIXME: There is a bug, that lead FFX-1 to incorrect CLAMP if this uniform have context. - fTexWrapMode = (ZZshParameter)offsetof(struct FragmentUniform, g_fTexWrapMode) /4; - fRealTexDims = (ZZshParameter)offsetof(struct FragmentUniform, g_fRealTexDims) /4; - fTestBlack = (ZZshParameter)offsetof(struct FragmentUniform, g_fTestBlack) /4; - fPageOffset = (ZZshParameter)offsetof(struct FragmentUniform, g_fPageOffset) /4; - - //sFinal = 2; - //sBitwiseANDX = 3; - //sBitwiseANDY = 4; - //sInterlace = 5; - //sCLUT = 6; - samplers[sMemory].set_unit(10); - samplers[sMemory+1].set_unit(10); // Dual context. Use same unit - samplers[sFinal].set_unit(1); - samplers[sBitwiseANDX].set_unit(6); - samplers[sBitwiseANDY].set_unit(7); - samplers[sInterlace].set_unit(8); - samplers[sCLUT].set_unit(9); - - prog.isFragment = true; - prog.link = (void*)this; - } - - ZZshShaderLink prog; // it link to FRAGMENTSHADER structure, for compability between GLSL and CG - ZZshProgram program; - uint context; - - FragmentUniform uniform_buffer[ZZSH_CTX_ALL]; - - // sampler - const ZZshParameter sMemory; - const ZZshParameter sFinal, sBitwiseANDX, sBitwiseANDY, sInterlace, sCLUT; - SamplerParam samplers[7]; - - // uniform - ZZshParameter sOneColor, sBitBltZ, sInvTexDims; - ZZshParameter fTexAlpha2, fTexOffset, fTexDims, fTexBlock, fClampExts, fTexWrapMode, fRealTexDims, fTestBlack, fPageOffset, fTexAlpha; - -#ifdef _DEBUG - string filename; -#endif - - void ZZshSetParameter4fv(ZZshParameter param, const float* v) { - if (IsDualContext(param)) - uniform_buffer[context].SettleFloat((int) param, v); - else - for ( int i = 0; i < ZZSH_CTX_ALL ; i++) - uniform_buffer[i].SettleFloat((int) param, v); - } - - bool IsDualContext(ZZshParameter param) { - if (param == sInvTexDims || param == sBitBltZ || param == sOneColor) - return false; - else - return true; - } - - void enable_texture() { - samplers[sMemory+context].enable_texture(); // sMemory is dual context - for (int i = 2; i < 7; i++) - samplers[i].enable_texture(); - } - - void set_texture(ZZshParameter param, GLuint texid) { - if (param == sMemory) // sMemory is dual context - samplers[sMemory+context].set_texture(texid); - else - samplers[param].set_texture(texid); - } - - void release_prog() { - if(program) { - glDeleteProgram(program); - program = 0; - } - for (uint i = 0; i < 7 ; i++) - samplers[i].release_texture(); - } - - void set_context(uint new_context) { context = new_context * NOCONTEXT;} -}; -#endif - -#ifdef GLSL4_API -struct COMMONSHADER -{ - COMMONSHADER() : context(0) - , sBlocks(0) - , sBilinearBlocks(1) - , sConv16to32(2) - , sConv32to16(3) - { - // sBlocks = 0; - // sBilinearBlocks = 1; - // sConv16to32 = 2; - // sConv32to16 = 3; - samplers[sBlocks].set_unit(2); - samplers[sBilinearBlocks].set_unit(3); - samplers[sConv16to32].set_unit(4); - samplers[sConv32to16].set_unit(5); - - - g_fparamFogColor = (ZZshParameter)offsetof(struct GlobalUniform, g_fFogColor) /4; - g_vparamPosXY = (ZZshParameter)offsetof(struct GlobalUniform, g_fPosXY) /4; - - g_fBilinear = (ZZshParameter)offsetof(struct ConstantUniform, g_fBilinear) /4; - g_fZBias = (ZZshParameter)offsetof(struct ConstantUniform, g_fZbias) /4; - g_fc0 = (ZZshParameter)offsetof(struct ConstantUniform, g_fc0) /4; - g_fMult = (ZZshParameter)offsetof(struct ConstantUniform, g_fMult) /4; - g_fZ = (ZZshParameter)offsetof(struct ConstantUniform, g_fZ) /4; - g_fExactColor = (ZZshParameter)offsetof(struct ConstantUniform, g_fExactColor) /4; - - // Setup the constant buffer - - // Set Z-test, log or no log; - if (conf.settings().no_logz) { - g_vdepth = float4( 255.0 /256.0f, 255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f)); - } - else { - g_vdepth = float4( 256.0f*65536.0f, 65536.0f, 256.0f, 65536.0f*65536.0f); - } - uniform_buffer_constant.SettleFloat(g_fZ, g_vdepth ); - - uniform_buffer_constant.SettleFloat(g_fBilinear, float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ) ); - uniform_buffer_constant.SettleFloat(g_fZBias, float4(1.0f/256.0f, 1.0004f, 1, 0.5f) ); - uniform_buffer_constant.SettleFloat(g_fc0, float4(0,1, 0.001f, 0.5f) ); - - uniform_buffer_constant.SettleFloat(g_fExactColor, float4(0.5f, (conf.settings().exact_color)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f) ); - uniform_buffer_constant.SettleFloat(g_fMult, float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f)); - } - - ZZshParameter g_fparamFogColor, g_vparamPosXY; - ZZshParameter g_fBilinear, g_fZBias, g_fc0, g_fMult, g_fZ, g_fExactColor; - uint context; - - GlobalUniform uniform_buffer[ZZSH_CTX_ALL]; - ConstantUniform uniform_buffer_constant; - - // Sampler - const ZZshParameter sBlocks, sBilinearBlocks, sConv16to32, sConv32to16; - SamplerParam samplers[4]; - - void ZZshSetParameter4fv(ZZshParameter param, const float* v) { - if (IsDualContext(param)) - uniform_buffer[context].SettleFloat((int) param, v); - else - for ( int i = 0; i < ZZSH_CTX_ALL ; i++) - uniform_buffer[i].SettleFloat((int) param, v); - } - - bool IsDualContext(ZZshParameter param) { - if (param == g_vparamPosXY) return true; - else return false; - } - - void set_texture(ZZshParameter param, GLuint texid) { - samplers[param].set_texture(texid); - } - - void enable_texture() { - for (int i = 0; i < 4; i++) - samplers[i].enable_texture(); - } - - void set_context(uint new_context) { context = new_context * NOCONTEXT;} -}; -#endif - -#ifndef GLSL4_API -struct VERTEXSHADER -{ - VERTEXSHADER() : prog(sZero), Shader(0), sBitBltPos(pZero), sBitBltTex(pZero) {} - - ZZshShaderLink prog; - ZZshShader Shader; - ZZshShaderType ShaderType; - - ZZshParameter sBitBltPos, sBitBltTex, fBitBltTrans; // vertex shader constants - - int ParametersStart, ParametersFinish; -}; -#else -struct VERTEXSHADER -{ - - VERTEXSHADER() : prog(sZero), program(0), context(0) - { - sBitBltPos = (ZZshParameter)offsetof(struct VertexUniform, g_fBitBltPos) /4; - sBitBltTex = (ZZshParameter)offsetof(struct VertexUniform, g_fBitBltTex) /4; - fBitBltTrans = (ZZshParameter)offsetof(struct VertexUniform, g_fBitBltTrans) /4; - - // Default value not sure it is needed - uniform_buffer[0].SettleFloat(fBitBltTrans, float4(0.5f, -0.5f, 0.5, 0.5 + 0.4/416.0f ) ); - uniform_buffer[1].SettleFloat(fBitBltTrans, float4(0.5f, -0.5f, 0.5, 0.5 + 0.4/416.0f ) ); - - prog.isFragment = false; - prog.link = (void*)this; - } - - VertexUniform uniform_buffer[ZZSH_CTX_ALL]; - - ZZshShaderLink prog; - ZZshProgram program; - uint context; - - ZZshParameter sBitBltPos, sBitBltTex, fBitBltTrans; // vertex shader constants - - void ZZshSetParameter4fv(ZZshParameter param, const float* v) { - if (IsDualContext(param)) - uniform_buffer[context].SettleFloat((int) param, v); - else - for ( int i = 0; i < ZZSH_CTX_ALL ; i++) - uniform_buffer[i].SettleFloat((int) param, v); - } - - bool IsDualContext(ZZshParameter param) { return false;} - - void set_context(uint new_context) { context = new_context * NOCONTEXT;} - - void release_prog() { - if(program) { - glDeleteProgram(program); - program = 0; - } - } -}; -#endif - -#ifdef GLSL4_API -#define SAFE_RELEASE_PROG(x) { \ - if ((x.link) != NULL) { \ - if (x.isFragment) { \ - FRAGMENTSHADER* shader = (FRAGMENTSHADER*)x.link; \ - shader->release_prog(); \ - } else { \ - VERTEXSHADER* shader = (VERTEXSHADER*)x.link; \ - shader->release_prog(); \ - } \ - } \ -} -#endif - - extern VERTEXSHADER pvsBitBlt; - extern FRAGMENTSHADER ppsBitBlt[2], ppsBitBltDepth, ppsOne; // ppsOne used to stop using shaders for draw - extern FRAGMENTSHADER ppsBaseTexture, ppsConvert16to32, ppsConvert32to16; - - extern FRAGMENTSHADER ppsRegular[4], ppsTexture[NUM_SHADERS]; - extern FRAGMENTSHADER ppsCRTC[2], /*ppsCRTC24[2],*/ ppsCRTCTarg[2]; -#ifdef GLSL4_API - extern COMMONSHADER g_cs; -#endif - - extern int interlace_mode; - - enum CRTC_TYPE - { - CRTC_RENDER, - //CRTC_RENDER_24, - CRTC_RENDER_TARG - }; - - static __forceinline FRAGMENTSHADER* curr_ppsCRTC() { return &ppsCRTC[interlace_mode]; } - //static __forceinline FRAGMENTSHADER* curr_ppsCRTC24() { return &ppsCRTC24[interlace_mode]; } - static __forceinline FRAGMENTSHADER* curr_ppsCRTCTarg() { return &ppsCRTCTarg[interlace_mode]; } - - static __forceinline FRAGMENTSHADER* curr_pps(CRTC_TYPE render_type) - { - switch (render_type) - { - case CRTC_RENDER: return curr_ppsCRTC(); - //case CRTC_RENDER_24: return curr_ppsCRTC24(); - case CRTC_RENDER_TARG: return curr_ppsCRTCTarg(); - default: return NULL; - } - - } -// ------------------------- Functions ------------------------------- - -#ifdef NVIDIA_CG_API -inline bool ZZshExistProgram(FRAGMENTSHADER* pf) {return (pf->prog != NULL); }; // We don't check ps != NULL, so be warned, -inline bool ZZshExistProgram(VERTEXSHADER* pf) {return (pf->prog != NULL); }; -inline bool ZZshExistProgram(ZZshShaderLink prog) {return (prog != NULL); }; -#endif -#if defined(GLSL_API) && !defined(GLSL4_API) -inline bool ZZshExistProgram(FRAGMENTSHADER* pf) {return (pf->Shader != 0); }; -inline bool ZZshExistProgram(VERTEXSHADER* pf) {return (pf->Shader != 0); }; -inline bool ZZshExistProgram(ZZshShaderLink prog) {return (prog.link != NULL); } // This is used for pvs mainly. No NULL means that we do LOAD_VS -#endif -#if defined(GLSL4_API) -inline bool ZZshExistProgram(FRAGMENTSHADER* pf) {return (pf->program != 0); }; -inline bool ZZshExistProgram(VERTEXSHADER* pf) {return (pf->program != 0); }; -inline bool ZZshExistProgram(ZZshShaderLink prog) {return (prog.link != NULL); } // This is used for pvs mainly. No NULL means that we do LOAD_VS -#endif - -extern const char* ShaderCallerName; -extern const char* ShaderHandleName; - -inline void SetShaderCaller(const char* Name) { - ShaderCallerName = Name; -} - -inline void SetHandleName(const char* Name) { - ShaderHandleName = Name; -} - -inline void ResetShaderCounters() { -// g_vsprog = g_psprog = sZero; -} - - -///////////////////////////////////////////////////////////////// -// Improvement: -// * store the location of uniform. Avoid to call glGetUniformLocation a lots of time -// * Use separate shader build pipeline: current code emulate this behavior but with the recent opengl4 -// it would be much more easier to code it. -///////////////////////////////////////////////////////////////// - -// GLSL: Stub -extern bool ZZshCheckProfilesSupport(); - -// Try various Shader to choose supported configuration -// g_nPixelShaderVer -> SHADER_ACCURATE and SHADER_REDUCED -// Honestly we can probably stop supporting those cards. -extern bool ZZshStartUsingShaders(); - -// Open the shader file into an source array -extern bool ZZshCreateOpenShadersFile(); - -// Those 2 functions are used to stop/start shader. The idea is to draw the HUD text. -// Enable is not implemented and it is likely to stop everythings -extern void ZZshGLDisableProfile(); -extern void ZZshGLEnableProfile(); - -// Set the Uniform parameter in host (NOT GL) -// Param seem to be an absolute index inside a table of uniform -extern void ZZshSetParameter4fv(ZZshShaderLink& prog, ZZshParameter param, const float* v, const char* name); -extern void ZZshSetParameter4fv(ZZshParameter param, const float* v, const char* name); -extern void ZZshSetParameter4fvWithRetry(ZZshParameter* param, ZZshShaderLink& prog, const float* v, const char* name); - -// Set the Texture parameter in host (NOT GL) -extern void ZZshGLSetTextureParameter(ZZshShaderLink prog, ZZshParameter param, GLuint texobj, const char* name); -extern void ZZshGLSetTextureParameter(ZZshParameter param, GLuint texobj, const char* name); - -// Set a default value for 1 uniform in host (NOT GL) -extern void ZZshDefaultOneColor( FRAGMENTSHADER& ptr ); - -// Link then run with the new Vertex/Fragment Shader -extern void ZZshSetVertexShader(ZZshShaderLink prog); -extern void ZZshSetPixelShader(ZZshShaderLink prog); - -// Compile standalone Fragment/Vertex shader program -// Note It also init all the Uniform parameter in host (NOT GL) -extern bool ZZshLoadExtraEffects(); - -// Clean some stuff on exit -extern void ZZshExitCleaning(); - -extern FRAGMENTSHADER* ZZshLoadShadeEffect(int type, int texfilter, int fog, int testaem, int exactcolor, const clampInfo& clamp, int context, bool* pbFailed); - -// only sets a limited amount of state (for Update) -void SetTexVariablesInt(int context, int bilinear, const tex0Info& tex0, bool CheckVB, FRAGMENTSHADER* pfragment, int force); - -extern u32 ptexBlocks; // holds information on block tiling. It's texture number in OpenGL -- if 0 than such texture -extern u32 ptexConv16to32; // does not exists. This textures should be created on start and released on finish. -extern u32 ptexBilinearBlocks; -extern u32 ptexConv32to16; - -#ifdef GLSL4_API -extern GSUniformBufferOGL *constant_buffer; -extern GSUniformBufferOGL *common_buffer; -extern GSUniformBufferOGL *vertex_buffer; -extern GSUniformBufferOGL *fragment_buffer; -extern GSVertexBufferStateOGL *vertex_array; - -extern GLenum g_current_vs; -extern GLenum g_current_ps; - -extern void init_shader(); -extern void PutParametersInProgram(VERTEXSHADER* vs, FRAGMENTSHADER* ps); -extern void init_shader(); -extern void ZZshSetupShader(); - -#endif - -#endif diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShoots.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShoots.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShoots.cpp 2013-08-25 12:11:32.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShoots.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,667 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Texture and avi saving to file functions - -//------------------ Includes - #include "Util.h" -#if defined(_WIN32) -# include "Utilities/RedtapeWindows.h" -# include -# include "resource.h" -#endif -#include - -#include "targets.h" -#include "Mem.h" -#include "ZZoglShoots.h" - -// AVI Capture -int s_avicapturing = 0; -bool g_bMakeSnapshot = false; - -extern "C" -{ -#ifdef _WIN32 -# define XMD_H -# undef FAR -#define HAVE_BOOLEAN -#endif - -#include "jpeglib.h" -} - -//------------------ Defines -#define TGA_FILE_NAME_MAX_LENGTH 20 -#define MAX_NUMBER_SAVED_TGA 200 - -//Windows have no snprintf -#if defined(_WIN32) -# define snprintf sprintf_s -#endif -//------------------ Constants - -//------------------ Global Variables -int TexNumber = 0; -int s_aviinit = 0; - -string strSnapshot; - -//------------------ Code - -// Set variables need to made a snapshoot when it's possible -void SaveSnapshot(const char* filename) -{ - g_bMakeSnapshot = true; - strSnapshot = filename; -} - -// Save curent renderer in jpeg or TGA format -bool SaveRenderTarget(const char* filename, int width, int height, int jpeg) -{ - bool bflip = height < 0; - height = abs(height); - vector data(width*height); - glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]); - - if (glGetError() != GL_NO_ERROR) return false; - - if (bflip) - { - // swap scanlines - vector scanline(width); - - for (int i = 0; i < height / 2; ++i) - { - memcpy(&scanline[0], &data[i * width], width * 4); - memcpy(&data[i * width], &data[(height - i - 1) * width], width * 4); - memcpy(&data[(height - i - 1) * width], &scanline[0], width * 4); - } - } - - if (jpeg) return SaveJPEG(filename, width, height, &data[0], 70); - - return SaveTGA(filename, width, height, &data[0]); -} - -// Save selected texture as TGA -bool SaveTexture(const char* filename, u32 textarget, u32 tex, int width, int height, int ext_format) -{ - vector data(width*height); - glBindTexture(textarget, tex); - glGetTexImage(textarget, 0, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]); - - if (glGetError() != GL_NO_ERROR) return false; - - if (ext_format == EXT_BMP) - return SaveBMP(filename, width, height, &data[0]); - else if (ext_format == EXT_TGA) - return SaveTGA(filename, width, height, &data[0]); - else - return false; -} - -// Save image as BMP -bool SaveBMP(const char* filename, int width, int height, void* pdata) -{ - // FIXME - assert(0); - return false; -} - -// save image as JPEG -bool SaveJPEG(const char* filename, int image_width, int image_height, const void* pdata, int quality) -{ - u8* image_buffer = new u8[image_width * image_height * 3]; - u8* psrc = (u8*)pdata; - - // input data is rgba format, so convert to rgb - u8* p = image_buffer; - - for (int i = 0; i < image_height; ++i) - { - for (int j = 0; j < image_width; ++j) - { - p[0] = psrc[0]; - p[1] = psrc[1]; - p[2] = psrc[2]; - p += 3; - psrc += 4; - } - } - - /* This struct contains the JPEG compression parameters and pointers to - * working space (which is allocated as needed by the JPEG library). - * It is possible to have several such structures, representing multiple - * compression/decompression processes, in existence at once. We refer - * to any one struct (and its associated working data) as a "JPEG object". - */ - - struct jpeg_compress_struct cinfo; - - /* This struct represents a JPEG error handler. It is declared separately - * because applications often want to supply a specialized error handler - * (see the second half of this file for an example). But here we just - * take the easy way out and use the standard error handler, which will - * print a message on stderr and call exit() if compression fails. - * Note that this struct must live as long as the main JPEG parameter - * struct, to avoid dangling-pointer problems. - */ - - struct jpeg_error_mgr jerr; - - /* More stuff */ - FILE * outfile; /* target file */ - - JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ - - int row_stride; /* physical row width in image buffer */ - - /* Step 1: allocate and initialize JPEG compression object */ - - /* We have to set up the error handler first, in case the initialization - * step fails. (Unlikely, but it could happen if you are out of memory.) - * This routine fills in the contents of struct jerr, and returns jerr's - * address which we place into the link field in cinfo. - */ - cinfo.err = jpeg_std_error(&jerr); - - /* Now we can initialize the JPEG compression object. */ - jpeg_create_compress(&cinfo); - - /* Step 2: specify data destination (eg, a file) */ - /* Note: steps 2 and 3 can be done in either order. */ - - /* Here we use the library-supplied code to send compressed data to a - * stdio stream. You can also write your own code to do something else. - * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that - * requires it in order to write binary files. - */ - if ((outfile = fopen(filename, "wb")) == NULL) - { - fprintf(stderr, "can't open %s\n", filename); - exit(1); - } - - jpeg_stdio_dest(&cinfo, outfile); - - /* Step 3: set parameters for compression */ - - /* First we supply a description of the input image. - * Four fields of the cinfo struct must be filled in: - */ - cinfo.image_width = image_width; /* image width and height, in pixels */ - cinfo.image_height = image_height; - cinfo.input_components = 3; /* # of color components per pixel */ - cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ - /* Now use the library's routine to set default compression parameters. - * (You must set at least cinfo.in_color_space before calling this, - * since the defaults depend on the source color space.) - */ - jpeg_set_defaults(&cinfo); - /* Now you can set any non-default parameters you wish to. - * Here we just illustrate the use of quality (quantization table) scaling: - */ - jpeg_set_quality(&cinfo, quality, true /* limit to baseline-JPEG values */); - - /* Step 4: Start compressor */ - - /* true ensures that we will write a complete interchange-JPEG file. - * Pass true unless you are very sure of what you're doing. - */ - jpeg_start_compress(&cinfo, true); - - /* Step 5: while (scan lines remain to be written) */ - /* jpeg_write_scanlines(...); */ - - /* Here we use the library's state variable cinfo.next_scanline as the - * loop counter, so that we don't have to keep track ourselves. - * To keep things simple, we pass one scanline per call; you can pass - * more if you wish, though. - */ - row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ - - while (cinfo.next_scanline < cinfo.image_height) - { - /* jpeg_write_scanlines expects an array of pointers to scanlines. - * Here the array is only one element long, but you could pass - * more than one scanline at a time if that's more convenient. - */ - row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; - (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); - } - - /* Step 6: Finish compression */ - - jpeg_finish_compress(&cinfo); - - /* After finish_compress, we can close the output file. */ - fclose(outfile); - - /* Step 7: release JPEG compression object */ - - /* This is an important step since it will release a good deal of memory. */ - jpeg_destroy_compress(&cinfo); - - delete []image_buffer; - - /* And we're done! */ - return true; -} - -#if defined(_MSC_VER) -# pragma pack(push, 1) -#endif - -// This is the defenition of TGA header. We need it to function bellow - -struct TGA_HEADER -{ - u8 identsize; // size of ID field that follows 18 u8 header (0 usually) - u8 colourmaptype; // type of colour map 0=none, 1=has palette - u8 imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed - - s16 colourmapstart; // first colour map entry in palette - s16 colourmaplength; // number of colours in palette - u8 colourmapbits; // number of bits per palette entry 15,16,24,32 - - s16 xstart; // image x origin - s16 ystart; // image y origin - s16 width; // image width in pixels - s16 height; // image height in pixels - u8 bits; // image bits per pixel 8,16,24,32 - u8 descriptor; // image descriptor bits (vh flip bits) - - // pixel data follows header -#if defined(_MSC_VER) -}; - -# pragma pack(pop) -# else -} - -__attribute__((packed)); -#endif - -// Save image as TGA -bool SaveTGA(const char* filename, int width, int height, void* pdata) -{ - TGA_HEADER hdr; - FILE* f = fopen(filename, "wb"); - - if (f == NULL) return false; - - assert(sizeof(TGA_HEADER) == 18 && sizeof(hdr) == 18); - - memset(&hdr, 0, sizeof(hdr)); - - hdr.imagetype = 2; - hdr.bits = 32; - hdr.width = width; - hdr.height = height; - hdr.descriptor |= 8 | (1 << 5); // 8bit alpha, flip vertical - - fwrite(&hdr, sizeof(hdr), 1, f); - fwrite(pdata, width * height * 4, 1, f); - - fclose(f); - - return true; -} - -// AVI capture stuff -// AVI start -- set needed global variables -void StartCapture() -{ - if (conf.captureAvi()) return; - if (!s_aviinit) - { -#ifdef _WIN32 - START_AVI("zerogs.avi"); -#else // linux - //TODO -#endif - s_aviinit = 1; - } - else - { - ZZLog::Error_Log("Continuing from previous capture."); - } - - s_avicapturing = 1; - conf.setCaptureAvi(true); - ZZLog::Warn_Log("Started recording zerogs.avi."); - -} - -// Stop. -void StopCapture() -{ - if (!conf.captureAvi()) return; - s_avicapturing = 0; - conf.setCaptureAvi(false); - ZZLog::Warn_Log("Stopped recording."); -} - -// And capture frame does not work on linux. -void CaptureFrame() -{ - if ((!s_avicapturing) || (!s_aviinit)) return; - - vector data(GLWin.backbuffer.w * GLWin.backbuffer.h); - glReadPixels(0, 0, GLWin.backbuffer.w, GLWin.backbuffer.h, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]); - - if (glGetError() != GL_NO_ERROR) return; - -#ifdef _WIN32 - int fps = SMODE1->CMOD == 3 ? 50 : 60; - - bool bSuccess = ADD_FRAME_FROM_DIB_TO_AVI("AAAA", fps, GLWin.backbuffer.w, GLWin.backbuffer.h, 32, &data[0]); - - if (!bSuccess) - { - s_avicapturing = 0; - STOP_AVI(); - ZZAddMessage("Failed to create avi"); - return; - } - -#else // linux - //TODO -#endif // _WIN32 -} - -// It's nearly the same as save texture -void -SaveTex(tex0Info* ptex, int usevid) -{ - vector data(ptex->tw*ptex->th); - vector srcdata; - - u32* dst = &data[0]; - u8* psrc = g_pbyGSMemory; - - CMemoryTarget* pmemtarg = NULL; - - if (usevid) - { - pmemtarg = g_MemTargs.GetMemoryTarget(*ptex, 0); - assert(pmemtarg != NULL); - - glBindTexture(GL_TEXTURE_RECTANGLE_NV, pmemtarg->ptex->tex); - srcdata.resize(4 * pmemtarg->texW * pmemtarg->texH); - - // FIXME strangely this function call seem to crash pcsx2 on atelier of iris 1 - // Note: fmt is GL_UNSIGNED_SHORT_1_5_5_5_REV - glGetTexImage(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, pmemtarg->fmt, &srcdata[0]); - - u32 offset = MemorySize(pmemtarg->realy); - - if (ptex->psm == PSMT8) - offset *= CLUT_PIXEL_SIZE(ptex->cpsm); - else if (ptex->psm == PSMT4) - offset *= CLUT_PIXEL_SIZE(ptex->cpsm) * 2; - - psrc = &srcdata[0] - offset; - } - - for (int i = 0; i < ptex->th; ++i) - { - for (int j = 0; j < ptex->tw; ++j) - { - u32 u = 0; - u32 addr; - - switch (ptex->psm) - { - case PSMCT32: - addr = getPixelAddress32(j, i, ptex->tbp0, ptex->tbw); - if (addr * 4 < MEMORY_END) - u = readPixel32(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - case PSMCT24: - addr = getPixelAddress24(j, i, ptex->tbp0, ptex->tbw); - if (addr * 4 < MEMORY_END) - u = readPixel24(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - case PSMCT16: - addr = getPixelAddress16(j, i, ptex->tbp0, ptex->tbw); - if (addr * 2 < MEMORY_END) - { - u = readPixel16(psrc, j, i, ptex->tbp0, ptex->tbw); - u = RGBA16to32(u); - } - else - { - u = 0; - } - break; - - case PSMCT16S: - addr = getPixelAddress16(j, i, ptex->tbp0, ptex->tbw); - if (addr * 2 < MEMORY_END) - { - u = readPixel16S(psrc, j, i, ptex->tbp0, ptex->tbw); - u = RGBA16to32(u); - } - else - { - u = 0; - } - break; - - case PSMT8: - addr = getPixelAddress8(j, i, ptex->tbp0, ptex->tbw); - if (addr < MEMORY_END) - { - if (usevid) - { - if (PSMT_IS32BIT(ptex->cpsm)) - u = *(u32*)(psrc + 4 * addr); - else - u = RGBA16to32(*(u16*)(psrc + 2 * addr)); - } - else - { - u = readPixel8(psrc, j, i, ptex->tbp0, ptex->tbw); - } - } - else - { - u = 0; - } - break; - - case PSMT4: - addr = getPixelAddress4(j, i, ptex->tbp0, ptex->tbw); - if (addr < 2*MEMORY_END) - { - if (usevid) - { - if (PSMT_IS32BIT(ptex->cpsm)) - u = *(u32*)(psrc + 4 * addr); - else - u = RGBA16to32(*(u16*)(psrc + 2 * addr)); - } - else - { - u = readPixel4(psrc, j, i, ptex->tbp0, ptex->tbw); - } - } - else - { - u = 0; - } - - break; - - case PSMT8H: - addr = getPixelAddress8H(j, i, ptex->tbp0, ptex->tbw); - if (4*addr < MEMORY_END) - { - if (usevid) - { - if (PSMT_IS32BIT(ptex->cpsm)) - u = *(u32*)(psrc + 4 * addr); - else - u = RGBA16to32(*(u16*)(psrc + 2 * addr)); - } - else - { - u = readPixel8H(psrc, j, i, ptex->tbp0, ptex->tbw); - } - } - else - { - u = 0; - } - break; - - case PSMT4HL: - addr = getPixelAddress4HL(j, i, ptex->tbp0, ptex->tbw); - if (4*addr < MEMORY_END) - { - if (usevid) - { - if (PSMT_IS32BIT(ptex->cpsm)) - u = *(u32*)(psrc + 4 * addr); - else - u = RGBA16to32(*(u16*)(psrc + 2 * addr)); - } - else - { - u = readPixel4HL(psrc, j, i, ptex->tbp0, ptex->tbw); - } - } - else - { - u = 0; - } - break; - - case PSMT4HH: - addr = getPixelAddress4HH(j, i, ptex->tbp0, ptex->tbw); - if (4*addr < MEMORY_END) - { - if (usevid) - { - if (PSMT_IS32BIT(ptex->cpsm)) - u = *(u32*)(psrc + 4 * addr); - else - u = RGBA16to32(*(u16*)(psrc + 2 * addr)); - } - else - { - u = readPixel4HH(psrc, j, i, ptex->tbp0, ptex->tbw); - } - } - else - { - u = 0; - } - break; - - case PSMT32Z: - addr = getPixelAddress32Z(j, i, ptex->tbp0, ptex->tbw); - if (4*addr < MEMORY_END) - u = readPixel32Z(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - case PSMT24Z: - addr = getPixelAddress24Z(j, i, ptex->tbp0, ptex->tbw); - if (4*addr < MEMORY_END) - u = readPixel24Z(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - case PSMT16Z: - addr = getPixelAddress16Z(j, i, ptex->tbp0, ptex->tbw); - if (2*addr < MEMORY_END) - u = readPixel16Z(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - case PSMT16SZ: - addr = getPixelAddress16SZ(j, i, ptex->tbp0, ptex->tbw); - if (2*addr < MEMORY_END) - u = readPixel16SZ(psrc, j, i, ptex->tbp0, ptex->tbw); - else - u = 0; - break; - - default: - assert(0); - } - - *dst++ = u; - } - } - - char Name[TGA_FILE_NAME_MAX_LENGTH]; - - snprintf(Name, TGA_FILE_NAME_MAX_LENGTH, "Tex.%d.tga", TexNumber); - SaveTGA(Name, ptex->tw, ptex->th, &data[0]); - - TexNumber++; - if (TexNumber > MAX_NUMBER_SAVED_TGA) TexNumber = 0; -} - - -// Do the save texture and return file name of it -// Do not forget to call free(), other wise there would be memory leak! -char* NamedSaveTex(tex0Info* ptex, int usevid) -{ - SaveTex(ptex, usevid); - - char* Name = (char*)malloc(TGA_FILE_NAME_MAX_LENGTH); - snprintf(Name, TGA_FILE_NAME_MAX_LENGTH, "Tex.%d.tga", TexNumber); - - return Name; -} - -// Special function, which is safe to call from any other file, without aviutils problems. -void Stop_Avi() -{ -#ifdef _WIN32 - STOP_AVI(); -#else -// Does not support yet -#endif -} - -void Delete_Avi_Capture() -{ - if (s_aviinit) - { - StopCapture(); - Stop_Avi(); - ZZLog::Error_Log("zerogs.avi stopped."); - s_aviinit = 0; - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShoots.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShoots.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglShoots.h 2012-05-07 19:51:58.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglShoots.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#ifndef ZZOGLSHOOTS_H_INCLUDED -#define ZZOGLSHOOTS_H_INCLUDED - -void SaveSnapshot(const char* filename); -bool SaveRenderTarget(const char* filename, int width, int height, int jpeg); -bool SaveTexture(const char* filename, u32 textarget, u32 tex, int width, int height, int ext_format = 0); -bool SaveJPEG(const char* filename, int width, int height, const void* pdata, int quality); -bool SaveTGA(const char* filename, int width, int height, void* pdata); -bool SaveBMP(const char* filename, int width, int height, void* pdata); -void Stop_Avi(); -void Delete_Avi_Capture(); - -void StartCapture(); -void StopCapture(); -void CaptureFrame(); - -enum { - EXT_TGA = 0, - EXT_BMP = 1, - EXT_JPG = 2 -}; - -#endif // ZZOGLSHOOTS_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglVB.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglVB.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglVB.cpp 2010-11-07 05:51:54.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglVB.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,506 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Zerogs:VB implementation. -// VB stands for Visual Buffer, as I think - -//------------------- Includes - #include "Util.h" -#include "targets.h" -#include "ZZoglVB.h" -#include "GS.h" -#include "Mem.h" -extern float fiTexWidth[2], fiTexHeight[2]; // current tex width and height - -// ----------------- Defines -#define MINMAX_SHIFT 3 - -//------------------ Constants - -// ----------------- Global Variables -int maxmin = 608; -// ----------------- Code - -// Constructor. Set width and height to 1 -VB::VB() -{ - memset(this, 0, sizeof(VB)); - tex0.tw = 1; - tex0.th = 1; -} - -// Destructor -VB::~VB() -{ - Destroy(); -} - -void VB::Destroy() -{ - _aligned_free(pBufferData); - pBufferData = NULL; - nNumVertices = 0; - - prndr = NULL; - pdepth = NULL; -} - -int ConstraintReason; - -// Return number of 64-pixels block, that guaranted could be hold in memory -// from gsfb.fbp and tbp (textrure pase), zbuf.zbp (Z-buffer), frame.fbp -// (previous frame). -inline int VB::FindMinimalMemoryConstrain(int tbp, int maxpos) -{ - int MinConstraint = maxpos; - - // make sure texture is far away from tbp - { - int Constraint = tbp - gsfb.fbp; - - if ((0 < Constraint) && (Constraint < MinConstraint)) - { - MinConstraint = Constraint; - ConstraintReason = 1; - } - } - - // offroad uses 0x80 fbp which messes up targets - // special case when double buffering (hamsterball) - // Suikoden 3 require e00 have this issue too. P3 - 0x1000. - - if (prndr != NULL) - { - int Constraint = frame.fbp - gsfb.fbp; - - if ((0x0 < Constraint) && (Constraint < MinConstraint)) - { - MinConstraint = Constraint; - ConstraintReason = 2; - } - } - - // old caching method - // zmsk necessary for KH movie - if (!zbuf.zmsk) - { - int Constraint = zbuf.zbp - gsfb.fbp; - - if ((0 < Constraint) && (Constraint < MinConstraint)) - { - MinConstraint = Constraint; - ConstraintReason = 3; - } - } - - // In 16Bit mode in one Word frame stored 2 pixels - if (PSMT_ISHALF(gsfb.psm)) MinConstraint *= 2; - - return MinConstraint ; -} - -// Return number of 64 pizel words that could be placed in Z-Buffer -// If no Z-buffer present return old constraint -inline int VB::FindZbufferMemoryConstrain(int tbp, int maxpos) -{ - int MinConstraint = maxpos; - - // Check tbp / zbuffer constraint - if (!zbuf.zmsk) - { - int Constraint = (tbp - zbuf.zbp) * (PSMT_ISHALF(zbuf.psm) ? 2 : 1); - - if ((0 < Constraint) && (Constraint < MinConstraint)) - { - MinConstraint = Constraint; - ConstraintReason = 4; - } - } - - return MinConstraint; -} - -// Return heights limiter from scissor... -inline int GetScissorY(int y) -{ - int fbh = (y >> MINMAX_SHIFT) + 1; - - if (fbh > 2 && (fbh & 1)) fbh -= 1; - - return fbh; -} - -//There is several reasons to limit a height of frame: maximum buffer size, calculated size -//from fbw and fbh and scissoring. -inline int VB::FindMinimalHeightConstrain(int maxpos) -{ - int MinConstraint = maxpos; - - if (maxmin < MinConstraint) - { - MinConstraint = maxmin; - ConstraintReason = 5; - } - - if (gsfb.fbh < MinConstraint) - { - MinConstraint = gsfb.fbh; - ConstraintReason = 6; - } - - int ScissorConstraint = GetScissorY(scissor.y1) ; - - if (ScissorConstraint < MinConstraint) - { - MinConstraint = ScissorConstraint; - ConstraintReason = 7; - } - - return MinConstraint; -} - -// 32 bit frames have additional constraints to frame -// maxpos was maximum length of frame at normal constraints -inline void VB::CheckFrame32bitRes(int maxpos) -{ - int fbh = frame.fbh; - - if (frame.fbh >= 512) - { - // neopets hack - maxmin = min(maxmin, frame.fbh); - frame.fbh = maxmin; - ConstraintReason = 8; - } - - // ffxii hack to stop resolving - if (frame.fbp >= 0x3000 && fbh >= 0x1a0) - { - int endfbp = frame.fbp + frame.fbw * fbh / (PSMT_ISHALF(gsfb.psm) ? 128 : 64); - - // see if there is a previous render target in the way, reduce - - for (CRenderTargetMngr::MAPTARGETS::iterator itnew = s_RTs.mapTargets.begin(); itnew != s_RTs.mapTargets.end(); ++itnew) - { - if (itnew->second->fbp > frame.fbp && endfbp > itnew->second->fbp) - { - endfbp = itnew->second->fbp; - } - } - - frame.fbh = (endfbp - frame.fbp) * (PSMT_ISHALF(gsfb.psm) ? 128 : 64) / frame.fbw; - - if (frame.fbh < fbh) ConstraintReason = 9; - } - -} - -// This is the main code for frame resizing. -// It checks for several reasons to resize and resizes if it needs to. -// 4Mb memory in 64 bit (4 bytes) words. -// |------------------------|---------------------|----------|----------|---------------------| -// 0 gsfb.fbp zbuff.zpb tbp frame.fbp 2^20/64 -inline int VB::CheckFrameAddConstraints(int tbp) -{ - if (gsfb.fbw <= 0) - { - ERROR_LOG_SPAM("render target null, no constraints. Ignoring\n"); - return -1; - } - - // Memory region after fbp - int maxmemorypos = 0x4000 - gsfb.fbp; - - ConstraintReason = 0; - - maxmemorypos = FindMinimalMemoryConstrain(tbp, maxmemorypos); - maxmemorypos = FindZbufferMemoryConstrain(tbp, maxmemorypos); - - int maxpos = 64 * maxmemorypos ; - - maxpos /= gsfb.fbw; - - //? atelier iris crashes without it - if (maxpos > 256) maxpos &= ~0x1f; - -#ifdef DEVBUILD - int noscissorpos = maxpos; - int ConstrainR1 = ConstraintReason; -#endif - - maxpos = FindMinimalHeightConstrain(maxpos); - - frame = gsfb; - frame.fbh = maxpos; - - if (!PSMT_ISHALF(frame.psm) || !(conf.settings().full_16_bit_res)) CheckFrame32bitRes(maxpos); - -#ifdef DEVBUILD - if (frame.fbh == 0xe2) - ZZLog::Debug_Log("Const: %x %x %d| %x %d %x %x", frame.fbh, frame.fbw, ConstraintReason, noscissorpos, ConstrainR1, tbp, frame.fbp); -#endif - -// Fixme: Reserved psm for framebuffers -// gsfb.psm &= 0xf; // shadow tower - - return 0; -} - -// Check if after resizing new depth target is needed to be used. -// it returns 2 if a new depth target is used. -inline int VB::CheckFrameResolveDepth(int tbp) -{ - int result = 0; - CDepthTarget* pprevdepth = pdepth; - pdepth = NULL; - - // just z changed - frameInfo f = CreateFrame(zbuf.zbp, prndr->fbw, prndr->fbh, zbuf.psm, (zbuf.psm == 0x31) ? 0xff000000 : 0); - - CDepthTarget* pnewdepth = (CDepthTarget*)s_DepthRTs.GetTarg(f, CRenderTargetMngr::TO_DepthBuffer | CRenderTargetMngr::TO_StrictHeight | - (zbuf.zmsk ? CRenderTargetMngr::TO_Virtual : 0), get_maxheight(zbuf.zbp, gsfb.fbw, 0)); - - assert(pnewdepth != NULL && prndr != NULL); - if (pnewdepth->fbh != prndr->fbh) ZZLog::Debug_Log("pnewdepth->fbh(0x%x) != prndr->fbh(0x%x)", pnewdepth->fbh, prndr->fbh); - //assert(pnewdepth->fbh == prndr->fbh); - - if ((pprevdepth != pnewdepth) || (pprevdepth != NULL && (pprevdepth->status & CRenderTarget::TS_NeedUpdate))) - result = 2; - - pdepth = pnewdepth; - - return result; -} - -// Check if after resizing, a new render target is needed to be used. Also perform deptarget check. -// Returns 1 if only 1 render target is changed and 3 -- if both. -inline int VB::CheckFrameResolveRender(int tbp) -{ - int result = 0; - - CRenderTarget* pprevrndr = prndr; - prndr = NULL; - CDepthTarget* pprevdepth = pdepth; - pdepth = NULL; - // Set renderes to NULL to prevent Flushing. - - CRenderTarget* pnewtarg = s_RTs.GetTarg(frame, 0, maxmin); - assert(pnewtarg != NULL); - - // pnewtarg->fbh >= 0x1c0 needed for ffx - - if ((pnewtarg->fbh >= 0x1c0) && pnewtarg->fbh > frame.fbh && zbuf.zbp < tbp && !zbuf.zmsk) - { - // check if zbuf is in the way of the texture (suikoden5) - int maxallowedfbh = (tbp - zbuf.zbp) * (PSMT_ISHALF(zbuf.psm) ? 128 : 64) / gsfb.fbw; - - if (PSMT_ISHALF(gsfb.psm)) maxallowedfbh *= 2; - - if (pnewtarg->fbh > maxallowedfbh + 32) // +32 needed for ffx2 - { - // destroy and recreate - s_RTs.DestroyAllTargs(0, 0x100, pnewtarg->fbw); - pnewtarg = s_RTs.GetTarg(frame, 0, maxmin); - assert(pnewtarg != NULL); - } - } - - ZZLog::Prim_Log("frame_%d: fbp=0x%x fbw=%d fbh=%d(%d) psm=0x%x fbm=0x%x\n", ictx, gsfb.fbp, gsfb.fbw, gsfb.fbh, pnewtarg->fbh, gsfb.psm, gsfb.fbm); - - if ((pprevrndr != pnewtarg) || (pprevrndr != NULL && (pprevrndr->status & CRenderTarget::TS_NeedUpdate))) - result = 1; - - prndr = pnewtarg; - - pdepth = pprevdepth; - - result |= CheckFrameResolveDepth(tbp); - - return result; -} - -// After frame resetting, it is possible that 16 to 32 or 32 to 16 (color bits) conversion should be made. -inline void VB::CheckFrame16vs32Conversion() -{ - if (prndr->status & CRenderTarget::TS_NeedConvert32) - { - if (pdepth->pdepth != 0) pdepth->SetDepthStencilSurface(); - - prndr->fbh *= 2; - prndr->ConvertTo32(); - prndr->status &= ~CRenderTarget::TS_NeedConvert32; - } - else if (prndr->status & CRenderTarget::TS_NeedConvert16) - { - if (pdepth->pdepth != 0) pdepth->SetDepthStencilSurface(); - - prndr->fbh /= 2; - prndr->ConvertTo16(); - prndr->status &= ~CRenderTarget::TS_NeedConvert16; - } -} - -void SetContextTarget(int context); - -// A lot of times, the target is too big and overwrites the texture. -// If tbp != 0, use it to bound. -void VB::CheckFrame(int tbp) -{ - GL_REPORT_ERRORD(); - - static int bChanged; - - if (bNeedZCheck) - { - ZZLog::Prim_Log("zbuf_%d: zbp=0x%x psm=0x%x, zmsk=%d\n", ictx, zbuf.zbp, zbuf.psm, zbuf.zmsk); - //zbuf = *zb; - } - - if (m_Blocks[gsfb.psm].bpp == 0) - { - ZZLog::Error_Log("CheckFrame invalid bpp %d.", gsfb.psm); - return; - } - - bChanged = 0; - - if (bNeedFrameCheck) - { - // important to set before calling GetTarg - bNeedFrameCheck = 0; - bNeedZCheck = 0; - - if (CheckFrameAddConstraints(tbp) == -1) return; - - if ((prndr != NULL) && (prndr->psm != gsfb.psm)) - { - // behavior for dest alpha varies -// ResetAlphaVariables(); - } - - bChanged = CheckFrameResolveRender(tbp); - - CheckFrame16vs32Conversion(); - } - else if (bNeedZCheck) - { - bNeedZCheck = 0; - - if (prndr != NULL && gsfb.fbw > 0) CheckFrameResolveDepth(tbp); - } - - if (prndr != NULL) SetContextTarget(ictx); - GL_REPORT_ERRORD(); -} - -// This is the case, most easy to perform, when nothing was changed -inline void VB::FlushTexUnchangedClutDontUpdate() -{ - if (ZZOglGet_cld_TexBits(uNextTex0Data[1])) - { - texClutWrite(ictx); - // invalidate to make sure target didn't change! - bVarsTexSync = false; - } -} - -// The second of easy branch. We does not change storage model, so we don't need to -// update anything except texture itself -inline void VB::FlushTexClutDontUpdate() -{ - if (!ZZOglClutStorageUnchanged(uCurTex0Data, uNextTex0Data)) Flush(ictx); - - // clut memory isn't going to be loaded so can ignore, but at least update CSA and CPSM! - uCurTex0Data[1] = (uCurTex0Data[1] & CPSM_CSA_NOTMASK) | (uNextTex0Data[1] & CPSM_CSA_BITMASK); - - tex0.csa = ZZOglGet_csa_TexBits(uNextTex0Data[1]); - tex0.cpsm = ZZOglGet_cpsm_TexBits(uNextTex0Data[1]); - - texClutWrite(ictx); - - bVarsTexSync = false; -} - - -// Set texture variables after big change -inline void VB::FlushTexSetNewVars(u32 psm) -{ - tex0.tbp0 = ZZOglGet_tbp0_TexBits(uNextTex0Data[0]); - tex0.tbw = ZZOglGet_tbw_TexBitsMult(uNextTex0Data[0]); - tex0.psm = psm; - tex0.tw = ZZOglGet_tw_TexBitsExp(uNextTex0Data[0]); - tex0.th = ZZOglGet_th_TexBitsExp(uNextTex0Data[0], uNextTex0Data[1]); - - tex0.tcc = ZZOglGet_tcc_TexBits(uNextTex0Data[1]); - tex0.tfx = ZZOglGet_tfx_TexBits(uNextTex0Data[1]); - - fiTexWidth[ictx] = (1 / 16.0f) / tex0.tw; - fiTexHeight[ictx] = (1 / 16.0f) / tex0.th; -} - -// Flush == draw on screen -// This function made VB state consistant before real Flush. -void VB::FlushTexData() -{ - GL_REPORT_ERRORD(); - - //assert(bNeedTexCheck); - if (bNeedTexCheck) - { - bNeedTexCheck = 0; - - u32 psm = ZZOglGet_psm_TexBitsFix(uNextTex0Data[0]); - - // don't update unless necessary - - if (ZZOglAllExceptClutIsSame(uCurTex0Data, uNextTex0Data)) - { - // Don't need to do anything if there is no clutting and VB tex data was not changed - if (!PSMT_ISCLUT(psm)) return; - - // have to write the CLUT again if only CLD was changed - if (ZZOglClutMinusCLDunchanged(uCurTex0Data, uNextTex0Data)) - { - FlushTexUnchangedClutDontUpdate(); - return; - } - - // Cld bit is 0 means that clut buffer stay unchanged - if (ZZOglGet_cld_TexBits(uNextTex0Data[1]) == 0) - { - FlushTexClutDontUpdate(); - return; - } - } - - // Made the full update - Flush(ictx); - - bVarsTexSync = false; - bTexConstsSync = false; - - uCurTex0Data[0] = uNextTex0Data[0]; - uCurTex0Data[1] = uNextTex0Data[1]; - - FlushTexSetNewVars(psm); - - if (PSMT_ISCLUT(psm)) CluttingForFlushedTex(&tex0, uNextTex0Data[1], ictx) ; - GL_REPORT_ERRORD(); - } -} diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglVB.h pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglVB.h --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZoglVB.h 2014-08-27 03:45:23.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZoglVB.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -// Zerogs:VB implementation. -// VB stands for Visual Buffer, as I think - -#ifndef ZZOGLVB_H_INCLUDED -#define ZZOGLVB_H_INCLUDED - -#include "targets.h" - -extern const GLenum primtype[8]; - -class VB -{ - public: - VB(); - ~VB(); - - void Destroy(); - - inline bool CheckPrim() - { - static const int PRIMMASK = 0x0e; // for now ignore 0x10 (AA) - - if ((PRIMMASK & prim->_val) != (PRIMMASK & curprim._val) || primtype[prim->prim] != primtype[curprim.prim]) - return nCount > 0; - - return false; - } - - void SetCurrentPrim() - { - curprim._val = prim->_val; - curprim.prim = prim->prim; - } - - void CheckFrame(int tbp); - - // context specific state - Point offset; - Rect2 scissor; - tex0Info tex0; - tex1Info tex1; - miptbpInfo miptbp0; - miptbpInfo miptbp1; - alphaInfo alpha; - fbaInfo fba; - clampInfo clamp; - pixTest test; - u32 ptexClamp[2]; // textures for x and y dir region clamping - - void FlushTexData(); - inline int CheckFrameAddConstraints(int tbp); - inline void CheckScissors(int maxpos); - inline void CheckFrame32bitRes(int maxpos); - inline int FindMinimalMemoryConstrain(int tbp, int maxpos); - inline int FindZbufferMemoryConstrain(int tbp, int maxpos); - inline int FindMinimalHeightConstrain(int maxpos); - - inline int CheckFrameResolveRender(int tbp); - inline void CheckFrame16vs32Conversion(); - inline int CheckFrameResolveDepth(int tbp); - - inline void FlushTexUnchangedClutDontUpdate() ; - inline void FlushTexClutDontUpdate() ; - inline void FlushTexClutting() ; - inline void FlushTexSetNewVars(u32 psm) ; - - // Increase the size of pbuf - void IncreaseVertexBuffer() - { - assert(pBufferData != NULL); - nNumVertices *= 2; - VertexGPU* ptemp = (VertexGPU*)_aligned_malloc(sizeof(VertexGPU) * nNumVertices, 256); - memcpy(ptemp, pBufferData, sizeof(VertexGPU) * nCount); - assert(nCount <= nNumVertices); - _aligned_free(pBufferData); - pBufferData = ptemp; - } - - void Init(int nVerts) - { - if (pBufferData == NULL && nVerts > 0) - { - pBufferData = (VertexGPU*)_aligned_malloc(sizeof(VertexGPU) * nVerts, 256); - nNumVertices = nVerts; - } - - nCount = 0; - } - - u8 bNeedFrameCheck; - u8 bNeedZCheck; - u8 bNeedTexCheck; - u8 dummy0; - - union - { - struct - { - u8 bTexConstsSync; // only pixel shader constants that context owns - u8 bVarsTexSync; // texture info - u8 bVarsSetTarg; - u8 dummy1; - }; - - u32 bSyncVars; - }; - - int ictx; - VertexGPU* pBufferData; // current allocated data - - int nNumVertices; // size of pBufferData in terms of VertexGPU objects - int nCount; - primInfo curprim; // the previous prim the current buffers are set to - - zbufInfo zbuf; - frameInfo gsfb; // the real info set by FRAME cmd - frameInfo frame; - int zprimmask; // zmask for incoming points - - union - { - u32 uCurTex0Data[2]; // current tex0 data - GIFRegTEX0 uCurTex0; - }; - u32 uNextTex0Data[2]; // tex0 data that has to be applied if bNeedTexCheck is 1 - - //int nFrameHeights[8]; // frame heights for the past frame changes - int nNextFrameHeight; - - CMemoryTarget* pmemtarg; // the current mem target set - CRenderTarget* prndr; - CDepthTarget* pdepth; - -}; - -// VB variables -extern VB vb[2]; - -#endif // ZZOGLVB_H_INCLUDED diff -Nru pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZRenderTargets.cpp pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZRenderTargets.cpp --- pcsx2-1.3.1+dfsg/plugins/zzogl-pg/opengl/ZZRenderTargets.cpp 2013-06-28 17:32:37.000000000 +0000 +++ pcsx2-1.4.0/plugins/zzogl-pg/opengl/ZZRenderTargets.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1323 +0,0 @@ -/* ZZ Open GL graphics plugin - * Copyright (c)2009-2010 zeydlitz@gmail.com, arcum42@gmail.com - * Based on Zerofrog's ZeroGS KOSMOS (c)2005-2008 - * - * 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 - */ - -#include -#include - -#include "GS.h" -#include "Mem.h" -#include "x86.h" -#include "targets.h" -#include "ZZoglShaders.h" -#include "ZZClut.h" -#include "ZZoglVB.h" -#include "Util.h" - - -extern int g_TransferredToGPU; -extern int s_nResolved; - -void _Resolve(const void* psrc, int fbp, int fbw, int fbh, int psm, u32 fbm, bool mode); -void SetWriteDepth(); -bool IsWriteDepth(); -bool IsWriteDestAlphaTest(); - - - -// Draw 4 triangles from binded array using only stencil buffer -inline void FillOnlyStencilBuffer() -{ - if (IsWriteDestAlphaTest() && !(conf.settings().no_stencil)) - { - glColorMask(0, 0, 0, 0); - glEnable(GL_ALPHA_TEST); - glAlphaFunc(GL_GEQUAL, 1.0f); - - glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glStencilFunc(GL_ALWAYS, 1, 0xff); - - DrawTriangleArray(); - glColorMask(1, 1, 1, 1); - } -} - -inline void BindToSample(u32 *p_ptr) -{ - glBindTexture(GL_TEXTURE_RECTANGLE_NV, *p_ptr); - setRectFilters(GL_NEAREST); -} - -// Made an empty texture and bind it to $ptr_p -// returns false if creating texture was unsuccessful -// fbh and fdb should be properly shifted before calling this! -// We should ignore framebuffer trouble here, as we put textures of different sizes to it. -inline bool CRenderTarget::InitialiseDefaultTexture(u32 *ptr_p, int fbw, int fbh) -{ - glGenTextures(1, ptr_p); - glBindTexture(GL_TEXTURE_RECTANGLE_NV, *ptr_p); - - // initialize to default - TextureRect(GL_RGBA, fbw, fbh, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - - setRectWrap(GL_CLAMP); - setRectFilters(GL_LINEAR); - - GLenum Error = glGetError(); - return ((Error == GL_NO_ERROR) || (Error == GL_INVALID_FRAMEBUFFER_OPERATION_EXT)); -} - -// used for transformation from vertex position in GS window.coords (I hope) -// to view coordinates (in range 0, 1). -float4 CRenderTarget::DefaultBitBltPos() -{ - float4 v = float4(1, -1, 0.5f / (float)RW(fbw), 0.5f / (float)RH(fbh)); - v *= 1.0f / 32767.0f; - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltPos, v, "g_sBitBltPos"); - return v; -} - -// Used to transform texture coordinates from GS (when 0,0 is upper left) to -// OpenGL (0,0 - lower left). -float4 CRenderTarget::DefaultBitBltTex() -{ - // I really sure that -0.5 is correct, because OpenGL have no half-offset - // issue, DirectX known for. - float4 v = float4(1, -1, 0.5f / (float)RW(fbw), -0.5f / (float)RH(fbh)); - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "g_sBitBltTex"); - return v; -} - - -//////////////////// -// Render Targets // -//////////////////// -CRenderTarget::CRenderTarget() : psys(NULL), ptex(0), ptexFeedback(0) -{ - FUNCLOG - nUpdateTarg = 0; -} - -CRenderTarget::~CRenderTarget() -{ - FUNCLOG - Destroy(); -} - -bool CRenderTarget::Create(const frameInfo& frame) -{ - FUNCLOG - Resolve(); - Destroy(); - created = 123; - - lastused = timeGetTime(); - fbp = frame.fbp; - fbw = frame.fbw; - fbh = frame.fbh; - psm = (u8)frame.psm; - fbm = frame.fbm; - - vposxy.x = 2.0f * (1.0f / 8.0f) / (float)fbw; - vposxy.y = 2.0f * (1.0f / 8.0f) / (float)fbh; - vposxy.z = -1.0f - 0.5f / (float)fbw; - vposxy.w = -1.0f + 0.5f / (float)fbh; - status = 0; - - if (fbw > 0 && fbh > 0) - { - GetRectMemAddressZero(start, end, psm, fbw, fbh, fbp, fbw); - psys = _aligned_malloc(Tex_Memory_Size(fbw, fbh), 16); - - GL_REPORT_ERRORD(); - - if (!InitialiseDefaultTexture(&ptex, RW(fbw), RH(fbh))) - { - Destroy(); - return false; - } - - status = TS_NeedUpdate; - } - else - { - start = end = 0; - } - - return true; -} - -void CRenderTarget::Destroy() -{ - FUNCLOG - created = 1; - _aligned_free(psys); - psys = NULL; - SAFE_RELEASE_TEX(ptex); - SAFE_RELEASE_TEX(ptexFeedback); -} - -void CRenderTarget::SetTarget(int fbplocal, const Rect2& scissor, int context) -{ - FUNCLOG - int dy = 0; - - if (fbplocal != fbp) - { - float4 v; - - // will be rendering to a subregion - u32 bpp = PSMT_ISHALF(psm) ? 2 : 4; - assert(((256 / bpp)*(fbplocal - fbp)) % fbw == 0); - assert(fbplocal >= fbp); - - dy = ((256 / bpp) * (fbplocal - fbp)) / fbw; - - v.x = vposxy.x; - v.y = vposxy.y; - v.z = vposxy.z; - v.w = vposxy.w - dy * 2.0f / (float)fbh; - ZZshSetParameter4fv(g_vparamPosXY[context], v, "g_fPosXY"); - } - else - { - ZZshSetParameter4fv(g_vparamPosXY[context], vposxy, "g_fPosXY"); - } - - // set render states - // Bleh. I *really* need to fix this. << 3 when setting the scissors, then >> 3 when using them... --Arcum42 - scissorrect.x = scissor.x0 >> 3; - scissorrect.y = (scissor.y0 >> 3) + dy; - scissorrect.w = (scissor.x1 >> 3) + 1; - scissorrect.h = (scissor.y1 >> 3) + 1 + dy; - - scissorrect.w = min(scissorrect.w, fbw) - scissorrect.x; - scissorrect.h = min(scissorrect.h, fbh) - scissorrect.y; - - scissorrect.x = RW(scissorrect.x); - scissorrect.y = RH(scissorrect.y); - scissorrect.w = RW(scissorrect.w); - scissorrect.h = RH(scissorrect.h); -} - -void CRenderTarget::SetViewport() -{ - FUNCLOG - glViewport(0, 0, RW(fbw), RH(fbh)); -} - -inline bool NotResolveHelper() -{ - return ((s_nResolved > 8 && (2 * s_nResolved > fFPS - 10)) || (conf.settings().no_target_resolve)); -} - -void CRenderTarget::Resolve() -{ - FUNCLOG - - if (ptex != 0 && !(status&TS_Resolved) && !(status&TS_NeedUpdate)) - { - // flush if necessary - FlushIfNecesary(this) ; - - if ((IsDepth() && !IsWriteDepth()) || NotResolveHelper()) - { - // don't resolve if depths aren't used - status = TS_Resolved; - return; - } - - glBindTexture(GL_TEXTURE_RECTANGLE_NV, ptex); - - GL_REPORT_ERRORD(); - // This code extremely slow on DC1. -// _aligned_free(psys); -// psys = _aligned_malloc( Tex_Memory_Size ( fbw, fbh ), 16 ); - - glGetTexImage(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, GL_UNSIGNED_BYTE, psys); - - GL_REPORT_ERRORD(); - -#if defined(ZEROGS_DEVBUILD) - - if (g_bSaveResolved) - { - SaveTexture("resolved.tga", GL_TEXTURE_RECTANGLE_NV, ptex, RW(fbw), RH(fbh)); - g_bSaveResolved = 0; - } - -#endif - _Resolve(psys, fbp, fbw, fbh, psm, fbm, true); - - status = TS_Resolved; - } -} - -void CRenderTarget::Resolve(int startrange, int endrange) -{ - FUNCLOG - - assert(startrange < end && endrange > start); // make sure it at least intersects - - if (ptex != 0 && !(status&TS_Resolved) && !(status&TS_NeedUpdate)) - { - // flush if necessary - FlushIfNecesary(this) ; - -#if defined(ZEROGS_DEVBUILD) - if (g_bSaveResolved) - { - SaveTexture("resolved.tga", GL_TEXTURE_RECTANGLE_NV, ptex, RW(fbw), RH(fbh)); - g_bSaveResolved = 0; - } -#endif - if (conf.settings().no_target_resolve) - { - status = TS_Resolved; - return; - } - - int blockheight = PSMT_ISHALF(psm) ? 64 : 32; - int resolvefbp = fbp, resolveheight = fbh; - int scanlinewidth = 0x2000 * (fbw >> 6); - - // in no way should data be overwritten!, instead resolve less - - if (endrange < end) - { - // round down to nearest block and scanline - resolveheight = ((endrange - start) / (0x2000 * (fbw >> 6))) * blockheight; - - if (resolveheight <= 32) - { - status = TS_Resolved; - return; - } - } - else if (startrange > start) - { - // round up to nearest block and scanline - resolvefbp = startrange + scanlinewidth - 1; - resolvefbp -= resolvefbp % scanlinewidth; - - resolveheight = fbh - ((resolvefbp - fbp) * blockheight / scanlinewidth); - - if (resolveheight <= 64) // this is a total hack, but kh doesn't resolve now - { - status = TS_Resolved; - return; - } - - resolvefbp >>= 8; - } - - glBindTexture(GL_TEXTURE_RECTANGLE_NV, ptex); - - glGetTexImage(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, GL_UNSIGNED_BYTE, psys); - GL_REPORT_ERRORD(); - - u8* pbits = (u8*)psys; - - if (fbp != resolvefbp) pbits += ((resolvefbp - fbp) * 256 / scanlinewidth) * blockheight * Pitch(fbw); - - _Resolve(pbits, resolvefbp, fbw, resolveheight, psm, fbm, true); - - status = TS_Resolved; - } -} - -void CRenderTarget::Update(int context, CRenderTarget* pdepth) -{ - FUNCLOG - - DisableAllgl(); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - SET_STREAM(); - - // assume depth already set - //pd3dDevice->SetDepthStencilSurface(psurfDepth); - ResetRenderTarget(1); - SetRenderTarget(0); - assert(pdepth != NULL); - ((CDepthTarget*)pdepth)->SetDepthStencilSurface(); - - SetShaderCaller("CRenderTarget::Update"); - float4 v = DefaultBitBltPos(); - - CRenderTargetMngr::MAPTARGETS::iterator ittarg; - - if (nUpdateTarg) - { - ittarg = s_RTs.mapTargets.find(nUpdateTarg); - - if (ittarg == s_RTs.mapTargets.end()) - { - ittarg = s_DepthRTs.mapTargets.find(nUpdateTarg); - - if (ittarg == s_DepthRTs.mapTargets.end()) - nUpdateTarg = 0; - else if (ittarg->second == this) - { - ZZLog::Debug_Log("Updating self."); - nUpdateTarg = 0; - } - } - else if (ittarg->second == this) - { - ZZLog::Debug_Log("Updating self."); - nUpdateTarg = 0; - } - } - - SetViewport(); - - if (nUpdateTarg) - { - ZZshGLSetTextureParameter(ppsBaseTexture.prog, ppsBaseTexture.sFinal, ittarg->second->ptex, "BaseTexture.final"); - - //assert( ittarg->second->fbw == fbw ); - int offset = (fbp - ittarg->second->fbp) * 64 / fbw; - - if (PSMT_ISHALF(psm)) // 16 bit - offset *= 2; - - v.x = (float)RW(fbw); - v.y = (float)RH(fbh); - v.z = 0.25f; - v.w = (float)RH(offset) + 0.25f; - - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "g_fBitBltTex"); - -// v = DefaultBitBltTex(); Maybe? - ZZshDefaultOneColor ( ppsBaseTexture ); - - ZZshSetPixelShader(ppsBaseTexture.prog); - - nUpdateTarg = 0; - } - else - { - u32 bit_idx = (AA.x == 0) ? 0 : 1; - - // align the rect to the nearest page - // note that fbp is always aligned on page boundaries - tex0Info texframe; - texframe.tbp0 = fbp; - texframe.tbw = fbw; - texframe.tw = fbw; - texframe.th = fbh; - texframe.psm = psm; - // FIXME some field are not initialized... - // in particular the clut related one - assert(!PSMT_ISCLUT(psm)); - - // write color and zero out stencil buf, always 0 context! - // force bilinear if using AA - // Fix in r133 -- FFX movies and Gust backgrounds! - //SetTexVariablesInt(0, 0*(AA.x || AA.y) ? 2 : 0, texframe, false, &ppsBitBlt[!!s_AAx], 1); - SetTexVariablesInt(0, 0, texframe, false, &ppsBitBlt[bit_idx], 1); - ZZshGLSetTextureParameter(ppsBitBlt[bit_idx].prog, ppsBitBlt[bit_idx].sMemory, vb[0].pmemtarg->ptex->tex, "BitBlt.memory"); - - v = float4(1, 1, 0.0f, 0.0f); - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "g_fBitBltTex"); - - v.x = 1; - v.y = 2; - ZZshSetParameter4fv(ppsBitBlt[bit_idx].prog, ppsBitBlt[bit_idx].sOneColor, v, "g_fOneColor"); - - assert(ptex != 0); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - if (IsWriteDestAlphaTest()) - { - glEnable(GL_STENCIL_TEST); - glStencilFunc(GL_ALWAYS, 0, 0xff); - glStencilMask(0xff); - glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); - } - - // render with an AA shader if possible (bilinearly interpolates data) - //cgGLLoadProgram(ppsBitBlt[bit_idx].prog); - ZZshSetPixelShader(ppsBitBlt[bit_idx].prog); - } - - ZZshSetVertexShader(pvsBitBlt.prog); - - DrawTriangleArray(); - - // fill stencil buf only - FillOnlyStencilBuffer(); - glEnable(GL_SCISSOR_TEST); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - if (conf.mrtdepth && pdepth != NULL && IsWriteDepth()) pdepth->SetRenderTarget(1); - - status = TS_Resolved; - - // reset since settings changed - vb[0].bVarsTexSync = 0; - -// ResetAlphaVariables(); -} - -void CRenderTarget::ConvertTo32() -{ - FUNCLOG - - u32 ptexConv; -// ZZLog::Error_Log("Convert to 32, report if something missing."); - // create new target - - if (! InitialiseDefaultTexture(&ptexConv, RW(fbw), RH(fbh) / 2)) - { - ZZLog::Error_Log("Failed to create target for ConvertTo32 %dx%d.", RW(fbw), RH(fbh) / 2); - return; - } - - DisableAllgl(); - - SetShaderCaller("CRenderTarget::ConvertTo32"); - - // tex coords, test ffx bikanel island when changing these - float4 v = DefaultBitBltPos(); - v = DefaultBitBltTex(); - - v.x = (float)RW(16); - v.y = (float)RH(16); - v.z = -(float)RW(fbw); - v.w = (float)RH(8); - ZZshSetParameter4fv(ppsConvert16to32.prog, ppsConvert16to32.fTexOffset, v, "g_fTexOffset"); - - v.x = (float)RW(8); - v.y = 0; - v.z = 0; - v.w = 0.25f; - ZZshSetParameter4fv(ppsConvert16to32.prog, ppsConvert16to32.fPageOffset, v, "g_fPageOffset"); - - v.x = (float)RW(2 * fbw); - v.y = (float)RH(fbh); - v.z = 0; - v.w = 0.0001f * (float)RH(fbh); - ZZshSetParameter4fv(ppsConvert16to32.prog, ppsConvert16to32.fTexDims, v, "g_fTexDims"); - -// v.x = 0; -// ZZshSetParameter4fv(ppsConvert16to32.fTexBlock, v, "g_fTexBlock"); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - SET_STREAM(); - - // assume depth already set !? - FB::Attach2D(0, ptexConv); - ResetRenderTarget(1); - - BindToSample(&ptex); - ZZshGLSetTextureParameter(ppsConvert16to32.prog, ppsConvert16to32.sFinal, ptex, "Convert 16 to 32.Final"); - - fbh /= 2; // have 16 bit surfaces are usually 2x higher - SetViewport(); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - // render with an AA shader if possible (bilinearly interpolates data) - ZZshSetVertexShader(pvsBitBlt.prog); - ZZshSetPixelShader(ppsConvert16to32.prog); - DrawTriangleArray(); - -#ifdef _DEBUG - if (g_bSaveZUpdate) - { - // buggy - SaveTexture("tex1.tga", GL_TEXTURE_RECTANGLE_NV, ptex, RW(fbw), RH(fbh)*2); - SaveTexture("tex3.tga", GL_TEXTURE_RECTANGLE_NV, ptexConv, RW(fbw), RH(fbh)); - } - -#endif - - vposxy.y = -2.0f * (32767.0f / 8.0f) / (float)fbh; - vposxy.w = 1 + 0.5f / fbh; - - // restore - SAFE_RELEASE_TEX(ptex); - SAFE_RELEASE_TEX(ptexFeedback); - - ptex = ptexConv; - - // no need to free psys since the render target is getting shrunk - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - // reset textures - BindToSample(&ptex); - - glEnable(GL_SCISSOR_TEST); - - status = TS_Resolved; - - // TODO, reset depth? - if (icurctx >= 0) - { - // reset since settings changed - vb[icurctx].bVarsTexSync = 0; - vb[icurctx].bVarsSetTarg = 0; - } - - vb[0].bVarsTexSync = 0; -} - -void CRenderTarget::ConvertTo16() -{ - FUNCLOG - - u32 ptexConv; - -// ZZLog::Error_Log("Convert to 16, report if something missing."); - // create new target - - if (! InitialiseDefaultTexture(&ptexConv, RW(fbw), RH(fbh)*2)) - { - ZZLog::Error_Log("Failed to create target for ConvertTo16 %dx%d.", RW(fbw), RH(fbh)*2); - return; - } - - DisableAllgl(); - - SetShaderCaller("CRenderTarget::ConvertTo16"); - - // tex coords, test ffx bikanel island when changing these - float4 v = DefaultBitBltPos(); - v = DefaultBitBltTex(); - - v.x = 16.0f / (float)fbw; - v.y = 8.0f / (float)fbh; - v.z = 0.5f * v.x; - v.w = 0.5f * v.y; - ZZshSetParameter4fv(ppsConvert32to16.prog, ppsConvert32to16.fTexOffset, v, "g_fTexOffset"); - - v.x = 256.0f / 255.0f; - v.y = 256.0f / 255.0f; - v.z = 0.05f / 256.0f; - v.w = -0.001f / 256.0f; - ZZshSetParameter4fv(ppsConvert32to16.prog, ppsConvert32to16.fPageOffset, v, "g_fPageOffset"); - - v.x = (float)RW(fbw); - v.y = (float)RH(2 * fbh); - v.z = 0; - v.w = -0.1f / RH(fbh); - ZZshSetParameter4fv(ppsConvert32to16.prog, ppsConvert32to16.fTexDims, v, "g_fTexDims"); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - SET_STREAM(); - - // assume depth already set !? - FB::Attach2D(0, ptexConv); - ResetRenderTarget(1); - GL_REPORT_ERRORD(); - - BindToSample(&ptex); - - ZZshGLSetTextureParameter(ppsConvert32to16.prog, ppsConvert32to16.sFinal, ptex, "Convert 32 to 16"); - -// fbh *= 2; // have 16 bit surfaces are usually 2x higher - - SetViewport(); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - // render with an AA shader if possible (bilinearly interpolates data) - ZZshSetVertexShader(pvsBitBlt.prog); - ZZshSetPixelShader(ppsConvert32to16.prog); - DrawTriangleArray(); - -#ifdef _DEBUG - //g_bSaveZUpdate = 1; - if (g_bSaveZUpdate) - { - SaveTexture("tex1.tga", GL_TEXTURE_RECTANGLE_NV, ptexConv, RW(fbw), RH(fbh)); - } - -#endif - - vposxy.y = -2.0f * (32767.0f / 8.0f) / (float)fbh; - vposxy.w = 1 + 0.5f / fbh; - - // restore - SAFE_RELEASE_TEX(ptex); - SAFE_RELEASE_TEX(ptexFeedback); - - ptex = ptexConv; - - _aligned_free(psys); - - psys = _aligned_malloc(Tex_Memory_Size(fbw, fbh), 16); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - // reset textures - BindToSample(&ptex) ; - - glEnable(GL_SCISSOR_TEST); - - status = TS_Resolved; - - // TODO, reset depth? - if (icurctx >= 0) - { - // reset since settings changed - vb[icurctx].bVarsTexSync = 0; - vb[icurctx].bVarsSetTarg = 0; - } - - vb[0].bVarsTexSync = 0; -} - -void CRenderTarget::_CreateFeedback() -{ - FUNCLOG - - if (ptexFeedback == 0) - { - // create - if (! InitialiseDefaultTexture(&ptexFeedback, RW(fbw), RH(fbh))) - { - ZZLog::Error_Log("Failed to create feedback %dx%d.", RW(fbw), RH(fbh)); - return; - } - } - - DisableAllgl(); - - SetShaderCaller("CRenderTarget::_CreateFeedback"); - - // assume depth already set - ResetRenderTarget(1); - - // tex coords, test ffx bikanel island when changing these - /* float4 v = DefaultBitBltPos(); - v = float4 ((float)(RW(fbw+4)), (float)(RH(fbh+4)), +0.25f, -0.25f); - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "BitBltTex");*/ - - // tex coords, test ffx bikanel island when changing these - -// float4 v = float4(1, -1, 0.5f / (fbw << AA.x), 0.5f / (fbh << AA.y)); -// v *= 1/32767.0f; -// cgGLSetParameter4fv(pvsBitBlt.sBitBltPos, v); - float4 v = DefaultBitBltPos(); - - v.x = (float)(RW(fbw)); - v.y = (float)(RH(fbh)); - v.z = 0.0f; - v.w = 0.0f; - ZZshSetParameter4fv(pvsBitBlt.prog, pvsBitBlt.sBitBltTex, v, "BitBlt.Feedback"); - ZZshDefaultOneColor(ppsBaseTexture); - - glBindBuffer(GL_ARRAY_BUFFER, vboRect); - SET_STREAM(); - - FB::Attach2D(0, ptexFeedback); - glBindTexture(GL_TEXTURE_RECTANGLE_NV, ptex); - GL_REPORT_ERRORD(); - - ZZshGLSetTextureParameter(ppsBaseTexture.prog, ppsBaseTexture.sFinal, ptex, "BaseTexture.Feedback"); - - SetViewport(); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - // render with an AA shader if possible (bilinearly interpolates data) - ZZshSetVertexShader(pvsBitBlt.prog); - ZZshSetPixelShader(ppsBaseTexture.prog); - DrawTriangleArray(); - - // restore - swap(ptex, ptexFeedback); - - if (conf.wireframe()) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - - glEnable(GL_SCISSOR_TEST); - - status |= TS_FeedbackReady; - - // TODO, reset depth? - if (icurctx >= 0) - { - // reset since settings changed - vb[icurctx].bVarsTexSync = 0; - } - - GL_REPORT_ERRORD(); -} - -void CRenderTarget::SetRenderTarget(int targ) -{ - FUNCLOG - - FB::Attach2D(targ, ptex); - - //GL_REPORT_ERRORD(); - //if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT) - //ERROR_LOG_SPAM("The Framebuffer is not complete. Glitches could appear onscreen.\n"); -} - -void CRenderTargetMngr::Destroy() -{ - FUNCLOG - - for (MAPTARGETS::iterator it = mapTargets.begin(); it != mapTargets.end(); ++it) - { - delete it->second; - } - - mapTargets.clear(); - - for (MAPTARGETS::iterator it = mapDummyTargs.begin(); it != mapDummyTargs.end(); ++it) - { - delete it->second; - } - - mapDummyTargs.clear(); -} - -// This block was repeated several times, so I inlined it. -void CRenderTargetMngr::DestroyAllTargetsHelper(void* ptr) -{ - for (int i = 0; i < 2; ++i) - { - if (ptr == vb[i].prndr) { vb[i].prndr = NULL; vb[i].bNeedFrameCheck = 1; } - if (ptr == vb[i].pdepth) { vb[i].pdepth = NULL; vb[i].bNeedZCheck = 1; } - } -} - -void CRenderTargetMngr::DestroyAllTargs(int start, int end, int fbw) -{ - FUNCLOG - - for (MAPTARGETS::iterator it = mapTargets.begin(); it != mapTargets.end();) - { - if (it->second->start < end && start < it->second->end) - { - // if is depth, only resolve if fbw is the same - if (!it->second->IsDepth()) - { - // only resolve if the widths are the same or it->second has bit outside the range - // shadow of colossus swaps between fbw=256,fbh=256 and fbw=512,fbh=448. This kills the game if doing || it->second->end > end - - // kh hack, sometimes kh movies do this to clear the target, so have a static count that periodically checks end - static int count = 0; - - if (it->second->fbw == fbw || (it->second->fbw != fbw && (it->second->start < start || ((count++&0xf) ? 0 : it->second->end > end)))) - { - it->second->Resolve(); - } - else - { - FlushIfNecesary(it->second); - it->second->status |= CRenderTarget::TS_Resolved; - } - } - else - { - if (it->second->fbw == fbw) - { - it->second->Resolve(); - } - else - { - FlushIfNecesary(it->second); - it->second->status |= CRenderTarget::TS_Resolved; - } - } - - DestroyAllTargetsHelper(it->second); - - u32 dummykey = GetFrameKeyDummy(it->second); - - if (mapDummyTargs.find(dummykey) == mapDummyTargs.end()) - { - mapDummyTargs[dummykey] = it->second; - } - else - { - delete it->second; - } - - mapTargets.erase(it++); - } - else - { - ++it; - } - } -} - -void CRenderTargetMngr::DestroyTarg(CRenderTarget* ptarg) -{ - FUNCLOG - DestroyAllTargetsHelper(ptarg); - delete ptarg; -} - -void CRenderTargetMngr::DestroyIntersecting(CRenderTarget* prndr) -{ - FUNCLOG - assert(prndr != NULL); - - int start, end; - GetRectMemAddressZero(start, end, prndr->psm, prndr->fbw, prndr->fbh, prndr->fbp, prndr->fbw); - - for (MAPTARGETS::iterator it = mapTargets.begin(); it != mapTargets.end();) - { - if ((it->second != prndr) && (it->second->start < end) && (start < it->second->end)) - { - it->second->Resolve(); - DestroyAllTargetsHelper(it->second); - u32 dummykey = GetFrameKeyDummy(it->second); - - if (mapDummyTargs.find(dummykey) == mapDummyTargs.end()) - { - mapDummyTargs[dummykey] = it->second; - } - else - { - delete it->second; - } - - mapTargets.erase(it++); - } - else - { - ++it; - } - } -} - - -void CRenderTargetMngr::PrintTargets() -{ -#ifdef _DEBUG - for (MAPTARGETS::iterator it1 = mapDummyTargs.begin(); it1 != mapDummyTargs.end(); ++it1) - ZZLog::Debug_Log("\t Dummy Targets(0x%x) fbw:0x%x fbh:0x%x psm:0x%x fbp:0x%x", GetFrameKey(it1->second), it1->second->fbw, it1->second->fbh, it1->second->psm, it1->second->fbp); - - for (MAPTARGETS::iterator it1 = mapTargets.begin(); it1 != mapTargets.end(); ++it1) - ZZLog::Debug_Log("\t Targets(0x%x) fbw:0x%x fbh:0x%x psm:0x%x fbp:0x%x", GetFrameKey(it1->second), it1->second->fbw, it1->second->fbh, it1->second->psm, it1->second->fbp); -#endif -} - -bool CRenderTargetMngr::isFound(const frameInfo& frame, MAPTARGETS::iterator& it, u32 opts, u32 key, int maxposheight) -{ - // only enforce height if frame.fbh <= 0x1c0 - bool bfound = it != mapTargets.end(); - - if (bfound) - { - if (opts&TO_StrictHeight) - { - bfound = it->second->fbh == frame.fbh; - - if ((conf.settings().partial_depth) && !bfound) - { - MAPTARGETS::iterator itnew = mapTargets.find(key + 1); - - if (itnew != mapTargets.end() && itnew->second->fbh == frame.fbh) - { - // found! delete the previous and restore - delete it->second; - mapTargets.erase(it); - - it = mapTargets.insert(MAPTARGETS::value_type(key, itnew->second)).first; // readd - mapTargets.erase(itnew); // delete old - - bfound = true; - } - } - } - else - { - if (PSMT_ISHALF(frame.psm) == PSMT_ISHALF(it->second->psm) && !(conf.settings().full_16_bit_res)) - bfound = ((frame.fbh > 0x1c0) || (it->second->fbh >= frame.fbh)) && (it->second->fbh <= maxposheight); - } - } - - if (!bfound) - { - // might be a virtual target - it = mapTargets.find(key | TARGET_VIRTUAL_KEY); - bfound = it != mapTargets.end() && ((opts & TO_StrictHeight) ? it->second->fbh == frame.fbh : it->second->fbh >= frame.fbh) && it->second->fbh <= maxposheight; - } - - if (bfound && PSMT_ISHALF(frame.psm) && PSMT_ISHALF(it->second->psm) && (conf.settings().full_16_bit_res)) - { - // mgs3 - if (frame.fbh > it->second->fbh) - { - bfound = false; - } - } - - return bfound; -} - -CRenderTarget* CRenderTargetMngr::GetTarg(const frameInfo& frame, u32 opts, int maxposheight) -{ - FUNCLOG - - if (frame.fbw <= 0 || frame.fbh <= 0) - { - //ZZLog::Dev_Log("frame fbw == %d; fbh == %d", frame.fbw, frame.fbh); - return NULL; - } - - GL_REPORT_ERRORD(); - - u32 key = GetFrameKey(frame); - - MAPTARGETS::iterator it = mapTargets.find(key); - - if (isFound(frame, it, opts, key, maxposheight)) - { - // can be both 16bit and 32bit - if (PSMT_ISHALF(frame.psm) != PSMT_ISHALF(it->second->psm)) - { - // a lot of games do this, actually... - ZZLog::Debug_Log("Really bad formats! %d %d", frame.psm, it->second->psm); - -// This code SHOULD be commented, until I redo the _Resolve function - - if (!(opts & TO_StrictHeight)) - { - if ((conf.settings().vss_hack_off)) - { - if (PSMT_ISHALF(it->second->psm)) - { - it->second->status |= CRenderTarget::TS_NeedConvert32; - it->second->fbh /= 2; - } - else - { - it->second->status |= CRenderTarget::TS_NeedConvert16; - it->second->fbh *= 2; - } - } - } - - // recalc extents - GetRectMemAddressZero(it->second->start, it->second->end, frame.psm, frame.fbw, it->second->fbh, it->second->fbp, frame.fbw); - } - else - { - // certain variables have to be reset every time - if ((it->second->psm & ~1) != (frame.psm & ~1)) - { - ZZLog::Dev_Log("Bad formats 2: %d %d", frame.psm, it->second->psm); - - it->second->psm = frame.psm; - - // recalc extents - GetRectMemAddressZero(it->second->start, it->second->end, frame.psm, frame.fbw, it->second->fbh, it->second->fbp, frame.fbw); - } - } - - if (it->second->fbm != frame.fbm) - { - //ZZLog::Dev_Log("Bad fbm: 0x%8.8x 0x%8.8x, psm: %d", frame.fbm, it->second->fbm, frame.psm); - } - - it->second->fbm &= frame.fbm; - it->second->psm = frame.psm; // have to convert (ffx2) - - if ((it->first & TARGET_VIRTUAL_KEY) && !(opts&TO_Virtual)) - { - // switch - it->second->lastused = timeGetTime(); - return Promote(it->first&~TARGET_VIRTUAL_KEY); - } - - // check if there exists a more recent target that this target could update from - // only update if target isn't mirrored - bool bCheckHalfCovering = (conf.settings().full_16_bit_res) && PSMT_ISHALF(it->second->psm) && it->second->fbh + 32 < frame.fbh; - - for (MAPTARGETS::iterator itnew = mapTargets.begin(); itnew != mapTargets.end(); ++itnew) - { - if (itnew->second != it->second && itnew->second->ptex != it->second->ptex && itnew->second->ptexFeedback != it->second->ptex && - itnew->second->lastused > it->second->lastused && !(itnew->second->status & CRenderTarget::TS_NeedUpdate)) - { - - // if new target totally encompasses the current one - if (itnew->second->start <= it->second->start && itnew->second->end >= it->second->end) - { - it->second->status |= CRenderTarget::TS_NeedUpdate; - it->second->nUpdateTarg = itnew->first; - break; - } - - // if 16bit, then check for half encompassing targets - if (bCheckHalfCovering && itnew->second->start > it->second->start && itnew->second->start < it->second->end && itnew->second->end <= it->second->end + 0x2000) - { - it->second->status |= CRenderTarget::TS_NeedUpdate; - it->second->nUpdateTarg = itnew->first; - break; - } - } - } - - it->second->lastused = timeGetTime(); - - return it->second; - } - - // NOTE: instead of resolving, if current render targ is completely outside of old, can transfer - // the data like that. - - // first search for the target - CRenderTarget* ptarg = NULL; - - // have to change, so recreate (find all intersecting targets and Resolve) - u32 besttarg = 0; - - if (!(opts & CRenderTargetMngr::TO_Virtual)) - { - - int start, end; - GetRectMemAddressZero(start, end, frame.psm, frame.fbw, frame.fbh, frame.fbp, frame.fbw); - CRenderTarget* pbesttarg = NULL; - - if (besttarg == 0) - { - // if there is only one intersecting target and it encompasses the current one, update the new render target with - // its data instead of resolving then updating (ffx2). Do not change the original target. - for (MAPTARGETS::iterator it = mapTargets.begin(); it != mapTargets.end(); ++it) - { - if (it->second->start < end && start < it->second->end) - { - if ((conf.settings().fast_update) || - ((frame.fbw == it->second->fbw) && - // check depth targets only if partialdepth option - ((it->second->fbp != frame.fbp) || ((conf.settings().partial_depth) && (opts & CRenderTargetMngr::TO_DepthBuffer))))) - { - if (besttarg != 0) - { - besttarg = 0; - break; - } - - if (start >= it->second->start && end <= it->second->end) - { - besttarg = it->first; - pbesttarg = it->second; - } - } - } - } - } - - if (besttarg != 0 && pbesttarg->fbw != frame.fbw) - { - //ZZLog::Debug_Log("A %d %d %d %d\n", frame.psm, frame.fbw, pbesttarg->psm, pbesttarg->fbw); - - vb[0].frame.fbw = pbesttarg->fbw; - // Something should be here, but what? - } - - if (besttarg == 0) - { - // if none found, resolve all - DestroyAllTargs(start, end, frame.fbw); - } - else if (key == besttarg && pbesttarg != NULL) - { - // add one and store in a different location until best targ is processed - mapTargets.erase(besttarg); - besttarg++; - mapTargets[besttarg] = pbesttarg; - } - } - - if (mapTargets.size() > 8) - { - // release some resources - it = GetOldestTarg(mapTargets); - - // if more than 5s passed since target used, destroy - - if ((it->second != vb[0].prndr) && (it->second != vb[1].prndr) && - (it->second != vb[0].pdepth) && (it->second != vb[1].pdepth) && - ((timeGetTime() - it->second->lastused) > 5000)) - { - delete it->second; - mapTargets.erase(it); - } - } - - if (ptarg == NULL) - { - // not found yet, so create - - if (mapDummyTargs.size() > 8) - { - it = GetOldestTarg(mapDummyTargs); - - delete it->second; - mapDummyTargs.erase(it); - } - - it = mapDummyTargs.find(GetFrameKeyDummy(frame)); - - if (it != mapDummyTargs.end()) - { - ZZLog::Debug_Log("Dummy Frame fbw:0x%x fbh:0x%x psm:0x%x fbp:0x%x", frame.fbw, frame.fbh, frame.psm, frame.fbp); - PrintTargets(); - ZZLog::Debug_Log("Dummy it->second fbw:0x%x fbh:0x%x psm:0x%x fbp:0x%x", it->second->fbw, it->second->fbh, it->second->psm, it->second->fbp); - ptarg = it->second; - - mapDummyTargs.erase(it); - - // restore all setttings - ptarg->psm = frame.psm; - ptarg->fbm = frame.fbm; - ptarg->fbp = frame.fbp; - - GetRectMemAddressZero(ptarg->start, ptarg->end, frame.psm, frame.fbw, frame.fbh, frame.fbp, frame.fbw); - - ptarg->status = CRenderTarget::TS_NeedUpdate; - } - else - { - ZZLog::Debug_Log("Frame fbw:0x%x fbh:0x%x psm:0x%x fbp:0x%x", frame.fbw, frame.fbh, frame.psm, frame.fbp); - PrintTargets(); - // create anew - ptarg = (opts & TO_DepthBuffer) ? new CDepthTarget : new CRenderTarget; - CRenderTargetMngr* pmngrs[2] = { &s_DepthRTs, this == &s_RTs ? &s_RTs : NULL }; - int cur = 0; - - while (!ptarg->Create(frame)) - { - // destroy unused targets - if (mapDummyTargs.size() > 0) - { - it = mapDummyTargs.begin(); - delete it->second; - mapDummyTargs.erase(it); - continue; - } - - if (g_MemTargs.listClearedTargets.size() > 0) - { - g_MemTargs.DestroyCleared(); - continue; - } - else if (g_MemTargs.listTargets.size() > 32) - { - g_MemTargs.DestroyOldest(); - continue; - } - - if (pmngrs[cur] == NULL) - { - cur = !cur; - - if (pmngrs[cur] == NULL) - { - ZZLog::Warn_Log("Out of memory!"); - delete ptarg; - return NULL; - } - } - - if (pmngrs[cur]->mapTargets.size() == 0) - { - pmngrs[cur] = NULL; - cur = !cur; - continue; - } - - it = GetOldestTarg(pmngrs[cur]->mapTargets); - - DestroyTarg(it->second); - pmngrs[cur]->mapTargets.erase(it); - cur = !cur; - } - } - } - - if ((opts & CRenderTargetMngr::TO_Virtual)) - { - ptarg->status = CRenderTarget::TS_Virtual; - key |= TARGET_VIRTUAL_KEY; - - if ((it = mapTargets.find(key)) != mapTargets.end()) - { - - DestroyTarg(it->second); - it->second = ptarg; - ptarg->nUpdateTarg = besttarg; - return ptarg; - } - } - else - { - assert(mapTargets.find(key) == mapTargets.end()); - } - - ptarg->nUpdateTarg = besttarg; - - mapTargets[key] = ptarg; - - return ptarg; -} - -CRenderTargetMngr::MAPTARGETS::iterator CRenderTargetMngr::GetOldestTarg(MAPTARGETS& m) -{ - FUNCLOG - - if (m.size() == 0) - { - return m.end(); - } - - // release some resources - MAPTARGETS::iterator itmaxtarg = m.begin(); - - for (MAPTARGETS::iterator it = ++m.begin(); it != m.end(); ++it) - { - if (itmaxtarg->second->lastused < it->second->lastused) itmaxtarg = it; - } - - return itmaxtarg; -} - -void CRenderTargetMngr::GetTargs(int start, int end, list& listTargets) const -{ - FUNCLOG - - for (MAPTARGETS::const_iterator it = mapTargets.begin(); it != mapTargets.end(); ++it) - { - if ((it->second->start < end) && (start < it->second->end)) listTargets.push_back(it->second); - } -} - -void CRenderTargetMngr::Resolve(int start, int end) -{ - FUNCLOG - - for (MAPTARGETS::const_iterator it = mapTargets.begin(); it != mapTargets.end(); ++it) - { - if ((it->second->start < end) && (start < it->second->end)) - it->second->Resolve(); - } -} - diff -Nru pcsx2-1.3.1+dfsg/README.md pcsx2-1.4.0/README.md --- pcsx2-1.3.1+dfsg/README.md 2014-07-31 04:48:24.000000000 +0000 +++ pcsx2-1.4.0/README.md 2016-01-05 17:28:08.000000000 +0000 @@ -19,7 +19,7 @@ * 512MB RAM (note Vista needs at least 2GB to run reliably) ## Recommended -* Windows Vista / Windows 7 (32bit or 64bit) with the [latest DirectX](http://www.microsoft.com/en-us/download/details.aspx?id=35) +* Windows Vista / Windows 7 (32bit or 64bit) with the [latest DirectX](https://www.microsoft.com/en-us/download/details.aspx?id=8109) * CPU: Intel Core 2 Duo @ 3.2ghz or better * GPU: 8800gt or better (for Direct3D10 support) * RAM: 1GB on Linux/Windows XP, 2GB or more on Vista diff -Nru pcsx2-1.3.1+dfsg/travis.sh pcsx2-1.4.0/travis.sh --- pcsx2-1.3.1+dfsg/travis.sh 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/travis.sh 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,79 @@ +#!/bin/sh + +set -ex + +linux_before_install() { + # Build worker is 64-bit only by default it seems. + sudo dpkg --add-architecture i386 + + # Compilers + if [ "${CXX}" = "clang++" ]; then + sudo apt-key adv --fetch-keys http://llvm.org/apt/llvm-snapshot.gpg.key + sudo add-apt-repository -y "deb http://llvm.org/apt/trusty/ llvm-toolchain-trusty-${VERSION} main" + # g++-4.8-multilib is necessary for compiler dependencies. Well, I think + # the specific dependency is probably lib32gcc-4.8-dev. + COMPILER_PACKAGE="clang-${VERSION} g++-4.8-multilib" + fi + if [ "${CXX}" = "g++" ]; then + sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test + COMPILER_PACKAGE="g++-${VERSION}-multilib" + fi + + sudo apt-get -qq update + + # The 64-bit versions of the first 7 dependencies are part of the initial + # build image. libgtk2.0-dev:i386 and libsdl2-dev:i386 require the 32-bit + # versions of the dependencies, and the 2 versions conflict. So those + # dependencies must be explicitly installed. + sudo apt-get -qq -y install \ + gir1.2-freedesktop:i386 \ + gir1.2-gdkpixbuf-2.0:i386 \ + gir1.2-glib-2.0:i386 \ + libcairo2-dev:i386 \ + libgdk-pixbuf2.0-dev:i386 \ + libgirepository-1.0-1:i386 \ + libglib2.0-dev:i386 \ + libaio-dev:i386 \ + libasound2-dev:i386 \ + libgl1-mesa-dev:i386 \ + libgtk2.0-dev:i386 \ + liblzma-dev:i386 \ + libpng12-dev:i386 \ + libsdl2-dev:i386 \ + libsoundtouch-dev:i386 \ + libwxgtk3.0-dev:i386 \ + libxext-dev:i386 \ + portaudio19-dev:i386 \ + zlib1g-dev:i386 \ + ${COMPILER_PACKAGE} + + # libpng++-dev is noarch but doesn't install nicely. + apt-get download libpng++-dev + sudo dpkg --force-all -i $(ls | grep 'libpng++-dev') +} + +linux_script() { + mkdir build + cd build + + export CC=${CC}-${VERSION} CXX=${CXX}-${VERSION} + cmake \ + -DCMAKE_TOOLCHAIN_FILE=cmake/linux-compiler-i386-multilib.cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_REPLAY_LOADERS=TRUE \ + -DCMAKE_BUILD_PO=FALSE \ + .. + + # Documentation says 1.5 cores, so 2 or 3 threads should work ok. + make -j3 install +} + +# Just in case I do manual testing and accidentally insert "rm -rf /" +case "${1}" in +before_install|script) + ${TRAVIS_OS_NAME}_${1} + ;; +*) + echo "Unknown command" && false + ;; +esac diff -Nru pcsx2-1.3.1+dfsg/.travis.yml pcsx2-1.4.0/.travis.yml --- pcsx2-1.3.1+dfsg/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ pcsx2-1.4.0/.travis.yml 2016-01-05 17:28:08.000000000 +0000 @@ -0,0 +1,23 @@ +language: cpp + +sudo: required +dist: trusty + +matrix: + include: +# Version 5 seems to be whatever is latest - for now it's 5.2 + - env: VERSION=5 + compiler: gcc + os: linux + - env: VERSION=4.9 + compiler: gcc + os: linux + - env: VERSION=3.7 + compiler: clang + os: linux + +before_install: + - ./travis.sh before_install + +script: + - ./travis.sh script